Data coverage and boundaries
See where each dataset starts and ends, which securities are covered, and how amendments and the Free plan window shape results.
This page states where each dataset begins, where it currently ends, which securities are in the universe, and how amended filings and the Free plan's one-year window appear in responses. Start dates were measured on 2026-10-02. End dates move forward as data is added; read them from /v1/status or from meta.freshness on any response.
Coverage by dataset
- Daily prices begin on
1962-01-02. IBM's and GE's series both start that day. - Ticker histories begin in July 1962:
GM's first recorded span starts on1962-07-02. A price row dated before its security's first recorded ticker carriesticker: null, as IBM's row for 1962-01-02 does. - Annual financial statements begin with the period ending
1950-06-30, Procter & Gamble's fiscal 1950. Quarterly statements begin with the quarter ending1962-01-31, Deere & Company's first quarter of fiscal 1962. IBM's first annual period ends1950-12-31and its first quarterly period1962-03-31. The record before 1970 thins going back: annual statements are on record for 784 companies in the 1950s and 2,579 in the 1960s, and quarterly statements for 1,852 companies in the 1960s. Fundamentals lists the fields with no value on those rows. - Point-in-time versions of statements, which
as_of,view=as_reportedandversion=originalread, begin with annual periods ending1970-06-30, with a few annual periods from1968-06-30, and with quarterly periods ending1973-09-30. The earliestas_ofdate that returns rows is1986-12-14. Point-in-time and as-of explains both dates. - Metrics are computed from fundamentals and prices, so a metric is available for a period when its inputs are. On periods that end before prices begin in 1962, valuation metrics such as
market_capandpe_ratioarenullandmissing_inputsnames the reason, while statement metrics such asnet_margincompute. Daily metrics (period=daily) withoutas_ofbegin with a company's XBRL-era statements. Withas_of, earlier daily rows are built from archive statements. - Index membership is recorded from
1925-12-31for the S&P 500 (first change1928-08-24) and from1995-01-01for the Nasdaq-100 (first change1995-01-26). Dow Jones Industrial Average rosters are complete from1999-10-31. - Insider transactions begin with a filing dated
1983-02-10, with broad coverage from 1986. They come in two eras: an archive era through2005-11-30and an SEC Form 3, 4 and 5 era from2005-12-01. - Institutional holdings begin with the quarter ending
1978-12-31, which covers five managers, with broad coverage from 1980. Quarters throughmeta.archive_edge(2025-12-31) come from the historical era, and later quarters from Form 13F filings.
The requests in the next three sections read the first rows of each dataset, which paid plans return. Free keys read the last 12 months on prices, fundamentals, metrics and index events; see The Free plan window below.
Prices
The earliest price rows are dated 1962-01-02:
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.xfinlink.com/v1/prices/GE?start=1900-01-01&limit=2&fields=close,volume,shares_outstanding"{
"data": [
{
"entity_id": 10001611,
"ticker": null,
"entity_name": "GENERAL ELECTRIC CO",
"gics_sector": "Industrials",
"date": "1962-01-02",
"close": 74.75,
"volume": 21600,
"price_basis": "trade",
"shares_outstanding": 88973000,
"shares_as_of": "1961-12-29",
"shares_source": "archive",
"shares_stale": false
},
...
],
...
}A start before the first row is accepted and returns rows from the first date on record.
Fundamentals
Periods before the point-in-time record come from an archive of reported figures and carry source: "archive", knowledge_time_basis: "none" and filing_date: null. Later archive rows carry knowledge_time_basis observed or bulk_load. Periods reported in a company's XBRL filings with the SEC carry source: "filing" and the filing's filing_date. Microsoft's annual rows switch from archive to filing at fiscal 2008.
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.xfinlink.com/v1/fundamentals/PG?start=1900-01-01&limit=3&fields=revenue,net_income"{
"data": [
{
"entity_id": 6001,
"ticker": "PG",
"entity_name": "PROCTER & GAMBLE CO",
"gics_sector": "Consumer Staples",
"period_end": "1950-06-30",
"period_type": "annual",
"fiscal_year": 1950,
"fiscal_period": "FY",
"filing_date": null,
"version": "restated",
"source": "archive",
"knowledge_time_basis": "none",
"currency": "USD",
"revenue": 632.9,
"net_income": 61.09
},
...
],
...
}Revenue and net income are in millions of USD. With period=quarterly, Procter & Gamble's first row is the quarter ending 1962-03-31.
Index membership
Each index endpoint reports where its record starts (meta.event_coverage_start on the events endpoint) and ends (meta.coverage_end):
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.xfinlink.com/v1/index/sp500/events"{
"data": [
{
"entity_id": 10000636,
"ticker": "BU",
"entity_name": "KEYSPAN ENERGY CORP",
"index": "SP500",
"event_type": "added",
"effective_date": "1928-08-24",
"member_grain": "security",
"ticker_basis": "first_known"
},
...
],
"meta": {
"index": "SP500",
"event_coverage_start": "1925-12-31",
"entity_id_grain": "security",
"coverage_end": "2026-10-01",
"data_floor": null,
"count": 1000,
"total": 3608,
"has_more": true,
...
}
}The same request for djia reports event_coverage_start: "1999-10-31" and for ndx100 reports "1995-01-01". The members at the start of coverage are not returned as added events. A roster for an as_of before event_coverage_start lists the members whose recorded membership includes that date.
Current end dates
/v1/status needs no key and lists every dataset with the last event date it covers (through) and the UTC time that build went live (promoted_at):
curl "https://api.xfinlink.com/v1/status"{
"status": "live",
"version": "0.9.0",
"freshness": [
{"dataset": "classifications", "through": "2026-09-18", "promoted_at": "2026-09-18T05:22:46Z", "changed_at": null, "change_cursor": null},
{"dataset": "entities", "through": "2026-09-13", "promoted_at": "2026-09-18T05:14:35Z", "changed_at": null, "change_cursor": null},
{"dataset": "entity_events", "through": "2026-08-17", "promoted_at": "2026-09-18T05:18:51Z", "changed_at": null, "change_cursor": null},
{"dataset": "fundamentals", "through": "2026-08-31", "promoted_at": "2026-09-27T20:21:59Z", "changed_at": null, "change_cursor": null},
{"dataset": "fundamentals_historical", "through": "2026-07-31", "promoted_at": "2026-10-01T06:51:42Z", "changed_at": null, "change_cursor": null},
{"dataset": "fundamentals_point_in_time", "through": "2026-07-31", "promoted_at": "2026-10-02T03:39:53Z", "changed_at": null, "change_cursor": null},
{"dataset": "identifiers", "through": "2026-07-30", "promoted_at": "2026-09-18T05:17:40Z", "changed_at": null, "change_cursor": null},
{"dataset": "index_membership", "through": "2026-09-21", "promoted_at": "2026-10-01T20:00:46Z", "changed_at": null, "change_cursor": null},
{"dataset": "insider_filings", "through": "2026-09-29", "promoted_at": "2026-09-27T04:35:43Z", "changed_at": null, "change_cursor": null},
{"dataset": "insider_owners", "through": "2026-09-29", "promoted_at": "2026-09-27T04:41:10Z", "changed_at": null, "change_cursor": null},
{"dataset": "insider_transactions", "through": "2026-09-29", "promoted_at": "2026-09-27T04:56:08Z", "changed_at": null, "change_cursor": null},
{"dataset": "insider_transactions_historical", "through": "2005-11-30", "promoted_at": "2026-09-18T19:34:36Z", "changed_at": null, "change_cursor": null},
{"dataset": "institutional_filings", "through": "2026-06-30", "promoted_at": "2026-09-28T00:28:43Z", "changed_at": null, "change_cursor": null},
{"dataset": "institutional_holdings", "through": "2026-06-30", "promoted_at": "2026-09-28T00:28:43Z", "changed_at": null, "change_cursor": null},
{"dataset": "institutional_holdings_historical", "through": "2025-12-31", "promoted_at": "2026-09-24T19:51:07Z", "changed_at": null, "change_cursor": null},
{"dataset": "listings", "through": "2026-08-25", "promoted_at": "2026-09-18T05:31:46Z", "changed_at": null, "change_cursor": null},
{"dataset": "price_adjustments", "through": "2026-09-30", "promoted_at": "2026-09-27T20:18:18Z", "changed_at": null, "change_cursor": null},
{"dataset": "prices", "through": "2026-09-30", "promoted_at": "2026-09-27T20:18:18Z", "changed_at": null, "change_cursor": null},
{"dataset": "shares_outstanding", "through": "2026-09-25", "promoted_at": "2026-09-27T20:26:42Z", "changed_at": null, "change_cursor": null}
]
}On 2026-10-02, prices run through the trading day 2026-09-30, insider filings through 2026-09-29, Form 13F holdings through the quarter ending 2026-06-30, and statement periods through 2026-08-31. The historical insider and holdings datasets end where the filing eras take over. Each data response repeats the entries for the datasets behind it in meta.freshness. Status and freshness documents the endpoint and when each dataset is refreshed.
Securities covered
The universe is securities traded in the United States, listed or delisted: stocks, ETFs and closed-end funds, including US listings of foreign companies such as RIO (Rio Tinto plc). /v1/search with no filters counts the entities it can return in meta.total: share classes, and the company itself where no share class is on record:
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.xfinlink.com/v1/search?limit=1"{
"data": [...],
"meta": {
"count": 1,
"limit": 1,
"offset": 0,
"total": 58338,
"has_more": true,
"entity_id_grain": "security id where a share class matched; issuer id where only the issuer exists",
...
}
}Add entity_type=corporation, entity_type=etf or entity_type=closed_end_fund to the same request to count each type the same way.
Every entity has country: "US". A search with any other country returns no rows:
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.xfinlink.com/v1/search?country=GB&limit=1"{
"data": [],
"meta": {
"count": 0,
"limit": 1,
"offset": 0,
"total": 0,
...
}
}Security types and exchanges
entity_type on search and resolve rows is corporation, etf or closed_end_fund, and /v1/search filters on it. corporation also covers preferreds, depositary receipts, notes and units. To tell a company's common stock from its other securities, read instrument_type from Resolve: common, adr, etf, cef, preferred, note_etn, unit or structured. Resolve also returns each security's listing exchange, and every price row carries the exchange on its date in exchange_code, so you can keep one exchange by filtering on either field.
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.xfinlink.com/v1/resolve/BRK-B,BAC-PL,TSM,ADX,SPY?date=2026-09-30"{
"data": {
"BRK-B": {"entities": [{"entity_id": 10025221, "name": "BERKSHIRE HATHAWAY INC DEL", "entity_type": "corporation", ..., "share_class": "B", "instrument_type": "common", "exchange": "NYSE", ...}]},
"BAC-PL": {"entities": [{"entity_id": 10033822, "name": "BANK OF AMERICA CORP — PFD SER L 7.25", "entity_type": "corporation", ..., "share_class": null, "instrument_type": "preferred", "exchange": "NYSE", ...}]},
"TSM": {"entities": [{"entity_id": 10026747, "name": "TAIWAN SEMICONDUCTOR MFG CO LTD", "entity_type": "corporation", ..., "share_class": null, "instrument_type": "adr", "exchange": "NYSE", ...}]},
"ADX": {"entities": [{"entity_id": 10000052, "name": "ADAMS EXPRESS CO", "entity_type": "closed_end_fund", ..., "share_class": null, "instrument_type": "cef", "exchange": "NYSE", ...}]},
"SPY": {"entities": [{"entity_id": 10026103, "name": "SPDR S & P 500 E T F TRUST", "entity_type": "etf", ..., "share_class": null, "instrument_type": "etf", "exchange": "ARCA", ...}]}
},
"meta": {...}
}Delisted companies
Companies that were delisted, acquired or went bankrupt are included in every dataset, with prices through their last day of trading on a US exchange. meta.delisting on a prices response gives the exit date, its kind and the delisting return. Twitter's series ends on 2022-10-27 and Bear Stearns' on 2008-05-30, both with event_type: "merger". Lehman Brothers' series ends on 2008-09-17, two days after its bankruptcy filing, with event_type: "dropped":
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.xfinlink.com/v1/prices/LEH?start=2008-09-12&end=2008-12-31&fields=close"{
"data": [
...
{
"entity_id": 10023380,
"ticker": "LEH",
"entity_name": "LEHMAN BROTHERS HOLDINGS INC",
"gics_sector": "Financials",
"date": "2008-09-17",
"close": 0.13,
"price_basis": "trade"
}
],
"meta": {
...
"delisting": {
"10023380": {"event_date": "2008-09-17", "event_type": "dropped", "delisting_return": -0.6}
},
...
}
}close is in USD per share and delisting_return is a decimal ratio. Search returns delisted companies with the last date they held their ticker in ticker_valid_to (Raytheon Company under RTN: 2020-04-02), and index rosters list former members with their removed_date. Tickers and entities shows how tickers of delisted companies resolve.
Days without a price row
A day the market is closed has no row. Apple's July 2026 rows go from 2026-07-02 to 2026-07-06, with no row for the Independence Day holiday on 2026-07-03 or for the weekend. A trading day can still carry a row with no price: Luckin Coffee's rows during its trading halt, from 2020-04-07 to 2020-05-19, have close and volume null.
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.xfinlink.com/v1/prices/LK?start=2020-04-06&end=2020-04-08&fields=close,volume"{
"data": [
{"entity_id": 10006849, "ticker": "LK", "entity_name": "LUCKIN COFFEE INC", "gics_sector": "Consumer Discretionary", "date": "2020-04-06", "close": 4.39, "volume": 87790105, ...},
{"entity_id": 10006849, "ticker": "LK", "entity_name": "LUCKIN COFFEE INC", "gics_sector": "Consumer Discretionary", "date": "2020-04-07", "close": null, "volume": null, ...},
{"entity_id": 10006849, "ticker": "LK", "entity_name": "LUCKIN COFFEE INC", "gics_sector": "Consumer Discretionary", "date": "2020-04-08", "close": null, "volume": null, ...}
],
"meta": {...}
}On older rows, a day with no trade can instead carry the midpoint of the bid and ask as close, marked price_basis: "midpoint". See Price fields.
What is not covered
- Intraday bars and real-time quotes. The shortest
intervalis one trading day. - Options, futures and other derivatives. No endpoint serves them.
- Listings on exchanges outside the United States.
- Index membership for indexes other than the S&P 500 (
sp500), the Nasdaq-100 (ndx100) and the Dow Jones Industrial Average (djia). - A price series adjusted for cash dividends.
adj_closeis adjusted for splits, stock dividends and spin-offs, not for cash dividends (meta.adj_close_basis: "split");return_dailyincludes dividends. Price fields shows how to build a dividend-adjusted or forward-adjusted series from them. - Analyst estimates and the constituents of ETFs and funds.
An intraday interval returns HTTP 400:
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.xfinlink.com/v1/prices/AAPL?interval=1h&start=2026-09-25"{
"error": "bad_request",
"code": "bad_request",
"status": 400,
"detail": "Invalid interval: '1h'. Valid: 1d, 3d, 1w, 1mo, 3mo, 6mo, 1y"
}So does an index outside the three:
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.xfinlink.com/v1/index/dax"{
"error": "bad_request",
"code": "bad_request",
"status": 400,
"detail": "Unknown index: dax. Available: djia, ndx100, sp500"
}Amendments and restatements
Amended filings are kept alongside the originals. Each dataset exposes them as follows.
- Fundamentals keep every filing that reported a period. A row's
versionisoriginal,amendmentorrestated. By default you get one row per period;view=as_reportedreturns one row per filing, andas_ofreturns the figures on file on a date. Point-in-time and as-of walks through an amended annual report and a restated comparative year. - Insider transactions default to the current version of each filing, and
meta.amendment_viewreads"current".include_amendments=truereturns every filed version, including Form 4/A amendments withis_amendment: true("all").include_amendments=falsereturns original filings only ("originals"), and any other non-empty value returns400. - Institutional holdings default to the position in force after amendments (
meta.amendment_view: "current").include_amendments=truereturns every filed version as its own row ("all").
curl -H "X-API-Key: YOUR_API_KEY" \
"https://api.xfinlink.com/v1/insiders/AAPL?form_type=4/A&include_amendments=true&limit=2&fields=insider_name,transaction_type,shares,is_amendment"{
"tickers": ["AAPL"],
"data": [
{
"entity_id": 1,
"ticker": "AAPL",
"entity_name": "APPLE INC",
"transaction_date": "2022-08-17",
"filing_date": "2022-08-22",
"form_type": "4/A",
"insider_name": "Maestri Luca",
"transaction_type": "open_market_sell",
"shares": 30345,
"is_amendment": true,
...
},
...
],
...
"meta": {
"entity_id_is": "issuer",
"amendment_view": "all",
...
}
}The Free plan window
A Free key reads the last year of history on /v1/prices, /v1/fundamentals, /v1/metrics and /v1/index/{index_name}/events. The window starts on the current UTC date one year ago, 2025-09-27 on 2026-09-27. An earlier start is raised to that date without an error, and warnings says so. Every Free response from these endpoints carries the date in the X-Data-Floor header:
curl -s -D - -H "X-API-Key: YOUR_API_KEY" \
"https://api.xfinlink.com/v1/prices/AAPL?start=2000-01-01&limit=2&fields=close"HTTP/2 200
...
content-type: application/json
...
cache-control: no-store
...
x-data-floor: 2025-09-27
...
x-ratelimit-limit-day: 100
x-ratelimit-limit-hour: 40
...{
"data": [
{
"entity_id": 10003635,
"ticker": "AAPL",
"entity_name": "APPLE INC",
"gics_sector": "Information Technology",
"date": "2025-09-29",
"close": 254.43,
"price_basis": "trade"
},
{
"entity_id": 10003635,
"ticker": "AAPL",
"entity_name": "APPLE INC",
"gics_sector": "Information Technology",
"date": "2025-09-30",
"close": 254.63,
"price_basis": "trade"
}
],
"meta": {
...
"count": 2,
"limit": 2,
"has_more": true,
...
},
"warnings": ["The Free plan covers the last year, from 2025-09-27; rows before that date are not included. Paid plans cover the full history: https://xfinlink.com/pricing"]
}The first row is 2025-09-29, the first trading day on or after the floor. On /v1/fundamentals and /v1/metrics the window applies to period_end: a Free request returns only the periods that end on or after the floor. On /v1/index/{index_name}/events, Free responses also report the date in meta.data_floor; paid responses report null.
The window does not apply to /v1/resolve, /v1/search or index rosters: a Free key reads the S&P 500 roster for as_of=2000-01-03 in full. Insider transactions, institutional holdings, manager search and manager holdings need Pro or higher, and return 402 on Free. Paid plans read the full history on every endpoint. Plans and limits compares the plans.
Was this page helpful?
Thank you for helping improve xfinlink documentation.
- Need help? Get in touch.
- Building with an LLM? Read llms.txt.
- Using Claude or ChatGPT? Connect the MCP server.