io.github.cyanheads/secedgar-mcp-server
REMOTE · SECEDGAR.CASEYJHAND.COM · 2 COMPONENTS · SCANNED AUG 3
Query SEC EDGAR filings, XBRL financials, and company data through MCP. STDIO & Streamable HTTP.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →
Endpoint Security66
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation not fully verified: no authorisation is required to call this server, and 16 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe. See how to fix → View diagnostics → Unverified
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability74
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 8359 tokens (~464/item across 18 items; 16 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · secedgar.caseyjhand.com
claude mcp add --transport http cyanheads-secedgar-mcp-server https://secedgar.caseyjhand.com/mcp
[mcp_servers.cyanheads-secedgar-mcp-server] url = "https://secedgar.caseyjhand.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"cyanheads-secedgar-mcp-server": {
"type": "remote",
"url": "https://secedgar.caseyjhand.com/mcp",
"enabled": true
}
}
} openclaw mcp add cyanheads-secedgar-mcp-server --url https://secedgar.caseyjhand.com/mcp --transport streamable-http
mcp_servers:
cyanheads-secedgar-mcp-server:
url: "https://secedgar.caseyjhand.com/mcp" {
"mcpServers": {
"cyanheads-secedgar-mcp-server": {
"type": "http",
"url": "https://secedgar.caseyjhand.com/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 2 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Jul 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.
- 29 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Jul 26 +2
- The server rewrote its instructions, which are the text every model session reads security
- Tool “secedgar_get_institutional_holdings” rewrote its description, which is the text the model reads security
- Schema quality: 395 → 464 ▼ functional
- Schema quality: 5532 → 6731 ▼ functional
- Stability: unverified → 0.03 ▲ functional
- Schema quality: good → excellent functional
- Server version: 0.13.1 → 0.14.0 functional
- New tool “secedgar_get_material_events” functional
- New tool “secedgar_find_holders” functional
- “secedgar_get_institutional_holdings” reworded the description of “ticker_or_cik” cosmetic
- 26 Jul 26 64
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Probed https://secedgar.caseyjhand.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=caseyjhand.com | CN=WE1,O=Google Trust Services,C=US | 7 Jul 2026 | 5 Oct 2026 | ECDSA 256 | ECDSA-SHA256 | 5aad900eb2055a0b0ea55912ec19680c |
| SANs: caseyjhand.com, *.caseyjhand.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
DNSSEC secure
Validation of secedgar.caseyjhand.com. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| caseyjhand.com. | present | 2371 | 13 | Verified |
| secedgar.caseyjhand.com. | Verified address RRset verified with the apex keys |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| x-content-type-options | nosniff |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://secedgar.caseyjhand.com/mcp | Verified | 200 | |
| http (plaintext) | http://secedgar.caseyjhand.com/mcp | HTTPS enforced | 301 | https://secedgar.caseyjhand.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
secedgar_company_search Secedgar Company Search ~301
Find companies and retrieve entity info with optional recent filings. Entry point for most EDGAR workflows — resolves tickers, names, or CIKs to entity details, with accession numbers in the result feeding secedgar_get_filing for document content.
| Name | Type | Req | Description |
|---|---|---|---|
| filed_after | — | — | Only include filings filed on or after this date (YYYY-MM-DD). A date filter routes the scan into the older submissions archive pages, so it reaches filings that predate the ~1000-filing recent windo… |
| filed_before | — | — | Only include filings filed on or before this date (YYYY-MM-DD). Use alone or with filed_after; together they bound the archive-page scan. |
| filing_limit | integer | — | Maximum number of filings to return in the inline list. |
| form_types | array | — | Filter filings to specific form types (e.g., ["10-K", "10-Q", "8-K"]). Without this, returns all form types. |
| include_filings | boolean | — | Include recent filings in the response. Set to false for entity-info-only lookups. |
| query | string | yes | Company ticker symbol (e.g., "AAPL", "VOO"), name (e.g., "Apple"), or CIK number (e.g., "320193"). Ticker is the fastest lookup and works for equities, ETFs, and mutual funds. Name search matches cur… |
| Name | Type | Req | Description |
|---|---|---|---|
| cik | string | yes | Central Index Key, zero-padded to 10 digits. |
| class_id | string | — | SEC fund class ID (e.g. "C000092055"). Present when the query resolved via a fund ticker (ETF or mutual fund). |
| dataset | object | — | Canvas dataframe holding the full filtered filing history (recent + archive pages), registered only when the scan reached beyond the recent window and the history exceeds filing_limit. Query the comp… |
| exchanges | array | yes | Exchanges where listed. |
| filings | array | — | Recent filings, filtered by form_types if specified. |
| fiscal_year_end | string | — | Fiscal year end (MM-DD format, e.g., "09-26"). Absent for filers SEC records no fiscal year end for (e.g. private or pre-IPO entities). |
| history_scanned_through | string | — | Oldest filing date reached by the scan (YYYY-MM-DD). Filings older than this were not examined: the recent window caps at ~1000 filings, and older filings live in archive pages fetched only when a da… |
| name | string | yes | SEC-conformed company name. |
| notice | string | — | Guidance when include_filings=true but no filings matched the form_types filter. |
| series_id | string | — | SEC fund series ID (e.g. "S000002839"). Present when the query resolved via a fund ticker (ETF or mutual fund). |
| sic | string | yes | SIC industry code. |
| sic_description | string | yes | Human-readable SIC description. |
| state_of_incorporation | string | — | State of incorporation (US two-letter code, e.g. "DE"). Omitted for some entities, including many foreign filers and individuals. |
| tickers | array | yes | Associated ticker symbols. |
| total_filings | number | — | Total filings matching the filter across everything scanned (recent window + any archive pages), which may exceed filing_limit and the inline list. |
No examples provided.
secedgar_compare_companies Secedgar Compare Companies ~536
Compare 2-10 named companies across 1-8 XBRL concepts, aligned on calendar periods. This is the middle shape between secedgar_get_financials (one company, one concept, full history) and secedgar_fetch_frames (one concept, one period, every reporting company) — reach for it when the question names the companies. One companyfacts read per company, resolved through the same frame dedup and tag priority as secedgar_get_financials so the numbers agree. Balance-sheet and entity-info concepts are filed as point-in-time values and align on the calendar year (annual) or quarter (quarterly) their snapshot falls in, so they sit in the same matrix as income-statement lines. The inline matrix covers the most recent periods up to `periods`, trimmed further when companies x concepts x periods is too large to return in one response; the full aligned series is materialized as df_<id> for growth rates and spreads via secedgar_dataframe_query. A company that fails to resolve is reported in failed_companies and the comparison proceeds with the rest, and a company that does not report a concept is reported in gaps with the tags that were tried — never interpolated or zero-filled. Off-calendar filers and unit mismatches are surfaced in caveats rather than silently mixed.
| Name | Type | Req | Description |
|---|---|---|---|
| companies | array | yes | Companies to compare, as ticker symbols (preferred) or CIK numbers. A company that does not resolve is reported in failed_companies and the rest of the comparison still runs. |
| concepts | array | yes | Concepts to compare — friendly names like "revenue" or "net_income" (discover them with secedgar_search_concepts) or raw XBRL tags. |
| period_type | string | — | Align on full calendar years (annual) or calendar quarters (quarterly). Quarterly comparisons of off-calendar filers are missing at least one calendar quarter per year — see caveats. |
| periods | integer | — | Upper bound on how many recent periods the inline matrix covers, newest first — not a guarantee. The matrix is companies x concepts x periods cells, and the inline window drops further older periods… |
| taxonomy | string | — | XBRL taxonomy to resolve concepts under. Use ifrs-full only when every company in the list reports under IFRS; mixing IFRS and US GAAP filers in one call resolves them all under the same taxonomy. |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | — | The periods cap applied. |
| caveats | array | yes | Comparability warnings: a filer missing one or two calendar quarters from the frame-tagged series, a concept whose values stop at least two full years behind the rest of that company's reporting (eit… |
| cells | array | yes | Inline matrix values, covering the periods listed in periods[]. |
| companies | array | yes | Companies included in the comparison. |
| concepts | array | yes | Concepts covered, in the order supplied. |
| dataset | object | — | Canvas dataframe holding the full aligned series across every period, not just the inline window. Columns match cells[]. Absent when canvas is unavailable. |
| failed_companies | array | yes | Companies excluded from the matrix. The comparison proceeds with the rest rather than failing the whole call. |
| gaps | array | yes | Company-concept pairs with no data. Deliberately explicit — a missing value is never interpolated or zero-filled. |
| period_type | string | yes | Period alignment used, echoed from input. |
| periods | array | yes | Calendar period keys covered by the inline matrix, newest first. Shorter than the requested periods when the cell count forced the window to shrink — the enrichment trailer reports the drop. |
| shown | number | — | Number of periods shown inline. |
| taxonomy | string | yes | Taxonomy the concepts were resolved under, echoed from input. |
| truncated | boolean | — | True when the aligned series has more periods than the inline matrix shows. |
No examples provided.
secedgar_dataframe_describe Secedgar Dataframe Describe ~127
List dataframes (df_XXXXX_XXXXX) materialized by secedgar_fetch_frames, secedgar_search_filings, secedgar_get_financials, secedgar_get_insider_transactions, and secedgar_get_institutional_holdings. Each entry surfaces source tool, query parameters, creation/expiry timestamps, row count, column schema, and whether the dataframe is truncated relative to the upstream source.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | — | Optional table name (df_XXXXX_XXXXX) to describe a single dataframe. Omit to list all dataframes. |
| Name | Type | Req | Description |
|---|---|---|---|
| dataframes | array | yes | Active dataframes for this tenant, newest first. Empty when none are registered. |
No examples provided.
secedgar_dataframe_query Secedgar Dataframe Query ~377
Run a single-statement SELECT against the canvas dataframes registered by secedgar_fetch_frames, secedgar_search_filings, and secedgar_get_financials. Read-only: writes, DDL, DROP, COPY, PRAGMA, ATTACH, and external-file table functions are rejected. System catalogs (information_schema, pg_catalog, sqlite_master, duckdb_*) are denied — list dataframes via secedgar_dataframe_describe. Optional register_as chains the result as a new dataframe with a fresh TTL.
| Name | Type | Req | Description |
|---|---|---|---|
| preview | integer | — | Rows to include in the immediate response. Defaults to the row limit. Set lower (e.g., 50) when chaining via register_as and only a sample is needed inline. |
| register_as | string | — | When set, persist the result as a new dataframe under this name (must match df_XXXXX_XXXXX shape, or pass a fresh df_<id> generated by the agent). Fresh TTL window — not inherited from the parents in… |
| row_limit | integer | — | Hard cap on rows materialized in the response. Default 1000, max 10000. The full result lives on-canvas under register_as when provided — do not raise this to keep large results. |
| sql | string | yes | Single-statement SELECT against df_<id> tables on the shared canvas. Standard DuckDB SQL — joins, aggregates, window functions, CTEs all supported. Reference dataframes by the names returned in fetch… |
| Name | Type | Req | Description |
|---|---|---|---|
| columns | array | yes | Column names in projection order. |
| expires_at | string | — | ISO 8601 expiry timestamp for the newly registered dataframe, when applicable. |
| notice | string | — | Guidance when the query returned no rows, or when results were capped. |
| registered_as | string | — | Set when `register_as` was supplied and the new dataframe was materialized. |
| row_count | number | yes | Total rows the query produced (may exceed `rows.length` when capped). |
| rows | array | yes | Materialized rows, bounded by `preview` / `row_limit`. |
No examples provided.
secedgar_fetch_frames Secedgar Fetch Frames ~555
Fetch SEC XBRL frames for one concept × one period across all reporting companies. Inline response returns a page of the ranked companies — start at the top or pass offset/next_offset to walk further down the ranking; the full frames response (all reporters) is materialized as df_<id> when a canvas is available, queryable via secedgar_dataframe_query. Accepts friendly names like "revenue" or "assets" (discover via secedgar_search_concepts) or raw XBRL tags. One call hits one XBRL tag — when a friendly name maps to multiple same-meaning tags, the response's `unqueried_tags` lists the others; call again per tag and UNION/COALESCE in SQL with an analysis-specific priority (e.g. SalesRevenueGoodsNet is goods-only). The response's `related_tags` separately flags alternate-DEFINITION tags a meaningful share of filers use as their primary line (e.g. cash incl. restricted cash, equity incl. noncontrolling interest) — a whole-universe screen on the base tag silently omits those filers; query them separately, but do not blindly union (the semantics differ). Response includes `value_distribution` and `period_end_range` to flag XBRL scale-factor anomalies and fiscal-year mixing.
| Name | Type | Req | Description |
|---|---|---|---|
| concept | string | yes | Financial concept — same friendly names as secedgar_get_financials (e.g., "revenue", "assets", "eps_basic") or raw XBRL tag. |
| limit | integer | — | Number of companies to return. |
| offset | integer | — | Rank to start the page at, 0-based, over the sorted frame. Pass the next_offset from the previous response to read the next page — the ranked list is fetched whole and sliced, so paging is stable and… |
| period | string | yes | Calendar period. Use duration periods (no I suffix) for income/cash-flow items: "CY2023" (full year), "CY2024Q2" (single quarter). Use instant periods (I suffix) for balance-sheet items: "CY2023Q4I"… |
| sort | string | — | Sort direction. "desc" for highest values first (typical for revenue, assets). "asc" for lowest values. |
| unit | string | — | Unit of measure. Use "USD-per-shares" (or equivalently "USD/shares") for EPS, "shares" for share counts, "pure" for ratios. Ignored when concept resolves to a friendly name with a known unit. |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | — | The limit cap applied. |
| caveats | array | yes | Data-completeness warnings specific to this query. Currently populated for duration periods 'CY####Q[1-4]', where SEC XBRL omits filers' fiscal Q4 (reported only as the 10-K residual) — affected file… |
| concept | string | yes | XBRL tag the data was actually fetched against (after resolving any friendly name). |
| data | array | yes | Ranked companies for this metric. |
| dataset | object | — | Canvas dataframe handle holding the full frames response. Absent when canvas is unavailable or materialization failed. |
| label | string | yes | Human-readable concept label. |
| next_offset | number | — | Offset to pass on the next call to continue down the ranking. Absent on the last page (no companies remain past this one). |
| notice | string | — | Guidance when the requested offset lands past the end of the ranked list. |
| offset | number | yes | Rank the returned page starts at, 0-based — the effective offset applied. |
| period | string | yes | Calendar period the data was fetched for, echoed from input. |
| period_end_range | object | yes | Range of period_end dates across the frame. SEC normalizes to calendar periods but filers report against their own fiscal year-ends, so a "CY2023" duration frame can contain period_ends from 2023-01-… |
| related_tags | array | yes | Alternate-DEFINITION XBRL tags (distinct from same-meaning `unqueried_tags`) that a meaningful share of filers use as their primary line for this metric — e.g. `cash` filers reporting `CashCashEquiva… |
| shown | number | — | Number of companies shown inline. |
| total_companies | number | yes | Total companies reporting this metric for this period. |
| truncated | boolean | — | True when the inline data[] was capped by limit. |
| unit | string | yes | Unit of measure used for the lookup (always normalized to dashed form, e.g. "USD-per-shares"). |
| unqueried_tags | array | yes | Other same-meaning XBRL tags in the friendly-name mapping that this call did NOT query (historical/variant spellings of the same metric). Empty for raw tags or single-tag concepts — for alternate-DEF… |
| value_distribution | object | yes | Distribution stats across the full frame, computed during materialization. Use `max_to_p95_ratio` as the primary outlier signal — it catches scale-factor anomalies even when median is 0 or negative. |
No examples provided.
secedgar_find_holders Find Holders ~555
Find which institutional managers reported holding an issuer, by searching 13F-HR information tables for one reporting quarter. This is the reverse direction of secedgar_get_institutional_holdings: that tool takes a manager and returns its portfolio, this one takes an issuer and returns its managers — pass a returned filer_cik plus the same quarter to read the actual position. Searching by cusip is the precise path, matching the identifier the information table itself carries; without it the issuer name is matched as a phrase against the filing text, which both over-matches (unrelated issuers sharing a word) and under-matches (managers writing the name differently), so prefer cusip whenever one is known. A CUSIP cannot be derived from a ticker here — read one off any 13F information table returned by secedgar_get_institutional_holdings. The returned list is unranked: the search index scores by text relevance, which carries no signal about position size, and no ordering by shares or market value is available without opening each filing. Managers holding under $100M in 13(f) securities are exempt from filing at all.
| Name | Type | Req | Description |
|---|---|---|---|
| cusip | — | — | The issuer's 9-character CUSIP (e.g. "037833100" for Apple common stock; foreign issuers use a CINS starting with a letter, e.g. "H1467J104"). The precise match key — information tables identify ever… |
| issuer | string | yes | The portfolio company whose holders you want — a ticker ("AAPL"), a 10-digit CIK ("0000320193"), or a company name. Without cusip, this resolves to the company's EDGAR-conformed name and that name is… |
| limit | integer | — | Filer rows returned inline. The full fetched set (up to 500 rows) is materialized as a dataframe when a canvas is available. Default 20. |
| quarter | — | — | Reporting quarter to search, "YYYY-QN" (e.g. "2026-Q1"). Omit for the newest quarter whose 45-day filing deadline has passed — the applied quarter and its filing window are echoed in the response. A… |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | — | The limit cap applied. |
| dataset | object | — | Canvas dataframe holding every fetched filer row, each carrying the issuer key and quarter so it joins across issuers and quarters. Absent when the result fits inline, canvas is unavailable, or mater… |
| fetched | number | yes | Filings retrieved from the index, capped by the fetch budget of 500. Equals total_filings when the whole window fit inside the budget. |
| filed_from | string | yes | Start of the filing window searched (YYYY-MM-DD). |
| filed_to | string | yes | End of the filing window searched (YYYY-MM-DD). |
| holders | array | yes | One page of filers, capped at limit. Order carries no position-size meaning — see the ordering note. |
| holders_in_quarter | number | yes | Distinct managers among the fetched filings reporting this quarter as their period — the set paged by limit and materialized on the dataframe. Lower than fetched by the filings dropped as amendments… |
| issuer | string | yes | The issuer input, echoed. |
| notice | string | — | Guidance when the search returned no filers — names the likely cause. |
| ordering | string | yes | How the holder list is ordered, and what that ordering does not mean. |
| quarter | string | yes | Reporting quarter searched, "YYYY-QN" — the requested one, or the applied default. |
| resolved_issuer_cik | string | — | CIK of the resolved issuer, zero-padded to 10 digits. Absent when cusip was supplied. |
| resolved_issuer_name | string | — | EDGAR-conformed company name the issuer resolved to, and the phrase that was searched. Absent when cusip was supplied (no company lookup runs). |
| search_key | string | yes | The exact term searched — the CUSIP, or the quoted phrase. |
| search_mode | string | yes | Which key matched the information tables. "cusip" matches the identifier the table itself carries; "name" phrase-matches the filing text and is looser in both directions. |
| shown | number | — | Number of filers shown inline. |
| total_filings | number | yes | Total 13F-HR filings matching the search key inside the filing window, as reported by the index. A slight over-count of this quarter's holders on two counts, both of which the returned rows correct f… |
| total_is_exact | boolean | yes | False when total_filings is a lower bound (the index capped the count). |
| truncated | boolean | — | True when the inline holders list was capped. |
No examples provided.
secedgar_get_beneficial_owners Get Beneficial Owners ~549
List the 5%-and-over beneficial owners of a public company, parsed from the structured SCHEDULE 13D and SCHEDULE 13G filings made about it. The input is the ISSUER — the company being held — which is the opposite direction from secedgar_get_institutional_holdings, where the input is the manager. 13D is the activist form and carries the filer's stated purpose of the transaction; 13G is the passive form and has no purpose field at all, which is the substantive difference between a stake that intends to influence control and one that does not. Every filing is returned with each reporting person listed separately, because voting power, dispositive power, and percent of class are reported per person even on a joint filing where several funds and their controlling principal report overlapping shares — summing those percentages double-counts the same position. Coverage starts at 2024-12-18, when SEC replaced the legacy SC 13D / SC 13G text filings with this XML format; earlier stakes are readable but not parseable, and the response reports how many of them the issuer has. The full parsed set is materialized as df_<id> when a canvas is available, one row per reporting person, so it joins against the insider and 13F dataframes on issuer CIK.
| Name | Type | Req | Description |
|---|---|---|---|
| form_kind | string | — | Which schedule to return. "13D" is the activist form, filed by a holder that may seek to influence control and carrying a stated purpose of transaction. "13G" is the passive form, available to instit… |
| include_amendments | boolean | — | Whether to include amendments (SCHEDULE 13D/A, SCHEDULE 13G/A). Amendments carry the current position and are how an ongoing stake is tracked, so they are included by default. Set false to see only f… |
| issuer | string | yes | The company whose blockholders you want — a ticker ("AAPL"), a 10-digit CIK ("0000320193"), or a company name. This is the subject company of the schedule, not the investor filing it; passing an inve… |
| limit | integer | — | Number of filings to fetch and parse, newest first. Each filing is a separate document fetch, so this is the cost of the call as well as its depth. Default 10; a widely-held company can have dozens o… |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | — | The limit cap applied. |
| dataset | object | — | Canvas dataframe holding one row per reporting person across every parsed filing, each row carrying the issuer, form, accession, and dates alongside the person's powers. Joins against the insider and… |
| filings | array | yes | Blockholder filings, newest first, capped at limit. |
| filings_parsed | number | yes | Filings actually fetched and parsed — total_structured_filings capped by limit. |
| form_kind | string | yes | The schedule filter applied — the requested value, or the default "all". |
| issuer | string | yes | The issuer input, echoed. |
| issuer_cik | string | yes | CIK of the resolved issuer, zero-padded to 10 digits. |
| issuer_name | string | yes | EDGAR-conformed name of the resolved issuer. |
| legacy_filings_before_coverage | number | yes | Legacy SC 13D / SC 13G filings in the issuer's recent submissions window — pre-2024-12-18 stakes this tool cannot parse. Reach them with secedgar_search_filings and read them with secedgar_get_filing… |
| notice | string | — | Guidance when no filings matched — names the coverage boundary and the fallback. |
| shown | number | — | Number of filings returned. |
| structured_coverage_from | string | yes | First filing date on which SEC required this XML format (YYYY-MM-DD). Blockholder filings before it exist but are not parseable into this schema. |
| total_structured_filings | number | yes | Structured SCHEDULE 13D/13G filings matching the form filter in the issuer's recent submissions window, before the limit. The population the returned filings are the newest slice of. |
| truncated | boolean | — | True when filings were capped by limit. |
No examples provided.
secedgar_get_filing Secedgar Get Filing ~574
Fetch a specific filing's metadata and document content by accession number. Returns the primary document as readable text. Use offset/next_offset for multi-page access to large filings (10-K, S-1 can exceed 1M chars): pass the next_offset from a truncated response to read the next page. Use section to jump directly to a heading (e.g. 'risk factors', 'item 7') without needing an offset.
| Name | Type | Req | Description |
|---|---|---|---|
| accession_number | string | yes | Filing accession number in either format: "0000320193-23-000106" (dashes) or "000032019323000106" (no dashes). Obtained from secedgar_company_search or secedgar_search_filings results. |
| cik | string | — | Company CIK, digits only (resolve via secedgar_company_search if you have a ticker or name). Optional but recommended — speeds up archive lookup. If omitted, likely filing CIKs are inferred from SEC… |
| content_limit | integer | — | Maximum characters of document text to return per page. 10-K filings can exceed 500,000 characters; S-1/A can exceed 1,000,000. Default 50,000 captures ~12,000 words (typically business overview, ris… |
| document | string | — | Specific document filename within the filing (e.g., "ex-21.htm" for subsidiaries list). Default: the primary document. Available documents are listed in the response metadata under documents; entries… |
| include_xbrl | boolean | — | Include XBRL viewer artifacts and machine-readable taxonomy files (R*.htm fragments, *_cal/_def/_lab/_pre.xml linkbases, *_htm.xml inline instance, *.xsd schemas, MetaLinks.json, FilingSummary.xml, S… |
| offset | integer | — | Character offset into the extracted document text. Pass next_offset from a truncated response to continue reading the next page. Default 0 reads from the beginning. |
| section | string | — | Jump to a named section by case-insensitive substring match against detected headings (e.g. 'risk factors', 'item 7', 'certain relationships'). Takes precedence over offset when both are provided. On… |
| Name | Type | Req | Description |
|---|---|---|---|
| accession_number | string | yes | Filing accession number, normalized to dash format. |
| cik | string | yes | Filing entity CIK, zero-padded to 10 digits. |
| company_name | string | — | Filing entity name. Absent if the CIK did not resolve to a known entity. |
| content | string | yes | Document text content for this page window. |
| content_total_length | number | yes | Full document length before any truncation. |
| content_truncated | boolean | yes | True if content was truncated at content_limit. |
| documents | object | yes | Filing documents grouped by category. Every name is a valid document input EXCEPT entries carrying binary: true — scanned pages, PDFs, packaged archives and spreadsheets, which hold no text and are r… |
| filing_date | string | — | Date the filing was submitted (YYYY-MM-DD). Absent under the same conditions as form. |
| filing_url | string | yes | Direct URL to the filing on SEC.gov. |
| form | string | — | Form type (e.g., "10-K", "10-Q"). Absent for filings older than the last ~1,000 the company has filed (SEC does not surface metadata for those without a separate fetch). |
| next_offset | number | — | Character offset to pass as offset on the next call to continue reading. Only present when the response was truncated. Calling agents should follow this until content_truncated is false. |
| outline | array | — | Document outline — detected headings with their character offsets. Present on the first page of a truncated response (offset=0, no section). Use a heading offset as offset, or pass heading text as se… |
| period_ending | string | — | Period the filing reports on (YYYY-MM-DD). Absent under the same conditions as form. |
| primary_document | string | yes | Filename of the filing's actual primary document (e.g., the 10-K HTML file). |
| requested_document | string | — | Filename of the specific document requested via the document param. Only present when document differs from primary_document. |
No examples provided.
secedgar_get_financials Secedgar Get Financials ~321
Get historical XBRL financial data for a company. Accepts friendly concept names (e.g., "revenue", "net_income", "assets") or raw XBRL tags. Discover available friendly names with secedgar_search_concepts. Handles historical tag changes and deduplicates data automatically.
| Name | Type | Req | Description |
|---|---|---|---|
| company | string | yes | Ticker symbol (e.g., "AAPL") or CIK number. Ticker is preferred. |
| concept | string | yes | Financial concept — friendly name (e.g., "revenue", "net_income", "assets", "eps_diluted") or raw XBRL tag (e.g., "AccountsPayableCurrent"). Friendly names auto-resolve to the correct XBRL tags and h… |
| limit | integer | — | Cap the inline data[] to the most-recent N periods (the series is newest-first). The full series is always registered to the dataframe, so older periods stay queryable via secedgar_dataframe_query. O… |
| period_type | string | — | Filter to annual (FY) or quarterly (Q1-Q4) data. "all" returns both. When omitted, defaults to "annual"; instant (balance-sheet) concepts automatically fall back to returning the full series on the f… |
| taxonomy | string | — | XBRL taxonomy. us-gaap for US companies, ifrs-full for foreign filers, dei for entity info (shares outstanding). |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | — | The limit cap applied. |
| caveats | array | — | Data-completeness warnings about the returned series. Two kinds. On quarterly results, one entry when one or two calendar quarters are absent from every recent qualifying year — SEC reports a filer's… |
| cik | string | yes | Resolved CIK, zero-padded to 10 digits. |
| company | string | yes | Resolved entity name (SEC-conformed). |
| concept | string | yes | XBRL tag name used. |
| data | array | yes | Deduplicated time series, newest first. |
| dataset | object | — | Canvas dataframe handle holding the same time series. Use for cross-company JOINs via secedgar_dataframe_query. The source-filing fiscal keys are materialized as source_filing_fy/source_filing_fp — o… |
| description | string | — | XBRL taxonomy description for this concept. Often absent for company-extension tags or older concepts. |
| label | string | yes | Human-readable label for the concept. |
| shown | number | — | Number of periods shown inline. |
| tags_tried | array | — | XBRL tags that were attempted (shown when using friendly names that map to multiple tags). |
| truncated | boolean | — | True when the inline data[] was capped by limit. |
| unit | string | yes | Unit of measure (e.g., "USD", "shares", "USD/shares"). |
No examples provided.
secedgar_get_fund_holdings Get Fund Holdings ~689
List what an ETF or mutual fund holds, parsed from the NPORT-P portfolio report it files with the SEC every quarter. The input is the fund — a ticker like VOO, a fund series ID, or the registrant trust — which is the opposite direction from the ownership tools: secedgar_get_institutional_holdings and secedgar_find_holders answer who owns a company, this answers what a fund owns. Each position carries the security name, CUSIP/ISIN/LEI where the filer reports them, share balance, market value in USD, and percent of the fund's net assets, alongside fund-level net assets and total assets. Positions are returned largest-first by percent of net assets, one page of limit rows starting at offset; the full report registers as df_<id> when a canvas is available, which is how a fund running to thousands of positions is aggregated or joined against the 13F and insider dataframes. An NPORT-P covers exactly one fund series and a registrant trust files one report per series, so a trust with several funds needs the specific fund named — pass its ticker or series_id. Reports publish roughly two months after the period they cover, so every result is dated: the holdings are the portfolio as of report_period_date, not as of today.
| Name | Type | Req | Description |
|---|---|---|---|
| fund | string | yes | The fund whose portfolio you want — a fund ticker ("VOO", "SCHD"), an SEC fund series ID ("S000002839"), or a 10-digit CIK. A ticker names one share class of one series and routes directly; a CIK nam… |
| limit | integer | — | Number of positions to return inline, largest first by percent of net assets. Default 20. A broad index fund reports thousands of positions, so the inline list is a preview — read the whole portfolio… |
| offset | integer | — | Position to start the page at, 0-based, over the full ordered holdings list. Pass the returned next_offset to read the next page — the report is parsed whole and sliced, so paging is stable and gap-f… |
| report_date | string | — | Target a specific reporting period by its last day (YYYY-MM-DD), e.g. "2025-12-31". Omit for the most recent report. Period ends follow the fund's own fiscal quarters, which are not always calendar q… |
| series_id | string | — | SEC fund series identifier ("S000002839"), naming which fund of the registrant to report. Takes precedence over any series the fund input implies. Series IDs come back on fund results from secedgar_c… |
| Name | Type | Req | Description |
|---|---|---|---|
| accession_number | string | yes | Accession number — pass to secedgar_get_filing for the full document. |
| as_of | string | yes | The portfolio date these holdings are reported as of, and the publication lag behind it. |
| available_report_periods | array | yes | Period end dates of this fund's reports, newest first — the horizon report_date can address, not the fund's full history. It reaches back roughly a decade of quarterly reports, and a period older tha… |
| cap | number | — | The limit cap applied. |
| class_ids | array | yes | SEC class IDs of the share classes covered. One report covers every class of the series, so a fund with both an ETF and an admiral-share class reports them together. |
| dataset | object | — | Canvas dataframe holding every position in the report (the inline holdings[] is a preview capped at limit). Each row carries the fund keys — series_id, registrant_cik, report_period_date, accession_n… |
| filing_date | string | yes | Date the report was submitted to EDGAR (YYYY-MM-DD). |
| form | string | yes | EDGAR form name — "NPORT-P", or "NPORT-P/A" for an amended report. |
| fund | string | yes | The fund input, echoed. |
| holdings | array | yes | One page of positions, `limit` rows starting at `offset`, largest first by percent of net assets. |
| is_final_filing | boolean | — | True when the fund reports this as its last filing on the series, which marks a liquidation or merger. Absent when the filing does not answer. |
| net_assets_usd | number | — | Fund net assets in USD at the report date — the denominator of percent_of_net_assets. |
| next_offset | number | — | Offset to pass on the next call to continue through the portfolio. Absent on the last page. |
| notice | string | — | Guidance when the report carried no positions or the page fell past the end. |
| offset | number | yes | Position the returned page starts at, 0-based. |
| publication_lag_days | number | — | Days between the portfolio date and the filing date. Absent when the report omits its period date. |
| registrant_cik | string | yes | CIK of the registrant trust, zero-padded to 10 digits. |
| registrant_name | string | yes | EDGAR-conformed name of the registrant trust. |
| report_period_date | string | — | Last day of the period this portfolio is reported as of (YYYY-MM-DD). Holdings are the fund's positions on this date, not today's. Absent only when the filer omits it. |
| report_period_end | string | — | Last day of the fiscal year the reporting period falls in (YYYY-MM-DD) — the fund's fiscal year end, not the portfolio date. |
| series_id | string | — | SEC series ID of the fund this report covers. Absent when the registrant files as a single fund with no series structure, which is how some older exchange-traded trusts are organized. |
| series_name | string | — | Fund name as the filer states it on the report. A closed-end fund organized as a single registrant names itself here with no series_id alongside; absent only when the filer leaves the field blank or… |
| shown | number | — | Number of positions shown inline. |
| total_assets_usd | number | — | Fund total assets in USD at the report date. |
| total_holdings | number | yes | Positions in the report, before offset and limit — the size of the full portfolio. |
| total_liabilities_usd | number | — | Fund total liabilities in USD at the report date. |
| truncated | boolean | — | True when the inline holdings list was capped by limit. |
No examples provided.
secedgar_get_insider_transactions Get Insider Transactions ~331
Fetch Form 4 insider transactions (purchases, sales, grants, exercises) for a company by parsing SEC EDGAR ownership XML. Returns the reporting person, their relationship to the issuer, transaction date, type, shares traded (absolute magnitude), direction (acquire/dispose), price per share, and shares owned after the transaction. Covers nonDerivative transactions (open-market buys/sells, gifts) and derivative transactions (option exercises, RSU vests). When a canvas is available, the full set of transactions parsed from the scanned recent filings is materialized as df_<id> (the inline list is a preview capped at limit) — query it with secedgar_dataframe_query to aggregate net buy/sell by insider: SUM(CASE WHEN direction='dispose' THEN -shares_traded ELSE shares_traded END). Use secedgar_search_filings with forms=["4"] for broader date-range queries or to search across all companies.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | — | Maximum number of transactions to return across all Form 4 filings fetched. Filings are scanned newest-first. Default 20. |
| ticker_or_cik | string | yes | Company ticker symbol (e.g., "AAPL") or 10-digit CIK number (e.g., "0000320193"). The issuer, not the reporting person. |
| transaction_type | string | — | Filter by direction. "purchase" = open-market buys (code P). "sale" = open-market sells (code S). "all" includes grants, awards, exercises, gifts, and other coded transaction types as well. |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | — | The limit cap applied. |
| dataset | object | — | Canvas dataframe holding the full parsed transaction set from the scanned filings (the inline transactions[] is a preview capped at limit). Each row carries the issuer (issuer_cik, issuer_ticker) plu… |
| filings_scanned | number | yes | Number of Form 4 filings scanned to produce the result. |
| issuer_cik | string | yes | Issuer CIK, zero-padded to 10 digits. |
| issuer_name | string | yes | Issuer entity name (SEC-conformed). |
| issuer_ticker | string | — | Issuer ticker symbol when available. |
| notice | string | — | Guidance when results are empty after filtering — explains the filter applied and suggests alternatives. |
| shown | number | — | Number of transactions shown inline. |
| transactions | array | yes | Insider transactions, newest filing first. Preview capped at `limit` — the full scanned set lives on the canvas dataframe (see `dataset`). |
| truncated | boolean | — | True when the inline transactions[] was capped by limit. |
No examples provided.
secedgar_get_institutional_holdings Get Institutional Holdings ~709
Fetch 13F-HR quarterly institutional holdings by parsing the SEC EDGAR information table XML. ticker_or_cik is the institutional filer — its 10-digit CIK (e.g. 0000102909), or an entity name resolved through EDGAR entity search — and the tool returns what that institution holds. A name that matches several EDGAR filers (some legal names are shared across entities) returns those candidates so you can retry with the exact CIK, rather than guessing. For the reverse direction — which institutions hold a given portfolio company — use secedgar_find_holders, whose filer_cik results feed straight back into this tool. The 13F information table lists each position: issuer name, CUSIP, shares held, market value (in whole USD), and put/call designation for options. Sub-lines for the same security are consolidated into distinct positions sorted by value by default (set consolidate=false for raw filing rows). The inline holdings list is one page of limit rows starting at offset — pass the returned next_offset to walk further down a large information table. The full parsed holdings set is also materialized as df_<id> when a canvas is available — so query it with secedgar_dataframe_query to aggregate the whole filing or self-join across quarters on cusip + reporting_period. Institutions with less than $100M in 13(f) securities are exempt and may not file. Use secedgar_search_filings with forms=["13F-HR"] for broader search.
| Name | Type | Req | Description |
|---|---|---|---|
| consolidate | boolean | — | When true (default), info-table sub-lines for the same security (CUSIP + class + put/call) are summed into one position and results are sorted by market value descending, so `limit` returns the large… |
| limit | integer | — | Maximum number of holdings rows to return. 13F filings from large institutions can contain thousands of positions. Default 20. |
| offset | integer | — | Row to start the page at, 0-based, over the ordered position list. Pass the next_offset from the previous response to read the next page — the filing is parsed whole and sliced, so paging is stable a… |
| quarter | string | — | Reporting quarter to target, in "YYYY-QN" format (e.g., "2025-Q4"). When omitted, returns the most recent 13F-HR available. Quarters map to the filing window: Q4 2025 = filings submitted roughly Jan–… |
| ticker_or_cik | string | yes | The institutional filer whose 13F to fetch — a 10-digit CIK (e.g. "0000102909" for VANGUARD GROUP INC, the most reliable form) or an entity name. Names resolve through EDGAR entity search, which cove… |
| Name | Type | Req | Description |
|---|---|---|---|
| accession_number | string | yes | Accession number for this 13F-HR filing — pass to secedgar_get_filing for the full document. |
| cap | number | — | The limit cap applied. |
| dataset | object | — | Canvas dataframe holding every parsed position from this 13F filing (the inline holdings[] is a preview capped at limit). Each row carries the filer metadata (filer_cik, filer_name, reporting_period,… |
| filer_cik | string | yes | CIK of the 13F filer, zero-padded to 10 digits. |
| filer_name | string | yes | Name of the institutional filer (the 13F submitter). |
| filing_date | string | yes | Date the 13F was submitted (YYYY-MM-DD). |
| holdings | array | yes | One page of holdings, `limit` rows starting at `offset` — consolidated positions sorted by market value when consolidate=true, else raw information-table rows in filing order. |
| next_offset | number | — | Offset to pass on the next call to continue through the positions. Absent on the last page (no rows remain past this one). |
| notice | string | — | Guidance when no filings were found or the result set is empty — suggests alternatives. |
| offset | number | yes | Row the returned page starts at, 0-based — the effective offset applied. |
| reporting_period | string | — | The calendar-quarter end date this 13F covers (YYYY-MM-DD), from the filing cover page. Absent if not surfaced in the filing. |
| shown | number | — | Number of holdings shown inline. |
| total_holdings_in_filing | number | yes | Total number of raw information-table rows in this filing, before consolidation and the limit. |
| total_positions | number | — | Number of distinct positions after consolidating info-table sub-lines, before the limit. Present only when consolidate=true. |
| truncated | boolean | — | True when the inline holdings[] was capped by limit. |
No examples provided.
secedgar_get_material_events Get Material Events ~532
Retrieve a company's 8-K filings with their item codes decoded, optionally filtered to specific items. 8-K item codes are how material events are actually scoped — 1.01 material agreements, 2.02 results of operations, 4.02 non-reliance on previously issued financials, 5.02 officer and director departures — and filtering by them is narrower than any form-level filter in secedgar_search_filings or secedgar_company_search, neither of which can see items. Each row carries the accession number and primary document for secedgar_get_filing; press releases usually ride as EX-99 exhibits rather than in the primary document. Two numbering regimes exist: filings from 2004-08-23 onward use the x.xx codes, earlier ones use single integers (12 was the old results-of-operations item, 9 the old Regulation FD item), and both are accepted as filters and decoded in the response. A date window reaches filings older than the recent submissions window by paging into the archive. The full filtered set is materialized as a dataframe for item-distribution analysis over time.
| Name | Type | Req | Description |
|---|---|---|---|
| company | string | yes | Company ticker symbol (e.g. "AAPL"), name (e.g. "Apple"), or CIK number (e.g. "320193"). Ticker is the exact lookup; name search matches current and former names. |
| filed_after | — | — | Only include filings filed on or after this date (YYYY-MM-DD). A date filter routes the scan into the older submissions archive pages, so it reaches 8-K filings that predate the ~1000-filing recent w… |
| filed_before | — | — | Only include filings filed on or before this date (YYYY-MM-DD). Use alone or with filed_after; together they bound the archive-page scan. |
| items | array | — | Item codes to filter to; a filing matches when it reports any of them. Omit to return every 8-K. Current-regime codes are dotted ("2.02"), pre-2004-08-23 codes are bare integers ("12"), and the two v… |
| limit | integer | — | Filings returned inline, newest first. The full filtered set is materialized as a dataframe when it exceeds this and a canvas is available. Default 20. |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | — | The limit cap applied. |
| cik | string | yes | Central Index Key of the resolved company, zero-padded to 10 digits. |
| company_name | string | yes | SEC-conformed company name. |
| dataset | object | — | Canvas dataframe holding the full filtered 8-K set. Item codes ride as a comma-separated `item_codes` column, so item-frequency-over-time queries split it (`unnest(string_split(item_codes, ','))`). A… |
| filings | array | yes | Matching filings, newest first, capped at limit. |
| history_scanned_through | string | — | Oldest filing date reached by the scan (YYYY-MM-DD). Older filings were not examined: the recent window caps at ~1000 filings, and archive pages are fetched only when a date filter or an under-filled… |
| item_distribution | object | yes | Count of the 8-K filings scanned in the date window carrying each item code, before the items filter. Empty when no 8-K filings were scanned. |
| items_filter | array | — | The item codes filtered on, echoed. Absent when no filter was applied. |
| notice | string | — | Guidance when nothing matched — distinguishes an empty date window from an items filter that excluded everything. |
| shown | number | — | Number of filings shown inline. |
| total_8k_scanned | number | yes | 8-K filings inside the date window before the items filter — compare against total_matched to see how much the items filter removed. |
| total_matched | number | yes | Filings matching every applied filter across the whole scan, which may exceed limit and the inline list. |
| truncated | boolean | — | True when the inline filings list was capped. |
No examples provided.
secedgar_get_snapshot Secedgar Get Snapshot ~371
Build a company financial profile in one call: the latest value of every supported XBRL concept, grouped by statement. Reads the filer's complete companyfacts payload once rather than one request per concept, so it replaces a run of secedgar_get_financials calls when the question is "what do this company's financials look like right now". Values use the same frame dedup and tag priority as secedgar_get_financials, so the two agree for any concept they both cover. Duration concepts (income statement, cash flow, per-share) report their latest full year and latest single quarter; balance-sheet and entity-info concepts report their latest point-in-time value, since that is the only form they are filed in. A concept the filer does not report is listed under gaps with the XBRL tags that were tried — never zero-filled or interpolated. Use secedgar_get_financials for a full time series of one concept, and secedgar_compare_companies to put several companies side by side.
| Name | Type | Req | Description |
|---|---|---|---|
| company | string | yes | Ticker symbol (e.g. "AAPL") or CIK number. Ticker is preferred. |
| period_type | string | — | Which duration periods to report per concept: the latest full year, the latest single quarter, or both (default). Balance-sheet and entity-info concepts are point-in-time and always report their late… |
| taxonomy | string | — | XBRL taxonomy to resolve concepts under. Every concept is looked up in this one taxonomy, so ifrs-full covers only the concepts with confirmed IFRS tag variants and the rest — including the dei entit… |
| Name | Type | Req | Description |
|---|---|---|---|
| caveats | array | yes | Data-completeness warnings. One entry when one or two calendar quarters are absent from every recent qualifying year, because SEC reports a filer's fiscal Q4 as the 10-K residual rather than a discre… |
| cik | string | yes | Resolved CIK, zero-padded to 10 digits. |
| company | string | yes | Resolved entity name (SEC-conformed). |
| concepts_resolved | number | yes | Concepts that produced at least one value. |
| concepts_total | number | yes | Concepts in the supported catalog that were attempted. |
| gaps | array | yes | Concepts with no value for this filer. Deliberately explicit — a missing concept is never zero-filled or interpolated. |
| lines | array | yes | Resolved concepts, ordered by statement group then concept name. |
| period_type | string | yes | Duration periods reported, echoed from input. |
| taxonomy | string | yes | Taxonomy the concepts were resolved under, echoed from input. |
No examples provided.
secedgar_search_concepts Secedgar Search Concepts ~251
Search supported XBRL financial concepts by keyword, statement group, or taxonomy. Use before secedgar_get_financials or secedgar_fetch_frames to discover the right friendly name, or pass a raw XBRL tag (e.g., "NetIncomeLoss") to reverse-lookup which friendly names map to it. Empty search with no filters returns the full catalog.
| Name | Type | Req | Description |
|---|---|---|---|
| group | string | — | Filter to a single financial statement group. income_statement covers P&L items; balance_sheet covers position items (use instant periods in secedgar_fetch_frames); cash_flow covers CF statement item… |
| search | string | — | Case-insensitive substring matched against friendly name, label, and XBRL tags. Examples: "cash" finds cash and operating_cash_flow; "earnings" finds eps_basic and eps_diluted; "NetIncomeLoss" revers… |
| taxonomy | string | — | Filter to a single XBRL taxonomy. us-gaap for US filers, ifrs-full for foreign filers, dei for entity info. |
| Name | Type | Req | Description |
|---|---|---|---|
| concepts | array | yes | Matching concepts, ordered by group then alphabetical by name. |
| notice | string | — | Guidance when no concepts matched — echoes the search term and suggests alternatives. |
| total | number | yes | Number of concepts matching the filters. |
No examples provided.
secedgar_search_filings Secedgar Search Filings ~1,029
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).
| Name | Type | Req | Description |
|---|---|---|---|
| end_date | — | — | End of date range (YYYY-MM-DD). Both start_date and end_date must be provided for date filtering. |
| forms | array | — | 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 20… |
| limit | integer | — | Results per page. Max 100. |
| offset | integer | — | 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 singl… |
| query | — | — | 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… |
| sort | string | — | 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… |
| start_date | — | — | Start of date range (YYYY-MM-DD). Both start_date and end_date must be provided for date filtering. |
| Name | Type | Req | Description |
|---|---|---|---|
| cap | number | — | The limit cap applied. |
| dataset | object | — | 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 materi… |
| effectiveQuery | string | yes | The query as executed against EDGAR (ticker/cik: tokens resolved to entity names). |
| form_distribution | object | — | Count of results by form type. Helps narrow follow-up searches. |
| notice | string | — | Guidance when no results were returned — echoes the query and suggests how to broaden. |
| results | array | yes | Matching filings. |
| scan | object | — | 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… |
| shown | number | — | Number of results shown inline. |
| total | number | yes | 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 E… |
| total_is_exact | boolean | yes | 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… |
| truncated | boolean | — | True when results were capped by limit. |
No examples provided.