Ingestr - One-Command Data Movement for Agents
A CLI that copies data from any source to any destination with a single command, no code:
ingestr ingest --source-uri … --source-table … --dest-uri …. Open-source (~3.5K★) by Bruin, built on dlt + SQLAlchemy. Hand it to Claude Code or Codex and they move data between databases, warehouses, and SaaS apps at speed.
Version snapshot
Checked 2026-06-30:
| Surface | Current |
|---|---|
| GitHub release | v1.0.54, published 2026-06-30 |
| PyPI package | ingestr 1.0.54 |
| Repository | bruin-data/ingestr, default branch main, 3,744 stars, 137 forks, source-available license marked "Other" on GitHub |
The project is moving quickly enough that agents should check pip index versions ingestr, PyPI, or GitHub releases before writing docs or runbooks that pin flags. Source: GitHub CLI and PyPI via pip index versions, 2026-06-30
The model
Everything is a URI. You name a source URI + table and a destination URI; ingestr handles connection, schema, and transfer. Because it wraps dlt (data load tool) and SQLAlchemy, connection strings follow their conventions and "just work." Source: bruin-data.github.io/ingestr core-concepts, 2026-06-01
ingestr ingest \
--source-uri 'postgresql://user:pass@host:5432/db?sslmode=disable' \
--source-table 'public.users' \
--dest-uri 'bigquery://my-project?credentials_path=/path/to/sa.json' \
--dest-table 'raw.users'
--dest-table is optional (defaults to the source table name). A query: source-table runs arbitrary SQL as the source. Source: getbruin.com/docs/ingestr/commands/ingest, 2026-06-01
Sources & destinations
- Databases / warehouses (most are both source and destination): Postgres, MySQL, SQL Server, Oracle, SQLite, DuckDB/MotherDuck, BigQuery, Snowflake, Redshift, Databricks, ClickHouse, CrateDB, Trino, MongoDB, Elasticsearch, DynamoDB, GCP Spanner, SAP Hana, IBM Db2, local CSV. Source: README, 2026-06-01
- SaaS platforms (source → warehouse): Stripe, Shopify, Salesforce, Notion, GitHub, Slack, Zendesk, Google Sheets/Ads/Analytics, Facebook/LinkedIn/TikTok Ads, Klaviyo, Pipedrive, Asana, Attio, Airtable, Kafka, Kinesis, S3, AppsFlyer, App Store, and more. Source: README, 2026-06-01
Incremental loading
Beyond full copies: --incremental-key + --incremental-strategy (append, merge, or delete+insert) ingest only new/changed rows, with --interval-start/--interval-end for windowed backfills. This is what makes it usable as a repeatable pipeline, not just a one-shot dump. Bruin also exposes ingestr as a native asset type in its YAML pipeline framework. Source: ingestr core-concepts + getbruin docs, 2026-06-01
Install
pip install ingestr # or: uv pip install ingestr / uvx ingestr ingest …
Why this fits Kevin's agent stack
ingestr is a textbook Agent-Native CLIs: one deterministic command, composable via flags, that turns "write bespoke ETL glue" into a single call an agent can issue and verify. It complements the rest of the agent-native CLI layer:
- Printing Press - Agent-Native CLIs from a Single Prompt pp-clis pull/query a specific API (local SQLite mirror, compound commands); ingestr moves data between stores (DB ↔ warehouse, SaaS → warehouse). Use a pp-cli to reach an API surface, ingestr to relocate tables in bulk.
- Agent Cookie - Session State Sync for the Agent's Second Mac can supply the per-CLI credentials a headless agent needs to run ingestr against your real sources.
- Like the broader Agent-Native CLIs thesis, a CLI beats hand-rolled code or a generic wrapper here: it is fast, repeatable, and self-documenting via flags.
Caveats
SaaS platforms are source-only (you land them in a warehouse, not the reverse). A few databases are source-only (MySQL, Oracle, SAP Hana, Db2, DynamoDB as destinations are unsupported). License is source-available ("Other" per GitHub) rather than a standard OSI license. Source: README support matrix + GitHub, 2026-06-01
Timeline
- 2026-06-01 | Captured from Kevin's share ("super-fast CLI for moving data around… give it to Claude Code or Codex"). Created tool page; routed under Agent-Native CLIs in
tool-hierarchy.mdc(new Data movement category),SKILL-RESOLVER.md, and the operations hub. Source: User, 2026-06-01 - 2026-06-30 | Deep bookmark review inspected the original tweet, reply, source repo, docs, and benchmark image. Refreshed current version to
1.0.54; the agent route stays "try ingestr before bespoke ETL" for database/warehouse/SaaS movement. Source: X/@svpino, 2026-06-01; GitHub/PyPI, 2026-06-30]