snapdata
Datasets

Tickers

US (reference data). Every ticker registered with the SEC, with its CIK, company name and exchange. Public domain.

What this is

The US listed universe: 10,398 companies with a ticker registered with the SEC, each with its Central Index Key, legal name and exchange.

curl -s https://snapdata.dev/api/v1/tickers/us/aapl.json

There are no prices in this dataset, and there will not be. Daily US equity prices are not redistributable from any free source. Every free price API either forbids redistribution or requires a key per consumer, and this project's whole product is republishing data under a stated licence. Publishing prices we are not permitted to redistribute would be dishonest, so we publish the parts that are public domain and say plainly what is missing.

Why the CIK is the point

The CIK is how the SEC identifies a filer. With it, every filing and every XBRL financial fact is one predictable URL away. Building ticker → CIK is the annoying step, so each file has it already, along with the URLs it unlocks:

{
  "ticker": "AAPL",
  "cik": "0000320193",
  "name": "Apple Inc.",
  "exchange": "Nasdaq",
  "links": {
    "filings": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000320193&type=10-K",
    "facts": "https://data.sec.gov/api/xbrl/companyfacts/CIK0000320193.json",
    "submissions": "https://data.sec.gov/submissions/CIK0000320193.json"
  }
}

The CIK is zero-padded to ten digits because that is the form the SEC's own URLs require. cik_number carries the bare integer if you would rather build them yourself.

Endpoints

PathWhat it returns
/api/v1/tickers/us/{symbol}.jsonOne company. aapl, AAPL, either works
/api/v1/tickers/us/latest.jsonAll 10,398, full records
/api/v1/tickers/us/index.jsonCompact search index, 124 KB gzipped
/api/v1/tickers/us/exchange/nyse.jsonOne exchange (nyse, nasdaq, otc, cboe, none)

The symbol in the path is case-insensitive; R2 keys are not, so the router lower-cases it and there is exactly one object per symbol.

The search index

index.json carries positional tuples rather than objects:

{ "fields": ["ticker", "name", "exchange"],
  "rows": [["A", "AGILENT TECHNOLOGIES, INC.", "NYSE"]] }

Repeating three keys 10,398 times is the difference between a file a browser will fetch and one it will not. At 124 KB gzipped the whole universe fits in the client, which is how ticker search works with no database and no request per keystroke.

Not a price series

This is reference data, so it does not follow the shape the rest of the API uses. There are no series/30d windows, no is_trading_day, no status and no dated snapshots — a ticker has no trading day and no value, and inventing those fields to fit the envelope would be a lie about what the data is.

Cadence

Refreshed monthly, not every three hours. The listed universe changes a handful of times a month, when a company lists, delists or renames. Rebuilding 10,404 objects every three hours to discover nothing had changed took over ten minutes a run and produced nothing.

Licence

US Government work, so public domain. No key, no attribution requirement, no redistribution limit. That is rare in this space and is most of the reason this dataset exists.

On this page