Evidence and testimony
The Evidence Behind a Marketing Claim

Reading an Ad Account Export

The columns look self-explanatory until you try to reconcile two of them, and then nothing in the file is

Establish the header facts before reading a single number

An advertising export is a rendering of a query, and the query's parameters change the answer. Before the first column means anything, eight facts have to be pinned down and stated in any workpaper: the account identifier, the exact report or query that produced the file, the date range, the reporting time zone, the currency, the attribution setting in force, the reporting identity where the platform has one, and the date and time of extraction.

Those are not clerical details. Two competent analysts pulling "March" from the same account will produce different files if any one of them differs, and the resulting argument will be about the extraction rather than about the case. When a production arrives without those facts, the first request back should be for them, along with the native file rather than a reformatted spreadsheet.

The extraction date matters more than people expect on Meta in particular. Meta's own documentation states that insights "refresh every 15 minutes and do not change after 28 days of being reported." A pull taken inside 28 days of the period may not match a later pull of the same period, and neither party did anything wrong.

What the delivery columns actually count

Impressions, clicks, cost and the derived rates are the least contested part of the file, and even they carry definitions worth stating.

Impressions are the platform's count of ads served, not of ads seen. Viewability is a separate measurement with its own standard: the Media Rating Council's 2015 digital guidelines define a viewable display impression as at least 50% of the ad's pixels in the viewable space of an in-focus browser tab for at least one continuous second, with a reduced 30% threshold for large formats of 242,500 pixels or greater, and a video impression as 50% of pixels for two continuous seconds of play. Nothing in that definition requires a human. If an exhibit reports viewability, ask which standard produced it — MRC's 2019 cross-media video standard uses 100% of pixels for two continuous seconds, and the same delivery scores very differently under each.

Clicks are the platform's count of billable interactions after its own filtering. Cost is what the platform charged before any later credit. Interactions on some campaign types aggregate several action types, which is why a click column and an interaction column can disagree without either being wrong. And where the file has an invalid-clicks column, it covers roughly the last 60 days of traffic and reports what the platform's filters rejected — a count of what was caught, with no denominator for what was missed.

Where a reported conversion came from

This is the column that decides most disputes and the one most often read as though it were a receipt. A reported conversion is the platform's assignment of credit under the platform's rules, using the platform's view of the journey, within a window the advertiser configured.

Three things have to be established for it. What action counts — the conversion action's definition, whether it counts every conversion or one per click, its counting and attribution settings, and whether it is included in the main conversions column at all. How it was recorded — a browser tag, an offline import, a server-side event through a conversions API, or an app event, each with different reliability and a different custodian. Whether it was observed — because Google's documentation states that modeled and observed conversions are both reported in the conversions column, without a published split.

The test I use where a GA4 property is in evidence is reproducibility against the raw export. Modeled data appears in standard reports and is excluded from the BigQuery export, from audiences, and from user-level explorations. A figure that will not rebuild from raw events has modeling as a candidate explanation, and the size of the gap is measurable even when its composition is not. On Meta, the equivalent signal is structural: aggregated event measurement removed delivery and action breakdowns for offsite conversion events, so the absence of age, gender, region and placement splits on exactly the events that matter in a performance dispute is expected rather than suspicious.

Attribution settings restate history without announcing it

Changing an attribution window does not create a note in the file. It changes the numbers, including the numbers for periods already reported, and an exhibit built across such a change is measuring a definitional shift alongside performance.

The clearest documented instance is Meta's. On 19 January 2021 Meta told developers it would no longer support 28-day click, 28-day view and 7-day view windows; the account-level attribution window was replaced by an ad set-level setting defaulting to 7-day click and 1-day view, "which may result in a decrease in the number of reported conversions," and after Apple began enforcing its tracking prompt the default became 7-day click alone. Historical data for the deprecated windows survived only through the Ads Insights API — and the January 2026 change removed 7-day-view and 28-day-view from the API too, closing that path. A pre-2021 Meta conversion count and a post-2021 count are not comparable quantities.

A second, quieter change: from 10 June 2025 Meta stated that the use_unified_attribution_setting and action_report_time parameters "will be disregarded and API responses will mimic Ads Manager settings," to reduce discrepancies with Ads Manager. That means an API extract taken before that date and one taken after can differ for identical periods. Whenever an export spans a window change, the correct move is to say so in the report and, where possible, re-pull both periods under a single setting.

Time zones, and the day that is not the same day

