Account Summary is a self-contained daily reporting script: it appends one row per day of account-level metrics to a single Report tab and sends a short comparison e-mail. Unlike the old Google template it needs no named ranges — the script creates its own tabs and header row.

How it works

Each run queries the customer resource for the last refresh_days days in one GAQL call and upserts those rows in place, so late-arriving conversions are corrected instead of frozen. On the very first run it backfills backfill_days days (max 90); setting last_check in the _settings tab to an earlier date triggers a manual backfill. Micro-amounts, impression shares and rates are converted to plain numbers before writing. The comparison e-mail is built from the same query.

What it writes to the Sheet

  • Report — row 1 title and attribution, row 2 header, one data row per day from row 3: Date, Cost, Avg. CPC, CTR, Search impr. share, Impressions, Clicks, Conversions, Conv. value, Cost / conv., Conv. rate, All conv., View-through conv., Lost IS (budget), Lost IS (rank), Top IS, Abs. top IS, Avg. CPM, Interactions, Interaction rate, Invalid clicks.
  • _settings — email and last_check.

Setup

  1. Create a new, empty Google Sheet with the Google account you will authorise the script with and copy its URL. Do not reuse a Sheet from another script — each Sheet is bound to one script and one Google Ads account.
  2. In Google Ads open Tools → Scripts, create a new script, paste the whole code and give it a name.
  3. Set CONFIG.spreadsheet_url to the Sheet URL. If you run the script from a manager (MCC) account, also set CONFIG.account_id to the client account ID (e.g. 123-456-7890); without it the script stops with a clear error.
  4. Optional: fill CONFIG.email (comma-separated recipients) and/or CONFIG.slack_webhook. Keep the webhook in the code only — it is never written to the Sheet.
  5. Authorise the script, run Preview once to check the log, then Run. The first run creates the tabs, the header rows and the _settings tab.
  6. Schedule it: daily, at 04:00 account time or later.
  7. Optional: download the Excel dashboard (button above), open its Read me tab and paste the Sheet tabs as described — the column layout matches the script output one-to-one.

Parameters

ParameterDescriptionDefault
spreadsheet_urlURL of the empty Google Sheet the script writes to.'YOUR_SPREADSHEET_URL'
emailComma-separated recipients; blank = no e-mail. Can be overridden in _settings.''
backfill_daysDays to fill on the first run (max 90).1
refresh_daysDays re-queried on every run so late conversions are picked up; match your longest conversion window.30
account_idClient account ID; required only when running from a manager (MCC) account.''
fieldsThe 20 customer-resource metrics written as columns; header labels come from the language dictionary.20 metrics
All values live in the CONFIG block at the top of the script; keys that also exist in the _settings tab can be changed there.

The _settings tab

On the first run the script creates a _settings tab (Key / Value / Notes). Values there override the matching CONFIG entries, so day-to-day tuning happens in the Sheet without editing code. Numbers must be written without thousands separators and with at most two decimals (0.5 or 0,5). The rows script and account mark the Sheet’s owner: if another script or another account opens the same Sheet, it stops before writing anything. Internal tabs starting with an underscore (_settings, _history, _snapshot, _state, _baseline) are language-independent, so switching between the EN/TR/DE builds keeps the stored state.

Notifications

If email is set, every run sends a table comparing yesterday with two days ago and with a week ago (▲/▼ deltas, cost-type metrics colour-inverted) and a link to the Sheet. There is no Slack option in this script.

Notes and limits

  • If you point the script at a Sheet built from Google’s old Account Summary template (named ranges, data from B6) it stops and tells you — the old report stays intact; use a new empty Sheet.
  • Dates are written as text (yyyy-MM-dd) to avoid locale auto-parsing; the dashboard converts them.
  • Every report tab carries a small attribution cell (H1:K1, warning-only protection) and the code header keeps a copyright line; both may be removed by anyone who edits the source.