Free SEC Fundamentals API

Company profiles, standardized financial statements – income statement, balance sheet and cash flow, annual, quarterly and trailing twelve months – and SEC filing lists for more than 21,000 companies, looked up by ticker or CIK. Built from SEC EDGAR filings every night. JSON over HTTPS, no API key, CORS enabled.

  • No API key
  • 21,000+ companies
  • Annual, quarterly & TTM
  • Split-adjusted EPS

Personal, non-commercial use only. Redistribution of the data is not allowed. See the Terms of Service.

Quick start

One request, no key. Get Apple's annual financial statements:

curl --compressed "https://api.quotelinks.com/v1/financials/AAPL"
Response (shortened)
{"cik":320193,"symbol":"AAPL","name":"Apple Inc.","currency":"USD","period":"annual","basis":"latest",
 "fields":{"revenue":{"statement":"income","unit":"USD"}, … },
 "periods":[{"fiscal_year":2026,"fiscal_period":"FY","start":"2025-09-28","end":"2026-09-26","form":"10-K",
   "filed":"2026-11-03","accession":"0000320193-26-000026","revenue":478834000000,"gross_profit":233602000000,
   "operating_income":158063000000,"net_income":132175000000,"eps_diluted":8.98, … ,"fcf":136056000000,
   "sources":{"revenue":"us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax", … ,"fcf":"derived"},
   "notes":{"fcf":["derived"]}}, … ]}

Amounts are in the company's reporting currency, in full units (not thousands or millions). Periods are listed newest first.

Try it

Build a request, press Run, and see the live JSON from api.quotelinks.com.

https://api.quotelinks.com/v1/financials/AAPL

Endpoints

Base URL: https://api.quotelinks.com/v1/. All endpoints are GET. {id} is a ticker symbol (case-insensitive; BRK.B and BRK-B both work) or an SEC CIK number (320193 or 0000320193). Former tickers of a company usually work too.

EndpointReturns
/financials/{id}Standardized income statement, balance sheet and cash flow: annual, quarterly or TTM
/company/{id}Company profile: name, tickers, industry, fiscal year end, address, shares outstanding, latest reports
/filings/{id}SEC filings, newest first, with links to the documents on sec.gov; filter by form and date
/industriesAll SIC industry codes with their divisions and company counts
/industries/{sic}Companies in one SIC industry with their latest annual revenue, net income and total assets
/tickersEvery ticker with its CIK, company name and exchange
/statusWhen the data was last rebuilt, and how many companies it covers

GET/v1/financials/{id}

Standardized financial statements, one entry per period, newest first. Each period carries the filing it comes from and, for every value, the XBRL tag it was taken from.

ParameterDescription
periodannual (default), quarterly (Q1–Q4) or ttm (trailing twelve months, one entry per quarter end).
basislatest (default): the most recently filed figure for each period, adjusted for stock splits. original: the figure as first reported, never adjusted. ttm is only available with latest.
Request
GET https://api.quotelinks.com/v1/financials/AAPL?period=quarterly
Response (shortened)
{"cik":320193,"symbol":"AAPL","name":"Apple Inc.","currency":"USD","period":"quarterly","basis":"latest",
 "fields":{ … },
 "periods":[{"fiscal_year":2026,"fiscal_period":"Q4","end":"2026-09-26","form":"10-K","revenue":114477000000, … ,
   "notes":{"revenue":["derived"], … ,"eps_diluted":["derived","approximate"]}}, … ]}

Each period object has fiscal_year, fiscal_period (FY, Q1–Q4), start, end, form, filed, accession, the 39 financial fields (null when the company did not report them), sources and, when needed, notes.

GET/v1/company/{id}

Profile data from the company's SEC registration and filings.

