Media plan template
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
A media plan is one row per line of spend. A line is a channel, a campaign, an objective and an audience, with a budget and a pair of dates around it. Change two of those four and you have two lines, not one.
That is the whole shape. Everything else on this page is about what belongs in each column, and why a column that looks like paperwork is usually the one that stops an argument in week three.
When to use it
Write the plan after the brief and before anything is built in an ad account. It is the document a change is checked against later: a campaign that does not trace to a line in the plan is a campaign nobody planned, and that is worth knowing on the day it appears rather than at the end of the month.
Use it again at the end of every week. Put what the accounts actually spent beside what the plan said, and read the gap. The plan is not a forecast you defend; it is the thing that makes the gap visible.
| Type | How to fill it | |
|---|---|---|
| Channel | Text | The platform the line runs on, one per row. A channel carrying two objectives carries two rows — merging them is how a plan ends up with a budget nobody can attribute. |
| Campaign | Text | The campaign name exactly as it will read inside the ad account. Write it here the way you will write it there, and the plan and the account reconcile by eye instead of by lookup table. |
| Objective | Text | What the line is bought for: prospecting, retargeting, retention, a launch. One objective per row. A line with two objectives is judged by whichever one reads better at the end. |
| Audience | Text | Who the line is aimed at, in terms the platform will accept: a saved audience, a customer list, a keyword theme, a placement. Specific enough that somebody else could build it from the cell. |
| Flight start | Date (YYYY-MM-DD) | The first day the line is meant to spend. ISO order so a sheet sorts it correctly and so two people in two countries read the same day. |
| Flight end | Date (YYYY-MM-DD) | The last day, inclusive. A line with no end date is a line nobody ever reviews, which is how always-on spend stops being a decision and becomes a habit. |
| Budget (minor units) | Integer | The whole budget for the line, in the smallest unit of its currency: 150000 is 1,500.00. Integers, because a column of decimals drifts by a cent a row and then the total is wrong for a reason nobody can find. |
| Currency | ISO 4217 code | The currency the ad account bills in, not the one you report in. Two currencies in one column with no code beside them cannot be summed, and a plan that sums them anyway is wrong quietly. |
| Primary metric | Text | The one number this line is judged on: CPA, ROAS, CPM, qualified leads. One. A line with three metrics has none, because at the end you will read whichever of the three moved. |
| Target | Number | The value of the primary metric you are holding the line to. Blank in the file on purpose: fill it once you have a baseline from your own account, and leave it blank until then rather than inventing one. |
| Owner | Text | The person who answers for the line. A plan with no owner per row gets edited by everybody and read by nobody, and no one is surprised by a line they never owned. |
| Notes | Text | What the next person needs and cannot infer: the creative that has not been shot, the dependency, the thing you already tried and it did not work. Also the place to say plainly that a number is a guess. |
One row per line of spend
The unit of a media plan is the line, and a line is the smallest amount of spend you would defend on its own. Four things define it: the channel it runs on, the campaign it belongs to, the objective it is bought for, and the audience it is aimed at. Hold all four fixed and you have one row. Change any two and you have two rows.
The temptation is always to collapse rows. One line for a whole platform reads tidier, and a tidy plan is easier to get approved. It is also useless four weeks later, when the platform has spent its money and nobody can say which half of it did the work. A plan exists to be read backwards, and a row you cannot read backwards was never worth writing forwards.
The opposite mistake is real too. A plan with a row per ad set is a copy of the ad account, and a copy of the ad account is not a plan — it is an export. The test is whether you would argue for the row on its own. If you would not, fold it into its parent.
Money: integers, minor units, one currency per column
Budget goes in as an integer in the smallest unit of its currency. A budget of 1,500.00 is written 150000. This looks fussy for about a day and then saves you from the class of error that is hardest to find: a sheet of decimals that sums to something slightly wrong, every month, by an amount too small to notice and too large to ignore once somebody does.
The currency column is not optional either, even when every line is in the same currency today. The moment a second account in a second currency joins the plan, a column of bare numbers becomes a column of numbers that mean different things, and the total at the bottom becomes a number that means nothing at all. If you do convert, say which rate you used and the day you read it, in the notes. A converted figure without a date is a figure that was true once.
Dates, and why a line needs an end
Every line gets a start and an end, inclusive, in YYYY-MM-DD. The start is easy. The end is the one people leave blank, usually for a line that is meant to run continuously, and that blank is how an always-on campaign becomes a line item nobody has reconsidered in a year.
If the line really is continuous, give it the end of the quarter and write it again next quarter. Re-typing the row is the review. It takes a minute and it is the only mechanism most teams have that forces someone to look at their steadiest spend and ask whether it is still the right amount.
Dates also make the plan comparable to the account. Platforms report on date ranges; a plan whose lines have date ranges can be put beside that report without anybody doing arithmetic in their head. A plan whose lines do not cannot.
The target you do not set yet
The Target column ships blank, and that is deliberate. A target is a claim about what your account can do, and the only honest source for it is the account. Set it before you have a baseline and you have written down a number that came from nowhere — and everybody will argue about that number for the rest of the flight instead of arguing about the work.
So the order is: read the baseline, then set the target, then write it in. The baseline is the primary metric over a window you choose deliberately — long enough to cover the buying cycle, short enough that the creative and the offer have not changed inside it. Say which window and which account, in the notes, because a baseline without a window is an opinion with a decimal point on it.
Where there is genuinely no baseline, a new channel or a new offer, leave the target blank and say so. A line marked "no baseline, first flight, review at two weeks" is a more useful row than the same line with a confident number in it. Not knowing is a state worth recording; faking it is not.
Reading the plan back against the accounts
Once a week, put the plan beside what actually happened: planned budget against actual spend, target against the metric, line by line. Three gaps are worth naming out loud.
The first is pacing: a line that has spent a third of its budget in the first week of a four-week flight is not ahead, it is off plan, and the interesting question is whether the plan or the delivery is wrong. The second is attribution drift: a line whose primary metric has moved while nothing about the line has changed is usually a measurement change, not a performance change, and treating one as the other is how a good campaign gets turned off. The third is the row that has quietly stopped mattering — spending, hitting its target, and pointed at something the business no longer cares about.
None of those three are visible in a platform's own reporting, because the platform does not know what you planned. They are visible in the gap between the plan and the account, and the plan is the only half of that pair you control.
A plan a machine can read
The reason this template is a CSV and a Markdown file rather than a picture of a table is that both are readable by something other than a person. A plan in a structured file can be diffed between versions, checked into a repository beside the rest of the campaign's history, summed by a script, and handed to an agent as context without anybody retyping it.
That is also why the column names matter more than they look. Add your own columns at the end, but do not rename the ones that are here: two plans built on the same names can be compared, merged and summed together, and two plans with the same columns under different names cannot. The names are the interface.
Keeping the plan honest
Before you call a plan finished, five checks. Every row has an owner and an end date. Every budget is an integer in minor units and every row names its currency. Every target either traces to a baseline in your own account or is blank. The per-currency totals match what has actually been approved, rather than what was requested. And anything that is a guess says so, in the notes, in words.
A plan that passes those five is not necessarily a good plan. It is a plan that can be argued with, which is the only kind worth writing down.
Made for your industry
Media plan template for B2B SaaS
A free media plan template for B2B SaaS as a CSV and a Markdown file, with columns for ICP segment, funnel stage, target account list and sales cycle.
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.