---
title: "Multi-Account Marketing Reporting"
slug: "multi-account-marketing-reporting"
updated: 2026-07-12T15:19:30Z
published: 2026-07-12T15:19:30Z
canonical: "docs.dataddo.com/multi-account-marketing-reporting"
---

> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dataddo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Multi-Account Marketing Reporting

At the end of this guide, you will have one consolidated report covering **many ad accounts** - whether that is 20 client accounts on Facebook Ads, or Facebook, Google, and TikTok campaigns for one brand - refreshed automatically and attributable back to each account. This is the standard pattern for **agencies and multi-brand companies**. If you report on a single account, the simpler [Data to Dashboards](/docs/data-to-dashboards) pattern is enough; if your consolidated data also feeds models or long-term storage, deliver it to a warehouse via [Batch Ingestion to Data Warehouses](/docs/batch-ingestion-to-data-warehouses).

## Architecture

The consolidation happens in two stages: **within a platform** and **across platforms**.

1. **Within a platform - Multi-Account Extraction (MAE)**: One ***data source*** extracts data from multiple accounts of the same service simultaneously (e.g. all your Facebook Ads accounts) with a single, uniform configuration. To tell the accounts apart, include unique identifiers such as **account name/ID** or **page name/ID** as columns in the source. See [Multi-Account Extraction](/docs/multi-account-extraction).
2. **Extraction-level preparation**: Dataddo automatically applies [data flattening](/docs/data-flattening) (nested API responses become flat tables) and [data harmonization](/docs/data-harmonization) (consistent date formats, correctly typed numeric values), so datasets from different platforms arrive analytics-ready and comparable.
3. **Across platforms - Combine Data**: In the ***data flow***, merge the per-platform sources with the [Combine Data](/docs/combine-data) feature - **Data Union** for sources sharing an identical schema, or the **SQL Editor** for custom joins and high-volume datasets. For custom logic beyond unions and joins, [transformation pipeline scripts](/docs/transformation-pipeline-guide) reshape the data inside Dataddo.
4. **Destination**: Deliver the unified dataset either **directly to a dashboarding app** through SmartCache (no warehouse needed; see [Data to Dashboards](/docs/data-to-dashboards)) or **to a data warehouse** when volumes or transformation needs grow (see [Batch Ingestion to Data Warehouses](/docs/batch-ingestion-to-data-warehouses)).

### Making rows attributable

Two mechanisms keep every row traceable to its origin:

- **Account identifiers from MAE**: pick account name/ID (or page name/ID) as attributes during source setup, as recommended in the [MAE article](/docs/multi-account-extraction), so each row states which account it came from.
- **[Metadata inclusion](/docs/metadata-inclusion)**: beyond the account columns, the wider technical metadata set supports the pipeline itself. The **Dataddo Extraction Timestamp** marks when each row was extracted - the basis for versioned marketing snapshots and Slowly Changing Dimensions tracking. The **Dataddo Hash** is a generated natural key hashed from selected columns; use it as the upsert composite key when consolidating into a warehouse.

### Cross-platform naming

