Skip to main content

ingestr is a command-line application that ingests data from various sources and stores them in any database.

Project description

Copy data from any source to any destination without any code


ingestr is a command-line app that allows you to ingest data from any source into any destination using simple command-line flags, no code necessary.

  • โœจ copy data from your database into any destination
  • โž• incremental loading: append, merge or delete+insert
  • ๐Ÿ single-command installation

ingestr takes away the complexity of managing any backend or writing any code for ingesting data, simply run the command and watch the data land on its destination.

MongoDB to Postgres benchmark

Installation

You can install ingestr using the install script:

curl -LsSf https://getbruin.com/install/ingestr | sh

Alternatively, you can install it with pip:

pip install ingestr

The pip package can also be used from Python. Install the SDK extra for Python data ingestion:

pip install 'ingestr[sdk]'

Python rows, generators, and DataFrames are sent to the bundled ingestr binary as Arrow IPC streams by default:

import ingestr

ingestr.ingest(
    [{"id": 1, "name": "Ada"}, {"id": 2, "name": "Grace"}],
    dest_uri="duckdb:///tmp/warehouse.duckdb",
    dest_table="main.people",
)

DataFrames and yielded data use the same Arrow stream transport:

ingestr.ingest(df, dest_uri="duckdb:///tmp/warehouse.duckdb", dest_table="main.events")

def events():
    yield [{"id": 1, "event": "signup"}]
    yield [{"id": 2, "event": "purchase"}]

ingestr.ingest(events, dest_uri="postgresql://...", dest_table="public.events")

For push-style code, omit the data argument and use ingest as a context manager. The context value accepts the same shapes as ingestr.ingest(data, ...):

with ingestr.ingest(dest_uri="postgresql://...", dest_table="public.events") as ingest:
    for response in client.list_events():
        ingest(response["items"])

For very large already-materialized data, use the existing mmap Arrow IPC file transport:

ingestr.ingest(df, dest_uri="duckdb:///tmp/warehouse.duckdb", dest_table="main.events", transport="mmap")

For full CLI pass-through, use ingestr.run(["ingest", "--source-uri", "...", "--dest-uri", "...", "--source-table", "..."]), or ingestr.run_cli(...) for keyword arguments that map to CLI flags.

Quickstart

ingestr ingest \
    --source-uri 'postgresql://admin:admin@localhost:8837/web?sslmode=disable' \
    --source-table 'public.some_data' \
    --dest-uri 'bigquery://<your-project-name>?credentials_path=/path/to/service/account.json' \
    --dest-table 'ingestr.some_data'

That's it.

This command:

  • gets the table public.some_data from the Postgres instance.
  • uploads this data to your BigQuery warehouse under the schema ingestr and table some_data.

Documentation

You can see the full documentation here.

Community

Join our Slack community here.

Contributing

Pull requests are welcome. However, please open an issue first to discuss what you would like to change. We maybe able to offer you help and feedback regarding any changes you would like to make.

[!NOTE] After cloning ingestr make sure to run make setup to install githooks.

Supported sources & destinations

Source Destination
Databases
AWS Athena โœ… โœ…
AWS Redshift โœ… โœ…
Cassandra โœ… โœ…
ClickHouse โœ… โœ…
Couchbase โœ… -
CrateDB โœ… โœ…
Databricks โœ… โœ…
DuckDB โœ… โœ…
DynamoDB โœ… โœ…
Elasticsearch โœ… โœ…
Google BigQuery โœ… โœ…
GCP Spanner โœ… -
IBM Db2 โœ… -
InfluxDB โœ… -
Kafka โœ… -
Local CSV file โœ… โœ…
MaxCompute โœ… โœ…
Microsoft Fabric โœ… โœ…
Microsoft OneLake - โœ…
Microsoft SQL Server โœ… โœ…
MongoDB โœ… โœ…
MotherDuck โœ… โœ…
MySQL โœ… โœ…
Oracle โœ… -
PlanetScale โœ… โœ…
Postgres โœ… โœ…
RabbitMQ โœ… -
SAP Hana โœ… -
Snowflake โœ… โœ…
Socrata โœ… -
SQLite โœ… โœ…
StarRocks โœ… โœ…
Synapse - โœ…
Trino โœ… โœ…
Platforms
Adjust โœ… -
Airtable โœ… -
Allium โœ… -
Amazon Kinesis โœ… -
Anthropic โœ… -
API-Football โœ… -
AppsFlyer โœ… -
Apple Ads โœ… -
Apple App Store โœ… -
Applovin โœ… -
Applovin Max โœ… -
Asana โœ… -
Attio โœ… -
Azure Data Lake Storage Gen2 โœ… โœ…
BallDontLie FIFA โœ… -
Braze โœ… -
Bruin โœ… -
Chess.com โœ… -
ClickUp โœ… -
Cursor โœ… -
Docebo โœ… -
Dune โœ… -
Facebook Ads โœ… -
Fireflies โœ… -
Fluxx โœ… -
football-data.org โœ… -
Frankfurter โœ… -
Freshdesk โœ… -
FundraiseUp โœ… -
G2 โœ… -
GitHub โœ… -
GitLab โœ… -
Google Ads โœ… -
Google Analytics โœ… -
Google Cloud Storage (GCS) โœ… โœ…
Google Sheets โœ… -
Gorgias โœ… -
Granola โœ… -
Hostaway โœ… -
HubSpot โœ… -
Indeed โœ… -
Intercom โœ… -
Internet Society Pulse โœ… -
Jira โœ… -
JobTread โœ… -
Klaviyo โœ… -
Linear โœ… -
LinkedIn Ads โœ… -
Mailchimp โœ… -
Mixpanel โœ… -
Monday โœ… -
Notion โœ… -
Paddle โœ… -
Personio โœ… -
PhantomBuster โœ… -
Pinterest โœ… -
Pipedrive โœ… -
Plus Vibe AI โœ… -
PostHog โœ… -
Primer โœ… -
QuickBooks โœ… -
Reddit Ads โœ… -
RevenueCat โœ… -
S3 โœ… โœ…
Salesforce โœ… -
SFTP โœ… -
SendGrid โœ… -
Shopify โœ… -
Slack โœ… -
Smartsheet โœ… -
Snapchat Ads โœ… -
Solidgate โœ… -
Square โœ… -
Stripe โœ… -
SurveyMonkey โœ… -
TikTok Ads โœ… -
Trustpilot โœ… -
Twilio โœ… -
Wise โœ… -
Zendesk โœ… -
Zoom โœ… -

