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.
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.
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.
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.
Warehouses, data lakes, and SaaS — BigQuery, Snowflake, Postgres, Slack, Salesforce and more, all from one connector registry.
Point a sync at a model with ref('users'). drt reads your dbt project so activation inherits the same lineage as transformation.
Native OpenTelemetry traces and metrics — every run, extract, and batch is a span you can ship to any OTLP backend.
Preview exactly which rows will be added, updated, or deleted before a single write with drt run --dry-run --diff.
Run syncs from GitHub Actions with structured JSON output. Schedule, gate on diffs, and treat activation like any other deploy.
From install to activated data without leaving the terminal.
pip install drt-core, then drt init scaffolds a drt_project.yml and a syncs/ folder.
Write a YAML file: point a dbt ref() model at a destination and pick a sync mode. That's the whole config.
drt run extracts, loads, and reports — or preview first with --dry-run --diff. Wire it into CI when you're ready.
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
Free and open source under Apache-2.0. Install drt and ship your first sync today.