Data Union requires the combined sources to have **the exact same schema**: the same number of columns, the same column names/labels, and the same data types (see [Combine Data: Data Union](/docs/combine-data#data-union)). Platforms name the same concept differently (spend, cost, amount_spent), so when creating each per-platform source, align column labels and data types to one shared convention - e.g. `date`, `account_id`, `account_name`, `platform`, `campaign`, `impressions`, `clicks`, `spend`. Where schemas cannot be aligned at the source, use the **SQL Editor** instead of Data Union.

## Decision guide

The write strategy follows the delivery branch. For **direct dashboard delivery**, ad metrics for a closed day are typically immutable and extractions can be scheduled without overlap, so **SmartCache Append** builds the history; use **Replace** if you re-extract overlapping windows (platforms often restate recent days) - see the configuration guidance in [Simple Data Integration to Dashboards](/docs/simple-data-integration-to-dashboards). For **warehouse delivery**, prefer **upsert** keyed on date + account + campaign (or the Dataddo Hash) so restated metrics update in place. For the full decision framework, see [Choosing a Write Strategy](/docs/choosing-a-write-strategy).

## Setup walkthrough

1. **Enable MAE**: contact the Dataddo Solutions team, listing the accounts to extract. You need **administrator access to all accounts**. MAE is included in paid plans at no extra charge. See [Enabling MAE](/docs/multi-account-extraction).
2. **Create one MAE source per platform** following [How to Create a Data Source](/docs/creating-a-data-source). Use identical metric/attribute selections and column labels across platforms, include the account name/ID identifier, and add the **Extraction Timestamp** (and optionally the **Dataddo Hash**) per [Metadata Inclusion](/docs/metadata-inclusion).
3. **Combine the sources**: when [creating the flow](/docs/how-to-create-a-data-flow), click **Combine Sources** and choose **Data Union** (identical schemas) or the **SQL Editor** (custom logic, high volume), per [Combine Data](/docs/combine-data).
4. **Connect the destination**:
  - Dashboarding app: follow [Data to Dashboards](/docs/data-to-dashboards); mind the SmartCache recommendation of roughly **150,000 rows per source**.
  - Warehouse: follow [Batch Ingestion to Data Warehouses](/docs/batch-ingestion-to-data-warehouses) and select a write mode. On this branch you can also put the [Data Quality Firewall](/docs/data-quality-firewall) between extraction and write - available for storage destinations only - to run rule-based checks in **blocking** mode (stop bad loads) or **non-blocking** mode (alert only).
5. Check the **Data Preview**, name the flow, and click **Create Flow**.

## Configuration recommendations

| Scenario | Delivery | Write strategy | Notes |
| --- | --- | --- | --- |
| Daily cross-platform report, closed-day metrics only | Dashboard (SmartCache) | Append | Non-overlapping daily extractions |
| Report windows overlap (platforms restate recent days) | Dashboard (SmartCache) | Replace | Extract a rolling window (e.g. last 7 days) |
| Consolidated data also feeds BI models / long history | Warehouse | Upsert | Composite key: date + account ID + campaign, or Dataddo Hash |
| Very many sources or complex joins | Warehouse | Upsert / Insert | SQL Editor; SmartCache is not built for complex transformations |

## Account limits

MAE account limits are **plan-based** as published in [Multi-Account Extraction](/docs/multi-account-extraction):

| Plan | Number of accounts |
| --- | --- |
| Free | N/A |
| Data to Dashboards | Up to 10 accounts |
| Data Anywhere | Up to 30 accounts |
| Headless | Unlimited |

Depending on the amount of data in your accounts, more than one MAE source might be necessary.

MAE is supported for Facebook connectors (Ads, Graph, Leads, Page, Post, Video), Google connectors (Analytics, Analytics 4, Ads), Instagram connectors, LinkedIn Ads, Snapchat, TikTok, and Xero - see the [full connector list](/docs/multi-account-extraction#connectors-supporting-mae).

## Operations

- **Backfilling**: to load history for newly added client accounts, use [Data Backfilling to Dashboarding Apps](/docs/data-backfilling-to-dashboarding-apps) or [Data Backfilling to Storages](/docs/data-backfilling-to-storages) depending on your delivery branch. Note that an MAE source applies one configuration across all its accounts, so a backfill runs for the whole source.
- **Onboarding/offboarding accounts**: account selection changes go through the Solutions team, as MAE setup does ([Enabling MAE](/docs/multi-account-extraction#enabling-mae)).
- **Monitoring**: enable the [Data Quality Firewall](/docs/data-quality-firewall) (warehouse branch; storage destinations only) or the [Data Quality Watcher](/docs/data-quality-watcher) to catch incomplete or malformed extractions before they distort a client report.

## Troubleshooting

- **Data Union refuses a source / only some sources selectable**: schemas differ. Check column count, names, and data types; fix mismatched types in the source's **Data Types** tab. See [Combine Data: Different Data Types](/docs/combine-data#different-data-types).
- **More than 100 sources to combine**: a single flow unions up to **100 sources**; split into multiple flows. See [Maximum Number of Sources](/docs/combine-data#maximum-number-of-sources).
- **Dashboard slows down**: consolidated multi-account data quickly exceeds the ~150,000-row SmartCache recommendation; switch the delivery branch to a warehouse ([Simple Data Integration to Dashboards: Limitations](/docs/simple-data-integration-to-dashboards)).
- **Rows not attributable to an account**: the account name/ID identifier was not selected during MAE source setup; add it and re-extract.
- For generic errors (authorization, API limits), see [Troubleshooting](/docs/troubleshooting).

## Related connectors and next steps

Most-used connectors for this pattern: [Facebook Ads](/docs/facebook-ads), [Google Ads](/docs/google-ads), [Google Analytics 4](/docs/google-analytics-4), [TikTok Ads](/docs/tiktok-ads), [Microsoft Advertising (Bing Ads)](/docs/microsoft-ads).
