Personal, non-commercial use on every plan. Building this into a product, a service or a publication? Contact us about licensing.

Would you rather ask Claude, ChatGPT, Gemini or Grok (Microsoft 365 Copilot coming soon) than write code? See Connect your AI. Plans and the free trial are on the pricing page.

On this page: Quick start · Conventions · Endpoints · CSV and bulk files · MCP server · Agent sign-up · Limits and licensing. Machine-readable: OpenAPI 3.1, llms.txt.

Quick start

Create an API key on your account page (this needs the Premium plan or the free trial; see pricing) and send it as a bearer token. Companies are keyed by their SEC CIK, the number the SEC assigns to every filer; a ticker works as a lookup, and responses include both. Members of Congress are keyed by their Bioguide ID.

curl -H "Authorization: Bearer $KEY" \
  "https://13f.ai/api/v1/insider-trades?ticker=NVDA&open_market=true&limit=5"

curl -H "Authorization: Bearer $KEY" \
  "https://13f.ai/api/v1/congress-trades?bioguide_id=P000197&since=2026-01-01"

# what is new since you last looked (poll with the largest first_seen_at you have seen)
curl -H "Authorization: Bearer $KEY" \
  "https://13f.ai/api/v1/events?tickers=NVDA,MSFT&updated_since=2026-10-23T12:00:00Z&order=asc"

Conventions

Endpoints

All are GET under /api/v1. The tier label is the plan an endpoint belongs to. Every Premium or trial key can call all of them.

GET /api/v1/events pro

One feed of new rows across datasets

