Google Ads export playbook
Export Google Ads change history before the 30-day API window closes.
Google Ads gives you a native change-history view, a scriptable path into Sheets, and an API record you can capture on a schedule. The hard part is choosing the right path before the client asks, “who changed this?” Here is the operator’s export map — plus where SpendSignoff turns that raw history into the free client-presentable audit report a thin MCP pipe can’t produce.
For agencies and freelancers who need Google Ads change history for client reporting, approvals, and audit-ready AI ad work. Operational guidance only; not legal advice.
Google Ads change-history export chooser
Use this when you need the record today. The native UI is fastest for investigation; Sheets works for a one-off weekly pull; the API is the scheduled capture path; SpendSignoff is the client-ready layer with governance, approvals, and six-platform coverage around the record.
| Use case | Best export path | What you get | Watch out for | Client-ready next step |
|---|---|---|---|---|
| You need to answer “who changed the budget?” on a call | Google Ads UI -> Change history | Fast account view by date, user, tool, campaign, and change type | Good for investigation, weak as a polished client handoff | Copy the relevant row into the audit-ledger format |
| You want a quick weekly spreadsheet | Google Ads Script -> GAQL `change_event` -> Google Sheet | Recent rows in a Sheet for a defined lookback, such as last 7 days | You still need to clean, group, and explain raw rows | Add old/new value, owner, and “why it matters” columns |
| You need scheduled capture for every client | Google Ads API `change_event` job | Actor, client type, resource changed, timestamp, and old/new values | Date range must be within the past 30 days and queries need a limit | Store normalized rows before the window expires |
| You need a board/client-ready monthly record | SpendSignoff audit report | A dated ledger: what changed, who/what changed it, old -> new, why it matters | Raw Google history is the input, not the final story | Attach it to the monthly report with approvals and follow-up actions |
- Decision rule: use the UI for a same-day investigation, Sheets for a one-off pull, the API for scheduled capture, and the SpendSignoff audit report when a client needs a readable record.
- The operational deadline: the Google Ads API `change_event` resource is queryable only inside a recent 30-day window, so monthly capture should run before month-end cleanup becomes archaeology.
- Edge case: if a change looks missing or impossible, check access, automated rules, API/tool actors, and UI display limitations before blaming a human. The record is evidence, but it still needs investigation.
The UI can show history. It does not make a client report.
Google Ads change history is a strong investigation tool: you can review changes, filter by user or tool, and compare the timeline with performance. But when a client asks why spend moved, sending them a raw account-history screenshot is not the same as explaining the decision.
The second trap is waiting too long. The UI may retain a longer account-history view, but the machine-readable `change_event` export that lets you build a proper ledger has a much tighter window. If you want a scheduled, client-ready audit trail, capture it before the data falls out of reach.
- Google’s UI change history covers account, campaign, and ad group changes and can show who made certain changes.
- The Google Ads API `change_event` query must use a date range within the past 30 days and include a limit of at most 10,000 rows.
- Operators still ask how to export recent change history into Google Sheets because the native surface does not give agencies the final client artifact.
The export path that holds up
Investigate in the native UI
Start in Google Ads Change history when the question is immediate: budget edits, status changes, keyword moves, API actors, automated rules, and who made the change. It is the fastest path to the raw fact.
Capture on a schedule
For repeatable reporting, query `change_event` before the 30-day API window closes. Store normalized rows with timestamp, actor, client type, resource type, old value, and new value.
Translate raw rows into an audit report
A client does not need every raw event. They need the spend-moving changes, the approval trail, and the next action. SpendSignoff keeps that record across Google plus Meta, Microsoft, Amazon, LinkedIn, and TikTok workflows.
Raw export vs. audit report
What the export can and cannot do
Google’s native UI is an investigation surface, not a finished client handoff.
Google Ads Help says change history lists account, campaign, and ad group changes from the past two years, maps changes to performance data, and can show who made certain changes. That is strong raw evidence, but it still leaves the agency to decide what the client should see.
Google Ads Help — About change historyThe machine-readable change export has a 30-day operational deadline.
Google’s `change_event` documentation states that the date range must be within the past 30 days and that each query needs a LIMIT of at most 10,000 rows. If you want scheduled reporting, capture before that window closes.
Google Ads API — Change EventSheets exports are possible, but they are still raw material.
In the Google Ads Scripts forum, an operator asked for a last-7-days change-history export to Google Sheets at MCC level, and a Google Ads Scripts Team reply provided a GAQL-to-Sheets example. Useful, but it does not create the client narrative.
Google Ads Scripts Forum — export change historyQuestions
Can I export Google Ads change history?
Yes, depending on what you mean by export. The Google Ads UI lets you review and filter change history. Google Ads Scripts can push recent `change_event` rows into a Sheet. The Google Ads API is the better path for scheduled capture, especially because `change_event` queries must stay inside the recent 30-day window.
How far back does Google Ads change history go?
Google’s UI help says change history lists changes from the past two years. The API export used for scheduled machine-readable capture is different: `change_event` queries must use a date range within the past 30 days. Do not confuse the UI review window with the automation window.
Why not just send the Google Ads change history screenshot to the client?
Because the screenshot answers “what raw event exists,” not “what did you do, why did it matter, and what happens next.” A client-ready report filters for spend-moving changes, translates old -> new values, separates human/API/platform actors, and adds the follow-up action.
Does this replace an approval workflow?
No. Change history is after-the-fact evidence. Approval workflow is before-the-fact control. SpendSignoff connects both: AI drafts a change, a human approves it, and the change record becomes part of the audit report.
Does SpendSignoff only work for Google Ads history?
No. Google Ads is the cleanest example because `change_event` is well documented, but SpendSignoff is built as a six-platform operating layer across Google, Meta, Microsoft, Amazon, LinkedIn, and TikTok. The client-facing report keeps one shape across those workflows.
Keep reading
Turn Google’s raw history into the report a client can read.
Bring a Google Ads account to a 15-minute demo and see the free audit report built from native change history: old value, new value, actor, approval context, and the plain-English reason it mattered.