Facebook (Meta) Ads to Power BI: synthetic reporting example
Prepared 17 October 2026 by Turing BI
https://turingbi.com/insights/connect-meta-ads-to-power-bi

PURPOSE AND LIMITS
All records and identifiers are invented teaching data. This normalised CSV is
not a Meta API response or a client result. Arithmetic is independently checked.
No private Meta API, DAX or Power BI Desktop/Service execution is claimed.
No PBIX is included. This pack contains no ad account credentials or tokens.

FILES
campaign-daily.csv: four daily rows, two fictional campaigns in one account.
measures.dax: create each definition as a separate measure on MetaCampaigns.
expected-results.csv: control values at Decimal precision and display formats.

REPORT BASIS
Reporting dates: 14 and 15 September 2026, account timezone Europe/London.
Assumed account/source currency: GBP. Action reporting time: impression.
Chosen attribution window: 7d_click. This is not an Ads Manager default claim.
The purchase action label TEACHING_WEBSITE_PURCHASE is invented for this model;
it is not a Meta API identifier. Live extraction must select one verified
account-returned purchase action_type and the entry with the same action_type
in the action_values array.
The extraction timestamp is illustrative, not evidence of a live account request.
Preserve source metric precision in live data; sample whole counts do not
establish that every live reported conversion count is an integer.

IMPORT
Desktop: Get data > Text/CSV > campaign-daily.csv > Transform Data.
Name the query MetaCampaigns. Set date_start/date_stop to Date; spend and
reported_purchase_value to Fixed Decimal Number. For this sample, set
impressions, inline_link_clicks and reported_purchases to Whole Number.
Keep identifiers and reporting-basis metadata as Text. Close & Apply.
Add each measure separately. Use cards for totals and a table by reporting
date and campaign_id. Format Link CTR as percentage with two decimals,
Meta Reported ROAS as decimal ratio, and monetary measures as GBP two decimals.

CONTROL RESULTS
Spend GBP 600.00; impressions 45000; link clicks 690; reported purchases 40;
reported purchase value GBP 2400.00; Meta Reported ROAS 4.00;
Link CTR 1.53%; cost per link click GBP 0.87;
cost per reported purchase GBP 15.00; CPM GBP 13.33 after rounding.
The four row ROAS values are 6, 3, 4.8 and 3.6. Their average, 4.35, uses the
wrong spend weighting. Divide total reported value by total spend to get 4.00.

SOURCE AND SNAPSHOT CONTROLS
Keep one current row per account/campaign/day/reporting basis. Replace repeat
extractions at that grain; keep audit history separately. Do not combine
campaign totals with ad-level rows or sum overlapping extracts.
Extract the selected action count/value as scalars without expanding both
action arrays into a Cartesian join that repeats cost. Do not sum purchase
aliases. Keep unavailable/omitted actions distinct from verified zero results.
Match Ads Manager's dates, timezone, metric and supported attribution settings
before comparing. Store the actual validated source definitions in a live build.
Keep Meta-reported value, GA4-attributed revenue and store revenue separate.
The ratio shown here is not profit, incrementality or a promise of ad results.
Validate API coverage and actual Power BI Service refresh before relying on a build.
