Facebook Ads to Snowflake: How to Move Your Data

Move Facebook Ads into Snowflake with Airbyte. Why the lookback window re-reads data on purpose, matching your attribution setting, and reconciling numbers.

Summarize with AI:

Moving Facebook Ads into Snowflake lets you work out what campaigns were actually worth. Meta reports impressions, clicks and conversions it attributed. It does not know what those customers went on to spend, whether they churned, or what they cost to serve, and return on ad spend needs all of that.

One naming note before anything else: the connector is called Facebook Marketing rather than Facebook Ads, which catches people searching the catalogue. This guide covers the managed path with Airbyte, and a behaviour that makes rows arrive more than once on purpose.

Facebook Ads to Snowflake at a glance:

CapabilitySupportedWhat it means for this pipeline
Connector nameFacebook MarketingSearch for that rather than Facebook Ads or Meta
Lookback window28 days maximumData is re-read deliberately, so rows arrive more than once
AttributionUp to 28 daysClick-through up to 28, view-through limited to one day
Multiple ad accountsHandled per accountEach account's date range uses its own timezone automatically
Time increment changeTriggers full re-syncSo set it deliberately rather than adjusting later

Why move data from Facebook Ads to Snowflake?

Two situations account for most of these pipelines.

The first is true return on spend. Meta's own attribution is generous to Meta, which is not a criticism so much as a description of how attribution works. Joining ad spend to your own revenue data lets you form your own view rather than accepting the platform's.

The second is comparing channels on the same terms. Meta reports in its interface, your other channels report in theirs, and none of them agree. A warehouse holding all of them with your own definitions applied is the only place that comparison is honest.

What do you need before you start?

Two credentials items and two settings that shape what the numbers mean:

An access token and your ad account ID. The account ID is the numeric identifier from Ads Manager, and depending on connector version the field may want it with or without its prefix, so read the label. The Facebook Marketing source documentation covers the setup.

A deliberate start date. Optional, and leaving it blank replicates all data. On an account with years of history that is a very large first sync, so set it to what someone will actually analyse. There is an end date field too, which bounds the last date replicated and is useful for a fixed extract.

Your Facebook attribution window. Meta allows click-through attribution of up to 28 days, with view-through limited to one day. If you have set a custom attribution window in your Facebook account, the connector's lookback window should be set to the same value rather than left at its default.

Snowflake objects and a role. A warehouse, database, schema and a role able to create tables in that schema. A dedicated role keeps credit consumption attributable, which matters on a pipeline that re-reads data by design.

If your organisation restricts inbound traffic by IP, add the Airbyte Cloud IP addresses to the allow list on the Snowflake side before you begin.

How do you build a Facebook Ads to Snowflake pipeline in Airbyte?

Step 1: Check your attribution settings in Meta

Ask whoever runs your Meta account what attribution window is configured, because the connector's lookback should match it. This is a five-minute conversation that determines whether your conversion numbers settle correctly, and it is much easier than reconciling a discrepancy later.

Step 2: Configure the Facebook Marketing source

Click Sources in the left navigation, then New Source, and select Facebook Marketing, following adding a source. Supply the access token, account ID, start date and the lookback window from step 1. Set the time increment deliberately, because switching between time increment settings later triggers a full re-sync rather than adjusting going forward.

Step 3: Configure the Snowflake destination

Click Destinations, then New Destination, and select Snowflake, following adding a destination. Supply the account identifier, warehouse, database, schema and role with your authentication method. Airbyte creates one table per stream with its own metadata columns alongside your data.

Step 4: Use a deduplicating sync mode

Click Connections, then New connection, select your streams and choose incremental append and deduped as the sync mode on the insights streams. That is not a preference on this connector, it is how you handle the deliberate re-reading described below. Daily is the right cadence, since conversion data settles over days rather than minutes.

If you manage several ad accounts, note that no extra configuration is needed for timezones. Where multiple accounts in different timezones are synced within one connection, each account's date range is computed independently from its own timezone setting.

Why does the same row arrive more than once?

Because it is meant to. The connector uses a lookback window to repeatedly read data from the last several days during an incremental sync, which means some data is synced twice or more despite the cursor value being up to date. That is not a fault, it is how updated conversion figures reach you.

Meta attributes conversions retroactively within the attribution window, so a campaign's numbers for last Tuesday are still moving several days later. A pipeline that read each day once and never returned would capture the first version of every figure and none of the corrections.

The trade-off is stated plainly in the documentation: smaller values produce fewer duplicates, larger values give more accurate results, up to a maximum of 28 days. On a warehouse destination there is little reason to be stingy, because deduplication collapses the overlap on the way in. Match the window to your Meta attribution setting and let the destination do the rest.

Why do your numbers disagree with Ads Manager?

Usually because you looked at a figure before it finished settling. If your lookback is 28 days, a campaign from three days ago is still being revised, and comparing your warehouse against Ads Manager on a recent date compares two snapshots taken at different moments rather than two answers to the same question.

Reconcile on a date well outside the attribution window, where both sides have stopped moving. If they agree there and disagree on recent dates, the pipeline is working correctly and what you are seeing is attribution doing its job.

The second candidate is attribution settings that do not match. If your Meta account uses a custom window and the connector is still on its default, the two will diverge in ways that look like a data problem and are a configuration one. That is why step 1 exists.

Frequently asked questions

Which connector do I use for Facebook Ads?

It is listed as Facebook Marketing in the catalogue. Searching for Facebook Ads or Meta may not find it.

Why is the same row appearing multiple times?

By design. The lookback window makes the connector re-read recent days on every incremental sync so updated conversion data is captured. Use a deduplicating sync mode and the overlap collapses.

What should I set the lookback window to?

The same value as your Facebook attribution window, up to a maximum of 28 days. Smaller values mean fewer duplicates, larger values mean more accurate results.

Do I need separate connections for ad accounts in different timezones?

No. Each account's date range is computed independently from its own timezone setting, and no configuration is required for it.

Can I do this without writing code?

Yes. The setup above is entirely UI-driven. You will want Snowflake views joining spend to your own revenue data, which is where your return on ad spend definition belongs.

Get your Facebook Ads data into Snowflake

Match the lookback window to your Meta attribution setting, use a deduplicating sync mode so the deliberate overlap collapses, set the time increment deliberately since changing it forces a full re-sync, and reconcile on a date outside the attribution window rather than a recent one.

Airbyte's connector catalog includes 600+ pre-built connectors, so paid media can sit beside product and revenue sources in one warehouse. For mobile attribution on the same customers, see Adjust to BigQuery, and for lifecycle marketing engagement, Braze to BigQuery.

Start syncing now →

Integrate with 700+ apps using Airbyte

Move data from 700+ sources into warehouses, lakes, and beyond. Set up pipelines in minutes with pre-built connectors and the Connector Builder.