Publish your datasets

If you have data people keep asking for, you're four steps from being a dataset publisher — no server, no API, no database.

your_data.csv
     │
     ▼
python make_dataset.py your_data.csv
     │
     ▼
a folder:   MYDATA.parquet  +  _META.parquet
     │
     ▼
anyone with Sparrow:   =ES.Get("MYDATA.SALES.M")

The CSV contract

series_id,period,value,name,units
MYDATA.SALES.M,2026-07,1250,Monthly Sales,thousand EUR
MYDATA.SALES.M,2026-06,1180,,
MYDATA.HEADCOUNT.M,2026-07,47,Headcount,people

name and units are optional (one row per series is enough) — they feed the folder's catalog so search and labels work for your consumers with no server anywhere.

Where you can publish

DestinationWho reaches itWhat it takes
A folder on a PCyoucopy files
A network shareyour teamcopy files
Any static web host / CDNyour customersupload files
An S3-compatible bucketyour organisationupload files
An Arrow Flight serverlive subscribersthe Enterprise conversation

The honest rule

Publish atomically, and skip the write when nothing changed — so a file's timestamp moves if and only if its data changed. That one rule is what makes every Sparrow user's NEW-DATA signals trustworthy against your feed. Our reference publisher handles it with a content hash; details in the specification.

Already published somewhere else? Adapters.

Some publishers already publish — they just don't publish Sparrow datasets yet. An adapter converts their format in one command, with the same honest freshness semantics. Adapter #1 is the U.S. Energy Information Administration's official bulk file:

python eia_to_dataset.py https://api.eia.gov/bulk/PET.zip datasets\
# 181,068 series + full catalog, ~7 seconds
# re-runs are free until EIA republishes (conditional download)

Schedule that command daily and you've built a personal data pipeline: when EIA publishes, your file's timestamp moves, and every workbook pointed at the folder lights up — names, units and frequencies included, because EIA's format carries them.

Ship the recipe with the data

Drop an _ADAPTERS.json beside your datasets and consumers' Import menus grow an "Update EIA Petroleum" entry — one click pulls your next vintage, with a "Last imported: … — who, when, outcome" line read from the folder's own history. Recipes declare parameters, never code; an adapter refuses to overwrite files another publisher owns unless your recipe explicitly invites it. On a shared drive that means any analyst can refresh the team's data, and nobody can clobber it by accident.

Updates and revisions

Republish the file. Consumers' ribbons light up within 30 seconds; their refresh marks your new periods with borders and your revisions with before/after comments. You never notify anyone — the format does it.

Read the open specification Get early access