Request
GET https://api.quotelinks.com/v1/company/AAPL
Response (shortened)
{"cik":320193,"symbol":"AAPL","tickers":[{"symbol":"AAPL","exchange":"Nasdaq"}],"name":"Apple Inc.",
 "entity_type":"operating","category":"Large accelerated filer",
 "industry":{"sic":3571,"title":"ELECTRONIC COMPUTERS","division":"D","division_title":"Manufacturing","major_group":"35"},
 "fiscal_year_end":"09-26","state_of_incorporation":"CA","phone":"(408) 996-1010",
 "address":{"street1":"ONE APPLE PARK WAY","city":"CUPERTINO","state_or_country":"CA","zip":"95014", … },
 "former_names":[{"name":"APPLE INC","from":"2007-01-10","to":"2019-08-05"}, … ],
 "shares_outstanding":{"value":14532182000,"date":"2026-10-23"},
 "public_float":{"value":3647099000000,"date":"2026-03-27"},
 "latest_annual_report":{"form":"10-K","filed":"2026-11-03","report_date":"2026-09-26", … },
 "latest_quarterly_report":{"form":"10-Q","filed":"2026-07-31","report_date":"2026-06-27", … },
 "filings_count":2275,
 "financials":{"currency":"USD","fiscal_years":18,"quarters":70,
   "splits":[{"ratio":4.0,"first_post_split_filing":"2020-10-30"},{"ratio":7.0,"first_post_split_filing":"2014-07-23"}]}}

symbol is the company's main ticker; tickers lists all of them (for example both share classes of Alphabet). financials is null for filers without standardized statements.

GET/v1/filings/{id}

Without parameters: the 200 most recent filings. With any parameter, the list is filtered and paged.

ParameterDescription
formComma-separated form types, e.g. 10-K,10-Q,8-K. Exact match; amendments are separate types (10-K/A).
from, toFiling date range, YYYY-MM-DD, inclusive.
limitFilings per page, 1–1000. Default 100.
offsetSkip this many filings. Use the next URL in the response to page.
Request
GET https://api.quotelinks.com/v1/filings/AAPL?form=10-K&limit=1
Response
{"cik":320193,"symbol":"AAPL","name":"Apple Inc.","count":31,"offset":0,"limit":1,
 "next":"https://api.quotelinks.com/v1/filings/AAPL?form=10-K&limit=1&offset=1",
 "filings":[{"accession":"0000320193-26-000026","form":"10-K","filed":"2026-11-03","report_date":"2026-09-26",
   "accepted":"2026-11-03T13:05:15.000Z","items":[],"primary_document":"aapl-20260926.htm","description":"10-K",
   "size":10902198,"xbrl":true,"inline_xbrl":true,
   "url":"https://www.sec.gov/Archives/edgar/data/320193/000032019326000026/aapl-20260926.htm",
   "index_url":"https://www.sec.gov/Archives/edgar/data/320193/000032019326000026/0000320193-26-000026-index.htm"}]}

items lists the 8-K item numbers (for example 2.02 for results of operations). count is the total number of matching filings.

GET/v1/industries/{sic}

All companies registered under one Standard Industrial Classification code, with figures from their latest annual report (latest basis).

Request
GET https://api.quotelinks.com/v1/industries/7372
Response (shortened)
{"sic":7372,"title":"SERVICES-PREPACKAGED SOFTWARE","division":"I","division_title":"Services","major_group":"73",
 "count":741,"companies":[{"cik":789019,"symbol":"MSFT","name":"MICROSOFT CORP","fiscal_year":2026,
   "fiscal_year_end":"2026-06-30","current":true,"currency":"USD","revenue":331839000000,"net_income":133749000000,
   "total_assets":758376000000}, … ]}

Figures are in the company's reporting currency and are not converted. current is true when the latest annual report covers a fiscal year that ended within about the last 18 months. Order: current filers reporting in USD by revenue, then current filers in other currencies (grouped by currency), then companies with older reports, then companies without revenue.

/v1/industries lists all 445 codes with title, division, major_group, the number of companies and the url of each list.

GET/v1/tickers

Response (shortened)
{"count":10474,"tickers":[{"symbol":"A","cik":1090872,"name":"AGILENT TECHNOLOGIES, INC.","exchange":"NYSE","primary":true},
 {"symbol":"AA","cik":1675149,"name":"Alcoa Corp","exchange":"NYSE","primary":true}, … ]}

GET/v1/status

Response
{"status":"ok","service":"Quotelinks SEC API","version":"v1",
 "source":"U.S. Securities and Exchange Commission (EDGAR): companyfacts, submissions, company tickers",
 "build":"20261107T032709","built":"2026-11-07T03:28:32+00:00",
 "sec_files":{"companyfacts":"Fri, 06 Nov 2026 05:08:32 GMT","submissions":"Fri, 06 Nov 2026 05:16:25 GMT", … },
 "counts":{"companies":21549,"tickers":10474,"companies_with_financials":17051,"industries":445}}

