Self-host

Your events.
Your Cloudflare account.

Slurp runs as one Worker, two Durable Object classes and an R2 bucket in your own Cloudflare account. No servers to run, no data leaving your account, and the Free plan is enough to start.

Self-host

Run Slurp in your own Cloudflare account.

Your Worker, Durable Objects and R2 bucket live in your account. Slurp does not host your events. The Free plan is enough to start.

  1. Open Cloudflare's deploy page. It copies this project's backend into your account and creates the R2 bucket and Durable Objects for you.
  2. When it asks for ADMIN_TOKEN, paste a long random value, for example from openssl rand -base64 32. Keep it, for example in a file called admin-token.txt: it controls your deployment.
  3. When it finishes, open your new Worker's address (Cloudflare shows it, and it looks like https://slurp.YOUR-SUBDOMAIN.workers.dev). The page there shows the exact command to connect the CLI:
Terminal
slurp connect https://slurp.YOUR-SUBDOMAIN.workers.dev \
  --token-stdin < admin-token.txt
slurp setup
slurp init --name "My app"
Open Cloudflare deploy page ↗
Read the quickstart

Open source · MIT · Deploys with one command

01 / WHAT YOU GET

The whole pipeline, in your account.

1. Capture

Your app sends events with the SDK or plain HTTP to your Worker. Each one is validated, stamped with arrival time and, if you allow it, the visitor's country, region and city from Cloudflare.

2. Store

Events are buffered durably, then sealed into compressed archives in your R2 bucket. Archives are immutable and checksummed.

3. Ask

The CLI downloads new archives into a DuckDB file on your machine. Your coding agent queries it with SQL and builds reports.

02 / DEPLOY

One command.

slurp cloud init logs in to Cloudflare, creates the R2 bucket, deploys the Worker with its Durable Objects, sets a generated admin token and connects your computer. No checkout of the Worker source and no npm install: the Worker ships inside the CLI.

Self-host

Run Slurp in your own Cloudflare account.

Your Worker, Durable Objects and R2 bucket live in your account. Slurp does not host your events. The Free plan is enough to start.

  1. Open Cloudflare's deploy page. It copies this project's backend into your account and creates the R2 bucket and Durable Objects for you.
  2. When it asks for ADMIN_TOKEN, paste a long random value, for example from openssl rand -base64 32. Keep it, for example in a file called admin-token.txt: it controls your deployment.
  3. When it finishes, open your new Worker's address (Cloudflare shows it, and it looks like https://slurp.YOUR-SUBDOMAIN.workers.dev). The page there shows the exact command to connect the CLI:
Terminal
slurp connect https://slurp.YOUR-SUBDOMAIN.workers.dev \
  --token-stdin < admin-token.txt
slurp setup
slurp init --name "My app"
Open Cloudflare deploy page ↗
Terminal
slurp cloud init
slurp setup
slurp init --name "My app"
slurp send signed_up --user-id demo --data '{"demo":true}'
slurp sync

Check on it any time with slurp cloud status or slurp cloud doctor. slurp cloud upgrade redeploys a newer Worker and keeps your data. slurp cloud destroy removes everything.

03 / WHAT IT COSTS

Cents to start. A few hundred to a few thousand at 10 billion.

You pay Cloudflare directly, at list price, for what your Worker uses. Most small and medium apps fit inside the Workers Free plan. Past that, Workers Paid is $5 a month plus usage. Hosted analytics tools bill by event volume, so the gap widens as you grow.

Monthly USD before tax, by events per month
Product1M10M50M100M1B10B
Slurp, self-hosted on CloudflareFree$0.43$7.96$11.21$42 to $280$420 to $3,200
PostHog · Product AnalyticsFree$324.40$1,528.40$2,618.40$11,618.40$92,618.40
Mixpanel · Growth (yearly billing)Free$840Contact salesContact salesContact salesContact sales
Amplitude · PlusFreeNot publishedNot publishedNot publishedNot publishedNot published
OpenPanel · Cloud (monthly)$90$350$900Custom planCustom planCustom plan

Prices read from each vendor's public pricing page on November 6, 2026; check them before deciding, they change. Mixpanel is yearly billing (monthly billing costs more). Amplitude does not publish paid event prices, and Mixpanel and OpenPanel direct high volumes to sales. OpenPanel can also be self-hosted for free.

How the Slurp row is estimated. It is the Cloudflare bill for running your own Worker, not a Slurp fee: 20 events per request, about 320 bytes per event stored, 12 months of archives kept, and Cloudflare's list prices (Workers Free until about 50K requests a day, then Workers Paid at $5 a month plus usage). Storage is billed on its own at $0.015 per GB-month above 10 GB; set a retention limit to cap it. Sending bigger batches lowers the cost; sending single events raises it. It is an estimate, so compare it with your own Cloudflare bill.

Why 1B and 10B are ranges. We load-tested one source at about 5,000 events a second (roughly 13 billion a month if it never let up), which is where the 10B row assumes peaks need 3 sources. Billed-side usage was measured at small scale and extrapolated; we have not run these volumes for a month. The low end assumes 200-byte events sent 100 to a request, the high end 1 KB events sent 5 to a request, 12 months kept either way. About two thirds of the bill is R2 storage, so event size and retention matter most. Hover a range for the central estimate.

04 / HOW IT WORKS

Built from Cloudflare primitives that last.

  • One Durable Object per source groups concurrent requests into one write, acknowledges only after the data is durable, and seals about every 10 minutes (or at 8 MB) into jsonl.gz archives with a gapless sequence and a SHA-256 for each.
  • R2 keeps the archives. The CLI never gets R2 credentials: it asks your Worker for short-lived signed download links.
  • The CLI verifies every archive, imports it into DuckDB idempotently, and remembers where it stopped, so retries and overlaps never duplicate events.
  • Keys come in two kinds: publishable keys can only send events (safe in a browser), secret keys can only read one source's archives.
05 / GOOD TO KNOW

Honest limits.

  • Freshness. New events show up in slurp sync after the next seal, about 10 minutes by default. Change it with SEAL_INTERVAL_MS.
  • Free plan cap. Cloudflare limits Free Workers and Durable Objects to 100,000 requests a day. At 20 events per request that is roughly 2M events a day. If you hit it, the SDK keeps events and retries; upgrade to Paid to lift it.
  • Retention. Archives stay in R2 until you delete them. Set RETENTION_DAYS to expire old ones.
  • Security. Anyone with your admin token controls the deployment. Store it in a password manager, and create a separate read key for each bot.
  • No accounts or billing. There are no logins, plans or invoices from Slurp. The admin token is the only credential.