Skip to content

Minimum Viable Data Set

The founding document names nine data sources as one undifferentiated list, with no cost, no licence, no necessity ranking and no alternative attached to any of them. This page proposes the smallest set that produces something a customer would pay for, says what the expensive sources actually buy on top of it, and argues that the cheapest useful thing the firm can do this week is start archiving raw bytes.

architecture/data-pipeline.md lists nine declared sources; every row has a Status column and nothing else — no cost, no licence, no alternative, no priority. The pipeline has never been built partly because the first source on that list, taken literally, is either unaffordable or unlicensable, so scoping against the full list produces a project that cannot start.

That is the whole of it. There is no crisis here — nothing is deployed, there are no users and no revenue, so nothing is currently going wrong. The cost is that the pipeline stays at zero rows while the source question stays open, and one specific asset (history) can only be accumulated in real time — which is what the collection section below is about.

A defensible product exists entirely on free or near-free sources that permit redistribution. This is the set.

SourceWhat it givesCostLicence / redistributionDeclared layer covered
GDELTGlobal news events, actors, themes and tone; new files roughly every 15 minutes; machine-readable, already extractedFree download; you pay egress and storageDescribed as free and openly redistributable — Confirm the current terms, and note it distributes metadata and extracted features, not full article textWorldwide local news; geopolitical structure
Copernicus Sentinel-1/2Radar (cloud-independent) and ~10 m optical imagery, revisit on the order of daysData free; processing and storage are the real costCopernicus full, free and open policy, attribution expected — ConfirmEcological conditions
USGS Landsat30 m multispectral imagery with a very long archive (Landsat 1 launched 1972)FreeUS government work, generally unrestricted — ConfirmEcological conditions
OpenStreetMap / OverpassRoad, rail, port, airport and infrastructure geometry, worldwideFree (run your own Overpass instance or use a public one within its rate limits)ODbL — share-alike and attribution. The one row here with a real condition; whether share-alike reaches a derived commercial database is a question for counselTraffic and infrastructure
OpenSky NetworkADS-B flight positions, live and historicalFree tier for research and non-commercial useCommercial use generally needs a separate agreement — Confirm before it touches a paid productTraffic and infrastructure
Open AIS feedsVessel positions and movementFree to cheap; coverage is coastal and partial, not globalTerms vary per feed; each national or community feed needs its own check — Confirm eachTraffic and infrastructure
ERA5 / NOAAWeather and climate reanalysis, hourly, decades deepFreeCopernicus/NOAA open terms with attribution — ConfirmEcological conditions
World Bank, IMF, UN Comtrade, FAO, EIA, Our World in DataStructured national indicators with real history — economic, trade, agricultural, energyFree APIs; Comtrade has volume limits on the free tier and a paid premium tierMostly permissive open-data licences with attribution (World Bank and OWID are the clearest) — Confirm per publisher, they are not uniformOrganizational and geopolitical structures
ACLEDCoded conflict, protest and political-violence events, back to the 1990s for some regionsFree for non-commercial and academic use; commercial use is a paid licenceThe one row in this set with a real price for Demostatics’ actual purpose — get a quote early, it is a line item not a rounding errorOrganizational and geopolitical structures
Central bank FX (TCMB, ECB, others)Official reference rates, daily, long seriesFreeECB reference rates are redistributable with attribution — Confirm; other central banks varyThe declared “Foreign exchange rates” source

Five layers are declared: organizational and geopolitical structures, worldwide local news, traffic and infrastructure, ecological conditions, and meta-descriptive listings. The set above covers the first four — every layer that is actually ingested. The fifth is not a source layer at all: meta-descriptive listings are defined in the founding document as records generated from the other four, so they are an output of the processing stage, not something anyone can buy.

The three things you genuinely give up by choosing this set:

  • Live road congestion. OSM gives geometry, not traffic state. Nothing free replaces real-time congestion at global scale. If a customer needs it, that is the moment to price a mapping contract — see the next section.
  • Social media. The founding list names it; there is no cheap substitute since the 2023 repricings. Drop it from v1 and say so rather than leaving it on a slide.
  • Sub-metre imagery. Sentinel is 10 m and Landsat is 30 m. Counting individual cars in a car park needs commercial tasking. Nothing in the product description requires it today.
Declared sourceFree-set substituteNote
Satellite observationSentinel-1/2, LandsatCovers land-use and ecological change, which is the only genuine satellite use case in the description
Mapping and traffic APIsOSM/Overpass for geometry; ADS-B and AIS for movementLive road congestion has no free substitute
Foreign exchange ratesTCMB, ECB and peer central banksDirect replacement, better provenance than a reseller
ISO datasetsFree reference data for codes (country, currency); ISO standards documents themselves are individually paid and not redistributableClarify what the founding document meant here — the two readings differ by a lot
Journal articlesCrossref, OpenAlex, arXiv, DOAJ metadata and open-access full text — Confirm eachFree metadata is abundant; full text is not, and publisher terms bite
News networksGDELT, plus per-outlet RSSDirect scraping of news sites is the licence minefield; GDELT is the way around it
Social media platformsNone at v1X API was roughly $5,000/mo at the Pro tier (ESTIMATE, from the cost findings, needs a current quote)
Open source librariesThis entire set is thatAlready satisfied
Big web dataCommon CrawlFree, monthly crawls, deep archive — Confirm terms

