Ad platforms can only see what happens inside their own walls. Meta knows you got a click and maybe an install; it usually does not know whether that user later subscribed, churned, upgraded, or asked for a refund. Your real money lives somewhere else entirely — in Stripe, Paddle, or RevenueCat.
That split sounds like a bookkeeping detail. It’s actually the single biggest reason small advertisers waste money.
What each side knows (and doesn’t)
| Ad platform (Meta, Google, TikTok…) | Revenue tool (Stripe, Paddle, RevenueCat) | |
|---|---|---|
| Ad spend | ✔ exact | ✖ |
| Clicks & impressions | ✔ exact | ✖ |
| Installs / signups | ~ estimated | ✔ (as accounts) |
| Subscriptions started | ~ modelled, if tracked | ✔ exact |
| Renewals & upgrades | ✖ | ✔ exact |
| Refunds & churn | ✖ | ✔ exact |
| Real revenue | ✖ | ✔ exact |
Each side holds half the story. The ad platform knows the cost side perfectly and guesses at the rest. Your revenue tool knows the income side perfectly and has no idea which campaign caused it.
What goes wrong when they stay separate
You optimise for cheap, not for valuable. If all you can see is cost per install, the “winning” campaign is the one with the cheapest installs. But cheap installs are often cheap because they’re low-intent. We’ve all seen it: the campaign that fills the dashboard with installs that never convert to paid, while a pricier campaign quietly brings the subscribers who stay for a year.
You kill hidden winners. The reverse also happens. A campaign looks weak in Ads Manager — high CPA, modest click-through — so you pause it. What the dashboard couldn’t show you is that those few conversions were annual plans. Judged on revenue, it was your best campaign.
You do spreadsheet archaeology at midnight. The workaround every indie knows: export CSVs from each ad platform, export payouts from Stripe, glue them together with VLOOKUP and hope, once a month. It’s slow, error-prone, always out of date — and it still can’t attribute a renewal in March to a click in January.
What “unified” looks like in practice
Unifying ads and revenue means one view where every campaign shows:
- One side: what you spend, across ad platforms (Meta, Google, TikTok, Apple Search Ads).
- Other side: what you actually earn, from your revenue tools (Stripe, Paddle, RevenueCat) — including renewals and net of refunds.
- Together: a real ROAS based on money received, not clicks and estimates — plus the answer to “where should the next unit of budget go?”
Once both sides sit next to each other, decisions get boring in the best way. “Campaign A: 2.4x revenue-ROAS, above your break-even. Campaign B: 0.7x after refunds, below it. Shift budget from B to A.” No interpretation required.
How the connection works — and stays safe
These connections happen through secure, read-focused integrations that you authorise yourself with OAuth — you never hand over a password, you approve narrow permissions on the platform’s own page, and you can revoke access at any time. We wrote a plain-language explainer on exactly how that works: Connecting Meta safely.
Flowjat is early-stage, so each connection goes live as it clears the relevant platform review. The integrations page always shows the current, honest status of every connector.
Where Flowjat fits
This join — spend on one side, real revenue on the other, advice in plain words on top — is the entire reason Flowjat exists. If you’d rather not build the spreadsheet again next month, see how the product works or start with the first week of ads guide if you haven’t launched yet.