Programmatic campaign audit: what to check after the flight ends
Part of Programmatic media planning

The short answer
A programmatic campaign audit tests what a finished campaign actually bought against what the plan and contract said it would buy. It covers served placements, log level records, fees and invoices, supply paths, frequency, invalid traffic and suitability incidents, and ends with dated findings that each name the change they require in the next plan.
Key takeaways
- An audit starts after delivery, when the evidence exists, and asks different questions from launch QA.
- Request partner data by field name and date range before the flight ends, since raw files expire.
- Fees are tested by rebuilding the invoice total from report lines, then checking agency markup separately because it does not appear on the platform invoice.
- Each finding is written as evidence, a decision and a change to the next plan, or it is not finished.
What should a programmatic campaign audit cover?
Launch QA asks whether the campaign was built as planned; the media plan QA checklist covers that. A post campaign audit asks what the money bought, working from delivery records, invoices and change logs. The scope below is the floor for an open web display or video buy.
| Area | Question | Evidence |
|---|---|---|
| Served placements | Did delivery land on the approved domains and apps? | Placement report or log level rows matched against the approved list version |
| Log level records | Do the impression rows add up to what reports and invoices claim? | Impression files with event time, impression ID, line item and exchange IDs, and cost fields |
| Fees | Does the invoice equal the sum of its cost lines, and what sat outside it? | Billing report for the invoice month, the invoice, the agency agreement |
| Supply paths | Which exchanges and sellers carried the spend, and were they authorized? | Exchange and inventory source breakdown, ads.txt snapshots, sellers.json entries |
| Frequency | How often did the same people see the ad, by line item and in total? | Reach report with average impression frequency, read within its date window |
| Invalid traffic | What was filtered, and was post serve invalid traffic credited? | Invalid traffic metrics and credits on the invoice |
| Suitability incidents | Where did ads appear beside content the brand had ruled out, and why? | Incident log, the settings in effect that day, deal bypass status |
| Changes | Who changed what during the flight, and was it approved? | Change history export with system changes and notes |
Which data does an audit need from partners?
Ask for fields, not "the data". The ANA's updated media buying contract template (opens in a new tab), released June 6, 2023, added "a transaction data schedule incorporating specific data to obtain from vendors" and kept the 2018 audit rights, including "no limit on the number of audits that may be performed". The field list below belongs in a schedule like that.
Partner data request for a display and video audit
- Impression level files for the full flight, with event time, impression ID, insertion order and line item IDs, exchange ID, site or app ID and URL fields.
- Cost per impression in a stated currency, plus each fee field, from the buying platform's log files.
- A billing report for each invoice month at the same level as the invoice, and the invoices themselves.
- Placement and inventory source reports for the same dates, with the extraction date recorded.
- Reach and frequency reports for the line items in scope, pulled within the platform's window.
- The change history for the campaign and its parents, with system changes and any notes.
- The approved list versions, deal IDs and the suitability settings in effect, with dates.
Check what the files can hold before the flight ends. Google's Data Transfer file format (opens in a new tab) defines Impression ID as a "Unique ID used to join Impression, Click, and Rich Media, Data Transfer file data" and warns that "due to the customizable nature of Data Transfer, your files may not contain all fields". Its overview (opens in a new tab) says files stay in Cloud Storage for 60 days. An audit requested three months after launch can find the first month's raw data already gone.
How do you audit fees in a programmatic buy?
Fee audits matter because the gap between spend and working media has been large in published studies. The ANA's December 2023 study of the log level data of 21 major advertisers found that "only 36 cents of every dollar that enters a demand-side platform (DSP) effectively reaches the consumer", as summarized on its programmatic transparency hub (opens in a new tab). Its latest public benchmark, Q1 2026, released May 27, 2026 (opens in a new tab), put the TrueAdSpend Index, the share of investment delivering fraud free, measurable, viewable and MFA free impressions, at 43.3 percent. Both figures describe the participating advertisers, not the whole market.
| Line | What Google says | Audit check |
|---|---|---|
| Billable Cost | Equals the sum of the positive lines: Media Cost, Platform Fee, Platform Add-On Fee, Data Fees and Third Party Fees | Sum the report lines for the invoice month and compare with the invoice |
| Refunds | "Billable Cost doesn't include Refund Billable Cost"; the total is Billable Cost minus Refund Billable Cost, plus taxes | Pull refunds as a separate metric and subtract them |
| Taxes | "Tax information is not available in reporting" | Take taxes from the invoice only |
| Agency markup | Revenue is a markup on partner costs and "isn't shown on the invoice" | Test it against the agency agreement, not the platform invoice |
| Small differences | Data freshness and currency rounding can cause minor discrepancies; the invoice is the authoritative amount owed | Record the difference and its cause instead of forcing a match |
Four steps for a fee test
- Match the frame. Set the report to the invoice's month of service, at the invoice level set in the billing profile, in the invoiced currency, as the DV360 invoice guide (opens in a new tab) describes.
- Rebuild the total. Add the cost lines, subtract refunds, add the invoice's taxes and compare.
- Trace the fees. Add the Fees columns to see third party and platform add-on fees, and match each to a contract line or a data provider order.
- Price the margin. Compare the markup the client was charged with the rate in the agency agreement.
Which audit findings should change the next plan?
An audit that ends in a score changes nothing. Tie each finding to a planning decision, and read the platform's definitions first, since some report limits turn an apparent problem into an artifact.
| Finding | Read it with this limit | Change to the next plan |
|---|---|---|
| Spend on unplanned domains | Separate related app inventory and masked URLs first; see served domain reconciliation | Fix the setting that allowed it, and add or exclude each domain with a reason |
| Spend through unexpected sellers | sellers.json identifies the seller type; it is not a ledger of each intermediary's fee | Name the exchanges and seller paths the next deal or line item may use |
| High frequency on one line item | DV360 says reach "can't be summed or compared across reports" and can be pulled in 93 day blocks at most | Set caps at the level the finding came from, and plan frequency across line items deliberately |
| Ads beside ruled out content | DV360 says unrateable impressions "can't be described as being brand safe or not", and an exempt deal bypasses advertiser level suitability settings | Decide whether deals in the plan may bypass suitability, and record the tolerance per category |
| Invalid traffic | Pre bid filtered traffic "is never bought"; post serve invalid traffic is credited back | Confirm the credits reached the invoice; review the sources that carried the largest post serve removals |
| Unrecorded mid flight changes | Event history notes are visible to anyone with access to the page | Require a note on each change and name who approves list edits |
Who should run an independent audit?
Independence means the auditor did not plan, buy or optimize the campaign and is not paid by a party whose fees are under review. That can be an internal team outside media or an outside firm under the contract's audit rights. The auditor needs platform access or complete exports, the agreements that set fees and markups, the approved plan documents, and a named contact on the buying team.
Auction rules are a newer audit question. On January 29, 2026 the Media Rating Council issued final Digital Advertising Auction Transparency Standards (opens in a new tab), covering disclosure and reporting for digital ad auctions across display, text, video and audio formats. An auditor can ask each auction operator in the supply path what it discloses about how winners and prices are determined, and file the answers with the audit.
How does PlacementGraph give an audit a documented plan to test against?
What does a post campaign audit look like on one flight?
Fictional example
A northern New England hard cider maker's fall audit
A fictional hard cider maker selling in Vermont, New Hampshire and Maine ran a fall display and video flight on food, recipe and regional travel sites through one buying platform and one curated deal. Its marketing director asks the finance team, which played no part in the buy, to audit the flight using the agency agreement's audit clause.
The data request goes out in week five of an eight week flight, naming the impression fields, billing report and change history. The analyst rebuilds each invoice month from report lines, finds the totals match apart from rounding, and tests the agency's markup against the agreed rate separately.
Three findings carry into the next plan. A partner level channel had widened delivery mid flight, so list edits now need a named approver. The curated deal had been exempted from advertiser level suitability settings, so the next deal sheet states whether bypass is allowed. Frequency on one video line item sat well above the plan, so the next plan sets caps per line item and reads reach across the flight in one block.
Audit sign off
- Each area in scope has a finding, a no issue note or a stated reason it could not be tested.
- Each finding cites its evidence file, date range and extraction date.
- Fee findings separate platform invoice lines from agency markup.
- Each finding names the change it requires and an owner for that change.
- The audit file is stored with the approved plan versions it tested.
Frequently asked questions
How is a campaign audit different from launch QA?
Launch QA checks the build before money moves: lists attached, settings correct, tracking firing. A campaign audit checks the outcome: where impressions landed, what was billed, which sellers were paid and what changed in flight, such as a channel added in week three.
Can an audit be run on a campaign that is still live?
Yes, as an interim audit on the completed weeks. It catches data retention problems early, since raw log files expire, and lets the team fix a setting mid flight. Run the full audit after the final invoice.
What if a partner will not supply log level data?
Record the refusal and what was offered instead, audit with the reports available, and state which areas could not be tested. A stated gap is useful evidence for the next contract, where the data schedule can name the fields required.
Should audit findings be shared with publishers?
Share findings a publisher can act on, such as an ad on a section the deal excluded, with the dates and URLs. Keep fee and contract findings between the brand and its agency or platform, since publishers are not party to those terms.
Sources
- Compare invoices with reporting (opens in a new tab)Display & Video 360 Help
- Data Transfer v2.0: File Format (opens in a new tab)Google for Developers, Campaign Manager 360 (last updated September 14, 2026)
- Data Transfer v2.0 overview (opens in a new tab)Google for Developers, Display & Video 360
- Reach reports (opens in a new tab)Display & Video 360 Help
- Brand suitability (opens in a new tab)Display & Video 360 Help
- Filtering invalid traffic to ensure quality (opens in a new tab)Display & Video 360 Help
- ANA Releases Updated Media Buying Contract Template (opens in a new tab)ANA, June 6, 2023
- Programmatic Transparency (opens in a new tab)ANA Media Practice
- ANA Programmatic Transparency Benchmark (Q1 2026) (opens in a new tab)ANA, May 27, 2026
- Digital Advertising Auction Transparency Standards, final (January 29, 2026) (opens in a new tab)Media Rating Council, January 29, 2026
- sellers.json specification (opens in a new tab)IAB Tech Lab (GitHub)
Researched and written by PlacementGraph Research. Read how we research, source and update these pages. Corrections: diana@placementgraph.com.