The history point, which is the one that actually sells

Section titled “The history point, which is the one that actually sells”

Several of these ship decades of history you can load on day one: Landsat back to the 1970s, ERA5 back to the mid-twentieth century, World Bank and IMF series back decades, Comtrade back decades, ACLED back to the 1990s, GDELT back years. That matters more than anything else in this table, because the named buyer segments — investors, analysts, risk professionals — buy on one question above all others: give me the history so I can backtest it.

A product built on these sources can answer that question in its first week. A product built on live API calls to a mapping provider cannot answer it for years, because the provider sells you the present and forbids you from keeping it.

What the expensive sources actually buy you

Section titled “What the expensive sources actually buy you”

Honestly, and with the licence problem stated separately from the price problem.

SourceWhat it adds over the free setCostLicence risk
Google Maps PlatformLive traffic and congestion, routing with real-world travel times, high-quality places dataMetered per call. ESTIMATE from the cost findings: sampling 1,000 corridors every 15 minutes is ~2.9M Routes calls/month, on the order of $14,000/mo at roughly $5 per 1,000 requests. “Global road networks” is trivially 10x thatHigh. Terms have historically restricted caching Content beyond a limited window, prohibited creating derived datasets, and prohibited redistribution to third parties
Yandex MapsComparable routing and traffic, strongest in its home regionPaid commercial licence, unpriced hereHigh, and not only legal. Brings a Russian counterparty into the supply chain — payment-rail friction and sanctions screening for a firm that later wants EU or US clients
Baidu MapsThe only realistic mapping coverage inside ChinaPaid, unpriced hereHigh. Production use generally requires a Chinese entity and an ICP filing, which a Turkish company does not have
Commercial satellite tasking (Planet, Maxar, Airbus, ICEYE, Satellogic)Sub-metre resolution, tasked revisit, guaranteed acquisition over a chosen areaFive to six figures per year minimum for a broad-area subscription (ESTIMATE — no vendor has been contacted)Moderate. Imagery licences are negotiable but typically restrict redistribution of pixels; derived analytics are usually permitted, which needs writing into the contract

This is not the same problem as “the sources are unpriced”, and it is the more dangerous of the two. Demostatics’ stated model is: ingest via API, refine, store in query-ready form, and sell access to the result, including bulk CSV/JSON export and an API tier for institutional partners. Storing and reselling derived data is a different permission from calling an API, and the three named mapping providers are the exact category of vendor that withholds it.

The founding document rests the entire product on satellite observation — “grounded in a unified layer of satellite-enabled global communication” — and then names no operator, no constellation, no vendor, no resolution, no revisit interval and no cost. Demostatics.pdf page 3 carries the claim above a figure captioned Fig 1.1 General Satellite Communication. That figure is a generic textbook illustration of satellite eavesdropping: it labels a transmitter, a “Legitimate receiver” and an “Eavesropper” [sic]. It is not architecture, and it has nothing to do with what the platform does.

Read the specific capabilities the document claims, and none of the first three come from satellite imagery at all:

Claimed capabilityWhere it actually comes from
Flight pathsADS-B — OpenSky free for research; FlightAware or Cirium commercially
Maritime routesAIS — open and national coastal feeds free or cheap; Kpler, Windward, Spire are the paid tier
Road networksOpenStreetMap, and the mapping APIs already listed separately
Weather shiftsERA5 and NOAA, free
Land-use and ecological changeGenuinely satellite — and served by free Sentinel-2 and Landsat

So the expensive part of “satellite” — commercial high-resolution tasking, where the five- and six-figure annual contracts live — is probably doing no work the product requires today. Say that plainly, drop it from the plan, and add it later if and when a customer pays for something that needs it. Doing so removes what would otherwise be the largest single line in cost of goods without weakening a single stated capability. See Costs and Unit Economics.

This is the point of the page. Every other decision here can wait; this one cannot, because a day not collected is gone.

Nothing is being collected or archived anywhere today, from any source. There is no object store, no dated snapshot, no crawl log; the only scheduled task in the entire product is sanctum:prune-expired in demostatics-web/routes/console.php. Meanwhile the schema gap (no numeric time series, no history table) is a migration that can be written any time — it loses nothing by waiting. History is different in kind. Satellite passes, news volume, vessel positions and sentiment for a date you did not collect are gone; some can be back-filled at cost from archives, and some cannot be reconstructed at all.

An archiver requires none of the hard decisions. It does not need the worker tier, the taxonomy, the provenance schema, the contract reconciliation or a single migration, because it writes raw files, not rows.

