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 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.
Architecture
The consolidation happens in two stages: within a platform and across platforms.
- 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.
- Extraction-level preparation: Dataddo automatically applies data flattening (nested API responses become flat tables) and data harmonization (consistent date formats, correctly typed numeric values), so datasets from different platforms arrive analytics-ready and comparable.
- Across platforms - Combine Data: In the data flow, merge the per-platform sources with the 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 reshape the data inside Dataddo.
- Destination: Deliver the unified dataset either directly to a dashboarding app through SmartCache (no warehouse needed; see Data to Dashboards) or to a data warehouse when volumes or transformation needs grow (see 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, so each row states which account it came from.
- 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). 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. 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.
Setup walkthrough
- 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.
- Create one MAE source per platform following How to Create 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.
- Combine the sources: when creating the flow, click Combine Sources and choose Data Union (identical schemas) or the SQL Editor (custom logic, high volume), per Combine Data.
- Connect the destination:
- Dashboarding app: follow Data to Dashboards; mind the SmartCache recommendation of roughly 150,000 rows per source.
- Warehouse: follow Batch Ingestion to Data Warehouses and select a write mode. On this branch you can also put the 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).
- 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:
| 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.
Operations
- Backfilling: to load history for newly added client accounts, use Data Backfilling to Dashboarding Apps or 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).
- Monitoring: enable the Data Quality Firewall (warehouse branch; storage destinations only) or the 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.
- More than 100 sources to combine: a single flow unions up to 100 sources; split into multiple flows. See 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).
- 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.
Related connectors and next steps
Most-used connectors for this pattern: Facebook Ads, Google Ads, Google Analytics 4, TikTok Ads, Microsoft Advertising (Bing Ads).