Every reporting system attributes activity to a calendar day using a time zone chosen somewhere in its configuration, and those choices do not agree across systems. Search Console tracks daily data in Pacific Time. Meta's Ads Insights offers hourly aggregation both by advertiser time zone and by audience time zone as separate breakdowns — two different answers to the same question, both correct within their own frame. An advertising account, an analytics property, an order table and a payment processor can each be operating on a different clock.

The consequences are ordinary and easy to mistake for something else. Daily totals shift by a few percent between two systems; a spike appears one day earlier in one file than another; a month-end boundary moves several hours' worth of spend or revenue across the line, which matters when a performance threshold or a commission tier is defined by month. In an incentive-compensation dispute this can be the entire disagreement.

The fix is procedural: state the time zone for every source in the report, convert once, and show the conversion. Where the account's time zone was changed at some point, that change is itself a fact worth establishing, because it will have moved the boundaries for everything reported afterward while leaving earlier data on the old basis.

Reading change history as a narrative

Change history is the most underused file in a paid media production, and it reads well because it is chronological and attributed. Google Ads logs changes to ads, assets, audiences, budgets, bid adjustments, conversions, feeds, language and location targeting, keywords, and campaign and ad group status, including changes made through automated rules, the API and Google Ads Editor, attributed by user. It covers two years in the interface. It does not record password changes.

Three things to check first. Density and timing — how much was touched, by whom, and whether activity clusters around invoices, contract milestones, meetings or the date a complaint was threatened. Attribution — whether changes came from a named user, from the API, or from automated rules, which is the difference between a person's decision and a system's behavior, and which is frequently the whole question in a standard-of-care dispute. Conversion tracking changes — because a change to a conversion action's definition, counting method or attribution setting can restate the performance history around it, and that change appears in this log rather than in the performance file.

Two limits. The API equivalent reaches back only 30 days, so a production pulled programmatically will be nearly empty; ask for the interface capture. And the interface's undo capability covers most changes made in the last 30 days, which is narrower than the viewing window and occasionally explains why a record and a live account no longer match.

Reconciling reported spend against what was invoiced

Platform-reported cost and the invoice rarely tie on the first pass, and the differences have documented causes rather than sinister ones.

Start with the credits. Google's invalid clicks documentation describes two-stage detection: real-time filtering, plus post-invoice detection where "invalid traffic detected after an invoice is already generated" produces credits. The Invalid Activity Credit Report in Report Editor is the exportable artifact — credited metrics, credited interactions, credited amount, and adjusted cost, clicks, interactions, click-through rate, average cost per click, conversion rate and cost per conversion, broken out by campaign and network. Google also documents late invalid-traffic credits appearing on invoices, and the API represents invalid-activity adjustments as structured invoice data.

Then reconcile in this order: gross reported cost for the period on the account's own time zone; credits applied, by the period they were applied rather than the period they relate to; any account-level adjustments or promotional credits; currency and any conversion applied by the billing system; and finally the invoice. The remedy shapes the damages theory: Google states that "clicks determined to be invalid will result in adjustments or credits, not a refund," which means an advertiser that has left the platform may hold a credit it cannot realize. That is a real economic question, and it is a different question from having been charged for bad clicks.

Anomalies with published innocent explanations

Four patterns appear in almost every export and each has an explanation in the platform's own documentation. An expert who leads with the sinister reading and is then shown the documentation loses more than the point.

  • Conversions exceeding clicks. Google states that in rare cases a click may be deemed invalid and removed while the conversion arising from it is not, which "can occasionally result in conversions being higher than clicks."
  • Totals that do not sum. Filtered and unfiltered figures diverge wherever suppression applies — Search Console's anonymized queries leave the totals when a query filter is applied, and GA4 condenses long-tail values into an "(other)" row past a table's row limit.
  • Missing search terms. The search terms report includes only terms a significant number of people used. Coverage was restricted in September 2020, partially restored in September 2021 for queries from 1 February 2021 forward, and pre-September-2020 sub-threshold data was removed as of 1 February 2022 — so a coverage change across those dates is a reporting-policy change.
  • Platform and site figures that never agree. Analytics counts sessions, the order table counts orders, the processor counts settled transactions, and the platform counts attributed conversions. Four definitions, four systems, four numbers.

Reconciling those and documenting why they differ is standard, defensible work. Treating the gap itself as a finding is not.

What the export cannot tell you, however carefully it is read