Feel free to create an issue if you'd like to see support for another source or destination.

License

ingestr is source-available under the Functional Source License 1.1, with Apache 2.0 as the future license. You can use ingestr freely for internal production use, development, testing, education, research, and professional services. You cannot use ingestr to offer a competing commercial ingestion, ELT, connector, or managed data pipeline product/service.

Each version becomes Apache 2.0 two years after release.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

ingestr-1.0.59-py3-none-win_amd64.whl (69.6 MB view details)

Uploaded Python 3Windows x86-64

ingestr-1.0.59-py3-none-manylinux2014_x86_64.whl (69.4 MB view details)

Uploaded Python 3

ingestr-1.0.59-py3-none-manylinux2014_aarch64.whl (62.0 MB view details)

Uploaded Python 3

ingestr-1.0.59-py3-none-macosx_11_0_arm64.whl (63.2 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

ingestr-1.0.59-py3-none-macosx_10_15_x86_64.whl (69.0 MB view details)

Uploaded Python 3macOS 10.15+ x86-64

File details

Details for the file ingestr-1.0.59-py3-none-win_amd64.whl.

File metadata

  • Download URL: ingestr-1.0.59-py3-none-win_amd64.whl
  • Upload date:
  • Size: 69.6 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for ingestr-1.0.59-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 b590f4ed59f8a54a23ddea2cd3ba5c587ee8a920eceda72847250b59f29eb59c
MD5 4ce77966a31f98817adfeae2ea4c0dd0
BLAKE2b-256 849e5039001a54c42260118c6089d9040a2413f97ac1173edde364e7dd73ff75

See more details on using hashes here.

File details

Details for the file ingestr-1.0.59-py3-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for ingestr-1.0.59-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 604d77f68abf5c0b22fc213eb11ed3b67f8fdacec0ea4fe26e183a96dc70ec6b
MD5 0da805340875fa1a72db80143f37f647
BLAKE2b-256 1628d1f1da125573a5246f73d7d4fabac8056d72197a915edc9b879d618749d5

See more details on using hashes here.

File details

Details for the file ingestr-1.0.59-py3-none-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for ingestr-1.0.59-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2a682e70e4677d908dd86cf8192baf3d26956682f60ba48f1b159e6a4c680b98
MD5 a294850bd50bbf7077cd880196a687e9
BLAKE2b-256 5dfea20321d3d888c35a6b70baaafcfe2e7e390ffd0d33e14e550cbfaf70bb5e

See more details on using hashes here.

File details

Details for the file ingestr-1.0.59-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for ingestr-1.0.59-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ada31c63d498e3348d83f251bda1956c3d8bfe2c92182fac9f8024a6df9ace60
MD5 aa0b09d14de708a9512226643adbf4bf
BLAKE2b-256 9d524964bd92dae290617d49c9f3339d0d343f7d6701732b1c120d7a1a859788

See more details on using hashes here.

File details

Details for the file ingestr-1.0.59-py3-none-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for ingestr-1.0.59-py3-none-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 0df3391358ba50b13f3e9066d92bc1cca872695142f3899baea102d9b6916af0
MD5 e7795a5e340e8594351acc765b18929b
BLAKE2b-256 1b2e585ae4fd309449ba572dc8275a119fb44961723e884d09594f3ae4c780b4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page