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:

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]