Meta Ads
Source Advertising

Meta Ads

Facebook and Instagram spend and results, reconciled once and kept — instead of re-exported every month.

Insightlytics ingests your Meta Ads data — spend, impressions, clicks, conversions and their values across Facebook and Instagram — through Google Cloud’s native Facebook Ads transfer, the Meta Marketing API or both. We pin the attribution window on every row, re-sync trailing days until Meta’s restatements settle, and model it into data models that share one schema with your Google Ads spend. You get the tables and the history; we run the transfers, the API pacing and the monitoring. Everything is written to a database you own — BigQuery today, with more warehouses on the roadmap.

What we ingest

Meta exposes its reporting two ways, and neither one carries everything. We land the raw tables first and model on top — so you keep the source rows, not just our interpretation of them.

  • Insights tables Native transfer

    Fixed spend, impressions, clicks and results tables landed on schedule, with a refresh window that covers Meta’s restatement period.

  • Structure tables Native transfer

    Campaigns, ad sets and ads with their settings, so a renamed campaign does not rewrite the history you already reported on.

  • Marketing API breakdowns API

    Demographic, placement and platform splits the fixed tables do not support — pulled as paced asynchronous report jobs when the range is large.

  • Attribution window Recorded per row

    Not a table Meta hands you. The window each row was measured under is stored beside it, so a settings change arrives as new rows instead of silently redefining old columns.

Which of these you end up with depends on the route, and that decision is covered further down, in how we work with Meta Ads data.

The problems we solve

Meta’s numbers are moving targets by design — windows, restatements, modeled conversions. These are the problems every performance team hits, and the ones this pipeline is built around.

Which attribution window are you even looking at?

Conversions change with the window — 1-day view, or 1-, 7- and 28-day click — and the defaults have changed over the years, with some windows retired outright. A 2023 number and a 2026 number under ‘the’ window may be under different windows, and nothing in a raw export warns you.

Any serious historical dataset must record the window per row. Ours does — the window sits next to the metrics on every row, which is what makes year-over-year comparisons defensible.

Why did last month’s Meta Ads ROAS change after the fact?

Restatement. Meta keeps attributing delayed and modeled conversions onto past days for up to about 28 days, so ROAS computed in the first week understates what the platform will eventually report. A report frozen on day two is wrong by week four — not because anyone lied, but because the platform kept counting.

The pipeline re-syncs a trailing window until rows stop moving, and the data models record when a day was last restated — so ‘final’ has a date attached.

Why don’t Meta Ads breakdowns sum to the total?

Breakdown rows are a different query than the account total: privacy thresholds suppress small cells, modeled conversions don’t always decompose cleanly, and some breakdown combinations are simply disallowed — one pull can’t give every cut.

Expecting the pieces to sum to the whole is the wrong mental model. The data models store totals and breakdowns as separate, labelled grains, so each answers its own question honestly.

Why don’t Meta conversions match GA4 or your backend?

Meta counts view-through conversions (someone saw the ad, never clicked, bought anyway) and — since ATT — statistically modeled conversions for opted-out iOS traffic; click-based analytics can’t see either. The three systems measure three different things and disagree by construction.

Putting their columns side by side — labelled, over the same spend rows — is the only reconciliation that survives contact with a finance review. That’s what the data models do.

How much Facebook Ads history can you actually keep?

Meta’s retention has layers: aggregated insights reach back roughly 37 months, and some detail — hourly breakdowns, unique counts — stops earlier. The window rolls forward daily, so history you don’t capture is history you lose.

Landing the data in your own database ends the countdown: whatever the pipeline pulls is preserved forward under your retention, not Meta’s.

How we work with Meta Ads data

Two routes exist — the native Facebook Ads transfer into BigQuery and the Meta Marketing API — and choosing between them is a consulting decision, not a checkbox.

The native transfer lands fixed insights and structure tables on schedule, with a refresh window of up to 30 days that conveniently covers Meta’s restatement period — but custom breakdowns aren’t supported. The API expresses everything the fixed tables can’t — demographic and placement breakdowns, window experiments, asynchronous report jobs for big ranges — but insights calls are rate-limited per ad account, so large pulls must run as paced async jobs. Which route fits depends on the breakdowns you need and how far your reconciliation against GA4 and your backend goes.

We settle that together on the discovery call — the two routes combine well, and the same data models come out either way, with the attribution window recorded on every row. Running the pipeline — pacing included — is our job: no connector to configure, no quota to babysit.

Delivered to a database you own

Every table — raw and modeled — is written to your own database, under your billing and your access controls. Our access is read-only, and if we part ways, everything stays with you.

  • BigQuery BigQuery Your data models are built in your own BigQuery project — our access is read-only, and the tables are always yours.

BigQuery is the supported database today. If you run a different warehouse, tell us — the roadmap is driven by requests.

How current the data stays

Data models rebuild every day. Where a platform restates recent numbers after the fact, we re-read those days rather than freezing the first version we saw.

Refresh

Daily. API syncs re-pull a trailing window covering Meta’s restatement period; the native transfer’s refresh window does the same on its side — delayed and modeled conversions flow through either way.

Backfill

As far as Meta’s retention exposes — aggregated history to roughly 37 months, less for some breakdowns — on either route. From first sync, everything accumulates under your retention.

Monitoring

Every sync is checked for freshness, volume and schema drift. Attribution-setting changes arrive as new rows with their window recorded — never as silent redefinitions of old columns.

What lands in your database

Not raw API responses — data models: named, documented tables at a stated grain, rebuilt every day and ready to query. Each one has its own page.

The shipped data models are the starting point, not the ceiling. When your questions need a different shape — another grain, another split, a join against another source — we build additional models for your stack as part of the engagement.

Stop reconciling Meta’s numbers by hand every month.

Tell us which attribution settings and breakdowns your reporting depends on. We’ll map how far Meta’s retention reaches and what needs to start accumulating on your side.

Free discovery call · No commitment — leave with a starting point