dtex
dtex ("data extraction tool") is an open-source, self-hosted Python extract-load (EL) tool. It moves data from a source (an API, a database, a file drop) into a destination (a warehouse, a database, an object store) — and nothing more. Transformation is dbt's job.
The pitch in one line: a CLI-first, dbt-shaped extract-load tool — pipelines are configs, connectors are folders, no UI blackbox. The #1 principle is to keep it as simple as possible.
Install
pip install dtex # every baked connector, ready
pip install 'dtex[gcs,s3]' # add gs:// / s3:// filesystem reads
pip install 'dtex[gcp-secrets]' # add the GCP Secret Manager resolver
pip install 'dtex[aws-secrets]' # add the AWS Secrets Manager resolver
pip install 'dtex[vault]' # add the HashiCorp Vault resolver
pip install dtex ships every baked source and destination — DuckDB,
BigQuery, the filesystem source's local + Parquet path, the REST / Postgres
/ ShipHero / Stripe sources, the engine, the CLI. Extras stay opt-in for the
cloud-storage paths of the filesystem source (gs:// / s3://) and for
secret managers (only relevant if your profiles.yml uses secret:// URLs).
dtex requires Python 3.11+. It installs both a CLI (dtex) and an importable
library (import dtex).
Usage
dtex init my_project # scaffold a project
cd my_project
dtex new source my_api # scaffold a source connector
dtex new config my_pipeline # scaffold a pipeline config
dtex validate # check everything
dtex run -p my_pipeline # run the pipeline
dtex runs list -p my_pipeline # show recent run history
A pipeline is one config file binding a source + a destination + a target +
params. Run it with dtex run -p <config>. The library equivalent is
dtex.run(config="my_pipeline") and returns a structured RunResult.
Pre-baked connectors
Each connector ships with its own README — click through for the auth checklist, scope requirements, schema, and known limitations.
Sources:
| Connector | What it does |
|---|---|
filesystem |
CSV / JSONL / Parquet from local, GCS, or S3 |
rest |
Paginated REST APIs — 4 pagination strategies, 4 auth modes |
postgres |
Keyset pagination, no OFFSET |
shiphero |
GraphQL |
stripe |
REST resource-as-stream + opt-in Sigma SQL-as-stream |
revenuecat |
v2 API — customers + subscriptions + daily chart metrics |
chargebacks911 |
CBAPIv2 — prevention alerts + chargeback cases, incremental |
gads |
Google Ads — GAQL query-as-stream + MCC account auto-discovery |
singular |
Singular.net Reporting API — daily network + agency-tagged attribution reports |
intercom |
Intercom REST API — contacts, conversations + transcript parts, tickets, companies, articles, workspace dimensions; Airbyte-compatible column shapes |
meta |
Meta (Facebook / Instagram) Ads — ad-level daily + campaign-level hourly insights via async report jobs. Created by Auste Luksaite |
konnektive |
Konnektive (Checkout Champ) CRM — orders, transactions, purchases, customers + daily summary; incremental on dateUpdated, resumable backfill |
Destinations:
| Connector | What it does |
|---|---|
duckdb |
Zero-config dev default, all 5 capabilities |
bigquery |
Production warehouse — Parquet-staged via GCS + LOAD jobs, MERGE upserts, cursor-based partitioning |
Engine: per-stream commit + atomic transactions (rollback on failure),
state in the destination's _dtex_state table, run records in _dtex_runs,
structured JSON-lines logs per run, secret redaction, schema evolution
(evolve default, strict opt-in), pipeline-level parallelism with
per-destination caps.
Secret managers: GCP Secret Manager, AWS Secrets Manager, HashiCorp Vault — each as an opt-in extra.
Bundled Claude skills
dtex ships three Claude skills inside the wheel:
dtex-write-config, dtex-write-connector, dtex-debug. They teach
Claude (or any other agent runtime that reads .claude/skills/) the
post-streams-redesign config schema, the @stream decorator pattern, and
the debugging playbook. Install them into a dtex project with:
dtex skills install # copies into ./.claude/skills/dtex/
The first dtex command run inside a project that lacks installed skills
prints a one-line hint (suppressed thereafter). Run dtex skills list to
see which ship with this dtex version and which are installed locally.
If you're not using Claude, just ignore the hint — the skills are inert markdown until installed.
Documentation
The full design handbook lives in docs/.
Start with
00 — Vision & Naming,
02 — Architecture,
06 — Project Anatomy,
12 — Configs, and
10 — Roadmap and Scope.
Security · Contributing · Code of Conduct
- Security policy — how to report a vulnerability.
- Contributing — dev setup, PR process, how to add a connector.
- Code of Conduct.
- Changelog.
License
Apache License 2.0 — see LICENSE.
Metadata
Release files for dtex 0.16.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| dtex-0.16.1.tar.gz | 787.2 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dtex-0.16.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.3 MB
Release files / dtex-0.16.1.tar.gz
| Download URL | dtex-0.16.1.tar.gz |
|---|---|
| Size | 787.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
20f9049efb8a32e633fe3a318efb44d541f5ae88c3d9bd597a55e620ebf8665e
|
|
BLAKE2b-256 checksum How to use checksums |
abf00cad529dcd84452a68b687dc3bb2e818b8a48cfc3b5dfcb5c0c66e136658
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency logRelease files / dtex-0.16.1-py3-none-any.whl
| Download URL | dtex-0.16.1-py3-none-any.whl |
|---|---|
| Size | 551.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
03eabe9c47b957a46c1b79a823b73f07a1c44742807bffd813bdafc6848f38da
|
|
BLAKE2b-256 checksum How to use checksums |
86a9d62b9acef4de19d54e978c0f1a01af99815080749203760b799273e5d460
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency logSecurity for dtex 0.16.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for dtex-0.16.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.