How to connect Facebook Ads to Looker Studio — every route, and what each one costs
There is no Google-built connector for Facebook Ads, and there never will be. If you opened the data source picker in Looker Studio (renamed Data Studio in April 2026), typed "Facebook", and got back a grid of third-party tiles with pricing pages attached, that wasn't a search failure — it's the actual state of the integration. This page lays out the four routes that genuinely exist, what each one costs in money and in maintenance, which of the "free" options are real, and the attribution problem that every route gets wrong by default.
Why there's no native Facebook Ads connector
Looker Studio's catalogue is three catalogues wearing one coat. Google connectors — Search Console, Analytics, Google Ads, Sheets, BigQuery — are first-party and free. Partner connectors are commercial products built and sold by other companies, typically billed per data source per month. Community connectors are things someone published and may or may not still maintain.
Meta Ads lives in the second and third groups, alongside TikTok, LinkedIn, Shopify and Stripe. Meta is a competitor of Google's in advertising; a free first-party pipe into a Google reporting product was never a plausible product decision. We wrote the long version of that argument in no Looker Studio connector for your source.
The practical consequence: the moment a source needs a partner connector, its cost stops scaling with how much data you have and starts scaling with how many sources you have. A five-channel report costs five times more to keep alive than a one-channel report, and the data hasn't grown at all.
The four routes that actually exist
1. A paid partner connector
Supermetrics, Windsor.ai, Catchr, Porter, Dataslayer and others all sell this. You authorize, pick the ad account, and Facebook data shows up in the picker as though it were native. This is the fastest route to a working chart, and for one awkward source that matters daily it's the right call.
What it costs beyond the subscription: a vendor relationship per source, an OAuth grant that expires and has to be re-approved, a status page to check when the chart goes blank, and pricing tiers that often key off the number of ad accounts — which is the exact dimension an agency grows along.
2. A community connector
Free, listed in the same gallery, and the reason many people think the problem is solved. The tradeoff is real: you're granting an unknown third party a token to your ad account, and there is no obligation on anyone to update it when Meta ships a breaking Marketing API version. The failure mode isn't an error message — it's a dashboard that keeps rendering yesterday's shape with today's date while returning nothing new.
3. Export from Ads Manager into Sheets
Also free, works today, and quietly the most common thing people actually do. Ads Manager exports a CSV, the CSV goes into a Google Sheet, and Looker Studio reads the Sheet through a first-party connector. It rots in three predictable ways: every refresh is a human remembering to re-export, every column change from Meta breaks a formula three tabs deep, and the dashboard gives no signal at all that the numbers behind it are eleven days old.
4. Land it in BigQuery first
The "do it properly" answer and genuinely correct at warehouse scale. But it moves the problem rather than removing it: something still has to write Facebook data into BigQuery, and that something is either an ELT vendor billed per connector — the connector tax, re-bought one layer down — or pipeline code you now own and debug. For a marketing dataset measured in millions of rows rather than billions, it's several sizes too big; we argued that case in the smallest marketing data warehouse that actually works.
What each route costs (prices checked October 1, 2026)
| Route | Money | Setup | How it refreshes | What breaks it |
|---|---|---|---|---|
| Supermetrics (partner connector) | Starter €39 a month billed yearly or €49 monthly: 3 data sources, 3 accounts per source, 1 user; 14-day trial (pricing) | Minutes | On report load, from Supermetrics | Each extra source or account moves you up a tier |
| Windsor.ai (partner connector) | Basic $19 a month billed yearly or $23 monthly: 3 data sources, 75 accounts, daily refresh. The free plan keeps 30 days of history (pricing) | Minutes | Daily on Basic; hourly from Standard ($99 / $118) | The free plan's 30-day history |
| Community connector | Free | Minutes | Varies by connector | An unmaintained connector after a Meta API version change |
| Ads Manager export → Google Sheets | Free | Ten minutes, then every refresh | Only when someone re-exports | Forgetting; a renamed column |
| BigQuery Data Transfer Service | BigQuery's paid Facebook Ads connector plus storage and queries | A Cloud project, a Meta developer app, a token | Daily, re-reading the last 30 days | A user token that expires after 60 days |
| TableBI (not a Looker Studio connector) | Free for one source and one live dashboard | Minutes for a CSV; the live Meta connector is in beta | Live sync re-pulls the latest 28 days; a CSV is as fresh as its export | It does not feed Looker Studio at all |
Catchr, Porter Metrics, Dataslayer and Power My Analytics sell the same kind of connector; their pricing pages are worth reading for the same three numbers: data sources, accounts per source, and refresh frequency. The BigQuery row comes from Google's Facebook Ads transfer guide; the full costing of that route is in our Meta Ads to Power BI guide, where it works the same way.
Step by step: the free route through Google Sheets
- Build the report in Ads Reporting. In Ads Manager open the Reports menu and choose Create custom report, or go to Business tools → Analyze and report → Reports. You need administrator, advertiser or analyst access to the ad account, per Meta's export help page.
- Add a daily breakdown. Break the report down by day so every row carries a date; add the Platform breakdown too if you want Instagram on its own line (see the Instagram section below).
- Choose the columns once. Pick the metrics in the Metrics tab — amount spent, impressions, link clicks, results — and save the report, so next week's export has the same columns in the same order.
- Export. Tick the report and click Export, or open it and click Export. Meta offers .xlsx or .csv; the maximum reporting window is 37 months from the date of the request.
- Put it in a Google Sheet. Import the file into a sheet that keeps one tab for this report and nothing else, so Looker Studio's field list doesn't change under you.
- Connect the sheet. In Looker Studio (now Data Studio), add data, pick the Google Sheets connector, then the spreadsheet and the tab. Google's data freshness guide says the Sheets connector refreshes every 15 minutes by default — which only matters after someone pastes a new export.
- Mark the stale days. Add a text box that says when the export was taken. The numbers for the latest 28 days will still move after it (the attribution section below says why).
Step by step: a partner or community connector
- Pick it in the connector gallery. In Looker Studio, add data and search for Facebook Ads. Every tile you see is built by a third party: Google's connector authorization page says community connectors are developed by third parties, not by Google.
- Authorize twice. First you allow Looker Studio to use the connector on your behalf; then the connector asks you to sign in to Facebook so it can read your ad account. If a connector asks for a username and password, Google's warning applies: it is not your Google password, and you should be sure you trust the connector's developer.
- Choose the ad account and the fields. Add a Date dimension and keep the date range at 28 days or longer for anything you report on.
- Know how to revoke it. In Looker Studio's data sources list, open the connector's menu and choose Revoke Access; on the Facebook side, remove the vendor's app from your business integrations.
Instagram Ads: the same four routes, one extra step
Instagram ads are Meta ads, so there is no separate Instagram Ads connector to find. They are bought in the same Ads Manager, billed to the same ad account and reported through the same Marketing API. Every route above that pulls Facebook Ads already pulls your Instagram ads, added into the same campaign totals.
The extra step is the split. Meta reports where an ad ran as a breakdown, not as a separate account: in Ads Manager it is Breakdown → By delivery → Platform, and in the Marketing API it is the publisher_platform breakdown, which Meta documents as the platform the ad was shown on — Facebook, Instagram or Audience Network (Meta's breakdowns reference). A pull at campaign level without that breakdown gives you Facebook and Instagram added together, and Looker Studio has no way to separate them afterwards.
- Partner connector: add the platform (publisher platform) dimension to the chart. A connector that doesn't expose it cannot split Instagram out.
- Sheets export: set the Platform breakdown in Ads Manager before exporting, so the CSV carries one row per platform.
- TableBI: the live Meta Ads connector (beta) syncs at campaign level, so Instagram spend and results sit inside the campaign totals without a platform split. An Ads Manager export with the Platform breakdown keeps that column: TableBI stores every CSV column it has no shared definition for in
meta_ads_raw, where you can group by it.
Facebook Page Insights and public page data are a different pipe
Organic Facebook data — a Page's reach, followers, posts and engagement — does not come through any Facebook Ads connector. It belongs to the Page rather than the ad account, it sits behind a different permission, and connector vendors sell it as a separate source. Supermetrics, for example, lists Facebook Insights for Pages you manage and Facebook Public Data for public posts from Pages you don't, as two connectors distinct from Facebook Ads.
"Facebook public data" is the narrower of the two. It exists for benchmarking other Pages from what they publish, and Supermetrics' own documentation says data is available for approximately 600 ranked, published posts per year, with top-level comments only (Supermetrics docs).
The free route mirrors the ads one: in Meta Business Suite, the Export button in Insights downloads the insights you are viewing as a file (Facebook Help Center), and a Google Sheet holding that file reads into Looker Studio like any other Sheet. TableBI does not connect Page Insights: its Meta connector covers ads only.
"Connect Facebook Ads to Looker Studio free" — honestly
A lot of people arrive at this problem with the word free attached, so it deserves a straight answer rather than a funnel. Two of the four routes above cost nothing in cash: the community connector and the Sheets export. Both are legitimate, and both pay for themselves in a currency other than money.
The community connector charges you in trust and fragility — an unknown party holds a token to your ad account, and nobody owes you a fix when the API version rolls. The Sheets route charges you in attention — roughly ten minutes a week forever, plus the risk that someone makes a budget call on a stale tab. If your reporting is one account and one monthly deck, the Sheets route is genuinely fine and you should stop reading here. If it's several accounts, weekly, for people who act on the numbers, the free routes are the expensive ones.
The thing every route gets wrong by default
This is the failure that survives all four options, so it's worth more attention than the connector choice itself. Meta's numbers for a given day keep changing for up to 28 days. Meta credits a conversion to an ad that was clicked or seen before it, inside the ad set's attribution setting — 1 or 7 days after a click, or 1 day after a view, per Meta's attribution settings page — and its Insights API best practices say insights refresh every 15 minutes and do not change after 28 days of being reported. Since June 10, 2025 the API reports actions on Meta at impression time and actions off Meta at conversion time (action_report_time=mixed), and since January 12, 2026 it no longer returns 7-day and 28-day view-through windows, per Meta's announcement. A tutorial that tells you to pick a 28-day view window is out of date.
Any pipeline that pulls "yesterday only" and appends is therefore permanently wrong in the recent past — and it understates, because the revisions are usually upward. The dashboard shows a soft week that quietly firmed up after nobody looked again. The fix is to re-pull at least the last 28 days on every sync rather than append once, and to make the report say which days are still settling. Ask your connector vendor which window it re-reads; nothing in the Looker Studio canvas will tell you.
The fifth route: skip the canvas
The option that isn't in the picker, because it isn't a picker entry: don't build the report in Looker Studio at all. Hand the same data to a backend that normalizes it into shared cross-channel definitions, and publish the dashboard from there. You give up drag-and-drop. You get back the per-source pricing model, the refresh ritual and the attribution drift in one move.
That's what TableBI does — and to be precise about it: TableBI is not a Looker Studio connector and never puts data into Looker Studio. It keeps the data in its own store, your AI agent queries it, and the dashboard is a TableBI URL. If the report has to live in Looker Studio, use one of the four routes above. The route into TableBI that works for everyone today is the export — the same CSV you'd have pasted into a Sheet, labelled on ingest so it lands in the same tables as your other channels:
# install once npm i -g @tablebi/cli tablebi login tablebi install # the Ads Manager export, normalized into shared definitions tablebi connect csv --file meta-ads-august.csv --platform meta_ads # check what landed and how it was interpreted tablebi context --sample
The --platform label isn't cosmetic metadata. It's what lets those rows sit in the same facts table as Google Ads and Search Console, so spend is spend and clicks are clicks regardless of which platform's dialect they arrived in. That's the thing a per-source connector structurally cannot give you: connectors deliver each platform in its own vocabulary and leave the reconciliation to you and a blend configuration that lies.
There's also a live OAuth connector:
tablebi connect meta_ads # one ad account: it syncs straight away # several: it lists them, then rerun with --account <id>
Meta Ads is in beta. Our Meta app hasn't cleared App Review yet, so today only people added to it as test users can authorize their ad accounts. If that's not you, the CSV route above is the one that works — and it lands in exactly the same tables. Search Console, GA4 and Google Ads connect live with no such caveat. If you switch to the live connector after uploading exports, give any further Ads Manager CSVs their own label such as meta_ads_csv: the CLI refuses a CSV that reuses the label of a platform it already syncs live, because the rows would be counted twice.
What you can ask once it's in
The point of getting Facebook out of its own dashboard is the question that needed two dashboards before:
# ROAS across Meta and Google Ads, one query, one definition of ROAS tablebi ask "SELECT platform, SUM(cost) AS spend, roas(SUM(conversion_value), SUM(cost)) AS roas, cpa(SUM(cost), SUM(conversions)) AS cpa FROM facts WHERE date >= (SELECT MAX(date) FROM facts) - 28 GROUP BY platform ORDER BY spend DESC"
Two things there are load-bearing. roas() and cpa() are definition macros, so the arithmetic is computed once in the backend rather than re-derived — which is how you avoid the averaging bug that corrupts most hand-built ratio charts (the long version). And the date filter anchors on MAX(date) rather than the calendar, because of the attribution window above: "today" is not a settled row.
Forensic questions drop to the raw altitude instead, where Meta's own fields survive untouched:
tablebi ask "SELECT campaign, SUM(clicks) AS clicks, SUM(impressions) AS imp
FROM meta_ads_raw
GROUP BY campaign ORDER BY clicks DESC LIMIT 20"
Every answer carries a trust block — freshness per source plus the caveats that apply, including the trailing re-attribution window. For the reporting workflow rather than the connection, see Meta ads reporting without the spreadsheet grind; for the blended number this all exists to produce, blended ROAS.
Pin it to a live URL
When a view is worth keeping, pin it. What's stored is the query, not a snapshot, so the URL refreshes itself as data syncs:
tablebi pin --title "Paid overview — Meta + Google Ads" \ --widget "Daily spend::line=SELECT date, SUM(cost) AS spend FROM facts …" \ --widget "ROAS by platform=SELECT platform, roas(SUM(conversion_value), SUM(cost)) AS roas FROM facts …" ✓ published → https://dk.tablebi.com/d/dsh_… (public, read-only, self-refreshing)
Here is a live dashboard on real data you can open now: Search Console totals across the TableBI founder's own sites. It is a different dashboard from the one described above, published the same way, and it re-runs its queries as the sources sync (what the demo shows, and what it doesn't):