Meerschaum
Create and manage data pipes with Meerschaum.
Meerschaum syncs time-series data pipes
Meerschaum is an ETL framework for time-series data where you define pipes and the tool keeps them synced, deduplicated, and up to date.
What Meerschaum is
Meerschaum is an ETL framework for time-series data. You define pipes, which are named data streams, and Meerschaum keeps them in sync. It fetches only the new or changed rows, deduplicates and upserts them, manages the schema, and handles scheduling, serving, and storage. The pitch is that you write a few lines of fetch logic and the framework handles the rest of the pipeline, so you stop copy-pasting ETL scripts, hand-rolling incremental windows, or babysitting cron jobs. You can drop it into an existing stack or stand up a full database and dashboard stack in minutes. The README presents this as a way to stop repeating the same plumbing for every data source you connect. Because pipes are first-class objects, the same sync engine applies whether you are pulling weather data, metrics, or business events. The framework targets people who maintain many feeds and want one consistent mechanism instead of a folder of one-off scripts. The banner and demo gif on the project page show weather pipes as the example use case, which is a good fit because weather is a steady, append-heavy time series that benefits directly from incremental fetch. The framing is that the boring parts of data plumbing should be solved once and reused, not rewritten per source.
Features and incremental sync
The features list leads with incremental sync by default. The sync engine fetches only new or changed rows and updates many streams at once, which keeps repeated runs cheap. Duplicate rows are ignored and rows with existing keys are updated, so re-runs are safe. The README also points to the sync engine documentation for details on how the incremental window is tracked per pipe. Beyond syncing, Meerschaum manages schema changes and can serve the data it stores, which means a pipe is not just a loader but a small managed dataset. Scheduling is built in, so you do not need a separate cron setup to keep a pipe fresh. The combination is meant to remove the usual glue code around time-series ingestion. For teams that already run a database, Meerschaum slots in as the layer that decides what changed and applies it, leaving storage and dashboards to the tools you already use. The upsert behavior is the part that makes automation safe: you can point a pipe at a source hourly and trust that repeats will not create duplicates or drop updates. That idempotent sync is exactly what hand-written scripts get wrong, and it is the reason the framework is worth adopting once you manage more than a couple of feeds.
CLI and Python usage
Meerschaum offers both a command-line interface and a Python API. The usage section shows installing the NOAA weather plugin, registering a new pipe against the built-in SQLite database, and entering a station code such as KATL for Atlanta when prompted. A bootstrap pipe command provides a wizard for the unsure. Pulling data creates a table named after the pipe, and the Python API can sync a DataFrame or a list of dictionaries, creating the table on first run. That dual interface means you can drive an initial setup from the shell and then automate it from Python later. The project is Apache-2.0 licensed and distributed on PyPI as meerschaum, with Python version badges indicating supported runtimes. For a practical first project the weather plugin is a good demo because it exercises fetching, incremental sync, and storage without you writing a connector. The README also shows the Python side returning a pipe object you can call sync on, which fits naturally into a larger data application. The built-in SQLite default means you can try the whole flow with zero external infrastructure, then move to a real database only when your volume justifies it. That low floor and the higher ceiling of a full stack are what make Meerschaum usable both for a quick experiment and for production ingestion.
Editorial conclusion
Meerschaum is published under the Apache-2.0 license and installs as the meerschaum Python package from PyPI.
Community notes