search_filing_text
Search Filing Text
What it does
Full-text search across SEC filing content that returns the MATCHING PASSAGE: one match per filing, with the exhibit it was found in (exhibit_id, exhibit_type) and a snippet with context.
Query syntax: unquoted words must ALL appear (any order, any distance); "quoted phrase" = exact wording; OR between alternatives (merger OR acquisition); -word or -"phrase" to exclude; w1 NEAR/10 w2 (also NEAR(10), or bare NEAR = within 10) = words close together; word* = prefix of 4+ letters (dilut* matches dilution, dilutive); $AAPL or a capitalised ticker scopes to that company; a form code (8-K, 10-Q, S-1), "item 5.02" / "8-K 1.05" and a bare year (2024) scope to that form / 8-K item / year.
Quote multi-word phrases; the archive's reading of the query is in meta.understanding. Best for locating specific clauses ("change of control", "anti-dilution", "right of first refusal") and for the excerpt of a known filing (pass accessionNumber or filingId). Use search_sec_filings with q for filing-level paging, totals, date ranges, 8-K items, excluded forms or company filters.
Filters: CIK, filing, accession number, form type, section (risk_factors, mdna, ex99 …; applied only when meta.sections confirms it, otherwise meta.unsupported says the whole filing was searched) and exhibitTypes (EX-10 …).
Coverage: Signal8's SEC EDGAR archive, updated through the day, in its held range (see archiveFrom in each response; currently from late 2021, expanding back to 2016 as the history backfill fills in). Before archiveFrom it holds only a scatter, so ABSENCE BEFORE archiveFrom IS NOT EVIDENCE a filing was never filed; check SEC EDGAR for earlier periods.
Record-only rows (bodyStored: false) have no stored body; open them at their sec.gov URL.
Ask your AI
With the Signal8 MCP server connected, your assistant calls this tool when a question needs it. For example:
Use Signal8's search_filing_text tool.
Parameters
| Name | Type | Description |
|---|---|---|
patternrequired | string | Search query (minimum 2 characters): "exact phrase", OR, -exclude, w1 NEAR/n w2, word*, $TICKER. A CIK/filing-scoped search whose text is not indexed yet falls back to a literal case-insensitive substring match (response engine: "substring"). |
cikoptional | string | Filter to a specific company by CIK number |
filingIdoptional | string | Filter to a specific filing by internal ID |
accessionNumberoptional | string | Filter to a specific filing by SEC accession number |
formTypeoptional | string | Filter by form type (e.g., "10-K", "S-1") |
limitoptional | number | Max results (default: 20, max: 100) |
snippetLengthoptional | number | Characters of context around each match (default: 200) |
sortoptional | "newest" | "relevance" | Result order: newest (default) or relevance (best match first) |
matchoptional | "exact" | "stemmed" | Word matching. exact = a word matches only itself ("split" does NOT match "splits") — EDGAR full-text search's behaviour; stemmed = English word variations also match. Default when omitted: stemmed. The mode actually applied is reported in the response's meta.matchMode. |
understandoptional | boolean | Query understanding (default true): tickers/$TICKER, company names, form codes, "item N.NN" and synonym expansion, reported in meta.understanding. false = match the words literally. |
facetsoptional | boolean | true = also return facets { forms, years, items } — [{ value, count }] over the whole match set. Absent when not measured (never zero). Default false. |
sectionoptional | string | Restrict MATCHING to sections (comma-separated): business, risk_factors, cybersecurity, legal_proceedings, mdna, market_risk, controls (10-K/10-Q/20-F narrative items, by meaning — mdna is 10-K Item 7, 10-Q Part I Item 2 and 20-F Item 5), ex99 (press-release / EX-99.x exhibit text) and item_X_YY (the text under an 8-K item, e.g. item_5_02). Aliases: mda, risk, legal, cyber, press_release, 5.02. Unknown names are a 400. Needs q. Applied ONLY when the response's meta.sections names it — otherwise meta.unsupported says why (e.g. the archive index does not have sections yet) and matches may come from ANYWHERE in the filing. |
exhibitTypesoptional | string | Keep only filings carrying ANY of these exhibit types (comma-separated): a family such as EX-10 (material contracts) matches every member (EX-10.1, EX-10.2…); an exact type such as EX-99.1 (usually the press release) only itself. Others: EX-97 clawback policy, EX-3 charter/bylaws, EX-4 instruments/warrants, EX-21 subsidiaries, EX-23 consents. "10.1" is accepted for EX-10.1. Listed in appliedFilters when the rows prove it; otherwise in ignoredFilters / meta.unsupported — treat the rows as unfiltered then. |
matchedSectionsoptional | boolean | Per-row matchedSections (default true): the sections the text matched in. ABSENT on a row means not measured (index without sections), never "matched nowhere". |
Other SEC filings & EDGAR tools
- get_exhibit_contentFull text/HTML of a single exhibit.
- get_filing_documentFull raw text/HTML of a filing by internal id.
- get_filing_documentsEvery document in a filing, with the ids to read each one.
- get_filing_exhibitsList the readable exhibits within a filing.
- get_filing_structuredParsed Form 3/4/5 transactions, 13F holdings, and Schedule 13D/G.
- lookup_accession_numberLook up a filing/exhibit by accession number.
- screen_sec_filingsScreen filings across all companies by company + filing filters.
- screen_sec_filings_performancePrice performance after filings, with aggregate stats.
- search_sec_filingsSearch filings by CIK, form, date, 8-K items, full text, or company filters (market cap, float, sector, exchange...).