Braze to BigQuery: How to Move Your Data

Move Braze into BigQuery with Airbyte. Why streams come in pairs, how per-endpoint API key permissions cause empty streams, and the region-specific endpoint.

Summarize with AI:

Moving Braze into BigQuery is how marketing teams stop guessing whether campaigns are worth what they cost. Braze tells you what was sent, opened and clicked. It does not know what those users went on to spend, and that join is the one that decides where budget goes next quarter.

This guide covers the managed path with Airbyte. The Braze connector has an unusual stream structure that shapes how you configure and model it, and an API key permission model where a missing scope produces a missing stream rather than an error you can act on.

Braze to BigQuery at a glance:

CapabilitySupportedWhat it means for this pipeline
Stream structurePairedEach object has a companion analytics stream, so sync both
Sync modesTwoFull refresh overwrite, and incremental append
API key permissionsPer endpointA missing permission means a missing stream, not an error
REST endpointRegion-specificMust match your Braze instance, or you find no data
Rate limitsDiffer by streamThe analytics streams are the expensive ones

Why move data from Braze to BigQuery?

Two situations account for most of these pipelines.

The first is attribution to revenue. Braze reports engagement, and engagement is not the outcome anyone is measured on. Putting campaign and canvas performance next to subscription, order or usage data lets you ask what a channel is actually worth rather than what its open rate was.

The second is history. Marketing tools are built for looking at recent performance, and a warehouse is where you keep years of it for trend analysis and the annual conversation about where the budget went. Both cases want daily aggregates rather than raw message logs, which is fortunate, because aggregates are largely what this connector produces.

What do you need before you start?

Three configuration values and one decision that determines whether the result is usable:

A Braze REST API key with the right permissions. Created in the Braze dashboard under settings and API keys. Braze scopes keys per endpoint, so the key needs the list and data series permissions for each area you want: campaigns, canvases, events, KPIs, news feed cards and segments each have their own. The Braze source documentation covers the setup.

Your region-specific REST endpoint. Braze runs several instances and yours has its own URL, found in your dashboard settings. Supplying the wrong one does not produce a helpful message, it produces a connection that cannot find your data.

A deliberate start date. Rows after this date are synced. On an account with years of campaign history, set it to what someone will actually analyse rather than reaching for everything, because the analytics streams are the rate-limited ones.

An understanding of the paired streams. Campaigns and campaigns analytics, canvases and canvases analytics, and so on. Selecting one without the other gives you either a catalogue with no numbers or numbers you cannot label, which is covered below.

On the BigQuery side you need a project, a dataset and a service account with the BigQuery User and BigQuery Data Editor roles. Set the dataset location to match the datasets holding your revenue data, since it cannot be changed after creation.

How do you build a Braze to BigQuery pipeline in Airbyte?

Step 1: Map permissions to the streams you want

Decide which areas you need, then grant the matching permissions on the API key. Braze's own guidance for this integration is a key with all permissions, which is simplest but broader than most security teams like. Granting per endpoint is better practice and means keeping a note of what you granted, because a stream that returns nothing is otherwise indistinguishable from a stream with no data.

Step 2: Configure the Braze source

Click Sources in the left navigation, then New Source, and select Braze, following adding a source. Supply your REST endpoint URL, the API key and a start date, then click set up source. Airbyte tests the connection, and a failure here is more often the endpoint or a permission than the key itself.

Step 3: Configure the BigQuery destination

Click Destinations, then New Destination, and select BigQuery, following adding a destination. Supply the project, dataset and service account key. Batched standard inserts is the default and is ample here, since daily marketing aggregates are small by warehouse standards even on a large account.

Step 4: Select streams in pairs and schedule daily

Click Connections, then New connection, and select streams and a sync mode. Two modes are available: full refresh overwrite and incremental append. Take the object stream and its analytics companion together, and set a daily schedule, because marketing metrics settle over hours rather than seconds and an hourly sync mostly re-reads numbers that are still moving.

Rate limits differ by stream on Braze's API, and the data series endpoints behind the analytics streams are the constrained ones. If a sync is slow, that is where to look rather than at the small list streams.

Why do the streams come in pairs?

Because Braze's API separates the catalogue from the numbers. Campaigns lists your campaigns with their names and metadata. Campaigns analytics returns the daily performance series. The same split applies to canvases, events, cards and segments, which is why the connector exposes roughly a dozen streams for what feels like five things.

The consequence is that neither half is useful alone. Sync only the analytics streams and you get metrics keyed by identifiers, which produces a dashboard of numbers against meaningless IDs. Sync only the list streams and you get a catalogue with no performance in it. The join is what makes this dataset worth having, so select both halves of any pair you care about.

Build that join once in a view rather than leaving every analyst to work it out. A campaign performance view joining the analytics series to campaign names, with the date grain made explicit, is fifteen minutes of work and the difference between a dataset people use and one they ask you about.

Why is one of my streams empty?

Almost always a missing API key permission. Braze scopes keys per endpoint, so a key without the canvas data series permission will not return canvas analytics, and the sync does not fail. The stream simply produces nothing.

That is genuinely hard to diagnose from the destination, because an empty table looks the same whether the permission is missing or the account really has no canvases. Keeping a written record of which permissions you granted turns a confusing investigation into a two-minute check.

The other candidate is the endpoint URL. Braze operates several regional instances and yours has a specific address, so a key that is valid against one instance finds nothing against another. Check that before you start re-issuing keys.

Frequently asked questions

Why is one of my Braze streams returning no data?

Most likely a missing API key permission, since Braze scopes keys per endpoint and a missing one produces an empty stream rather than an error. Check the endpoint URL too, because it is region-specific.

Which streams should I select?

Both halves of any pair you need. The object streams give you names and metadata, the analytics streams give you the daily series, and either alone is much less useful than the two joined.

Which sync modes does the connector support?

Full refresh overwrite, which replaces the destination contents each run, and incremental append, which adds new records without deleting existing ones.

Why is my sync slow?

Rate limits differ by stream on Braze's API, and the data series endpoints behind the analytics streams are the constrained ones. Narrow your start date or reduce the streams you sync.

Can I do this without writing code?

Yes. The setup above is entirely UI-driven. You will want a BigQuery view joining each analytics stream to its object stream, which is short SQL and where this dataset becomes usable.

Get your Braze data into BigQuery

Map your API key permissions to the streams you want and write down what you granted, get the region-specific endpoint right, select streams in pairs, and build the joining views before anyone sees the raw tables. Daily is the right cadence for data that settles rather than streams.

Airbyte's connector catalog includes 600+ pre-built connectors, so engagement data can sit beside the revenue and product sources that tell you what it was worth. For attribution data on the same users, see Adjust to BigQuery, and for product analytics in the same warehouse, PostHog 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.