Sync icon
DbtCLI icon
Sync icon
SlackIncomingWebhook icon
Docker icon

Airbyte to dbt to Hightouch Activation with Slack Notification

Chain Airbyte ingestion, dbt transforms, and Hightouch activation in one Kestra flow, with Slack confirmation and isolated retries on fresh, tested data.

Categories
Data

This blueprint runs the canonical reverse-ETL data activation chain end to end with Hightouch as the activation layer. Airbyte ingests raw source data into the warehouse, dbt builds the activation marts, Hightouch syncs the curated rows to your operational destinations (CRM, ad platforms, marketing tools), and Slack confirms with the Hightouch run ID. It solves the classic data activation orchestration problem: keeping ingestion, transformation, and reverse-ETL in lockstep so Hightouch only fires on fresh, tested data instead of stale or half-built marts.

How it works

  1. The airbyte_sync task (io.kestra.plugin.airbyte.connections.Sync) triggers an Airbyte connection by connectionId and waits for the ingestion job to complete.
  2. The dbt_build task (io.kestra.plugin.dbt.cli.DbtCLI) runs dbt deps then dbt build inside a Docker task runner using the ghcr.io/kestra-io/dbt-bigquery:latest image, with namespaceFiles enabled so your dbt project is pulled in.
  3. The hightouch_sync task (io.kestra.plugin.hightouch.Sync) activates the curated rows by syncId and waits for the run to finish.
  4. The notify task (io.kestra.plugin.slack.notifications.SlackIncomingWebhook) posts a success message with outputs.hightouch_sync.runId and the execution ID.
  5. An errors block fires a separate Slack alert if any step in the chain fails.

What you get

  • A single, ordered ingestion to transformation to activation pipeline.
  • Inline dbt tests via dbt build, so only validated marts reach Hightouch.
  • Slack confirmation carrying the Hightouch run ID for traceability.
  • Failure alerting wired through the flow-level error handler.
  • Step-scoped retries that do not cascade upstream: a transient dbt failure never re-runs the Airbyte connection.

Who it's for

  • Analytics engineers owning dbt marts that feed activation.
  • Data engineers running Airbyte ingestion and reverse-ETL.
  • RevOps and marketing-ops teams depending on fresh Hightouch syncs.

Why orchestrate this with Kestra

Hightouch can schedule its own syncs, but it cannot guarantee that Airbyte ingestion and dbt transformations finished first. Kestra closes that gap with declarative YAML that chains all three tools in order, event triggers (Schedule or Webhook) to drive the chain on a cadence or upstream signal, per-task retries that stay isolated to the failing step, full execution lineage across the ingestion, transformation, and activation boundaries, and a built-in error handler that alerts on any failure.

Prerequisites

  • A dbt project uploaded as namespace files, with profiles configured for your warehouse (default image is dbt-bigquery; swap for dbt-snowflake or dbt-postgres as needed).
  • An Airbyte connection ID and a Hightouch sync ID.

Secrets

  • AIRBYTE_URL: Base URL of your Airbyte instance.
  • AIRBYTE_TOKEN: Bearer token for the Airbyte API.
  • HIGHTOUCH_API_TOKEN: API bearer token for Hightouch.
  • SLACK_WEBHOOK_URL: Slack incoming webhook URL.

Quick start

  1. Set the four secrets above in your Kestra namespace.
  2. Upload your dbt project as namespace files.
  3. Run the flow with the Airbyte connection ID and Hightouch sync ID inputs.

How to extend

  • Add a Schedule trigger to run nightly, or a Webhook trigger to fire on an upstream event.
  • Fan out to multiple Hightouch syncs in parallel after dbt completes.
  • Swap the dbt image and profiles to target Snowflake, Postgres, or another warehouse.
  • Replace Slack with email or PagerDuty notifications, or add both.

Links

See How

New to Kestra?

Use blueprints to kickstart your first workflows.