Ad spend, releases and price changes on one timeline — next to the paying customers that followed. What a customer really costs, and what happened after every change you made.
14-day trial. No card.
I'm a developer. I have six products of my own, and for a while I was checking eight tabs to know how any of them was doing — ad spend in one, subscribers in another, releases in a third, errors somewhere else.
None of it was in the same place, so none of it was in the same picture.
Erdi is that picture. Kolibi, Carpincho and Peeranimo run in it, and so does Erdi itself. I build it alone, in Berlin. If something breaks, you're writing to me.
— Steffen
Revenue lives in one tool, ad spend in the next, the infrastructure bill in a third. Erdi is where they meet on one timeline.
Acquisition cost
€75
ad spend ÷ new paying customers · last 30 days
Revenue per customer
€9
ARPU · last 30 days
Payback
8.3 mo
acquisition cost ÷ monthly revenue per customer · before operating cost
Under 12 months is the common benchmark.
Erdi calculates this from the sources you already connect — your ad platforms, your payment provider, and your own infrastructure costs.
Spend that has no API — influencer, newsletter, sponsorships — you add in one line and it counts the same.
Click a day on the chart. The fortnight around it — releases, spend, tickets, crashes — is right there. No second tab, no export.
Example data · last 30 days
Click or tap the chart
Jul 25
| Metric | Before | After | Delta |
|---|---|---|---|
| Paying users | 80 | 125 | +56% |
| Revenue | €655 | €1,022 | +56% |
ad spend 0% · traffic 0% · installs −2%
You ship, the curve moves, and both are on the same chart. Follow what happened after every release, deploy and price change — in one place, without stitching four tools together.
Try day Jul 3 for the quiet case · Example data.
The week at a glance: revenue, signups, spend, crashes. Rows inside their typical range stay muted — exclusion is half the work.
Aug 25
Each tile shows a seven-day typical swing from your own history — not a prediction, just context for whether this week is unusual.
| Revenue | Stable | 1 releasetypical range |
| Signups | Down 24% | Nothing shipped |
| Tickets | Up 38% | Deploy Aug 18 |
| Ad spend | €1,240 | 19 paying customerstypical range |
| Crash-free | 99.1%96.4% | Release 2.4 |
The funnel shows where a drop started — installs quiet, trials outside range, paying customers up after a release. One app or five, same view.
| Installs | 4,820 | −8% | typical range |
| Trials | 612 | −22% | outside range |
| Paying | 41 | +12% | 1 release |
Releases sit on the day they went live — not buried in commits. Tag pushes that belong to a release point at the same marker.
| 2.4.1 | Aug 18 | Crash fix |
| 2.4.0 | Aug 12 | Pricing page |
| 2.3.2 | Aug 4 | Onboarding tweak |
GitHub knows what you shipped, Stripe knows what was paid, RevenueCat knows who subscribed, Sentry knows what broke, and Apple knows what happened in the store. Erdi brings the parts that matter together.
Ad platforms side by side — spend, installs, cost per install. Spend is comparable across channels; install counts are not, because each platform counts differently.
| Channel | Spend | Installs | Cost per install |
|---|---|---|---|
| Apple Ads | €1,240 | 420 | €2.95 |
| Google Ads | €680 | 215 | €3.16 |
| Influencer | €400 | 0 | — |
| Newsletter sponsorship | €250 | 62 | €4.03 |
| Own newsletter | €0 | 95 | €0.00 |
| Blended | €2,570 | 792 | €3.24 |
Example data.
You set the thresholds that matter. Erdi watches them and sends the fortnight before the change with the alert — including when nothing shipped.
App B — signups down 22%
Previous 14 days: Release 2.4 · 7 critical tickets · Pricing changed
App C — New paying users up 40%
Previous 14 days: Release 2.4 · Podcast: Indie Hackers · Pricing changed
No SDK. Erdi does not observe your end users.
Erdi reads what your own tools already know — it does not watch your end users. No session recording, no cookies to count visitors, no AI training on your data.
Security and hosting — EU database, encrypted keys, DPA under Art. 28 GDPR.
Next time the numbers move, nobody starts from zero.
Connect a project once. The history accumulates — releases beside revenue, spend beside customers, crashes beside deploys.