A practical, no-fluff guide for performance teams and agencies.
Google Ads reporting has a deceptively good built-in answer — the official Google Ads add-on for Sheets — and a set of quirks that bite anyone who automates past it: cost in micros, conversions that restate for days, and the MCC account model. This guide covers the real mechanics of getting Google Ads into a structured weekly report, whichever tool does the pulling.
Agencies live under an MCC (manager account) with 10-digit customer IDs beneath it. Every pull is scoped to one customer ID — reports that mix clients are mixing customer IDs upstream, which is where per-client isolation has to start. Write the customer ID in the report's definitions block; "the Google account" is not a scope.
The Google Ads API speaks GAQL. The weekly workhorse looks like:
SELECT campaign.name, metrics.cost_micros, metrics.clicks, metrics.conversions, segments.date FROM campaign WHERE segments.date BETWEEN '2026-06-08' AND '2026-06-14'
Three things to internalize:
cost_micros — divide by 1,000,000 or enjoy a memorable Mondaymetrics.conversions — modeled, credited to the click date, and restated upward for several days as late conversions landsegments.date — explicit date ranges beat relative presets for reports; presets shift under you at timezone boundariesPull last week on Monday and Friday shows 180 conversions. Pull again Thursday and Friday shows 205 — Google attributed late converters back to their click date. A report that freezes Monday's number diverges from reality all week. The fix is mechanical: re-pull a trailing window (7–14 days) on every run and let the report's recent rows update — append-only for new periods, refresh-in-place for the still-settling tail, clearly understood as such.
metrics.conversions sums whichever conversion actions are marked primary. If your CAC counts purchases but the account also tracks sign-ups as primary, your denominator is polluted at the source. Either scope the query to the conversion action you mean, or — cleaner — take outcomes from the MMP and use Google's conversions as the platform-side reconciliation column.
| Week | Spend | Clicks | Conv. (Google) | Customers (MMP) | CAC |
|---|---|---|---|---|---|
| Jun 8–14 | $17,800 | 24,310 | 1,205 | 998 | $17.84 |
A single campaign, checked ad hoc, in one currency — the add-on and ten minutes are fine. Automation pays at multi-client, multi-campaign, weekly cadence.
The Google Ads → Google Sheets integration does this natively: GAQL per customer ID, micros handled, trailing re-pulls, MMP reconciliation, schema-validated appends.
"Update the weekly report with last week's Google Ads spend and conversions by campaign."
See this running on your own reports.A 45-minute workflow audit maps your current process and shows exactly what Opera automates — step by step.
Grab the free template, then let Opera keep it updated automatically — append-only, formulas preserved.