A $400 writing invoice does not tell you what an article cost your company. For a lean SaaS team, a lot of the missing spend sits in founder reviews, product interviews, rewrites, publishing, and promotion. This guide walks you through finding those content marketing costs and building one cost figure you can use the same way every time you calculate ROI. You will end up with a simple ledger and a worked example.
You'll need your recent invoices, a rough idea of what each person on the team costs you, a list of what you published recently, and a simple record of who touched each piece.
This guide covers the cost side of the formula only. It does not cover how to credit revenue to a post, and it does not compare in-house, freelance, and agency models.
Why your writer's invoice is a line item, not the true cost of a blog post
The usual content marketing ROI formula looks like this: ROI = (return minus content cost) divided by content cost, times 100. Most of the discussion online is about the return part. This guide is about the content cost part, because that number is usually the weakest one in the whole calculation.
When someone says "a post costs us $400," they usually mean what the freelancer charged. That is a real expense, but it is the price of a draft. The cost of content production also includes the people who briefed the writer, answered product questions, checked the claims, published the page, and promoted it afterward. It also includes the updates that come later and the pieces that never got published at all.
Orbit Media's 2025 blogger survey reports an average of about 3 hours and 25 minutes to create a typical post, but that is one person's creation time from a survey of 808 content marketers. It leaves out the SME input, review rounds, publishing, and promotion around the writing, so don't multiply it by an hourly rate and call the result the true cost of a blog post.
The categories that usually go missing are strategy and planning, product and SME input, founder involvement, editing and QA, coordination, design, publishing preparation, shared tools, distribution, maintenance, failed work, and opportunity cost.
The eight steps below turn that list into a number. Each step tells you what to do, how to tell it is done, and where people usually go wrong.
1. Define the cost boundary before you collect numbers
Before you add up anything, write one short paragraph that says what you are costing, over what period, and under which view of cost. Without that paragraph, two people can total the same expenses and get different answers.
Your scope statement should name the unit (one article, a monthly batch, a campaign, or the whole program), the period with real dates, the activities included, and how you treat shared expenses, unpaid founder time, unfinished pieces, and future costs. It should also name the cost view. A cash-spend view asks how much money left the business. A fully loaded view asks what resources the operation consumed, including salary share and an estimate for unpaid founder time. An incremental decision view asks what changes if you produce one more batch or stop.
HubSpot's marketing ROI guidance counts labor, production, and promotion as campaign cost.
For a first pass, a recent completed month plus a handful of representative articles is a manageable starting point. After that, track time going forward for one production cycle.
How to tell it is done: another person can read your scope statement and decide what belongs in the calculation without asking you about each expense.
Where people go wrong: calling the writer's invoice the cost of content production, mixing a monthly cash report with annualized costs, and changing the reporting window between comparisons.
Common mistake: fixing the denominator and forgetting the numerator. In the content marketing ROI formula, the cost shows up twice, once in the subtraction and once in the division. If you find that your cost was understated, update it in both places.
2. Map every handoff from idea to maintained asset
Hidden labor becomes visible once you map the work instead of treating writing as the whole job. Write down the sequence your team really uses, which is usually something like idea, brief, research and expert input, production, review, publishing, distribution, and maintenance.
For each stage, note what work happens, who does it, what tool or service it uses, what counts as finished, whether the work belongs to one asset or is shared, and what usually sends the piece back for another round. McKinsey's guidance on marketing workflows makes the same point about breaking a workflow into its full chain of activities and the systems behind each one.
Expert time is the part people forget most often. If a writer interviews two of your engineers for 30 minutes, that call used 30 minutes from each of them. If the writer is covered by an invoice, the two internal people still contributed one person-hour of your labor. Preparation and follow-up count too, so log them when they happen instead of assuming the call was the whole contribution.
A lot of the labor in this stage is re-briefing. Every new writer, and sometimes every new article, needs the same explanation of the product, the audience, and the voice. This is one place where DeepSmith helps. Deep IQ stores your positioning, products, personas, brand voice, visual guidelines, and content types once, and every article draws on that context. That cuts down the repeated briefing, though you should still count the time it takes to set the context up and keep it current.
How to tell it is done: every stage has a named owner, a clear finish line, and a way to record effort. Nothing is labeled "someone reviews it."
Where people go wrong: counting only the writer, leaving product and engineering reviewers out of the picture, and ignoring work that happens outside your project tool, like a Slack thread that settles a product detail.
3. Calculate a loaded hourly rate for each contributor
Salary divided by 2,080 hours is not the cost of an hour of usable work. To cost the hours people spend on content, you need a rate you can explain.
Use this form: loaded hourly rate = annual employer compensation cost divided by the annual hours the person can practically work.
The top number can include salary or wages, employer payroll taxes, employer-paid insurance and benefits, retirement contributions, and bonuses. Don't add the employee's own tax withholding on top of gross salary, because that is already part of the salary. As a sense of scale, the U.S. Bureau of Labor Statistics reported that benefits were about 30% of total private-industry employer compensation in mid-2026, which works out to roughly 43% on top of wages. That is a national average across all industries, not a SaaS or marketing rate, so use it only to see why wages alone understate the cost. Your own payroll records should supply your numbers.
The bottom number deserves the same care. A 40-hour week over 52 weeks gives 2,080 hours, but that isn't the same as hours available for work once paid leave and normal non-project time are taken out. Kaplan and Anderson's time-driven costing paper divides cost by practical capacity and uses 80% to 85% of full capacity as an illustration. Treat that as a heuristic and use your company's own assumptions where you have them.
Here's a made-up example with hypothetical numbers:
- Annual salary: $120,000
- Other employer compensation costs: $30,000
- Practical capacity: 1,500 hours
- Loaded rate: $150,000 divided by 1,500 equals $100 per hour
Calculate the rate across the person's whole practical capacity, then apply it to the hours they actually spent on content.
Founder time needs honest handling too. If you pay yourself, allocate the right share of that compensation to the content hours you log. If you are unpaid, keep the hours in the ledger anyway, and if you like, show a separate imputed estimate using a replacement rate you state openly. Don't call that estimate cash spend.
How to tell it is done: every contributor has a rate, a source for the inputs, and a note on what the rate already includes.
Where people go wrong: using gross wage alone, adding benefits or overhead a second time after they are already in the rate, and charging an entire salary to content.
4. Record editing, QA, coordination, and rework as real production
A draft that needs two review rounds is not finished when the writer submits it. Editing and QA are part of the cost of content production, and they are usually the part that gets skipped because nobody invoices for it.
For one production cycle, keep a simple spreadsheet with the asset, work date, stage, person, hours or invoice amount, rate, whether the cost is direct or shared, whether it is already included in another charge, whether it is actual or estimated, and the revision round with the reason.
The "already included" column matters more than it looks. If a flat-fee freelancer's invoice already pays for their research and revisions, don't also add their hours. Use the fee and its stated scope, and keep the hours only if you want to study the process.
Tag your rework too. If time went into fixing an inaccurate product description, an unclear brief, or conflicting feedback, mark why. Rework is already part of actual labor cost, so the tag explains the cost and is not an extra surcharge.
Keep touch time (active hours) apart from cycle time (elapsed days). A draft that waits three days for approval has a delay problem, and it does not have three days of paid labor.
This is a good step for seeing where DeepSmith fits. Content Studio takes an idea through New Ideas, Planned Content, and Produced Content, and the Writer produces a researched, linked article with a cover image and publish-ready metadata. You review, edit, and publish from Produced Content. The useful question is how much manual work remains around production and review in your own ledger, which is a better test than comparing a draft fee to a subscription price.
How to tell it is done: you can trace the first draft and every meaningful revision to a person, an amount of time or a fee, and a reason.
Where people go wrong: logging "editing" as one assumed hour per article, forgetting coordination, and turning waiting time into paid labor.
5. Allocate shared costs using what each piece actually used
Some costs belong to many articles at once, like a content subscription or a planning meeting. Divide them with a driver you can name, not a flat percentage nobody can explain.
A lightweight version of activity-based costing, the method ACCA describes, works well here:
- Group shared expenses into pools.
- Pick the factor that best explains how each pool gets used.
- Divide the pool by the total units of that factor to get a rate.
- Assign the cost to each article by how many units it used.
Good starting drivers are recorded hours for planning and editing, equal shares for a content-only tool with similar use, the content share of seats or usage for a mixed-use tool (labeled as an estimate), and actual channel work for distribution.
Two quick examples, both hypothetical. A $240 monthly subscription used only for content supports six similar articles, which gives $40 per article. If the same $240 tool is shared and content uses 25% of it, the content pool is $60, so each of the six articles carries $10.
Watch the timing as well. If you pay for a tool annually, spread it across the months it covers when you build a cost report, and show the payment date only in a cash report. Don't quietly mix the two.
Pro tip: add an "already included" column before you add an overhead percentage. It prevents more errors than another decimal place.
How to tell it is done: each pool has an amount, a period, a content share, a driver, and a rule, and the allocations add back up to the pool total.
Where people go wrong: charging the whole company tool stack to content, counting an annual payment every month, and giving two very different articles the same amount.
6. Add distribution and post-publication work
An article is not free to promote or maintain just because it is written. Attach the real work and spend to the piece or campaign it belongs to: social rewrites, newsletter and nurture-email versions, visuals, approvals, posting, paid promotion, and follow-up corrections.
If one newsletter carries several articles, split its preparation cost once instead of charging each article the full amount. For a family of derivative assets, either report the bundle as one campaign or give each derivative an ID and divide the shared production cost across the family. Don't charge the original article's full cost to every derivative and add the totals together.
Maintenance goes on the original article's record. Product name changes, revised screenshots, outdated pricing references, broken links, factual corrections, and merging overlapping posts are all real work. Give each asset an owner and a review trigger. The University of Wisconsin-Madison's content maintenance guidance suggests regular reviews, with every six months as an example, plus reviews when products, features, or feedback change. Six months is an example, not a requirement, and a lean SaaS team can pair a scheduled date with a trigger tied to product changes. Keep incurred maintenance apart from forecast maintenance, since a forecast isn't a historical expense.
Repurposing is a place where DeepSmith can reduce the preparation work. Finished articles arrive with social posts already written, and Apps Library creates channel-adapted versions for formats like LinkedIn, X, newsletters, and nurture email. That addresses the preparation labor in this step. It doesn't replace approvals or channel engagement, so keep logging whatever time remains.
How to tell it is done: each asset or campaign has its distribution charges listed, an update owner, a review trigger, and actual and forecast maintenance in separate columns.
Where people go wrong: calling organic promotion free, assuming derivative content needs no channel preparation, and adding a maintenance forecast and its later actual charge together.
7. Record opportunity cost without inflating the ledger
Opportunity cost is the value of the best alternative you gave up. If you spend two hours reviewing an article, those hours were not available for a customer call or a product decision. The hours are easy to see. The dollar value of what you gave up often is not.
So start with a short decision note. Answer four questions:
- Whose capacity is constrained?
- How many hours does content use?
- What specific activity does that displace?
- What evidence supports the value of that alternative?
If you can't support a dollar value, report the hours and the displaced work. "Two founder hours taken from product planning" holds up better than an invented amount of lost monthly revenue.
Work already done stays in the historical cost even if you can't recover it, but sunk costs shouldn't decide whether the next article is worth writing. ACCA's guidance on relevant costs draws a line between spare and constrained labor: spare paid capacity may add no new wage cash for a decision, but constrained capacity displaces something, so check what else the time could have gone to.
Then run a double-counting test before you combine anything. Does the alternative's value estimate already subtract the person's cost? Is a replacement rate being mistaken for lost benefit? Are two estimates valuing the same unpaid founder hours? The safest default is a fully loaded cost ledger with the opportunity cost kept as a separate note or scenario, so you never add salary, a replacement rate, and speculative lost revenue for the same hours.
How to tell it is done: your report separates paid costs, imputed values, and opportunity-cost assumptions, and it contains no unsupported dollar figure for founder distraction.
Where people go wrong: stacking a high founder hourly rate, actual salary, and guessed lost revenue together, dropping the cost of failed work because it is sunk, and treating allocated overhead as a future saving.
8. Reconcile the total and compare like with like
A useful cost number explains its scope, ties back to its inputs, and keeps the cost of work that went nowhere. Build the scoped total like this:
Content cost = direct external expenses + attributable internal labor + allocated shared costs + actual distribution and maintenance costs not already counted.
Include the cost of failed work in the program total, and keep imputed founder time and opportunity-cost scenarios visible instead of folding them into paid expenses. Each original expense should enter the total once. Allocation changes where a cost sits, and it never changes how much you spent.
Then report the figures that answer your real questions: initial cost per delivered article, lifecycle cost to date, program cost for the period, founder and expert hours, rework hours, distribution cost shown separately, and counts of published, unfinished, and abandoned assets.
Here is why the abandoned count matters. Say your monthly program cost is $8,000, and you started 20 assets but published 16. Dividing by published assets gives $500 each. Dividing by assets started gives $400. The second figure is not the cost per published article, and the first is a period measure and not the exact lifecycle cost of each of the 16. Your asset-level ledger is what settles the difference.
How to tell it is done: there are no unexplained differences, no duplicate expenses, and no unlabeled mix of actuals and forecasts, and a finance reviewer could trace the total back to the records.
Where people go wrong: publishing a precise-looking unit cost built from rough assumptions, dropping abandoned work, and calling a lower allocation a cash saving.
A worked example: a $400 draft becomes a $1,000 delivered asset
Every price, rate, and duration here is hypothetical. These are not benchmarks, customer data, or DeepSmith results. Assume the writing invoice covers research and drafting, the hourly rates already include the compensation items you chose in step 3, and shared planning is separate from article-specific coordination.
| Cost item | Calculation | Cost |
|---|---|---|
| Research and writing invoice | Flat fee | $400 |
| SME input and accuracy review | 2 hours at $100 | $200 |
| Editing and QA | 2 hours at $60 | $120 |
| Article-specific coordination | 0.5 hours at $80 | $40 |
| Publishing preparation | 0.5 hours at $60 | $30 |
| Design invoice | Flat fee | $80 |
| Distribution preparation | 1 hour at $60 | $60 |
| Allocated production tools | $240 monthly pool across 6 comparable articles | $40 |
| Allocated shared planning | $360 pool across 12 comparable assets | $30 |
| Initial delivered-asset cost | Sum of the rows above | $1,000 |
Reading the table, the invoice is one component of the true cost of a blog post. External invoices come to $480. Internal labor comes to $450 across six person-hours. Shared allocations come to $70. In this example only, the delivered total is 2.5 times the writing invoice.
Suppose the article later gets a half-hour update at $60 per hour. You add $30, and the lifecycle cost to date becomes $1,030. If a future update is only planned, keep its estimate in a forecast column and don't add it to the $1,000.
What to do next
Pick one article you published recently and rebuild its work trail from the invoices, the calendar, and the chat history. Fill in the missing rates and allocation rules, then use the same ledger for the next batch. Treat the first audit as a baseline and not as a promise of savings, because the job of your content marketing costs figure is to be consistent from one period to the next.
If you'd like to see how much manual work is left around a finished article once research, linking, a cover image, metadata, and channel versions are handled in one place, you can start a free 7-day trial of DeepSmith and log the hours that remain in your own ledger.



