Braze to Databricks: How to Move Your Data

Move Braze into Databricks with Airbyte. Why streams come in pairs, how per-endpoint API key permissions cause empty streams, and modelling for attribution.

Summarize with AI:

Moving Braze into Databricks puts engagement data where it can be modelled properly rather than just reported. Braze knows what was sent, opened and clicked. It does not know what those users went on to spend or whether they stayed, and the interesting work is in the join.

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

Braze to Databricks 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
Unity CatalogRequiredPlus permission to create Volumes for Avro staging

Why move data from Braze to Databricks?

Two situations account for most of these pipelines.

The first is attribution modelling rather than attribution reporting. Working out what a campaign was actually worth means joining engagement to revenue and retention, and then building a model rather than a chart. Notebooks and Spark are where that happens, which is what distinguishes a lakehouse from a reporting warehouse for this source.

The second is governance over marketing data. Engagement records describe identifiable people, and Unity Catalog gives you one place to manage who can see them alongside everything else. If you only need campaign performance dashboards, Braze already provides those and this pipeline earns you little.

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 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 produces a connection that cannot find your data rather than a helpful message.

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 model 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.

On the Databricks side, each stream becomes a table in Unity Catalog and the connector needs permission to create Volumes for Avro staging. Agree the catalog and schema before the first sync, particularly given the personal data involved.

How do you build a Braze to Databricks 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 and broader than most security teams like. Granting per endpoint is better practice, and means keeping a note of what you granted, because a stream returning 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. Airbyte tests the connection, and a failure here is more often the endpoint or a permission than the key itself.

Step 3: Configure the Databricks destination

Click Destinations, then New Destination, and select Databricks, following adding a destination. Supply your workspace details, the catalog and schema, and authentication. Use a schema dedicated to marketing data rather than mixing it with other sources, since it usually ends up with its own access controls.

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 each object stream with its analytics companion, and set a daily schedule, because marketing metrics settle over hours 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, look there 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.

Neither half is useful alone. The analytics streams give you metrics keyed by identifiers, and the list streams give you a catalogue with no performance in it. The join is what makes the dataset worth having.

In a lakehouse the natural home for that join is a modelled table rather than a view, because you are likely to be feeding it into further modelling rather than straight to a dashboard. Treat the landed streams as your raw layer, build a joined campaign performance table on top, and let attribution models read from that.

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 hard to diagnose from the destination, because an empty table looks the same whether the permission is missing or the account genuinely 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, since Braze operates several regional instances and a key valid against one 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 Spark or SQL model joining each analytics stream to its object stream, which is where this dataset becomes usable.

Get your Braze data into Databricks

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 joined table before anyone models on top of the raw layer. 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 product and revenue sources in one lakehouse. For the same source feeding a warehouse, see Braze to BigQuery, and for attribution data on the same users, AppsFlyer to Databricks.

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.