drillr.ai
API keys →

Filing Search

Filing search

GET/api/v2/filing-search
Coverage
US / CN / JP
Billing
100 cr / thousand calls

Search SEC filings and Chinese and Japanese financial reports for facts buried in footnotes, tables and narrative disclosures. Semantic and keyword search returns original passages with filing context.

Filing search is state of the art on deep-research benchmarks — see how we measure it.

  • Beyond standard financial metrics: Find segment data, contractual commitments and operating details beyond fixed metric lists.
  • Verifiable source evidence: Review matching passages, sections, filing types and dates.
  • Fact Search: 10× the data in standard financial statements. Precisely search numbers throughout filings and inspect their original context. Use MCP filing search to retrieve reported facts and passages together. Explore Drillr MCP’s SOTA benchmark results. On this REST endpoint the facts partition requires include_facts=true; the default response returns passages only.

Same engine as MCP: this endpoint and the MCP filing_search tool run the same unified search service and return the same two partitions — passages (matching filing-text passages, always present, this endpoint's core) and facts (structured as-reported facts, not returned by default — requires include_facts=true; only companies the fact index covers have data, an empty facts partition is normal — it does not mean the company has no data, and the answer usually sits in passages).

Corpus start: the Japanese corpus effectively begins with 2024-01 (earlier years match only sporadically) and the Chinese corpus currently concentrates on recent reporting seasons — searches over earlier report periods can return empty for this reason; that is a corpus boundary, not evidence the company never disclosed.

Query parameters

ParameterTypeRequiredDescription
querystringrequiredKeywords or natural language (Chinese / English / Japanese); the body text is tokenized and indexed in the original language of the filing (US en / JP ja / CN zh, the same as the language response field).
tickerstringrequiredA single canonical ticker. Results are routed by the company behind the ticker, so passages filed under the same company's other tickers (share classes, historical codes) can match and are returned with their own ticker. Cross-company or cross-market search is not supported, so query multiple companies with separate calls.
form_typestringoptionalEach market's native type, in the source encoding (US: SEC form names; JP: EDINET numeric codes / TDnet labels; CN: annual_report and the like). Accepts multiple comma-separated values. Default: all types within the retention window.
fromstringoptionalYYYY-MM. Start of the reporting-period axis: a passage matches when the reporting period it belongs to overlaps [from, to]. This is not a filing-date axis — the filing-date range is always the retention window and is not exposed as a parameter.
tostringoptionalYYYY-MM, the end of the report period axis (with from it forms the interval used for the overlap test).
limitintoptionalMaximum 50; caps the row count of each partition — passages and facts — separately. Default: 10.
include_factsbooloptionalWhether to also return the structured facts partition. The default false returns only passages (this endpoint’s core answer); with true, facts can still be an empty array — only companies the fact index covers have data, which is normal. Accepts only true / false. Default: false.

Response fields

FieldTypeDescription
passagesobject[]The matching-passage partition, always present, ordered by score descending; per-item fields in the “Passages — per-item fields” table below
factsobject[]The structured as-reported facts partition, not returned by default (always an empty array when include_facts is omitted or false); requires include_facts=true; only companies the fact index covers have data, an empty partition is normal (the answer usually sits in passages), ordered by relevance; per-item fields in the “Facts — per-item fields” table below

Passages — per-item fields

ColumnTypeDescription
tickerstringCanonical ticker of the filing containing the passage. Take ticker + form_type + filing_date to /filings for the official document; multiple filings can share the same date and type, so this combination is not unique; passages carry no stable id
marketstringMarket code: US / CN / JP
form_typestringThe filing's type, in the market's native encoding (US: SEC form names; JP: EDINET numeric codes / TDnet labels; CN: annual_report and the like)
filing_datedateFiling date of the filing the passage belongs to: the date it became public on the official channel
languagestringThe language of the matching text: en / zh / ja (= mapped from market)
sectionstringThe section heading as written (for example Share Repurchase Program); null when the passage has no heading; not guaranteed to be a normalized Item number (for example Item 1A. Risk Factors)
snippetstringThe passage body; tables inside are converted to markdown and carried along; maximum 4000 characters, truncated beyond that. Does not contain the full document; some CN / JP passages are short (header- or caption-level fragments) — when a snippet cannot stand on its own, use the filing coordinates with /filings for the original text
scorenumberRelevance; no absolute scale; comparable only within this partition

Facts — per-item fields

ColumnTypeDescription
fact_idstringHash id of the fact row
metricstringThe metric name as printed in the filing (for example Revenues — Data Center)
valuenumberThe numeric value; null when the as-reported figure is not a plain number — read printed_value then
printed_valuestringThe figure as printed (for example $89,300)
unitstringThe unit of scale (for example million)
currencystringThe currency (for example USD)
fiscal_yearintFiscal year
fiscal_periodstringQ1 / Q2 / Q3 / Q4 / H / 9M / FY — granularity, not recency
period_startdateReport-period start (a calendar date, not a fiscal label)
period_enddateReport-period end (a calendar date)
xbrl_conceptstringThe XBRL concept (for example us-gaap:Revenues); often null for non-US filings
form_typestringThe filing's type, in the market's native encoding
filing_datedateFiling date of the filing the fact comes from; the engine's fact rows currently carry no filing date (published_at is null) — null then, and accession with /filings locates the filing
accessionstringThe filing's accession number (the official document locator)
scorenumberRelevance; no absolute scale; comparable only within this partition

No key yet? Create one under API Keys — it is shown once, so store it where your shell can read it. Connecting an agent over MCP instead? That signs in through the browser and needs no key at all.

Authentication, conventions, rate limits and error shapes are the same for every endpoint — they live on REST API.