Why does an ad account need an approval policy?
A campaign beating its CPA target and capped by its budget should get more money the day it qualifies. In a lot of teams it waits for the Monday meeting, because nobody is sure who is allowed to say yes, while anyone with edit access can type an extra zero into a budget field or switch a bid strategy on a Friday afternoon.
A written policy pre-approves routine scaling, so it happens the same day, and puts a second person on the handful of changes that can hurt.
Anyone who can edit a campaign can multiply its budget
Platform roles decide who can edit. On Google Ads, Standard access "can edit campaigns" and can also edit billing information, while only Admin can give account access or change access levels (About access levels). Meta's Help Center says "anyone with the admin or advertiser role on your ad account can make changes to your campaigns" (activity history), and partial access with the "Manage campaigns" task leaves account settings, finances and permissions to full access (task-based access). A TikTok Operator can create and edit ads and manage finance (account permissions), and an Amazon Ads Editor can create and edit campaigns (account permissions). None of those four permission pages has a setting for the size of a change. A limit like "budgets rise by 15% at most" exists only if you write it down or use a tool that enforces it.
Say someone types €5,000 into a daily budget meant to be €500. Google lets a campaign spend up to 2× its average daily budget in a day (About spending limits), so up to €10,000 can be billed before the morning check. Meta can spend up to 175% of a daily budget on any one day (About daily budgets), so €8,750 here, or €10,500 with ad set budget sharing. The overspend guide has the full rules for both.
Large budget jumps can send Meta ad sets back into learning
Meta lists the budget amount among edits that may or may not be significant "depending on the magnitude of the change". Its example: going from $100 to $101 is unlikely to restart learning, and going from $100 to $1,000 may (Significant edits and learning phase). During learning, Meta says, performance can be less stable and the cost per result higher. A winner that gets +15% every few days grows through small edits. One that waits two weeks for a sign-off and then gets tripled is a lot closer to Meta's $100-to-$1,000 example. The 15% and the three-day spacing are the template's defaults; Meta publishes no figure for either.
When someone leaves, their Google Ads rules keep running and their scripts stop
Since July 2021, Google says, a rule whose creator has lost access keeps running (Automated rules troubleshooting). Scripts go the other way: a script whose author is removed "will stop running but remain available" until someone with access reauthorizes it (Scripts authorization). Section 5 of the template gives every rule and script a named owner and a handover step.
Google's auto-apply can change bid strategies, adjust CPA and ROAS targets, add broad match keywords, and switch on search partners, Display expansion and targeting expansion (About applying recommendations automatically). Google says auto-applying "won't increase your budget", so what it moves is your targets and your reach. Change history shows who enrolled the account (Manage auto-apply).
Broken tracking misleads every automation that reads conversions. For Smart Bidding, Google says to "apply data exclusions as quickly as possible" (Use data exclusions for conversion data outages). Exclusions cover click dates, so they start before the outage: Google's example excludes 10 to 18 October for a 15 to 18 October outage with a five-day conversion delay, and says not to remove an exclusion once applied. Under Section 6 you add the exclusion that way and pause the rules, scripts and agents that act on conversion data.
No platform log records why a change was made
Google's change history goes back two years and shows the email of whoever made a change in the interface; API changes can show the tool's name instead, and "not all account-level settings changes" are listed (About change history). Meta's activity history shows who made changes, what changed and when, with the rule's name on rule-made changes (activity history); changes by someone since removed from the account show up as "Meta". TikTok's change log records time, object, activity and operator and can be exported by category and time range (How to view change logs). None of them asks for a reason when a change is made. Google Ads lets you add a note to a date on a campaign, ad group or account (Create and edit notes), but a note is optional and is pinned to a date on the performance graph. Section 7 of the template adds a column for the reason and one for the approver.
Copy the ten-section policy
We looked for a published paid media approval policy before writing this one and found contract clauses and IT change frameworks, none of which a media team could adopt as written. The defaults below suit an account spending roughly €50,000 to €300,000 a month across two to four platforms. Every value in [brackets] is a placeholder, and the right numbers come from your own change history, as the next section explains.
If you know IT change management, Class 0 is a standard change, Classes 1 and 2 are normal changes with two approval tiers, and Section 6 is the emergency change.
Google Ads in a 30-day month: plan €120,000, so Class 2 starts where the projected month passes €126,000 (plan × 1.05). It is the start of day 11, with 20 days left. One campaign spends €800 a day, beats its target and is limited by budget.
- On plan: €40,000 spent, daily budgets €4,000, projected month €120,000. Raising the campaign to €920 (+15%, +€120) projects €40,000 + €4,120 × 20 = €122,400. Class 0: log it and go.
- Pacing under plan: €36,000 spent, daily budgets €3,800, projected €112,000. Raising it to €1,200 (+50%, +€400) projects €36,000 + €4,200 × 20 = €120,000. Class 1: the budget owner approves.
- On plan, same raise to €1,200: €40,000 + €4,400 × 20 = €128,000, above €126,000. Class 2: finance signs as well.
Paid media change approval policy
Before you fill this in, set the numbers from your last 90 days of change history. If fewer than about 70 to 80% of those changes would have been Class 0, the limits are too tight. Notes and platform sources: nupact.ai/guides/paid-media-approval-policy-template/. Delete this note before signing.
1. Purpose and scope
This policy sets who may change what in our ad accounts, and which changes need someone else's approval first. Routine optimisation, including more budget for campaigns that beat their target, goes live without waiting. The few changes that can cost a lot of money get a second look before they run.
Applies to: every ad account in Annex A on [Google Ads, Meta, TikTok, Amazon Ads, Microsoft Ads, DSPs], and to every person, agency, automated rule, script, tool and AI agent with edit access.
Not covered: creative and brand sign-off ([link]), legal review of claims ([link]).
2. Roles
- Budget owner: [name]. Owns the monthly plan per channel. Approves Class 1. First approver on Class 2.
- Finance contact: [name]. Second approver on Class 2. Owns platform spending caps and billing settings.
- Operators: [names]. Make changes. May make Class 0 changes alone.
- Account admins: [2 names at most]. The only people who add or remove users or change platform caps. Admins are not the people who make daily changes.
- Deputies: each approver names a deputy for holidays: [names].
- Agency setup: admin rights stay with the client. Billing: [client pays the platforms directly / agency pays and re-invoices]. The agency gets edit access (Google Ads: Standard user access, or a manager-account link without ownership unless the agency is invoiced through it; Meta: partial access with the Manage campaigns task; TikTok: Operator; Amazon Ads: Editor). Google Ads Standard and TikTok Operator can also change billing or finance settings, so the finance contact checks those settings every month. Client marketing lead = budget owner. Client finance = finance contact. Agency account team = operators.
3. Change classes
Measure each change per campaign, per ad set where the budget sits at ad set level, or per shared budget where one budget serves several campaigns, against the value at the start of the day. Where a class limit gives a percentage and a euro amount, the lower one applies. Increases under Classes 0 and 1 are allowed only while the channel's projected month (spend to date + current daily budgets × days left) stays within plan × [1.05] and its daily budgets within the daily ceiling (Section 4); an increase that takes either above is Class 2. Cuts, pauses and changes that add no spend keep their class at any time. If the projected month passes plan × [1.05] without a change, the budget owner brings it back under or asks for Class 2 within [1 working day]. Plan increases add up over the month, not counting Class 1 moves between platforms; more than [5]% or [€10,000] in total is Class 2. At most one budget increase and one target change per campaign every [3] days, cuts exempt; a second one inside that window waits or goes to Class 2. A move between campaigns counts as a cut plus an increase, and the increase sets the class. A move with no net increase keeps its class. If a change fits two classes, the higher class applies. Section 6 overrides every class. A change split into steps to stay under a threshold counts as one change.
Class 0. No approval. Log it within [1 working day].
- Raising the budget of a campaign that beats its target ([CPA or ROAS], measured in [platform reporting / GA4 / finance's numbers]) and is limited by budget: up to [15]% or [€500] a day.
- Budget cuts of any size, except on protected campaigns.
- Bid, target CPA or target ROAS changes within ±[10]%.
- Pausing ads, keywords, ad groups or ad sets; adding negative keywords; excluding placements.
- Rotating creatives that are already approved.
- New ad sets or ad groups inside an approved test plan and budget.
- Moves between campaigns on one platform inside a pre-approved flex amount (Annex C).
- Resetting a platform cap to its approved value, and removing anyone's access (admins).
Class 1. One approval (budget owner) before the change goes live.
- Any other budget increase, up to [50]% or [€2,000] a day.
- Changing a channel's approved monthly plan by up to [5]% or [€10,000], counting earlier plan increases this month.
- Moving money between platforms, which moves both channels' plans: up to [€5,000] a month and [20]% of the receiving channel's plan.
- Changing a bid strategy, a target by more than [10]%, a conversion goal or an attribution setting.
- Changing conversion tracking: tags, pixel or Conversions API events, conversion values or value rules, consent settings.
- Launching a new campaign, or an ad set or ad group outside an approved test plan.
- New audiences, countries, languages, broad match, search partners or Display expansion.
- Switching on any automation: an auto-applied recommendation type, an automated rule, a script, a third-party tool or an AI agent with write access.
- Anything not listed in Class 0 or Class 2.
Class 2. Two approvals (budget owner and finance contact).
- An increase that takes a channel's projected month above plan × [1.05], or its daily budgets above its daily ceiling.
- Plan increases for a channel (Section 4) above [5]% or [€10,000] in total this month, other than Class 1 moves between platforms.
- Budget increases above the Class 1 limits, and larger moves between platforms.
- Changing a platform spending cap or the daily ceiling multiplier (Section 4).
- A new channel, market or ad account.
- Budget, bid strategy, targeting or status changes to protected campaigns: [Brand Search, ...] (Annex A).
- Giving anyone edit or admin access.
How to ask: post in [#paid-media-approvals] with the log fields from Section 7. "Approved" plus the log ID counts as an approval.
Turnaround: Class 1 within [4 working hours]; Class 2 within [1 working day]. A scale-up request still waiting after that goes to the deputy.
4. Spend guardrails
| Channel | Monthly plan | Platform cap | Daily ceiling | Winner raise without approval |
|---|---|---|---|---|
| Google Ads | [€120,000] | [plan × 1.05] | [€6,000] | +[15]%, max [€500] |
| Meta | [€90,000] | [plan × 1.05] | [€4,500] | +[15]%, max [€500] |
| TikTok | [€25,000] | [plan × 1.05] | [€1,200] | +[15]%, max [€500] |
| Amazon Ads | [€15,000] | [plan × 1.05] | [€750] | +[15]%, max [€500] |
| All channels | [€250,000] | sum of the above | n/a | n/a |
Daily ceiling: the most a channel's daily budgets may add up to, about [1.5] × monthly plan ÷ 30.4. It follows the approved plan automatically, and changing the multiplier is Class 2. The headroom lets spend catch up after a slow start; Section 3's projected-month rule and the platform caps hold the month.
Platform caps to set (owned by the finance contact):
- Google Ads: an account budget per month, which Google offers to advertisers on monthly invoicing. Without one, the daily ceiling, the pacing check and Section 3's projected-month rule are the limit; a campaign may spend up to 2× its average daily budget on one day.
- Meta: an ad account spending limit at [plan × 1.05], reset each month (automatically if your account offers it, by hand on the 1st if not). A campaign spending limit on every test campaign.
- TikTok: a monthly cap per ad account in Budget Manager.
- Amazon Ads: a monthly recurring budget cap on each portfolio, with every campaign in a portfolio.
These caps stop spend at a ceiling but do not pace it. Check pacing [daily] against plan to date; more than [10]% ahead or behind becomes a proposal in its class.
5. Platform automation
- Keep an inventory (Annex B) of every auto-applied recommendation, automated rule, script, third-party tool and AI agent with write access: owner, what it may change, class.
- Google Ads auto-apply: off for the Bidding, the Keywords and targeting, and the Measurement types unless listed here: [list]. Check the auto-apply History tab in the weekly review.
- Rules and scripts start with [AUTO-] in their name and have a named owner. A rule may only do what a Class 0 change allows, unless it was approved as a Class 1 change.
- Before removing anyone's access, move their rules and scripts to another owner, then check rule status. On Google Ads, a script stops running when its author is removed, and a rule keeps running after its creator has gone.
- Meta Advantage+ creative enhancements that change approved creative: [on/off list per enhancement].
- Tools and AI agents follow the same classes and must keep an exportable record of every change they make.
6. Emergency stop
Anyone with edit access may pause or cut spend, and never raise it, when:
- hourly spend runs above [3]× the campaign's usual level for [2] hours;
- a channel's month-to-date spend passes [125]% of plan to date and is at least [€5,000] over it;
- conversions drop to near zero for [6] hours while spend continues;
- a live ad has a policy, brand-safety or legal problem;
- the landing page or checkout is down.
The month-to-date trigger is a must: whoever sees it cuts that channel's daily budgets to what is left of the plan ÷ days left, or pauses all but protected campaigns if nothing is left, and the budget owner decides the rest of the month. If the conversion drop comes from broken tracking while orders keep arriving, pause the rules, scripts, tools and agents that act on conversion data and keep the campaigns live. On Google Ads, add a data exclusion for the affected click dates, starting [conversion delay] days before the outage, and leave it in place once applied.
Within [30 minutes]: post in [#paid-media-alerts] what was stopped, why, and spend at that moment; call [budget owner] out of hours. The budget owner confirms or reverses within [4 hours]. Restarting is a normal change in its class.
7. Logging
Log every change, Class 0 included, in [location]. One row per change; routine edits of one type on one campaign in one session can share a row (for example "34 negative keywords from the search terms review"). Columns:
ID | date and time | platform, account, campaign | old value → new value | class | why (the data you saw) | expected effect and metric | check date | made by | approved by, and when | result on check date | kept or reverted
Log rejected proposals too, with the reason. Platform change histories are the backup; they do not record why a change was made or who approved it.
8. Rollback
Every Class 1 and Class 2 request states its revert condition, for example "revert if CPA is above [€45] after [7] days or [50] conversions". On the check date the operator records the result and keeps or reverts. Reverting to the logged previous value within [7] days of the change is a Class 0 change. Before bulk edits of more than [50] items, export a backup (Google Ads Editor archive or a bulk sheet).
9. Review cadence and KPIs
- Weekly, [30 min]: changes due for checking, reverts, auto-apply and rule history, requests still waiting.
- Monthly: access review (leavers removed, admins at [2] or fewer, manager-account links and their ownership), spend against plan by channel, whether the thresholds still fit.
- Quarterly: review this policy. Raise Class 0 limits for change types whose approved changes kept working.
- KPIs: changes logged [100]%; median approval time [under 4 working hours]; approved changes later reverted [under 20]%; emergency stops per month; spend against plan per channel within ±[5]%; scale-up requests waiting more than [1 working day]: [0].
10. Agency and client (one Annex C per client)
- Thresholds, approvers, protected campaigns, monthly plan and any pre-approved flex per client, signed by both sides.
- Client response time: Class 1 within [1 working day]; Class 2 within [2 working days].
- No answer: after the response time the agency contacts [client deputy]. Budget cuts and pauses then go ahead. Increases and Class 2 changes wait. Silence never approves more spend.
- The client owns the ad accounts and data; billing sits with [client / agency]. The agency works with edit access. When the contract ends, the agency hands over the change log and the automation inventory within [5 working days].
- The agency sends a [weekly] summary of changes: what, why, result.
- If the client overrules a recommendation, the agency logs its recommendation and the client's decision.
Sign-off: [name, role, date] · [name, role, date]
Annex A. Ad accounts and protected campaigns
| Platform | Account name and ID | Monthly plan | Protected campaigns | Admins |
|---|---|---|---|---|
| [Google Ads] | [name, ID] | [€] | [Brand Search] | [names] |
| [Meta] | [name, ID] | [€] | [list] | [names] |
Annex B. Automation inventory
| Name | Platform | Type | Owner | What it may change | Class |
|---|---|---|---|---|---|
| [AUTO-pause-CPA] | [Google Ads] | [rule, script, auto-apply, tool or AI agent] | [name] | [pause ad groups above target CPA] | [0] |
Annex C. Client thresholds (one per client)
| Field | Value |
|---|---|
| Client | [name] |
| Monthly plan per channel | [€] |
| Class 0 limit | winners +[15]% or [€500] a day, whichever is lower; cuts free except on protected campaigns |
| Class 1 limit | +[50]% or [€2,000] a day, whichever is lower |
| Class 2 trigger | an increase that takes the projected month above plan × [1.05]; plan increases above [5]% or [€10,000] (whichever is lower) in total this month, other than Class 1 moves between platforms |
| Pre-approved flex (Class 0) | up to [€ amount] a month the agency may move between campaigns on one platform without asking, inside the Section 3 limits on the month |
| Client budget owner and deputy | [names] |
| Client finance contact | [name] |
| Response times | Class 1 [1 working day]; Class 2 [2 working days] |
| Protected campaigns | [list] |
| Signed | [agency, date] · [client, date] |
How do you set the thresholds for your account?
Start from your own history. Export the last 90 days of changes from Google's change history and TikTok's change log, filter Meta's activity history for the same period, and tag each change with the class it would have had under your draft numbers.
If fewer than about 70 to 80% of changes land in Class 0, the limits are too tight. Approvers then face a queue of small requests and start clicking yes without reading. That range is a rule of thumb; we found no published benchmark for it.
- 15% more a day for a winning campaign keeps a wrong call cheap. On a €2,000 daily budget it is €300.
- An absolute cap such as €500 a day matters on the largest campaigns, where 15% of €20,000 is €3,000.
- One budget increase and one target change per campaign every three days, cuts exempt, give each change a few days to show its effect before the next, which matters on Meta while ad sets are learning. Meta also lists adding a new ad to an ad set as a significant edit, so batch new ads.
- Platform caps at plan × 1.05 leave room for a strong month; a cap set exactly at plan can stop campaigns before the month ends.
After a quarter, check the revert rate for each change type. Where approved changes almost never get reverted, move that type down a class.
What can the ad platforms enforce for you?
Each platform has a hard ceiling worth setting, and Section 4 of the template makes the finance contact responsible for them.
| Cap | At the limit | Worth knowing |
|---|---|---|
| Google Ads account budget | "All ads in the account will stop running" | For advertisers on monthly invoicing; it won't distribute costs across campaigns (About account budgets) |
| Meta ad account spending limit | Ads pause and the account stops spending | Admins only; about 15 minutes to take effect; can't be set below what has been spent; not offered on accounts set up for available funds (Set a limit, Change a limit) |
| Meta campaign spending limit | Every ad set and ad in the campaign stops | Not compatible with campaign lifetime budgets under Advantage+ campaign budget (About campaign spending limits) |
| TikTok Budget Manager | Ads on the ad account pause | Daily, monthly or one-time; Admin or Finance Manager only (How to use Budget Manager) |
| Amazon Ads portfolio budget cap | All campaigns in the portfolio stop delivering | Monthly recurring (resets on the 1st) or a date range; overrides campaign budgets; over-delivery is credited back (Portfolio budgets) |
None of these caps paces spend through the month or knows whether a change was approved. For pacing, use the free budget pacing calculator.
How do you adopt it in a week?
- Monday: take inventory. List everyone with edit or admin access on each platform, every auto-apply type that is switched on, and every automated rule and script with its owner. Remove leavers and anything nobody can explain.
- Tuesday: set the numbers. Fill in Sections 3 and 4 from the monthly plan and test them against 90 days of change history, as above. Agencies start with one Annex C for the largest client.
- Wednesday: set the platform caps. Meta account spending limit, TikTok Budget Manager, Amazon portfolio caps, and Google account budgets where you pay by invoice. Switch off the auto-apply types nobody chose.
- Thursday: open the log and the channel. One shared sheet with the Section 7 columns and a Slack or Teams channel for requests. Backfill this week's changes so the first review has something to read.
- Friday: sign it and hold the first weekly review. Budget owner and finance contact sign. Agencies send Annex C to the client with the response times. Book the quarterly review now.
Get Class 1 approvals in Slack, and let small budget moves apply on their own.
A campaign capped by its budget while beating your target gets flagged with the budget move drafted and a forecast, so scaling a winner doesn't wait for the Monday review. Autonomy is set per campaign and per action type. Each action type starts at alert-only; you promote it to approval in Slack, then to applying on its own inside your guardrails once its proposals keep being right. With a ±15% guardrail, a €400 daily budget can move anywhere between €340 and €460 without a person. Set the autonomy guardrail no wider than your Class 0 percentage; the euro cap, the three-day spacing and the projected-month check stay with your team. That is the quarterly review from Section 9, done per action type. Class 2 stays with your two approvers.
Today Nupact acts on Google Ads, Meta, TikTok and Amazon Ads; DSPs and other connected platforms are monitored and reported on. One monthly ceiling covers all four ad platforms together, and campaigns you protect, like Brand Search, only ever get alerts. Every change lands in the log with its trigger, reasoning and approver, rejected proposals included, with a Revert control on every row. When a conversion feed goes stale, autonomous actions pause and the team is paged.
What else do people ask about paid media approvals?
Who should approve paid media budget changes?
The person who owns the monthly plan per channel approves budget increases above your no-approval limit. An increase that would push a channel's projected month more than about 5% over plan, or a move of more than about €5,000 a month between platforms, needs a second approval from finance. Below the limit, operators act alone and log the change.
How big a budget change can go live without approval?
A workable starting point is 15% more a day for a campaign that beats its target and is limited by budget, no more than once every three days, with an absolute cap such as €500 a day. Cuts need no approval. Set your own figure from 90 days of change history: most routine changes should fall under it.
Should we turn off Google Ads auto-apply recommendations?
Turn off the types you haven't chosen on purpose, especially bid strategies and targets, broad match, search partners and Display expansion. Google says auto-apply won't increase your budget, and change history shows who enrolled the account.
What should a paid media change log record?
The old and new value, why the change was made, the expected effect and the metric to check, a check date, who made it, who approved it, and whether it was kept or reverted. The platforms' own histories record who changed what and when, but not why or who approved it.
What happens when the client doesn't reply to an approval request?
After the agreed response time the agency contacts the client's deputy. Budget cuts and pauses then go ahead and are logged; increases and larger changes wait. Silence never approves more spend.
Do platform spending limits replace an approval policy?
No. Meta's account spending limit, TikTok's Budget Manager, Amazon's portfolio caps and Google's account budgets stop spend at a ceiling. They don't pace it and don't check who approved a change. Set them anyway, at about plan × 1.05, as a backstop against a typo or a runaway rule.