# Client report number-QA checklist: 14 checks to run on every report before anyone writes a word

RevSmith, updated 4 November 2026

Use this on every client report, every period, before the narrative is drafted. Automate the tests where you can; a person judges every flag. The checks are tool-agnostic: they work whether your numbers come from a reporting tool, a spreadsheet, a BI dashboard or an AI operating system. From the guide "How to automate client reporting: the 4-step workflow" (https://revsmith.in/guides/automate-client-reporting).

## How to use it

1. Run checks 1 to 13 as soon as the month's data is pulled. Mark each one Pass, Flag or Not applicable.
2. Every Flag gets a line in the flag log at the bottom: what you saw, what caused it, what you did.
3. The approver runs check 14 last, after the narrative is written, and signs the sign-off block.
4. Keep the completed checklist with the version of the report that was sent.

## Before you start: the pull line

Write one line per source. It goes at the foot of the report.

| Source | Account ID | Period (first and last day) | Time zone | Currency | Pulled at |
|---|---|---|---|---|---|
| Example: Google Ads | 123-456-7890 | 1 to 31 October | Account time zone | USD | 1 November, 06:00 |
| | | | | | |
| | | | | | |
| | | | | | |

## A. Is it the right period, with no gaps?

- [ ] **1. Date range.** Every source covers the same first and last day, in one stated time zone.
  - How to test: compare each source's first and last date with the report's period; note each account's time zone.
  - What usually breaks: one platform pulled for the calendar month, another for the last 30 days; an ad account in a different time zone from the analytics property.
  - Who: automate.
- [ ] **2. Complete days.** No missing days, and no unexplained zero-spend day on a live campaign.
  - How to test: count the days with data per source; list any day with zero spend, zero clicks or zero sessions.
  - What usually breaks: a connector that failed for a day and filled with zeros; a campaign paused by billing.
  - Who: automate.

## B. Are the numbers comparable?

- [ ] **3. Currency.** Every money figure carries its currency; no total adds two currencies.
  - How to test: one total per currency. Convert only with a stated rate and date, and say so on the report.
  - What usually breaks: USD spend on one platform added to AED, GBP or INR spend on another as "total spend".
  - Who: automate.
- [ ] **4. Attribution windows.** Each platform's conversions use the window the report states, and the report names it.
  - How to test: read the attribution setting from the account (Meta sets it per ad set; Google Ads sets a conversion window per conversion action) and compare it with the window the report claims.
  - Facts to know: Google Ads' default click-through conversion window for a new conversion action is 30 days (Google Ads Help, "About conversion windows", https://support.google.com/google-ads/answer/3123169). From 12 January 2026, Meta's Ads Insights API no longer returns the 7-day view and 28-day view windows (Meta for Developers, 16 October 2025, https://developers.facebook.com/blog/post/2025/10/16/ads-insights-api-metric-availability-updates/).
  - Who: automate the read; a person decides which window the report uses.
- [ ] **5. Platform against analytics.** Conversions reported by an ad platform and conversions reported by GA4 or the client's CRM are shown side by side, never added together.
  - How to test: look for any total that mixes platform-reported and site-reported conversions.
  - What usually breaks: "total conversions" that counts the same purchase once in Google Ads, once in Meta and once in GA4.
  - Who: a person, once per client; then automate the rule.
- [ ] **6. Totals across platforms.** A total adds only the platforms that report that metric with the same definition.
  - How to test: recompute every total from its parts. Once a month, compare one client's figures with each platform's own interface.
  - What usually breaks: "leads" that means a form fill on one platform and a call on another.
  - Who: automate; a person spot-checks one client a month.
- [ ] **7. Against last month's report.** Last month's figures in this report match what the client saw last month, or the restatement is explained.
  - How to test: compare with the frozen copy of last month's report.
  - What usually breaks: conversions that kept arriving after the month closed. Google Ads' standard Conversions column credits a conversion to the date of the ad click, so a closed month can still rise; its "by conv. time" columns count by the date of the conversion (Google Ads Help, https://support.google.com/google-ads/answer/9549009).
  - Who: automate.
- [ ] **8. Comparison base.** Month-on-month and year-on-year changes compare the same number of days and the same accounts.
  - How to test: check that the earlier period had the same accounts mapped and the same days counted.
  - What usually breaks: October (31 days) against September (30 days) shown as growth; last year's figure missing an account that did not exist then.
  - Who: automate.

## C. Does anything need explaining?

- [ ] **9. Targets and budget.** Every figure that has a target shows it, and spend is shown against the month's budget.
  - How to test: read the targets and budgets agreed with the client; flag any headline figure with no target.
  - What usually breaks: targets changed on a call and never written down.
  - Who: automate.
- [ ] **10. Anomalies.** Any change beyond your threshold has a cause written next to it before the narrative is drafted.
  - How to test: set a threshold per metric (for example 25% month on month for cost per result) and list every figure past it.
  - What usually breaks: a big move explained in the report by a guess instead of a record.
  - Who: automate the flag; a person writes the cause, with the record behind it.
- [ ] **11. Tracking breaks.** Conversion tags, pixels and key events still fire, and no definition changed during the month.
  - How to test: look for a fall to zero, a one-day spike, a new or renamed conversion action, a changed key event, or a reporting window the platform's API no longer returns.
  - What usually breaks: a site release that removed a tag; a platform change nobody at the agency made (see check 4 for Meta's January 2026 change).
  - Who: automate the flag; a person confirms with the client or the developer.

## D. Does every number belong to this client, under the agreed name?

- [ ] **12. Account map.** Every account ID in the pull belongs to this client, and every account the client has is in the pull.
  - How to test: compare the pulled account IDs with the client's account map (client, platform, account ID, owner).
  - What usually breaks: a new account the client opened and nobody mapped; an old account still mapped after it moved to another client.
  - Who: automate.
- [ ] **13. Metric names.** Every metric carries the name and definition the client agreed, the same as last month.
  - How to test: compare the report's metric names with the client's glossary.
  - What usually breaks: "ROAS" on platform revenue one month and on store revenue the next.
  - Who: a person writes the glossary once; then automate.

## E. The last test, for the approver

- [ ] **14. Would I defend this number?** Pick the three figures the client will quote to their boss. For each one, can you say where it comes from, for which days, in which currency and with which attribution window, in the meeting, without opening a laptop?
  - If not, the figure does not go in the report until you can.
  - Who: the named approver.

## AI-specific rules (if any part of the report is drafted by AI)

- The model never writes a number. Code or the reporting tool makes every figure; the model writes the words around figures it is given.
- Any sentence with a number the code did not make is deleted.
- Every "why" sentence points to a record: an account change, a call note, a client event. No record, no sentence.
- The period, the currency and the client are set by code, never by the prompt.
- A person approves before anything reaches the client.

## Flag log

| Check | What we saw | Cause | What we did | Who | Date |
|---|---|---|---|---|---|
| | | | | | |
| | | | | | |
| | | | | | |

## Sign-off

| Field | Entry |
|---|---|
| Client | |
| Period | |
| Checks 1 to 13 run by | |
| Flags open at sign-off (should be none) | |
| Approver (named person) | |
| Check 14 done (three figures traced) | |
| Approved on (date and time) | |
| Version sent | |
| Sent on | |

Sources for the platform facts above: Google Ads Help, "About conversion windows" and "Understand conversions by time with new columns"; Meta for Developers, "Ads Insights API metric availability updates", 16 October 2025. Platform behavior changes; re-check each source when you adopt this checklist.
