Skip to main content
R

Reinhard Schmidbauer

1
Workflow

Workflows by Reinhard Schmidbauer

Workflow preview: Meta ads to Google Sheets: daily & historical campaign performance report
Free intermediate

Meta ads to Google Sheets: daily & historical campaign performance report

## Overview This template automatically exports **Meta (Facebook) Ads campaign performance** into **Google Sheets** — both **daily** and for **historical backfills**. It’s ideal for performance marketers, agencies, and analytics teams who want a reliable data pipeline from Meta Ads into their reporting stack. ## What this workflow does - Runs a **daily cron job** to pull *yesterday’s* campaign-level performance from the Meta Ads Insights API. - Flattens the API response and calculates key KPIs like **CPL, CPA, ROAS, CTR, CPC, CPM, frequency** and more. - Appends one row per **campaign per day** to a Google Sheet (for dashboards and further analysis). - Provides a separate **Manual Backfill** section to import historical data using a `time_range` parameter (e.g. last 12–24 months). ## Use cases - Build Looker Studio / Power BI dashboards on top of a clean, daily Meta Ads dataset. - Track ROAS, CPL, CPA, CTR, and frequency trends over time. - Combine campaign data with CRM or ecommerce data in the same spreadsheet. - Quickly backfill past performance when onboarding a new Meta Ads account. ## How it works 1. **Daily Incremental Flow** - A `Schedule Trigger` runs every day at 05:00. - The `Set config` node defines ad account, date preset (`yesterday`), and Google Sheet details. - The `Meta Insights` node calls the Facebook Graph `insights` edge at `level=campaign`. - The `Code` node flattens the data and derives CPL, CPA, ROAS, and other KPIs. - The `Google Sheets` node appends the rows to your `Meta_Daily_Data` sheet. 2. **Manual Backfill Flow** - A `Manual Trigger` lets you run the flow on demand. - The `Set backfill config` node defines `backfillSince` and `backfillUntil`. - The `Meta Insights (time_range)` node fetches performance for that historical range. - The same transform logic is applied, and rows are appended to the same sheet. ## Prerequisites - A Meta Business account with: - A **system user** and a **long-lived access token** with `ads_read` / `read_insights`. - A **Google Sheet** with a header row that matches the mapped column names. - n8n credentials for: - **Facebook Graph API** - **Google Sheets OAuth2** ## Setup steps 1. Import this template into your n8n instance. 2. Open the `Set config` and `Set backfill config` nodes: - Set your `adAccountId` (e.g. `act_123456789012345`). - Set your `sheetId` (Google Sheet ID) and sheet name (e.g. `Meta_Daily_Data`). 3. Configure your **Facebook Graph API** and **Google Sheets** credentials in n8n. 4. (Optional) Run the **Manual Backfill** section for your desired historical ranges (e.g. per quarter). 5. Enable the workflow so the **Daily Incremental** section runs automatically. ## Customization - Change `level` from `campaign` to `adset` or `ad` if you need more granular reporting. - Add **breakdowns** (e.g. `publisher_platform`, `platform_position`) to split by platform and placement. - Extend the transform code with additional KPIs or dimensions that match your reporting needs. - Use a separate sheet for raw data and build dashboards on top of a cleaned or pivoted view. ## Consulting & support If you need help with: - **E-Commerce Strategy & Development** (Shopify, Shopware 6, Magento 2, SAP Commerce Cloud, etc.) - **Growth & Performance Marketing** (Google / Meta / Microsoft Ads, etc.) - **Data & Analytics Setups** (tracking, dashboards, attribution, gdpr, etc.) please reach out to **Serendipity Technologies**: 👉 [https://www.serendipity.at](https://www.serendipity.at) We can help you turn this workflow into a full analytics stack and reporting system tailored to your business.

R
Reinhard Schmidbauer
Market Research
5 Dec 2025
328
0