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.
Open source · MIT · Deploys with one command
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.
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.
slurp cloud init
slurp setup
slurp init --name "My app"
slurp send signed_up --user-id demo --data '{"demo":true}'
slurp syncCheck 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.
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.
| Product | 1M | 10M | 50M | 100M | 1B | 10B |
|---|---|---|---|---|---|---|
| Slurp, self-hosted on Cloudflare | Free | $0.43 | $7.96 | $11.21 | $42 to $280 | $420 to $3,200 |
| PostHog · Product Analytics | Free | $324.40 | $1,528.40 | $2,618.40 | $11,618.40 | $92,618.40 |
| Mixpanel · Growth (yearly billing) | Free | $840 | Contact sales | Contact sales | Contact sales | Contact sales |
| Amplitude · Plus | Free | Not published | Not published | Not published | Not published | Not published |
| OpenPanel · Cloud (monthly) | $90 | $350 | $900 | Custom plan | Custom plan | Custom 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.
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.gzarchives 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.
Honest limits.
- Freshness. New events show up in
slurp syncafter the next seal, about 10 minutes by default. Change it withSEAL_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_DAYSto 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.