The file is a strong record of configuration, delivery and charge. It is a weak record of causation and it is no record at all of some things people expect from it.

It does not identify who generated a click. An address is not a person, and the advertiser-side signals that look most incriminating — a repeated address, a short dwell time, no conversion, an odd hour — have ordinary explanations including shared corporate networks, carrier-level address sharing, privacy relays, and accidental taps on mobile creative, which Google classifies as invalid and unremarkable.

It does not show a competitor's spend, targeting or creative history. It does not show what the platform's filters missed, because the detection logic is not published — and there is a reasoned argument on the record for that, in the court-appointed expert's 2006 report in the Lane's Gifts matter, which found that no conceptual definition of an invalid click can be fully operationalized and that an operational definition cannot be fully disclosed without defeating itself. It does not establish that a delivered ad was seen, read or acted on. And it does not establish that any of the spend caused any of the revenue; that requires a design the parties almost never ran.

Say those limits in the same breath as the findings. It is what makes the findings credible.

Frequently Asked Questions

How can I tell whether a conversion in the export was counted or modeled?

Not from the column itself. Google reports modeled and observed conversions together in the conversions column and publishes no split. Where a GA4 property is also in evidence there is a usable test: modeled data appears in standard reports but is excluded from the BigQuery export, from audiences and from user-level explorations, so a figure that cannot be rebuilt from raw events has modeling as a candidate explanation. Beyond that, establish how the conversion action was recorded — browser tag, offline import, server-side event or app event — because that determines who holds the corroborating record.

Why do two exports of the same month show different numbers?

The most common causes are parameter differences rather than data problems: a different reporting time zone, a different attribution setting, a different reporting identity, a different currency conversion, or an extraction taken at a different time. On Meta, insights refresh every 15 minutes and do not settle until 28 days after reporting, so an early pull and a later pull of the same period can legitimately differ. Credits applied after an invoice also restate cost figures for periods already reported. Record all eight header facts on every extract and most of these differences resolve on inspection.

What does the change history actually prove?

That a specific change was made to a specific setting on a specific date, and whether it was attributed to a named user, to the API, or to an automated rule. That is direct evidence of sequence and of who acted, which is often the contested point in an agency or scope dispute. It does not capture password changes, it reaches only two years in the interface and 30 days through the API, and it does not record why a change was made or what was discussed beforehand. Pair it with the correspondence rather than reading intent out of the log.

The reported spend does not match the invoice. Is that a problem?

Not by itself. Google documents post-invoice detection of invalid traffic that produces credits, describes late invalid-traffic credits appearing on invoices, and represents invalid-activity adjustments as structured invoice data. Credits are applied in the period they are issued rather than the period they relate to, which shifts totals. Currency conversion in the billing system, account-level adjustments and time zone boundaries account for most of the rest. Reconcile in a fixed order — gross reported cost, credits, adjustments, currency, invoice — and document each step rather than reporting the difference as a finding.

Can conversions legitimately exceed clicks in an export?

Yes, and Google says so in its own documentation: in rare cases a click may be deemed invalid and removed while the conversion occurring from that click is not, which can occasionally result in conversions being higher than clicks. Other ordinary causes include a conversion action set to count every conversion rather than one per click, conversions attributed to a click in an earlier period than the one being viewed, and offline conversion imports matched back to earlier interactions. Each is testable from the conversion action's own settings, and the check should be run before the anomaly is characterized.

Does an export show whether a competitor was clicking the ads?

No. The export shows what the platform counted and what it filtered, in aggregate, without per-click reason codes or actor attribution. Even where click-level data was preserved inside the 90-day window, an address identifies a network rather than a person: it does not show who was at the keyboard, whether the machine was compromised, or whether an employee was doing competitive research, which is not fraud. Establishing that a named party directed invalid clicks generally requires payment records, communications or third-party logs obtained through discovery, not an account export.

What is the first thing to ask for when an export arrives in production?

The native file and the extraction parameters — the account identifier, the exact report or query, the date range, the reporting time zone, the currency, the attribution setting, the reporting identity, and the date and time of extraction. A reformatted spreadsheet with none of those is a document of unknown provenance, and any reconciliation attempted against it will fail for reasons nobody can diagnose. If the production is a screenshot rather than an export, ask for the export: a platform-generated file is a record generated by an electronic process, and a screenshot records only what one browser rendered on one machine.
Keep reading

The entries behind this guide

Every channel, record type and claim named here has its own entry: where the record lives, who holds it, and what it cannot settle.

Top