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 25+ more. Defined in YAML, run from the terminal, versioned in Git.

$ pip install drt-core
pipeline dltload dbttransform drtactivate
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 — your pipelines live in version control.

25+ destinations

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

BigQuery
Snowflake
Postgres
Databricks
MySQL
ClickHouse
Redshift
S3
GCS
Azure Blob
Elasticsearch
Slack
Salesforce
Amplitude
Mixpanel
Google Sheets
Google Ads
Intercom
Twilio
Discord
Jira
Teams
Linear
Zendesk
REST API
SendGrid

Sources

BigQuery
DuckDB
Postgres
MySQL
Snowflake
Databricks
ClickHouse
Redshift
SQL Server
SQLite
REST API
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.