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
- Envelope. Every response is
{ "data": [...], "next_cursor": string | null, "as_of": "2026-10-24T09:30:00.000Z" }. Single-resource endpoints put one object in data. - Pagination. Opaque cursors: pass
next_cursor back as cursor with the same filters. limit defaults to 100, maximum 1000. Cursors are keyset-based, so paging is stable while new rows arrive. - Formats. snake_case names; numbers are numbers (USD unless the name says otherwise); dates are
YYYY-MM-DD; times are ISO 8601 UTC. Ranges are always amount_min and amount_max (amount_max is null for open-ended brackets). - Provenance on every row. An SEC accession number plus
filing_url, or a document id plus source_url. first_seen_at is when we first stored the row; filter with updated_since to poll for what is new. - Common filters.
ticker, cik, since / until (the dataset's event date, stated per endpoint), updated_since (first_seen_at). Unknown parameters are rejected rather than ignored. - Errors.
{ "error": { "code", "message", "param?", "hint?" } } with status 400 (invalid request or cursor), 401 (missing or invalid key), 404, 429 (rate limit), 503 (not configured or query timeout). - Large tables. Some endpoints need a narrowing filter (a ticker, CIK or date window) because the underlying table is large; the error message says which.
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 datasetsWhat 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.
| Parameter | Type | Description |
|---|
updated_since | datetime | Rows first stored after this time. Default: the last 7 days; at most 90 days back. |
tickers | list of ticker | Only events about these companies (comma-separated tickers). |
ciks | list of integer (CIK) | Only events about these companies (comma-separated CIKs). |
bioguide_ids | list of bioguide | Only congressional trades by these members. With tickers / ciks too, events matching either are returned. |
datasets | list of congress_trades | insider_trades | beneficial_ownership | filings | lobbying | government_contracts | patents | clinical_trials | fda_approvals | form_144 | sec_enforcement | Restrict to datasets: congress_trades, insider_trades, beneficial_ownership, filings, lobbying, government_contracts, patents, clinical_trials, fda_approvals, form_144, sec_enforcement. Default: all. |
order | desc | asc | desc = newest first (default); asc = oldest first, to walk forward from updated_since. Default: desc. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (11)
| Field | Type | Description |
|---|
dataset | string | congress_trades, insider_trades, beneficial_ownership, filings, lobbying, government_contracts, patents, clinical_trials, fda_approvals, form_144 or sec_enforcement |
event_type | string | Kind of event within the dataset, e.g. trade, open_market_purchase, 13d, 8k_item_2.02 |
id | string | Stable event id (dataset plus the row's key) |
ticker | string or null | Company ticker, when the event is about a company |
cik | integer or null | Company CIK, when the event is about a company |
bioguide_id | string or null | Member of Congress, for congressional trades |
entity_name | string or null | Company or member name |
summary | string | One-line text summary |
url | string | Source document |
event_date | date | Date of the event (trade date, filing date, grant date, ...) |
first_seen_at | datetime | When we first stored the row; the poll key |
GET /api/v1/congress-trades free
Stock trades reported by members of CongressPeriodic 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker symbol, a lookup for the company's CIK (the stable key). Class shares: BRK-B and BRK.B both work. |
cik | integer (CIK) | SEC Central Index Key of the company (the stable company key). |
bioguide_id | bioguide | The member who filed the report (Bioguide id). |
chamber | house | senate | Chamber of the filing. |
transaction_type | list of purchase | sale | sale_partial | exchange | Transaction type; a comma-separated list is allowed. |
asset_type | crypto | crypto = 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. |
since | date | Only trades on or after this transaction date (YYYY-MM-DD). |
until | date | Only trades on or before this transaction date (YYYY-MM-DD). |
updated_since | datetime | Only 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_only | boolean | true = 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_deleted | boolean | Include rows a later amendment deleted (filing_status = deleted). Default: false. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (32)
| Field | Type | Description |
|---|
chamber | string | house or senate |
doc_id | string | Document id: House Clerk DocID or Senate eFD report uuid. With chamber and row_ordinal it identifies the row. |
row_ordinal | integer | Position of the transaction line in the document (the # column of the Senate eFD report) |
bioguide_id | string or null | Member's Bioguide id; null when the filer could not be matched to a member |
member_name | string or null | Member's official name, else the filer name as printed |
party | string or null | Party of the member |
state | string or null | State of the member |
district | integer or null | House district (0 at-large); null for senators |
owner | string | self, spouse, joint or dependent_child |
asset_description | string | The asset as described in the filing |
ticker | string or null | Ticker as printed in the filing |
asset_type_code | string or null | Asset type code (House) or label (Senate) from the filing |
asset_type | string or null | option 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 |
cik | integer or null | SEC CIK of the traded company, when the asset is a listed security we could match |
security_ticker | string or null | Ticker of the matched security |
link_method | string or null | How 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_score | number or null | Match confidence 0-100 where applicable |
transaction_type | string | purchase, sale, sale_partial or exchange |
transaction_date | date | Date of the transaction |
notification_date | date or null | Date the member was notified (House only) |
filing_date | date | Date the report was filed |
amount_text | string | Amount bracket as printed |
amount_min | number | Lower bound of the amount bracket in USD |
amount_max | number or null | Upper bound of the amount bracket in USD; null for open-ended brackets |
cap_gains_over_200 | boolean or null | House checkbox: capital gains over $200 |
note | string or null | Description or comment from the filing |
filing_status | string or null | new, amended or deleted |
committee_overlap | array or null | Committees 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_amendment | boolean | The report is an amendment (not marked for Senate rows) |
source_url | string | The official filing: a PDF at the House Clerk or a report page at the Senate eFD |
source | string | Where 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_at | datetime | When 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of a company the asset was matched to (resolved to its CIK), or the ticker the filer printed. |
cik | integer (CIK) | CIK of the company the asset was matched to. |
official | string | Words in the official's name as filed (case-insensitive), e.g. 'wright'. |
bioguide_id | bioguide | An official who was also a member of Congress (Bioguide id): their executive-branch trades. |
filer_type | list of president | vice_president | cabinet | other_pas | white_house_staff | Kind 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_type | list of purchase | sale | sale_partial | exchange | unknown | Transaction type; a comma-separated list is allowed. unknown = the filer left the type blank on the form. |
since | date | Only trades on or after this transaction date (YYYY-MM-DD). |
until | date | Only trades on or before this transaction date (YYYY-MM-DD). |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (26)
| Field | Type | Description |
|---|
source | string | oge (Office of Government Ethics) or whitehouse |
doc_id | string | The report's id. With source and row_ordinal it identifies the row. |
row_ordinal | integer | The line's own number on the form |
official | string | The filer's name as printed, "Last, First M" |
position | string or null | The position under the name on the report |
agency | string or null | The agency, from OGE's list; null for White House reports |
filer_type | string | president, vice_president, cabinet, other_pas or white_house_staff (approximate: derived from the position text) |
bioguide_id | string or null | Bioguide id when the official is also in our list of members of Congress by a unique name match; null for most |
asset_description | string | The asset as the filer printed it; for a scan often cut off by its cell |
ticker | string or null | Ticker, only when the filer printed one in the description |
cik | integer or null | SEC CIK of the company the asset was matched to |
security_ticker | string or null | Ticker of the matched security |
link_method | string or null | How 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_score | number or null | Match confidence 0-100 where applicable |
transaction_type | string | purchase, sale, sale_partial, exchange or unknown (the filer left the type blank) |
transaction_date | date | Date of the transaction |
notification_over_30_days | boolean | The form's "notification received over 30 days ago" |
amount_text | string or null | Amount bracket as printed; null when the form leaves it blank |
amount_min | number or null | Lower bound of the bracket in USD |
amount_max | number or null | Upper bound in USD; null for an open-ended bracket or a blank amount |
endnote | string or null | The filer's endnote for this line, when there is one; it usually explains a blank amount |
filing_date | date or null | The date the filer signed the report |
source_url | string | The official report (PDF) |
read_from_scan_by_model | boolean | The report is a scan read by a model; it can contain errors |
cite | string | The label of the report and its link in one sentence |
first_seen_at | datetime | When 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 5One 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Issuer ticker (the company whose shares were traded). Resolved to the issuer CIK. |
cik | integer (CIK) | Issuer CIK (the company whose shares were traded). |
owner_cik | integer (CIK) | CIK of the reporting insider (the first reporting owner of the filing). |
txn_code | list of string | SEC transaction code(s), comma-separated: P purchase, S sale, A grant, M option exercise, F tax withholding, G gift, ... |
open_market | boolean | true = only open-market purchases and sales (codes P and S). |
since | date | Only transactions on or after this date (YYYY-MM-DD). |
until | date | Only transactions on or before this date (YYYY-MM-DD). |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (29)
| Field | Type | Description |
|---|
accession_no | string | SEC accession number of the filing |
table_type | string | nonderiv_trans (common stock) or deriv_trans (options and other derivatives) |
line_no | integer | Line within that table of the filing |
form_type | string | 3, 3/A, 4, 4/A, 5 or 5/A |
is_amendment | boolean | The filing is an amendment |
amends_accession_no | string or null | The filing this amends, when it can be identified |
filed_date | date | Date filed with the SEC |
period_of_report | date or null | Period of report on the form |
cik | integer | Issuer CIK |
ticker | string or null | Issuer trading symbol as printed on the form |
issuer_name | string or null | Issuer name |
owner_cik | integer or null | First reporting owner's CIK |
owner_name | string or null | First reporting owner's name |
is_director | boolean or null | Owner is a director |
is_officer | boolean or null | Owner is an officer |
is_ten_pct_owner | boolean or null | Owner holds more than 10 percent |
officer_title | string or null | Officer title |
security_title | string or null | Title of the security |
transaction_date | date | Transaction date |
transaction_code | string | SEC transaction code (P purchase, S sale, A grant, M exercise, F tax, G gift ...) |
acquired_disposed | string or null | A (acquired) or D (disposed) |
shares | number or null | Shares or units transacted |
price | number or null | Price per share in USD |
total_value | number or null | shares x price in USD |
shares_owned_after | number or null | Shares owned after the transaction |
ownership_form | string or null | D 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_1 | boolean or null | Trade made under a Rule 10b5-1 plan (forms filed since 2023-04) |
filing_url | string | SEC filing index page |
first_seen_at | datetime | When 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 afterwardsOne 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the company whose shares would be sold (resolved to its CIK). |
cik | integer (CIK) | CIK of the company whose shares would be sold. |
filer_cik | integer (CIK) | CIK of the filer of the notice (usually the insider; the same number as owner_cik on a Form 4). |
plan | boolean | true: only notices that give a Rule 10b5-1 trading plan adoption date. false: only notices that give none. |
followed | boolean | true: 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_value | integer | Only notices whose aggregate_market_value (as the filer typed it, USD) is at least this much. |
since | date | Only notices filed on or after this date (YYYY-MM-DD): filed_date. |
until | date | Only notices filed on or before this date (YYYY-MM-DD): filed_date. |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (36)
| Field | Type | Description |
|---|
accession_no | string | SEC accession number of the Form 144 |
line_no | integer | Block of the notice (1 for almost every notice; one per class of securities or broker when it lists several) |
form_type | string | 144 or 144/A |
is_amendment | boolean | The filing is an amendment (144/A) |
amends_accession_no | string or null | The notice a 144/A amends, when it names one |
filed_date | date | Date filed with the SEC |
notice_date | date or null | The date the signer put on the notice (it can differ from the filing date) |
cik | integer | CIK of the company whose shares would be sold |
ticker | string or null | The company's ticker, from the SEC securities list (null when the company has none on file) |
issuer_name | string or null | Company name |
filer_cik | integer or null | CIK of the EDGAR filer of the notice (usually the insider; can be a filing agent or a fund) |
person_name | string or null | Name of the person for whose account the shares would be sold, as typed |
relationships | array | The person's relationship to the company as ticked on the form (Officer, Director, 10% Stockholder, ...) |
securities_class | string or null | Class of securities, e.g. Common Stock |
exchange | string or null | Exchange the shares trade on, as typed; null when not on an exchange |
broker_name | string or null | Broker through which the sale would be made |
shares_to_sell | number or null | Shares or units the filer proposes to sell |
aggregate_market_value | number or null | Aggregate market value of those shares (USD), as the filer typed it |
shares_outstanding | number or null | Shares of the class outstanding, as typed |
approx_sale_date | date or null | Approximate date of sale given on the notice |
has_10b5_1_plan | boolean | The notice gives a Rule 10b5-1 trading plan adoption date |
plan_adoption_date | date or null | The latest Rule 10b5-1 plan adoption date on the notice |
nothing_sold_3m | boolean or null | The notice says nothing was sold in the past three months |
sales_3m_shares | number or null | Shares sold in the past three months, as reported on the notice |
sales_3m_proceeds | number or null | Gross proceeds (USD) of those sales, as reported on the notice |
form4_accession_no | string or null | Accession 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_date | date or null | Date that Form 4 was filed |
form4_first_sale_date | date or null | Date of the first sale it reports on or after the notice |
form4_shares_sold | number or null | Shares sold in the sale lines of that Form 4 from the notice date on |
form4_proceeds | number or null | Value (USD) of those sale lines |
days_to_form4 | integer or null | Days from the notice to the filing of that Form 4 |
days_to_sale | integer or null | Days from the notice to the first sale it reports |
form4_matched_by | string or null | cik (same filer CIK) or name (same person name) |
form4_url | string or null | SEC filing index page of that Form 4 |
filing_url | string | SEC filing index page of the Form 144 |
first_seen_at | datetime | When we first stored the row |
GET /api/v1/institutional-holdings pro
13F positions of institutional managersPositions 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Company ticker: positions managers hold in this company (resolved to its CUSIPs). |
cik | integer (CIK) | Company CIK: positions managers hold in this company. |
manager_cik | integer (CIK) | CIK of an institutional manager: that manager's positions. |
period | date | Report 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_options | boolean | Include put and call positions (default: plain shares / principal only). Default: false. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (19)
| Field | Type | Description |
|---|
period | date | Report period (quarter end) |
manager_cik | integer | Manager's CIK |
manager_name | string or null | Manager name |
cusip | string | CUSIP of the security |
issuer_name | string or null | Issuer name from the SEC 13(f) list |
title_of_class | string or null | Title of class |
cik | integer or null | CIK of the issuer when the CUSIP maps to a company we track |
ticker | string or null | Ticker of that company |
value_usd | number | Market value in USD (a value reported in thousands is shown in dollars) |
value_as_filed | number | Market value exactly as the filer wrote it (thousands or dollars, depending on the filer) |
shares | number | Shares (or principal amount when share_type = principal) |
put_call | string or null | put or call for option positions; null for the security itself |
share_type | string | shares or principal |
form | string | 13F-HR or 13F-HR/A |
is_amendment | boolean | The filing is an amendment |
filed_date | date | Date the filing was made |
accession_no | string | SEC accession number |
filing_url | string | SEC filing index page |
first_seen_at | datetime | When we first stored the filing |
GET /api/v1/institutional-holdings/compare pro
Compare a 13F manager's positions in two quartersOne 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.
| Parameter | Type | Description |
|---|
manager_cik (required) | integer (CIK) | CIK of the institutional manager whose two quarters are compared. |
period | date | The later quarter (quarter end, YYYY-MM-DD). Default: the newest quarter we hold for the manager. Must be one we hold. |
prior_period | date | The 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_type | shares | options | shares: the common-share lines. options: the put and call lines (their value is the notional amount of the shares they cover). Default: shares. |
put_call | put | call | With position_type=options: only puts or only calls. |
change | new | added | trimmed | exited | unchanged | Only positions that are new, added to, trimmed, exited or unchanged between the two quarters. |
q | string | Only positions whose issuer name or ticker contains this text (2 characters or more), or whose CUSIP equals it. |
sort | value | weight | shares | change | value_change | name | value_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. |
order | desc | asc | Sort direction. Default: desc. |
limit | integer | Rows per page, 1 to 500 (default 100). Default: 100. |
cursor | string | Opaque 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)
| Field | Type | Description |
|---|
period | date | The later quarter (quarter end) |
prior_period | date | The earlier quarter (quarter end) |
manager_cik | integer | Manager's CIK |
manager_name | string | Manager name |
cusip | string | CUSIP of the security |
issuer_name | string or null | Issuer name from the SEC 13(f) list |
title_of_class | string or null | Title of class |
cik | integer or null | CIK of the issuer when the CUSIP maps to a company we track |
ticker | string or null | Ticker of that company |
put_call | string or null | put or call for option lines; null for shares |
change | string | new, added, trimmed, exited or unchanged |
shares | number | Shares in the later quarter (0 for an exited position) |
prior_shares | number | Shares in the earlier quarter, adjusted for stock splits in between (0 for a new position) |
shares_change | number | shares minus prior_shares |
shares_change_pct | number or null | Change in shares as a percent of prior_shares; null for new and exited positions |
value_usd | number | Reported value in the later quarter, in USD (the notional amount for option lines; 0 for an exited position) |
prior_value_usd | number | Reported value in the earlier quarter, in USD (0 for a new position) |
value_change_usd | number | value_usd minus prior_value_usd; includes price moves, not only buying and selling |
portfolio_weight_pct | number or null | The position's share of the manager's reported total in the later quarter, in percent |
source_url | string or null | SEC filing index page of the manager's 13F for the later quarter |
prior_source_url | string or null | SEC 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 moreBeneficial-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).
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the company whose shares are owned (the subject / issuer). |
cik | integer (CIK) | CIK of the company whose shares are owned (the subject / issuer). |
person_cik | integer (CIK) | CIK of the reporting person (the investor). |
schedule | 13D | 13G | Schedule 13D (activist / control intent) or 13G (passive). |
since | date | Only filings on or after this date (YYYY-MM-DD). |
until | date | Only filings on or before this date (YYYY-MM-DD). |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (26)
| Field | Type | Description |
|---|
accession_no | string | SEC accession number |
person_no | integer | Position of the reporting person in the filing |
form_type | string | SCHEDULE 13D, 13D/A, 13G or 13G/A |
schedule | string | 13D or 13G |
is_amendment | boolean | The filing is an amendment |
amendment_no | integer or null | Amendment number on the cover page |
amends_accession_no | string or null | The filing being amended, when named |
filed_date | date | Date filed |
event_date | date or null | Date of the event that required the filing |
cik | integer or null | Issuer CIK (the company whose shares are owned) |
ticker | string or null | Issuer ticker |
subject_name | string or null | Issuer name as filed |
cusip | string or null | Issuer CUSIP |
class_title | string or null | Title of the class of securities |
person_cik | integer or null | Reporting person's CIK |
person_name | string or null | Reporting person's name |
member_of_group | string or null | Group membership box (a / b) |
citizenship | string or null | Citizenship or place of organization code |
aggregate_shares | number or null | Aggregate shares beneficially owned |
percent_of_class | number or null | Percent of the class |
sole_voting | number or null | Sole voting power (shares) |
shared_voting | number or null | Shared voting power (shares) |
sole_dispositive | number or null | Sole dispositive power (shares) |
shared_dispositive | number or null | Shared dispositive power (shares) |
filing_url | string | SEC filing index page |
first_seen_at | datetime | When we first stored the row |
GET /api/v1/filings free
Form 8-K current reports, one row per reported item8-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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the filing company (resolved to its CIK). |
cik | integer (CIK) | CIK of the filing company. |
item_code | list of string | 8-K item number(s), comma-separated: 2.02 results, 5.02 officer changes, 1.01 material agreements, 8.01 other events ... |
since | date | Only filings on or after this date (YYYY-MM-DD). |
until | date | Only filings on or before this date (YYYY-MM-DD). |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (13)
| Field | Type | Description |
|---|
accession_no | string | SEC accession number |
item_code | string | 8-K item number, e.g. 2.02; 'none' when the filing reports no item |
item_title | string or null | SEC title of the item |
form_type | string | 8-K or 8-K/A |
is_amendment | boolean | The filing is an amendment |
filed_date | date | Date filed |
accepted_at | datetime or null | EDGAR acceptance time |
period_of_report | date or null | Date of the earliest event reported |
cik | integer | Registrant CIK |
ticker | string or null | Registrant's primary active ticker |
company_name | string or null | Registrant name |
filing_url | string | SEC filing index page |
first_seen_at | datetime | When 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker: 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). |
cik | integer (CIK) | CIK of the registrant. |
status | list of filed | amended | priced | withdrawn | Where 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). |
spac | boolean | true: only blank-check companies (SIC 6770, or a cover page that says blank check); false: everything else. |
ipo | boolean | true: 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). |
since | date | Only registrations with a filing on or after this date (YYYY-MM-DD): last_activity_date. |
until | date | Only registrations with their latest filing on or before this date (YYYY-MM-DD): last_activity_date. |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (33)
| Field | Type | Description |
|---|
registration_no | string | Securities Act file number, e.g. 333-299117: shared by the S-1, its amendments, the 424B4 and the RW |
cik | integer | CIK of the first filer (the registrant) |
company_name | string or null | Registrant name |
ticker | string or null | Ticker the company trades under once priced (from the SEC securities list); null before pricing or until the SEC lists it |
status | string | filed, amended, priced or withdrawn |
is_ipo | boolean or null | The prospectus says it is an initial public offering; false for resales and follow-ons by listed companies |
ipo_reason | string or null | Why is_ipo is what it is, in words |
is_spac | boolean | Blank-check company: SIC 6770, or the cover page says blank check |
registration_form | string or null | The 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_statement | boolean | An S-1 or F-1 of this registration is in the dataset |
sic | integer or null | EDGAR assigned SIC code |
state_of_incorporation | string or null | EDGAR state or country code of incorporation |
state_location | string or null | EDGAR state or country code of the business address |
first_filed_date | date | Date of the registration's first filing |
last_activity_date | date | Date of the registration's latest filing |
priced_date | date or null | Date of the latest 424B4 |
withdrawn_date | date or null | Date of the latest RW |
filings_count | integer | Number of filings of the registration |
amendments_count | integer | Number of S-1/A and F-1/A filings |
proposed_ticker | string or null | Ticker the prospectus proposes to list under; never a symbol that already trades |
proposed_exchange | string or null | Exchange the prospectus proposes to list on |
offering_amount_usd | number or null | Maximum 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_share | number or null | Offering price per share on the 424B4 cover, when it states one |
shares_offered | number or null | Shares (or units) in the base offering on the 424B4 cover, when it states one count; the over-allotment option is not included |
amount_raised_usd | number or null | Amount 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_usd | number or null | Raised 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_ipo | integer | Number 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_date | date or null | Filing date of the latest Form D before the registration |
registration_url | string | EDGAR list of every filing under this file number |
latest_filing_url | string | SEC filing index page of the latest filing |
filings | array | Every filing of the registration, oldest first: { accession_no, form_type, filed_date, url } |
summary | object or null | AI 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_at | datetime | When we last stored a filing of the registration |
GET /api/v1/deals pro
Mergers, tender offers and going-private transactions, grouped from SEC filingsOne 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker: deals in which this company is named in any filing of the group, as the subject company, the filer or a co-registrant. |
cik | integer (CIK) | CIK of a company named in any filing of the deal (the subject company, the filer or a co-registrant). |
type | list of tender_offer | going_private | issuer_tender | merger | registration | What 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). |
stage | list of announced | registered | tender_offer | going_private | preliminary_proxy | final_proxy | The 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). |
since | date | Only deals with a filing on or after this date (YYYY-MM-DD): last_filed_date. |
until | date | Only deals whose latest filing is on or before this date (YYYY-MM-DD): last_filed_date. |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (19)
| Field | Type | Description |
|---|
deal_id | string | Accession 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_type | string | tender_offer, going_private, issuer_tender, merger or registration (S-4 / F-4 only: may be a debt exchange) |
stage | string | Furthest form seen: announced, registered, tender_offer, going_private, preliminary_proxy or final_proxy. Not the state of the deal |
first_filed_date | date | Date of the first filing of the group |
last_filed_date | date | Date of the latest filing of the group. Not a completion date |
filings_count | integer | Number of filings in the group |
forms | array | Distinct forms in the group without /A, in order of first appearance |
subject_cik | integer or null | CIK of the company named as subject company most often; null when no filing names one |
subject_name | string or null | Name of the subject company (not a verified target) |
subject_ticker | string or null | Active ticker of the subject company, when it has one |
filer_cik | integer or null | CIK of the other company most often filing (the bidder or merger partner); null when there is none |
filer_name | string or null | Name of that company |
filer_ticker | string or null | Active ticker of that company, when it has one |
deal_file_number | string or null | The 005- or 333- file number the group was keyed on, when it has one |
grouping | string | Strongest link used to build the group: file_number, party_pair, company or single (a lone filing) |
ambiguous_filings | integer | Filings left as their own group because two or more open deals of the same company fit |
latest_filing_url | string | SEC filing index page of the latest filing |
filings | array | Every 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_at | datetime | When the group last changed |
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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the client company (resolved to its CIK). |
cik | integer (CIK) | CIK of the client company. |
registrant_id | integer | Senate LDA registrant id (the lobbying firm, or the company itself for in-house lobbying). |
filing_year | integer | Filing year. |
issue_code | string | General issue code a filing reports activity on, e.g. TAX, DEF, HCR, TRD. |
since | date | Only filings posted on or after this date (YYYY-MM-DD). |
until | date | Only filings posted on or before this date (YYYY-MM-DD). |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (22)
| Field | Type | Description |
|---|
filing_uuid | string | Senate LDA filing id |
filing_type | string | Filing type code: RR registration, Q1-Q4 quarterly report, 1A-4A amendment, termination types ... |
filing_year | integer | Filing year |
filing_period | string | first_quarter ... fourth_quarter, mid_year, year_end |
posted_date | date | Date the filing was posted |
termination_date | date or null | Termination date, for termination filings |
registrant_id | integer | Registrant id |
registrant_name | string | Registrant (the lobbying firm or the company itself) |
client_id | integer | Client id |
client_name | string | Client name as filed |
cik | integer or null | SEC CIK of the client, when matched |
ticker | string or null | Ticker of that company |
client_state | string or null | Client's state |
income | number or null | Income of a lobbying firm from this client in the period, USD |
expenses | number or null | Expenses of a company lobbying on its own behalf, USD |
has_foreign_entity | boolean | A foreign entity is reported |
activity_count | integer | Number of issue activities in the filing |
lobbyist_count | integer | Number of lobbyists named |
covered_count | integer | Lobbyists with a covered government position |
issue_codes | array | General issue codes of the filing's activities |
source_url | string | The filing on the Senate LDA site |
first_seen_at | datetime | When 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the recipient company or its parent (resolved to the CIK). |
cik | integer (CIK) | CIK of the recipient company or its parent. |
role | any | recipient | parent | With ticker / cik: match the awardee itself, its parent, or either (default). Default: any. |
awarding_agency | string | Exact awarding agency name, e.g. 'Department of Defense'. |
since | date | Only awards last modified on or after this date (YYYY-MM-DD). |
until | date | Only awards last modified on or before this date (YYYY-MM-DD). |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (23)
| Field | Type | Description |
|---|
award_key | string | USAspending unique award id |
piid | string or null | Award id as the agency writes it |
award_type | string or null | Award type |
recipient_name | string or null | Awardee |
recipient_uei | string or null | Awardee's Unique Entity Id |
parent_name | string or null | Parent company of the awardee |
parent_uei | string or null | Parent's Unique Entity Id |
cik | integer or null | SEC CIK matched to the awardee |
ticker | string or null | Ticker of that company |
parent_cik | integer or null | SEC CIK matched to the parent |
parent_ticker | string or null | Ticker of the parent |
awarding_agency | string or null | Awarding agency |
awarding_sub_agency | string or null | Awarding sub-agency |
base_obligation_date | date or null | Date of the first obligation |
last_modified_at | string | Agency's last modification time (no time zone) |
end_date | date or null | Current period-of-performance end |
award_amount | number or null | Total obligated to date in USD |
naics_code | string or null | NAICS industry code |
psc_code | string or null | Product / service code |
description | string or null | Award description (first 300 characters) |
pop_state | string or null | Place-of-performance state |
source_url | string | The award on usaspending.gov |
first_seen_at | datetime | When we first stored the row |
GET /api/v1/patents pro
Granted US patents by company assigneeUSPTO 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the assignee company (resolved to its CIK). |
cik | integer (CIK) | CIK of the assignee company. |
patent_type | utility | design | plant | reissue | other | Kind of patent. |
cpc | string | CPC main group, exact, e.g. 'G06N 3'. |
since | date | Only patents granted on or after this date (YYYY-MM-DD). |
until | date | Only patents granted on or before this date (YYYY-MM-DD). |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (18)
| Field | Type | Description |
|---|
patent_number | string | Patent number as printed (7-digit utility, D..., RE..., PP...) |
kind | string | USPTO kind code (B1, B2, S1, ...) |
patent_type | string | utility, design, plant, reissue or other |
grant_date | date | Grant date (a Tuesday) |
application_number | string or null | Application number |
application_date | date or null | Application filing date |
title | string or null | Title |
cpc_main_group | string or null | CPC main group |
claims_count | integer or null | Number of claims |
assignee_seq | integer | Position among the grant's assignees |
assignee_name | string | Assignee exactly as printed |
assignee_country | string or null | Assignee country |
cik | integer or null | SEC CIK matched to the assignee |
ticker | string or null | Ticker of that company |
match_method | string or null | exact, fuzzy, manual or unmatched |
match_score | number or null | Name-match score 0-100 |
source_url | string | The patent on Google Patents |
first_seen_at | datetime | When we first stored the patent |
GET /api/v1/short-interest pro
FINRA short interest by settlement dateEquity 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker (FINRA's symbol). Class-share spellings are matched. |
cik | integer (CIK) | CIK: the short interest of all active and retired tickers of the company. |
since | date | Only settlement dates on or after this date. With ticker / cik and no since, the last 400 days are returned. |
until | date | Only settlement dates on or before this date (YYYY-MM-DD). |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (15)
| Field | Type | Description |
|---|
settlement_date | date | Settlement date |
ticker | string | FINRA symbol |
cik | integer or null | SEC CIK of the company with that active ticker |
issue_name | string | Issue name |
market_class | string | Market class |
current_short | number | Shares sold short at this settlement date |
previous_short | number | Shares sold short at the previous settlement date |
change_shares | number | Change in shares since the previous date |
change_percent | number | Percent change as published by FINRA |
avg_daily_volume | number | Average daily share volume |
days_to_cover | number | Days to cover |
split_flag | string or null | FINRA split flag |
revision_flag | string or null | FINRA revision flag |
source_url | string | FINRA source file |
first_seen_at | datetime | When we first stored the row |
GET /api/v1/layoffs pro
Layoff and closure notices filed under the WARN ActState 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the company the notice is matched to (resolved to its CIK). |
cik | integer (CIK) | CIK of the company the notice is matched to. |
state | string | Two-letter code of the state that published the notice, e.g. CA, WA, NJ. |
min_employees | integer | Only notices that name at least this many workers. |
listed | boolean | true: only notices matched to a public company (about one in ten). false or omitted: every notice. |
since | date | Only notices dated on or after this date (YYYY-MM-DD): notice_date. |
until | date | Only notices dated on or before this date (YYYY-MM-DD): notice_date. |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (12)
| Field | Type | Description |
|---|
state | string | Two-letter code of the state that published the notice |
notice_key | string | Stable id of the notice within its state |
company_name | string | Employer exactly as the state printed it |
cik | integer or null | SEC CIK of the company matched to the employer name, when there was a match |
ticker | string or null | Ticker of that company |
location | string or null | Place of the layoff as published (a city, a county or a site address) |
notice_date | date or null | Date of the notice; null where the state does not publish one |
effective_date | date or null | First day of the layoff; null when not published or implausible |
employees | integer or null | Workers affected; null when not published |
layoff_type | string or null | The state's own wording: layoff or closure, often permanent or temporary |
source_url | string | The state's WARN notices page |
first_seen_at | datetime | When we first stored the notice |
GET /api/v1/h1b pro
H-1B labor condition applications decided by the Department of LaborLabor 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the employer (resolved to its CIK). Only applications whose employer name matched that company are returned. |
cik | integer (CIK) | CIK of the employer. |
employer | string | Part 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_title | string | Part 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. |
status | list of certified | certified_withdrawn | denied | withdrawn | The Department of Labor's decision: certified, certified_withdrawn (certified, then withdrawn by the employer), denied or withdrawn. |
worksite_state | string | Two-letter code of the state of the worksite, e.g. CA. |
min_workers | integer | Only applications that ask for at least this many workers. |
min_wage | integer | Only 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. |
listed | boolean | true: only applications whose employer is matched to a public company. false or omitted: every application. |
since | date | Only applications decided on or after this date (YYYY-MM-DD): decision_date. |
until | date | Only applications decided on or before this date (YYYY-MM-DD): decision_date. |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (27)
| Field | Type | Description |
|---|
case_number | string | The Department of Labor's case number (I-200-...) |
status | string | certified, certified_withdrawn, denied or withdrawn |
visa_class | string or null | H-1B, H-1B1 Chile, H-1B1 Singapore or E-3 Australian |
received_date | date or null | Day the Department received the application |
decision_date | date | Day the Department decided it |
employer_name | string | Employer exactly as the Department prints it |
employer_city | string or null | City of the employer's address |
employer_state | string or null | State of the employer's address |
cik | integer or null | SEC CIK of the public company the employer was matched to; null when not matched |
ticker | string or null | Ticker of that company |
job_title | string or null | Job title as filed |
soc_code | string or null | Standard Occupational Classification code of the job |
soc_title | string or null | Title of that occupation |
full_time | boolean or null | Whether the position is full time |
total_workers | integer or null | Workers the application asks for |
wage_from | number or null | Offered wage, low end, in wage_unit |
wage_to | number or null | Offered wage, high end, in wage_unit |
wage_unit | string or null | Hour, Week, Bi-Weekly, Month or Year |
wage_annual | number or null | wage_from per year (hour x 2080, week x 52, bi-weekly x 26, month x 12); null when not usable |
prevailing_wage | number or null | Prevailing wage for the job and place, in prevailing_wage_unit |
prevailing_wage_unit | string or null | Unit of the prevailing wage |
prevailing_wage_annual | number or null | The prevailing wage per year; null when not usable |
worksite_city | string or null | City of the first worksite listed |
worksite_state | string or null | State of the first worksite listed |
worksite_postal | string or null | Postal code of the first worksite listed |
source_url | string | The Department of Labor's disclosure data page |
first_seen_at | datetime | When 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).
| Parameter | Type | Description |
|---|
dataset (required) | forward | reverse | multifamily | forward: 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. |
ticker | ticker | Ticker of the company that owns lenders (resolved to its CIK). Joint ventures it co-owns are returned as their own rows, flagged joint_venture. |
cik | integer (CIK) | CIK of the company that owns lenders. |
lender | string | Start of a lender's name as HUD prints it, e.g. FINANCE OF AMERICA. Upper or lower case. |
months | integer | How many recent months to return, 1 to 60 (default 12); forward and reverse only. Default: 12. |
Response fields (9)
| Field | Type | Description |
|---|
dataset | string | forward, reverse or multifamily |
source_url | string | HUD's page for this dataset |
cite | string | The source in one sentence, with the link |
lenders | array | The lenders the request matched: lender_key, lender, parent_cik, parent_name, relation, joint_venture, ownership_pct |
rows | array | forward and reverse: per month and lender, loans, volume, avg_rate, share_of_loans_pct, joint_venture, cite |
holdings | array | multifamily: per role (holder, servicer) and lender, active_projects, current_balance, recent endorsements, joint_venture |
servicing | array | multifamily: the servicing portfolio of the company's own servicers (projects, units, balance, avg_rate, as_of) |
latest_month | string or null | forward and reverse: the newest month in rows |
note | string | How to read the figures |
GET /api/v1/bank-financials pro
Bank financials from FDIC call reportsQuarterly 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the listed company that owns the banks (resolved to its CIK). |
cik | integer (CIK) | CIK of the listed company that owns the banks. |
name | string | Part of a company's name or of the name of one of its banks (at least 3 characters), e.g. Chase or Wells Fargo. |
metric | assets | 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 | roa | Ranking 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. |
quarter | date | Ranking mode: the quarter end (YYYY-MM-DD, any day of the quarter's last month). Default the newest stored quarter. |
order | asc | desc | Ranking mode: asc or desc. Default is the metric's usual order (highest first; lowest first for capital ratios). |
quarters | integer | Company mode: how many recent quarters, 1 to 20 (default 8). Default: 8. |
limit | integer | Ranking mode: how many companies, 1 to 250 (default 25). Default: 25. |
Response fields (9)
| Field | Type | Description |
|---|
mode | string | company or ranking |
scope | string | What the figures cover: US bank subsidiaries |
note | string | How to read the figures |
source_url | string | The FDIC's BankFind page |
cite | string | The source in one sentence, with the link |
companies | array | company 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 |
metric | string or null | ranking mode: the metric used |
quarter_end | date or null | ranking mode: the quarter ranked |
rows | array or null | ranking 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 filingsMonthly 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the listed company whose series to return (its issuer-wide series and the card trusts it sponsors). |
cik | integer (CIK) | CIK of the listed company whose series to return. |
series | list 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_trust | One 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. |
kind | issuer | pool | issuer keeps the issuer-wide series (8-K); pool keeps the securitized card pools (10-D). Default both, in separate lists. |
months | integer | How many recent months of each series, 1 to 120 (default 13). More than 36 needs three series or fewer. Default: 13. |
Response fields (7)
| Field | Type | Description |
|---|
licence | string | US public records (SEC EDGAR), public domain |
note | string | How to read issuer-wide series and securitized card pools |
source_url | string | The SEC's EDGAR search page |
cite | string | The source in one sentence, with the link |
newest_month | date or null | The newest month among the series returned |
issuer_wide | array | Issuer-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_pools | array | Securitized 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 companyCounts 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the listed company (resolved to its CIK). |
cik | integer (CIK) | CIK of the listed company. |
name | string | Part of a company's name or of the name the CFPB database files it under (at least 3 characters). |
product | string | Ranking mode: one CFPB product, e.g. Credit card or Mortgage. Default all products. |
sort | volume | change | Ranking mode: volume (complaints in the latest 3 months) or change (against the same months a year earlier). Default volume. |
order | asc | desc | Ranking mode: asc or desc. Default desc. |
months | integer | Company mode: how many recent months of counts, 1 to 120 (default 24). Default: 24. |
limit | integer | Ranking mode: how many companies, 1 to 250 (default 25). Default: 25. |
Response fields (7)
| Field | Type | Description |
|---|
mode | string | company or ranking |
window | string | The three complete months the figures cover |
compared_with | string | The window a year earlier |
note | string | How to read the figures |
source_url | string | The CFPB Consumer Complaint Database page |
companies | array or null | company mode: per company cik, ticker, name, windows by product, issues and months, each with source_url and cite |
rows | array or null | ranking 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 suspensionsOne 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker 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. |
cik | integer (CIK) | CIK of a company: releases whose names we match to it with confidence (see include_possible for weaker matches). |
include_possible | boolean | With 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_type | list of litigation_release | administrative_proceeding | trading_suspension | litigation_release (a court action), administrative_proceeding (an order of the Commission) or trading_suspension (a pause in trading in a stock). |
since | date | Only releases dated on or after this date (YYYY-MM-DD): release_date. |
until | date | Only releases dated on or before this date (YYYY-MM-DD): release_date. |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (19)
| Field | Type | Description |
|---|
release_type | string | litigation_release, administrative_proceeding or trading_suspension |
release_no | string | The SEC's release number, e.g. LR-26677, 34-106736, IA-7028 |
release_date | date | Date the SEC lists for the release (New York) |
title | string | The respondents' names as the SEC lists them |
respondents | array | The title split into the names it lists (a heuristic split) |
related_numbers | array | Other numbers on the same release, e.g. AAER-4603 |
file_no | string or null | Administrative proceedings: the file number, e.g. 3-22778 |
documents | array | Other documents the list links for the release (complaint, judgment, summary): { label, url } |
match_tier | string or null | confident 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 |
matches | array | Company matches of the names: { name, cik, ticker, method (exact, fuzzy, manual, order_text), score, tier (confident or possible) } |
confident_ciks | array | CIKs of the companies matched with confidence |
possible_ciks | array | CIKs of companies that are only a possible match for a name |
order_status | string or null | Trading suspensions: read, unreadable (a layout we do not parse) or unavailable (the PDF was not served) |
ticker | string or null | Trading suspensions: the symbol the order names, when it names exactly one |
suspended_cik | integer or null | Trading suspensions: the CIK the order names, when it names exactly one |
suspension_start | date or null | Trading suspensions: first day of the suspension, from the order |
suspension_end | date or null | Trading suspensions: last day of the suspension, from the order |
url | string | The release on sec.gov (an HTML page or the order PDF) |
first_seen_at | datetime | When we first stored the row |
GET /api/v1/clinical-trials pro
Industry-sponsored clinical trials from ClinicalTrials.govStudies 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).
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the sponsoring company (resolved to its CIK). Only studies whose sponsor name matched that company with confidence are returned. |
cik | integer (CIK) | CIK of the sponsoring company. |
role | sponsor | any | With 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. |
phase | list of early_phase_1 | phase_1 | phase_2 | phase_3 | phase_4 | Phase of the study. A study that spans two phases (Phase 2/3) matches both. |
status | list of not_yet_recruiting | recruiting | enrolling_by_invitation | active_not_recruiting | suspended | completed | terminated | withdrawn | unknown | The study's overall status on ClinicalTrials.gov. With view=status_changes: the status it changed to. |
listed | boolean | true: only studies whose lead sponsor is matched to a public company. false or omitted: every industry-sponsored study. |
view | updates | status_changes | completed_phase3 | upcoming | updates: 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. |
since | date | Only 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). |
until | date | Only rows on or before this date (YYYY-MM-DD); the same date as since. |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (30)
| Field | Type | Description |
|---|
nct_id | string | ClinicalTrials.gov identifier, NCT followed by eight digits |
title | string | The study's brief title |
phase | string or null | Phase 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_phase3 | boolean | Phase 3 is one of the study's phases |
status | string | Overall status now, in the registry's words: RECRUITING, COMPLETED, TERMINATED, WITHDRAWN, ... |
why_stopped | string or null | The sponsor's reason for a terminated, withdrawn or suspended study |
status_from | string or null | Status before the latest change we observed; null when we saw none |
status_to | string or null | Status after the latest change we observed (in view=status_changes: the change of this row) |
status_changed_at | datetime or null | When we observed that change (not when the sponsor made it) |
conditions | array | Conditions or diseases studied, as listed |
interventions | array | Interventions as {name, type}: DRUG, BIOLOGICAL, DEVICE, ... Names and types only |
lead_sponsor | string | Lead sponsor as the registry prints it |
sponsor_class | string or null | The registry's class of the lead sponsor: INDUSTRY, NIH, OTHER, ...; a study with an industry collaborator can have a lead sponsor of another class |
cik | integer or null | SEC CIK of the public company the lead sponsor was matched to; null when not matched with confidence |
ticker | string or null | Ticker of that company |
sponsor_match_method | string or null | How the lead sponsor was matched: manual, exact or fuzzy; unmatched when it was tried and failed |
sponsor_match_score | number or null | Score of the name match, 0 to 100 |
collaborators | array | Collaborators as {name, class, cik}; cik only for a confident match |
enrollment | integer or null | Participants enrolled or planned |
enrollment_type | string or null | ACTUAL or ESTIMATED |
start_date | date or null | Study start date |
primary_completion_date | date or null | When the last participant is due to be examined for the main outcome |
primary_completion_type | string or null | ACTUAL or ESTIMATED |
completion_date | date or null | When the study is done |
completion_type | string or null | ACTUAL or ESTIMATED |
month_only_dates | array | Which of the three dates the registry gave as a month only |
last_update_posted | date | When the sponsor last updated the study's record |
has_results | boolean | Results have been posted on ClinicalTrials.gov |
source_url | string | The study's page on ClinicalTrials.gov |
first_seen_at | datetime | When we first stored the study |
GET /api/v1/fda-approvals pro
FDA drug approvals and device clearances from openFDAApproved 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the applicant company (resolved to its CIK). Only actions whose applicant name matched that company with confidence are returned. |
cik | integer (CIK) | CIK of the applicant company. |
source | list of drugsfda | 510k | pma | drugsfda: approved drug submissions (Drugs@FDA). 510k: device clearances. pma: premarket approvals of devices. |
application_type | list of nda | bla | anda | 510k | pma | nda (new drug application) and bla (biologics license application) are brand-name drugs and biologics; anda is a generic drug; 510k and pma are devices. |
kind | original | supplement | clearance | original: the first approval of a drug or device application. supplement: a later approved change (new use, label, manufacturing). clearance: a 510(k) clearance. |
new_drugs | boolean | true: only original approvals of NDAs and BLAs: the first approval of a brand-name drug or biologic (not generics, supplements or devices). |
listed | boolean | true: only actions whose applicant is matched to a public company. false or omitted: every action. |
since | date | Only actions dated on or after this date (YYYY-MM-DD): action_date, the FDA's decision date. |
until | date | Only actions dated on or before this date (YYYY-MM-DD): action_date. |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (22)
| Field | Type | Description |
|---|
action_key | string | Stable id of the action: drug:<application>:<ORIG or SUPPL>:<submission>, 510k:<K number> or pma:<P number>:<supplement> |
source | string | drugsfda, 510k or pma |
record_id | string | Application number (NDA021436), K number (K123456) or PMA number (P120001) |
application_type | string | NDA, BLA, ANDA, 510K or PMA |
action_kind | string | original, supplement or clearance |
submission_number | string or null | Submission number of a drug approval, or the PMA supplement number; null for originals and 510(k)s |
action_date | date | The FDA's decision date |
status_code | string or null | The FDA's status or decision code for the action, as printed |
submission_class | string or null | Drugs: the class of the submission (such as Type 1 - New Molecular Entity, Efficacy, Labeling); PMA: the supplement type |
review_priority | string or null | Drugs: PRIORITY or STANDARD review, when given |
product_name | string or null | Brand names of a drug, or the device name |
ingredients | string or null | Active ingredients of a drug, or a PMA's generic name |
product_code | string or null | Devices: the FDA product code |
advisory_committee | string or null | Devices: the FDA review panel |
applicant | string | Applicant or sponsor exactly as the FDA prints it |
cik | integer or null | SEC CIK of the public company the applicant was matched to; null when not matched with confidence |
ticker | string or null | Ticker of that company |
applicant_match_method | string or null | How the applicant was matched: manual, exact or fuzzy; unmatched when it was tried and failed |
applicant_match_score | number or null | Score of the name match, 0 to 100 |
doc_url | string or null | The approval letter or label on the FDA's site, when the record has one |
source_url | string | The FDA's database page for the application, clearance or PMA |
first_seen_at | datetime | When we first stored the action |
GET /api/v1/executive-pay pro
CEO and named-executive pay from proxy statementsThe 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the company (resolved to its CIK). |
cik | integer (CIK) | CIK of the company. |
latest | boolean | true: only each company's most recent fiscal year. false or omitted: every fiscal year in range. |
since | date | Only fiscal years that ended on or after this date (YYYY-MM-DD): fiscal_year_end. |
until | date | Only fiscal years that ended on or before this date (YYYY-MM-DD): fiscal_year_end. |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (16)
| Field | Type | Description |
|---|
cik | integer | SEC CIK of the company |
ticker | string or null | Ticker of the company |
company_name | string or null | Company name from our securities list |
frame | string | Fiscal-year label (CY2025: the year that mostly overlaps calendar 2025) |
fiscal_year_start | date or null | First day of the fiscal year |
fiscal_year_end | date | Last day of the fiscal year |
ceo_total_comp | number or null | CEO total compensation as reported in the Summary Compensation Table, USD |
ceo_comp_actually_paid | number or null | CEO compensation actually paid, USD (can be negative) |
other_neo_avg_total_comp | number or null | Average total compensation of the other named executive officers, USD |
other_neo_avg_comp_actually_paid | number or null | Their average compensation actually paid, USD |
total_shareholder_return | number or null | Company total shareholder return: value of $100 invested at the start of the period |
peer_group_total_shareholder_return | number or null | Peer group total shareholder return on the same basis |
amount_to_check | boolean | True when a pay amount is over $1 billion, usually a unit error by the filer |
accession_no | string | SEC accession number of the filing |
filing_url | string | The filing on EDGAR |
first_seen_at | datetime | When we first stored a figure of this row |
GET /api/v1/stock-splits pro
Stock splitsForward 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the stock. Splits are stored under the ticker that traded on the day; class-share spellings (BRK-B, BRK.B) are matched. |
direction | forward | reverse | forward: a company that gives holders more shares (4-for-1). reverse: fewer shares at a higher price (1-for-10). |
since | date | Only splits executed on or after this date (YYYY-MM-DD): execution_date. Splits that have not happened yet are not in the data. |
until | date | Only splits executed on or before this date (YYYY-MM-DD): execution_date. |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (10)
| Field | Type | Description |
|---|
ticker | string | Ticker that traded on the execution date |
cik | integer or null | SEC CIK of the company with that active ticker |
company_name | string or null | Name from our securities list |
execution_date | date | First day the stock trades at the split price (ex-date); can be in the future |
split_from | number | Shares before the split |
split_to | number | Shares after the split |
ratio | string | Ratio as <split_to>-for-<split_from>, e.g. 4-for-1 |
direction | string | forward (more shares) or reverse (fewer shares) |
has_stock_page | boolean | Whether 13F.ai has a page for the ticker |
first_seen_at | datetime | When 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.
| Parameter | Type | Description |
|---|
q | string | Words to look for in the title of the bill (at least 2 characters; case does not matter). |
bioguide_id | bioguide | The member who sponsored the bill (Bioguide id). |
chamber | house | senate | Chamber the bill was introduced in. |
party | Democrat | Republican | Independent | Party of the sponsor in the congressional biographical record. Independent covers every member who is neither a Democrat nor a Republican. |
policy_area | Agriculture 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 Development | Policy area Congress.gov files the bill under (one of 32, e.g. Taxation). |
bill_type | list of hr | s | hjres | sjres | hconres | sconres | hres | sres | Kind 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. |
congress | integer | Congress number, e.g. 119 for the Congress that began in January 2025. |
since | date | Only bills whose latest action is on or after this date (YYYY-MM-DD). |
until | date | Only bills whose latest action is on or before this date (YYYY-MM-DD). |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (18)
| Field | Type | Description |
|---|
congress | integer | Congress number (119 began in January 2025) |
bill_type | string | hr, s, hjres, sjres, hconres, sconres, hres or sres |
number | integer | Bill number within its Congress and type |
bill_label | string | The citation as written in print, e.g. H.R. 1234 |
title | string or null | Title (first 500 characters) |
origin_chamber | string or null | House or Senate |
introduced_date | date or null | Date the bill was introduced |
sponsor_bioguide_id | string or null | Sponsor's Bioguide id; null when we have no member record for the sponsor |
sponsor_name | string or null | Sponsor's official name, else the name as Congress.gov prints it |
sponsor_party | string or null | Party of the sponsor |
sponsor_state | string or null | State of the sponsor |
policy_area | string or null | Policy area Congress.gov files the bill under; null until one is assigned |
latest_action_date | date | Date of the latest action |
latest_action_text | string or null | The latest action as Congress.gov words it |
cosponsor_count | integer or null | Number of cosponsors |
action_count | integer | Number of recorded actions |
source_url | string | The bill on congress.gov |
updated_at | datetime or null | When 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker 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. |
cik | integer (CIK) | CIK of the company behind the PAC. |
cmte_id | string | FEC committee id of the PAC that gave, e.g. C00142711. |
bioguide_id | bioguide | The member of Congress who received the gift (Bioguide id). |
party | Democrat | Republican | Independent | Party 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. |
chamber | house | senate | Office the recipient is running for (from the FEC candidate id): the House or the Senate. |
committee | string | Only 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. |
cycle | integer | Two-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_amount | integer | Only gifts of at least this many US dollars. Refunds are compared by their size, not their sign. |
entries | contributions | refunds | all | contributions (default): money and in-kind gifts the PAC gave. refunds: money given back to the PAC (negative amounts). all: both. Default: contributions. |
since | date | Only gifts dated on or after this day (YYYY-MM-DD): the date the PAC reports for the transaction. |
until | date | Only gifts dated on or before this day (YYYY-MM-DD). |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (22)
| Field | Type | Description |
|---|
sub_id | string | The FEC's own id of the transaction line (a 19-digit number, so it is a string) |
cmte_id | string | FEC id of the PAC that gave |
pac_name | string or null | Name of the PAC |
company_name | string or null | Company the PAC is connected to as the FEC names it, else the PAC's own name |
cik | integer or null | SEC CIK of the connected company, when we matched it |
ticker | string or null | Ticker of that company |
recipient_bioguide_id | string or null | Bioguide id of the recipient when the candidate is a member of Congress in our records |
recipient_name | string or null | The 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_note | string or null | Set 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_party | string or null | Party of the recipient: Democrat, Republican or Independent (every other party) |
recipient_state | string or null | State of the recipient (taken from the FEC candidate id for a candidate who is not a member) |
candidate_id | string or null | FEC candidate id of the recipient; its first letter is the office (H, S or P) |
recipient_committee_id | string or null | FEC id of the committee that received the gift |
transaction_type | string | contribution (money) or in_kind (goods or services) |
amount | number | Amount in US dollars; negative for a refund returned to the PAC |
txn_date | date | Date the PAC reports for the gift |
election | string or null | The 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 |
cycle | integer | Two-year election cycle of the FEC file the line comes from |
report_tp | string or null | FEC report the line was filed on, e.g. M4 (monthly, April), Q2, YE, 12G |
is_amendment | boolean | The line comes from an amended report |
source_url | string | The FEC's page of the committee's spending on that day |
first_seen_at | datetime | When 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.
| Parameter | Type | Description |
|---|
bioguide_id | bioguide | A member of Congress (Bioguide id): the finance rows of every FEC candidate id they have. |
candidate_id | string | FEC candidate id: H, S or P and eight more characters, e.g. H8CA05035. |
cycle | integer | Two-year election cycle, named for its even-numbered end year (2026 is January 2025 to December 2026). Files start at 2016. |
office | house | senate | president | Office the candidate runs for (from the FEC candidate id). |
state | string | Two-letter state of the office (not for President). |
party | string | FEC party code of the candidate, e.g. DEM, REP, IND, LIB, GRE. |
status | incumbent | challenger | open_seat | Incumbent, challenger or open seat, as the FEC lists the candidate. Blank in the file for a few candidates. |
members_only | boolean | true = only candidates who are, or were since 2012, members of Congress in our records. |
min_receipts | integer | Only candidates whose total receipts in the cycle are at least this many US dollars. |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (25)
| Field | Type | Description |
|---|
cycle | integer | Two-year election cycle, named for its even end year (2026 = 2025-2026) |
candidate_id | string | FEC candidate id; its first letter is the office (H, S or P) |
candidate_name | string | The candidate's name as the FEC lists it: LAST, FIRST |
bioguide_id | string or null | Bioguide id when the candidate is a member of Congress in our records |
office | string | H House, S Senate, P President |
state | string or null | State of the office; null for President |
district | string or null | House district as two digits; 00 is an at-large seat (House) or the whole state (Senate) |
party | string or null | FEC party code, e.g. DEM, REP, IND |
incumbent_status | string or null | I incumbent, C challenger, O open seat; null when the FEC leaves it blank |
total_receipts | number or null | Everything the campaign took in during the cycle, in US dollars (includes transfers from the candidate's other committees) |
total_disbursements | number or null | Everything the campaign spent during the cycle |
cash_beginning | number or null | Cash on hand at the start of the cycle |
cash_end | number or null | Cash on hand at coverage_end_date |
debts_owed | number or null | Debts the campaign owes |
candidate_contributions | number or null | The candidate's own gifts to the campaign |
candidate_loans | number or null | Loans the candidate made to the campaign |
individual_contributions | number or null | Total from individuals (itemized and not); no donor is identified |
pac_contributions | number or null | Total from other political committees (PACs) |
party_contributions | number or null | Total from party committees |
transfers_from_authorized | number or null | Money moved in from the candidate's own other committees (part of total_receipts, not new money) |
coverage_end_date | date or null | The last report the totals include |
in_current_campaigns | boolean | The candidate is on the FEC's list of current House and Senate campaigns |
source_file | string | The FEC file the row comes from, e.g. weball26.zip |
source_url | string | The candidate's page on fec.gov for the cycle |
first_seen_at | datetime | When 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 votesRecorded 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.
| Parameter | Type | Description |
|---|
bioguide_id | bioguide | Only votes this member of Congress took part in (Bioguide id). Each row then also carries the member's position (position, vote_cast). |
position | Yea | Nay | Present | Not Voting | Only votes where the member (bioguide_id, required with this) took this position: Yea, Nay, Present or Not Voting. |
chamber | house | senate | House or Senate. |
congress | integer | Congress number of the vote, e.g. 119 for the Congress that began in January 2025. |
session | integer | Session of the Congress (1 or 2). Roll numbers restart at 1 every session. |
bill_type | hr | s | hjres | sjres | hconres | sconres | hres | sres | Kind 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_number | integer | Number of the measure the vote was on (with bill_type). Numbers restart every Congress: add bill_congress to name one measure. |
bill_congress | integer | Congress of the measure (with bill_type and bill_number); omitted, the votes on that number in every Congress are returned. |
sponsor_bioguide_id | bioguide | Only votes on measures this member sponsored (Bioguide id), joined to the bills dataset. |
q | string | Words 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). |
since | date | Only votes taken on or after this date (YYYY-MM-DD). |
until | date | Only votes taken on or before this date (YYYY-MM-DD). |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (27)
| Field | Type | Description |
|---|
chamber | string | house or senate |
congress | integer | Congress number (119 began in January 2025) |
session | integer | Session of the Congress (1 or 2) |
roll_number | integer | Roll call number; restarts at 1 every session |
vote_date | date | Date of the vote |
voted_at | datetime or null | When the vote was taken, in UTC (the House gives Eastern time); null for every Senate vote |
question | string or null | The question put to the chamber, e.g. On Passage |
vote_type | string or null | House: YEA-AND-NAY, RECORDED VOTE, 2/3 YEA-AND-NAY, QUORUM; Senate: the majority required |
result | string or null | Passed, Failed, Agreed to, Confirmed ... (the winning name for the election of the Speaker) |
title | string or null | The chamber's description of the vote (first 500 characters) |
amendment | string or null | Amendment number and author or purpose, when the vote was on an amendment |
bill_congress | integer or null | Congress of the measure voted on |
bill_type | string or null | hr, s, hjres, sjres, hconres, sconres, hres or sres; null when the vote was not on one of these |
bill_number | integer or null | Number of the measure voted on |
bill_label | string or null | The measure as written in print (H.R. 1234), or the source's own label for a nomination |
bill_title | string or null | Title of the measure, when it is in the bills dataset |
bill_sponsor_bioguide_id | string or null | Bioguide id of the measure's sponsor, when it is in the bills dataset |
bill_url | string or null | The measure on congress.gov |
yea | integer or null | Yeas; null when the vote has no yes or no totals |
nay | integer or null | Nays |
present | integer or null | Members voting present |
not_voting | integer or null | Members not voting |
position | string or null | With bioguide_id: the member's position (Yea, Nay, Present, Not Voting or Other); otherwise null |
vote_cast | string or null | With bioguide_id: the vote as recorded when it differs from position (Aye, No, a candidate's name); otherwise null |
source_url | string | The record of the vote we read: the House Clerk's file or Voteview's page (Senate) |
official_url | string | The 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_url | string or null | Senate 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 voteThe 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.
| Parameter | Type | Description |
|---|
chamber (required) | house | senate | House or Senate. |
congress (required) | integer | Congress number of the vote. |
session (required) | integer | Session of the Congress (1 or 2). |
roll_number (required) | integer | Roll call number within the session. |
position | Yea | Nay | Present | Not Voting | Only members who took this position. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (8)
| Field | Type | Description |
|---|
member_id | string | Bioguide id (both chambers); icpsr-<number> for a senator the source gives no Bioguide id |
bioguide_id | string or null | Bioguide id; null for a member the source gives none |
member_name | string or null | Official name, else the name as the source prints it |
party | string or null | Party (D, R, I): as recorded at the vote in the House, for the whole Congress in the Senate |
state | string or null | State as recorded |
position | string | Yea, Nay, Present, Not Voting or Other |
vote_cast | string or null | The vote as recorded when it differs from position (Aye, No, a candidate's name) |
vote_date | date | Date of the vote |
GET /api/v1/short-volume pro
FINRA daily short sale volume by symbolShort 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker (FINRA's symbol). Class-share spellings are matched (BRK-B, BRK.B and BRK/B). |
cik | integer (CIK) | CIK: the daily short volume of all active and retired tickers of the company. |
min_total_volume | integer | Only rows with at least this many shares of total reported volume. |
since | date | Only 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). |
until | date | Only 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_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (10)
| Field | Type | Description |
|---|
trade_date | date | Trading day |
ticker | string | FINRA symbol |
cik | integer or null | SEC CIK of the company with that active ticker |
market | string | Reporting facilities as published (B, Q, N) |
short_volume | number | Shares sold short in the day's reported trades |
short_exempt_volume | number | Of those, shares sold short under an exemption |
total_volume | number | Total shares in the day's reported trades |
short_share_pct | number or null | short_volume as a percentage of total_volume |
source_url | string | FINRA source file for the day |
first_seen_at | datetime | When we first stored the row |
GET /api/v1/fails-to-deliver pro
SEC fails-to-deliver balances by settlement dateFails 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker (the SEC's symbol). Class-share spellings (BRK-B, BRK.B) are matched. |
cik | integer (CIK) | CIK: the fails of all active and retired tickers of the company. |
min_shares | integer | Only balances of at least this many shares. |
since | date | Only settlement dates on or after this date (YYYY-MM-DD). With ticker / cik and no since, the last 400 days are returned. |
until | date | Only settlement dates on or before this date (YYYY-MM-DD). |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (10)
| Field | Type | Description |
|---|
settlement_date | date | Settlement date the balance is for |
ticker | string | The SEC's symbol (may be blank in older rows) |
cusip | string | CUSIP of the security |
cik | integer or null | SEC CIK of the company with that active ticker |
description | string or null | Issue description as the SEC prints it |
shares_failed | number | Cumulative balance of shares failed to deliver at the end of the settlement date |
price | number or null | Previous day's closing price from the SEC's file |
value_usd | number or null | shares_failed times price, in US dollars |
source_url | string | The SEC page that lists the fails-to-deliver files |
first_seen_at | datetime | When 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of a company that is the buyer or the target in the notice (resolved to its CIK). |
cik | integer (CIK) | CIK of a company that is the buyer or the target in the notice. |
role | acquirer | target | With ticker / cik: only notices where the company is the buyer (acquirer) or the target. Default both. |
exact_only | boolean | With ticker / cik: true drops notices where the company matched only by a loose name match (acquiring_match / acquired_match = 'possible'). |
q | string | Words in the name of either party or of an acquired entity (case-insensitive). |
listed | boolean | true: only notices where at least one party was matched to a company that files with the SEC. false or omitted: every notice. |
since | date | Only notices granted on or after this date (YYYY-MM-DD): date_granted. |
until | date | Only notices granted on or before this date (YYYY-MM-DD): date_granted. |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (16)
| Field | Type | Description |
|---|
notice_id | string | The FTC record's own id |
transaction_number | string | The FTC's HSR transaction number |
date_granted | date | The day early termination was granted |
acquiring_party | string or null | The acquiring person (the buyer's ultimate parent entity) as the notice words it |
acquired_party | string or null | The acquired person (the target's ultimate parent entity) |
acquired_entities | array | Names of the entities being acquired |
acquiring_cik | integer or null | SEC CIK of the company the acquiring party was matched to |
acquiring_ticker | string or null | Ticker of that company |
acquiring_match | string or null | 'match' (a close name match) or 'possible' (a looser match); null when there is no match |
acquiring_match_score | number or null | Name similarity of the match, 0 to 100 |
acquired_cik | integer or null | SEC CIK of the company the acquired party was matched to |
acquired_ticker | string or null | Ticker of that company |
acquired_match | string or null | 'match' or 'possible'; null when there is no match |
acquired_match_score | number or null | Name similarity of the match, 0 to 100 |
source_url | string | The FTC page that lists the notices |
first_seen_at | datetime | When we first stored the notice |
GET /api/v1/wikipedia-views pro
Daily English Wikipedia page views of company articlesDaily 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the company (resolved to its CIK, then to the Wikipedia article about it). |
cik | integer (CIK) | CIK of the company. |
article | string | English Wikipedia article title as in its address, with underscores. |
since | date | Only days on or after this date (YYYY-MM-DD). |
until | date | Only days on or before this date (YYYY-MM-DD). |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (7)
| Field | Type | Description |
|---|
view_date | date | Day (UTC) |
article | string | English Wikipedia article title as in its address (underscores) |
article_url | string | The article on Wikipedia |
views | integer | Views that day |
cik | integer or null | SEC CIK of the company the article is about |
ticker | string or null | Main ticker of that company |
first_seen_at | datetime | When we first stored the row |
GET /api/v1/app-ratings pro
Daily App Store ratings of listed companies' appsThe 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.
| Parameter | Type | Description |
|---|
ticker | ticker | Ticker of the company that owns the app. |
cik | integer (CIK) | CIK of the company that owns the app: all its apps, whichever ticker we list them under. |
app_id | integer | The app's id on its store (Apple's track id). |
store | ios | Store: ios (Apple's US App Store). Google Play is not collected. |
since | date | Only snapshots taken on or after this date (YYYY-MM-DD). |
until | date | Only snapshots taken on or before this date (YYYY-MM-DD). |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (14)
| Field | Type | Description |
|---|
snapshot_date | date | Day of the snapshot (New York) |
store | string | Store: ios |
app_id | integer | The app's id on its store |
app_name | string | App name |
ticker | string | Ticker of the company that owns the app |
company | string | Company name |
cik | integer or null | SEC CIK of the company with that active ticker |
average_rating | number or null | Average star rating, 0 to 5, over every version (null when the app has no ratings) |
rating_count | integer | Number of ratings |
version | string or null | Version on sale that day |
price | number or null | Price of the app in the store's currency |
currency | string or null | Currency of price |
source_url | string | The app on its store |
first_seen_at | datetime | When we first stored the row |
GET /api/v1/companies/{ticker_or_cik} free
Company profile and snapshotOne 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.
| Parameter | Type | Description |
|---|
ticker_or_cik (path) | string | A ticker symbol (NVDA, BRK-B) or a SEC CIK (1045810). |
Response fields (39)
| Field | Type | Description |
|---|
cik | integer | SEC CIK (the stable company key) |
ticker | string | Primary active ticker |
tickers | array | Every ticker of the company: {ticker, exchange, active} |
requested_ticker | string or null | The ticker you asked for, when you used one |
name | string | Company name |
exchange | string or null | Exchange of the primary ticker |
is_listed | boolean | At least one ticker is active |
sector | string or null | Our SIC-based sector (11 sectors; not GICS) |
sic | integer or null | SEC SIC code |
sic_description | string or null | SEC description of the SIC code |
entity_type | string or null | SEC entity type |
filer_category | string or null | Filer status, e.g. Large accelerated filer |
fiscal_year_end | string or null | MMDD |
state_of_incorporation | string or null | EDGAR state code |
city | string or null | Business address city |
state_or_country | string or null | Business address state or country code |
is_foreign | boolean or null | Business address is outside the US |
website | string or null | Website, when the SEC has one |
former_names | array | Former names with from / to dates |
shares_outstanding | number or null | Latest cover-page shares outstanding (all common classes added up for a multi-class company; see shares_basis), adjusted for later splits |
shares_as_of | date or null | Date of that share count (the SEC filing it came from); the estimated market cap uses it |
shares_source | string or null | dei (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_basis | string or null | reported, 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_factor | number or null | Product of split_to / split_from for splits after the share count was filed (1 when none); already applied to shares_outstanding |
share_classes | array or null | Raw shares per common class on the cover page: {class, shares}, when the count came from it |
market_cap | number or null | Estimated 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_basis | string | Always estimated: market_cap is our estimate, not an exchange or vendor figure |
market_cap_source | string or null | own, or null when there is no market cap |
market_cap_status | string or null | ok, or no own figure (the estimated market cap is not available; see market_cap_reason) |
market_cap_reason | string or null | Plain-words reason when market_cap is null (for example: No share count in the company's recent SEC filings); null otherwise |
is_adr | boolean or null | The primary ticker is an ADR: shares_outstanding counts ordinary shares |
ordinary_per_ads | number or null | Ordinary shares per ADS, for ADRs whose ratio we hold |
public_float | number or null | Public float reported on the latest annual report, USD |
public_float_as_of | date or null | Date of that figure |
fund_ownership_pct | object or null | Share 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_status | string or null | ok 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_url | string | The company's filings on SEC EDGAR |
profile_updated_at | datetime or null | When the SEC profile was last read |
first_seen_at | datetime or null | When we first stored the profile |
GET /api/v1/companies/{ticker_or_cik}/financials pro
Company financials: quarterly and annual figures and the revenue splitFinancial 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.
| Parameter | Type | Description |
|---|
ticker_or_cik (path) | string | A ticker symbol (NVDA, BRK-B) or a SEC CIK (1045810). |
quarters | integer | How many of the latest quarters to return, 1 to 20 (default 8). The data holds the last five calendar years. Default: 8. |
years | integer | How many of the latest fiscal years to return, 0 to 5 (default 2). Default: 2. |
Response fields (10)
| Field | Type | Description |
|---|
cik | integer | SEC CIK (the stable company key) |
ticker | string or null | Primary active ticker |
name | string | Company name |
fiscal_year_end | string or null | MMDD |
currency | string | USD: dollar amounts are US dollars, EPS is dollars per share |
quarterly | array | The 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 |
annual | array | The 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_breakdown | object or null | Newest 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 |
notes | array | How to read the figures: periods, the fourth quarter, cash flow and debt |
source_url | string | The 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.
| Parameter | Type | Description |
|---|
q | string | Words of the name (every word must appear), e.g. 'pelosi' or 'nancy pelosi'. |
chamber | house | senate | Chamber of the member's latest term. |
state | string | Two-letter state or territory code. |
party | string | Party, e.g. Democrat, Republican, Independent. |
is_current | boolean | true = sitting members only, false = former members only. |
updated_since | datetime | Only 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. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (20)
| Field | Type | Description |
|---|
bioguide_id | string | Bioguide id (the stable key for members of Congress) |
name | string | Official full name |
first_name | string | First name |
last_name | string | Last name |
party | string or null | Party |
caucus | string or null | Caucus, for independents |
state | string | State or territory |
district | integer or null | House district (0 at-large / delegate); null for senators |
chamber | string | house or senate (latest term) |
is_voting | boolean | False for delegates and the resident commissioner |
is_current | boolean | Sitting member |
term_start | date | Start of the latest term |
term_end | date | End of the latest term (scheduled, for sitting members) |
url | string or null | Official website |
photo_url | string or null | Public-domain portrait (may 404) |
fec_candidate_ids | array | FEC candidate ids |
opensecrets_id | string or null | OpenSecrets id |
govtrack_id | integer or null | GovTrack id |
source_url | string | Bioguide biography page |
first_seen_at | datetime | When we first stored the member |
GET /api/v1/politicians/{bioguide_id} free
One member of Congress with committees and a trading summaryProfile of a member, current committee assignments (with leadership titles) and counts of their reported trades. Returns a single object in data.
| Parameter | Type | Description |
|---|
bioguide_id (path) | bioguide | Bioguide id, e.g. P000197. |
Response fields (22)
| Field | Type | Description |
|---|
bioguide_id | string | Bioguide id (the stable key for members of Congress) |
name | string | Official full name |
first_name | string | First name |
last_name | string | Last name |
party | string or null | Party |
caucus | string or null | Caucus, for independents |
state | string | State or territory |
district | integer or null | House district (0 at-large / delegate); null for senators |
chamber | string | house or senate (latest term) |
is_voting | boolean | False for delegates and the resident commissioner |
is_current | boolean | Sitting member |
term_start | date | Start of the latest term |
term_end | date | End of the latest term (scheduled, for sitting members) |
url | string or null | Official website |
photo_url | string or null | Public-domain portrait (may 404) |
fec_candidate_ids | array | FEC candidate ids |
opensecrets_id | string or null | OpenSecrets id |
govtrack_id | integer or null | GovTrack id |
source_url | string | Bioguide biography page |
first_seen_at | datetime | When we first stored the member |
committees | array | Current committee and subcommittee assignments |
trading | object | trades, 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 disclosuresAn 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.
| Parameter | Type | Description |
|---|
bioguide_id | bioguide | One member of Congress (Bioguide id): every report year we have for them, newest first. |
year | integer | Only this report year (the year the report covers; it is filed the following spring). |
latest | boolean | true = 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_current | boolean | true = sitting members only, false = former members only. |
limit | integer | Rows per page, 1 to 1000 (default 100). Default: 100. |
cursor | string | Opaque cursor: pass the next_cursor of the previous page, with the same filters. |
Response fields (25)
| Field | Type | Description |
|---|
bioguide_id | string | Bioguide id of the member |
name | string | Official full name |
party | string or null | Party |
state | string | State or territory |
district | integer or null | House district (0 at-large / delegate) |
chamber | string | house |
is_current | boolean | Sitting member |
report_year | integer | The year the report covers |
report_type | string | annual_report, or amendment when an amended report is the latest of that year |
filed | date or null | Date the report was filed |
net_worth_low_usd | number | Lowest possible net worth: asset brackets at their lower ends minus debt brackets at their upper ends (can be negative) |
net_worth_mid_usd | number | Assets at the middle of their brackets minus debts at the middle of theirs |
net_worth_high_usd | number | Highest possible net worth: asset brackets at their upper ends minus debt brackets at their lower ends |
assets_listed | integer | Asset lines on the report |
liabilities_listed | integer | Liability lines on the report |
includes_open_ended_bracket | boolean | An 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_model | boolean | The report is a scanned paper filing, read by a model; it can contain errors |
doc_id | string | The Clerk's document id |
report_choice | string | Why 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_read | boolean | The 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_year | integer or null | The later report year that has not been read |
newer_report_status | string or null | scanned_not_read (a scanned paper filing not read yet) or could_not_be_parsed |
based_on_note | string or null | Plain sentence: which year the estimate is based on and why the newer report is missing |
method | string | How the estimate is made |
source_url | string | The report (PDF) on the House Clerk's site |
GET /api/v1/themes free
Published themesThe 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)
| Field | Type | Description |
|---|
slug | string | Theme identifier, also the last segment of its page URL |
name | string | Theme name |
kind | string | curated (members chosen by people under a published rule) or rule (computed from our data) |
group | string | Catalogue group: tech, energy, health-finance, government or data |
summary | string | One-line description |
company_count | integer or null | Companies listed; null for rule themes, whose size comes from the data |
page_url | string | The theme's page on 13f.ai |
GET /api/v1/themes/{slug} free
One theme with member activityOne 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.
| Parameter | Type | Description |
|---|
slug (path) | string | The theme slug from GET /themes, for example ai-chips or congress-most-bought. |
limit | integer | Companies (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)
| Field | Type | Description |
|---|
as_of | date | The date the activity figures were computed for (New York time) |
slug | string | Theme identifier |
name | string | Theme name |
kind | string | curated or rule |
group | string | Catalogue group: tech, energy, health-finance, government or data |
description | string | What the theme covers and does not cover |
rule | string | The membership rule in plain words |
reviewed | date | Date the membership was last reviewed |
changes | array | Change log: {date, change} |
case_commonly_made | array | Points commonly made in favor of the theme, attributed as such |
risks_commonly_cited | array | Risks commonly cited, same weight as the case |
comparable_etfs | array | Listed ETFs with an overlapping stated focus, for reference only (not an endorsement): {ticker, name} |
related | array | Related themes: {slug, name} |
activity_window | object or null | Period the activity figures cover: {from, to}, dates |
page_url | string | The theme's page on 13f.ai |
companies | array or null | Curated themes: companies in catalogue order with tier, role and 12-month activity counts; null for rule themes |
totals | object or null | Curated 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 |
fields | string or null | Rule themes: what value and detail mean for this rule; null for curated themes |
members | array or null | Rule 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_lists | array or null | congress-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 |
traders | object or null | congress-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 |
disclaimer | string | This is information, not a recommendation or investment advice |
activity_error | string or null | Set when the activity figures could not be loaded; the theme's text is still returned |
GET /api/v1/search free
Find companies, politicians, funds and insiders by nameName / ticker lookup across companies (ref.securities), members of Congress, 13F fund managers and insiders (the people who file SEC Forms 3, 4 and 5; type=insider, or in the mixed list when the name matches exactly or by prefix). Forgiving: misspellings (Pelosy), nicknames (Bernie Sanders, Jon / Jonathan), brand names (SpaceX, Google, Facebook), former company names and punctuation or suffix noise (Inc, Corp, &, .com) all resolve. Use it to turn a name into the CIK, Bioguide id, manager CIK or insider CIK (owner_cik of the insider-trades endpoint) the other endpoints are keyed by. Not paginated: up to `limit` hits per kind.
| Parameter | Type | Description |
|---|
q (required) | string | Company name or ticker, politician name, fund / manager name, or the name of a person who files SEC Forms 3, 4 and 5 (an insider). Misspellings, nicknames and brand names are fine. |
type | all | company | politician | fund | insider | Restrict to one kind of entity. Default: all. |
limit | integer | Maximum hits per kind, 1 to 25 (default 10). Default: 10. |
Response fields (8)
| Field | Type | Description |
|---|
type | string | company, politician, fund or insider |
id | string | CIK (companies, funds, insiders) or Bioguide id (politicians) |
name | string | Name |
ticker | string or null | Ticker, for companies |
cik | integer or null | CIK, for companies, funds and insiders |
bioguide_id | string or null | Bioguide id, for politicians |
detail | string or null | Exchange, party / state, ... |
url | string | API path of the entity's detail or data |
CSV and bulk files
Both are part of the Premium plan.
- CSV. Add
format=csv to a list endpoint. You get the same filters, page size and cursor as the JSON response, one header row (the documented fields, in order) and one row per result, at most 10,000 rows a download. The headers X-Rows-Returned, X-Row-Limit and X-CSV-Truncated say how many rows you got, and X-Next-Cursor carries the cursor for the next page. Text that a spreadsheet could read as a formula starts with an apostrophe. /companies/{ticker_or_cik} and /stock-splits and /fha-lending and /bank-financials and /consumer-complaints and /card-metrics stay JSON-only, because they carry numbers from licensed market data. - Bulk files. Every night we write gzip CSV files of the latest 13F filings, the current 13F positions, the 13F history by fund and by stock, Congress trades and insider trades.
GET /api/v1/bulk lists them with a download link for each; a link works for 5 minutes and names one file, so ask again for fresh ones. Send your key in the Authorization header only: the links need no key, and there are no public addresses. Add ?dataset=congress_trades for one dataset. Files are split into numbered parts, each with its own header row; sha256 is the checksum of the compressed part.
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.
| Tool | Plan | What it does |
|---|
search_entities | Basic | Find 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_overview | Mixed | One-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_overview | Basic | Profile 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_trades | Basic | Stock 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_trades | Basic | Stock 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_bills | Basic | Bills 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_donations | Basic | Gifts 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_finance | Basic | What 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_worth | Basic | Estimated 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_votes | Basic | Recorded (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_trades | Premium | Transactions 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_holders | Premium | Who 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_changes | Premium | What 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_holdings | Premium | Compares 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_lobbying | Premium | Lobbying 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_contracts | Premium | Each 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_contracts | Premium | Federal 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_filings | Premium | Which 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_sales | Premium | SEC 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_enforcement | Premium | The 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_deals | Premium | Mergers, 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_placements | Premium | Private 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_overview | Mixed | One-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_themes | Basic | Lists 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_theme | Mixed | Returns 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_events | Mixed | A 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_interest | Basic | Short 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_notices | Premium | Mass 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_trials | Premium | Industry-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_actions | Premium | Decisions 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_applications | Premium | H-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_lending | Premium | Loans 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_financials | Premium | Quarterly 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_metrics | Premium | 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 (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_complaints | Premium | Counts 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_pay | Premium | What 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_splits | Premium | Forward 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_volume | Basic | Short 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_views | Premium | How 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_ratings | Premium | The 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_deliver | Premium | Fails 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_clearances | Premium | 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 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_financials | Premium | A 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_leaderboards | Premium | The 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. |
search | Basic | Search 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. |
fetch | Mixed | The 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.
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.- The person opens
checkout_url and pays. We create their account for that email, and they can sign in later with an email link. 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
- License: personal, non-commercial use only, under Sections 5 and 6 of the Terms of Service (https://13f.ai/terms). Keys, tokens and connector access are for one person and may not be shared. Powering a site, app, bot, agent, newsletter or any tool that other people use counts as redistribution, even if they never see the raw data. Data responses carry an
X-License header that says so. For commercial use, display or redistribution, see commercial licensing. - Rate limit: the limits below are part of the Terms; do not work around them with more keys, accounts or addresses. 60 requests per minute per key on the Premium plan, counted separately on each server instance. Basic accounts using the MCP server for congressional data have 30 requests per minute and 500 calls per UTC day per account; the daily count is shared by all our servers and resets at 00:00 UTC, and the error says when. The per-minute limit is best effort (with several instances running, the real ceiling is higher). Responses carry
X-RateLimit-* and Retry-After headers. - No raw prices. Our market-data licence does not cover daily price history through the API. The company endpoint returns our estimated market capitalization only (shares from the latest SEC filing x last close from Tiingo; market_cap_basis is estimated).
- Data quality. Everything comes from public filings, and we match filings to companies automatically; the
link_method and match_method fields say how each match was made. Check the source link before relying on a single row. Information, not investment advice. - Versioning. Existing field names are stable and safe to build on. The version reads
1.0.0-preview because we are still adding fields and endpoints.