Monthly Google Ads performance report sync to Google Sheets

Go to Workflow
897 views
Built by Allan Vaccarizi Allan Vaccarizi
Created on June 13, 2026

Description

Quick overview
📺 Full walkthrough video: https://youtu.be/62QIMjT2u-E

Automatically pulls monthly Google Ads campaign metrics for multiple clients via the API and appends the data into dedicated Google Sheets tabs — triggered on the 3rd of each month.

How it works
A Schedule Trigger fires on the 3rd of each month at 10 AM to kick off the reporting process.
A Google Sheets node reads the full client list (with their Google Ads Customer IDs) from a source sheet.
A SplitInBatches loop iterates over each client one by one, sending a POST request to the Google Ads searchStream API endpoint to fetch last month's campaign metrics (cost, clicks, impressions, conversions, conversion value).
A JavaScript Code node flattens the raw API response, converts cost from micros to euros, rounds numeric values, and normalizes the month format.
The processed rows are appended to a dedicated per-client tab (named Data {Client}) in the same Google Sheet.
A Wait node pauses execution between each client to respect API rate limits before looping to the next.

Setup
Duplicate the template spreadsheet — Google Sheets Template — and save it to your Google Drive.
Connect your Google Sheets OAuth2 credentials and point the "Read Clients from Sheets" node to your spreadsheet and the "Client" source sheet.
Connect your Google Ads OAuth2 credentials in the HTTP Request node.
Replace the developer-token and login-customer-id header values in the HTTP Request node with your own.
Ensure each client tab in the spreadsheet is named Data {Client} to match the dynamic sheet name expression.
Adjust the Wait node delay if needed to avoid hitting API rate limits.

Requirements
Google Ads account with API access and a valid developer token
Google Sheets account with OAuth2 credentials
A spreadsheet with a "Client" sheet listing client names and their Google Ads Customer IDs
One tab per client named Data {Client} in the same spreadsheet

Customization
Modify the GAQL query in the HTTP Request node to pull different metrics or date ranges (e.g., LAST_7_DAYS, THIS_MONTH)
Extend the JavaScript transformation to compute additional KPIs such as CPC or ROAS before appending to the sheet
Add a Slack or email notification after each client iteration to alert stakeholders when the report is ready

Additional info
Template maintained by Growth AI — a Lyon-based automation agency specializing in n8n workflows. For custom enterprise reporting pipelines, reach out via LinkedIn.

Nodes Used (4)

Code
n8n-nodes-base.code
Google Drive
n8n-nodes-base.googleDrive
Google Sheets
n8n-nodes-base.googleSheets
HTTP Request
n8n-nodes-base.httpRequest