Media plan template for B2B SaaS
Free download as CSV and Markdown. Nothing sits in front of the file: no form, no account, no email address.
The files
What it is
The media plan with five columns a subscription business needs: which slice of the ideal customer profile the line is aimed at, where in the funnel it is bought to act, which account list it works from, how long the deal behind it takes to close, and what the sales team has to agree a lead is before it counts.
Everything else is the general plan, unchanged. One row per line of spend, budgets as integers in minor units, one currency named per row, and a target column that ships blank because the number is yours.
When to use it
Use it when the gap between a click and revenue is measured in months rather than days, which is the normal condition of software sold to a company. A plan that judges every line on a cost per form fill will quietly fund the segment that fills in the most forms, and that is rarely the segment that signs.
Write it before the quarter is built, and re-read it at the point the first cohort of leads has had time to reach a sales-accepted state. That week is where a B2B plan is actually decided, and it falls in the middle of a quarter rather than at the end of a month.
| Type | How to fill it | |
|---|---|---|
| Channel | Text | One platform per row, never two. A channel carrying two funnel stages carries two rows, because the two will never share a target. |
| Campaign | Text | The campaign name as it will be typed into the account, so the plan and the account line up on sight. |
| Objective | Text | Why this line exists: prospecting, retargeting, retention or a launch. One per row, because a line with two objectives is judged on whichever one reads better. |
| Audience | Text | Who the line is aimed at, in terms the platform will accept: a saved audience, an uploaded list, a keyword theme, a placement. Specific enough to be built from the cell. |
| ICP segment | Text | The slice of the ideal customer profile the line sells to: a company size band, an industry, a role, a stack. The column that sets the message, the offer and the deal size all at once. |
| Funnel stage | Text | Where the line acts: awareness, demand capture, pipeline acceleration, expansion. A line spanning two stages is two lines, because the two are judged on different events. |
| Target account list | Text | The named list this line works from, or Open where it does not. Name the list and its version, so a change to the list is visible as a change to the plan rather than as a mystery in delivery. |
| Expected sales cycle | Text | How long a deal from this segment usually takes, in weeks. It is the column that says when this line can first be judged, and without it every line gets read too early. |
| Sales-accepted definition | Text | What sales has agreed counts as a real lead from this line: a title, a company size, a stated need, a booked call. Written here so the argument happens once, at planning time. |
| Flight start | Date (YYYY-MM-DD) | The line's first spending day. In a quarterly business it is usually set by the pipeline coverage a quarter needs rather than by the calendar. |
| Flight end | Date (YYYY-MM-DD) | The last day, inclusive. Set it at least one sales cycle before the quarter it is meant to serve, or the line is paying for pipeline that lands after it is needed. |
| Budget (minor units) | Integer | This line's budget written in the currency's smallest unit, so 1,500.00 is entered as 150000. Integers, because a column of decimals drifts by a cent a row and the total is then wrong for a reason nobody can find. |
| Currency | ISO 4217 code | The code the ad account settles in, which is not always the one the business reports in. A company selling into several regions will have several, and a column of bare numbers cannot be summed across them. |
| Primary metric | Text | The single number that decides whether this line worked. For software this is usually a cost per sales-accepted lead or a cost per opportunity, and only rarely a cost per form fill. |
| Target | Number | The figure this line has to reach. Blank in the file on purpose: it needs a baseline from your own pipeline, measured over at least one sales cycle, before it means anything. |
| Owner | Text | The person who answers for the line. In a subscription business this is often split between demand generation and the sales lead who owns the segment; name one of them. |
| Notes | Text | What the next person needs: the list that has not been refreshed, the case study still in legal, the segment where the product does not yet have a story. Also where to say a figure is a guess. |
Plan the segment, not the channel
A general media plan is organised around where the money goes. For software sold to a company that is the less useful half of the picture, because the platform matters less than the slice of the market the line is aimed at. The same budget, on the same channel, with the same creative, is a different line of spend when it is pointed at a fifty-person company than when it is pointed at a five-thousand-person one: different deal size, different number of people in the decision, different objection, different length of wait before anybody knows whether it worked.
So the ICP segment column is filled in first, and the rest of the row follows from it. The message is constrained by the segment; the offer is constrained by the segment; the expected cycle is a property of the segment; and the target is whatever that segment's deal size will bear. Choose the smallest slice whose message and deal size you would describe differently from its neighbours. For most teams that lands on three or four segments, usually a company size band crossed with a role, and a team that finds itself with twelve has described its market rather than segmented it.
Funnel stage is a column, not a campaign name
The second column a general plan does not need is the funnel stage, and it earns its place because the events being bought are genuinely different.
An awareness line is bought to make a company aware that a category of problem has a solution. It is judged on reach into the named market and on what happens to demand capture three months later, and holding it to a cost per lead guarantees it is turned off before either can be read. A demand capture line is bought to be present when somebody has already decided to look, and it is the cheapest line in almost every account because the intent was already there. A pipeline acceleration line is bought to move a deal that exists. An expansion line is bought against customers you already have.
Put them in separate rows even when they run on the same platform to the same segment in the same week. Blended, they produce a cost per lead that flatters demand capture and hides whether anything upstream of it is working, which is how a company ends up with a search account that looks efficient and a pipeline that stops growing.
The sales cycle decides when a line can be read
The expected sales cycle is the column that stops a plan being marked too early, and it is the one most plans leave out.
Fill it per segment, in weeks, from your own history: the time between a lead first arriving and a deal from that lead being accepted as real. Then read the rest of the plan against it. A line whose segment takes ten weeks cannot be judged on a cost per opportunity at four, and a review that judges it anyway is reading the fraction of the cohort that moved fastest, which is not a sample of the cohort — it is a sample of the people who were closest to buying before the line existed.
There is a practical consequence for flight dates too. A line meant to serve a quarter has to start at least one cycle before that quarter, or it is paying for pipeline that lands after the number it was bought to make. Writing the cycle into the row is what makes that arithmetic visible at planning time rather than at the end.
Agree what counts as a lead before the money is spent
The sales-accepted definition column exists because the argument it prevents is otherwise guaranteed. Marketing counts leads, sales counts the ones worth calling, and the gap between the two numbers is discovered in the same meeting where somebody is trying to decide whether to keep spending.
Write the definition into the row, in the words the sales team would use: a title, a company size band, a stated need, a booked call, a named account on the list. Then have the person who will be accepting the leads read it before the flight starts. It takes ten minutes, it happens once, and it converts a recurring argument into a column.
The definition also gives the primary metric something to be about. A cost per sales-accepted lead is a number both teams recognise; a cost per form fill is a number only one of them cares about, and funding the plan on it will reliably buy the segment that fills in the most forms, which is rarely the segment that signs.
Named lists change underneath you
The target account list column carries a version for a reason that has bitten every team that runs account-based lines. A list refreshed mid-flight changes who the line reaches without changing anything visible in the ad account: same campaign, same budget, same creative, different market. Four weeks later the cost per lead has moved and there is no record of why.
So name the list and its version in the cell, and treat a refresh as an edit to the plan rather than as routine maintenance. Where a line does not work from a list, write Open rather than leaving the cell blank, because a blank cell reads as an oversight and Open reads as a decision.
Before you commit the plan
Six checks. Every row names an ICP segment and a funnel stage. Every row carries an expected cycle, and no line in the plan is scheduled to be judged before that cycle has passed. Every account list names its version. Every sales-accepted definition has been read by the person who will accept the leads. Every budget is an integer in minor units with its currency named. And every target either traces to a baseline in your own pipeline or is blank, with the reason in the notes.
A plan that passes those six is not necessarily a good plan. It is a plan whose result can be read at the right moment, by two teams who already agree what they are reading, which is most of what goes wrong.
The general template, and other industries
Media plan template
A free media plan template as a CSV and a Markdown file: one row per line of spend, with notes on what belongs in every column and why.
Media plan template for Ecommerce
A free media plan template for ecommerce as a CSV and a Markdown file, with columns for catalogue segment, gross margin and the promotion window.
Media plan template for Fintech
A free media plan template for fintech as a CSV and a Markdown file, with columns for product, jurisdiction, the review reference and the disclosure required.
Media plan template for Healthcare
A free media plan template for healthcare as a CSV and a Markdown file, with columns for service line, audience type, targeting limits and the claim review.
Media plan template for Real estate
A free media plan template for real estate as a CSV and a Markdown file, with columns for the listing, the market, the campaign stage and the enquiry type.
Templates that go with it
Budget allocator template
A free budget allocator template as a CSV and a Markdown file: one row per destination, with floors, ceilings, the basis for each share and a move rule.
Campaign brief template
A free campaign brief template as a CSV and a Markdown file: eighteen fields, with notes on what belongs in each one and how to answer it.
Flight plan template
A free flight plan template as a CSV and a Markdown file: one row per week of spend, with phases, weight, dependencies and a decision point on each.
Related reading
Questions
Put frontier AI to work on every ad account you run.
Tempio connects your ad accounts into one workspace and hands your own AI the numbers and the tools. Every change it writes is a draft until you approve it, or until a rule you wrote does.
Request early access- Read and draft by default. Approve is a separate permission you grant.