Guide

How to automate Meta Ads reporting in Google Sheets

A practical, no-fluff guide for performance teams and agencies.

Meta's Marketing API will give you exactly what you ask for — which is the problem, because the defaults answer a different question than your report does. Attribution settings, impression-date credit and action breakdowns all have to be pinned deliberately. This guide is the Meta-specific mechanics of a weekly Sheets report that holds still.

The account model

Business Manager → ad accounts (act_<id>) → campaign → ad set → ad. Pulls run against one act_ per client; the insights endpoint (act_<id>/insights) takes explicit fields, optional breakdowns (country, age, placement) and a time_range in the ad account's timezone.

Pin the attribution setting — every pull

Meta reports conversions under an attribution setting (e.g. 7-day click / 1-day view). Two consequences:

  1. If the setting isn't pinned in the request, week 23 and week 24 can be measured under different rules — and your trend line breaks for measurement reasons
  2. Whatever you pin, write it in the report's header, because every future "why did conversions drop" conversation starts there

Impression-date credit and the rising week

Meta books a conversion to the date of the impression that earned credit. A user who saw the ad Friday and converted Wednesday lands on Friday — retroactively. So last week keeps rising for ~7 days. Same fix as Google, same discipline: re-pull a trailing window each run so the report converges, and never compare a fresh week to a settled one without saying so.

Actions need unpacking

Results come back as an actions array — purchase, lead, app events, each a typed entry. Pulling "results" without selecting the action type sums things you don't mean. Pick the action that matches your KPI; for app campaigns, treat it as Meta's claim and take outcomes from the MMP, reconciled side by side (why they differ).

Big accounts: async jobs

Long ranges × breakdowns blow past synchronous limits. The insights endpoint supports async report runs — request, poll, fetch — which is invisible plumbing until the week your pull silently truncates without it.

The weekly workflow

  1. Last full ISO week, account timezone, explicit time_range
  2. Insights pull per act_: spend, impressions, the named action — attribution setting pinned, breakdowns as the report needs
  3. Trailing 7-day re-pull merged over recent rows
  4. MMP outcomes for the same window; variance computed
  5. CAC/ROAS on your definitions; previewed append; summary

Example block

Week Spend Purchases (Meta, 7dc/1dv) Customers (MMP) CAC Var.
Jun 8–14 $13,900 1,388 1,012 $13.74 +37%

QA checklist

  • ✓ Attribution setting stated in the header and identical across weeks
  • ✓ Spend ties to Ads Manager for the same range and timezone
  • ✓ Action type verified — the event counted is the event meant
  • ✓ Trailing re-pull observed converging by mid-week

When not to automate

A single low-spend account reviewed monthly. The discipline above still applies manually; the schedule doesn't earn its keep yet.

How Opera runs it

The Meta Ads → Google Sheets integration pins settings per pull, merges trailing windows, keeps Meta's claims beside MMP outcomes and appends through the same schema-validated, append-only path as everything else.

"Update the weekly report with last week's Meta spend and purchases, reconciled against AppsFlyer."

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 did last week's Meta conversions change after I reported them?
Impression-date credit: late converters land retroactively on the day of the impression. Re-pull a trailing window each run and report weeks as 'settling' until they converge.
Which attribution setting should we pin?
The one your team optimizes under — commonly 7-day click / 1-day view — held constant. Changing it is sometimes right, but do it as an announced definition change, not a silent pull difference.
Do I need breakdowns in the weekly report?
Only the ones the report actually displays (country is the usual one). Every breakdown multiplies rows and pull time; detail tabs can carry the rest.

Start from a proven weekly report structure.

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