Skip to main content
Glama

Secedgar Search Filings

secedgar_search_filings
Read-onlyIdempotent

Search EDGAR filings since 1993. Full-text search covers 2001-present (the EFTS index floor); pre-2001 date ranges (to 1993) are served from the archives by form and entity/date. Pre-2001 free text needs entity scope (ticker:/cik:) — with it, the tool reads the entity's matching filings and matches the terms locally, which costs a few seconds (SEC's request rate caps the scan at roughly 5s for the 50-document maximum). A range crossing 2001-01-01 is split at the boundary and the two eras merged, each row tagged with its source. Supports exact phrases, boolean operators, wildcards, and entity targeting (ticker:AAPL or cik:320193 in query). When the match set outruns the inline list it is also staged as df_ — inspect it with secedgar_dataframe_describe, then analyze it with secedgar_dataframe_query.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sortNoResult ordering. "filing_date_desc" (default) returns most recent first. "filing_date_asc" returns oldest first. "relevance" returns SEC's native search-score order, which weights term match strength over recency. Date sorts re-order the top 100 hits returned by the search index — for broad queries with more than 100 matches and no entity targeting, date-newest filings may sit outside that window. Entity targeting (ticker:/cik:) or a narrower query keeps matches inside the window when absolute recency matters. On the no-query browse path (forms/entity only), EFTS has no relevance signal — every hit scores null — and returns filings in natural date-descending order, so all sort modes effectively yield newest-first. Pre-2001 archive results carry no relevance score either, so relevance collapses to date-descending there.filing_date_desc
formsNoFilter to specific form types (e.g., ["10-K", "10-Q", "8-K"]). Without this, searches all form types. Note: "10-K" also matches amendments filed as 10-K/A. SEC renamed the blockholder schedules on 2024-12-18 — filings before that date are "SC 13D"/"SC 13G", filings after are "SCHEDULE 13D"/"SCHEDULE 13G" — so a filter spanning that boundary must list both spellings. Ownership forms (3, 4, 5) are indexed by the reporting person (e.g., "LEVINSON ARTHUR D"), not the issuer — rows carry no transaction code, share count, or price. Use secedgar_get_insider_transactions to retrieve parsed ownership XML with person, relationship, transaction code, shares, and price.
limitNoResults per page. Max 100.
queryNoFull-text search query. Optional — omit (or pass "") to browse by form type and/or entity instead, e.g. every S-1 in a date window, or a company's filings via ticker:/cik:. A date range alone is not a valid search; pair it with forms or entity targeting. The EFTS index that serves free text starts at 2001-01-01; a date range reaching earlier needs ticker:/cik: entity scope, which lets the tool read that entity's filings and match the terms locally (bounded to 50 documents, a few seconds at SEC's request rate), or drop the text terms to browse by form and date. When present, supports exact phrases ("material weakness"), boolean operators (revenue OR income), exclusion (-preliminary), wildcard suffix (account*), and entity targeting (ticker:AAPL or cik:320193 in the query); terms are AND'd by default. A multi-class share ticker resolves in either form — ticker:BRK-B and ticker:BRK.B scope to the same issuer. The pre-2001 local scan honors the same phrase / OR / exclusion / wildcard syntax.
offsetNoPagination offset. For sort=relevance on a 2001-onward search, EDGAR pages server-side up to its 10,000-result cap, and the offset counts matching documents, not filings — EDGAR indexes each document of a filing separately — so a page lists the filings among its limit documents, which can be fewer than limit, and a filing whose matching documents straddle a page edge can recur on the next page; stepping by limit never skips one. Everywhere else the offset indexes the filings this call assembled and sorted: the filings of a single 100-document window for date sorts and entity targeting, the full matched set on a pre-2001 archive path, or both together on a range that crosses 2001-01-01. Offsets at or past those rows return nothing even when more filings match (a total above the rows fetched, or total_is_exact false) — switch to sort=relevance for deep pagination on a 2001-onward search, narrow the search (forms, dates, entity targeting), or query the dataframe. On a crossing range the two sides are assembled unevenly — the archive side contributes every row it matched, the full-text side the filings of one document window — so once the window runs out the rows jump to the pre-2001 era with the remaining full-text matches absent from the middle; search the 2001-onward era on its own to page through those.
filed_afterNoOnly include filings filed on or after this date (YYYY-MM-DD). This tool filters by date only with both bounds — pair it with filed_before.
filed_beforeNoOnly include filings filed on or before this date (YYYY-MM-DD). This tool filters by date only with both bounds — pair it with filed_after.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
capNoThe limit cap applied.
scanNoPre-2001 entity-scoped free-text path only. Each candidate's whole accession .txt is read, so a match may sit in an exhibit rather than the body of the requested form.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of results shown inline.
totalNoMatching filings, one per accession; can exceed the rows returned. A search with terms counts the filings among the full-text documents fetched (100 per request): a lower bound unless total_is_exact. A forms- or entity-only browse from 2001 on gives EDGAR's own count; earlier ranges count rows read.
noticeNoWhy nothing matched, what lies past a truncated list and how to reach it, or that offset passed the filings available.
datasetNoDataframe of every filing assembled (the full-text window, or the full pre-2001 match set). Absent when the rows fit inline, canvas is unavailable, or staging failed.
resultsNoMatching filings.
truncatedNoTrue when more filings match than are shown: limit capped the list, or total is a lower bound.
effectiveQueryNoThe query as executed: a ticker:/cik: token shows as "(entity scope: CIK …)", a forms-only browse as "(browse: forms …)", and a pre-2001 range names its archive route and dates.
total_is_exactNoFalse when total is a lower bound: a search with terms whose 100-document window missed matches (or a relevance page past offset 0), EDGAR's 10,000 cap, or a pre-2001 archive or text scan that hit its cap. True does not mean every match is in the rows: a browse total can exceed the window.
total_documentsNoEDGAR's count of matching full-text documents, capped at 10,000. A search counts a filing once per matching document; a browse matches one document per filing. Absent on pure pre-2001 archive paths.
form_distributionNoFilings in hand by form: every row assembled (what a dataframe holds), not only the page shown. Sums to total when every matching filing is in hand and every row has a form.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed25 schema fields changed
    • changedInput schema / properties / offset / description
      Previous value: -"Pagination offset. For sort=relevance on a 2001-onward search, EDGAR pages server-side up to its 10,000-result cap. Everywhere else the offset indexes the rows this call assembled and sorted: a single 100-row window for date sorts and entity targeting, the full matched set on a pre-2001 archive path, or both together on a range that crosses 2001-01-01. Offsets at or past those rows return nothing even when total is larger — switch to sort=relevance for deep pagination on a 2001-onward search, narrow the search (forms, dates, entity targeting), or query the dataframe. On a crossing range the two sides are assembled unevenly — the archive side contributes every row it matched, the full-text side one window of its total — so once the window runs out the rows jump to the pre-2001 era with the remaining full-text matches absent from the middle; search the 2001-onward era on its own to page through those."New value: +"Pagination offset. For sort=relevance on a 2001-onward search, EDGAR pages server-side up to its 10,000-result cap, and the offset counts matching documents, not filings — EDGAR indexes each document of a filing separately — so a page lists the filings among its limit documents, which can be fewer than limit, and a filing whose matching documents straddle a page edge can recur on the next page; stepping by limit never skips one. Everywhere else the offset indexes the filings this call assembled and sorted: the filings of a single 100-document window for date sorts and entity targeting, the full matched set on a pre-2001 archive path, or both together on a range that crosses 2001-01-01. Offsets at or past those rows return nothing even when more filings match (a total above the rows fetched, or total_is_exact false) — switch to sort=relevance for deep pagination on a 2001-onward search, narrow the search (forms, dates, entity targeting), or query the dataframe. On a crossing range the two sides are assembled unevenly — the archive side contributes every row it matched, the full-text side the filings of one document window — so once the window runs out the rows jump to the pre-2001 era with the remaining full-text matches absent from the middle; search the 2001-onward era on its own to page through those."
    • changedOutput schema / properties / dataset / description
      Previous value: -"Canvas dataframe holding the fetched hits (full-text window, or the full pre-2001 archive match set), each tagged with its `source`. Absent when total ≤ inline limit, canvas is unavailable, or materialization failed. Query with secedgar_dataframe_query SQL."New value: +"Dataframe of every filing assembled (the full-text window, or the full pre-2001 match set). Absent when the rows fit inline, canvas is unavailable, or staging failed."
    • changedOutput schema / properties / dataset / properties / name / description
      Previous value: -"Dataframe handle (df_XXXXX_XXXXX) — inspect its columns with secedgar_dataframe_describe, then query it with secedgar_dataframe_query."New value: +"Dataframe handle (df_XXXXX_XXXXX) for secedgar_dataframe_describe, then secedgar_dataframe_query."
    • changedOutput schema / properties / dataset / properties / truncated / description
      Previous value: -"True when more matches exist beyond the materialized set — the full-text window was exceeded, or a pre-2001 archive scan hit its cap. Each row carries a `source` column so provenance survives into secedgar_dataframe_query."New value: +"True when matches exist beyond the staged rows: the full-text window was exceeded, or an archive scan hit its cap."
    • changedOutput schema / properties / effectiveQuery / description
      Previous value: -"The query as executed against EDGAR (ticker/cik: tokens resolved to entity names)."New value: +"The query as executed: a ticker:/cik: token shows as \"(entity scope: CIK …)\", a forms-only browse as \"(browse: forms …)\", and a pre-2001 range names its archive route and dates."
    • changedOutput schema / properties / form_distribution / description
      Previous value: -"Count of results by form type. Helps narrow follow-up searches."New value: +"Filings in hand by form: every row assembled (what a dataframe holds), not only the page shown. Sums to total when every matching filing is in hand and every row has a form."
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when no results were returned — echoes the query and suggests how to broaden."New value: +"Why nothing matched, what lies past a truncated list and how to reach it, or that offset passed the filings available."
    • changedOutput schema / properties / results / items / description
      Previous value: -"One matching filing hit."New value: +"One matching filing. period_ending, ticker, file_description, matched_documents, sic, and location are absent on pre-2001 archive rows (source submissions or full-index)."
    • changedOutput schema / properties / results / items / properties / accession_number / description
      Previous value: -"Filing accession number. Pass to secedgar_get_filing to retrieve the document text."New value: +"Accession number for secedgar_get_filing."
    • changedOutput schema / properties / results / items / properties / file_description / description
      Previous value: -"SEC-provided description of the matching document (e.g., \"EX-99.1\"). Absent when SEC published none, and for pre-2001 archive-sourced rows. A range crossing 2001-01-01 returns both kinds of row together, so this field is populated on source=efts rows only."New value: +"SEC description of the first-ranked matching document (e.g., \"EX-99.1\"). Absent when SEC published none."
    • changedOutput schema / properties / results / items / properties / location / description
      Previous value: -"Business location (state or country code). Absent when SEC has no location for this filer, and for pre-2001 archive-sourced rows. A range crossing 2001-01-01 returns both kinds of row together, so this field is populated on source=efts rows only."New value: +"Business location (state or country code). Absent when SEC has none."
    • addedOutput schema / properties / results / items / properties / matched_documents
      Added value: +{
      +  "description": "Documents of this filing that matched, in rank order; the dataframe holds their filenames as a comma-separated column.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "One document of this filing that matched the query.",
      +    "properties": {
      +      "name": {
      +        "description": "Document filename — pass as secedgar_get_filing document to read it.",
      +        "type": "string"
      +      },
      +      "type": {
      +        "description": "EDGAR document type (e.g., \"EX-99.1\"), telling body from exhibit. Absent when the index has none.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "name"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / results / items / properties / period_ending / description
      Previous value: -"Period the filing reports on (YYYY-MM-DD). Absent for filings without a reporting period (e.g., proxy statements, ownership reports) and for all pre-2001 archive-sourced rows (source submissions/full-index), which carry no period field. A range crossing 2001-01-01 returns both kinds of row together, so this field is populated on source=efts rows only."New value: +"Period the filing reports on (YYYY-MM-DD). Absent for forms without one (proxy statements, ownership reports)."
    • changedOutput schema / properties / results / items / properties / sic / description
      Previous value: -"SIC industry code for the filer. Absent for filers without a classification, and for pre-2001 archive-sourced rows. A range crossing 2001-01-01 returns both kinds of row together, so this field is populated on source=efts rows only."New value: +"SIC industry code. Absent for filers without one."
    • changedOutput schema / properties / results / items / properties / source / description
      Previous value: -"Which EDGAR backend served this row: \"efts\" (2001+ full-text index), \"submissions\" (a pre-2001 entity-scoped filing history), or \"full-index\" (a pre-2001 unscoped quarterly index browse). A date range crossing 2001-01-01 is split at the boundary and returns rows of two sources in one result set, so read this per row rather than per result. Provenance is carried into the canvas dataframe as a `source` column."New value: +"\"efts\" (2001+ full-text), \"submissions\" (pre-2001 entity history), or \"full-index\" (pre-2001 quarterly index). A range crossing 2001-01-01 mixes sources; total sums its archive rows and the filings of one 100-document full-text window. Also a dataframe column."
    • changedOutput schema / properties / results / items / properties / ticker / description
      Previous value: -"Primary ticker symbol parsed from the EFTS display name. Absent for private filers, foreign filers without a US listing, filings whose display name omits the ticker parenthetical, and all pre-2001 archive-sourced rows. A range crossing 2001-01-01 returns both kinds of row together, so this field is populated on source=efts rows only. For multi-class issuers (e.g., BRK-A / BRK-B), this is the first class listed."New value: +"Primary ticker; the first class for multi-class issuers (BRK-A / BRK-B). Absent for private filers, foreign filers without a US listing, and display names that omit it."
    • changedOutput schema / properties / scan / description
      Previous value: -"Present only on the pre-2001 entity-scoped free-text path, where no full-text index exists and terms are matched by reading documents. Reports the scan's shape so a partial read is never presented as a complete one. Each document read is the whole accession .txt — SEC's original flat-submission format concatenates every exhibit into one file, and pre-1997 filings expose no per-document URL at all — so a match may sit in an attached exhibit rather than the body of the requested form. Absent on every other path."New value: +"Pre-2001 entity-scoped free-text path only. Each candidate's whole accession .txt is read, so a match may sit in an exhibit rather than the body of the requested form."
    • changedOutput schema / properties / scan / properties / candidates / description
      Previous value: -"Filings the form + date pre-filter selected before any document was read."New value: +"Filings the form and date pre-filter selected."
    • changedOutput schema / properties / scan / properties / capped / description
      Previous value: -"True when candidates exceeded the document cap, so the unscanned remainder may hold further matches — narrow the form or date filter to bring them into range."New value: +"True when candidates exceeded the 50-document cap; unread filings may match, so narrow forms or dates."
    • changedOutput schema / properties / scan / properties / matched / description
      Previous value: -"Scanned filings whose text satisfied the query terms."New value: +"Scanned filings whose text satisfied the query."
    • changedOutput schema / properties / scan / properties / scanned / description
      Previous value: -"Candidate documents actually fetched and matched against. Capped at 50 per call."New value: +"Candidates fetched and matched, at most 50 per call."
    • changedOutput schema / properties / total / description
      Previous value: -"Total matching filings, which can exceed the rows returned inline or materialized. On the full-text (2001+) path this is capped at 10,000; entity targeting (ticker:/cik:) scopes server-side via the EFTS ciks param, so it is the entity's exact match count up to the cap. On a pre-2001 archive path it is the exact count within the scanned window (see total_is_exact). On a range crossing 2001-01-01 it is the sum of both eras' counts."New value: +"Matching filings, one per accession; can exceed the rows returned. A search with terms counts the filings among the full-text documents fetched (100 per request): a lower bound unless total_is_exact. A forms- or entity-only browse from 2001 on gives EDGAR's own count; earlier ranges count rows read."
    • addedOutput schema / properties / total_documents
      Added value: +{
      +  "description": "EDGAR's count of matching full-text documents, capped at 10,000. A search counts a filing once per matching document; a browse matches one document per filing. Absent on pure pre-2001 archive paths.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / total_is_exact / description
      Previous value: -"False when total is a lower bound — the full-text path hit its 10,000 cap, a pre-2001 archive scan hit its page/quarter cap before exhausting the range, or a pre-2001 local text scan hit its document cap (scan.capped)."New value: +"False when total is a lower bound: a search with terms whose 100-document window missed matches (or a relevance page past offset 0), EDGAR's 10,000 cap, or a pre-2001 archive or text scan that hit its cap. True does not mean every match is in the rows: a browse total can exceed the window."
    • changedOutput schema / properties / truncated / description
      Previous value: -"True when results were capped by limit."New value: +"True when more filings match than are shown: limit capped the list, or total is a lower bound."
  2. Changed6 schema fields changed
    • removedInput schema / properties / end_date
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "const": "",
      -      "type": "string"
      -    },
      -    {
      -      "description": "YYYY-MM-DD",
      -      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      -      "type": "string"
      -    }
      -  ],
      -  "description": "End of date range (YYYY-MM-DD). Both start_date and end_date must be provided for date filtering."
      -}
    • addedInput schema / properties / filed_after
      Added value: +{
      +  "anyOf": [
      +    {
      +      "const": "",
      +      "type": "string"
      +    },
      +    {
      +      "description": "YYYY-MM-DD",
      +      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +      "type": "string"
      +    }
      +  ],
      +  "description": "Only include filings filed on or after this date (YYYY-MM-DD). This tool filters by date only with both bounds — pair it with filed_before."
      +}
    • addedInput schema / properties / filed_before
      Added value: +{
      +  "anyOf": [
      +    {
      +      "const": "",
      +      "type": "string"
      +    },
      +    {
      +      "description": "YYYY-MM-DD",
      +      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +      "type": "string"
      +    }
      +  ],
      +  "description": "Only include filings filed on or before this date (YYYY-MM-DD). This tool filters by date only with both bounds — pair it with filed_after."
      +}
    • removedInput schema / properties / start_date
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "const": "",
      -      "type": "string"
      -    },
      -    {
      -      "description": "YYYY-MM-DD",
      -      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      -      "type": "string"
      -    }
      -  ],
      -  "description": "Start of date range (YYYY-MM-DD). Both start_date and end_date must be provided for date filtering."
      -}
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_date_range`: Only one of start_date or end_date was provided `unresolved_ticker`: A ticker: targeting token in the query does not resolve to a known company `invalid_cik`: A cik: targeting token in the query is not a 1-10 digit number `entity_not_found`: A cik: targeting token on a pre-2001 date range names a CIK with no EDGAR submissions history `missing_criteria`: Neither a full-text query nor a forms filter was provided (a date range cannot stand alone) `pre2001_full_text_unscoped`: A date range reaching before 2001-01-01 carries free-text terms with no entity scope — no pre-2001 full-text index exists, and nothing bounds a local scan Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `invalid_date_range`: Only one of filed_after or filed_before was provided. `unresolved_ticker`: A ticker: targeting token in the query does not resolve to a known company. `invalid_cik`: A cik: targeting token in the query is not a 1-10 digit number. `entity_not_found`: A cik: targeting token on a pre-2001 date range names a CIK with no EDGAR submissions history. `missing_criteria`: Neither a full-text query nor a forms filter was provided (a date range cannot stand alone). `pre2001_full_text_unscoped`: A date range reaching before 2001-01-01 carries free-text terms with no entity scope — no pre-2001 full-text index exists, and nothing bounds a local scan. `rate_limited`: SEC is rate-limiting this server's IP — SEC answered 429, or the call was refused without being sent while the cool-down after one runs. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "invalid_date_range",
      -  "unresolved_ticker",
      -  "invalid_cik",
      -  "entity_not_found",
      -  "missing_criteria",
      -  "pre2001_full_text_unscoped"
      -]New value: +[
      +  "invalid_date_range",
      +  "unresolved_ticker",
      +  "invalid_cik",
      +  "entity_not_found",
      +  "missing_criteria",
      +  "pre2001_full_text_unscoped",
      +  "rate_limited"
      +]
  3. Changed1 schema field changed
    • changedOutput schema / properties / dataset / properties / name / description
      Previous value: -"Dataframe handle (df_XXXXX_XXXXX) — pass to secedgar_dataframe_query."New value: +"Dataframe handle (df_XXXXX_XXXXX) — inspect its columns with secedgar_dataframe_describe, then query it with secedgar_dataframe_query."
  4. Changed1 schema field changed
    • changedInput schema / properties / query / description
      Previous value: -"Full-text search query. Optional — omit (or pass \"\") to browse by form type and/or entity instead, e.g. every S-1 in a date window, or a company's filings via ticker:/cik:. A date range alone is not a valid search; pair it with forms or entity targeting. The EFTS index that serves free text starts at 2001-01-01; a date range reaching earlier needs ticker:/cik: entity scope, which lets the tool read that entity's filings and match the terms locally (bounded to 50 documents, a few seconds at SEC's request rate), or drop the text terms to browse by form and date. When present, supports exact phrases (\"material weakness\"), boolean operators (revenue OR income), exclusion (-preliminary), wildcard suffix (account*), and entity targeting (ticker:AAPL or cik:320193 in the query); terms are AND'd by default. The pre-2001 local scan honors the same phrase / OR / exclusion / wildcard syntax."New value: +"Full-text search query. Optional — omit (or pass \"\") to browse by form type and/or entity instead, e.g. every S-1 in a date window, or a company's filings via ticker:/cik:. A date range alone is not a valid search; pair it with forms or entity targeting. The EFTS index that serves free text starts at 2001-01-01; a date range reaching earlier needs ticker:/cik: entity scope, which lets the tool read that entity's filings and match the terms locally (bounded to 50 documents, a few seconds at SEC's request rate), or drop the text terms to browse by form and date. When present, supports exact phrases (\"material weakness\"), boolean operators (revenue OR income), exclusion (-preliminary), wildcard suffix (account*), and entity targeting (ticker:AAPL or cik:320193 in the query); terms are AND'd by default. A multi-class share ticker resolves in either form — ticker:BRK-B and ticker:BRK.B scope to the same issuer. The pre-2001 local scan honors the same phrase / OR / exclusion / wildcard syntax."
  5. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "total",
      +      "total_is_exact",
      +      "results",
      +      "effectiveQuery"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `invalid_date_range`: Only one of start_date or end_date was provided `unresolved_ticker`: A ticker: targeting token in the query does not resolve to a known company `invalid_cik`: A cik: targeting token in the query is not a 1-10 digit number `entity_not_found`: A cik: targeting token on a pre-2001 date range names a CIK with no EDGAR submissions history `missing_criteria`: Neither a full-text query nor a forms filter was provided (a date range cannot stand alone) `pre2001_full_text_unscoped`: A date range reaching before 2001-01-01 carries free-text terms with no entity scope — no pre-2001 full-text index exists, and nothing bounds a local scan Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "invalid_date_range",
      +            "unresolved_ticker",
      +            "invalid_cik",
      +            "entity_not_found",
      +            "missing_criteria",
      +            "pre2001_full_text_unscoped"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "total",
      -  "total_is_exact",
      -  "results",
      -  "effectiveQuery"
      -]
  6. Changed12 schema fields changed
    • changedInput schema / properties / forms / description
      Previous value: -"Filter to specific form types (e.g., [\"10-K\", \"10-Q\", \"8-K\"]). Without this, searches all form types. Note: \"10-K\" also matches amendments filed as 10-K/A. Ownership forms (3, 4, 5) are indexed by the reporting person (e.g., \"LEVINSON ARTHUR D\"), not the issuer — rows carry no transaction code, share count, or price. Use secedgar_get_insider_transactions to retrieve parsed ownership XML with person, relationship, transaction code, shares, and price."New value: +"Filter to specific form types (e.g., [\"10-K\", \"10-Q\", \"8-K\"]). Without this, searches all form types. Note: \"10-K\" also matches amendments filed as 10-K/A. SEC renamed the blockholder schedules on 2024-12-18 — filings before that date are \"SC 13D\"/\"SC 13G\", filings after are \"SCHEDULE 13D\"/\"SCHEDULE 13G\" — so a filter spanning that boundary must list both spellings. Ownership forms (3, 4, 5) are indexed by the reporting person (e.g., \"LEVINSON ARTHUR D\"), not the issuer — rows carry no transaction code, share count, or price. Use secedgar_get_insider_transactions to retrieve parsed ownership XML with person, relationship, transaction code, shares, and price."
    • changedInput schema / properties / offset / description
      Previous value: -"Pagination offset. For sort=relevance, EDGAR pages server-side up to its 10,000-result cap. For date sorts (the default) and entity targeting, the tool fetches a single 100-row window and slices it client-side — offsets at or past the window return nothing; switch to sort=relevance for deep pagination, or narrow the search (forms, dates, entity targeting)."New value: +"Pagination offset. For sort=relevance on a 2001-onward search, EDGAR pages server-side up to its 10,000-result cap. Everywhere else the offset indexes the rows this call assembled and sorted: a single 100-row window for date sorts and entity targeting, the full matched set on a pre-2001 archive path, or both together on a range that crosses 2001-01-01. Offsets at or past those rows return nothing even when total is larger — switch to sort=relevance for deep pagination on a 2001-onward search, narrow the search (forms, dates, entity targeting), or query the dataframe. On a crossing range the two sides are assembled unevenly — the archive side contributes every row it matched, the full-text side one window of its total — so once the window runs out the rows jump to the pre-2001 era with the remaining full-text matches absent from the middle; search the 2001-onward era on its own to page through those."
    • changedInput schema / properties / query / description
      Previous value: -"Full-text search query. Optional — omit (or pass \"\") to browse by form type and/or entity instead, e.g. every S-1 in a date window, or a company's filings via ticker:/cik:. A date range alone is not a valid search; pair it with forms or entity targeting. Full-text terms match only filings from 2001 onward (the EFTS index floor); for a pre-2001 date range, drop the text terms (browse by form/date) or add ticker:/cik: entity scope. When present, supports exact phrases (\"material weakness\"), boolean operators (revenue OR income), exclusion (-preliminary), wildcard suffix (account*), and entity targeting (ticker:AAPL or cik:320193 in the query); terms are AND'd by default."New value: +"Full-text search query. Optional — omit (or pass \"\") to browse by form type and/or entity instead, e.g. every S-1 in a date window, or a company's filings via ticker:/cik:. A date range alone is not a valid search; pair it with forms or entity targeting. The EFTS index that serves free text starts at 2001-01-01; a date range reaching earlier needs ticker:/cik: entity scope, which lets the tool read that entity's filings and match the terms locally (bounded to 50 documents, a few seconds at SEC's request rate), or drop the text terms to browse by form and date. When present, supports exact phrases (\"material weakness\"), boolean operators (revenue OR income), exclusion (-preliminary), wildcard suffix (account*), and entity targeting (ticker:AAPL or cik:320193 in the query); terms are AND'd by default. The pre-2001 local scan honors the same phrase / OR / exclusion / wildcard syntax."
    • changedOutput schema / properties / results / items / properties / file_description / description
      Previous value: -"SEC-provided description of the matching document (e.g., \"EX-99.1\"). Absent when SEC published none, and for pre-2001 archive-sourced rows."New value: +"SEC-provided description of the matching document (e.g., \"EX-99.1\"). Absent when SEC published none, and for pre-2001 archive-sourced rows. A range crossing 2001-01-01 returns both kinds of row together, so this field is populated on source=efts rows only."
    • changedOutput schema / properties / results / items / properties / location / description
      Previous value: -"Business location (state or country code). Absent when SEC has no location for this filer, and for pre-2001 archive-sourced rows."New value: +"Business location (state or country code). Absent when SEC has no location for this filer, and for pre-2001 archive-sourced rows. A range crossing 2001-01-01 returns both kinds of row together, so this field is populated on source=efts rows only."
    • changedOutput schema / properties / results / items / properties / period_ending / description
      Previous value: -"Period the filing reports on (YYYY-MM-DD). Absent for filings without a reporting period (e.g., proxy statements, ownership reports) and for all pre-2001 archive-sourced rows (source submissions/full-index), which carry no period field."New value: +"Period the filing reports on (YYYY-MM-DD). Absent for filings without a reporting period (e.g., proxy statements, ownership reports) and for all pre-2001 archive-sourced rows (source submissions/full-index), which carry no period field. A range crossing 2001-01-01 returns both kinds of row together, so this field is populated on source=efts rows only."
    • changedOutput schema / properties / results / items / properties / sic / description
      Previous value: -"SIC industry code for the filer. Absent for filers without a classification, and for pre-2001 archive-sourced rows."New value: +"SIC industry code for the filer. Absent for filers without a classification, and for pre-2001 archive-sourced rows. A range crossing 2001-01-01 returns both kinds of row together, so this field is populated on source=efts rows only."
    • changedOutput schema / properties / results / items / properties / source / description
      Previous value: -"Which EDGAR backend served this row: \"efts\" (2001+ full-text index), \"submissions\" (a pre-2001 entity-scoped filing history), or \"full-index\" (a pre-2001 unscoped quarterly index browse). Provenance is carried into the canvas dataframe as a `source` column."New value: +"Which EDGAR backend served this row: \"efts\" (2001+ full-text index), \"submissions\" (a pre-2001 entity-scoped filing history), or \"full-index\" (a pre-2001 unscoped quarterly index browse). A date range crossing 2001-01-01 is split at the boundary and returns rows of two sources in one result set, so read this per row rather than per result. Provenance is carried into the canvas dataframe as a `source` column."
    • changedOutput schema / properties / results / items / properties / ticker / description
      Previous value: -"Primary ticker symbol parsed from the EFTS display name. Absent for private filers, foreign filers without a US listing, filings whose display name omits the ticker parenthetical, and all pre-2001 archive-sourced rows. For multi-class issuers (e.g., BRK-A / BRK-B), this is the first class listed."New value: +"Primary ticker symbol parsed from the EFTS display name. Absent for private filers, foreign filers without a US listing, filings whose display name omits the ticker parenthetical, and all pre-2001 archive-sourced rows. A range crossing 2001-01-01 returns both kinds of row together, so this field is populated on source=efts rows only. For multi-class issuers (e.g., BRK-A / BRK-B), this is the first class listed."
    • addedOutput schema / properties / scan
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Present only on the pre-2001 entity-scoped free-text path, where no full-text index exists and terms are matched by reading documents. Reports the scan's shape so a partial read is never presented as a complete one. Each document read is the whole accession .txt — SEC's original flat-submission format concatenates every exhibit into one file, and pre-1997 filings expose no per-document URL at all — so a match may sit in an attached exhibit rather than the body of the requested form. Absent on every other path.",
      +  "properties": {
      +    "candidates": {
      +      "description": "Filings the form + date pre-filter selected before any document was read.",
      +      "type": "number"
      +    },
      +    "capped": {
      +      "description": "True when candidates exceeded the document cap, so the unscanned remainder may hold further matches — narrow the form or date filter to bring them into range.",
      +      "type": "boolean"
      +    },
      +    "matched": {
      +      "description": "Scanned filings whose text satisfied the query terms.",
      +      "type": "number"
      +    },
      +    "scanned": {
      +      "description": "Candidate documents actually fetched and matched against. Capped at 50 per call.",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "candidates",
      +    "scanned",
      +    "matched",
      +    "capped"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / total / description
      Previous value: -"Total matching filings. On the full-text (2001+) path this is capped at 10,000; entity targeting (ticker:/cik:) scopes server-side via the EFTS ciks param, so it is the entity's exact match count up to the cap. On a pre-2001 archive path it is the exact count within the scanned window (see total_is_exact)."New value: +"Total matching filings, which can exceed the rows returned inline or materialized. On the full-text (2001+) path this is capped at 10,000; entity targeting (ticker:/cik:) scopes server-side via the EFTS ciks param, so it is the entity's exact match count up to the cap. On a pre-2001 archive path it is the exact count within the scanned window (see total_is_exact). On a range crossing 2001-01-01 it is the sum of both eras' counts."
    • changedOutput schema / properties / total_is_exact / description
      Previous value: -"False when total is a lower bound — the full-text path hit its 10,000 cap, or a pre-2001 archive scan hit its page/quarter cap before exhausting the range."New value: +"False when total is a lower bound — the full-text path hit its 10,000 cap, a pre-2001 archive scan hit its page/quarter cap before exhausting the range, or a pre-2001 local text scan hit its document cap (scan.capped)."
  7. Changed13 schema fields changed
    • changedInput schema / properties / query / description
      Previous value: -"Full-text search query. Optional — omit (or pass \"\") to browse by form type and/or entity instead, e.g. every S-1 in a date window, or a company's filings via ticker:/cik:. A date range alone is not a valid search; pair it with forms or entity targeting. When present, supports exact phrases (\"material weakness\"), boolean operators (revenue OR income), exclusion (-preliminary), wildcard suffix (account*), and entity targeting (ticker:AAPL or cik:320193 in the query); terms are AND'd by default."New value: +"Full-text search query. Optional — omit (or pass \"\") to browse by form type and/or entity instead, e.g. every S-1 in a date window, or a company's filings via ticker:/cik:. A date range alone is not a valid search; pair it with forms or entity targeting. Full-text terms match only filings from 2001 onward (the EFTS index floor); for a pre-2001 date range, drop the text terms (browse by form/date) or add ticker:/cik: entity scope. When present, supports exact phrases (\"material weakness\"), boolean operators (revenue OR income), exclusion (-preliminary), wildcard suffix (account*), and entity targeting (ticker:AAPL or cik:320193 in the query); terms are AND'd by default."
    • changedInput schema / properties / sort / description
      Previous value: -"Result ordering. \"filing_date_desc\" (default) returns most recent first. \"filing_date_asc\" returns oldest first. \"relevance\" returns SEC's native search-score order, which weights term match strength over recency. Date sorts re-order the top 100 hits returned by the search index — for broad queries with more than 100 matches and no entity targeting, date-newest filings may sit outside that window. Entity targeting (ticker:/cik:) or a narrower query keeps matches inside the window when absolute recency matters. On the no-query browse path (forms/entity only), EFTS has no relevance signal — every hit scores null — and returns filings in natural date-descending order, so all sort modes effectively yield newest-first."New value: +"Result ordering. \"filing_date_desc\" (default) returns most recent first. \"filing_date_asc\" returns oldest first. \"relevance\" returns SEC's native search-score order, which weights term match strength over recency. Date sorts re-order the top 100 hits returned by the search index — for broad queries with more than 100 matches and no entity targeting, date-newest filings may sit outside that window. Entity targeting (ticker:/cik:) or a narrower query keeps matches inside the window when absolute recency matters. On the no-query browse path (forms/entity only), EFTS has no relevance signal — every hit scores null — and returns filings in natural date-descending order, so all sort modes effectively yield newest-first. Pre-2001 archive results carry no relevance score either, so relevance collapses to date-descending there."
    • changedOutput schema / properties / dataset / description
      Previous value: -"Canvas dataframe holding the hits already fetched for the inline response. Absent when total ≤ inline limit, canvas is unavailable, or materialization failed. The dataframe contains the raw EFTS results (entity-scoped server-side via the ciks param when ticker:/cik: was used) — query with secedgar_dataframe_query SQL."New value: +"Canvas dataframe holding the fetched hits (full-text window, or the full pre-2001 archive match set), each tagged with its `source`. Absent when total ≤ inline limit, canvas is unavailable, or materialization failed. Query with secedgar_dataframe_query SQL."
    • changedOutput schema / properties / dataset / properties / truncated / description
      Previous value: -"True when EFTS reported more text matches than the window we already fetched — additional rows exist beyond the dataframe. Page further with `offset` for the inline view; the canvas dataframe is bounded by the single response window."New value: +"True when more matches exist beyond the materialized set — the full-text window was exceeded, or a pre-2001 archive scan hit its cap. Each row carries a `source` column so provenance survives into secedgar_dataframe_query."
    • changedOutput schema / properties / results / items / description
      Previous value: -"One matching filing hit from the full-text search index."New value: +"One matching filing hit."
    • changedOutput schema / properties / results / items / properties / file_description / description
      Previous value: -"SEC-provided description of the matching document (e.g., \"EX-99.1\"). Absent when SEC published none."New value: +"SEC-provided description of the matching document (e.g., \"EX-99.1\"). Absent when SEC published none, and for pre-2001 archive-sourced rows."
    • changedOutput schema / properties / results / items / properties / location / description
      Previous value: -"Business location (state or country code). Absent when SEC has no location for this filer."New value: +"Business location (state or country code). Absent when SEC has no location for this filer, and for pre-2001 archive-sourced rows."
    • changedOutput schema / properties / results / items / properties / period_ending / description
      Previous value: -"Period the filing reports on (YYYY-MM-DD). Absent for filings without a reporting period (e.g., proxy statements, ownership reports)."New value: +"Period the filing reports on (YYYY-MM-DD). Absent for filings without a reporting period (e.g., proxy statements, ownership reports) and for all pre-2001 archive-sourced rows (source submissions/full-index), which carry no period field."
    • changedOutput schema / properties / results / items / properties / sic / description
      Previous value: -"SIC industry code for the filer. Absent for filers without a classification."New value: +"SIC industry code for the filer. Absent for filers without a classification, and for pre-2001 archive-sourced rows."
    • addedOutput schema / properties / results / items / properties / source
      Added value: +{
      +  "description": "Which EDGAR backend served this row: \"efts\" (2001+ full-text index), \"submissions\" (a pre-2001 entity-scoped filing history), or \"full-index\" (a pre-2001 unscoped quarterly index browse). Provenance is carried into the canvas dataframe as a `source` column.",
      +  "enum": [
      +    "efts",
      +    "submissions",
      +    "full-index"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / results / items / properties / ticker / description
      Previous value: -"Primary ticker symbol parsed from the EFTS display name. Absent for private filers, foreign filers without a US listing, and filings whose display name omits the ticker parenthetical. For multi-class issuers (e.g., BRK-A / BRK-B), this is the first class listed."New value: +"Primary ticker symbol parsed from the EFTS display name. Absent for private filers, foreign filers without a US listing, filings whose display name omits the ticker parenthetical, and all pre-2001 archive-sourced rows. For multi-class issuers (e.g., BRK-A / BRK-B), this is the first class listed."
    • changedOutput schema / properties / total / description
      Previous value: -"Total matching filings (capped at 10,000). Entity targeting (ticker:/cik:) scopes server-side via the EFTS ciks param, so this is the entity's exact match count up to the cap."New value: +"Total matching filings. On the full-text (2001+) path this is capped at 10,000; entity targeting (ticker:/cik:) scopes server-side via the EFTS ciks param, so it is the entity's exact match count up to the cap. On a pre-2001 archive path it is the exact count within the scanned window (see total_is_exact)."
    • changedOutput schema / properties / total_is_exact / description
      Previous value: -"False only when total hits the 10,000 cap."New value: +"False when total is a lower bound — the full-text path hit its 10,000 cap, or a pre-2001 archive scan hit its page/quarter cap before exhausting the range."
  8. Changed6 schema fields changed
    • addedInput schema / properties / query / anyOf
      Added value: +[
      +  {
      +    "const": "",
      +    "type": "string"
      +  },
      +  {
      +    "description": "Full-text search query. Supports: exact phrases (\"material weakness\"), boolean operators (revenue OR income), exclusion (-preliminary), wildcard suffix (account*), entity targeting (ticker:AAPL or cik:320193 in the query). Terms are AND'd by default.",
      +    "minLength": 1,
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / query / description
      Previous value: -"Full-text search query. Supports: exact phrases (\"material weakness\"), boolean operators (revenue OR income), exclusion (-preliminary), wildcard suffix (account*), entity targeting (ticker:AAPL or cik:320193 in the query). Terms are AND'd by default."New value: +"Full-text search query. Optional — omit (or pass \"\") to browse by form type and/or entity instead, e.g. every S-1 in a date window, or a company's filings via ticker:/cik:. A date range alone is not a valid search; pair it with forms or entity targeting. When present, supports exact phrases (\"material weakness\"), boolean operators (revenue OR income), exclusion (-preliminary), wildcard suffix (account*), and entity targeting (ticker:AAPL or cik:320193 in the query); terms are AND'd by default."
    • removedInput schema / properties / query / minLength
      Removed value: -1
    • removedInput schema / properties / query / type
      Removed value: -"string"
    • changedInput schema / properties / sort / description
      Previous value: -"Result ordering. \"filing_date_desc\" (default) returns most recent first. \"filing_date_asc\" returns oldest first. \"relevance\" returns SEC's native search-score order, which weights term match strength over recency. Date sorts re-order the top 100 hits returned by the search index — for broad queries with more than 100 matches and no entity targeting, date-newest filings may sit outside that window. Entity targeting (ticker:/cik:) or a narrower query keeps matches inside the window when absolute recency matters."New value: +"Result ordering. \"filing_date_desc\" (default) returns most recent first. \"filing_date_asc\" returns oldest first. \"relevance\" returns SEC's native search-score order, which weights term match strength over recency. Date sorts re-order the top 100 hits returned by the search index — for broad queries with more than 100 matches and no entity targeting, date-newest filings may sit outside that window. Entity targeting (ticker:/cik:) or a narrower query keeps matches inside the window when absolute recency matters. On the no-query browse path (forms/entity only), EFTS has no relevance signal — every hit scores null — and returns filings in natural date-descending order, so all sort modes effectively yield newest-first."
    • removedInput schema / required
      Removed value: -[
      -  "query"
      -]
  9. Changed1 schema field changed
    • changedInput schema / properties / offset / description
      Previous value: -"Pagination offset. Increment by limit for the next page. EDGAR caps total accessible results at 10,000 — offsets past this return nothing. Under date sort, pagination is bounded to the first 100 hits."New value: +"Pagination offset. For sort=relevance, EDGAR pages server-side up to its 10,000-result cap. For date sorts (the default) and entity targeting, the tool fetches a single 100-row window and slices it client-side — offsets at or past the window return nothing; switch to sort=relevance for deep pagination, or narrow the search (forms, dates, entity targeting)."
  10. Changed3 schema fields changed
    • addedOutput schema / properties / cap
      Added value: +{
      +  "description": "The limit cap applied.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Number of results shown inline.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True when results were capped by limit.",
      +  "type": "boolean"
      +}
  11. Changed1 schema field changed
    • changedInput schema / properties / forms / description
      Previous value: -"Filter to specific form types (e.g., [\"10-K\", \"10-Q\", \"8-K\"]). Without this, searches all form types. Note: \"10-K\" also matches amendments filed as 10-K/A."New value: +"Filter to specific form types (e.g., [\"10-K\", \"10-Q\", \"8-K\"]). Without this, searches all form types. Note: \"10-K\" also matches amendments filed as 10-K/A. Ownership forms (3, 4, 5) are indexed by the reporting person (e.g., \"LEVINSON ARTHUR D\"), not the issuer — rows carry no transaction code, share count, or price. Use secedgar_get_insider_transactions to retrieve parsed ownership XML with person, relationship, transaction code, shares, and price."
  12. Changed7 schema fields changed
    • addedInput schema / properties / end_date / anyOf
      Added value: +[
      +  {
      +    "const": "",
      +    "type": "string"
      +  },
      +  {
      +    "description": "YYYY-MM-DD",
      +    "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / end_date / type
      Removed value: -"string"
    • addedInput schema / properties / start_date / anyOf
      Added value: +[
      +  {
      +    "const": "",
      +    "type": "string"
      +  },
      +  {
      +    "description": "YYYY-MM-DD",
      +    "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +    "type": "string"
      +  }
      +]
    • removedInput schema / properties / start_date / type
      Removed value: -"string"
    • changedOutput schema / properties / dataset / description
      Previous value: -"Canvas dataframe holding the hits already fetched for the inline response. Absent when total ≤ inline limit, canvas is unavailable, or materialization failed. The dataframe contains the raw EFTS results (entity-filtered when ticker:/cik: was used) — query with secedgar_dataframe_query SQL."New value: +"Canvas dataframe holding the hits already fetched for the inline response. Absent when total ≤ inline limit, canvas is unavailable, or materialization failed. The dataframe contains the raw EFTS results (entity-scoped server-side via the ciks param when ticker:/cik: was used) — query with secedgar_dataframe_query SQL."
    • changedOutput schema / properties / total / description
      Previous value: -"Total matching filings (capped at 10,000). Under entity targeting (ticker:/cik:), this becomes the count of entity-matching hits within the sampled window of search results — a lower bound when more matches exist beyond the window."New value: +"Total matching filings (capped at 10,000). Entity targeting (ticker:/cik:) scopes server-side via the EFTS ciks param, so this is the entity's exact match count up to the cap."
    • changedOutput schema / properties / total_is_exact / description
      Previous value: -"False when total hits the 10,000 cap, or when entity targeting filtered a sample that did not cover the full match set."New value: +"False only when total hits the 10,000 cap."
  13. Changed3 schema fields changed
    • addedOutput schema / properties / effectiveQuery
      Added value: +{
      +  "description": "The query as executed against EDGAR (ticker/cik: tokens resolved to entity names).",
      +  "type": "string"
      +}
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Guidance when no results were returned — echoes the query and suggests how to broaden.",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "total",
      -  "total_is_exact",
      -  "results"
      -]New value: +[
      +  "total",
      +  "total_is_exact",
      +  "results",
      +  "effectiveQuery"
      +]
  14. Changed1 schema field changed
    • changedInput schema / properties / forms / description
      Previous value: -"Filter to specific form types (e.g., [\"10-K\", \"10-Q\", \"8-K\"]). Without this, searches all form types."New value: +"Filter to specific form types (e.g., [\"10-K\", \"10-Q\", \"8-K\"]). Without this, searches all form types. Note: \"10-K\" also matches amendments filed as 10-K/A."
  15. Changed2 schema fields changed
    • addedOutput schema / properties / dataset
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Canvas dataframe holding the hits already fetched for the inline response. Absent when total ≤ inline limit, canvas is unavailable, or materialization failed. The dataframe contains the raw EFTS results (entity-filtered when ticker:/cik: was used) — query with secedgar_dataframe_query SQL.",
      +  "properties": {
      +    "expires_at": {
      +      "description": "ISO 8601 expiry timestamp.",
      +      "type": "string"
      +    },
      +    "name": {
      +      "description": "Dataframe handle (df_XXXXX_XXXXX) — pass to secedgar_dataframe_query.",
      +      "type": "string"
      +    },
      +    "row_count": {
      +      "description": "Rows materialized in the dataframe.",
      +      "type": "number"
      +    },
      +    "truncated": {
      +      "description": "True when EFTS reported more text matches than the window we already fetched — additional rows exist beyond the dataframe. Page further with `offset` for the inline view; the canvas dataframe is bounded by the single response window.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "name",
      +    "row_count",
      +    "expires_at",
      +    "truncated"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / results / items / properties / ticker
      Added value: +{
      +  "description": "Primary ticker symbol parsed from the EFTS display name. Absent for private filers, foreign filers without a US listing, and filings whose display name omits the ticker parenthetical. For multi-class issuers (e.g., BRK-A / BRK-B), this is the first class listed.",
      +  "type": "string"
      +}
  16. Changed4 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Results per page. Max 100. Default 20 to keep responses concise."New value: +"Results per page. Max 100."
    • changedInput schema / properties / sort / description
      Previous value: -"Result ordering. \"filing_date_desc\" (default) returns most recent first. \"filing_date_asc\" returns oldest first. \"relevance\" returns SEC's native search-score order, which weights term match strength over recency. Date sorts re-order the top 100 EFTS relevance hits — for broad queries with more than 100 matches and no entity targeting, date-newest filings may sit outside that window. Add ticker:/cik: targeting or tighten the query to keep matches under 100 if absolute recency matters."New value: +"Result ordering. \"filing_date_desc\" (default) returns most recent first. \"filing_date_asc\" returns oldest first. \"relevance\" returns SEC's native search-score order, which weights term match strength over recency. Date sorts re-order the top 100 hits returned by the search index — for broad queries with more than 100 matches and no entity targeting, date-newest filings may sit outside that window. Entity targeting (ticker:/cik:) or a narrower query keeps matches inside the window when absolute recency matters."
    • changedOutput schema / properties / total / description
      Previous value: -"Total matching filings (capped at 10,000). Under entity targeting (ticker:/cik:), this becomes the count of entity-matching hits within the EFTS sample window — a lower bound when more EFTS matches exist beyond the window."New value: +"Total matching filings (capped at 10,000). Under entity targeting (ticker:/cik:), this becomes the count of entity-matching hits within the sampled window of search results — a lower bound when more matches exist beyond the window."
    • changedOutput schema / properties / total_is_exact / description
      Previous value: -"False when total hits the 10,000 cap, or when entity targeting filtered a sample that did not cover the full EFTS match set."New value: +"False when total hits the 10,000 cap, or when entity targeting filtered a sample that did not cover the full match set."
  17. Changed13 schema fields changed
    • changedInput schema / properties / offset / description
      Previous value: -"Pagination offset. Increment by limit for the next page. EDGAR caps total accessible results at 10,000 — offsets past this return nothing."New value: +"Pagination offset. Increment by limit for the next page. EDGAR caps total accessible results at 10,000 — offsets past this return nothing. Under date sort, pagination is bounded to the first 100 hits."
    • addedInput schema / properties / sort
      Added value: +{
      +  "default": "filing_date_desc",
      +  "description": "Result ordering. \"filing_date_desc\" (default) returns most recent first. \"filing_date_asc\" returns oldest first. \"relevance\" returns SEC's native search-score order, which weights term match strength over recency. Date sorts re-order the top 100 EFTS relevance hits — for broad queries with more than 100 matches and no entity targeting, date-newest filings may sit outside that window. Add ticker:/cik: targeting or tighten the query to keep matches under 100 if absolute recency matters.",
      +  "enum": [
      +    "filing_date_desc",
      +    "filing_date_asc",
      +    "relevance"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / properties / results / items / properties / accession_number / description
      Previous value: -"Use with secedgar_get_filing to retrieve content."New value: +"Filing accession number. Pass to secedgar_get_filing to retrieve the document text."
    • changedOutput schema / properties / results / items / properties / cik / description
      Previous value: -"Company CIK."New value: +"Filing entity CIK, zero-padded to 10 digits."
    • changedOutput schema / properties / results / items / properties / company_name / description
      Previous value: -"Filing entity name."New value: +"Filing entity, with ticker/CIK parentheticals stripped."
    • changedOutput schema / properties / results / items / properties / file_description / description
      Previous value: -"Document description."New value: +"SEC-provided description of the matching document (e.g., \"EX-99.1\"). Absent when SEC published none."
    • changedOutput schema / properties / results / items / properties / filing_date / description
      Previous value: -"Date filed."New value: +"Date the filing was submitted (YYYY-MM-DD)."
    • changedOutput schema / properties / results / items / properties / form / description
      Previous value: -"Form type."New value: +"Form type (e.g. \"10-K\"). Absent for hits where the index lacks a form tag."
    • changedOutput schema / properties / results / items / properties / location / description
      Previous value: -"Business location."New value: +"Business location (state or country code). Absent when SEC has no location for this filer."
    • changedOutput schema / properties / results / items / properties / period_ending / description
      Previous value: -"Period of report."New value: +"Period the filing reports on (YYYY-MM-DD). Absent for filings without a reporting period (e.g., proxy statements, ownership reports)."
    • changedOutput schema / properties / results / items / properties / sic / description
      Previous value: -"SIC code."New value: +"SIC industry code for the filer. Absent for filers without a classification."
    • changedOutput schema / properties / total / description
      Previous value: -"Total matching filings (capped at 10,000)."New value: +"Total matching filings (capped at 10,000). Under entity targeting (ticker:/cik:), this becomes the count of entity-matching hits within the EFTS sample window — a lower bound when more EFTS matches exist beyond the window."
    • changedOutput schema / properties / total_is_exact / description
      Previous value: -"False when total hits the 10,000 cap."New value: +"False when total hits the 10,000 cap, or when entity targeting filtered a sample that did not cover the full EFTS match set."
  18. Changed1 schema field changed
    • addedOutput schema / properties / results / items / description
      Added value: +"One matching filing hit from the full-text search index."
  19. Changed2 schema fields changed
    • changedInput schema / properties / offset / description
      Previous value: -"Pagination offset. Increment by limit for next page. Hard cap at 10,000 total results."New value: +"Pagination offset. Increment by limit for the next page. EDGAR caps total accessible results at 10,000 — offsets past this return nothing."
    • changedInput schema / properties / offset / maximum
      Previous value: -9007199254740991New value: +9999
  20. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the readOnly/openWorld/idempotent annotations: discloses the ~5s cost of the pre-2001 local scan bounded to 50 documents, the boundary split-and-merge with per-row source tagging, and the automatic staging of oversized match sets as df_<id>. These are non-obvious runtime behaviors an agent must plan around.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and era split, and every sentence carries operational detail. It is dense and slightly repetitive — the query-syntax list appears in both the description and the schema's query field — but little is pure padding for a tool this complex.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the hard parts an agent needs: which era serves what, what happens on a crossing range, where pagination silently stops, and how to continue via the dataframe tools. With an output schema present, return-value documentation is correctly left out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the per-parameter descriptions are themselves extremely detailed (era semantics for sort/offset, form-name boundary, date pairing). The description restates the query syntax (phrases, boolean, wildcards, ticker:/cik:) rather than adding new parameter-level meaning, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — full-text/archived search over EDGAR filings since 1993 — and immediately scopes it by era (2001 EFTS boundary). An agent can distinguish this from secedgar_company_search or secedgar_get_filing without opening another schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: entity targeting (ticker:/cik:) is required for pre-2001 free text, drop text terms to browse by form/date, use sort=relevance for deep pagination, and hand large match sets to secedgar_dataframe_describe/query. It also names secedgar_get_insider_transactions for parsed ownership XML, which is a genuine when-not-instead signal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.