A scheduled fetch, a dated object key, no parsing.

Terminal window
# crontab — one line per source, cadence per the registry
*/15 * * * * /opt/demostatics/collect.sh gdelt
0 * * * * /opt/demostatics/collect.sh opensky
0 6 * * * /opt/demostatics/collect.sh worldbank-indicators
#!/usr/bin/env bash
# collect.sh — fetch once, store the bytes, never parse.
set -euo pipefail
src="$1"
url="$(jq -r --arg s "$src" '.[$s].url' /opt/demostatics/sources.json)"
now="$(date -u +%Y%m%dT%H%M%SZ)"
key="raw/${src}/$(date -u +%Y/%m/%d)/${now}"
curl -fsSL --max-time 300 -D "/tmp/${src}.headers" "$url" | gzip -c > "/tmp/${src}.gz"
aws s3 cp "/tmp/${src}.gz" "s3://demostatics-raw/${key}.gz"
aws s3 cp "/tmp/${src}.headers" "s3://demostatics-raw/${key}.headers"
# one append-only manifest line per fetch — this is the seed of the source registry
printf '{"source":"%s","url":"%s","fetched_at":"%s","key":"%s","sha256":"%s"}\n' \
"$src" "$url" "$now" "$key" "$(sha256sum "/tmp/${src}.gz" | cut -d' ' -f1)" \
>> /opt/demostatics/manifest.jsonl

Five rules that make the archive worth having later:

  1. Write once. Never overwrite a key, never delete, never edit in place. Turn on bucket versioning, and object lock if the provider offers it.
  2. Store the response headers and the request URL next to the body. That pair is your provenance record, and it costs nothing at fetch time and cannot be recreated afterwards.
  3. Do not parse. Parsing is a decision you will change three times. The archive is the thing you cannot redo, so keep the two apart — you can re-derive every downstream table from the archive, forever.
  4. Archive metadata, not pixels, for imagery. Copernicus and USGS keep the scenes for free and permanently. Archive the scene index and the identifiers you selected; pulling the raster later is a re-download, not a loss.
  5. Record the licence that applied at fetch time, per source, in the manifest. Terms change, and you need to know what governed the bytes you actually hold.

ESTIMATE, with the reasoning shown: at this scope — GDELT files, indicator series, ADS-B and AIS samples, imagery metadata only — the archiver is a small always-on VM plus object storage at roughly $0.02/GB/month, which lands under $100/month at the start and grows slowly. That is the cheapest thing in the whole plan and the only one whose value is strictly decreasing in how long you wait. The wider cost picture is on Costs and Unit Economics.

Nothing in any repository holds source metadata. There is no sources.md, no registry table, no adapter interface, no provider abstraction and no second source named for any layer — and the tier that would own one, demostatics-backend, contains a two-line README.md. Not built.

Once it exists, it is where licence terms, update cadence and cost per source live. Minimum fields:

FieldWhy it has to be there
id, name, layerWhich of the five declared layers this feeds
endpoint, format, authWhat to call and with what
cadenceDrives the schedule, and makes a silently stopped feed detectable
history_startThe single most commercially relevant fact about a source
licence, redistribution, commercial_useWhether you may store it, resell it, and export it to a customer
attribution_stringThe text that must appear in every distributed artefact, including exports
cost, cost_model, rate_limitCost of goods per source, and the ceiling that stops a runaway bill
second_sourceThe fallback for this layer, at least one of which should be free
terms_url, terms_reviewed_atTerms change; a date tells you when to look again
statusShipped / Partial / Planned / Not built, per source

Two practical notes on where to start:

  • The first row should be a source that already ships. The dr5hn countries-states-cities dataset is the only external dataset actually in the product, it is redistributed unauthenticated through the public geo cascade in routes/api.php, and its licence is recorded nowhere, it carries no attribution in any distributed artefact, and no version or checksum is pinned. Every reports.country_id and database_items.country_id is a bare integer pointing into it. That is the registry’s problem in miniature, live today.
  • Two sources per layer, one of them free. One adapter interface per layer, written before the first integration, costs almost nothing; retrofitting it after a provider reprices costs a rewrite. Google raised Maps Platform prices roughly 10-14x in 2018 with a few months’ notice; X and Reddit closed free API access in 2023. Your gross margin should not be set by a supplier who is not negotiating with you.

Free sources do not give you a product. GDELT gives away structured worldwide news events at no charge, which means “we aggregate worldwide news” is not itself something anyone will pay for — the refinement layer has to be the product, and it has to be demonstrably better than free. That raises two questions this page deliberately does not answer: how you know your output is correct (Ground Truth and Model Risk) and what the refined result costs to produce (Costs and Unit Economics).

The sequence in which any of this happens is on What To Do Next; the full list of findings behind this page is in the Gap Register; the stage-by-stage pipeline these sources would feed is Data Pipeline.