Financial fields

Every period has the same 39 keys. Money is in the reporting currency (currency), per-share values in currency per share, share counts in shares.

Income statement

FieldUnitMeaning
revenuemoneyTotal revenue / net sales
cost_of_revenuemoneyCost of revenue / cost of goods and services sold
gross_profitmoneyGross profit (revenue minus cost of revenue when not reported)
rndmoneyResearch and development expense
sgamoneySelling, general and administrative expense
operating_expensesmoneyTotal operating expenses, as reported
operating_incomemoneyOperating income (loss)
interest_expensemoneyInterest expense
pretax_incomemoneyIncome before income taxes
income_taxmoneyIncome tax expense (benefit)
net_incomemoneyNet income attributable to the company
net_income_commonmoneyNet income available to common stockholders
eps_basicper shareBasic earnings per share
eps_dilutedper shareDiluted earnings per share
shares_basicsharesWeighted average shares, basic
shares_dilutedsharesWeighted average shares, diluted
dpsper shareDividends declared per common share

Balance sheet (at period end)

FieldUnitMeaning
cashmoneyCash and cash equivalents
st_investmentsmoneyShort-term investments / current marketable securities
receivablesmoneyAccounts receivable, net
inventorymoneyInventory, net
current_assetsmoneyTotal current assets
ppe_netmoneyProperty, plant and equipment, net
goodwillmoneyGoodwill
intangiblesmoneyIntangible assets other than goodwill, net
total_assetsmoneyTotal assets
accounts_payablemoneyAccounts payable
current_liabilitiesmoneyTotal current liabilities
long_term_debtmoneyLong-term debt, non-current portion
total_liabilitiesmoneyTotal liabilities
equitymoneyStockholders' equity attributable to the company
shares_outstandingsharesCommon shares outstanding

Cash flow

FieldUnitMeaning
cfomoneyNet cash from operating activities
capexmoneyCapital expenditures (payments for property and equipment; positive = cash spent)
fcfmoneyFree cash flow = cfo − capex
dividends_paidmoneyDividends paid
buybacksmoneyRepurchases of common stock
sbcmoneyStock-based compensation
dnamoneyDepreciation, depletion and amortization

How the figures are built

  • From XBRL filings. Values come from the structured (XBRL) data companies file with their 10-K, 10-Q, 20-F and 40-F reports. For each field, a list of standard US GAAP and IFRS tags is tried in order; sources shows which tag was used for each value.
  • Fiscal years as the company reports them. fiscal_year and fiscal_period come from the filing in which the period was the current period, so retailers and other companies with non-calendar years are labelled the way they label themselves.
  • Latest vs. original. Companies restate prior periods (accounting changes, discontinued operations, stock splits). basis=latest uses the most recently filed figure; basis=original keeps the figure as first reported.
  • Stock splits. Splits are detected from restated share counts and EPS. With basis=latest, per-share values and share counts filed before a split are adjusted to today's share basis (flagged split_adjusted); the split ratios are listed in /company/{id}.
  • Derived values. 10-Ks don't report the fourth quarter separately, and 10-Qs report cash flow year-to-date, so Q4 is the full year minus the first nine months, and Q2/Q3 cash flows are calculated from year-to-date totals. gross_profit and fcf are calculated when not reported. These values are flagged derived.
  • Approximate values. Derived quarterly or TTM per-share figures (for example Q4 EPS = full-year EPS minus nine-month EPS) and TTM share counts (average of four quarters) are flagged approximate.
  • Missing values are null. Not every company reports every field – banks, for example, have no gross profit or inventory, and some companies use their own (non-standard) tags, which are not included.
  • Currency. Foreign companies that report under IFRS appear in their own reporting currency; check currency.

