Skip to main content
Reverse ETL · code-first

Reverse ETL for the code-first data stack

Sync modeled warehouse data back into the tools your team actually uses — REST APIs, Slack, Salesforce, and more. Defined in YAML, run from the terminal, versioned in Git.

$pip install drt-core
pipelinedltloaddbttransformdrtactivate
Why drt

The activation layer that lives in your repo

Reverse ETL without the dashboards, seat licenses, or point-and-click pipelines. If you ship with dbt and Git, drt fits the way you already work.

Code-first, not click-first

Every sync is a YAML file you review in a PR and run with drt run. No console, no hidden state — pipelines live in version control.

Every major destination

Warehouses, data lakes, and SaaS — BigQuery, Snowflake, Postgres, Slack, Salesforce and more, all from one connector registry.

dbt-native lineage

Point a sync at a model with ref('users'). drt reads your dbt project so activation inherits the same lineage as transformation.

Built-in observability

Native OpenTelemetry traces and metrics — every run, extract, and batch is a span you can ship to any OTLP backend.

Dry-run & diff

Preview exactly which rows will be added, updated, or deleted before a single write with drt run --dry-run --diff.

CI-native

Run syncs from GitHub Actions with structured JSON output. Schedule, gate on diffs, and treat activation like any other deploy.

Connectors

One registry, every destination

↻ generated from connector manifests — never hand-listed

Destinations 34

Airtable
Amplitude
Azure Blob Storage
BigQuery
ClickHouse
Databricks
Discord
Elasticsearch
Email
File
Google Cloud Storage
GitHub Actions
Google Ads
Google Sheets
HubSpot
Intercom
Jira
Klaviyo
Linear
Mixpanel
MySQL
Notion
Parquet
PostgreSQL
REST API
Amazon S3
Salesforce Bulk
SendGrid
Slack
Snowflake
Staged Upload
Microsoft Teams
Twilio
Zendesk

Sources 13

BigQuery
ClickHouse
Databricks
Delta Lake
DuckDB
Iceberg
MySQL
PostgreSQL
Redshift
REST API
Snowflake
SQLite
SQL Server
Quickstart

Your first sync in three steps

From install to activated data without leaving the terminal.

Install & initialize

pip install drt-core, then drt init scaffolds a drt_project.yml and a syncs/ folder.

Describe a sync

Write a YAML file: point a dbt ref() model at a destination and pick a sync mode. That's the whole config.

Run it

drt run extracts, loads, and reports — or preview first with --dry-run --diff. Wire it into CI when you're ready.

syncs/active_users_to_slack.ymlvalidated
name: active_users_to_slack
model: "ref('active_users')"   # your dbt model

destination:
  type: slack
  channel: "#growth"

sync:
  mode: incremental
  cursor: updated_at
  on_error: skip      # skip | fail
  batch_size: 500

Activate your warehouse in minutes

Free and open source under Apache-2.0. Install drt and ship your first sync today.