All integrations
Customer.io
+
Bruin

Customer.io + Bruin

Source

Ingest Customer.io data into your warehouse with incremental loading, quality checks, and full lineage. Defined in YAML, version-controlled in Git.

For business teams

What you get

  • Marketing impact on revenue

    Join Customer.io engagement data with CRM deals and payments. Measure what marketing actually drives, not just opens and clicks.

  • Single source of truth

    Combine Customer.io with all your marketing channels in one warehouse. One dashboard, one set of numbers, no more spreadsheet reconciliation.

  • Clean audience data

    Quality checks catch duplicate contacts, invalid emails, and bounce rate spikes before they affect campaigns.

  • Automated reporting

    Stakeholders get fresh Customer.io data every morning. No one needs to pull reports or wait for a data team.

For data & engineering teams

How it works

  • Incremental loading

    Only sync new and updated Customer.io records. No full reloads, no wasted compute, no duplicate contacts.

  • YAML-defined, Git-versioned

    Your Customer.io pipeline is a YAML file. Review in PRs, deploy with CI/CD, roll back with git revert.

  • Email and contact validation

    Quality checks catch null emails, duplicate contacts, and invalid data before it enters your warehouse.

  • Cross-source dependency resolution

    Bruin resolves dependencies between Customer.io and other sources automatically. Transforms run in the right order.

Before you start

Customer.io account
App API Key with read permissions

Step 1

Add your Customer.io connection

Connect using Customer.io API key and region. Add this to your Bruin environment file — credentials are stored securely and referenced by name in your pipeline YAML.

Parameters

  • api_keyApp API Key with read permissions from Customer.io
  • regionAccount region, either 'us' (default) or 'eu'
connections:
  customerio:
    type: customerio
    uri: "customerio://?api_key=<api-key>&region=<region>"

Step 2

Create your pipeline

Define a YAML asset that tells Bruin what to pull from Customer.io and where to land it. This file lives in your Git repo — reviewable, version-controlled, and deployable with CI/CD.

Available tables

campaignsbroadcastscustomerssegmentsnewslettersmessagesactivities
name: raw.customerio_campaigns
type: ingestr

parameters:
  source_connection: customerio
  source_table: 'campaigns'
  destination: bigquery

Step 3

Add quality checks

Add column-level and custom SQL checks to your Customer.io data. If a check fails, the pipeline stops — bad data never reaches downstream models or dashboards.

Catch duplicate contacts before they enter your warehouse
Validate email fields are never null
Ensure record IDs are unique across syncs
columns:
  - name: id
    checks:
      - name: not_null
      - name: unique
  - name: email
    checks:
      - name: not_null

custom_checks:
  - name: no duplicate contacts
    query: |
      SELECT COUNT(*) = COUNT(DISTINCT email)
      FROM raw.customerio_campaigns

Step 4

Run it

One command. Bruin connects to Customer.io, pulls data incrementally, runs your quality checks, and lands clean data in your warehouse. If a check fails, the pipeline stops — bad data never reaches downstream.

Backfill historical data with --start-date
Schedule with cron or trigger from CI/CD
Full lineage from Customer.io to your dashboards
$ bruin run .
Running pipeline...

  customerio_campaigns
    ✓ Fetched 2,847 new records
    ✓ Quality: campaign_id not_null     PASSED
    ✓ Quality: spend not_null           PASSED
    ✓ Quality: no negative ad spend     PASSED
    ✓ Loaded into bigquery

  Completed in 12s

Ready to connect Customer.io?

Start for free, or book a demo to see how Bruin handles ingestion, quality, lineage, and scheduling for your entire data stack.