Data & updates

  • Source: SEC EDGAR bulk data – XBRL company facts, company submissions (filings) and the SEC's ticker files – downloaded directly from the U.S. Securities and Exchange Commission.
  • Coverage: about 21,500 SEC registrants with a ticker or XBRL financial data, including OTC companies; standardized financial statements for about 17,000 of them, from 2009 (when XBRL filing began) onward.
  • Schedule: rebuilt every night from the SEC's latest files; /v1/status shows the current build. A new 10-K or 10-Q appears the day after the SEC publishes its data.
  • Caching: responses are cached for up to 1 hour.
  • Not included: stock prices, analyst estimates or anything not filed with the SEC.

Errors & limits

Errors return JSON with the HTTP status and a message:

{"status":404,"message":"unknown ticker or CIK: ZZZZZ"}
StatusWhen
404Unknown ticker, CIK or SIC code; no standardized statements for that company; or an unknown path.
422Invalid parameter: period, basis (e.g. ttm with original), limit, offset, from, to or form.
405Method other than GET or HEAD.
429Too many requests. Wait (see Retry-After) and retry.
503Temporary server problem. Retry later.

Fair use: up to 2 requests per second per IP address, or 10 per second with a free API key (add api_token=YOUR_KEY). The data changes once a day, so please cache responses.

Code examples

JavaScript (browser or Node 18+)

const r = await fetch("https://api.quotelinks.com/v1/financials/MSFT");
const { periods } = await r.json();
for (const p of periods.slice(0, 5))
  console.log(p.fiscal_year, p.revenue, p.net_income, p.eps_diluted);

Python

import json, urllib.request

url = "https://api.quotelinks.com/v1/financials/NVDA?period=ttm"
with urllib.request.urlopen(url) as r:
    latest = json.load(r)["periods"][0]
print(latest["end"], latest["revenue"], latest["fcf"])

PHP

$f = json_decode(file_get_contents(
    "https://api.quotelinks.com/v1/filings/TSLA?form=8-K&limit=5"
), true);
foreach ($f["filings"] as $x) echo $x["filed"], " ", $x["url"], "\n";

Source & terms

The figures come from filings submitted to the U.S. Securities and Exchange Commission through EDGAR. The field mapping, derived values and split adjustments are calculated by Quotelinks and may differ from figures in the filings or from other data providers. Quotelinks is not affiliated with or endorsed by the SEC.

The API is provided for personal, non-commercial use. Redistribution of the data is not allowed. For commercial use, contact support@quotelinks.com. See the Terms of Service and the disclaimer. The figures are for information only and are not investment advice; check the original filing before relying on a number.

Frequently asked questions

Is the SEC Fundamentals API free?

Yes. No sign-up, no API key needed and no cost, for personal, non-commercial use. Fair use is up to 2 requests per second per IP address, or 10 per second with a free API key; please cache responses.

Can I use the data commercially or redistribute it?

No. The API is for personal, non-commercial use, and redistribution of the data is not allowed. For commercial use, contact support@quotelinks.com. See the Terms of Service.

Where does the data come from?

From filings submitted to the U.S. Securities and Exchange Commission: the SEC's XBRL company facts, company submissions and ticker files from EDGAR. Quotelinks maps the XBRL tags to 39 standard fields and calculates derived values such as Q4 and free cash flow.

How often is the data updated?

Every night, from the SEC's latest bulk files. A new 10-K or 10-Q usually appears the day after the SEC publishes its data. The /v1/status endpoint shows the current build.

Are EPS and share counts adjusted for stock splits?

Yes, with basis=latest (the default): per-share values and share counts reported before a split are converted to today's share basis and flagged split_adjusted. basis=original returns the figures exactly as first reported.

Why do some numbers differ from other financial websites?

The API uses the figures companies report under US GAAP or IFRS in their filings, not adjusted (non-GAAP) numbers or analyst estimates. Restatements, the choice of XBRL tag and fiscal-year labels can also differ between providers. The sources field shows the tag behind every value.

Can I look up a company by CIK instead of ticker?

Yes. Every endpoint that takes a ticker also accepts the SEC CIK number, with or without leading zeros, for example /v1/company/320193 or /v1/company/0000320193.

Does the API include stock prices?

No. It contains only data filed with the SEC: company information, financial statements and filings.

Which companies are covered?

About 21,500 SEC registrants that have a ticker or file XBRL financial data, including OTC companies, with standardized financial statements for about 17,000 of them. Foreign companies that report under IFRS appear in their own currency. Companies that do not file with the SEC are not included.