6 min read
Content marketing ROI for SaaS, measured post by post
Content marketing ROI for a SaaS: count your hours and tools, use attributed and retained MRR, find each post's payback period, and follow a worked example.
Content marketing ROI for a SaaS is the revenue a piece of content brought in, minus what it cost to make, divided by what it cost. The formula is the easy part. The inputs are where founders fool themselves, in two predictable ways: the cost side gets rounded down to zero because you wrote it yourself, and the revenue side gets replaced by traffic because traffic is what the analytics tool shows.
This post works through both sides for a single post, then puts them together in a worked example. All the numbers in it are hypothetical.
What does a SaaS blog post actually cost?
Count three things.
Your hours, at a rate. Research, outlining, writing, editing, screenshots, publishing, and the time spent sharing it afterwards. Writing it yourself feels free and isn't. Pick an hourly rate and use it consistently. Two reasonable choices: what you'd pay a contractor to do the same work, or what an hour of your time is worth on the product. Either is better than zero.
Freelancers. A writer, an editor, a designer for the header image. These are easy to count because there's an invoice.
Tools. An SEO tool subscription, a screenshot app, hosting if the blog has its own. Spread the monthly total across the posts you published that month. It's usually small per post, but it isn't nothing.
Add updates later. Refreshing a post a year on is a cost against the same post, and it often earns its keep.
For the example below: 8 hours at €60 an hour plus €40 of tools comes to €520.
Which revenue should count toward content ROI?
Not pageviews, and not signups. A post that brings 2,000 visitors and no customers has a return of zero, however good the traffic chart looks.
The revenue that counts comes from customers you can link to the post, usually because the post was their first touch. There are two useful ways to measure it.
Attributed MRR at first payment. What those customers paid per month when they first converted. It's fixed once recorded, so it's the fairest way to compare posts against each other: an upgrade in month seven doesn't rewrite last spring's ranking.
Retained MRR. What those same customers pay today. It falls when they churn and rises when they upgrade. This is what turns into actual money over time, so it's what ROI should be built on.
For the return itself, add up the retained MRR month by month to get cumulative revenue. That's the money the post has actually brought in so far.
Two caveats belong next to any ROI figure. MRR is usually measured gross, before payment fees, so if you want a stricter number, apply your margin. And attributed revenue is a floor. Visitors who refused consent, blocked scripts or switched devices brought revenue too, you just can't link it. Look at your attributed share before deciding a post failed; the definition is on our definitions page.
How to calculate payback period per post
Payback period is the number of months until a post's cumulative revenue covers its cost.
The shortcut is cost divided by monthly retained MRR. It works for a post that brought all its customers at once. Most search content doesn't behave like that: it brings a trickle that starts late and keeps going. For those, build the month-by-month table and find the month where the cumulative total crosses the cost.
A worked example: one post over twelve months
A hypothetical tutorial post, cost €520, on a product with a single €19 per month plan. It takes a month to start ranking, then brings one or two customers most months. Two of them churn along the way. For simplicity, each month's revenue equals the MRR from the post's customers at the end of that month.
| Month | New | Churned | Paying | MRR from post | Cumulative revenue |
|---|---|---|---|---|---|
| 1 | 0 | 0 | 0 | €0 | €0 |
| 2 | 1 | 0 | 1 | €19 | €19 |
| 3 | 1 | 0 | 2 | €38 | €57 |
| 4 | 2 | 0 | 4 | €76 | €133 |
| 5 | 1 | 1 | 4 | €76 | €209 |
| 6 | 2 | 0 | 6 | €114 | €323 |
| 7 | 1 | 0 | 7 | €133 | €456 |
| 8 | 2 | 1 | 8 | €152 | €608 |
| 9 | 1 | 0 | 9 | €171 | €779 |
| 10 | 1 | 0 | 10 | €190 | €969 |
| 11 | 1 | 0 | 11 | €209 | €1,178 |
| 12 | 1 | 0 | 12 | €228 | €1,406 |
Reading it:
- Payback lands in month 8, when cumulative revenue passes €520.
- ROI at month 12 is (€1,406 − €520) ÷ €520, about 170%.
- Attributed MRR at first payment totals €266 across 14 customers. Retained MRR at month 12 is €228. The gap is the two churned customers.
At month 3 this post looked like a failure: €57 back on €520 spent. Most of the return arrived after the point where many founders stop paying attention.
Why the long tail matters
Compare it with a second hypothetical: a launch announcement that cost €200 and brought four customers in its first month, then nothing. Two of them churn by month 6. It pays back in month 3, and by month 12 its cumulative revenue is €589, an ROI of about 194%.
On a twelve-month ROI table, the launch post wins. But look at the last row of each. The launch post ends the year earning €38 a month and can only go down. The tutorial ends it earning €228 a month and still adding a customer a month. If that pace held for another year, which is an assumption and not a promise, the tutorial's cumulative revenue at month 24 would be around four times its month-12 figure.
A single ROI number at a fixed date hides the slope. For content, the slope is most of the story. Three habits help:
- Review posts at 3, 6 and 12 months. The first week tells you little, and search posts in particular need time to rank.
- Track retained MRR per post alongside first payments, so you can see which posts bring customers who stay. Customers who arrived through different posts can churn at quite different rates; the mechanics are in SaaS churn rate.
- Count customers as well as euros at small volume. When a post has brought three customers, one annual-plan upgrade can swing its ROI wildly. Treat early numbers as directional.
What content ROI leaves out
First touch attribution credits the post that introduced a customer. A comparison page that convinced someone already aware of you won't show up, and neither will the general effect of being findable for your topic. A post with a weak ROI can still be doing useful work. The reverse is rarer: a post with a strong attributed ROI almost always earned it.
If you want to turn retained revenue into a longer-range value per customer, see LTV for a small SaaS, and for the attribution setup itself, how to see which blog posts bring paying customers.
Joinsight covers the revenue side of this: its Content screen ranks pages and posts by the MRR of the customers who first landed on them, measured at first payment, with the attributed share shown on top. The cost side stays in your own spreadsheet.