prathamaar
All projects

Meta Ads Auto Reporting

Meta Ads

Automated Meta Ads reporting in Google Sheets

Scheduled data collection brings Meta Ads performance into Google Sheets at Account, Campaign, Ad Set, and Ad levels. Central monitoring records run status and retries failed pulls.

Platform
Meta Ads
Technology
Meta Ads APIGoogle Apps ScriptGoogle SheetsAutomation

The Problem

Reporting shouldn't start with downloading reports.

Managing Meta Ads across multiple clients meant repeatedly pulling the same performance data from Ads Manager - account by account, campaign by campaign. As the number of accounts grew, this became more than repetitive work.

Manual exports took time, made historical data harder to maintain consistently, and created another daily process that needed to be checked. I wanted the data to already be there when the team started working.

I automated the recurring data collection so the team could start with the reporting dataset.

The Solution

One reporting pipeline for active client accounts.

I built a multi-account reporting system using the Meta Ads API, Google Apps Script, and Google Sheets. A centralized master sheet acts as the control layer. It manages the client accounts included in the automation, determines which accounts should be processed, and tracks the status of every reporting run.

Every day at 7:00 AM (UTC+7), the system starts pulling Meta Ads performance data for each active client. The data is then stored in each client's dedicated spreadsheet across four levels of reporting:

Account → Campaign → Ad Set → Ad

But pulling the data was only part of the problem. The system also needed to know what happened when something went wrong.

Centralized Monitoring

One place to see what's running - and what needs attention.

The master sheet acts as the operational dashboard for the entire reporting pipeline. Each client account is registered with its reporting destination and automation status.

Every run updates information such as the latest run date, current status, next retry time, and retry count. This makes it possible to monitor dozens of reporting processes from one place instead of opening every client spreadsheet individually.

Central master sheet listing client accounts, reporting destinations, run status, next retry time, and retry count
Centralized Account Monitoring - The master sheet manages active client accounts and tracks the status of each automated reporting run.Open full-size screenshot

Automated Every Morning

7:00 AM

UTC+7

Every morning at 7:00 AM UTC+7, the automation reads the active accounts from the master sheet and begins processing them. For each account, the system retrieves the latest Meta Ads performance data and writes it into the corresponding client spreadsheet.

Scheduled runs collect the data before routine reporting, while the master sheet shows which pulls need attention. Each successful pull adds to the historical dataset.

Four Levels of Reporting

From the entire account down to individual ads.

Each client spreadsheet follows the same reporting structure, giving both high-level visibility and the granularity needed for deeper campaign analysis.

01 - Account

Daily account totals provide an overview of performance.

Google Sheets account overview with daily Meta Ads account-level performance data
Daily account-level performance automatically stored as historical data.Open full-size screenshot

02 - Campaign

Campaign-level reporting makes it easier to compare initiatives, objectives, and performance across campaigns without manually rebuilding the dataset.

Google Sheets campaign overview with daily Meta Ads campaign-level performance data
Campaign-level data provides a more granular breakdown of daily Meta Ads performance.Open full-size screenshot

03 - Ad Set

Ad set data supports comparisons between audiences and targeting setups.

Google Sheets ad set overview with Meta Ads audience and targeting performance data
Ad Set-level reporting for deeper audience and targeting analysis.Open full-size screenshot

04 - Ad

The final layer captures individual ad performance, making it possible to evaluate specific ads and creatives using the same historical reporting structure.

Google Sheets ad overview with individual Meta Ads creative performance data
Individual ad-level data provides the most granular view of campaign performance.Open full-size screenshot

Built to Recover

Because automation also needs a backup plan.

A scheduled process isn't truly useful if someone still has to watch it every morning. That's why I built failure handling directly into the reporting workflow.

If an account fails during processing, the system doesn't silently skip it or stop the entire reporting pipeline. Instead, the error is recorded in the master sheet and the affected account is automatically scheduled for another attempt one hour later. Successful accounts can continue normally while failed accounts enter their own retry cycle.

Error detected → Status logged → Retry scheduled → Run again

The Workflow

From scheduled trigger to analysis-ready data.

  1. 01

    7:00 AM Trigger

    Daily automation starts

  2. 02

    Read Active Accounts

    Master sheet determines what needs to run

  3. 03

    Pull Meta Ads Data

    Performance data retrieved automatically

  4. 04

    Structure the Data

    Account → Campaign → Ad Set → Ad

  5. 05

    Update Status

    Successful runs are recorded

  6. 06

    Recover if Needed

    Failed accounts retry one hour later

The Result

Scheduled collection with visible run status.

Scheduled collection replaces the recurring manual exports for the accounts included in the system. The team can check run status and use the historical data for reporting and analysis.

Daily

Automated Data Collection

Runs every morning without starting the process manually.

4 Levels

Reporting Granularity

Account, Campaign, Ad Set, and individual Ad data.

Auto-Retry

Built-In Recovery

Failed data pulls are automatically queued for another attempt.

What This Changed

From manual exports to reporting checks.

Before

Open Ads Manager → Select Account → Set Date → Export → Clean Data → Repeat

After

Check Run Status → Open the Report → Analyze

Still pulling advertising data manually?

Tell me which recurring exports your team relies on. Scheduled collection can leave more of the reporting process for analysis.

Discuss a project