Product events, on your terms

You already have a data science expert.
Your coding agent.

Slurp collects events and user feedback in your own Cloudflare account. slurp sync pulls them to your laptop (or an external SSD) as a DuckDB file. Your agent analyzes them with SQL, finds what to fix and ships the change.

events + feedback→DuckDB→your agent→a better product

YOUR TERMINAL
$ slurp sync

Cloudflare archives.
A local DuckDB file.
Ready for your agent.

Your data stays yours.
A report written by a coding agent: export completion by week drops from 94% to 79% when v1.2.4 ships, then recovers
Written by an agent from your dataSample data · Open the live report ↗

Monthly USD · 50M events

50 million events.
About $8 a month.*

  • Slurp$7.96Estimated bill for your own Cloudflare account
  • OpenPanel Cloud$900Managed analytics
  • PostHog$1,528.40Managed product analytics

*List-price estimate: 20 events per request, 12 months of archives kept, no Slurp fee. You pay Cloudflare directly. Assumptions, plus 1B and 10B events →

01 / THE LOOP

Instrument once. Ask better questions.

Keep your existing coding agent. Give it what your users do and say, and let it act on it.

1. Collect

Your agent adds events as it builds the feature, and your app sends what users say the same way. JavaScript SDK, or plain HTTP from any language.

track('feedback', { message });

2. Pull

Events and feedback wait in your Cloudflare account, even while your laptop is off. One command brings the new ones to your laptop or an external SSD.

slurp sync

3. Analyze

Your agent queries the local DuckDB file, finds the pattern behind the numbers and writes the report.

slurp sql 'SELECT …'

4. Act

Your agent fixes what it found. Give any bot (Claude Code, Codex, Grok, a Slack bot) its own revocable read key and it can sync and query the same data.

slurp source key create
02 / REPORTS

What your agent hands back.

Real reports built by Slurp from sample data, through the same pipeline you would use: line and bar charts, heatmaps, donuts, scatter plots, funnels and areas, in any Perspective theme, with retention, funnels, visits and next-step paths from DuckDB's behavioral functions. Open one: each is an ordinary self-contained HTML file.

Sample data from a fictional app, generated by examples/demo and loaded through a real Worker. Nothing here is customer data.

03 / MARKDOWN

Your agent writes the report in Markdown.

A report is a Markdown file with named SQL and a few blocks. The query stays with the finding, so every number can be reproduced. This is the whole source of the chart beside it.

by-release.md
---
purpose: Which release broke exports
---

# Which release broke exports?

```sql by_release
SELECT
  context->>'$.app.version' AS release,
  round(100.0 * count(*) FILTER (
    WHERE event = 'export_completed'
  ) / count(*) FILTER (
    WHERE event = 'export_started'
  ), 1) AS completed
FROM events
GROUP BY 1
ORDER BY 1
```

```chart
query: by_release
title: Exports completed, % of started
spec:
  height: 170
  mark: bar
  encoding:
    x:
      field: release
      axis: {labelAngle: 0}
      title: null
    y:
      field: completed
      type: quantitative
      title: null
    color:
      field: release
      legend: null
```
The rendered chart: exports completed by release, with v1.2.4 lower than the others
What slurp report build makes from it
  • Markdown is the source of truth. Diffable, reviewable, sanitized.
  • HTML is the main output. One self-contained file with its charts and fonts.
  • PNG and PDF come from the same source. Ready for Slack, email and slides.
  • Your agent already knows how. slurp agent setup installs the skill.
Terminal
slurp report check report.md
slurp report build report.md --out ./report --png --pdf
slurp report open ./report
04 / IN CODE

A few lines. Real events.

A publishable key sends events. Your read key brings them home.

JavaScript / Node
import { init, track, flush } from '@slurp/sdk';

init({
  endpoint: 'YOUR_INGEST_URL',
  sourceId: 'YOUR_SOURCE_ID',
  key: 'YOUR_PUBLISHABLE_KEY',
});

track('signed_up', { plan: 'pro' });
await flush(); // Node: flush before exiting

The SDK is private until published. The quickstart includes installation from source.

05 / CONNECTIONS

Bring more of your stack.

Start with SDK capture, HTTP, and your coding agent. Explore what could come next.

JavaScript / TypeScript

Browser and Node event capture. Install the private SDK from source.

Setup guide ↗
Available locally
HTTP API

Send canonical events as NDJSON to your configured backend.

Setup guide ↗
Works today
Stripe

Payments and subscriptions.

Exploring
GitHub

Pushes, pull requests, and releases.

Exploring
Linear

Issues and cycles.

Exploring
Sentry

Errors and releases.

Exploring
All connections and ideas ↗
06 / YOUR TOOLKIT

Your data. Your machine. Your agent.

DuckDB

Query your local events with SQL. Keep the data you have already synced.

Your coding agent

Install Slurp’s skills for instrumentation, analysis, and product improvement.

Reports

Save SQL and Markdown. Build self-contained HTML, PNG, and PDF output.