Guide

How to automate Google Ads reporting in Google Sheets

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.

The account model, first

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 query that does the work

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 Monday
  • metrics.conversionsmodeled, credited to the click date, and restated upward for several days as late conversions land
  • segments.date — explicit date ranges beat relative presets for reports; presets shift under you at timezone boundaries

The restatement problem, concretely

Pull 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.

Conversion actions are a definition

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.

The weekly workflow

  1. Resolve last full ISO week in the report's timezone
  2. GAQL pull per customer ID: spend, clicks, conversions by campaign/day
  3. Convert micros; map campaigns to your taxonomy (prefixes earn their keep here)
  4. Pull MMP outcomes for the same window; reconcile
  5. Compute CAC/ROAS on your definitions
  6. Previewed append under the current section; trailing rows refreshed; summary posted

Example block

Week Spend Clicks Conv. (Google) Customers (MMP) CAC
Jun 8–14 $17,800 24,310 1,205 998 $17.84

QA checklist

  • ✓ Spend ties to the Google Ads UI for the same customer ID and range
  • ✓ Micros conversion sanity-checked (UI spend ÷ API spend = exactly 1)
  • ✓ Conversion-action scope written in the definitions block
  • ✓ Trailing-window refresh observed: last week's number should settle by ~Thursday

When not to automate

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.

How Opera runs it

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.

Frequently asked questions

Why don't my API numbers match the Google Ads UI?
Usually one of three: a timezone mismatch between the query and the account, a date range off by a boundary day, or conversions still restating. Pin all three and they reconcile.
Should I report Google's conversions or MMP conversions?
For app campaigns, MMP outcomes as the denominator and Google's conversions as the labeled platform-side column. For pure web, Google's conversion actions can be the source of truth — scoped to the action you mean.
Can the official Sheets add-on do all this?
It pulls well. The structured-report layer — anchored appends, formula preservation, trailing refresh logic, reconciliation — is yours to build around it, which is the gap an operations platform closes.

Start from a proven weekly report structure.

Grab the free template, then let Opera keep it updated automatically — append-only, formulas preserved.