Sending data to Erdi

Erdi never connects to your database. You post what you want on the timeline, from wherever your data already lives. Postgres, MySQL, Mongo, Firebase, a spreadsheet — it makes no difference. The features described in these docs are the current state of the product and will keep evolving.

  • API — Post events and metrics from cron, CI, or scripts/erdi-event.sh when a webhook is not available.
  • Support messages —
  • Your own numbers — Users, revenue and whatever your product counts, from your own database.
  • Web attribution — Optional marketing-site snippet and Stripe or Paddle Checkout visitor id — first touch to checkout.
  • Vercel — Deployments become events on the timeline. Vercel webhooks need a Pro plan — on Hobby, post from your coding agent.
  • GitHub — Releases, tags and closed user-facing issues.
  • Paddle — Subscriptions and payments become events on the timeline. Need a visitor snippet first? Create one in Settings → API. For web attribution, pass customData.ek_visitor_id (localStorage ek_vid) into Paddle.Checkout.open.
  • Stripe Checkout attribution — Checkout completions with a visitor id become attribution markers on the timeline. Need a visitor snippet first? Create one in Settings → API.
  • Sentry — New error and fatal issues, once.
  • Netlify — Production deploys become events on the timeline.
  • RevenueCat — Trials, purchases, cancellations and billing issues. Sandbox counts land on separate *_sandbox metrics.
  • Stripe — Revenue, new customers and new paying users.
  • App Store Connect — Downloads, updates and proceeds.
  • Apple Ads — Spend, installs, tap-through and conversion rates, cost per acquisition and cost per tap.
  • Play Console — Installs and uninstalls.
  • Plausible — Visitors and pageviews.
  • Umami — Visitors and pageviews.

What these numbers are and aren't

Erdi shows what your connected sources send, and a few calculations on top. Those figures are for direction — not bookkeeping, tax, or a claim that one thing caused another. Three limits that actually apply in the product:

  • Day totals are not cohorts. Funnel rates compare daily aggregates on the same calendar day. They are not conversion rates for the same people over time.
  • iOS attribution is not available. ROAS and CAC here are blended — spend and outcomes side by side, not attributed to a campaign or click.
  • Imported history is fuzzier than live capture. The first pull of past days (backfill) can mis-count renewals as new payers until ongoing capture covers the day. Charts mark that window.
  • Typical range is historical spread, not a forecast. On Overview, Releases and Investigate, Erdi shows how much a metric usually moves week over week — the median absolute change between consecutive 7-day averages over the last 90 days. It needs at least eight such comparisons before a range appears; until then the usual data minimums apply. A delta inside that band is shown more quietly; one outside it is not labeled as good or bad — only as larger than what this metric has done lately.

More detail (and liability limits under German law) lives in the Terms.

Get started with ErdiKnows