What is new, across datasets: congressional trades, open-market insider purchases and sales (Form 4 codes P and S), 13D/13G filings, 8-K items, lobbying filings, federal contract awards and patent grants matched to a company, changes of status of clinical trials sponsored by public companies (clinical_trials), and FDA first approvals of brand-name drugs, 510(k) clearances and PMA approvals for them (fda_approvals), Form 144 notices of planned insider sales (a notice is a plan, not a sale) and SEC enforcement releases that name a company (confident name matches only; a release is the SEC's allegation or order, not a finding). Each event has a one-line summary, a link to the source and the time we first stored it. Poll with updated_since = the largest first_seen_at you have seen (order=asc walks forward), filter with tickers / ciks / bioguide_ids. Only rows whose own filing or posting date is recent relative to updated_since appear (a few days to two months depending on the dataset), so long-ago backfills do not flood the feed. Use the dataset endpoints for complete history. Short interest and 13F positions are not in the feed.

ParameterTypeDescription
updated_sincedatetimeRows first stored after this time. Default: the last 7 days; at most 90 days back.
tickerslist of tickerOnly events about these companies (comma-separated tickers).
cikslist of integer (CIK)Only events about these companies (comma-separated CIKs).
bioguide_idslist of bioguideOnly congressional trades by these members. With tickers / ciks too, events matching either are returned.
datasetslist of congress_trades | insider_trades | beneficial_ownership | filings | lobbying | government_contracts | patents | clinical_trials | fda_approvals | form_144 | sec_enforcementRestrict to datasets: congress_trades, insider_trades, beneficial_ownership, filings, lobbying, government_contracts, patents, clinical_trials, fda_approvals, form_144, sec_enforcement. Default: all.
orderdesc | ascdesc = newest first (default); asc = oldest first, to walk forward from updated_since. Default: desc.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (11)
FieldTypeDescription
datasetstringcongress_trades, insider_trades, beneficial_ownership, filings, lobbying, government_contracts, patents, clinical_trials, fda_approvals, form_144 or sec_enforcement
event_typestringKind of event within the dataset, e.g. trade, open_market_purchase, 13d, 8k_item_2.02
idstringStable event id (dataset plus the row's key)
tickerstring or nullCompany ticker, when the event is about a company
cikinteger or nullCompany CIK, when the event is about a company
bioguide_idstring or nullMember of Congress, for congressional trades
entity_namestring or nullCompany or member name
summarystringOne-line text summary
urlstringSource document
event_datedateDate of the event (trade date, filing date, grant date, ...)
first_seen_atdatetimeWhen we first stored the row; the poll key

GET /api/v1/congress-trades free

Stock trades reported by members of Congress

Periodic transaction reports filed under the STOCK Act (House and Senate), one row per transaction line, newest transaction first. Each row carries the member (from the politician link), the traded company (cik, security_ticker, link_method say how the asset was matched to a listed security; cik is null for assets that are not listed securities) and the amount bracket as amount_min / amount_max (amount_max is null for open-ended brackets such as 'Over $50,000,000'). Provenance: doc_id plus source_url, the filing itself (the official House Clerk or Senate eFD report), and source, where we read it. Senate rows (chamber = senate) come from an independent public mirror of the Senate's electronic reports (source = kadoa_mirror), because the Senate's site blocks automated access: reports filed since 2014, no paper filings, row_ordinal is the line number in the eFD report (a small share of numbered lines are missing from the mirror), is_amendment is always false and a later amendment can repeat earlier lines. committee_overlap lists the committees (and subcommittees) the member sits on whose jurisdiction covers the traded company's industry (committee, industry); null when none. Committee overlap describes jurisdiction only; it does not show that a trade was improper. It is based on committee assignments in the 119th Congress and checks trades dated since 2025-01-03 in listed companies. Event date for since / until: transaction_date.

ParameterTypeDescription
tickertickerTicker symbol, a lookup for the company's CIK (the stable key). Class shares: BRK-B and BRK.B both work.
cikinteger (CIK)SEC Central Index Key of the company (the stable company key).
bioguide_idbioguideThe member who filed the report (Bioguide id).
chamberhouse | senateChamber of the filing.
transaction_typelist of purchase | sale | sale_partial | exchangeTransaction type; a comma-separated list is allowed.
asset_typecryptocrypto = only trades in cryptocurrency itself (House asset type CT, Senate label 'Cryptocurrency'). Trades in crypto stocks and ETFs are listed securities: query them by ticker.
sincedateOnly trades on or after this transaction date (YYYY-MM-DD).
untildateOnly trades on or before this transaction date (YYYY-MM-DD).
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
committee_overlap_onlybooleantrue = only trades in a company whose industry is under the jurisdiction of a committee or subcommittee the member sits on (direct jurisdictions only; trades since 2025-01-03, the 119th Congress). Jurisdiction only; it does not show that a trade was improper. Default: false.
include_deletedbooleanInclude rows a later amendment deleted (filing_status = deleted). Default: false.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (32)
FieldTypeDescription
chamberstringhouse or senate
doc_idstringDocument id: House Clerk DocID or Senate eFD report uuid. With chamber and row_ordinal it identifies the row.
row_ordinalintegerPosition of the transaction line in the document (the # column of the Senate eFD report)
bioguide_idstring or nullMember's Bioguide id; null when the filer could not be matched to a member
member_namestring or nullMember's official name, else the filer name as printed
partystring or nullParty of the member
statestring or nullState of the member
districtinteger or nullHouse district (0 at-large); null for senators
ownerstringself, spouse, joint or dependent_child
asset_descriptionstringThe asset as described in the filing
tickerstring or nullTicker as printed in the filing
asset_type_codestring or nullAsset type code (House) or label (Senate) from the filing
asset_typestring or nulloption when the asset text or the comment says call, put or option (an option trade is filed as a stock-type asset; transaction_type is still purchase or sale), else asset_type_code
cikinteger or nullSEC CIK of the traded company, when the asset is a listed security we could match
security_tickerstring or nullTicker of the matched security
link_methodstring or nullHow the asset was linked: ticker_exact, ticker_from_description, ticker_history, name_match, manual, fund (an ETF or ETN, no company), not_listed, unmatched; null if not processed yet
link_scorenumber or nullMatch confidence 0-100 where applicable
transaction_typestringpurchase, sale, sale_partial or exchange
transaction_datedateDate of the transaction
notification_datedate or nullDate the member was notified (House only)
filing_datedateDate the report was filed
amount_textstringAmount bracket as printed
amount_minnumberLower bound of the amount bracket in USD
amount_maxnumber or nullUpper bound of the amount bracket in USD; null for open-ended brackets
cap_gains_over_200boolean or nullHouse checkbox: capital gains over $200
notestring or nullDescription or comment from the filing
filing_statusstring or nullnew, amended or deleted
committee_overlaparray or nullCommittees the member sits on whose jurisdiction covers the company's industry: [{code, committee, industry, confidence, sic}] (direct jurisdictions only); null when none. Committee overlap describes jurisdiction only; it does not show that a trade was improper.
is_amendmentbooleanThe report is an amendment (not marked for Senate rows)
source_urlstringThe official filing: a PDF at the House Clerk or a report page at the Senate eFD
sourcestringWhere we read the report: house_clerk, senate_efd (the eFD page itself) or kadoa_mirror (an independent public copy of the eFD reports)
first_seen_atdatetimeWhen we first stored the row; use with updated_since to poll for new rows

GET /api/v1/exec-trades free

Stock trades reported by the President and executive-branch officials (OGE Form 278-T)

Periodic transaction reports (OGE Form 278-T) of the President, Cabinet members, other Senate-confirmed officials and White House staff, one row per transaction line, newest transaction first. Form 278-T is the periodic transaction report that senior executive-branch officials file with the Office of Government Ethics. They must report each trade over $1,000 within 30 days of being notified of it, and no later than 45 days after the trade. Amounts are ranges, not exact figures. official is the filer's name as printed ("Wright, Christopher A"), with position, agency and filer_type. The form has no ticker column: asset_description is the asset as the filer wrote it, ticker is set only when the filer printed one, and cik / security_ticker / link_method say whether we matched the asset to a listed company (cik is null for bonds, funds, private holdings and anything we could not match). The amount is the form's bracket as amount_text with amount_min / amount_max in USD (amount_max is null for an open-ended bracket). When the form leaves the amount blank, amount_text and both bounds are null and endnote holds the filer's note, usually that the amount was not more than $1,000. transaction_type is purchase, sale, sale_partial or exchange, or unknown when the filer left the type blank. Spouse and dependent-child trades are reported without saying which. Reports of the President are scans read by a model: read_from_scan_by_model is true for those rows and they can contain errors. Provenance: source_url is the official report (a PDF on OGE's site or the White House's), cite is the same link in one sentence; filing_date is the date the filer signed (for a scan, the date in the White House title). Under 5 U.S.C. 13107(c) the reports may not be used for a commercial purpose other than by news and communications media: this data is free for every signed-in account and carries no advertising. Event date for since / until: transaction_date.

ParameterTypeDescription
tickertickerTicker of a company the asset was matched to (resolved to its CIK), or the ticker the filer printed.
cikinteger (CIK)CIK of the company the asset was matched to.
officialstringWords in the official's name as filed (case-insensitive), e.g. 'wright'.
bioguide_idbioguideAn official who was also a member of Congress (Bioguide id): their executive-branch trades.
filer_typelist of president | vice_president | cabinet | other_pas | white_house_staffKind of filer: president, vice_president, cabinet, other_pas (any other Senate-confirmed official) or white_house_staff. Derived from the position text, so approximate.
transaction_typelist of purchase | sale | sale_partial | exchange | unknownTransaction type; a comma-separated list is allowed. unknown = the filer left the type blank on the form.
sincedateOnly trades on or after this transaction date (YYYY-MM-DD).
untildateOnly trades on or before this transaction date (YYYY-MM-DD).
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (26)
FieldTypeDescription
sourcestringoge (Office of Government Ethics) or whitehouse
doc_idstringThe report's id. With source and row_ordinal it identifies the row.
row_ordinalintegerThe line's own number on the form
officialstringThe filer's name as printed, "Last, First M"
positionstring or nullThe position under the name on the report
agencystring or nullThe agency, from OGE's list; null for White House reports
filer_typestringpresident, vice_president, cabinet, other_pas or white_house_staff (approximate: derived from the position text)
bioguide_idstring or nullBioguide id when the official is also in our list of members of Congress by a unique name match; null for most
asset_descriptionstringThe asset as the filer printed it; for a scan often cut off by its cell
tickerstring or nullTicker, only when the filer printed one in the description
cikinteger or nullSEC CIK of the company the asset was matched to
security_tickerstring or nullTicker of the matched security
link_methodstring or nullHow the asset was linked: ticker_exact, ticker_from_description, ticker_history, name_match, manual, fund (an ETF or ETN, no company), not_listed, unmatched; null if not processed yet
link_scorenumber or nullMatch confidence 0-100 where applicable
transaction_typestringpurchase, sale, sale_partial, exchange or unknown (the filer left the type blank)
transaction_datedateDate of the transaction
notification_over_30_daysbooleanThe form's "notification received over 30 days ago"
amount_textstring or nullAmount bracket as printed; null when the form leaves it blank
amount_minnumber or nullLower bound of the bracket in USD
amount_maxnumber or nullUpper bound in USD; null for an open-ended bracket or a blank amount
endnotestring or nullThe filer's endnote for this line, when there is one; it usually explains a blank amount
filing_datedate or nullThe date the filer signed the report
source_urlstringThe official report (PDF)
read_from_scan_by_modelbooleanThe report is a scan read by a model; it can contain errors
citestringThe label of the report and its link in one sentence
first_seen_atdatetimeWhen we first stored the row; use with updated_since to poll for new rows

GET /api/v1/insider-trades free

Insider transactions from SEC Forms 3, 4 and 5

One row per transaction line of Forms 4 and 5 (and Form 3 lines that carry a transaction), newest transaction first. Holdings-only lines are not included. Keyed by the issuer's CIK; ticker is a lookup. An amendment (Form 4/A) repeats lines of the filing it amends: is_amendment and amends_accession_no let you drop the superseded rows. Because the table is large, a request needs ticker, cik or owner_cik, or txn_code / open_market together with since. Provenance: accession_no and filing_url (the SEC filing index). Event date for since / until: transaction_date.

ParameterTypeDescription
tickertickerIssuer ticker (the company whose shares were traded). Resolved to the issuer CIK.
cikinteger (CIK)Issuer CIK (the company whose shares were traded).
owner_cikinteger (CIK)CIK of the reporting insider (the first reporting owner of the filing).
txn_codelist of stringSEC transaction code(s), comma-separated: P purchase, S sale, A grant, M option exercise, F tax withholding, G gift, ...
open_marketbooleantrue = only open-market purchases and sales (codes P and S).
sincedateOnly transactions on or after this date (YYYY-MM-DD).
untildateOnly transactions on or before this date (YYYY-MM-DD).
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (29)
FieldTypeDescription
accession_nostringSEC accession number of the filing
table_typestringnonderiv_trans (common stock) or deriv_trans (options and other derivatives)
line_nointegerLine within that table of the filing
form_typestring3, 3/A, 4, 4/A, 5 or 5/A
is_amendmentbooleanThe filing is an amendment
amends_accession_nostring or nullThe filing this amends, when it can be identified
filed_datedateDate filed with the SEC
period_of_reportdate or nullPeriod of report on the form
cikintegerIssuer CIK
tickerstring or nullIssuer trading symbol as printed on the form
issuer_namestring or nullIssuer name
owner_cikinteger or nullFirst reporting owner's CIK
owner_namestring or nullFirst reporting owner's name
is_directorboolean or nullOwner is a director
is_officerboolean or nullOwner is an officer
is_ten_pct_ownerboolean or nullOwner holds more than 10 percent
officer_titlestring or nullOfficer title
security_titlestring or nullTitle of the security
transaction_datedateTransaction date
transaction_codestringSEC transaction code (P purchase, S sale, A grant, M exercise, F tax, G gift ...)
acquired_disposedstring or nullA (acquired) or D (disposed)
sharesnumber or nullShares or units transacted
pricenumber or nullPrice per share in USD
total_valuenumber or nullshares x price in USD
shares_owned_afternumber or nullShares owned after the transaction
ownership_formstring or nullD direct, I indirect, or D/I when the filing reports the same transaction once as direct and once as indirect (joint reporting owners); the duplicate line is left out
is_10b5_1boolean or nullTrade made under a Rule 10b5-1 plan (forms filed since 2023-04)
filing_urlstringSEC filing index page
first_seen_atdatetimeWhen we first stored the row

GET /api/v1/planned-insider-sales pro

Planned insider sales: SEC Form 144 notices, and the Form 4 that reported a sale afterwards

One row per block of a Form 144, the notice an insider or other affiliate files with the SEC before selling restricted or control shares, newest filing first (electronic notices since April 2023). A notice is a plan, not a sale: the sale may be smaller, later or never happen, and the number of shares is what the filer expects to sell. It is information, not investment advice. shares_to_sell and aggregate_market_value are as the filer typed them (the value at a price the filer states in its own words, not a trade price); approx_sale_date is the date the filer gives for the sale. has_10b5_1_plan is true when the notice gives a Rule 10b5-1 trading plan adoption date (plan_adoption_date is the latest of them). sales_3m_shares and sales_3m_proceeds are the sales by the same person in the three months before the notice, as reported on it. The form4_* fields and days_to_form4 / days_to_sale link the notice to the first Form 4 in this dataset that reports an open-market sale (code S) of the same company by the same person within 90 days: the same filer CIK as a reporting owner of the Form 4 (form4_matched_by 'cik'), or failing that the same name ('name', which can join two people with one name). They are null when no such Form 4 is on file: the person has not sold yet or at all, is not required to file Form 4 (an ordinary affiliate who is not an officer, director or 10 percent holder does not), or the Form 4 is outside the range of the insider-trades data. A 144/A amends an earlier notice (amends_accession_no) and is a row of its own. Provenance: filing_url (the notice) and form4_url (the Form 4). Event date for since / until: filed_date.

ParameterTypeDescription
tickertickerTicker of the company whose shares would be sold (resolved to its CIK).
cikinteger (CIK)CIK of the company whose shares would be sold.
filer_cikinteger (CIK)CIK of the filer of the notice (usually the insider; the same number as owner_cik on a Form 4).
planbooleantrue: only notices that give a Rule 10b5-1 trading plan adoption date. false: only notices that give none.
followedbooleantrue: only notices followed by a Form 4 that reports a sale by the same person within 90 days. false: only notices with no such Form 4 (yet, or at all). Needs since or a company.
min_valueintegerOnly notices whose aggregate_market_value (as the filer typed it, USD) is at least this much.
sincedateOnly notices filed on or after this date (YYYY-MM-DD): filed_date.
untildateOnly notices filed on or before this date (YYYY-MM-DD): filed_date.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (36)
FieldTypeDescription
accession_nostringSEC accession number of the Form 144
line_nointegerBlock of the notice (1 for almost every notice; one per class of securities or broker when it lists several)
form_typestring144 or 144/A
is_amendmentbooleanThe filing is an amendment (144/A)
amends_accession_nostring or nullThe notice a 144/A amends, when it names one
filed_datedateDate filed with the SEC
notice_datedate or nullThe date the signer put on the notice (it can differ from the filing date)
cikintegerCIK of the company whose shares would be sold
tickerstring or nullThe company's ticker, from the SEC securities list (null when the company has none on file)
issuer_namestring or nullCompany name
filer_cikinteger or nullCIK of the EDGAR filer of the notice (usually the insider; can be a filing agent or a fund)
person_namestring or nullName of the person for whose account the shares would be sold, as typed
relationshipsarrayThe person's relationship to the company as ticked on the form (Officer, Director, 10% Stockholder, ...)
securities_classstring or nullClass of securities, e.g. Common Stock
exchangestring or nullExchange the shares trade on, as typed; null when not on an exchange
broker_namestring or nullBroker through which the sale would be made
shares_to_sellnumber or nullShares or units the filer proposes to sell
aggregate_market_valuenumber or nullAggregate market value of those shares (USD), as the filer typed it
shares_outstandingnumber or nullShares of the class outstanding, as typed
approx_sale_datedate or nullApproximate date of sale given on the notice
has_10b5_1_planbooleanThe notice gives a Rule 10b5-1 trading plan adoption date
plan_adoption_datedate or nullThe latest Rule 10b5-1 plan adoption date on the notice
nothing_sold_3mboolean or nullThe notice says nothing was sold in the past three months
sales_3m_sharesnumber or nullShares sold in the past three months, as reported on the notice
sales_3m_proceedsnumber or nullGross proceeds (USD) of those sales, as reported on the notice
form4_accession_nostring or nullAccession number of the first Form 4 that reports an open-market sale by the same person within 90 days; null when none is on file
form4_filed_datedate or nullDate that Form 4 was filed
form4_first_sale_datedate or nullDate of the first sale it reports on or after the notice
form4_shares_soldnumber or nullShares sold in the sale lines of that Form 4 from the notice date on
form4_proceedsnumber or nullValue (USD) of those sale lines
days_to_form4integer or nullDays from the notice to the filing of that Form 4
days_to_saleinteger or nullDays from the notice to the first sale it reports
form4_matched_bystring or nullcik (same filer CIK) or name (same person name)
form4_urlstring or nullSEC filing index page of that Form 4
filing_urlstringSEC filing index page of the Form 144
first_seen_atdatetimeWhen we first stored the row

GET /api/v1/institutional-holdings pro

13F positions of institutional managers

Positions from Form 13F-HR filings, one row per manager, security and quarter, largest value first. Use ticker or cik for 'who holds this company', manager_cik for 'what does this manager hold'. Only effective, fully parsed filings are listed (an amendment that restates a report replaces the original). value_usd is in dollars: a filer that reports in thousands of dollars where whole dollars are called for (or the reverse) has its values put in dollars, line by line, and value_as_filed keeps the figure as written. Shares are as reported (share_type = principal means principal amount for bonds). Provenance: accession_no and filing_url. The event date is the report period.

ParameterTypeDescription
tickertickerCompany ticker: positions managers hold in this company (resolved to its CUSIPs).
cikinteger (CIK)Company CIK: positions managers hold in this company.
manager_cikinteger (CIK)CIK of an institutional manager: that manager's positions.
perioddateReport period (quarter end, YYYY-MM-DD). Default: the latest quarter whose filings are mostly in (at least half the previous quarter's number of positions).
include_optionsbooleanInclude put and call positions (default: plain shares / principal only). Default: false.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (19)
FieldTypeDescription
perioddateReport period (quarter end)
manager_cikintegerManager's CIK
manager_namestring or nullManager name
cusipstringCUSIP of the security
issuer_namestring or nullIssuer name from the SEC 13(f) list
title_of_classstring or nullTitle of class
cikinteger or nullCIK of the issuer when the CUSIP maps to a company we track
tickerstring or nullTicker of that company
value_usdnumberMarket value in USD (a value reported in thousands is shown in dollars)
value_as_filednumberMarket value exactly as the filer wrote it (thousands or dollars, depending on the filer)
sharesnumberShares (or principal amount when share_type = principal)
put_callstring or nullput or call for option positions; null for the security itself
share_typestringshares or principal
formstring13F-HR or 13F-HR/A
is_amendmentbooleanThe filing is an amendment
filed_datedateDate the filing was made
accession_nostringSEC accession number
filing_urlstringSEC filing index page
first_seen_atdatetimeWhen we first stored the filing

GET /api/v1/institutional-holdings/compare pro

Compare a 13F manager's positions in two quarters

One row per position of the manager, comparing two of the quarters we hold: each position is new, added, trimmed, exited or unchanged, with the change in shares and in reported value (value_change_usd, sorted largest first by default). Give manager_cik; period and prior_period default to the newest quarter and the one before it, and either can be any quarter we hold (about six). A position the manager no longer holds is an 'exited' row with shares = 0. Shares of the earlier quarter are adjusted for stock splits between the two dates; a reverse split or other corporate action that gives the stock a new CUSIP can show as one position exited and another new. A change in shares is not always a decision: index tracking, mergers and share-class changes move positions too, and value_change_usd includes price moves. A comparison needs both reports to list the manager's full table; a report we cannot rely on is refused with a message instead. position_type=options lists the put and call lines separately (their value is the notional amount of the shares they cover). 13F reports are filed up to 45 days after the quarter ends and list long US-listed positions only (no short sales or cash). This is information from public filings, not investment advice.

ParameterTypeDescription
manager_cik (required)integer (CIK)CIK of the institutional manager whose two quarters are compared.
perioddateThe later quarter (quarter end, YYYY-MM-DD). Default: the newest quarter we hold for the manager. Must be one we hold.
prior_perioddateThe earlier quarter to compare with (quarter end). Default: the quarter before `period` that we hold. Any stored quarter works, not only the one right before.
position_typeshares | optionsshares: the common-share lines. options: the put and call lines (their value is the notional amount of the shares they cover). Default: shares.
put_callput | callWith position_type=options: only puts or only calls.
changenew | added | trimmed | exited | unchangedOnly positions that are new, added to, trimmed, exited or unchanged between the two quarters.
qstringOnly positions whose issuer name or ticker contains this text (2 characters or more), or whose CUSIP equals it.
sortvalue | weight | shares | change | value_change | namevalue_change: change in reported value. shares: shares in the later quarter. value, weight, change (percent change in shares) and name also work. Default: value_change.
orderdesc | ascSort direction. Default: desc.
limitintegerRows per page, 1 to 500 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters. It pages by row count, so a page can repeat or skip a row only if the filing data changes between calls.
Response fields (21)
FieldTypeDescription
perioddateThe later quarter (quarter end)
prior_perioddateThe earlier quarter (quarter end)
manager_cikintegerManager's CIK
manager_namestringManager name
cusipstringCUSIP of the security
issuer_namestring or nullIssuer name from the SEC 13(f) list
title_of_classstring or nullTitle of class
cikinteger or nullCIK of the issuer when the CUSIP maps to a company we track
tickerstring or nullTicker of that company
put_callstring or nullput or call for option lines; null for shares
changestringnew, added, trimmed, exited or unchanged
sharesnumberShares in the later quarter (0 for an exited position)
prior_sharesnumberShares in the earlier quarter, adjusted for stock splits in between (0 for a new position)
shares_changenumbershares minus prior_shares
shares_change_pctnumber or nullChange in shares as a percent of prior_shares; null for new and exited positions
value_usdnumberReported value in the later quarter, in USD (the notional amount for option lines; 0 for an exited position)
prior_value_usdnumberReported value in the earlier quarter, in USD (0 for a new position)
value_change_usdnumbervalue_usd minus prior_value_usd; includes price moves, not only buying and selling
portfolio_weight_pctnumber or nullThe position's share of the manager's reported total in the later quarter, in percent
source_urlstring or nullSEC filing index page of the manager's 13F for the later quarter
prior_source_urlstring or nullSEC filing index page of the 13F for the earlier quarter, when the position was held then

GET /api/v1/beneficial-ownership pro

Schedule 13D and 13G stakes of 5 percent or more

Beneficial-ownership reports (Schedules 13D and 13G and their amendments), newest filing first, one row per reporting person. cik is the issuer whose shares are owned; person_cik is the investor, when it has a CIK. Provenance: accession_no and filing_url. Event date for since / until: filed_date (event_date is the date of the triggering event, when reported).

ParameterTypeDescription
tickertickerTicker of the company whose shares are owned (the subject / issuer).
cikinteger (CIK)CIK of the company whose shares are owned (the subject / issuer).
person_cikinteger (CIK)CIK of the reporting person (the investor).
schedule13D | 13GSchedule 13D (activist / control intent) or 13G (passive).
sincedateOnly filings on or after this date (YYYY-MM-DD).
untildateOnly filings on or before this date (YYYY-MM-DD).
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (26)
FieldTypeDescription
accession_nostringSEC accession number
person_nointegerPosition of the reporting person in the filing
form_typestringSCHEDULE 13D, 13D/A, 13G or 13G/A
schedulestring13D or 13G
is_amendmentbooleanThe filing is an amendment
amendment_nointeger or nullAmendment number on the cover page
amends_accession_nostring or nullThe filing being amended, when named
filed_datedateDate filed
event_datedate or nullDate of the event that required the filing
cikinteger or nullIssuer CIK (the company whose shares are owned)
tickerstring or nullIssuer ticker
subject_namestring or nullIssuer name as filed
cusipstring or nullIssuer CUSIP
class_titlestring or nullTitle of the class of securities
person_cikinteger or nullReporting person's CIK
person_namestring or nullReporting person's name
member_of_groupstring or nullGroup membership box (a / b)
citizenshipstring or nullCitizenship or place of organization code
aggregate_sharesnumber or nullAggregate shares beneficially owned
percent_of_classnumber or nullPercent of the class
sole_votingnumber or nullSole voting power (shares)
shared_votingnumber or nullShared voting power (shares)
sole_dispositivenumber or nullSole dispositive power (shares)
shared_dispositivenumber or nullShared dispositive power (shares)
filing_urlstringSEC filing index page
first_seen_atdatetimeWhen we first stored the row

GET /api/v1/filings free

Form 8-K current reports, one row per reported item

8-K and 8-K/A filings, newest first, one row per item the filing reports (earnings, officer changes, agreements, ...). item_title is the SEC's title for the item. Keyed by the registrant's CIK. Provenance: accession_no and filing_url. Event date for since / until: filed_date.

ParameterTypeDescription
tickertickerTicker of the filing company (resolved to its CIK).
cikinteger (CIK)CIK of the filing company.
item_codelist of string8-K item number(s), comma-separated: 2.02 results, 5.02 officer changes, 1.01 material agreements, 8.01 other events ...
sincedateOnly filings on or after this date (YYYY-MM-DD).
untildateOnly filings on or before this date (YYYY-MM-DD).
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (13)
FieldTypeDescription
accession_nostringSEC accession number
item_codestring8-K item number, e.g. 2.02; 'none' when the filing reports no item
item_titlestring or nullSEC title of the item
form_typestring8-K or 8-K/A
is_amendmentbooleanThe filing is an amendment
filed_datedateDate filed
accepted_atdatetime or nullEDGAR acceptance time
period_of_reportdate or nullDate of the earliest event reported
cikintegerRegistrant CIK
tickerstring or nullRegistrant's primary active ticker
company_namestring or nullRegistrant name
filing_urlstringSEC filing index page
first_seen_atdatetimeWhen we first stored the row

GET /api/v1/ipos pro

IPO pipeline: S-1 and F-1 registrations, their pricing (424B4) and withdrawal (RW)

One row per Securities Act registration (file number 333-...), newest activity first, built from every S-1, S-1/A, F-1, F-1/A, 424B4 and RW on EDGAR since 2015. status runs filed, amended, priced (a 424B4) or withdrawn (an RW). is_ipo says whether the prospectus is an initial public offering; resale registrations and follow-ons by listed companies are included with is_ipo false, and blank-check companies (SPACs) carry is_spac. proposed_ticker and proposed_exchange are what the prospectus says it will list under (null when unclear); offering_amount_usd is the maximum aggregate offering price the company registered in the filing-fee table of the S-1 / F-1, used to compute the SEC fee: a ceiling, often a round placeholder such as $100 million or $1 billion, not the amount raised, and machine-readable only for filings since mid-2025 (null otherwise); price_per_share and shares_offered come from the 424B4 cover when it states them cleanly, and amount_raised_usd is price times shares from one 424B4 once the registration is priced (the base deal, without any over-allotment option; null before pricing or when the cover does not state one price and one count). ticker is the company's ticker once priced and listed. raised_before_ipo_usd adds up the amounts sold on the company's Form D private placements filed before the first S-1 / F-1 (as the company reported them, unaudited; matched by CIK, so a company that reorganised before filing is missed; not the IPO proceeds and not total funding). filings lists every filing of the registration with its SEC page. summary is a short AI-written summary of the latest S-1 / F-1 amendment, with the filing it was read from (summary.read_from.url). Provenance: filings[].url, latest_filing_url, registration_url, summary.read_from.url. Event date for since / until: last_activity_date.

ParameterTypeDescription
tickertickerTicker: the company's ticker (resolved to its CIK) or the ticker a registration proposes to list under (a pre-IPO company has no ticker on file yet).
cikinteger (CIK)CIK of the registrant.
statuslist of filed | amended | priced | withdrawnWhere the registration stands: filed (an S-1 / F-1 only), amended (an S-1/A or F-1/A exists), priced (a 424B4 was filed) or withdrawn (an RW was filed).
spacbooleantrue: only blank-check companies (SIC 6770, or a cover page that says blank check); false: everything else.
ipobooleantrue: only registrations whose prospectus says they are an initial public offering (or that have no public market before it). false: everything else (resale registrations and follow-ons by listed companies, withdrawals of other forms, unclassified).
sincedateOnly registrations with a filing on or after this date (YYYY-MM-DD): last_activity_date.
untildateOnly registrations with their latest filing on or before this date (YYYY-MM-DD): last_activity_date.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (33)
FieldTypeDescription
registration_nostringSecurities Act file number, e.g. 333-299117: shared by the S-1, its amendments, the 424B4 and the RW
cikintegerCIK of the first filer (the registrant)
company_namestring or nullRegistrant name
tickerstring or nullTicker the company trades under once priced (from the SEC securities list); null before pricing or until the SEC lists it
statusstringfiled, amended, priced or withdrawn
is_ipoboolean or nullThe prospectus says it is an initial public offering; false for resales and follow-ons by listed companies
ipo_reasonstring or nullWhy is_ipo is what it is, in words
is_spacbooleanBlank-check company: SIC 6770, or the cover page says blank check
registration_formstring or nullThe first registration statement's form: S-1 or F-1; null when only a 424B4 or RW is on file (a shelf takedown)
has_registration_statementbooleanAn S-1 or F-1 of this registration is in the dataset
sicinteger or nullEDGAR assigned SIC code
state_of_incorporationstring or nullEDGAR state or country code of incorporation
state_locationstring or nullEDGAR state or country code of the business address
first_filed_datedateDate of the registration's first filing
last_activity_datedateDate of the registration's latest filing
priced_datedate or nullDate of the latest 424B4
withdrawn_datedate or nullDate of the latest RW
filings_countintegerNumber of filings of the registration
amendments_countintegerNumber of S-1/A and F-1/A filings
proposed_tickerstring or nullTicker the prospectus proposes to list under; never a symbol that already trades
proposed_exchangestring or nullExchange the prospectus proposes to list on
offering_amount_usdnumber or nullMaximum registered (USD): the maximum aggregate offering price in the XBRL filing-fee exhibit of the latest filing that has one. A fee ceiling, often a round placeholder, not the amount raised; null for filings before mid-2025
price_per_sharenumber or nullOffering price per share on the 424B4 cover, when it states one
shares_offerednumber or nullShares (or units) in the base offering on the 424B4 cover, when it states one count; the over-allotment option is not included
amount_raised_usdnumber or nullAmount raised (USD): price per share times shares offered on the final prospectus (424B4), taken from one filing; the base deal before underwriting discounts and without any over-allotment option. null until the registration is priced, or when the cover does not state one price and one count
raised_before_ipo_usdnumber or nullRaised before the IPO (USD): the amount sold so far on the company's Form D private placements filed before this registration's first filing, each offering counted once at its latest filing before then. As the issuer reported it (unaudited). Found by CIK, so a company that filed under a new parent is missed; null when no Form D with an amount is on file
private_placements_before_ipointegerNumber of separate private offerings (Form D file numbers) the company filed before this registration's first filing; 0 when none is on file (a company with no Form D may have raised money under other exemptions)
last_private_placement_datedate or nullFiling date of the latest Form D before the registration
registration_urlstringEDGAR list of every filing under this file number
latest_filing_urlstringSEC filing index page of the latest filing
filingsarrayEvery filing of the registration, oldest first: { accession_no, form_type, filed_date, url }
summaryobject or nullAI summary of the prospectus, written from the latest S-1 / F-1 amendment: { bullets: 4 to 6 plain sentences (what the company does, headline financials, use of proceeds, who controls it, specific risks), underwriters: lead bookrunners named in the filing, read_from: { accession_no, form_type, filed_date, url } (the filing it was read from), ai_generated, fixed_line (true for a blank-check company: one fixed sentence, no model), model }. Information, not investment advice; null until written (blank-check companies get a fixed line)
updated_atdatetimeWhen we last stored a filing of the registration

GET /api/v1/deals pro

Mergers, tender offers and going-private transactions, grouped from SEC filings

One row per transaction, newest filing first, grouped from the SEC filings that announce and carry out a deal: tender offers (SC TO-T, SC TO-I, SC 14D9), going-private (SC 13E3), deal registrations (S-4, F-4), merger proxies (PREM14A, DEFM14A, PREM14C, DEFM14C) and deal communications (425), since 2015. Grouping is by rule, not by reading the documents: filings with the same 005- (tender offer) or 333- (registration) file number go together; failing that, filings that name the same two companies within 270 days; failing that, filings of one company when only one deal of it is open. A filing that fits two open deals is left on its own and counted in ambiguous_filings. 'grouping' says the strongest link used: file_number, party_pair, company or single (one filing). What the data is not: no offer price, premium or terms (the filing headers do not carry them and the text is not read); no outcome (the filings do not say whether a deal closed, was amended away or was dropped); stage is only the furthest form seen, and last_filed_date is the latest filing, not a completion date. subject is the company named as subject most often, not a verified target (a 425 can be filed by either side), and S-4 / F-4 name only the registrant, so a deal known only from them has no named target. S-4 and F-4 also cover debt exchanges and employee plans. Information, not advice. filings lists every filing of the deal with its SEC page. Provenance: filings[].url, latest_filing_url. Event date for since / until: last_filed_date.

ParameterTypeDescription
tickertickerTicker: deals in which this company is named in any filing of the group, as the subject company, the filer or a co-registrant.
cikinteger (CIK)CIK of a company named in any filing of the deal (the subject company, the filer or a co-registrant).
typelist of tender_offer | going_private | issuer_tender | merger | registrationWhat kind of filings the group holds: tender_offer (SC TO-T, a bid for another company's shares), going_private (SC 13E3), issuer_tender (SC TO-I, a company buying back its own shares), merger (a merger proxy or an S-4 with a 425 or a tender offer) or registration (S-4 / F-4 filings alone, which also cover debt exchanges and employee plans).
stagelist of announced | registered | tender_offer | going_private | preliminary_proxy | final_proxyThe furthest form seen, not the state of the deal: announced (425 or SC TO-C only), registered (S-4 / F-4), tender_offer, going_private, preliminary_proxy (PREM14A / PREM14C) or final_proxy (DEFM14A / DEFM14C).
sincedateOnly deals with a filing on or after this date (YYYY-MM-DD): last_filed_date.
untildateOnly deals whose latest filing is on or before this date (YYYY-MM-DD): last_filed_date.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (19)
FieldTypeDescription
deal_idstringAccession number of the deal's first filing: the stable key of the group. It can change if an earlier filing of the same deal arrives late
deal_typestringtender_offer, going_private, issuer_tender, merger or registration (S-4 / F-4 only: may be a debt exchange)
stagestringFurthest form seen: announced, registered, tender_offer, going_private, preliminary_proxy or final_proxy. Not the state of the deal
first_filed_datedateDate of the first filing of the group
last_filed_datedateDate of the latest filing of the group. Not a completion date
filings_countintegerNumber of filings in the group
formsarrayDistinct forms in the group without /A, in order of first appearance
subject_cikinteger or nullCIK of the company named as subject company most often; null when no filing names one
subject_namestring or nullName of the subject company (not a verified target)
subject_tickerstring or nullActive ticker of the subject company, when it has one
filer_cikinteger or nullCIK of the other company most often filing (the bidder or merger partner); null when there is none
filer_namestring or nullName of that company
filer_tickerstring or nullActive ticker of that company, when it has one
deal_file_numberstring or nullThe 005- or 333- file number the group was keyed on, when it has one
groupingstringStrongest link used to build the group: file_number, party_pair, company or single (a lone filing)
ambiguous_filingsintegerFilings left as their own group because two or more open deals of the same company fit
latest_filing_urlstringSEC filing index page of the latest filing
filingsarrayEvery filing, oldest first: { accession_no, form_type, filed_date, filer_name, subject_name, link, url }. link says how the filing was placed: start, file_number, party_pair, company or ambiguous
updated_atdatetimeWhen the group last changed

GET /api/v1/form-d pro

Private placements: SEC Form D notices of exempt securities offerings

One row per Form D or Form D/A filed with the SEC since 2015, newest first: a company or fund telling the SEC it is selling securities without registering them (Regulation D, usually Rule 506). History comes from the SEC's quarterly Form D data sets and new filings from EDGAR; both give the same fields. total_offering_amount, total_sold, total_remaining, investors_count and first_sale_date are what the issuer typed: unaudited, not checked by the SEC, and an issuer can write 'Indefinite' (offering_indefinite true, amount null). An amendment restates the offering, and its total_sold and investors_count replace those of the filing before it (same file_number): the amount raised so far is the latest filing's total_sold, never a sum. Related persons are the executive officers, directors and promoters the issuer lists, names as filed (first and last name; middle names are left out). What the data is not: a Form D is a notice, not an approval, and says nothing about whether the money was raised on the terms stated or who the investors are (only how many). Pooled investment funds (hedge, private equity, venture funds) are about two thirds of the filings; pass pooled_funds=false to see operating companies. Information, not advice. Provenance: filing_url (the EDGAR filing index) and primary_doc_url (the Form D document). Event date for since / until: filed_date.

ParameterTypeDescription
tickertickerTicker: private placements by this company (any issuer of the filing, so a co-issuer is found too).
cikinteger (CIK)CIK of an issuer named in the filing (the primary issuer or a co-issuer).
formD | D/AD: the first notice of an offering. D/A: an amendment, which restates the offering (its figures replace those of the filing before it).
pooled_fundsbooleanfalse: leave out pooled investment funds (hedge, private equity and venture funds), about two thirds of all filings, to see operating companies. true: only pooled funds.
listedbooleantrue: only offerings by a company that has an active ticker in our securities list (a listed company raising money privately, for example through a PIPE or a subsidiary's financing). false: everything else.
industrystringIndustry group exactly as the SEC lists it, e.g. 'Biotechnology', 'Banking and Financial Services', 'Pooled Investment Fund'.
sincedateOnly filings on or after this date (YYYY-MM-DD): filed_date.
untildateOnly filings on or before this date (YYYY-MM-DD): filed_date.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (37)
FieldTypeDescription
accession_nostringSEC accession number of the filing
form_typestringD (first notice) or D/A (amendment)
filed_datedateDate the SEC received the filing
file_numberstring or nullThe offering's SEC file number (021-nnnnnn): shared by the first notice and every amendment, which is how an offering is followed
previous_accession_nostring or nullAn amendment: the filing it amends
cikintegerCIK of the primary issuer
issuer_namestring or nullIssuer name as filed
tickerstring or nullActive ticker of the primary issuer, when it is listed (null for most private companies and funds)
issuer_ciksarrayCIKs of every issuer of the offering, primary first (a fund family files one notice for several issuers)
issuer_countintegerNumber of issuers
issuer_statestring or nullState or country code of the issuer's address
jurisdiction_of_incstring or nullState or country of incorporation
entity_typestring or nullCorporation, Limited Partnership, Limited Liability Company and so on
year_of_incinteger or nullYear of incorporation when the issuer gave one (null for companies over five years old or yet to be formed)
industry_groupstring or nullIndustry group the issuer chose from the SEC's list
investment_fund_typestring or nullPooled funds only: Hedge Fund, Private Equity Fund, Venture Capital Fund, Other Investment Fund
exemptionsarrayExemption codes as filed: 06b = Rule 506(b), 06c = Rule 506(c), 04 = Rule 504, 3C / 3C.1 / 3C.7 = Investment Company Act exclusions
security_typesarrayequity, debt, option, security_to_be_acquired, pooled_fund, tenant_in_common, mineral or other
security_otherstring or nullDescription when the type is other
first_sale_datedate or nullDate of first sale as filed; null when none has happened yet
yet_to_occurboolean or nullThe issuer says the first sale has not happened yet
is_business_combinationboolean or nullThe offering is in a business combination transaction (a merger or exchange)
minimum_investmentnumber or nullMinimum investment accepted from any outside investor (USD)
total_offering_amountnumber or nullTotal offering amount (USD); null when indefinite
offering_indefinitebooleanThe issuer wrote Indefinite for the offering amount
total_soldnumber or nullAmount sold so far (USD), cumulative as of the filing; unaudited
total_remainingnumber or nullAmount remaining to be sold (USD); null when indefinite
remaining_indefinitebooleanThe issuer wrote Indefinite for the remaining amount
investors_countinteger or nullInvestors who have already invested
has_non_accreditedboolean or nullSecurities were sold to non-accredited investors
non_accredited_countinteger or nullNumber of non-accredited investors
sales_commissionsnumber or nullSales commissions paid (USD)
finders_feesnumber or nullFinders' fees paid (USD)
related_personsarrayExecutive officers, directors and promoters as filed: { name, roles }
filing_urlstringSEC filing index page on sec.gov (EDGAR) for this Form D
primary_doc_urlstringThe Form D itself on EDGAR (primary_doc.xml of the filing)
first_seen_atdatetimeWhen we first stored the filing

GET /api/v1/lobbying free

Federal lobbying disclosures (Senate LDA)

Lobbying Disclosure Act filings, newest posting first. Each filing names the client (client_cik when we matched it to an SEC company), the registrant that lobbied, what was paid (income, for a firm lobbying for a client) or spent (expenses, for a company lobbying for itself) and the issue codes. Provenance: filing_uuid and source_url (the filing on lda.senate.gov). Event date for since / until: the posting date.

ParameterTypeDescription
tickertickerTicker of the client company (resolved to its CIK).
cikinteger (CIK)CIK of the client company.
registrant_idintegerSenate LDA registrant id (the lobbying firm, or the company itself for in-house lobbying).
filing_yearintegerFiling year.
issue_codestringGeneral issue code a filing reports activity on, e.g. TAX, DEF, HCR, TRD.
sincedateOnly filings posted on or after this date (YYYY-MM-DD).
untildateOnly filings posted on or before this date (YYYY-MM-DD).
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (22)
FieldTypeDescription
filing_uuidstringSenate LDA filing id
filing_typestringFiling type code: RR registration, Q1-Q4 quarterly report, 1A-4A amendment, termination types ...
filing_yearintegerFiling year
filing_periodstringfirst_quarter ... fourth_quarter, mid_year, year_end
posted_datedateDate the filing was posted
termination_datedate or nullTermination date, for termination filings
registrant_idintegerRegistrant id
registrant_namestringRegistrant (the lobbying firm or the company itself)
client_idintegerClient id
client_namestringClient name as filed
cikinteger or nullSEC CIK of the client, when matched
tickerstring or nullTicker of that company
client_statestring or nullClient's state
incomenumber or nullIncome of a lobbying firm from this client in the period, USD
expensesnumber or nullExpenses of a company lobbying on its own behalf, USD
has_foreign_entitybooleanA foreign entity is reported
activity_countintegerNumber of issue activities in the filing
lobbyist_countintegerNumber of lobbyists named
covered_countintegerLobbyists with a covered government position
issue_codesarrayGeneral issue codes of the filing's activities
source_urlstringThe filing on the Senate LDA site
first_seen_atdatetimeWhen we first stored the row

GET /api/v1/government-contracts pro

US federal contract awards (USAspending)

Federal contract awards, most recently modified first. cik is the SEC company matched to the awardee's name, parent_cik the match for its parent company. award_amount is the total obligated to date (it can fall when money is de-obligated). Provenance: award_key and source_url (the award on usaspending.gov). Event date for since / until: last_modified_at.

ParameterTypeDescription
tickertickerTicker of the recipient company or its parent (resolved to the CIK).
cikinteger (CIK)CIK of the recipient company or its parent.
roleany | recipient | parentWith ticker / cik: match the awardee itself, its parent, or either (default). Default: any.
awarding_agencystringExact awarding agency name, e.g. 'Department of Defense'.
sincedateOnly awards last modified on or after this date (YYYY-MM-DD).
untildateOnly awards last modified on or before this date (YYYY-MM-DD).
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (23)
FieldTypeDescription
award_keystringUSAspending unique award id
piidstring or nullAward id as the agency writes it
award_typestring or nullAward type
recipient_namestring or nullAwardee
recipient_ueistring or nullAwardee's Unique Entity Id
parent_namestring or nullParent company of the awardee
parent_ueistring or nullParent's Unique Entity Id
cikinteger or nullSEC CIK matched to the awardee
tickerstring or nullTicker of that company
parent_cikinteger or nullSEC CIK matched to the parent
parent_tickerstring or nullTicker of the parent
awarding_agencystring or nullAwarding agency
awarding_sub_agencystring or nullAwarding sub-agency
base_obligation_datedate or nullDate of the first obligation
last_modified_atstringAgency's last modification time (no time zone)
end_datedate or nullCurrent period-of-performance end
award_amountnumber or nullTotal obligated to date in USD
naics_codestring or nullNAICS industry code
psc_codestring or nullProduct / service code
descriptionstring or nullAward description (first 300 characters)
pop_statestring or nullPlace-of-performance state
source_urlstringThe award on usaspending.gov
first_seen_atdatetimeWhen we first stored the row

GET /api/v1/patents pro

Granted US patents by company assignee

USPTO patent grants, newest grant first, one row per patent and organization assignee. cik is the SEC company matched to the assignee name (null when there was no safe match; match_method and match_score say how). Individual inventors are not included. Provenance: patent_number and source_url (Google Patents). Event date for since / until: grant_date.

ParameterTypeDescription
tickertickerTicker of the assignee company (resolved to its CIK).
cikinteger (CIK)CIK of the assignee company.
patent_typeutility | design | plant | reissue | otherKind of patent.
cpcstringCPC main group, exact, e.g. 'G06N 3'.
sincedateOnly patents granted on or after this date (YYYY-MM-DD).
untildateOnly patents granted on or before this date (YYYY-MM-DD).
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (18)
FieldTypeDescription
patent_numberstringPatent number as printed (7-digit utility, D..., RE..., PP...)
kindstringUSPTO kind code (B1, B2, S1, ...)
patent_typestringutility, design, plant, reissue or other
grant_datedateGrant date (a Tuesday)
application_numberstring or nullApplication number
application_datedate or nullApplication filing date
titlestring or nullTitle
cpc_main_groupstring or nullCPC main group
claims_countinteger or nullNumber of claims
assignee_seqintegerPosition among the grant's assignees
assignee_namestringAssignee exactly as printed
assignee_countrystring or nullAssignee country
cikinteger or nullSEC CIK matched to the assignee
tickerstring or nullTicker of that company
match_methodstring or nullexact, fuzzy, manual or unmatched
match_scorenumber or nullName-match score 0-100
source_urlstringThe patent on Google Patents
first_seen_atdatetimeWhen we first stored the patent

GET /api/v1/short-interest pro

FINRA short interest by settlement date

Equity short interest as published by FINRA twice a month (settlement dates around the 15th and month end), newest settlement date first. FINRA keys rows by symbol; cik is looked up from the symbol and is null for symbols we do not track. Provenance: source_url is the FINRA file. Event date for since / until: settlement_date.

ParameterTypeDescription
tickertickerTicker (FINRA's symbol). Class-share spellings are matched.
cikinteger (CIK)CIK: the short interest of all active and retired tickers of the company.
sincedateOnly settlement dates on or after this date. With ticker / cik and no since, the last 400 days are returned.
untildateOnly settlement dates on or before this date (YYYY-MM-DD).
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (15)
FieldTypeDescription
settlement_datedateSettlement date
tickerstringFINRA symbol
cikinteger or nullSEC CIK of the company with that active ticker
issue_namestringIssue name
market_classstringMarket class
current_shortnumberShares sold short at this settlement date
previous_shortnumberShares sold short at the previous settlement date
change_sharesnumberChange in shares since the previous date
change_percentnumberPercent change as published by FINRA
avg_daily_volumenumberAverage daily share volume
days_to_covernumberDays to cover
split_flagstring or nullFINRA split flag
revision_flagstring or nullFINRA revision flag
source_urlstringFINRA source file
first_seen_atdatetimeWhen we first stored the row

GET /api/v1/layoffs pro

Layoff and closure notices filed under the WARN Act

State WARN Act notices of mass layoffs and plant closings, newest notice first, one row per notice as the state published it (California lists a notice for several sites as one row per site). Twelve states are collected (CA, KY, NE, NJ, OK, OR, PA, SC, TN, UT, WA, WI); each publishes on its own schedule, and New Jersey and Pennsylvania publish no notice date, so those rows have a null notice_date and only appear when notice_date is not filtered. Only about one notice in ten is matched to a public company: cik and ticker are set when the employer name matched a company by an automatic name match, and are null otherwise; pass listed=true to keep only those. Notices dated after today are left out; effective_date is null when the published date is implausible (years before the notice or centuries after it); employees is null when the state gave no count or zero. Provenance: source_url is the state's WARN page (the notices are rows on it, not separate documents). Event date for since / until: notice_date.

ParameterTypeDescription
tickertickerTicker of the company the notice is matched to (resolved to its CIK).
cikinteger (CIK)CIK of the company the notice is matched to.
statestringTwo-letter code of the state that published the notice, e.g. CA, WA, NJ.
min_employeesintegerOnly notices that name at least this many workers.
listedbooleantrue: only notices matched to a public company (about one in ten). false or omitted: every notice.
sincedateOnly notices dated on or after this date (YYYY-MM-DD): notice_date.
untildateOnly notices dated on or before this date (YYYY-MM-DD): notice_date.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (12)
FieldTypeDescription
statestringTwo-letter code of the state that published the notice
notice_keystringStable id of the notice within its state
company_namestringEmployer exactly as the state printed it
cikinteger or nullSEC CIK of the company matched to the employer name, when there was a match
tickerstring or nullTicker of that company
locationstring or nullPlace of the layoff as published (a city, a county or a site address)
notice_datedate or nullDate of the notice; null where the state does not publish one
effective_datedate or nullFirst day of the layoff; null when not published or implausible
employeesinteger or nullWorkers affected; null when not published
layoff_typestring or nullThe state's own wording: layoff or closure, often permanent or temporary
source_urlstringThe state's WARN notices page
first_seen_atdatetimeWhen we first stored the notice

GET /api/v1/h1b pro

H-1B labor condition applications decided by the Department of Labor

Labor condition applications (LCAs) for H-1B, H-1B1 and E-3 workers that the US Department of Labor decided, newest decision first, one row per application. An LCA is a required step before an H-1B petition: it is not a hire, a petition or a visa, and one application can cover several workers (total_workers). Statuses: certified, certified_withdrawn, denied, withdrawn. Wages are as the employer filed them, with their unit (Hour, Week, Bi-Weekly, Month, Year); wage_annual and prevailing_wage_annual restate them per year (hour x 2080, week x 52, bi-weekly x 26, month x 12) and are null when the unit is unknown or the figure is outside 1,000 to 5,000,000 a year. wage_annual uses the low end of the offered range. The employer is the company name as the Department prints it; it is matched to a public company by name (and a reviewed list of subsidiaries): cik and ticker are set only for a match and are null otherwise, which does not mean the employer is private. Most employers are private companies, universities and staffing firms. The files carry no worker names. Provenance: source_url is the Department of Labor's disclosure data page; the files are published about six weeks after each quarter ends.

ParameterTypeDescription
tickertickerTicker of the employer (resolved to its CIK). Only applications whose employer name matched that company are returned.
cikinteger (CIK)CIK of the employer.
employerstringPart of the employer's name as the Department of Labor prints it, e.g. COGNIZANT or VIRGINIA: three or more characters match anywhere in the name, one or two match its start. Upper or lower case.
job_titlestringPart of the job title as the employer wrote it, e.g. PHARMACIST: at least three characters, matched anywhere in the title. Upper or lower case.
statuslist of certified | certified_withdrawn | denied | withdrawnThe Department of Labor's decision: certified, certified_withdrawn (certified, then withdrawn by the employer), denied or withdrawn.
worksite_statestringTwo-letter code of the state of the worksite, e.g. CA.
min_workersintegerOnly applications that ask for at least this many workers.
min_wageintegerOnly applications whose offered wage per year (wage_annual, the low end of the range) is at least this many dollars. Applications with no annual figure are left out.
listedbooleantrue: only applications whose employer is matched to a public company. false or omitted: every application.
sincedateOnly applications decided on or after this date (YYYY-MM-DD): decision_date.
untildateOnly applications decided on or before this date (YYYY-MM-DD): decision_date.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (27)
FieldTypeDescription
case_numberstringThe Department of Labor's case number (I-200-...)
statusstringcertified, certified_withdrawn, denied or withdrawn
visa_classstring or nullH-1B, H-1B1 Chile, H-1B1 Singapore or E-3 Australian
received_datedate or nullDay the Department received the application
decision_datedateDay the Department decided it
employer_namestringEmployer exactly as the Department prints it
employer_citystring or nullCity of the employer's address
employer_statestring or nullState of the employer's address
cikinteger or nullSEC CIK of the public company the employer was matched to; null when not matched
tickerstring or nullTicker of that company
job_titlestring or nullJob title as filed
soc_codestring or nullStandard Occupational Classification code of the job
soc_titlestring or nullTitle of that occupation
full_timeboolean or nullWhether the position is full time
total_workersinteger or nullWorkers the application asks for
wage_fromnumber or nullOffered wage, low end, in wage_unit
wage_tonumber or nullOffered wage, high end, in wage_unit
wage_unitstring or nullHour, Week, Bi-Weekly, Month or Year
wage_annualnumber or nullwage_from per year (hour x 2080, week x 52, bi-weekly x 26, month x 12); null when not usable
prevailing_wagenumber or nullPrevailing wage for the job and place, in prevailing_wage_unit
prevailing_wage_unitstring or nullUnit of the prevailing wage
prevailing_wage_annualnumber or nullThe prevailing wage per year; null when not usable
worksite_citystring or nullCity of the first worksite listed
worksite_statestring or nullState of the first worksite listed
worksite_postalstring or nullPostal code of the first worksite listed
source_urlstringThe Department of Labor's disclosure data page
first_seen_atdatetimeWhen we first stored the application

GET /api/v1/fha-lending pro

FHA-insured lending by lender (HUD)

HUD's data on loans the Federal Housing Administration insures. dataset=forward and dataset=reverse give, for the lenders you name (ticker, cik or the start of a lender's name), the loans and dollar volume per month and the lender's share of all loans that month. dataset=multifamily gives the apartment, senior-housing and care-home loans a company holds or services (balance, active projects, recent endorsements), or the largest holders when you name none. These are aggregates and lender or property facts: the files list no borrower. A joint venture is its own row (joint_venture true) and is never added to the company that part-owns it. The answer is one object (data is a list of one; next_cursor is always null). Each answer carries source_url (HUD's page) and a cite string. Until a dataset is active the endpoint answers 404 not_found. Datasets: forward (fha_sf_snapshot), reverse (fha_hecm_snapshot), multifamily (fha_multifamily).

ParameterTypeDescription
dataset (required)forward | reverse | multifamilyforward: FHA home-purchase and refinance loans by lender and month. reverse: reverse mortgages (HECM) by lender and month. multifamily: apartment, senior-housing and care-home loans by holder and servicer.
tickertickerTicker of the company that owns lenders (resolved to its CIK). Joint ventures it co-owns are returned as their own rows, flagged joint_venture.
cikinteger (CIK)CIK of the company that owns lenders.
lenderstringStart of a lender's name as HUD prints it, e.g. FINANCE OF AMERICA. Upper or lower case.
monthsintegerHow many recent months to return, 1 to 60 (default 12); forward and reverse only. Default: 12.
Response fields (9)
FieldTypeDescription
datasetstringforward, reverse or multifamily
source_urlstringHUD's page for this dataset
citestringThe source in one sentence, with the link
lendersarrayThe lenders the request matched: lender_key, lender, parent_cik, parent_name, relation, joint_venture, ownership_pct
rowsarrayforward and reverse: per month and lender, loans, volume, avg_rate, share_of_loans_pct, joint_venture, cite
holdingsarraymultifamily: per role (holder, servicer) and lender, active_projects, current_balance, recent endorsements, joint_venture
servicingarraymultifamily: the servicing portfolio of the company's own servicers (projects, units, balance, avg_rate, as_of)
latest_monthstring or nullforward and reverse: the newest month in rows
notestringHow to read the figures

GET /api/v1/bank-financials pro

Bank financials from FDIC call reports

Quarterly figures from the call reports US banks file with the FDIC, summed for the banks each listed company owns: assets, deposits and the uninsured share, commercial real estate, past-due loans, nonaccrual loans and net charge-offs (total and by loan type), capital ratios and return on assets, with the change against a year earlier. Name a company (ticker, cik or a name) to get its quarters, newest first; or name none to rank the listed companies by one metric for a quarter. The figures are for the company's US bank subsidiaries as filed, not for the consolidated holding company. Each row carries source_url and a cite string. The answer is one object (data is a list of one; next_cursor is always null). Until the source is active the endpoint answers 404 not_found.

ParameterTypeDescription
tickertickerTicker of the listed company that owns the banks (resolved to its CIK).
cikinteger (CIK)CIK of the listed company that owns the banks.
namestringPart of a company's name or of the name of one of its banks (at least 3 characters), e.g. Chase or Wells Fargo.
metricassets | deposits | uninsured_share | uninsured_share_chg_4q | cre_pct_loans | cre_to_equity | dq_total | na_total | nco_total | dq_card | dq_card_chg_4q | nco_card | dq_auto | dq_cre | dq_res | dq_ci | cet1_ratio | leverage_ratio | roaRanking mode (no ticker, cik or name): the metric to order the listed companies by. assets (Total assets); deposits (Total deposits); uninsured_share (Uninsured share of deposits); uninsured_share_chg_4q (Change in uninsured share, 4 quarters); cre_pct_loans (Commercial real estate, share of loans); cre_to_equity (Commercial real estate, percent of equity); dq_total (Past due, all loans); na_total (Nonaccrual, all loans); nco_total (Net charge-offs, all loans); dq_card (Past due, credit cards); dq_card_chg_4q (Change in card past due, 4 quarters); nco_card (Net charge-offs, credit cards); dq_auto (Past due, auto loans); dq_cre (Past due, commercial real estate); dq_res (Past due, 1-4 family mortgages); dq_ci (Past due, commercial and industrial); cet1_ratio (Common equity Tier 1 ratio); leverage_ratio (Tier 1 leverage ratio); roa (Return on assets). Default assets.
quarterdateRanking mode: the quarter end (YYYY-MM-DD, any day of the quarter's last month). Default the newest stored quarter.
orderasc | descRanking mode: asc or desc. Default is the metric's usual order (highest first; lowest first for capital ratios).
quartersintegerCompany mode: how many recent quarters, 1 to 20 (default 8). Default: 8.
limitintegerRanking mode: how many companies, 1 to 250 (default 25). Default: 25.
Response fields (9)
FieldTypeDescription
modestringcompany or ranking
scopestringWhat the figures cover: US bank subsidiaries
notestringHow to read the figures
source_urlstringThe FDIC's BankFind page
citestringThe source in one sentence, with the link
companiesarraycompany mode: per company cik, ticker, name and quarters (newest first) with total_assets, total_deposits, uninsured_share_pct, commercial_real_estate_pct_of_loans, past_due_30_plus_pct, nonaccrual_pct, net_charge_offs_annualized_pct, by_loan_type, capital ratios, change_vs_year_ago_pp, source_url and cite
metricstring or nullranking mode: the metric used
quarter_enddate or nullranking mode: the quarter ranked
rowsarray or nullranking mode: rank, cik, ticker, name, value and the headline figures, each with source_url and cite

GET /api/v1/card-metrics pro

Monthly credit card charge-offs and delinquencies from SEC filings

Monthly credit card performance as issuers and card trusts report it to the SEC: the annualized net charge-off rate, the 30+ day delinquency rate (and 90+ where given) and loans at month end, with the change against the prior month and a year earlier. Issuer-wide series come from the issuer's own monthly 8-K (Capital One, Synchrony, American Express, Bread Financial, Discover until April 2025). Securitized card pools come from the trusts' monthly 10-D reports (Chase, Citibank, BA, Capital One, American Express, Synchrony, Barclays Dryrock) and add portfolio yield, excess spread and the monthly payment rate. The two kinds are returned in separate lists and must not be added together or compared as the same thing: a pool is only part of an issuer's loans. Each issuer defines its terms its own way; the definition is in each series. Each series and month carries source_url (the SEC filing) and a cite string. The answer is one object (data is a list of one; next_cursor is always null). Until the source is active the endpoint answers 404 not_found.

ParameterTypeDescription
tickertickerTicker of the listed company whose series to return (its issuer-wide series and the card trusts it sponsors).
cikinteger (CIK)CIK of the listed company whose series to return.
serieslist of cof_domestic_card | cof_auto | syf_card | axp_us_consumer_balances | axp_us_small_business_balances | axp_us_consumer | axp_us_small_business | bfh_card | dfs_card | chase_trust | citi_trust | ba_trust | comet_trust | axp_trust | scit_trust | dryrock_trustOne or more series keys: cof_domestic_card, cof_auto, syf_card, axp_us_consumer_balances, axp_us_small_business_balances, axp_us_consumer, axp_us_small_business, bfh_card, dfs_card, chase_trust, citi_trust, ba_trust, comet_trust, axp_trust, scit_trust, dryrock_trust. Keys ending in _trust are securitized card pools.
kindissuer | poolissuer keeps the issuer-wide series (8-K); pool keeps the securitized card pools (10-D). Default both, in separate lists.
monthsintegerHow many recent months of each series, 1 to 120 (default 13). More than 36 needs three series or fewer. Default: 13.
Response fields (7)
FieldTypeDescription
licencestringUS public records (SEC EDGAR), public domain
notestringHow to read issuer-wide series and securitized card pools
source_urlstringThe SEC's EDGAR search page
citestringThe source in one sentence, with the link
newest_monthdate or nullThe newest month among the series returned
issuer_widearrayIssuer-wide series (8-K): series_key, name, company, latest_month, net_charge_off_rate_pct, delinquent_30_plus_pct, loans_end, changes, definition and months (newest first), each with source_url and cite
securitized_card_poolsarraySecuritized card pools (10-D): the same plus portfolio_yield_pct, excess_spread_pct and monthly_payment_rate_pct

GET /api/v1/consumer-complaints pro

Consumer complaints to the CFPB by company

Counts of complaints filed with the CFPB about the companies it names, linked to listed companies: the latest three complete months against a year earlier, by product, the biggest issues, the share answered in time and the share of closed complaints that ended with relief, and monthly counts back to 2017. Name a company (ticker, cik or a name) to get its figures; or name none to rank the listed companies by volume or by change, for one product or all. Complaints are unverified and grow with a company's customer count, so compare trends, not totals. No complaint text is stored. Each row carries source_url and a cite string. The answer is one object (data is a list of one; next_cursor is always null). Until the source is active the endpoint answers 404 not_found.

ParameterTypeDescription
tickertickerTicker of the listed company (resolved to its CIK).
cikinteger (CIK)CIK of the listed company.
namestringPart of a company's name or of the name the CFPB database files it under (at least 3 characters).
productstringRanking mode: one CFPB product, e.g. Credit card or Mortgage. Default all products.
sortvolume | changeRanking mode: volume (complaints in the latest 3 months) or change (against the same months a year earlier). Default volume.
orderasc | descRanking mode: asc or desc. Default desc.
monthsintegerCompany mode: how many recent months of counts, 1 to 120 (default 24). Default: 24.
limitintegerRanking mode: how many companies, 1 to 250 (default 25). Default: 25.
Response fields (7)
FieldTypeDescription
modestringcompany or ranking
windowstringThe three complete months the figures cover
compared_withstringThe window a year earlier
notestringHow to read the figures
source_urlstringThe CFPB Consumer Complaint Database page
companiesarray or nullcompany mode: per company cik, ticker, name, windows by product, issues and months, each with source_url and cite
rowsarray or nullranking mode: rank, cik, ticker, name and the window figures, each with source_url and cite

GET /api/v1/sec-enforcement pro

SEC enforcement: litigation releases, administrative proceedings and trading suspensions

One row per release on the SEC's own enforcement lists, newest first: litigation releases (the SEC's account of a court action: an allegation unless the release states a judgment), administrative proceedings (orders of the Commission) and trading suspensions (a pause in trading in a stock, usually ten business days). The lists carry the names of the respondents and the release number, not a summary: title is the names as the SEC lists them and url is the release itself; read it for what the SEC says. A release being on the list is not a finding about any company named in it. It is information, not investment advice. Companies are matched to their CIK by name (matches, with the method and score of each): confident_ciks are names that are exactly a company's name (written the same way, legal form included; never a person's name, a bare one-word name or half of an "A and B" unless that half is a company by its legal form) and, for a trading suspension, the CIK printed in the order; possible_ciks are similar names that may be a different company. match_tier says how the company you filtered by matched this release, or the best tier in the release when you did not filter. Many respondents are people or private firms and match no company. A trading suspension also carries ticker, suspended_cik and the suspension period read from the order PDF (order_status read, unreadable or unavailable). Provenance: url. Event date for since / until: release_date.

ParameterTypeDescription
tickertickerTicker of a company (resolved to its CIK): releases whose names we match to that company with confidence, and trading suspensions whose order names that company by CIK. Add include_possible=true for weaker name matches.
cikinteger (CIK)CIK of a company: releases whose names we match to it with confidence (see include_possible for weaker matches).
include_possiblebooleanWith ticker or cik: true also returns releases where the company is only a possible match for a name (a similar name, which may well be a different company). The default returns confident matches only.
release_typelist of litigation_release | administrative_proceeding | trading_suspensionlitigation_release (a court action), administrative_proceeding (an order of the Commission) or trading_suspension (a pause in trading in a stock).
sincedateOnly releases dated on or after this date (YYYY-MM-DD): release_date.
untildateOnly releases dated on or before this date (YYYY-MM-DD): release_date.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (19)
FieldTypeDescription
release_typestringlitigation_release, administrative_proceeding or trading_suspension
release_nostringThe SEC's release number, e.g. LR-26677, 34-106736, IA-7028
release_datedateDate the SEC lists for the release (New York)
titlestringThe respondents' names as the SEC lists them
respondentsarrayThe title split into the names it lists (a heuristic split)
related_numbersarrayOther numbers on the same release, e.g. AAER-4603
file_nostring or nullAdministrative proceedings: the file number, e.g. 3-22778
documentsarrayOther documents the list links for the release (complaint, judgment, summary): { label, url }
match_tierstring or nullconfident or possible: how a company matched this release (the company you filtered by, else the best tier of any name); null when no name matched a company
matchesarrayCompany matches of the names: { name, cik, ticker, method (exact, fuzzy, manual, order_text), score, tier (confident or possible) }
confident_ciksarrayCIKs of the companies matched with confidence
possible_ciksarrayCIKs of companies that are only a possible match for a name
order_statusstring or nullTrading suspensions: read, unreadable (a layout we do not parse) or unavailable (the PDF was not served)
tickerstring or nullTrading suspensions: the symbol the order names, when it names exactly one
suspended_cikinteger or nullTrading suspensions: the CIK the order names, when it names exactly one
suspension_startdate or nullTrading suspensions: first day of the suspension, from the order
suspension_enddate or nullTrading suspensions: last day of the suspension, from the order
urlstringThe release on sec.gov (an HTML page or the order PDF)
first_seen_atdatetimeWhen we first stored the row

GET /api/v1/clinical-trials pro

Industry-sponsored clinical trials from ClinicalTrials.gov

Studies registered on ClinicalTrials.gov whose lead sponsor or a collaborator is an industry sponsor, with the phase, overall status, conditions, interventions (names and types), enrollment and the start, primary completion and completion dates. Four views: updates (default; by last update posted), status_changes (changes of overall status that we observed; our history starts when we first stored each study, so it is not the registry's own history), completed_phase3 and upcoming (studies still open, soonest primary completion first). The sponsor is matched to a public company by name, with a manual list for large drugmakers: cik and ticker are set only for a confident match (sponsor_match_method and sponsor_match_score say how), and are null otherwise, so a null does not mean the sponsor is private. A study that lists a company only as collaborator is found with role=any. Registry dates are what the sponsor entered: an estimated date can move or pass without an update, and month_only_dates lists the dates the registry gives as a month only (stored as the first of that month). This is a register of studies, not results: has_results says only that results are posted. A status of terminated or withdrawn is the sponsor's own report and why_stopped its stated reason. Provenance: source_url is the study's page on ClinicalTrials.gov, a service of the US National Library of Medicine. We are not affiliated with it. Event date for since / until depends on view (see the parameter).

ParameterTypeDescription
tickertickerTicker of the sponsoring company (resolved to its CIK). Only studies whose sponsor name matched that company with confidence are returned.
cikinteger (CIK)CIK of the sponsoring company.
rolesponsor | anyWith ticker or cik: sponsor (default) is the study's lead sponsor; any also returns studies where the company is listed as a collaborator. Default: sponsor.
phaselist of early_phase_1 | phase_1 | phase_2 | phase_3 | phase_4Phase of the study. A study that spans two phases (Phase 2/3) matches both.
statuslist of not_yet_recruiting | recruiting | enrolling_by_invitation | active_not_recruiting | suspended | completed | terminated | withdrawn | unknownThe study's overall status on ClinicalTrials.gov. With view=status_changes: the status it changed to.
listedbooleantrue: only studies whose lead sponsor is matched to a public company. false or omitted: every industry-sponsored study.
viewupdates | status_changes | completed_phase3 | upcomingupdates: studies by last update posted (default). status_changes: changes of overall status that we observed, newest first (our history starts when we first stored each study). completed_phase3: Phase 3 studies marked completed, by completion date. upcoming: studies still open, by primary completion date, soonest first. Default: updates.
sincedateOnly rows on or after this date (YYYY-MM-DD). The date depends on view: updates: last_update_posted; status_changes: the day we observed the change; completed_phase3: completion_date; upcoming: primary_completion_date (default: today).
untildateOnly rows on or before this date (YYYY-MM-DD); the same date as since.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (30)
FieldTypeDescription
nct_idstringClinicalTrials.gov identifier, NCT followed by eight digits
titlestringThe study's brief title
phasestring or nullPhase as the registry gives it: Early phase 1, Phase 1, Phase 2, Phase 2/3, Phase 3, Phase 4; null when the study has no phase
is_phase3booleanPhase 3 is one of the study's phases
statusstringOverall status now, in the registry's words: RECRUITING, COMPLETED, TERMINATED, WITHDRAWN, ...
why_stoppedstring or nullThe sponsor's reason for a terminated, withdrawn or suspended study
status_fromstring or nullStatus before the latest change we observed; null when we saw none
status_tostring or nullStatus after the latest change we observed (in view=status_changes: the change of this row)
status_changed_atdatetime or nullWhen we observed that change (not when the sponsor made it)
conditionsarrayConditions or diseases studied, as listed
interventionsarrayInterventions as {name, type}: DRUG, BIOLOGICAL, DEVICE, ... Names and types only
lead_sponsorstringLead sponsor as the registry prints it
sponsor_classstring or nullThe registry's class of the lead sponsor: INDUSTRY, NIH, OTHER, ...; a study with an industry collaborator can have a lead sponsor of another class
cikinteger or nullSEC CIK of the public company the lead sponsor was matched to; null when not matched with confidence
tickerstring or nullTicker of that company
sponsor_match_methodstring or nullHow the lead sponsor was matched: manual, exact or fuzzy; unmatched when it was tried and failed
sponsor_match_scorenumber or nullScore of the name match, 0 to 100
collaboratorsarrayCollaborators as {name, class, cik}; cik only for a confident match
enrollmentinteger or nullParticipants enrolled or planned
enrollment_typestring or nullACTUAL or ESTIMATED
start_datedate or nullStudy start date
primary_completion_datedate or nullWhen the last participant is due to be examined for the main outcome
primary_completion_typestring or nullACTUAL or ESTIMATED
completion_datedate or nullWhen the study is done
completion_typestring or nullACTUAL or ESTIMATED
month_only_datesarrayWhich of the three dates the registry gave as a month only
last_update_posteddateWhen the sponsor last updated the study's record
has_resultsbooleanResults have been posted on ClinicalTrials.gov
source_urlstringThe study's page on ClinicalTrials.gov
first_seen_atdatetimeWhen we first stored the study

GET /api/v1/fda-approvals pro

FDA drug approvals and device clearances from openFDA

Approved drug submissions (Drugs@FDA), 510(k) clearances and PMA approvals of devices, newest decision first, one row per approval, clearance or approved supplement. action_kind separates an original approval (the first one for a drug or device application) from a supplement (a later approved change). For new brand-name drugs and biologics pass new_drugs=true. The applicant is the company name as the FDA prints it; it is matched to a public company by name, with a manual list for large drugmakers: cik and ticker are set only for a confident match (applicant_match_method and applicant_match_score say how) and are null otherwise, which does not mean the applicant is private. Most applicants (generic makers, private device makers) do not match. The date is the FDA's decision date. This is a record of decisions that were made, not a calendar of decisions to come: no review dates (such as PDUFA goal dates) are published here, and a drug under review does not appear. Provenance: source_url is the FDA's database page for the application. The data comes from openFDA; this service is not endorsed by or affiliated with the FDA, and the FDA makes no warranty about the data.

ParameterTypeDescription
tickertickerTicker of the applicant company (resolved to its CIK). Only actions whose applicant name matched that company with confidence are returned.
cikinteger (CIK)CIK of the applicant company.
sourcelist of drugsfda | 510k | pmadrugsfda: approved drug submissions (Drugs@FDA). 510k: device clearances. pma: premarket approvals of devices.
application_typelist of nda | bla | anda | 510k | pmanda (new drug application) and bla (biologics license application) are brand-name drugs and biologics; anda is a generic drug; 510k and pma are devices.
kindoriginal | supplement | clearanceoriginal: the first approval of a drug or device application. supplement: a later approved change (new use, label, manufacturing). clearance: a 510(k) clearance.
new_drugsbooleantrue: only original approvals of NDAs and BLAs: the first approval of a brand-name drug or biologic (not generics, supplements or devices).
listedbooleantrue: only actions whose applicant is matched to a public company. false or omitted: every action.
sincedateOnly actions dated on or after this date (YYYY-MM-DD): action_date, the FDA's decision date.
untildateOnly actions dated on or before this date (YYYY-MM-DD): action_date.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (22)
FieldTypeDescription
action_keystringStable id of the action: drug:<application>:<ORIG or SUPPL>:<submission>, 510k:<K number> or pma:<P number>:<supplement>
sourcestringdrugsfda, 510k or pma
record_idstringApplication number (NDA021436), K number (K123456) or PMA number (P120001)
application_typestringNDA, BLA, ANDA, 510K or PMA
action_kindstringoriginal, supplement or clearance
submission_numberstring or nullSubmission number of a drug approval, or the PMA supplement number; null for originals and 510(k)s
action_datedateThe FDA's decision date
status_codestring or nullThe FDA's status or decision code for the action, as printed
submission_classstring or nullDrugs: the class of the submission (such as Type 1 - New Molecular Entity, Efficacy, Labeling); PMA: the supplement type
review_prioritystring or nullDrugs: PRIORITY or STANDARD review, when given
product_namestring or nullBrand names of a drug, or the device name
ingredientsstring or nullActive ingredients of a drug, or a PMA's generic name
product_codestring or nullDevices: the FDA product code
advisory_committeestring or nullDevices: the FDA review panel
applicantstringApplicant or sponsor exactly as the FDA prints it
cikinteger or nullSEC CIK of the public company the applicant was matched to; null when not matched with confidence
tickerstring or nullTicker of that company
applicant_match_methodstring or nullHow the applicant was matched: manual, exact or fuzzy; unmatched when it was tried and failed
applicant_match_scorenumber or nullScore of the name match, 0 to 100
doc_urlstring or nullThe approval letter or label on the FDA's site, when the record has one
source_urlstringThe FDA's database page for the application, clearance or PMA
first_seen_atdatetimeWhen we first stored the action

GET /api/v1/executive-pay pro

CEO and named-executive pay from proxy statements

The pay-versus-performance table of proxy statements (DEF 14A), one row per company and fiscal year, newest year first: the principal executive officer's (CEO's) total pay as reported in the Summary Compensation Table, the 'compensation actually paid' that the SEC's formula yields, the average of the other named executive officers on both measures, and the company's and its peer group's total shareholder return (the value of $100 invested at the start of the five-year period). Coverage is partial: only companies that tag a single CEO for the year appear with CEO figures (a company with two CEOs in one year has none; its other-executive figures can still be present), about 1,300 CEO figures and 2,000 companies a year. A figure that is zero, or a return outside 0 to 10,000, is null. amount_to_check is true when any pay amount is over $1 billion, which is usually a filer tagging thousands as dollars; compare with the filing. Provenance: accession_no and filing_url (the proxy statement). Event date for since / until: fiscal_year_end.

ParameterTypeDescription
tickertickerTicker of the company (resolved to its CIK).
cikinteger (CIK)CIK of the company.
latestbooleantrue: only each company's most recent fiscal year. false or omitted: every fiscal year in range.
sincedateOnly fiscal years that ended on or after this date (YYYY-MM-DD): fiscal_year_end.
untildateOnly fiscal years that ended on or before this date (YYYY-MM-DD): fiscal_year_end.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (16)
FieldTypeDescription
cikintegerSEC CIK of the company
tickerstring or nullTicker of the company
company_namestring or nullCompany name from our securities list
framestringFiscal-year label (CY2025: the year that mostly overlaps calendar 2025)
fiscal_year_startdate or nullFirst day of the fiscal year
fiscal_year_enddateLast day of the fiscal year
ceo_total_compnumber or nullCEO total compensation as reported in the Summary Compensation Table, USD
ceo_comp_actually_paidnumber or nullCEO compensation actually paid, USD (can be negative)
other_neo_avg_total_compnumber or nullAverage total compensation of the other named executive officers, USD
other_neo_avg_comp_actually_paidnumber or nullTheir average compensation actually paid, USD
total_shareholder_returnnumber or nullCompany total shareholder return: value of $100 invested at the start of the period
peer_group_total_shareholder_returnnumber or nullPeer group total shareholder return on the same basis
amount_to_checkbooleanTrue when a pay amount is over $1 billion, usually a unit error by the filer
accession_nostringSEC accession number of the filing
filing_urlstringThe filing on EDGAR
first_seen_atdatetimeWhen we first stored a figure of this row

GET /api/v1/stock-splits pro

Stock splits

Forward and reverse stock splits by execution date, newest first. Announced splits that have not taken effect yet are not included. Worked out from Tiingo daily price data (Market Data from Tiingo.com). The ratio reads <split_to>-for-<split_from>: 4-for-1 gives four shares for each one held, 1-for-10 is a reverse split that gives one for ten. Stock dividends are not splits and are left out; duplicate records of one ticker and date are collapsed to the latest. The list covers every US-traded symbol, including ETFs and foreign companies' over-the-counter shares; cik and company_name are null for symbols not in our securities list (has_stock_page is false). Event date for since / until: execution_date.

ParameterTypeDescription
tickertickerTicker of the stock. Splits are stored under the ticker that traded on the day; class-share spellings (BRK-B, BRK.B) are matched.
directionforward | reverseforward: a company that gives holders more shares (4-for-1). reverse: fewer shares at a higher price (1-for-10).
sincedateOnly splits executed on or after this date (YYYY-MM-DD): execution_date. Splits that have not happened yet are not in the data.
untildateOnly splits executed on or before this date (YYYY-MM-DD): execution_date.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (10)
FieldTypeDescription
tickerstringTicker that traded on the execution date
cikinteger or nullSEC CIK of the company with that active ticker
company_namestring or nullName from our securities list
execution_datedateFirst day the stock trades at the split price (ex-date); can be in the future
split_fromnumberShares before the split
split_tonumberShares after the split
ratiostringRatio as <split_to>-for-<split_from>, e.g. 4-for-1
directionstringforward (more shares) or reverse (fewer shares)
has_stock_pagebooleanWhether 13F.ai has a page for the ticker
first_seen_atdatetimeWhen we first stored the split

GET /api/v1/bills free

Bills and resolutions in Congress (Congress.gov)

Federal bills and resolutions from Congress.gov, one row per measure, latest action first. Each row carries the sponsor (sponsor_bioguide_id, linked to a member of Congress; sponsor_party and sponsor_state come from the congressional biographical record), the policy area, the introduction date, the latest action with its date, the number of cosponsors and the number of recorded actions. bill_type is hr or s (bills), hjres or sjres (joint resolutions), hconres or sconres (concurrent resolutions), hres or sres (simple resolutions); only bills and joint resolutions can become law. Placeholder numbers the House reserves for its leaders (no action yet) are left out. A few measures from long-past Congresses are included. Provenance: source_url, the bill on congress.gov. Event date for since / until: latest_action_date.

ParameterTypeDescription
qstringWords to look for in the title of the bill (at least 2 characters; case does not matter).
bioguide_idbioguideThe member who sponsored the bill (Bioguide id).
chamberhouse | senateChamber the bill was introduced in.
partyDemocrat | Republican | IndependentParty of the sponsor in the congressional biographical record. Independent covers every member who is neither a Democrat nor a Republican.
policy_areaAgriculture and Food | Animals | Armed Forces and National Security | Arts, Culture, Religion | Civil Rights and Liberties, Minority Issues | Commerce | Congress | Crime and Law Enforcement | Economics and Public Finance | Education | Emergency Management | Energy | Environmental Protection | Families | Finance and Financial Sector | Foreign Trade and International Finance | Government Operations and Politics | Health | Housing and Community Development | Immigration | International Affairs | Labor and Employment | Law | Native Americans | Public Lands and Natural Resources | Science, Technology, Communications | Social Sciences and History | Social Welfare | Sports and Recreation | Taxation | Transportation and Public Works | Water Resources DevelopmentPolicy area Congress.gov files the bill under (one of 32, e.g. Taxation).
bill_typelist of hr | s | hjres | sjres | hconres | sconres | hres | sresKind of measure: hr and s (bills), hjres and sjres (joint resolutions), hconres and sconres (concurrent resolutions), hres and sres (simple resolutions). A comma-separated list is allowed.
congressintegerCongress number, e.g. 119 for the Congress that began in January 2025.
sincedateOnly bills whose latest action is on or after this date (YYYY-MM-DD).
untildateOnly bills whose latest action is on or before this date (YYYY-MM-DD).
updated_sincedatetimeOnly bills Congress.gov changed after this time (the updated_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest updated_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (18)
FieldTypeDescription
congressintegerCongress number (119 began in January 2025)
bill_typestringhr, s, hjres, sjres, hconres, sconres, hres or sres
numberintegerBill number within its Congress and type
bill_labelstringThe citation as written in print, e.g. H.R. 1234
titlestring or nullTitle (first 500 characters)
origin_chamberstring or nullHouse or Senate
introduced_datedate or nullDate the bill was introduced
sponsor_bioguide_idstring or nullSponsor's Bioguide id; null when we have no member record for the sponsor
sponsor_namestring or nullSponsor's official name, else the name as Congress.gov prints it
sponsor_partystring or nullParty of the sponsor
sponsor_statestring or nullState of the sponsor
policy_areastring or nullPolicy area Congress.gov files the bill under; null until one is assigned
latest_action_datedateDate of the latest action
latest_action_textstring or nullThe latest action as Congress.gov words it
cosponsor_countinteger or nullNumber of cosponsors
action_countintegerNumber of recorded actions
source_urlstringThe bill on congress.gov
updated_atdatetime or nullWhen Congress.gov last changed the bill (including its text); use with updated_since to poll for changes

GET /api/v1/pac-donations free

Gifts from corporate PACs to candidates for Congress (FEC)

Contributions that company political action committees (PACs) made to federal candidates, from the FEC's committee-to-candidate bulk files, newest transaction first. Each row names the PAC (cmte_id, pac_name) and the company behind it (cik and ticker when we matched the PAC's connected organization to an SEC filer; null otherwise), and the recipient (recipient_bioguide_id when the candidate is a member of Congress in our records; otherwise the name of the candidate's committee). Only gifts are listed: contributions (24K) and in-kind gifts (24Z). Memo lines, which repeat an amount another line already counts, and independent expenditures are left out; lines with no date are left out. Refunds, where a campaign gives money back to the PAC, carry a negative amount and are returned only with entries=refunds or entries=all. committee limits the gifts to current members of a congressional committee (code or name). is_amendment marks a line that comes from an amended report. The FEC keeps the latest version of most lines, but a rare gift appears twice when a PAC repeats it on an amended report (about 90 lines in the whole file). Provenance: source_url, the FEC's page of the committee's spending on that day. Event date for since / until: txn_date, the date the PAC reports for the gift. The FEC files are rebuilt weekly and reports arrive monthly or quarterly, so the newest weeks are incomplete.

ParameterTypeDescription
tickertickerTicker of the company behind the PAC (resolved to its CIK). Only PACs whose connected company we matched to an SEC filer are found this way.
cikinteger (CIK)CIK of the company behind the PAC.
cmte_idstringFEC committee id of the PAC that gave, e.g. C00142711.
bioguide_idbioguideThe member of Congress who received the gift (Bioguide id).
partyDemocrat | Republican | IndependentParty of the recipient: the member's party in the congressional record, else the party the candidate's committee registered under. Independent covers every other party and no party.
chamberhouse | senateOffice the recipient is running for (from the FEC candidate id): the House or the Senate.
committeestringOnly gifts to current members of this congressional committee or subcommittee: its code (e.g. HSBA) or its name (e.g. 'House Financial Services', 'Senate Banking'). Adds up in one query what would otherwise take one call per member.
cycleintegerTwo-year election cycle of the FEC file, named for its even-numbered end year (2026 is the cycle of January 2025 to December 2026).
min_amountintegerOnly gifts of at least this many US dollars. Refunds are compared by their size, not their sign.
entriescontributions | refunds | allcontributions (default): money and in-kind gifts the PAC gave. refunds: money given back to the PAC (negative amounts). all: both. Default: contributions.
sincedateOnly gifts dated on or after this day (YYYY-MM-DD): the date the PAC reports for the transaction.
untildateOnly gifts dated on or before this day (YYYY-MM-DD).
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (22)
FieldTypeDescription
sub_idstringThe FEC's own id of the transaction line (a 19-digit number, so it is a string)
cmte_idstringFEC id of the PAC that gave
pac_namestring or nullName of the PAC
company_namestring or nullCompany the PAC is connected to as the FEC names it, else the PAC's own name
cikinteger or nullSEC CIK of the connected company, when we matched it
tickerstring or nullTicker of that company
recipient_bioguide_idstring or nullBioguide id of the recipient when the candidate is a member of Congress in our records
recipient_namestring or nullThe member's official name, else the name of the candidate's committee, else the FEC id with a note when the FEC's committee list does not have the committee yet
amount_notestring or nullSet when a single line is above the $5,000 a PAC may give per candidate and election: the PAC may have reported several elections on one line, or made an error
recipient_partystring or nullParty of the recipient: Democrat, Republican or Independent (every other party)
recipient_statestring or nullState of the recipient (taken from the FEC candidate id for a candidate who is not a member)
candidate_idstring or nullFEC candidate id of the recipient; its first letter is the office (H, S or P)
recipient_committee_idstring or nullFEC id of the committee that received the gift
transaction_typestringcontribution (money) or in_kind (goods or services)
amountnumberAmount in US dollars; negative for a refund returned to the PAC
txn_datedateDate the PAC reports for the gift
electionstring or nullThe election the gift is for: a letter (P primary, G general, R runoff, S special, C convention, O other) and a year, e.g. P2026
cycleintegerTwo-year election cycle of the FEC file the line comes from
report_tpstring or nullFEC report the line was filed on, e.g. M4 (monthly, April), Q2, YE, 12G
is_amendmentbooleanThe line comes from an amended report
source_urlstringThe FEC's page of the committee's spending on that day
first_seen_atdatetimeWhen we first stored the row; use with updated_since to poll for new rows

GET /api/v1/campaign-finance free

Campaign fundraising of candidates for Congress and President (FEC)

What each candidate's campaign committees raised and spent in a two-year election cycle, with cash on hand at the start and the end, debts, the candidate's own loans and the split of receipts into individuals, PACs and party committees. From the FEC's candidate summary files (weball), 2016 on, rebuilt by the FEC every day or so and reloaded here when they change. Newest cycle first, biggest fundraiser first within a cycle. Candidates who are members of Congress in our records carry bioguide_id (filter with bioguide_id, or members_only for just them). Amounts are US dollars for the whole cycle up to coverage_end_date, the last report the FEC has included: always read them with that date. Receipts include transfers between a candidate's own committees (transfers_from_authorized). Totals only: no individual donor is named, because federal law bars using contributors' names commercially. Provenance: source_url, the candidate's page on fec.gov for that cycle. A new cycle starts nearly empty: its first rows appear in January of the odd year.

ParameterTypeDescription
bioguide_idbioguideA member of Congress (Bioguide id): the finance rows of every FEC candidate id they have.
candidate_idstringFEC candidate id: H, S or P and eight more characters, e.g. H8CA05035.
cycleintegerTwo-year election cycle, named for its even-numbered end year (2026 is January 2025 to December 2026). Files start at 2016.
officehouse | senate | presidentOffice the candidate runs for (from the FEC candidate id).
statestringTwo-letter state of the office (not for President).
partystringFEC party code of the candidate, e.g. DEM, REP, IND, LIB, GRE.
statusincumbent | challenger | open_seatIncumbent, challenger or open seat, as the FEC lists the candidate. Blank in the file for a few candidates.
members_onlybooleantrue = only candidates who are, or were since 2012, members of Congress in our records.
min_receiptsintegerOnly candidates whose total receipts in the cycle are at least this many US dollars.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (25)
FieldTypeDescription
cycleintegerTwo-year election cycle, named for its even end year (2026 = 2025-2026)
candidate_idstringFEC candidate id; its first letter is the office (H, S or P)
candidate_namestringThe candidate's name as the FEC lists it: LAST, FIRST
bioguide_idstring or nullBioguide id when the candidate is a member of Congress in our records
officestringH House, S Senate, P President
statestring or nullState of the office; null for President
districtstring or nullHouse district as two digits; 00 is an at-large seat (House) or the whole state (Senate)
partystring or nullFEC party code, e.g. DEM, REP, IND
incumbent_statusstring or nullI incumbent, C challenger, O open seat; null when the FEC leaves it blank
total_receiptsnumber or nullEverything the campaign took in during the cycle, in US dollars (includes transfers from the candidate's other committees)
total_disbursementsnumber or nullEverything the campaign spent during the cycle
cash_beginningnumber or nullCash on hand at the start of the cycle
cash_endnumber or nullCash on hand at coverage_end_date
debts_owednumber or nullDebts the campaign owes
candidate_contributionsnumber or nullThe candidate's own gifts to the campaign
candidate_loansnumber or nullLoans the candidate made to the campaign
individual_contributionsnumber or nullTotal from individuals (itemized and not); no donor is identified
pac_contributionsnumber or nullTotal from other political committees (PACs)
party_contributionsnumber or nullTotal from party committees
transfers_from_authorizednumber or nullMoney moved in from the candidate's own other committees (part of total_receipts, not new money)
coverage_end_datedate or nullThe last report the totals include
in_current_campaignsbooleanThe candidate is on the FEC's list of current House and Senate campaigns
source_filestringThe FEC file the row comes from, e.g. weball26.zip
source_urlstringThe candidate's page on fec.gov for the cycle
first_seen_atdatetimeWhen we first stored the row; use with updated_since to poll for new rows

GET /api/v1/roll-call-votes free

House and Senate roll-call votes

Recorded votes of the House of Representatives (clerk.house.gov) and the Senate (read from Voteview, voteview.com, UCLA: the Senate's own site blocks automated access), one row per vote, newest first, from 2015. Each row has the question put to the chamber, the result, the yea / nay / present / not-voting counts, a description, and the measure it was on (bill_congress, bill_type, bill_number: the same keys as the bills dataset, with bill_title and bill_url when the bill is in it). Quorum calls, nominations, treaties and the election of the Speaker have no bill. A vote on a rule is tied to the resolution, not to the bill the rule makes in order. Pass bioguide_id to list the votes one member took part in with their position (Yea, Nay, Present, Not Voting, or Other for a vote with no yes or no, such as a name in the Speaker election). For every member's position on one vote, use /roll-call-vote-positions. Senate votes can trail the vote by a few days, have no time of day (voted_at is null), and yea / nay count the senators only, without the Vice President's tie-breaking vote. A Senate vote has the same chamber, congress, session and roll_number (the Senate's own vote number) as on senate.gov. Roll numbers restart every session. Provenance: official_url, the official page of the vote (the Senate's roll call vote page on senate.gov, or the House Clerk's page), and source_url, the file we read it from (the House Clerk's XML or, for the Senate, Voteview's page, which numbers votes across the whole Congress, so its number differs from roll_number). Event date for since / until: vote_date.

ParameterTypeDescription
bioguide_idbioguideOnly votes this member of Congress took part in (Bioguide id). Each row then also carries the member's position (position, vote_cast).
positionYea | Nay | Present | Not VotingOnly votes where the member (bioguide_id, required with this) took this position: Yea, Nay, Present or Not Voting.
chamberhouse | senateHouse or Senate.
congressintegerCongress number of the vote, e.g. 119 for the Congress that began in January 2025.
sessionintegerSession of the Congress (1 or 2). Roll numbers restart at 1 every session.
bill_typehr | s | hjres | sjres | hconres | sconres | hres | sresKind of measure the vote was on: hr and s (bills), hjres and sjres (joint resolutions), hconres and sconres (concurrent resolutions), hres and sres (simple resolutions). Use with bill_number.
bill_numberintegerNumber of the measure the vote was on (with bill_type). Numbers restart every Congress: add bill_congress to name one measure.
bill_congressintegerCongress of the measure (with bill_type and bill_number); omitted, the votes on that number in every Congress are returned.
sponsor_bioguide_idbioguideOnly votes on measures this member sponsored (Bioguide id), joined to the bills dataset.
qstringWords to look for in the question or description of the vote, or in the title of the measure it was on (at least 2 characters; case does not matter).
sincedateOnly votes taken on or after this date (YYYY-MM-DD).
untildateOnly votes taken on or before this date (YYYY-MM-DD).
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (27)
FieldTypeDescription
chamberstringhouse or senate
congressintegerCongress number (119 began in January 2025)
sessionintegerSession of the Congress (1 or 2)
roll_numberintegerRoll call number; restarts at 1 every session
vote_datedateDate of the vote
voted_atdatetime or nullWhen the vote was taken, in UTC (the House gives Eastern time); null for every Senate vote
questionstring or nullThe question put to the chamber, e.g. On Passage
vote_typestring or nullHouse: YEA-AND-NAY, RECORDED VOTE, 2/3 YEA-AND-NAY, QUORUM; Senate: the majority required
resultstring or nullPassed, Failed, Agreed to, Confirmed ... (the winning name for the election of the Speaker)
titlestring or nullThe chamber's description of the vote (first 500 characters)
amendmentstring or nullAmendment number and author or purpose, when the vote was on an amendment
bill_congressinteger or nullCongress of the measure voted on
bill_typestring or nullhr, s, hjres, sjres, hconres, sconres, hres or sres; null when the vote was not on one of these
bill_numberinteger or nullNumber of the measure voted on
bill_labelstring or nullThe measure as written in print (H.R. 1234), or the source's own label for a nomination
bill_titlestring or nullTitle of the measure, when it is in the bills dataset
bill_sponsor_bioguide_idstring or nullBioguide id of the measure's sponsor, when it is in the bills dataset
bill_urlstring or nullThe measure on congress.gov
yeainteger or nullYeas; null when the vote has no yes or no totals
nayinteger or nullNays
presentinteger or nullMembers voting present
not_votinginteger or nullMembers not voting
positionstring or nullWith bioguide_id: the member's position (Yea, Nay, Present, Not Voting or Other); otherwise null
vote_caststring or nullWith bioguide_id: the vote as recorded when it differs from position (Aye, No, a candidate's name); otherwise null
source_urlstringThe record of the vote we read: the House Clerk's file or Voteview's page (Senate)
official_urlstringThe official page of the vote: the Senate's roll call vote page (senate.gov, by Congress, session and the Senate's vote number) or the House Clerk's page (clerk.house.gov, by year and roll number)
voteview_urlstring or nullSenate only: the vote on Voteview (voteview.com), a secondary source whose roll number counts votes across the whole Congress, not per session

GET /api/v1/roll-call-vote-positions free

Every member's position on one roll-call vote

The position of each member of the chamber on one recorded vote: Yea, Nay, Present, Not Voting, or Other for a vote with no yes or no (a name in the Speaker election, vote_cast holds it). Name the vote with chamber, congress, session and roll_number (as in /roll-call-votes). party and state are as recorded on the day in the House and as listed for the whole Congress in the Senate. bioguide_id links to the members of Congress. Ordered by member_id (the Bioguide id in both chambers). Provenance: /roll-call-votes gives the source_url of the vote. Event date: vote_date.

ParameterTypeDescription
chamber (required)house | senateHouse or Senate.
congress (required)integerCongress number of the vote.
session (required)integerSession of the Congress (1 or 2).
roll_number (required)integerRoll call number within the session.
positionYea | Nay | Present | Not VotingOnly members who took this position.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (8)
FieldTypeDescription
member_idstringBioguide id (both chambers); icpsr-<number> for a senator the source gives no Bioguide id
bioguide_idstring or nullBioguide id; null for a member the source gives none
member_namestring or nullOfficial name, else the name as the source prints it
partystring or nullParty (D, R, I): as recorded at the vote in the House, for the whole Congress in the Senate
statestring or nullState as recorded
positionstringYea, Nay, Present, Not Voting or Other
vote_caststring or nullThe vote as recorded when it differs from position (Aye, No, a candidate's name)
vote_datedateDate of the vote

GET /api/v1/short-volume pro

FINRA daily short sale volume by symbol

Short sale volume as published by FINRA for each trading day, newest day first: the shares sold short and the total shares, in trades reported through FINRA's facilities (off the stock exchanges). This is trading volume for one day, not short interest (open short positions): see /short-interest for that. FINRA keys rows by symbol (class shares as BRK/B); cik is looked up from the symbol and is null for symbols we do not track. Normally one row per symbol per day; market lists the reporting facilities as published. short_share_pct is short_volume / total_volume * 100. Provenance: source_url is FINRA's file for the day. Event date for since / until: trade_date.

ParameterTypeDescription
tickertickerTicker (FINRA's symbol). Class-share spellings are matched (BRK-B, BRK.B and BRK/B).
cikinteger (CIK)CIK: the daily short volume of all active and retired tickers of the company.
min_total_volumeintegerOnly rows with at least this many shares of total reported volume.
sincedateOnly trading days on or after this date. With ticker / cik and no since, the 120 days up to until (or today) are returned; without ticker / cik and no since, the 31 days up to until (or today).
untildateOnly trading days on or before this date (YYYY-MM-DD). With ticker / cik the window may span at most 400 days; without, at most 31 days.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (10)
FieldTypeDescription
trade_datedateTrading day
tickerstringFINRA symbol
cikinteger or nullSEC CIK of the company with that active ticker
marketstringReporting facilities as published (B, Q, N)
short_volumenumberShares sold short in the day's reported trades
short_exempt_volumenumberOf those, shares sold short under an exemption
total_volumenumberTotal shares in the day's reported trades
short_share_pctnumber or nullshort_volume as a percentage of total_volume
source_urlstringFINRA source file for the day
first_seen_atdatetimeWhen we first stored the row

GET /api/v1/fails-to-deliver pro

SEC fails-to-deliver balances by settlement date

Fails to deliver as the SEC publishes them in two files a month: for each settlement date, the balance of shares that brokers had failed to deliver and not yet delivered, with the previous day's closing price, newest settlement date first. shares_failed is a CUMULATIVE balance, not the fails of that day: a share that stays undelivered for ten days is counted on each of the ten days, and the age of a fail is not in the file. The SEC states that the numbers are not evidence of abusive or 'naked' short selling and are not necessarily the result of short selling; fails have many causes and most clear within days. value_usd is shares_failed times the price in the file (the previous close, null when the file has none). Before 2008-09-16 only balances of 10,000 shares or more are listed. The SEC keys rows by CUSIP and symbol; cik is looked up from the symbol and is null for symbols we do not track (many are funds). A release can lag the settlement dates by two to six weeks. Provenance: source_url is the SEC page that lists the files. Event date for since / until: settlement_date.

ParameterTypeDescription
tickertickerTicker (the SEC's symbol). Class-share spellings (BRK-B, BRK.B) are matched.
cikinteger (CIK)CIK: the fails of all active and retired tickers of the company.
min_sharesintegerOnly balances of at least this many shares.
sincedateOnly settlement dates on or after this date (YYYY-MM-DD). With ticker / cik and no since, the last 400 days are returned.
untildateOnly settlement dates on or before this date (YYYY-MM-DD).
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (10)
FieldTypeDescription
settlement_datedateSettlement date the balance is for
tickerstringThe SEC's symbol (may be blank in older rows)
cusipstringCUSIP of the security
cikinteger or nullSEC CIK of the company with that active ticker
descriptionstring or nullIssue description as the SEC prints it
shares_failednumberCumulative balance of shares failed to deliver at the end of the settlement date
pricenumber or nullPrevious day's closing price from the SEC's file
value_usdnumber or nullshares_failed times price, in US dollars
source_urlstringThe SEC page that lists the fails-to-deliver files
first_seen_atdatetimeWhen we first stored the row

GET /api/v1/merger-clearances pro

FTC early-termination notices for mergers and acquisitions (Hart-Scott-Rodino)

Early-termination notices the FTC publishes under the Hart-Scott-Rodino Act, newest first: a notice means the parties to a reportable merger or acquisition asked to end the 30-day waiting period early and the FTC and the Department of Justice granted it. COVERAGE IS PARTIAL BY DESIGN: only granted requests appear. Deals that waited out the full period, deals whose request was refused and deals that were never reportable are not listed, and the FTC granted no early terminations from 2021-02-04 until the new HSR form took effect on 2025-02-10, so there are no notices dated in between. acquiring_party is the buyer's ultimate parent entity and acquired_party the target's, as the notice words them; most are private companies, funds or people. Each party is matched to an SEC company by an automatic name match: *_cik and *_ticker are set when it matched, and *_match says how sure: 'match' (a close name) or 'possible' (a looser one that can be wrong); both are null when there was no match. A notice is not an endorsement of the deal, and says nothing about whether it closed. Provenance: source_url is the FTC page that lists the notices; transaction_number identifies the notice there. Event date for since / until: date_granted.

ParameterTypeDescription
tickertickerTicker of a company that is the buyer or the target in the notice (resolved to its CIK).
cikinteger (CIK)CIK of a company that is the buyer or the target in the notice.
roleacquirer | targetWith ticker / cik: only notices where the company is the buyer (acquirer) or the target. Default both.
exact_onlybooleanWith ticker / cik: true drops notices where the company matched only by a loose name match (acquiring_match / acquired_match = 'possible').
qstringWords in the name of either party or of an acquired entity (case-insensitive).
listedbooleantrue: only notices where at least one party was matched to a company that files with the SEC. false or omitted: every notice.
sincedateOnly notices granted on or after this date (YYYY-MM-DD): date_granted.
untildateOnly notices granted on or before this date (YYYY-MM-DD): date_granted.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (16)
FieldTypeDescription
notice_idstringThe FTC record's own id
transaction_numberstringThe FTC's HSR transaction number
date_granteddateThe day early termination was granted
acquiring_partystring or nullThe acquiring person (the buyer's ultimate parent entity) as the notice words it
acquired_partystring or nullThe acquired person (the target's ultimate parent entity)
acquired_entitiesarrayNames of the entities being acquired
acquiring_cikinteger or nullSEC CIK of the company the acquiring party was matched to
acquiring_tickerstring or nullTicker of that company
acquiring_matchstring or null'match' (a close name match) or 'possible' (a looser match); null when there is no match
acquiring_match_scorenumber or nullName similarity of the match, 0 to 100
acquired_cikinteger or nullSEC CIK of the company the acquired party was matched to
acquired_tickerstring or nullTicker of that company
acquired_matchstring or null'match' or 'possible'; null when there is no match
acquired_match_scorenumber or nullName similarity of the match, 0 to 100
source_urlstringThe FTC page that lists the notices
first_seen_atdatetimeWhen we first stored the notice

GET /api/v1/wikipedia-views pro

Daily English Wikipedia page views of company articles

Daily views of the English Wikipedia article about each US-listed company that has one, newest day first, from Wikimedia's page-view data (views Wikimedia classes as coming from people, on all platforms). One row per article per day; a day with no views is stored as 0. A day's views are published about a day late. Articles are matched to companies through Wikidata (the company's SEC CIK); the ticker is the company's main ticker. Views measure attention, not sentiment. Provenance: article_url is the Wikipedia article. Event date for since / until: view_date.

ParameterTypeDescription
tickertickerTicker of the company (resolved to its CIK, then to the Wikipedia article about it).
cikinteger (CIK)CIK of the company.
articlestringEnglish Wikipedia article title as in its address, with underscores.
sincedateOnly days on or after this date (YYYY-MM-DD).
untildateOnly days on or before this date (YYYY-MM-DD).
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (7)
FieldTypeDescription
view_datedateDay (UTC)
articlestringEnglish Wikipedia article title as in its address (underscores)
article_urlstringThe article on Wikipedia
viewsintegerViews that day
cikinteger or nullSEC CIK of the company the article is about
tickerstring or nullMain ticker of that company
first_seen_atdatetimeWhen we first stored the row

GET /api/v1/app-ratings pro

Daily App Store ratings of listed companies' apps

The average rating and number of ratings of the main apps of listed companies on Apple's US App Store, one snapshot per app per day, newest first. Collection started on 2026-10-23, so history is short. The average and count cover every version of the app. A count can fall when Apple removes ratings. The app list is chosen by us (about a hundred apps); ticker names the company that owns the app and cik is looked up from it. Google Play is not collected. Provenance: source_url is the app's store page; the numbers come from Apple's iTunes lookup service. Event date for since / until: snapshot_date.

ParameterTypeDescription
tickertickerTicker of the company that owns the app.
cikinteger (CIK)CIK of the company that owns the app: all its apps, whichever ticker we list them under.
app_idintegerThe app's id on its store (Apple's track id).
storeiosStore: ios (Apple's US App Store). Google Play is not collected.
sincedateOnly snapshots taken on or after this date (YYYY-MM-DD).
untildateOnly snapshots taken on or before this date (YYYY-MM-DD).
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (14)
FieldTypeDescription
snapshot_datedateDay of the snapshot (New York)
storestringStore: ios
app_idintegerThe app's id on its store
app_namestringApp name
tickerstringTicker of the company that owns the app
companystringCompany name
cikinteger or nullSEC CIK of the company with that active ticker
average_ratingnumber or nullAverage star rating, 0 to 5, over every version (null when the app has no ratings)
rating_countintegerNumber of ratings
versionstring or nullVersion on sale that day
pricenumber or nullPrice of the app in the store's currency
currencystring or nullCurrency of price
source_urlstringThe app on its store
first_seen_atdatetimeWhen we first stored the row

GET /api/v1/companies/{ticker_or_cik} free

Company profile and snapshot

One company: identity (CIK, tickers, name, SEC industry code and our sector), headquarters, fiscal year end, shares outstanding and market cap. market_cap is OUR ESTIMATE, not a vendor figure (market_cap_basis estimated, market_cap_source own): Shares outstanding from the company’s latest SEC filing (all share classes, each priced at its own close; ADRs converted to ADS) × last close from Tiingo. Updated daily. shares_as_of is the date of the share count. It needs a close from the last 7 days and a share count under 400 days old; when we cannot make a trustworthy figure market_cap is null (market_cap_status no own figure) and market_cap_reason says why in plain words. shares_outstanding is the cover-page count: a company with several classes of stock is counted across all of them; share_classes lists the raw per-class counts, and shares_basis class_weighted says shares_outstanding is in equivalent shares of the primary ticker's class (Berkshire's Class B counts as 1/1,500 of a Class A share, Visa's classes at their conversion rates). fund_ownership_pct is the 13F funds' shares in the ticker's own class divided by that class's shares outstanding (never the company total: GOOGL is divided by Class A shares, GOOG by Class C, BRK-B by Class B), using the share count nearest the report quarter. For an ADR the figure is the funds' US-listed ADSs against the company's shares converted to ADSs with ordinary_per_ads (13F covers only US-listed ADSs, so it is lower than global institutional ownership figures). A figure above 150% cannot be double counting, so it is not shown: fund_ownership_pct is null and fund_ownership_status is implausible. split_factor is the product of the splits executed after the share count was filed (already applied to shares_outstanding). Raw daily prices are not part of the API. Returns a single object in data.

ParameterTypeDescription
ticker_or_cik (path)stringA ticker symbol (NVDA, BRK-B) or a SEC CIK (1045810).
Response fields (39)
FieldTypeDescription
cikintegerSEC CIK (the stable company key)
tickerstringPrimary active ticker
tickersarrayEvery ticker of the company: {ticker, exchange, active}
requested_tickerstring or nullThe ticker you asked for, when you used one
namestringCompany name
exchangestring or nullExchange of the primary ticker
is_listedbooleanAt least one ticker is active
sectorstring or nullOur SIC-based sector (11 sectors; not GICS)
sicinteger or nullSEC SIC code
sic_descriptionstring or nullSEC description of the SIC code
entity_typestring or nullSEC entity type
filer_categorystring or nullFiler status, e.g. Large accelerated filer
fiscal_year_endstring or nullMMDD
state_of_incorporationstring or nullEDGAR state code
citystring or nullBusiness address city
state_or_countrystring or nullBusiness address state or country code
is_foreignboolean or nullBusiness address is outside the US
websitestring or nullWebsite, when the SEC has one
former_namesarrayFormer names with from / to dates
shares_outstandingnumber or nullLatest cover-page shares outstanding (all common classes added up for a multi-class company; see shares_basis), adjusted for later splits
shares_as_ofdate or nullDate of that share count (the SEC filing it came from); the estimated market cap uses it
shares_sourcestring or nulldei (SEC companyfacts), cover (the filing's own cover page), dei_classes (the classes on the cover page added up) or override (a count we checked by hand)
shares_basisstring or nullreported, or class_weighted when shares_outstanding is in equivalent shares of the primary ticker's class (share_classes holds the raw per-class counts)
split_factornumber or nullProduct of split_to / split_from for splits after the share count was filed (1 when none); already applied to shares_outstanding
share_classesarray or nullRaw shares per common class on the cover page: {class, shares}, when the count came from it
market_capnumber or nullEstimated market capitalisation in USD (our estimate): shares outstanding from the latest SEC filing (all share classes, each priced at its own close; ADRs converted to ADS) x the last Tiingo close, updated daily; null when we have no trustworthy figure
market_cap_basisstringAlways estimated: market_cap is our estimate, not an exchange or vendor figure
market_cap_sourcestring or nullown, or null when there is no market cap
market_cap_statusstring or nullok, or no own figure (the estimated market cap is not available; see market_cap_reason)
market_cap_reasonstring or nullPlain-words reason when market_cap is null (for example: No share count in the company's recent SEC filings); null otherwise
is_adrboolean or nullThe primary ticker is an ADR: shares_outstanding counts ordinary shares
ordinary_per_adsnumber or nullOrdinary shares per ADS, for ADRs whose ratio we hold
public_floatnumber or nullPublic float reported on the latest annual report, USD
public_float_as_ofdate or nullDate of that figure
fund_ownership_pctobject or nullShare of the requested (or primary) ticker's class that 13F funds hold, at the newest complete report quarter: {ticker, value (percent of that class's shares outstanding, 2 decimals, not capped: it can pass 100), as_of_period (quarter end), class ('Class A', 'Common', or null for a one-class company), shares_basis (class_count: the class's own count; company_total: a one-class company's total; ads: ordinary shares divided by the ADS ratio; own_ads: our ADS count), holders, fund_shares, shares_outstanding, shares_as_of, shares_source (cover, dei, own or override), partial_period}. partial_period is a newer quarter whose 13F reports are still arriving ({as_of_period, value, funds_reported, funds_expected}); its value is a lower bound. Null when the share count of the class cannot be matched or is missing
fund_ownership_statusstring or nullok when fund_ownership_pct has a figure; implausible when the figure was above 150% of the class (a wrong share count, so none is given); null when there is none
source_urlstringThe company's filings on SEC EDGAR
profile_updated_atdatetime or nullWhen the SEC profile was last read
first_seen_atdatetime or nullWhen we first stored the profile

GET /api/v1/companies/{ticker_or_cik}/financials pro

Company financials: quarterly and annual figures and the revenue split

Financial statement figures of one company from the XBRL data of its SEC filings (mostly 10-K and 10-Q): for the latest 8 quarters and the latest 2 fiscal years, revenue, gross profit, operating income, net income, diluted EPS, operating cash flow, cash and equivalents, long-term debt and shares outstanding, and the newest revenue split by business segment, geography and product. Every figure is an object with its value, unit, XBRL concept, whether it is derived, the period end, the fiscal year and period of the filing that reported it (not the period's own label; each period has fiscal_year and fiscal_quarter), the form, the accession number, the filing date and a link to the filing on SEC EDGAR. Returns a single object in data. Concept fallbacks, tried per period in this order: revenue is Revenues, then RevenueFromContractWithCustomerExcludingAssessedTax; diluted EPS is EarningsPerShareDiluted, then EarningsPerShareBasic (a company that reports one combined figure tags it basic; the concept field says which was used); shares outstanding is the balance sheet count (CommonStockSharesOutstanding), then the cover page count (EntityCommonStockSharesOutstanding, used when it is dated on the period end or up to 75 days after it). Gross profit is GrossProfit; when the company tags none it is revenue minus CostOfRevenue from the same filing and carries derived: true. Periods are the SEC's calendar-aligned frames (frame CY2025Q3 is the fiscal quarter that ends closest to the end of the third calendar quarter of 2025), not fiscal labels. A fourth quarter has balance sheet figures from the 10-K; the 10-K reports the whole year, so its revenue, gross profit, operating income and net income are derived (derived: true, derived_from names the accessions) as the annual value minus the first three quarters of that fiscal year, only when all four exist for the same concept and unless the 10-K reports the quarter itself. Fourth-quarter EPS is never derived. Operating cash flow exists for a first quarter and for a year only: 10-Q cash flow statements are year to date, those six and nine month figures are not stored, and quarterly cash flow is therefore not derived. long_term_debt is the noncurrent part only, not total debt. Companies that file 20-F or 40-F, funds and trusts have few or no figures, and banks and insurers often lack the revenue, gross profit, operating income and long-term debt concepts. The latest filing of a period wins, so some annual figures come from a proxy statement (DEF 14A, often rounded): form_type says which. The revenue split is the newest period in the company's face financial statements with one dimension (segment, geography or product); members are the company's own XBRL names, not normalised across companies, and the members of a split need not add up to total revenue. Its period_end is rounded to a month end and can lag the newest quarter by one quarter. Information from public filings, not investment advice. Provenance: filing_url on every figure and on revenue_breakdown.

ParameterTypeDescription
ticker_or_cik (path)stringA ticker symbol (NVDA, BRK-B) or a SEC CIK (1045810).
quartersintegerHow many of the latest quarters to return, 1 to 20 (default 8). The data holds the last five calendar years. Default: 8.
yearsintegerHow many of the latest fiscal years to return, 0 to 5 (default 2). Default: 2.
Response fields (10)
FieldTypeDescription
cikintegerSEC CIK (the stable company key)
tickerstring or nullPrimary active ticker
namestringCompany name
fiscal_year_endstring or nullMMDD
currencystringUSD: dollar amounts are US dollars, EPS is dollars per share
quarterlyarrayThe latest quarters, newest first (quarters sets how many): { frame (CY2025Q3), fiscal_year and fiscal_quarter (the company's fiscal calendar; null when unknown), period_start (null for a quarter with balance sheet figures only), period_end, derived_skipped (null, or { metric: reason } for a fourth-quarter figure not derived because of the form it would come from), then one entry for each of revenue, gross_profit, operating_income, net_income, eps_diluted, operating_cash_flow, cash_and_equivalents, long_term_debt and shares_outstanding }. Each entry is { value, unit (USD, USD/shares or shares), concept (the XBRL tag, taxonomy:tag), derived, derived_from (how a derived figure was worked out and the accessions used; null otherwise), period_end, filing_fiscal_year, filing_fiscal_period, form_type, accession_no, filed_date, filing_url }, or null when the company reports none. A fourth quarter's income statement figures are derived from the year (derived: true) when all inputs exist
annualarrayThe latest fiscal years, newest first (years sets how many), same shape as quarterly with frame CY2025; the balance sheet figures are those at the year end. Each entry is { value, unit (USD, USD/shares or shares), concept (the XBRL tag, taxonomy:tag), derived, derived_from (how a derived figure was worked out and the accessions used; null otherwise), period_end, filing_fiscal_year, filing_fiscal_period, form_type, accession_no, filed_date, filing_url }, or null when the company reports none
revenue_breakdownobject or nullNewest revenue split (period_end is month-end rounded and can lag the newest quarter by one quarter): { period_end, period_type (quarter or year), unit, filing_fiscal_year, filing_fiscal_period, form_type, accession_no, filed_date, filing_url, segments, subsegments, geographies, products }. Each of the four lists holds { member (the company's XBRL member name), label (a readable form of it), value (USD), concept (the revenue tag), segment_total (true when tagged as an operating segment before eliminations) }, largest first; a list is empty when the company reports no such split. Null when the company has no split
notesarrayHow to read the figures: periods, the fourth quarter, cash flow and debt
source_urlstringThe company's filings on SEC EDGAR

GET /api/v1/politicians free

Members of Congress, current and former (since 2012)

Members of the US House and Senate from the unitedstates/congress-legislators project, ordered by last name. Keyed by Bioguide id. Use /politicians/{bioguide_id} for committees and a trading summary, and /congress-trades?bioguide_id= for the trades.

ParameterTypeDescription
qstringWords of the name (every word must appear), e.g. 'pelosi' or 'nancy pelosi'.
chamberhouse | senateChamber of the member's latest term.
statestringTwo-letter state or territory code.
partystringParty, e.g. Democrat, Republican, Independent.
is_currentbooleantrue = sitting members only, false = former members only.
updated_sincedatetimeOnly rows we first stored after this time (the first_seen_at field), as an ISO 8601 date or time (UTC when no zone is given). Poll with the largest first_seen_at you have seen.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (20)
FieldTypeDescription
bioguide_idstringBioguide id (the stable key for members of Congress)
namestringOfficial full name
first_namestringFirst name
last_namestringLast name
partystring or nullParty
caucusstring or nullCaucus, for independents
statestringState or territory
districtinteger or nullHouse district (0 at-large / delegate); null for senators
chamberstringhouse or senate (latest term)
is_votingbooleanFalse for delegates and the resident commissioner
is_currentbooleanSitting member
term_startdateStart of the latest term
term_enddateEnd of the latest term (scheduled, for sitting members)
urlstring or nullOfficial website
photo_urlstring or nullPublic-domain portrait (may 404)
fec_candidate_idsarrayFEC candidate ids
opensecrets_idstring or nullOpenSecrets id
govtrack_idinteger or nullGovTrack id
source_urlstringBioguide biography page
first_seen_atdatetimeWhen we first stored the member

GET /api/v1/politicians/{bioguide_id} free

One member of Congress with committees and a trading summary

Profile of a member, current committee assignments (with leadership titles) and counts of their reported trades. Returns a single object in data.

ParameterTypeDescription
bioguide_id (path)bioguideBioguide id, e.g. P000197.
Response fields (22)
FieldTypeDescription
bioguide_idstringBioguide id (the stable key for members of Congress)
namestringOfficial full name
first_namestringFirst name
last_namestringLast name
partystring or nullParty
caucusstring or nullCaucus, for independents
statestringState or territory
districtinteger or nullHouse district (0 at-large / delegate); null for senators
chamberstringhouse or senate (latest term)
is_votingbooleanFalse for delegates and the resident commissioner
is_currentbooleanSitting member
term_startdateStart of the latest term
term_enddateEnd of the latest term (scheduled, for sitting members)
urlstring or nullOfficial website
photo_urlstring or nullPublic-domain portrait (may 404)
fec_candidate_idsarrayFEC candidate ids
opensecrets_idstring or nullOpenSecrets id
govtrack_idinteger or nullGovTrack id
source_urlstringBioguide biography page
first_seen_atdatetimeWhen we first stored the member
committeesarrayCurrent committee and subcommittee assignments
tradingobjecttrades, purchases, sales, first_trade_date, last_trade_date, last_filing_date

GET /api/v1/politician-net-worth free

Estimated net worth of House members, from their annual financial disclosures

An estimate of a House member's household net worth for each report year, as a range: assets minus liabilities from Schedules A and D of the annual financial disclosure, using the value brackets the form reports (low = lowest ends of the asset brackets minus highest ends of the debt brackets, high = the reverse, middle = the midpoints). Estimated from the member's annual disclosure: assets minus liabilities, using the reported value ranges. Excludes the primary residence. Not audited. An open-ended top bracket ("Over $50,000,000") counts at its lower bound, so includes_open_ended_bracket marks a figure that is at least; the top bracket is open-ended. Without bioguide_id or year the list is the ranking of members at their latest report year, highest middle estimate first. Reports from the Clerk of the House are text PDFs, except some scanned paper filings, which are read by a model (read_from_scanned_report_by_model). House members only: Senate annual reports are not collected. When the member filed a newer report that has not been read, the row says so (newer_report_not_read, newer_report_year, newer_report_status). Paid-off debts and the primary residence are left out. If an amendment lists under half as many lines as the full report of that year, the full report is used (report_choice). Provenance: source_url, the report on the House Clerk's site. Free to use; this data carries no advertising.

ParameterTypeDescription
bioguide_idbioguideOne member of Congress (Bioguide id): every report year we have for them, newest first.
yearintegerOnly this report year (the year the report covers; it is filed the following spring).
latestbooleantrue = only each member's latest report year. Default true when you give neither bioguide_id nor year, so the list is a ranking of members at their latest report.
is_currentbooleantrue = sitting members only, false = former members only.
limitintegerRows per page, 1 to 1000 (default 100). Default: 100.
cursorstringOpaque cursor: pass the next_cursor of the previous page, with the same filters.
Response fields (25)
FieldTypeDescription
bioguide_idstringBioguide id of the member
namestringOfficial full name
partystring or nullParty
statestringState or territory
districtinteger or nullHouse district (0 at-large / delegate)
chamberstringhouse
is_currentbooleanSitting member
report_yearintegerThe year the report covers
report_typestringannual_report, or amendment when an amended report is the latest of that year
fileddate or nullDate the report was filed
net_worth_low_usdnumberLowest possible net worth: asset brackets at their lower ends minus debt brackets at their upper ends (can be negative)
net_worth_mid_usdnumberAssets at the middle of their brackets minus debts at the middle of theirs
net_worth_high_usdnumberHighest possible net worth: asset brackets at their upper ends minus debt brackets at their lower ends
assets_listedintegerAsset lines on the report
liabilities_listedintegerLiability lines on the report
includes_open_ended_bracketbooleanAn asset or debt is in an open-ended bracket ("Over $50,000,000") and counts at its lower bound: the true figure is higher
read_from_scanned_report_by_modelbooleanThe report is a scanned paper filing, read by a model; it can contain errors
doc_idstringThe Clerk's document id
report_choicestringWhy this report was used for the year: only_report, latest_report, or newer_report_incomplete (a later filing lists under half as many assets and liabilities, so the fuller report is used)
newer_report_not_readbooleanThe member filed a report for a later year than report_year that has not been read (true only on the member's latest row)
newer_report_yearinteger or nullThe later report year that has not been read
newer_report_statusstring or nullscanned_not_read (a scanned paper filing not read yet) or could_not_be_parsed
based_on_notestring or nullPlain sentence: which year the estimate is based on and why the newer report is missing
methodstringHow the estimate is made
source_urlstringThe report (PDF) on the House Clerk's site

GET /api/v1/themes free

Published themes

The published themes: curated company lists (AI chips, nuclear and uranium, defense, government stakeholders and others) and lists built from our own congressional, insider and federal-contract data. A theme is a published list of companies chosen under a stated rule: information, not a recommendation or investment advice. The whole catalogue is returned in one response (next_cursor is always null). Use /themes/{slug} for members and activity.

Response fields (7)
FieldTypeDescription
slugstringTheme identifier, also the last segment of its page URL
namestringTheme name
kindstringcurated (members chosen by people under a published rule) or rule (computed from our data)
groupstringCatalogue group: tech, energy, health-finance, government or data
summarystringOne-line description
company_countinteger or nullCompanies listed; null for rule themes, whose size comes from the data
page_urlstringThe theme's page on 13f.ai

GET /api/v1/themes/{slug} free

One theme with member activity

One theme: its membership rule, review date, change log, the case commonly made and the risks commonly cited, comparable ETFs and related themes. A theme is a published list of companies chosen under a stated rule: information, not a recommendation or investment advice. For a curated theme, companies lists each member with its tier and role and, over the last 12 months, the distinct insiders buying and selling on the open market (Form 4 codes P and S), congressional purchases, sales and distinct members, new federal award dollars and lobbying dollars; totals cover the whole theme. For a rule theme (congress-most-bought, insider-buying-clusters, federal-contract-leaders), members is the current ranked list and fields explains value and detail. For congress-by-party, party_lists holds four lists (Democrat and Republican, bought and sold) in place of members, and traders gives the number of members of each party with at least one trade. Returns a single object in data.

ParameterTypeDescription
slug (path)stringThe theme slug from GET /themes, for example ai-chips or congress-most-bought.
limitintegerCompanies (curated themes) or ranked members (rule themes) to return, 1 to 50 (default 25). Totals always cover the whole theme. Default: 25.
Response fields (23)
FieldTypeDescription
as_ofdateThe date the activity figures were computed for (New York time)
slugstringTheme identifier
namestringTheme name
kindstringcurated or rule
groupstringCatalogue group: tech, energy, health-finance, government or data
descriptionstringWhat the theme covers and does not cover
rulestringThe membership rule in plain words
revieweddateDate the membership was last reviewed
changesarrayChange log: {date, change}
case_commonly_madearrayPoints commonly made in favor of the theme, attributed as such
risks_commonly_citedarrayRisks commonly cited, same weight as the case
comparable_etfsarrayListed ETFs with an overlapping stated focus, for reference only (not an endorsement): {ticker, name}
relatedarrayRelated themes: {slug, name}
activity_windowobject or nullPeriod the activity figures cover: {from, to}, dates
page_urlstringThe theme's page on 13f.ai
companiesarray or nullCurated themes: companies in catalogue order with tier, role and 12-month activity counts; null for rule themes
totalsobject or nullCurated themes: totals across the whole theme (companies, insider_buyers, insider_sellers, congress_purchases, congress_sales, new_federal_awards_usd, lobbying_usd); null for rule themes
fieldsstring or nullRule themes: what value and detail mean for this rule; null for curated themes
membersarray or nullRule themes with one ranked list: ranked members {rank, cik, name, ticker, value, detail, last_date, page_url}; null for curated themes and for congress-by-party
party_listsarray or nullcongress-by-party only: four lists {party (Democrat or Republican), side (bought or sold), members: [{rank, cik, name, ticker, members_trading, trades, disclosed_amount_min, disclosed_amount_max, last_date, page_url}]}; null for every other theme
tradersobject or nullcongress-by-party only: members of each party with at least one trade in the window, {democrat, republican}; null for every other theme and when the data could not be loaded
disclaimerstringThis is information, not a recommendation or investment advice
activity_errorstring or nullSet when the activity figures could not be loaded; the theme's text is still returned

CSV and bulk files

Both are part of the Premium plan.

curl -H "Authorization: Bearer $KEY"   "https://13f.ai/api/v1/congress-trades?since=2026-01-01&format=csv" -o congress.csv

curl -H "Authorization: Bearer $KEY" "https://13f.ai/api/v1/bulk?dataset=congress_trades"
curl -o congress_trades-001.csv.gz "<url from the answer>"

MCP server

The same data as tools for AI assistants, over MCP (Streamable HTTP, stateless, JSON responses) at https://13f.ai/api/mcp. Authentication is signing in with OAuth (below) or an API key as a header: Authorization: Bearer <key>. All tools are read-only.

Basic and Premium tools. Congressional trades, members of Congress, bills in Congress, roll-call votes and corporate PAC donations are free for every account that signs in through OAuth from Claude, ChatGPT, Gemini or Grok, Basic plan included. Tools marked Basic below work for those accounts. Tools marked Mixed return their congressional part and, in place of the rest, a short message that it needs the Premium plan. Tools marked Premium answer with that message.Which apps count as Basic. The Basic plan works when the app that connects is Claude, ChatGPT, Gemini or Grok. We decide that from the redirect address used when the person approves the app (it must be the callback of one of those assistants), not from its name or user agent. A Basic account that signs in from any other client (Claude Code, Cursor, LM Studio, Open WebUI, your own code) is answered with 402 payment_required, which MCP clients show as a message that the app needs the Premium plan; Premium, trial and complimentary accounts work from any client. API keys, on the MCP server and on the REST API, are part of the Premium plan. Basic accounts are limited to 30 requests per minute and 500 calls a UTC day (the day count resets at 00:00 UTC), the minute limit counted separately on each server instance.

ToolPlanWhat it does
search_entitiesBasicFind a company (by name or ticker), a member of Congress (by name), an institutional fund manager (by name) or an insider (a person who files SEC Forms 3, 4 and 5, by name) and get the identifiers the datasets use: ticker and CIK for companies, Bioguide id for politicians, manager CIK for 13F funds, owner CIK for insiders. Forgiving: misspellings ('Pelosy', 'Tubberville'), nicknames ('Bernie Sanders', 'Jon Tester' or 'Jonathan Tester', 'AOC'), brand names ('SpaceX', 'Google', 'Facebook'), former company names and punctuation or suffix noise (Inc, Corp, &, .com) all resolve, so the name needs no correcting first. Free for every account.
get_company_overviewMixedOne-call briefing on a public company: profile (sector, estimated market cap (market_cap, our estimate: shares from the latest SEC filing x last Tiingo close; market_cap_basis estimated, with market_cap_reason when it is null), shares with shares_as_of, and fund_ownership_pct: the share of the ticker's own class that 13F funds hold at the newest complete quarter; null, with fund_ownership_status implausible, when it would pass 150%), recent open-market insider trades with 12-month buy/sell totals, trades by members of Congress, institutional (13F) ownership with quarter-over-quarter changes, recent lobbying spend, federal contract awards and the latest new-data events. Each section has totals and source links. Sections that fail report an error without sinking the rest. For a Basic account the answer is the company's name and identifiers plus the congress trades section; the other sections are replaced by an upgrade message (not_included). The congressional part is free for every account; the other datasets need the Premium plan and a Basic account gets an upgrade message in their place. Rows carry their official source link.
get_politician_overviewBasicProfile of a member of Congress (party, state, chamber, term), their committee assignments with leadership titles, their most recent reported stock trades and trade totals (count, purchases, sales, most-traded tickers), and a small campaign_finance block for the latest two election cycles (raised, spent, cash on hand, debts, with the date of the last FEC report and a link; the full figures are a separate dataset). Takes a Bioguide id, or a name to look up. Senate trades come from an independent public mirror of the Senate's electronic reports (since 2014, no paper filings); each trade links to the official report. Each row carries its official link (source_url). Free for every account.
get_congress_tradesBasicStock trades disclosed by members of Congress under the STOCK Act, newest transaction first, with the member, party, state, company (ticker, CIK), transaction type, amount range (amount_min to amount_max in USD; amounts are brackets, not exact) and a link to the filing. Returns a page of rows plus total counts of matching trades. One person's trades: member (a name like 'Nancy Pelosi' or a Bioguide id); ticker is only for stock symbols such as NVDA and never takes a name. Filter by member, company (ticker or cik), chamber, transaction type, committee overlap and dates. Disclosures arrive up to ~45 days after the trade. Each row's committee_overlap lists the committees the member sits on whose jurisdiction covers the traded company's industry (committee and industry), or is absent; committee_overlap_only = true returns only those trades. Committee overlap describes jurisdiction only; it does not show that a trade was improper. It uses committee assignments in the 119th Congress and checks trades dated since 2025-01-03. chamber is house or senate. Senate rows come from an independent public mirror of the Senate's electronic reports (the Senate's site blocks automated access): reports filed since 2014, no paper filings, a small share of lines missing, and amendments are not marked; source_url is always the official report. Each row carries its official link (source_url). Free for every account.
get_exec_tradesBasicStock trades reported by the President, the Vice President, Cabinet members, other Senate-confirmed officials and White House staff on OGE Form 278-T (the White House publishes the President's), newest transaction first: the official (name, position, agency), the asset as the filer printed it, the transaction type, the transaction date, the amount range, the date the report was filed and a link to the official report. Returns a page of rows plus the number of matching trades. Form 278-T is the periodic transaction report that senior executive-branch officials file with the Office of Government Ethics. They must report each trade over $1,000 within 30 days of being notified of it, and no later than 45 days after the trade. Amounts are ranges, not exact figures. Filter by official (words in the name, e.g. 'wright'), company (ticker or cik, for assets matched to a listed company), kind of filer, transaction type and dates. The form has no ticker column: asset_description is the asset as printed and many assets are bonds, funds or private holdings with no ticker (cik is then absent). Amounts are brackets (amount_min to amount_max in USD; amount_max is null for an open-ended bracket), not exact figures. When amount_text is null the form left the amount blank and endnote usually says it was not more than $1,000. transaction_type 'unknown' means the filer left the type blank (not stated). A row with read_from_scan_by_model true comes from a scanned report (the President's) read by a model and can contain errors. Spouse and dependent-child trades are not told apart. Reports can be filed up to 45 days after a trade, so recent trades may be missing. Public records under 5 U.S.C. 13107(c): used here for dissemination to the public, with no advertising. Each row carries its official link (source_url). Free for every account.
get_billsBasicBills and resolutions in the House and Senate from Congress.gov, latest action first, one row per measure: the citation (bill_label, e.g. 'H.R. 1234'), title, sponsor with party and state, policy area, introduced date, latest action with its date, number of cosponsors, the Congress it belongs to and a link to the bill on congress.gov. Returns a page of rows plus total counts of matching measures. Filter by sponsor (member: Bioguide id or name), chamber it was introduced in, policy area, words in the title (keyword), Congress number (e.g. 119) and dates (since / until apply to the latest action). Introducing a bill is not the same as passing it: most bills never get a vote. Policy areas are assigned after introduction, so the newest bills may have none. Each row carries its official link (source_url). Free for every account.
get_pac_donationsBasicGifts that company political action committees (PACs) made to candidates for Congress, from FEC reports, newest first: the company behind the PAC (ticker and CIK when we matched it to an SEC filer), the PAC, the recipient (a member of Congress with party and state, or the candidate's committee name), the amount in US dollars, the date the PAC reports for the gift, the election it is for, the two-year cycle and a link to the FEC page. Returns a page of rows plus the number of matching gifts and their total dollars (counted over the newest 10,000 matches at most). Filter by company (ticker or cik), recipient (member: Bioguide id or name), committee, party, chamber, cycle (e.g. 2026), dates and minimum amount. A WHOLE COMMITTEE OR CHAMBER IS ANSWERED IN ONE QUERY: committee takes a committee code or name (e.g. 'House Financial Services', HSBA, 'Senate Banking') and covers its current members together, and group_by 'pac' returns the top PACs (company, total dollars, number of gifts, number of recipients) while group_by 'recipient' returns the top recipients (total dollars, gifts, number of PACs), each with an FEC link. Example: top PACs giving to the House Financial Services Committee this cycle = committee 'HSBA', group_by 'pac'. By default only PACs whose company we matched to an SEC filer are listed (set include_unmatched true for every PAC), except with committee, where every corporate PAC giving to the committee's members is counted (private companies and partnerships too; each PAC group has a company_label such as 'SEC-listed: UBS' or 'not SEC-listed'; set include_unmatched false for listed companies only). The data covers corporate PACs only: trade associations, membership groups (e.g. the American Bankers Association, AICPA, Realtors) and labor unions are not included, refunds are left out, and when you give no company, member, committee, cycle or dates the list covers the last 90 days (with group_by or committee: the current two-year cycle). A gift to a campaign is not a vote and says nothing about intent; FEC reports arrive monthly or quarterly, so the newest weeks are incomplete. Free for every account.
get_campaign_financeBasicWhat a candidate's campaign raised and spent in a two-year election cycle, from the FEC's candidate summary files (2016 on): total receipts, total disbursements, cash on hand at the start of the cycle and at the last report, debts, the candidate's own loans, and receipts from individuals, from PACs and from party committees, with the date of the last report included (coverage_end_date) and a link to the candidate's FEC page. Newest cycle first, biggest fundraiser first within a cycle. member (a Bioguide id or a name) selects one member of Congress across cycles; or filter by candidate_id, cycle (e.g. 2026), office (house, senate, president), state, party (FEC code such as DEM or REP), status (incumbent, challenger, open_seat), members_only and min_receipts. With cycle and office and no member, the first rows are the top fundraisers. Amounts are for the whole cycle up to coverage_end_date, not a single election, and receipts include transfers between a candidate's own committees. Totals only: no individual donor is named or available (federal law bars using contributors' names commercially); what employees of a company gave in total is shown as employee giving by party on the company's page on the website. A donation to a campaign is not a vote and says nothing about intent; FEC reports arrive monthly or quarterly, so the newest figures lag. Free for every account.
get_politician_net_worthBasicEstimated net worth of a member of the US House, from the annual financial disclosure (Ethics in Government Act): assets minus liabilities (Schedules A and D), as a LOW, MIDDLE and HIGH figure in US dollars for each report year, with the number of assets and liabilities listed and a link to the report (source_url). The form reports value brackets, not exact figures, so the range is wide by construction: low counts every asset at the bottom of its bracket and every debt at the top, high the reverse, middle the midpoints. With member (Bioguide id or name): every report year we have for them, newest first; with no member: the ranking of sitting House members at their latest report year, highest middle estimate first (rows sets how many, include_former adds former members, year limits to one report year). Estimated from the member's annual disclosure: assets minus liabilities, using the reported value ranges. Excludes the primary residence. Not audited. A row with includes_open_ended_bracket true has an asset or debt in an open-ended bracket ("Over $50,000,000") counted at its lower bound, so the true figure is higher ('at least'). A row with read_from_scanned_report_by_model true comes from a scanned paper report read by a model and can contain errors. A latest row with newer_report_not_read true means the member filed a report for a later year (newer_report_year) that is a scanned paper filing not read yet or could not be parsed, so the estimate is based on the earlier report_year (based_on_note says it). Paid-off debts and the primary residence are left out; when an amendment lists under half as many lines as the full report of its year, the full report is used (report_choice). House members only; Senate reports are not collected. A member with no row has no parsed report yet (the newest reports arrive from May of the year after). This is information, not a valuation or advice. Each row carries its official link (source_url). Free for every account.
get_votesBasicRecorded (roll-call) votes of the House and the Senate, newest first, from 2015: the chamber, Congress, session and roll number, the date, the question put to the chamber (e.g. 'On Passage'), the result, the yea / nay / present / not-voting counts, a description, the measure it was on (bill_label, e.g. 'H.R. 1234', with its title and a congress.gov link when we have the bill) and source_url, the official page of the vote (senate.gov roll call vote page or clerk.house.gov). Rows are ordered by vote_date (the day the chamber voted), newest first, then by roll number, so the first row is the most recent vote. Returns a page of rows plus the number of matching votes. Filter by member (Bioguide id or name: then every row also has that member's position, Yea, Nay, Present or Not Voting, and the reply counts them), by bill (e.g. 'H.R. 1234' or 'S.J.Res. 7', with congress for the Congress of the bill), by position (needs member), chamber, session, words in the question or description (keyword) and dates. Without a bill filter, congress is the Congress of the vote. Only votes on the record are included: voice votes and unanimous consent are not roll calls, so a bill can pass without a row here. Quorum calls, nominations and the election of the Speaker have no bill. A vote on a rule is tied to the rule's resolution, not the bill it makes in order. Senate votes are read from Voteview (UCLA, voteview.com) and can trail the vote by a few days; they have no time of day and leave out the Vice President's tie-breaking vote. roll_number is the chamber's own vote number and restarts every session; voteview_url (Senate rows) is a secondary link that numbers votes across the whole Congress, so its number differs. A vote is not the member's whole position on an issue. Each row carries its official links. Free for every account.
get_insider_tradesPremiumTransactions by company insiders (officers, directors, 10% owners) reported on SEC Form 4/5, newest first, with insider name and role, shares, price, total value and a link to the SEC filing. By default only open-market purchases and sales (codes P and S) are returned, the usual signal; set open_market to false to include grants, option exercises, tax withholding, gifts. Includes buy/sell counts and dollar totals for all matching rows. A list needs a ticker or cik. group_by 'insider' (or 'company') ranks sellers or buyers in one query, with no paging through rows: it returns the biggest insiders by total dollars with transaction counts and a Form 4 link, over all companies or for one (add ticker or cik), for a date range (since / until; default the last 90 days) and side 'sell' (default) or 'buy'. Example: who sold the most stock this quarter = group_by 'insider', side 'sell', since the first day of the quarter. Totals are shares times price as filed, open-market lines only unless you set txn_code; amendments are left out of rankings. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_institutional_holdersPremiumWho holds a company among institutional managers filing Form 13F: number of holders, total shares and value, how many managers increased, decreased, opened or closed positions versus the prior quarter, and the largest holders with their change. Or, with manager_cik, the largest positions of one manager. 13F data is quarterly and filed up to 45 days after quarter end; the latest quarter is chosen automatically unless it is still mostly missing. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_fund_filing_changesPremiumWhat one institutional manager's 13F report changed against its previous quarter: reported value and position counts, how many positions are new, added to, trimmed and exited, the 10 largest of each by estimated dollars (shares changed times the later price per share), puts and calls kept apart, and a two-to-four sentence summary written by an AI from those changes alone and checked against them (ai_summary; null when none exists). Defaults to the manager's newest report; period (a quarter end, YYYY-MM-DD) selects another. Common shares only; a report with no previous quarter on record, or one that lists far fewer positions than its cover page declares, is returned without a comparison and says why. manager_cik is the manager's SEC CIK. 13F reports are quarterly, filed up to 45 days after quarter end; changes in shares are not always decisions (index tracking, splits and mergers move positions too). Needs the Premium plan; a Basic account gets an upgrade message instead of data.
compare_fund_holdingsPremiumCompares one institutional manager's Form 13F positions in two of the quarters we hold (about six, any two): how many positions are new, added to, trimmed, exited or unchanged, and the positions themselves with the change in shares and in reported value, largest change in value first by default. manager_cik is the manager's CIK; period is the later quarter and prior_period the earlier one, by default the newest quarter and the one before it. Filter with change (new, added, trimmed, exited, unchanged), q (name or ticker) and position_type=options for puts and calls (their value is the notional amount of the shares they cover). Shares of the earlier quarter are adjusted for stock splits in between. A change in shares is not always a decision (index tracking, mergers and share-class changes move positions too) and value changes include price moves. This is information from public filings, not investment advice. 13F reports are filed up to 45 days after the quarter ends and list long US-listed positions only (no short sales or cash). This is information from public filings, not investment advice. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_lobbyingPremiumLobbying Disclosure Act filings, newest first: the client company, the lobbying firm, what was paid or spent, the issue codes lobbied on and a link to the filing. Totals (income paid to firms, expenses of self-filers) cover all matching filings. Filter by company, year, issue code and dates. With former_government_staff true it returns instead the lobbyists whose filings say they once worked in a member of Congress' office, on a committee or in the executive branch: one row per lobbyist, client company and office, with the office as written, the job title, the years when stated, the lobbying firm, the latest filing and a link to it. A member is linked by Bioguide id only when exactly one member of Congress fits the name, chamber, first name and years; otherwise the name stays as written. Each row reflects what was disclosed at the time of filing, and a lobbyist listed may no longer be registered. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_lobbying_and_contractsPremiumEach company's reported lobbying spend next to the federal contract awards it received, by calendar year (the last six years and the current year to date), with the corporate PAC gifts, the top issue areas and agencies lobbied, the awarding agencies, and the departments that appear on both sides. For one company (ticker or cik) it gives the year rows, the last 12 months, and for one year the lobbying reports counted (with their lda.senate.gov links) and the largest contract awards (with their usaspending.gov links). Without a company it ranks companies by contract dollars, lobbying dollars or the number of shared agencies, for the last 12 months or for one year. Each report is counted once (an amendment replaces the original); the total is the company's own report when it files one for the quarter (it includes payments to hired firms), otherwise the hired firms' reported income. Contracts are awards of $1 million or more, counted in the year of first obligation at the total obligated to date. Lobbying and contract awards are reported separately; showing them together does not mean one caused the other. The two figures are not combined or divided. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_government_contractsPremiumFederal contract awards from USAspending, most recently modified first: awardee (matched to an SEC company where possible, including via parent company), agency, amount obligated to date (USD), description and a link to the award. Totals cover all matching awards. Filter by company, agency and dates. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_ipo_filingsPremiumWhich companies are going public: new and upcoming IPOs (this week, this month or any date range), from SEC registration statements (S-1, S-1/A, F-1, F-1/A), final prospectuses (424B4) and withdrawals (RW), one row per registration (file number 333-...), latest activity first. status is filed, amended, priced or withdrawn; is_ipo separates real initial public offerings from resale registrations and follow-ons by listed companies (set ipo true for IPOs only); is_spac marks blank-check companies (spac false hides them). Rows carry the proposed ticker and exchange when the prospectus states them, the maximum registered (offering_amount_usd is the maximum aggregate offering price in the S-1 / F-1 filing-fee table, used to compute the SEC fee: a ceiling, often a round placeholder such as $100 million or $1 billion, NOT the amount raised, and only machine-readable for filings since mid-2025, so it is often null) and, once priced, the amount raised (amount_raised_usd is price_per_share times shares_offered from the 424B4 cover, the base deal without any over-allotment option; null before pricing; price_per_share and shares_offered come from the 424B4 cover), and links to the SEC filing pages. summary, when present, is a short AI-written summary of the latest S-1 / F-1 amendment (bullets on what the company does, headline financials, use of proceeds, who controls it and specific risks, the lead underwriters, and read_from, the filing it was read from with its SEC link); it is information read from the filing, not investment advice, and is a fixed one-line note for a blank-check company. A ticker or cik filter also finds a pre-IPO company by the ticker it proposes. Filters: status, spac, ipo, company and dates (since / until apply to the latest filing). Returns total counts of matching registrations. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_planned_insider_salesPremiumSEC Form 144 notices, newest first: the notice an insider or other affiliate files before selling restricted or control shares, with the person, their relationship to the company, the shares and the value the filer typed, the broker's expected sale date, whether a Rule 10b5-1 trading plan is named (has_10b5_1_plan) and the sales they report for the last three months. A notice is a plan, not a sale: the person may sell fewer shares, later or not at all, and aggregate_market_value is the filer's own figure, not a trade price. This is information, not investment advice. Each row is linked to the first Form 4 in our data that reports an open-market sale (code S) of the same company by the same person within 90 days (form4_* fields; days_to_form4 is the days from the notice to that filing, days_to_sale to the first sale it reports). sale_reported_in_form4 false means we found none: the person may not have sold, may not have to file a Form 4 (an ordinary affiliate does not), or the Form 4 may not match by CIK or name. form4_matched_by 'name' can join two people with the same name. With no company given, the last 14 days (the feed page's window) unless you give dates. Filters: company, filer_cik, plan, followed (only notices with, or without, a Form 4 sale), min_value, dates (the filing date). Returns total counts of matching notices. Source links: filing_url (the notice) and form4_url. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_sec_enforcementPremiumThe SEC's own enforcement lists, newest first: litigation releases (the SEC's account of a court action: an allegation unless the release itself states a judgment), administrative proceedings (orders of the Commission, many of them settled) and trading suspensions (a pause in trading in one stock, usually ten business days; a pause, not a finding). The lists give the names of the respondents and a release number, not a summary, and we do not store the text of releases: title is those names, summary is a one-line factual description built only from the stored list entry (type, number, date, names, file number, linked documents, suspension period) and says nothing about allegations or outcomes, and url is the release on sec.gov, which says what the SEC alleges or orders. sec.gov often refuses automated readers; url is the release itself. Being named is not a finding about a company, and this is information, not investment advice. Names are matched to companies automatically (companies lists name, cik, ticker and tier for each). match_tier 'confident' is exactly a company's name, legal form included, and never a person's name, a bare one-word name or half of an "A and B" unless that half is a company by its legal form (for a trading suspension, the CIK printed in the order); 'possible' is a similar name that may be a different company: a possible match is not evidence that the company was charged or sued; include_possible adds those matches. Most respondents are people or private firms and match no company. A trading suspension carries the ticker symbol and the suspension period read from the order. With no company given, the last 60 days (the feed page's window) unless you give dates. Filters: company, release_type, include_possible, dates (the release date). Returns total counts of matching releases. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_dealsPremiumMergers, tender offers and going-private transactions grouped from SEC filings since 2015, one row per deal, latest filing first. The filings are tender offers (SC TO-T, SC 14D9), going-private statements (SC 13E3), merger registrations (S-4, F-4), merger proxies (PREM14A, DEFM14A, PREM14C, DEFM14C) and deal communications (425). deal_type is tender_offer, going_private, merger or registration (S-4 / F-4 only, which also cover debt exchanges and employee plans); company buybacks (issuer_tender: a company's own tender offer for its shares, mostly funds repurchasing shares every quarter) are left out unless include_buybacks is true or type names them. stage is only the furthest form seen (announced, registered, tender_offer, going_private, preliminary_proxy, final_proxy). subject is the company named as the subject most often, usually the target but not verified (a 425 can be filed by either side; S-4 and F-4 name only the registrant); filer is the other company that files most. Grouping is by rule, not by reading the documents: same SEC file number (005- or 333-), else the same two companies within 270 days, else one company's only open deal. 'grouping' says which was the strongest link; a filing that fits two open deals is left on its own and counted in ambiguous_filings, so one deal can appear as two rows and two deals of the same companies close together can appear as one. What this is NOT: it has no offer price, premium or terms (the filings' headers carry none and the text is not read), and no outcome: the filings never say whether a deal closed or was dropped, and last_filed_date is the latest filing, not a completion date. Information, not advice. A ticker or cik filter finds deals in which the company is named in any filing as subject, filer or co-registrant. Each row has the latest filing's SEC link and the most recent filings of the deal. Returns total counts of matching deals. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_private_placementsPremiumPrivate placements from SEC Form D notices since 2015, one row per Form D or Form D/A, latest first: the issuer (name, state, entity type, industry group, ticker when it is a listed company), every issuer CIK of the offering, the exemption (06b = Rule 506(b), 06c = Rule 506(c)), the security types, the date of first sale, the total offering amount, the amount sold so far, the amount remaining, the number of investors, sales commissions and the executive officers, directors and promoters named, as filed. Amounts are what the issuer typed: unaudited and not checked by the SEC; the issuer can write Indefinite (offering_indefinite true, amount null). An amendment's total_sold and investors_count replace those of the filing before it (same file_number), so the amount raised so far is the latest filing's figure, never a sum over filings. Pooled investment funds (hedge, private equity, venture funds) are about two thirds of the filings: unless pooled_funds is passed or a company is named, this tool leaves them out, as the Private placements page does; pooled_funds true returns only funds. listed true keeps only issuers with an active ticker (needs since, ticker or cik). What this is NOT: a Form D is a notice, not an approval, and does not say whether the money was raised on the stated terms or who the investors are (only how many); related persons are names only, with no holdings. Information, not advice. Every row has filing_url (the filing's index page on sec.gov / EDGAR) and primary_doc_url (the Form D document itself): both are official SEC pages. Returns total counts of matching filings. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_crypto_overviewMixedOne-call briefing on crypto from public filings: trades in cryptocurrency (and in crypto stocks and ETFs) by members of Congress, who holds the spot bitcoin and ether ETFs among 13F filers with the quarter-over-quarter change per fund, which public companies report holding crypto (fair value, cost, year-over-year change) and the weekly CFTC positioning of leveraged funds, asset managers and dealers in CME bitcoin and ether futures, in coins. Each section has source links; a section that fails reports an error without sinking the rest. For a Basic account the answer is the congress crypto trades section; the ETF holders, company treasuries and CME futures sections are replaced by an upgrade message (not_included). The congressional part is free for every account; the other datasets need the Premium plan and a Basic account gets an upgrade message in their place. Rows carry their official source link.
list_themesBasicLists the published themes: curated company lists such as AI chips, nuclear and uranium, defense and government stakeholders, plus lists built from our own congressional, insider and federal-contract data, each with slug, kind (curated or rule), group, one-line summary, company count and page URL. A theme is a published list of companies with something in common, chosen under a stated membership rule; it is information, not a recommendation or investment advice. Each theme's members and what the public record shows about them over the last 12 months are available by its slug. Free for every account. The list itself is a catalogue; what a Basic account sees of each theme's data varies by theme.
get_themeMixedReturns one published theme (a list of companies with something in common, chosen under a stated rule) with its membership rule, review date, change log, the case commonly made for it and the risks commonly cited, comparable ETFs and related themes. A theme is information, not a recommendation: membership is not a forecast and nothing here is advice. For a curated theme each company shows its tier and role and, over the last 12 months, distinct insiders buying and selling on the open market (Form 4 codes P and S), congressional purchases, sales and distinct members, new federal award dollars and lobbying dollars, plus totals across the whole theme; counts are of people and trades, not dollars of insider trading. The rule themes congress-most-bought, insider-buying-clusters and federal-contract-leaders return the current ranked list instead, and a fields note explains each member's value and detail. The rule theme congress-by-party returns party_lists instead of members: four lists (Democrat and Republican, bought and sold), each with the stocks traded by the most different members of that party, the number of trades and the disclosed dollar ranges added up, plus traders, the number of members of each party who traded. An unknown slug returns not_found. For a Basic account: congress-most-bought and congress-by-party are returned in full; a curated theme is returned with its description, rule and companies and only the congressional counts (purchases, sales, distinct members), with the insider, federal-award and lobbying figures replaced by an upgrade message (not_included); insider-buying-clusters and federal-contract-leaders answer with the upgrade message. The congressional part is free for every account; the other datasets need the Premium plan and a Basic account gets an upgrade message in their place. Rows carry their official source link.
get_recent_eventsMixedA single feed of newly added data across datasets: congressional trades, open-market insider buys and sells, 13D/13G stake filings, 8-K items, lobbying filings, federal contract awards, patent grants, status changes of clinical trials sponsored by public companies and FDA first approvals and device decisions for them. Each event has a one-line summary, the company or member, the event date, when we first stored it and a source link. Filter by companies (tickers), members of Congress (bioguide_ids) and datasets; since defaults to the last 7 days (max 90). For a Basic account only the congress_trades dataset is returned (a request for other datasets alone answers with the upgrade message; a mixed request returns the congressional events and not_included). The congressional part is free for every account; the other datasets need the Premium plan and a Basic account gets an upgrade message in their place. Rows carry their official source link.
get_short_interestBasicShort interest from FINRA, published twice a month (settlement dates around the 15th and month end, about a week late): the shares investors have sold short and not yet bought back. With no company, the most shorted stocks in the newest report, ranked by shares short, days to cover (shares short divided by average daily volume; stocks under a million shares short are left out) or change from the previous report. With a ticker or cik, that company's recent reports, newest first. Each row has the current and previous shares short, the percent change as FINRA publishes it, average daily volume, days to cover and a link to FINRA's file. This is open positions, not one day's short selling (daily short volume is a separate dataset). A high figure can reflect bets on a fall or hedges against other positions; it is not a forecast. Source: FINRA (each row carries source_url, FINRA's file). Free for every account.
get_layoff_noticesPremiumMass layoff and plant closing notices that employers file with state governments under the WARN Act, newest notice first, from twelve states (CA, KY, NE, NJ, OK, OR, PA, SC, TN, UT, WA, WI). Notices for one employer, state, place, date and type are added up: employees is the workers named and sites the number of lines. Only about one notice in ten is matched to a public company (ticker, cik); with no company given, only matched notices from the last 180 days are listed unless you set listed to false or give dates. New Jersey and Pennsylvania publish no notice date, so those rows only appear when you give a company. employees is null when the state gave no count. A notice is advance warning: the layoff can end up smaller, later or called off. Employer names are matched to companies automatically, so a match can be wrong. source_url is the state's WARN page (the notices are rows on it). Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_clinical_trialsPremiumIndustry-sponsored clinical studies registered on ClinicalTrials.gov, with phase, overall status, conditions, interventions (names and types), enrollment and the start, primary completion and completion dates. Views: completed_phase3 (Phase 3 studies marked completed, by completion date; the default with no company), updates (by last update posted; the default for a company), status_changes (changes of overall status that we observed, newest first; our history starts when we first stored each study, so it is not the registry's own history), upcoming (studies still open, soonest primary completion first). With no company only studies whose lead sponsor is matched to a public company are listed, from the last 90 days, unless you set listed to false or give dates. cik and ticker are set only for a confident name match (sponsor_match_method says how); a study with no ticker may still belong to a public company, and role any adds studies where the company is a collaborator. This is a register of studies, not results or a forecast: completed means the sponsor marked the study finished, not that the treatment worked; dates are the sponsor's own and an estimated date can pass without an update; terminated and withdrawn studies carry the sponsor's stated reason. source_url is the study's page on ClinicalTrials.gov. Information, not investment advice. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_fda_actionsPremiumDecisions the FDA has made, from openFDA: approved drug submissions (Drugs@FDA), 510(k) device clearances and PMA device approvals, newest decision first. action_kind is original (the first approval of a drug or device application), supplement (a later approved change, often minor) or clearance (510(k)). With no company and no filters, the first approvals of brand-name drugs and biologics (NDA and BLA) from the last 180 days; new_drugs false, source, application_type or kind select other lists, and a ticker or cik selects everything the FDA decided for that company. The applicant is the company named in the FDA's record; ticker and cik are set only for a confident name match (applicant_match_method says how), and most applicants (generic makers, private device makers) do not match, so a null ticker does not mean the applicant is private. This is a record of decisions already made: it is not a calendar of coming decisions, no review dates (such as PDUFA goal dates) are published, and a drug under review does not appear. The FDA's files can lag a decision by days to weeks. The data comes from openFDA; openFDA asks users not to imply that the FDA endorses their product or service, and this service is not endorsed by or affiliated with the FDA. Not for medical decisions. Information, not investment advice. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_h1b_applicationsPremiumH-1B, H-1B1 and E-3 labor condition applications (LCAs) that the US Department of Labor decided, newest decision first: employer, job title, SOC occupation, wage offered, prevailing wage, worksite and the number of workers asked for. An LCA is a required step before an H-1B petition. It is not a hire, a petition or a visa, and one application can cover several workers (total_workers): say 'H-1B labor applications', never 'H-1B approvals' or 'visas granted'. status is certified, certified_withdrawn (certified, then withdrawn by the employer), denied or withdrawn. With no company, the last 270 days of decisions; give a ticker or cik for one company (every year we hold), or since and until for a range. Wages are as filed with their unit; wage_annual restates the low end of the offered range per year (hour x 2080, week x 52, bi-weekly x 26, month x 12) and is null when the unit is unknown. The employer is matched to a public company by name, so a null ticker does not mean a private employer, and a similar name can be matched wrongly. Most employers are private companies, universities and staffing firms, which file for work at other companies. The files carry no worker names. The Department publishes about six weeks after each quarter ends, so the newest decisions are about two months old. source_url is the Department of Labor's disclosure data page. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_fha_lendingPremiumLoans the Federal Housing Administration insures, from HUD's own files, as totals. dataset=forward (home purchase and refinance) and dataset=reverse (reverse mortgages, HECM) give, for a company (ticker or cik) or a lender (the start of its name as HUD prints it), the loans, dollar volume, average rate and share of all loans per month. dataset=multifamily gives the apartment, senior-housing and care-home loans a company holds or services (active projects, balance, recent endorsements, servicing portfolio), or the largest holders when you name none. A joint venture is its own row (joint_venture true) and is never added to the company that part-owns it: it is flagged. The files list no borrower, so there is nothing about individuals. Every answer carries source_url (HUD's page) and a cite string. Until HUD's data is loaded the tool says it is not available yet. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_bank_financialsPremiumQuarterly figures from the call reports US banks file with the FDIC, summed for the banks each listed company owns: total assets and deposits, the uninsured share of deposits, commercial real estate as a share of loans and of equity, loans 30 or more days past due, nonaccrual loans and net charge-offs (total and for mortgages, commercial real estate, business loans, credit cards, auto and other consumer loans), capital ratios (common equity Tier 1, Tier 1 leverage), return on assets and net interest margin, with the change against the same quarter a year earlier. With a company (ticker, cik, or part of a company's or bank's name) it returns that company's quarters, newest first, up to 20. With none, it ranks the listed companies by one metric for a quarter (metric, quarter, order, limit up to 250). The figures are for the company's US bank subsidiaries as filed, not for the consolidated holding company, and the FDIC adds each quarter within about two months of quarter end. Banks owned by foreign parents are not linked to a listed company. Every row carries source_url (the FDIC's BankFind page) and a cite string. Until the data is loaded the tool says it is not available yet. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_card_metricsPremiumMonthly credit card performance as issuers and card trusts report it to the SEC: the annualized net charge-off rate, the 30+ day delinquency rate (90+ where given) and loans at month end, with the change against the prior month and against a year earlier. Issuer-wide series come from the issuer's own monthly 8-K: Capital One (domestic card, auto), Synchrony, American Express (U.S. consumer, small business), Bread Financial and Discover (until April 2025). Securitized card pools come from the monthly 10-D reports of seven card trusts (Chase, Citibank, BA, Capital One, American Express, Synchrony, Barclays Dryrock) and add portfolio yield, excess spread and the monthly payment rate. The answer keeps the two kinds in separate lists (issuer_wide, securitized_card_pools); a pool is only part of the issuer's loans, so the two are not additive and a pool is not the issuer's whole book. Each issuer defines its terms its own way (the definition is in each series and month); changes against the prior month and a year earlier are computed only between months on the same definition. American Express counts Card balances from its May 2026 report and is kept as two series (axp_us_*_balances, and axp_us_* to March 2026); Capital One's domestic card includes Discover from the June 2025 report. With a company (ticker or cik) it returns that company's series; with series keys it returns those; with nothing it returns all 16. months gives up to 120 months of each series (more than 36 needs three series or fewer). Every series and month carries source_url (the SEC filing) and a cite string. Until the data is loaded the tool says it is not available yet. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_consumer_complaintsPremiumCounts of complaints filed with the CFPB about the companies it names, linked to listed companies: the complaints of the latest three complete months against the same months a year earlier, by product (credit card, mortgage, credit reporting, checking or savings, student loan and others), the biggest issues, the share answered in time and the share of closed complaints that ended with monetary or non-monetary relief, and monthly counts back to 2017. With a company (ticker, cik, or part of a company's name) it returns that company's figures; months sets how many months of counts (up to 120). With none, it ranks the listed companies by sort (volume or change) for one product or all (product, order, limit up to 250). Complaints are unverified and grow with a company's customer count, so compare trends, not totals. A change is given only when the earlier window had at least 50 complaints. No complaint text is stored. The newest 15 days are left out because the CFPB publishes a complaint up to 15 days after it arrives. Every row carries source_url and a cite string. Until the data is loaded the tool says it is not available yet. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_executive_payPremiumWhat public companies pay their CEO and other top executives, from the pay-versus-performance table of each proxy statement (DEF 14A), one row per company and fiscal year: the CEO's total pay (Summary Compensation Table), the 'compensation actually paid' under the SEC's formula (it follows the share price and can be far from total pay, or negative), the average of the other named executives on both measures, and the company's and its peer group's total shareholder return (the value of $100 invested at the start of the five-year period). All amounts are US dollars. With no company or dates, each company's latest fiscal year, highest CEO pay first; with a ticker or cik, every year, newest first. Only companies that report a single CEO for the year have CEO figures. amount_to_check is true when a pay amount is over $1 billion, usually a filer tagging thousands as dollars; filing_url is the filing to compare with. Pay says nothing by itself about performance. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_stock_splitsPremiumForward and reverse stock splits by the day they took effect, newest first. Announced splits that have not taken effect yet are not included. The ratio reads <new shares>-for-<old shares>: 4-for-1 gives four shares for each one held, 1-for-10 is a reverse split that gives one share for ten. Small stock dividends paid in shares are not splits and are left out. With no ticker, the splits of the last 30 days; with a ticker, the stock's whole split history. The list covers every US-traded symbol, including ETFs and foreign companies' over-the-counter shares; cik and company_name are null for symbols we do not list. The splits are worked out from Tiingo daily price data (Market Data from Tiingo.com) and have no public page, so source_url is the 13F.ai page for the split. A split changes the share count and price, not the value of a holding. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_short_volumeBasicShort sale volume, off-exchange volume and DPI for each stock on one day, from FINRA's daily files. The files cover only trades reported to FINRA instead of to a stock exchange: dark pools and other alternative trading systems, and trades a broker fills itself, such as retail orders filled by a wholesale market maker. off_exchange_total is that volume, not the stock's total trading volume, and the files are not per-venue dark pool volume (FINRA publishes that weekly, with a delay). short_volume is the part sold short; dpi is short_volume divided by off_exchange_total (a ratio, for example 0.46; null when off_exchange_total is 0); dpi_5d and dpi_20d are the volume-weighted DPI over the stock's last 5 and 20 trading days, the day itself included, and are null when the stock was not reported on each of those days. This is one day's short sales, not short interest (positions still open). With no ticker, the stocks with the highest dpi on the latest trading day (or the date you give); listed companies with at least a million shares reported unless you change min_volume or set show to all (which includes funds). With a ticker, its last 30 trading days. A dpi of 0.40 to 0.60 is ordinary for many stocks, because market makers often sell shares they do not yet own to fill customer buy orders; a high dpi does not by itself mean investors are betting against a stock. source_url is FINRA's file for the day. Source: FINRA (each row carries source_url, FINRA's file). Free for every account.
get_wikipedia_viewsPremiumHow often the English Wikipedia article about each US-listed company is read, from Wikimedia's page-view data (views from people, all platforms; a day's views arrive about a day late). With no ticker, the company articles read most above their usual level: views over the last 7 days against the article's own daily average over the 90 days before (change_7d of 2.0 means twice as often as usual), or the latest day (change_1d), or the most views (views_7d). Articles averaging under 50 views a day are left out unless you lower min_views. With a ticker, that company's article. Views measure attention for any reason (results, a lawsuit, a product launch, a viral story, a school assignment); they do not say whether the news is good or bad, and some articles cover a brand or a parent group rather than the listed company alone. source_url is the article. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_app_ratingsPremiumThe average star rating and number of ratings of the main apps of listed companies on Apple's US App Store (about a hundred apps we chose, such as Uber, Netflix and Chipotle), one snapshot a day, and how each has changed. Collection started on 2026-10-23, so the history is short; the note says how long. Each row compares the app's newest snapshot with its oldest in the window (the last 30 days unless you give dates or a ticker): count_change and count_change_pct are the change in the number of ratings, average_change the change in the average. The average covers every version of the app since it launched, so it moves slowly; the count is the better sign of change, and it can fall when Apple removes ratings. Ratings are a rough sign of how many people use an app, not a measure of a company's sales. Google Play is not covered. source_url is the app's store page. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_fails_to_deliverPremiumFails to deliver from the SEC's twice-monthly files: for each settlement date, the balance of shares that brokers had failed to deliver to the buyer and not yet delivered, with the previous day's closing price. THESE ARE CUMULATIVE BALANCES, not new fails that day: a share that stays undelivered for ten days is counted on each of the ten days, and the file does not say how old a fail is. The SEC states the numbers are not evidence of abusive or 'naked' short selling and are not necessarily the result of short selling; fails have many causes (processing delays, market makers filling orders, hard-to-borrow shares) and most clear within days. A large balance is a reason to look closer, not a conclusion. With no ticker, the largest balances on the latest settlement date (or the date you give) ranked by value (shares times the SEC's price, the default), shares, share of average daily volume (FINRA's latest short interest report on or before the date) or share of shares outstanding (the company's latest cover-page count; ranked among the 500 largest balances by value); listed companies only unless show is all, because the biggest balances are often in funds. With a ticker, that stock's balance on each recent settlement date. The latest settlement date is usually two to six weeks old. This is not short interest (the short interest page also shows fails beside it) and not daily short volume. source_url is the SEC page that lists the files. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_merger_clearancesPremiumEarly-termination notices the FTC publishes under the Hart-Scott-Rodino Act, newest first: a notice means the parties to a reportable merger or acquisition asked to end the 30-day waiting period early and the FTC and the Department of Justice granted it. COVERAGE IS PARTIAL BY DESIGN. Only granted requests are listed: deals that waited out the full period, deals refused early termination and deals that were never reportable do not appear, so this is not a list of all mergers. The FTC granted no early terminations from 2021-02-04 until the new HSR form took effect on 2025-02-10, so there are no notices dated in between. Each row has the buyer (acquiring_party, the ultimate parent entity), the target (acquired_party) and the entities acquired, and the date granted. Parties are matched to SEC companies by an automatic name match: ticker and cik are set when it matched, and *_match says 'match' (a close name) or 'possible' (a looser one that can be wrong); most parties are private companies, funds or people and have no match. With no company or dates, the last 365 days. A notice is not an endorsement and does not say whether the deal closed. source_url is the FTC page that lists the notices (transaction_number identifies the notice there). Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_financialsPremiumA company's financial statement figures from the XBRL data of its SEC filings (mostly 10-K and 10-Q): for the latest 8 quarters and 2 fiscal years (quarters and years change that), revenue, gross profit, operating income, net income, diluted EPS (USD per share), operating cash flow, cash and equivalents, long-term debt (the noncurrent part only, not total debt) and shares outstanding, all in US dollars unless said otherwise, and the newest revenue split by business segment, geography and product (members are the company's own names, not normalised across companies, and need not add up to total revenue). Takes a ticker or a cik. Each period lists its figures and the filings they came from (sources: form_type, accession_no, filing_url, and which figures each supplied); each source has a cite field holding its link in one sentence. The latest filing of a period wins, so a restatement replaces the figure and some annual figures come from another form, such as a proxy statement (DEF 14A, often rounded): form_type says which. Concept fallbacks per period: revenue is Revenues, then RevenueFromContractWithCustomerExcludingAssessedTax; diluted EPS falls back to basic EPS (fallback_concepts says when); shares outstanding is the balance sheet count, then the cover page count. Gross profit is revenue minus cost of revenue when the company tags none (derived lists it). Periods are the SEC's calendar-aligned frames: CY2025Q3 is the quarter that ends closest to the end of the third calendar quarter of 2025, whatever the company calls it; fiscal_year and fiscal_quarter are the company's own calendar, named for the calendar year in which the fiscal year ends. Fourth-quarter revenue, gross profit, operating income and net income are derived and flagged: the 10-K reports the whole year, so the quarter is the annual value minus the first three quarters of that fiscal year, only when all four exist for the same concept, the year is from a 10-K and the quarters are from 10-Qs (derived lists them, derived_from names the accessions used; a missing quarter leaves the figure out, and derived_skipped says when the annual figure is from a proxy statement). Fourth-quarter EPS is never derived. Operating cash flow exists for a first quarter and for a year only: 10-Q cash flow statements are year to date, those figures are not stored, so quarterly cash flow is not derived. Funds, trusts and companies that file 20-F or 40-F have few or no figures, and banks and insurers often lack the revenue, gross profit, operating income and long-term debt concepts. The revenue split's period_end is rounded to a month end and can lag the newest quarter by one quarter. Information from public filings, not investment advice. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
get_fund_leaderboardsPremiumThe fund leaderboards from the latest quarter's 13F reports (a 13F lists a manager's long US-listed stock positions, filed up to 45 days after quarter end), and the list of about 75 notable funds. Pick a board: notable-funds (each notable fund with its value, positions, top-10 share, growth, estimated return, turnover and biggest holding); stocks held by the notable funds: most-owned, big-bets, top-buys, top-buys-2q, top-sells, top-sells-2q, new-positions; positions of the notable funds: top-positions, near-52-week-low; the largest single-stock moves of any manager: biggest-increases, biggest-decreases; managers: largest-funds, fastest-growing, concentrated, estimated-performance (set notable_only to limit these, and biggest-increases and biggest-decreases, to the notable funds; without it the moves boards are the 100 largest of all managers). Each row has a source_url: a manager's 13F filings on EDGAR, or for a stock that many managers hold, its 13F.ai page that lists each filing. Estimates, not fund performance. est_return_1q and est_return_4q assume the fund held exactly what it reported at the start of each quarter until the end of it, priced on both dates; a 13F lists long US-listed positions only, so cash, shorts, options, fees and trades inside the quarter are missing. est_copy_return is what buying the earlier report's stocks the day that filing became public and holding to the day the next one became public would have earned. Read all three loosely when turnover_1q is 0.3 or more (the fund trades often) or est_coverage is low (the share of the start-of-quarter value we could price). Returns, shares and ratios are fractions: 0.05 is 5%. One stock's holders and one manager's positions are a separate 13F holders dataset. Needs the Premium plan; a Basic account gets an upgrade message instead of data.
searchBasicSearch 13F.ai for a company (name or ticker), a member of Congress or a 13F fund manager, and for a company also its Congress trades, insider trades and institutional holders. Takes a name or a whole question: the names in it are looked up. Returns up to 10 results, best first, each with id, title, url and a short text; the id identifies a document that can be retrieved in full. Matches names: filters (a date range, an amount, one chamber, a ranking) are not applied. Free for every account.
fetchMixedThe full document for a document id: a company briefing (company:<cik>), a member of Congress (politician:<bioguide id>), a 13F fund manager (fund:<cik>), or one dataset of a company (congress-trades:<cik>, insider-trades:<cik>, holders:<cik>). Returns id, title, text (plain readable text with a source link on every row), url and metadata. The congressional part is free for every account (members of Congress, Congress trades, the congressional part of a company briefing); the other documents need the Premium plan and a Basic account gets an upgrade message in their place.

Add it to Claude, ChatGPT, Gemini or Grok by signing in

Add https://13f.ai/api/mcp as a custom connector in Claude (Customize, Connectors, Add custom connector), as a custom MCP server in ChatGPT (Plugins, +, Add custom MCP server) as a custom app in Gemini (Settings, Connected Apps, Add a custom app) or as a custom connector in Grok (grok.com/connectors, New Connector, Custom). The app sends the user to 13F.ai to sign in and approve (OAuth 2.1 with PKCE; MCP authorization spec revision 2026-07-28), and no key is copied. The server advertises its metadata at /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server, supports Client ID Metadata Documents and dynamic client registration (/oauth/register), issues one-hour access tokens and rotating refresh tokens, and supports revocation (/oauth/revoke). Users manage and disconnect apps on their account page. See Connect your AI. An OAuth access token works on the MCP endpoint only, not on the REST API.

Microsoft 365 Copilot

The server is built to be listed as a federated connector in Microsoft 365 Copilot, for work accounts: Streamable HTTP, every tool read-only and titled, and the two document tools Microsoft lists, search (a name or a question, ranked results with id, title, url and text) and fetch (an id from search, one readable document). They follow the same plans as the other tools. The listing is coming soon; see how it will work. It works with work or school accounts only, for people with a Microsoft 365 Copilot license, after a Microsoft 365 administrator turns it on; it is not available with a personal Microsoft account or the free Copilot app.

Prefer an API key? You can connect that way instead.

Claude Code: claude mcp add --transport http 13f-ai https://13f.ai/api/mcp, then /mcp to sign in. Or send a key in a header:

claude mcp add --transport http 13f-ai https://13f.ai/api/mcp \
  --header "Authorization: Bearer <your key>"

Claude Desktop through the mcp-remote bridge, which can send the header (add to claude_desktop_config.json and restart):

{
  "mcpServers": {
    "13f-ai": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://13f.ai/api/mcp", "--header", "Authorization:${AUTH_HEADER}"],
      "env": { "AUTH_HEADER": "Bearer <your key>" }
    }
  }
}

A key placed in the address (https://13f.ai/api/mcp/k/<key>) is an older fallback for clients that can neither sign in nor send a header. It is off by default, because addresses end up in logs and browser history. If you must use it, create a separate key for it and revoke that key afterwards. Signing in, as described above, is the better choice.

To test any client, call tools/list first, then for example get_company_overview with {"ticker": "NVDA"}, get_crypto_overview with {} for the crypto briefing, or get_theme with {"slug": "ai-chips"} for a published theme.

Agents can sign up themselves

An AI agent can start a Premium sign-up through the API. It sends the person's email, gets a Stripe checkout link and gives the link to the person, who pays. The agent then collects its API key. No form on this site is filled in by anyone. Premium starts with the 7-day free trial, so the card is added today and charged $29 a month after the trial unless the person cancels.

  1. POST /api/v1/agent/signup with { "email": "person@example.com" }. The answer has checkout_url, poll_url, expires_at (24 hours) and a claim_secret that is shown once. If the email already has an account the answer is 409: the person signs in at /login and creates a key on the account page.
  2. The person opens checkout_url and pays. We create their account for that email, and they can sign in later with an email link.
  3. GET poll_url with Authorization: Bearer <claim_secret> until status is paid (the other values are pending and expired). The first poll of a paid sign-up returns api_key. It is shown once and is not stored in readable form. Later polls return the status only; keys are managed on the account page.
curl -X POST https://13f.ai/api/v1/agent/signup   -H "Content-Type: application/json"   -d '{"email": "person@example.com"}'

# give checkout_url to the person, then poll:
curl -H "Authorization: Bearer $CLAIM_SECRET"   "https://13f.ai/api/v1/agent/signup/$SIGNUP_ID"

Sign-up requests are limited per address. Temporary-mailbox addresses are not accepted. The Terms apply to the person who pays.

Limits and licensing