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 โœ… -
Postgres โœ… โœ…
RabbitMQ โœ… -
SAP Hana โœ… -
Snowflake โœ… โœ…
Socrata โœ… -
SQLite โœ… โœ…
Synapse - โœ…
Trino โœ… โœ…
Platforms
Adjust โœ… -
Airtable โœ… -
Allium โœ… -
Amazon Kinesis โœ… -
Anthropic โœ… -
AppsFlyer โœ… -
Apple Ads โœ… -
Apple App Store โœ… -
Applovin โœ… -
Applovin Max โœ… -
Asana โœ… -
Attio โœ… -
Azure Data Lake Storage Gen2 โœ… โœ…
Bruin โœ… -
Chess.com โœ… -
ClickUp โœ… -
Cursor โœ… -
Docebo โœ… -
Dune โœ… -
Facebook Ads โœ… -
Fireflies โœ… -
Fluxx โœ… -
Frankfurter โœ… -
Freshdesk โœ… -
FundraiseUp โœ… -
G2 โœ… -
GitHub โœ… -
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 โœ… -
Shopify โœ… -
Slack โœ… -
Smartsheet โœ… -
Snapchat Ads โœ… -
Solidgate โœ… -
Stripe โœ… -
SurveyMonkey โœ… -
TikTok Ads โœ… -
Trustpilot โœ… -
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.33-py3-none-win_amd64.whl (59.8 MB view details)

Uploaded Python 3Windows x86-64

ingestr-1.0.33-py3-none-manylinux2014_x86_64.whl (58.1 MB view details)

Uploaded Python 3

ingestr-1.0.33-py3-none-manylinux2014_aarch64.whl (52.0 MB view details)

Uploaded Python 3

ingestr-1.0.33-py3-none-macosx_11_0_arm64.whl (53.7 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

ingestr-1.0.33-py3-none-macosx_10_15_x86_64.whl (58.5 MB view details)

Uploaded Python 3macOS 10.15+ x86-64

File details

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

File metadata

  • Download URL: ingestr-1.0.33-py3-none-win_amd64.whl
  • Upload date:
  • Size: 59.8 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.33-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 d4b2ad5d52b6115ad6974b0ac97e8a8ba79aa1557bb9aa9755eaa21199e7a925
MD5 d244b5d2f5dd40c96dcb8c062b2bcd86
BLAKE2b-256 554e0cd9ee71438494bc0117fe50080c40d56eab8013c8ff69a47aaed3db4f51

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ingestr-1.0.33-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0f8f5a7b224a38b1c61b36a3bca1096fd542c8862ee9085d2c7f9fe0508e4424
MD5 b94ae09402d99600fa817eb3e73559ca
BLAKE2b-256 ff30e19c07d31ae456ad6310f96e3e8ef8e902c3cca7a75564a72d183e8113b6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ingestr-1.0.33-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ed7d4501b8a284dd1df9d3a52c8f5ffb8716d4c73c41f02032b2b6a35c04cb7d
MD5 e222790b8bd9eb32f9b86a51c4215faa
BLAKE2b-256 40123dc8d0f198915320fc6113e92e8b1701afce849373950ab8acb812a97284

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ingestr-1.0.33-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d4f4482d12244b824b7e11aed568944c5fe883a828cfe1a0ee4a6a564794fe93
MD5 dc52b747698e2eea88dbf7a5dceb3ef3
BLAKE2b-256 0c98075409c3e0b1d9374ea4be7fbb71889c74d336e715abb0d70abad2209382

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ingestr-1.0.33-py3-none-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 03bbbb0d65dd672436d7ab24d95ffda2fcaafed8d830a0e7419c415dfa018cb8
MD5 5348554782b6343a3bc32b3616c154fd
BLAKE2b-256 cf77bee3c1458521038ad58e2f02557718ed835132f4c855f4fc2b87a2a78d2a

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