Build content-addressed, offline-verifiable snapshots from free US-listed equity data sources.
The project archives exact response bytes before normalization, records when each response was retrieved, publishes an explicit capability matrix, and proves that normalized artifacts can be rebuilt without network access. It is data plumbing and evidence infrastructure, not a bundled market-data database.
| Capability | Source | Status |
|---|---|---|
| Current US-listed directory | Nasdaq Trader symbol directories | Observed at capture time |
| Issuer ticker/CIK crosswalk | SEC ticker/exchange JSON | Optional, partial identity |
| Raw daily bars | Alpaca free IEX feed | Optional, explicit symbols or bounded prefix |
| All-adjustment daily bars | Alpaca free IEX feed | Optional, stored separately from raw bars |
| Historical membership | Repeated daily snapshots | Prospective from first capture only |
| Corporate actions and delisting values | No complete free authority | Explicitly unavailable |
This project does not claim survivorship-free history before collection begins. It does not turn current symbols into a historical universe, infer missing delisting proceeds, or treat one price provider as independently validated investment evidence.
Libraries such as OpenBB, Qlib, finagg, and yfinance make data access convenient. This project focuses on a different boundary:
- source bytes are immutable and hashed;
- source and retrieval timestamps are distinct;
- normalized outputs are deterministic;
- verification is offline and byte-for-byte;
- missing capabilities remain machine-readable blockers;
- credentials and authorization headers never enter the archive.
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
python -m pip install -e .For development:
python -m pip install -e ".[dev]"Capture the complete current directory without an account. Output must be outside a Git worktree.
ved preflight
ved snapshot --output /data/ved/directory-2026-07-20
ved verify /data/ved/directory-2026-07-20Add an SEC issuer crosswalk by setting a real operator contact:
VED_SEC_USER_AGENT=Research Operator operator@example.orgAdd bounded raw and adjusted Alpaca IEX bars with free Data API credentials:
VED_ALPACA_API_KEY_ID=...
VED_ALPACA_API_SECRET_KEY=...ved preflight --require-bars
ved snapshot \
--output /data/ved/bars-2026-07-20 \
--symbol AAPL \
--symbol MSFT \
--start 2026-07-17 \
--end 2026-07-17--symbol can be repeated. --max-instruments N selects the first N normalized directory
symbols deterministically. An unbounded price request is rejected.
The same workflow is available as a Python API:
from pathlib import Path
from verifiable_equity_data import SnapshotBuilder, verify_snapshot
from verifiable_equity_data.sources import UrllibFreeHTTPClient
builder = SnapshotBuilder(UrllibFreeHTTPClient())
result = builder.build(Path("/data/ved/current"), maximum_instruments=100)
verified = verify_snapshot(result.root)
assert verified.bundle_id == result.manifest.bundle_idsnapshot/
├── manifest.json
├── source/
│ ├── <role>-<sha256>.bin
│ └── ...
├── normalized/
│ ├── corporate_actions.csv
│ ├── execution_bars.csv # only when bars were requested
│ ├── feature_bars.csv # only when bars were requested
│ ├── instruments.csv
│ ├── memberships.csv
│ └── security_directory.csv
└── quality/
└── source_coverage.json
manifest.json binds every source and artifact path, byte count, row count, SHA-256 digest,
retrieval timestamp, selected symbol, capability result, and acceptance blocker. ved verify
reparses the archived Nasdaq, SEC, and Alpaca responses, rerenders every normalized file, and
rejects any mismatch.
flowchart LR
N["Nasdaq Trader"] --> A["Immutable source archive"]
S["SEC identity"] --> A
P["Alpaca IEX bars"] --> A
A --> R["Deterministic offline rebuild"]
R --> M["Content-addressed manifest"]
R --> C["Capability matrix"]
M --> V["ved verify"]
C --> V
The Apache-2.0 license covers this software, not downloaded data. Users are responsible for each source's terms, account restrictions, pacing limits, and redistribution rules. The manifest records the relevant terms URL for every archived response.
Raw responses should remain local unless their source terms explicitly permit redistribution.
Version 0.1 is an alpha evidence pipeline. The next planned capabilities are:
- daily snapshot-chain manifests and continuity verification;
- provider-neutral bar adapters;
- independent price overlap reports;
- source-bound corporate-action plugins;
- explicit delisting and terminal-value evidence.
See Snapshot Contract for the validation rules.
The implementation was originally developed inside Szigor Research's private JANOS market lab, then separated and generalized so the evidence layer can evolve in public without exposing JANOS research, data, credentials, or execution code.
Apache License 2.0. Copyright 2026 Szigor Research.