ROAS stands for return on ad spend. It answers a simple question: for every unit of currency you put into ads, how much revenue came back? Of all the numbers an ad dashboard throws at you, this is the one that comes closest to “is this worth it”.
The formula is just:
ROAS = revenue from ads ÷ ad spend
If you spend 100 and the ads bring in 300 in revenue, your ROAS is 3, often written as 3x or 300%. A ROAS of 1 means you broke even on the ad cost (before all your other costs). Below 1 means the campaign is losing money on spend alone.
A worked example
Say you run a subscription app at 9.99/month and spend 500 on a Meta campaign in a month:
| What happened | Amount |
|---|---|
| Ad spend | 500 |
| New subscribers from the campaign | 80 |
| First-month revenue (80 × 9.99) | 799 |
| ROAS (first month) | 1.6x |
Is 1.6x good? You can’t tell from the number alone — and that’s the point of the rest of this guide.
Revenue is not profit
ROAS uses revenue, not margin. The 799 above is what customers paid, not what you keep. App store commissions, payment processing fees, refunds, taxes, and your own costs all come out of it.
If your product has a 70% margin after fees, that 799 in revenue is roughly 559 in gross profit — against 500 of spend. The campaign that looked comfortably profitable at 1.6x is nearly break-even in reality. Two rules of thumb follow:
- Never celebrate a ROAS before subtracting your costs. A 3x ROAS on a 30%-margin product is a loss.
- Know your margin before you set a target. The lower your margin, the higher the ROAS you need.
The break-even point is yours, not a universal number
There is no magic “good ROAS”. The number where you start making money depends on your margin and, for subscriptions, on how long customers stay.
For a one-time sale, the math is direct:
break-even ROAS = 1 ÷ margin
A 50% margin needs a 2x ROAS to break even; a 25% margin needs 4x.
For subscriptions it’s more forgiving, because a subscriber keeps paying after the ad was bought. If your average customer stays 10 months, the 80 subscribers in the example above aren’t worth 799 — over their lifetime they are worth closer to 7,990. Measured against lifetime value, a first-month ROAS below 1 can still be an excellent campaign. That’s why serious subscription businesses track ROAS at multiple horizons: day 7, day 30, and projected lifetime.
The practical takeaway: decide your break-even before you launch a campaign, based on your margin and retention, and judge every campaign against that line — not against someone else’s benchmark tweet.
Where the revenue number should come from
Here’s the trap: the ROAS column in Meta or Google Ads uses the platform’s estimate of the revenue it drove, based on its own attribution rules. Those estimates routinely disagree with what lands in your Stripe, Paddle, or RevenueCat account — sometimes by a lot.
The honest version of ROAS divides your real revenue by your ad spend. That means joining two systems that normally never talk to each other: the ad platforms on one side, your revenue tools on the other. That join is the core idea behind why we unify ads and revenue — and behind Flowjat itself.
How Flowjat handles this for you
Instead of showing you a ROAS column to interpret, Flowjat is built to say, in plain words, whether a campaign is above or below your break-even and what to do about it. It computes ROAS from the revenue tools you connect (Stripe, Paddle, RevenueCat), not from platform estimates, so the number you act on is the number your bank account sees. See which platforms you can connect, or start with reading your ad reports to put ROAS in context with the other metrics.