browse_company
ChatGPTEntity-axis navigation primitive — the front door for company research. Returns a single response containing identity, filing inventory by form type, signal availability inline, indexed range, and ranked drill-down pointers. Use this BEFORE any deeper tool — it tells you which signals fire for the company so your next call lands on the right axis (signal-axis, source-axis, or metric-axis). When to use: - Starting a research thread on a single company - Confirming what data MetricDuck has indexed before deep-diving - Discovering which signals fire (M&A, partnerships, guidance shifts, accounting flags) without needing to fetch a filing first When NOT to use: - Cross-company screening → use screen_companies (metrics) or screen_filing_signals (signals) - Concept/theme discovery → use search_sec_filings Drill-down map (the response will recommend specific calls based on what's available): - browse_signal(signal_id, ticker=X) — descend into a specific signal's payload + see_also accessions - get_filing_index(ticker) — full signal map for the latest filing - get_xbrl_facts(ticker) — dimensional financial drill-down _(atom v1: revisit response shape after first 5 q001/q012/q003 traces)_
browse_company
ChatGPTEntity-axis navigation primitive — the front door for company research. Returns a single response containing identity, filing inventory by form type, signal availability inline, indexed range, and ranked drill-down pointers. Use this BEFORE any deeper tool — it tells you which signals fire for the company so your next call lands on the right axis (signal-axis, source-axis, or metric-axis). When to use: - Starting a research thread on a single company - Confirming what data MetricDuck has indexed before deep-diving - Discovering which signals fire (M&A, partnerships, guidance shifts, accounting flags) without needing to fetch a filing first When NOT to use: - Cross-company screening → use screen_companies (metrics) or screen_filing_signals (signals) - Concept/theme discovery → use search_sec_filings Drill-down map (the response will recommend specific calls based on what's available): - browse_signal(signal_id, ticker=X) — descend into a specific signal's payload + see_also accessions - get_filing_index(ticker) — full signal map for the latest filing - get_xbrl_facts(ticker) — dimensional financial drill-down _(atom v1: revisit response shape after first 5 q001/q012/q003 traces)_
browse_signal
ChatGPTSignal-axis navigation primitive — descend into a single signal's payload + see-also accessions. Use this AFTER browse_company shows a signal is available, OR as the front door for signal-first questions ("which companies announced M&A in the last 30 days?", "show me TSM's monthly revenue signals"). When to use: - Following up a browse_company response that surfaced a non-zero signal count - Cross-company signal discovery for a single signal type (e.g., all M&A announcements this quarter) - Time-travel research on a historical event (use since_date / until_date for anchors >1 year back) When NOT to use: - Multi-signal screening with combined filters → screen_filing_signals (supports match_mode=all/any) - Concept/theme search → search_sec_filings - Entity-axis discovery → browse_company first Discriminators: - agreement_type_filter — for ir_partnership signals only. Filters to specific deal types (m_and_a_announcement vs partnership_strategic etc.). Critical for separating M&A from partnerships in the unified ir_partnership signal store. _(atom v1: revisit response shape after first 5 q001/q012/q003 traces)_
browse_signal
ChatGPTSignal-axis navigation primitive — descend into a single signal's payload + see-also accessions. Use this AFTER browse_company shows a signal is available, OR as the front door for signal-first questions ("which companies announced M&A in the last 30 days?", "show me TSM's monthly revenue signals"). When to use: - Following up a browse_company response that surfaced a non-zero signal count - Cross-company signal discovery for a single signal type (e.g., all M&A announcements this quarter) - Time-travel research on a historical event (use since_date / until_date for anchors >1 year back) When NOT to use: - Multi-signal screening with combined filters → screen_filing_signals (supports match_mode=all/any) - Concept/theme search → search_sec_filings - Entity-axis discovery → browse_company first Discriminators: - agreement_type_filter — for ir_partnership signals only. Filters to specific deal types (m_and_a_announcement vs partnership_strategic etc.). Critical for separating M&A from partnerships in the unified ir_partnership signal store. _(atom v1: revisit response shape after first 5 q001/q012/q003 traces)_
compare_companies
ChatGPTCompare a company against peers across ~70 curated fundamental metrics (TTM), with percentile rankings and relative strengths/weaknesses. Returns a side-by-side table covering valuation (P/E, P/B, EV/EBITDA, EV/Sales, FCF yield), profitability (gross/operating/net/EBITDA margins, ROE, ROA, ROIC), leverage & liquidity (debt/equity, net debt/EBITDA, interest coverage, current ratio), efficiency (asset/inventory turnover, DSO, cash conversion cycle), and capital returns (dividend yield, dividend payout ratio, buyback yield, shareholder yield). Sector-inapplicable metrics are omitted (e.g. gross margin / FCF leverage for banks). Pass 'metrics' to focus the table on specific metric_ids. This is a TTM cross-sectional snapshot — for a single company's value in a specific fiscal year/quarter use get_metric_history. Valuation multiples here use the current/TTM price; for a multiple AS OF a specific past date, or a CUSTOM definition (e.g. lease-adjusted EV), assemble it from get_stock_price (price leg) + get_metric_history primitives. peer_mode controls peer selection: - 'sector' (default): auto-selected from same sector + similar market cap - 'tags': auto-selected by business model similarity (tag Jaccard) — better for cross-sector comparisons Override with custom_peers for specific matchups. Data sourced from SEC EDGAR, updated with each quarterly/annual filing. Use Cases: - "Compare AAPL vs MSFT" -> compare_companies("AAPL", custom_peers="MSFT") - "How does NVDA stack up in its sector?" -> compare_companies("NVDA") - "Dividend payout ratio: KO vs KDP/PEP/KHC/SJM" -> compare_companies("KO", custom_peers="KDP,PEP,KHC,SJM", metrics="dividend_payout_ratio,dividend_yield") - "COST vs WMT vs TGT" -> compare_companies("COST", custom_peers="WMT,TGT") Responses capped at ~20K chars. If truncated, use fewer custom_peers or a 'metrics' subset.
compare_companies
ChatGPTCompare a company against peers across ~70 curated fundamental metrics (TTM), with percentile rankings and relative strengths/weaknesses. Returns a side-by-side table covering valuation (P/E, P/B, EV/EBITDA, EV/Sales, FCF yield), profitability (gross/operating/net/EBITDA margins, ROE, ROA, ROIC), leverage & liquidity (debt/equity, net debt/EBITDA, interest coverage, current ratio), efficiency (asset/inventory turnover, DSO, cash conversion cycle), and capital returns (dividend yield, dividend payout ratio, buyback yield, shareholder yield). Sector-inapplicable metrics are omitted (e.g. gross margin / FCF leverage for banks). Pass 'metrics' to focus the table on specific metric_ids. This is a TTM cross-sectional snapshot — for a single company's value in a specific fiscal year/quarter use get_metric_history. Valuation multiples here use the current/TTM price; for a multiple AS OF a specific past date, or a CUSTOM definition (e.g. lease-adjusted EV), assemble it from get_stock_price (price leg) + get_metric_history primitives. peer_mode controls peer selection: - 'sector' (default): auto-selected from same sector + similar market cap - 'tags': auto-selected by business model similarity (tag Jaccard) — better for cross-sector comparisons Override with custom_peers for specific matchups. Data sourced from SEC EDGAR, updated with each quarterly/annual filing. Use Cases: - "Compare AAPL vs MSFT" -> compare_companies("AAPL", custom_peers="MSFT") - "How does NVDA stack up in its sector?" -> compare_companies("NVDA") - "Dividend payout ratio: KO vs KDP/PEP/KHC/SJM" -> compare_companies("KO", custom_peers="KDP,PEP,KHC,SJM", metrics="dividend_payout_ratio,dividend_yield") - "COST vs WMT vs TGT" -> compare_companies("COST", custom_peers="WMT,TGT") Responses capped at ~20K chars. If truncated, use fewer custom_peers or a 'metrics' subset.
compare_earnings_calls
ChatGPTHow has management's posture shifted across recent earnings calls? Cross-quarter trajectory view of transcript signals for a single ticker. This is MetricDuck's EARNINGS-CALL TRANSCRIPT tool (agents also look for this as get_earnings_call_transcript / get_earnings_transcript / get_earnings_call / search_earnings_calls). For ONE call's verbatim prepared remarks or Q&A, drill with get_filing_section(section_id="transcript_prepared_remarks" | "transcript_qa_session"); this tool gives the cross-quarter view. Different from get_filing_index (single-call triage map). This tool aligns earnings calls by event date and surfaces CROSS-QUARTER patterns: guidance deltas grouped by metric, scalar aggregates in a trajectory table, per-quarter strategic priorities, coverage gaps. For per-call depth, drill with get_filing_index. Output sections (all optional depending on coverage + dimensions): - Coverage table: event date, fiscal period, accession, coverage status per quarter — surfaces NO_TRANSCRIPT / WAITING gaps. - Aggregate trajectory: hedge density / deflection rate / Q&A hedge rate / concerns retained / forward commits , one row per scalar, one column per quarter. - Guidance trajectory: grouped by metric name with the existing delta_vs_prior flag from each call. - Themes by quarter, strategic priorities by quarter. - Macro responses by quarter (factor + stance + iter033 drift tag), competitive mentions by quarter (competitor + context_type + iter033 drift tag). - Product transitions, scale claims, revenue decompositions, KPI disclosures by quarter — qualitative arrays surfaced side-by-side; agent reads parallel arrays to detect drift / cross-quarter framing. - Drill hints pinned to accessions for per-quarter deep-dives via get_filing_section. Use Cases: - "Hedge rate trend?" -> compare_earnings_calls("RDDT", n_quarters=8, dimensions=["hedges", "qa"]) - "Guidance discipline shifting?" -> compare_earnings_calls("NVDA", dimensions=["guidance"]) - "Macro stance flip?" -> compare_earnings_calls("DOW", dimensions=["macro"]) - "Strategic priorities + KPIs drift" -> compare_earnings_calls("PG", dimensions=["priorities", "kpi", "themes"]) Sister Sources: - Single-call deep read → get_filing_section with section_id="transcript_prepared_remarks" / "transcript_qa_session" - Cross-period signal changes (vs other Sources) → screen_filing_signals with since_date/until_date - IR press releases / events → screen_filing_signals with signal_type="ir_press_release"
compare_earnings_calls
ChatGPTHow has management's posture shifted across recent earnings calls? Cross-quarter trajectory view of transcript signals for a single ticker. This is MetricDuck's EARNINGS-CALL TRANSCRIPT tool (agents also look for this as get_earnings_call_transcript / get_earnings_transcript / get_earnings_call / search_earnings_calls). For ONE call's verbatim prepared remarks or Q&A, drill with get_filing_section(section_id="transcript_prepared_remarks" | "transcript_qa_session"); this tool gives the cross-quarter view. Different from get_filing_index (single-call triage map). This tool aligns earnings calls by event date and surfaces CROSS-QUARTER patterns: guidance deltas grouped by metric, scalar aggregates in a trajectory table, per-quarter strategic priorities, coverage gaps. For per-call depth, drill with get_filing_index. Output sections (all optional depending on coverage + dimensions): - Coverage table: event date, fiscal period, accession, coverage status per quarter — surfaces NO_TRANSCRIPT / WAITING gaps. - Aggregate trajectory: hedge density / deflection rate / Q&A hedge rate / concerns retained / forward commits , one row per scalar, one column per quarter. - Guidance trajectory: grouped by metric name with the existing delta_vs_prior flag from each call. - Themes by quarter, strategic priorities by quarter. - Macro responses by quarter (factor + stance + iter033 drift tag), competitive mentions by quarter (competitor + context_type + iter033 drift tag). - Product transitions, scale claims, revenue decompositions, KPI disclosures by quarter — qualitative arrays surfaced side-by-side; agent reads parallel arrays to detect drift / cross-quarter framing. - Drill hints pinned to accessions for per-quarter deep-dives via get_filing_section. Use Cases: - "Hedge rate trend?" -> compare_earnings_calls("RDDT", n_quarters=8, dimensions=["hedges", "qa"]) - "Guidance discipline shifting?" -> compare_earnings_calls("NVDA", dimensions=["guidance"]) - "Macro stance flip?" -> compare_earnings_calls("DOW", dimensions=["macro"]) - "Strategic priorities + KPIs drift" -> compare_earnings_calls("PG", dimensions=["priorities", "kpi", "themes"]) Sister Sources: - Single-call deep read → get_filing_section with section_id="transcript_prepared_remarks" / "transcript_qa_session" - Cross-period signal changes (vs other Sources) → screen_filing_signals with since_date/until_date - IR press releases / events → screen_filing_signals with signal_type="ir_press_release"
get_company_overview
ChatGPTGet comprehensive financial overview for a company in a single call. Includes: current price, valuation (P/E, P/B, EV multiples, PEG), profitability (revenue, margins, returns), cash flow (OCF, FCF, yields), balance sheet (debt, equity, ratios), capital allocation (buybacks, shares outstanding, shareholder yield), business segment + geographic revenue mix (latest 10-K, with YoY change), latest earnings insights, filing intelligence highlights, and company flags. Depth presets: - depth="snapshot" — headline facts only (~2K chars): title, key signals, filing signals summary, flags, latest filing pointers. Best for multi-ticker sequencing or quick health checks. - depth="core" (default) — full overview with valuation, profitability, segments, cash flow, balance sheet, capital allocation, and earnings. - depth="full" — core + all tags (no 7-tag truncation), all earnings highlights/concerns (no 3-item truncation), plus 5Y historical distribution (median/p25/p75/p90) for P/E, EV/EBITDA, EV/FCF. Latest snapshot only — use get_financials for multi-year trends, get_xbrl_facts for multi-period segment history, get_filing_index for a signal map of the latest filing, compare_companies for peer benchmarking, get_stock_price for a historical/as-of-a-date close or a return between two dates (the price here is current only). Use search_companies first if unsure of the exact ticker.
get_company_overview
ChatGPTGet comprehensive financial overview for a company in a single call. Includes: current price, valuation (P/E, P/B, EV multiples, PEG), profitability (revenue, margins, returns), cash flow (OCF, FCF, yields), balance sheet (debt, equity, ratios), capital allocation (buybacks, shares outstanding, shareholder yield), business segment + geographic revenue mix (latest 10-K, with YoY change), latest earnings insights, filing intelligence highlights, and company flags. Depth presets: - depth="snapshot" — headline facts only (~2K chars): title, key signals, filing signals summary, flags, latest filing pointers. Best for multi-ticker sequencing or quick health checks. - depth="core" (default) — full overview with valuation, profitability, segments, cash flow, balance sheet, capital allocation, and earnings. - depth="full" — core + all tags (no 7-tag truncation), all earnings highlights/concerns (no 3-item truncation), plus 5Y historical distribution (median/p25/p75/p90) for P/E, EV/EBITDA, EV/FCF. Latest snapshot only — use get_financials for multi-year trends, get_xbrl_facts for multi-period segment history, get_filing_index for a signal map of the latest filing, compare_companies for peer benchmarking, get_stock_price for a historical/as-of-a-date close or a return between two dates (the price here is current only). Use search_companies first if unsure of the exact ticker.
get_filing_index
ChatGPTGet a navigable signal index for a company's latest SEC filing. Returns typed facts extracted from the filing, each with evidence and a section pointer for drill-down. This is the "table of contents" for what's in the filing — use it to decide WHAT to read. The index is agnostic to your intent — all facts presented neutrally. Pick the facts relevant to YOUR analysis, then drill with get_filing_section(). Facts from LLM analysis are labeled as such. Optional lens parameter filters to a specific analytical view: - earnings_quality: SBC, accounting flags, material weaknesses - debt_stress: debt profile, covenant compliance, near-term maturities - risk_trajectory: risk factors, escalations, key uncertainties - competitive_position: segments, customer/channel/geographic concentration - management_outlook: tone, guidance, guidance accuracy Use this as the lightweight first-look map of what's in a filing before drilling into the text with get_filing_section. IMPORTANT — indexes only the LATEST filing. For a PRIOR quarter's operating KPIs (same-store / comparable sales, ARPU, take-rate, bookings), forward GUIDANCE, or a BEAT/MISS-vs-guidance question (e.g. "FND same-store sales in Q4 2024", "did MU beat its Q3 gross-margin guidance"), do NOT page through the latest 10-Q/10-K — those metrics live in that quarter's EARNINGS-RELEASE 8-K, which MetricDuck extracts (comparable sales, KPIs, guidance, beat/miss) per quarter. Route: list_filings(ticker, form_subtype="8-K-earnings") to find that quarter's accession, then get_filing_section(ticker, "earnings_press_release" | "earnings_income_statement" | "earnings_segment_data", accession_number=<that 8-K>). The release NARRATIVE — highlights, forward GUIDANCE/outlook, CEO commentary — lives in "earnings_press_release" (target it with query="outlook"); "earnings_document_map" is now a compact TOC (headline metrics + table/section index — call get_filing_section with accession_number and NO section_id for the outline). (compare_earnings_calls(ticker) gives the cross-quarter KPI/guidance trajectory.) Use Cases: - "What should I look at in AAPL's 10-K?" -> get_filing_index("AAPL") - "Any accounting red flags for ENPH?" -> get_filing_index("ENPH", lens="earnings_quality") - "Debt situation for BA?" -> get_filing_index("BA", lens="debt_stress") - "How is TSLA management framing things?" -> get_filing_index("TSLA", lens="management_outlook") - "FND same-store sales in Q4 2024?" (prior-quarter KPI) -> list_filings("FND", form_subtype="8-K-earnings") -> get_filing_section("FND", "earnings_press_release", accession_number=<Q4 2024 8-K>) (the narrative/guidance prose; "earnings_document_map" is the compact TOC) Sister Sources (non-SEC): - Earnings call transcripts → compare_earnings_calls (cross-quarter view) - IR press releases / events → screen_filing_signals with signal_type="ir_press_release"
get_filing_index
ChatGPTGet a navigable signal index for a company's latest SEC filing. Returns typed facts extracted from the filing, each with evidence and a section pointer for drill-down. This is the "table of contents" for what's in the filing — use it to decide WHAT to read. The index is agnostic to your intent — all facts presented neutrally. Pick the facts relevant to YOUR analysis, then drill with get_filing_section(). Facts from LLM analysis are labeled as such. Optional lens parameter filters to a specific analytical view: - earnings_quality: SBC, accounting flags, material weaknesses - debt_stress: debt profile, covenant compliance, near-term maturities - risk_trajectory: risk factors, escalations, key uncertainties - competitive_position: segments, customer/channel/geographic concentration - management_outlook: tone, guidance, guidance accuracy Use this as the lightweight first-look map of what's in a filing before drilling into the text with get_filing_section. IMPORTANT — indexes only the LATEST filing. For a PRIOR quarter's operating KPIs (same-store / comparable sales, ARPU, take-rate, bookings), forward GUIDANCE, or a BEAT/MISS-vs-guidance question (e.g. "FND same-store sales in Q4 2024", "did MU beat its Q3 gross-margin guidance"), do NOT page through the latest 10-Q/10-K — those metrics live in that quarter's EARNINGS-RELEASE 8-K, which MetricDuck extracts (comparable sales, KPIs, guidance, beat/miss) per quarter. Route: list_filings(ticker, form_subtype="8-K-earnings") to find that quarter's accession, then get_filing_section(ticker, "earnings_press_release" | "earnings_income_statement" | "earnings_segment_data", accession_number=<that 8-K>). The release NARRATIVE — highlights, forward GUIDANCE/outlook, CEO commentary — lives in "earnings_press_release" (target it with query="outlook"); "earnings_document_map" is now a compact TOC (headline metrics + table/section index — call get_filing_section with accession_number and NO section_id for the outline). (compare_earnings_calls(ticker) gives the cross-quarter KPI/guidance trajectory.) Use Cases: - "What should I look at in AAPL's 10-K?" -> get_filing_index("AAPL") - "Any accounting red flags for ENPH?" -> get_filing_index("ENPH", lens="earnings_quality") - "Debt situation for BA?" -> get_filing_index("BA", lens="debt_stress") - "How is TSLA management framing things?" -> get_filing_index("TSLA", lens="management_outlook") - "FND same-store sales in Q4 2024?" (prior-quarter KPI) -> list_filings("FND", form_subtype="8-K-earnings") -> get_filing_section("FND", "earnings_press_release", accession_number=<Q4 2024 8-K>) (the narrative/guidance prose; "earnings_document_map" is the compact TOC) Sister Sources (non-SEC): - Earnings call transcripts → compare_earnings_calls (cross-quarter view) - IR press releases / events → screen_filing_signals with signal_type="ir_press_release"
get_filing_section
ChatGPTRead a specific section from an SEC Source (10-K, 10-Q, 8-K earnings, 8-K events, or DEF 14A proxy). Two modes: 1. Section mode (default) — pass section_id for full paginated text (up to 10 chunks per page). 2. Outline mode — OMIT section_id and pass accession_number to receive the filing's section TOC with ~120-char content previews per section. Use this when drilling into an unfamiliar Source (multi-exhibit 8-K, DEF 14A, FPI 6-K) to pick the right section by content rather than guessing from section_id. Use list_filings first to discover accession numbers. In section mode, omitting accession_number returns the latest filing's section. The section_id field description (below) enumerates valid IDs by category. Use Cases: - "Apple risk factors" -> get_filing_section("AAPL", "risk_factors") - "Customer concentration in NVDA" -> get_filing_section("NVDA", "risk_factors", query="customer concentration") - "Workforce / headcount / employees by geography" -> get_filing_section("MSFT", "business_description", query="human capital") (Human Capital Resources lives in Item 1, not a separate section) - "M&A terms" -> get_filing_section("CVX", "item_1_01_material_agreement", form_type="8-K") - "As of a past date / point-in-time" -> get_filing_section("MSFT", "business_description", vantage_date="2025-04-07") (serves the latest 10-K filed on/before that date — use this for time-anchored questions instead of assuming the newest filing; or pin an exact report via accession_number from list_filings) - "Multi-exhibit 8-K" -> get_filing_section(ticker, accession_number="...") (outline mode) → pick exhibit → get_filing_section(ticker, section_id="item_7_01_exhibit_99_02") Sister Sources (non-SEC): - Earnings call transcripts → compare_earnings_calls (cross-quarter view) or list_filings + section_id="transcript_prepared_remarks" - IR press releases / events → screen_filing_signals with signal_type="ir_press_release" - Forward guidance / operational KPIs / segment outlook in the earnings PRESENTATION DECK (not in the SEC filing or XBRL) → get_ir_documents(ticker, fiscal_year, fiscal_period, query=…) - Raw XBRL dimensional facts → get_xbrl_facts - A figure ABSENT from the section you expected → search_sec_filings(company=<ticker/CIK>, query="exact phrase") locates which section of which filing carries it (per-section drill-in pointers) — absence from one section does not mean the filing lacks it Delisted / acquired issuers: pass cik (10-digit, zero-padded) instead of ticker and set include_delisted=true. Examples: SAVE Spirit Airlines (cik="0001498710"), RDFN Redfin (cik="0001382821"). Responses capped at ~20K chars. Use offset for pagination or query to narrow results.
get_filing_section
ChatGPTRead a specific section from an SEC Source (10-K, 10-Q, 8-K earnings, 8-K events, or DEF 14A proxy). Two modes: 1. Section mode (default) — pass section_id for full paginated text (up to 10 chunks per page). 2. Outline mode — OMIT section_id and pass accession_number to receive the filing's section TOC with ~120-char content previews per section. Use this when drilling into an unfamiliar Source (multi-exhibit 8-K, DEF 14A, FPI 6-K) to pick the right section by content rather than guessing from section_id. Use list_filings first to discover accession numbers. In section mode, omitting accession_number returns the latest filing's section. The section_id field description (below) enumerates valid IDs by category. Use Cases: - "Apple risk factors" -> get_filing_section("AAPL", "risk_factors") - "Customer concentration in NVDA" -> get_filing_section("NVDA", "risk_factors", query="customer concentration") - "Workforce / headcount / employees by geography" -> get_filing_section("MSFT", "business_description", query="human capital") (Human Capital Resources lives in Item 1, not a separate section) - "M&A terms" -> get_filing_section("CVX", "item_1_01_material_agreement", form_type="8-K") - "As of a past date / point-in-time" -> get_filing_section("MSFT", "business_description", vantage_date="2025-04-07") (serves the latest 10-K filed on/before that date — use this for time-anchored questions instead of assuming the newest filing; or pin an exact report via accession_number from list_filings) - "Multi-exhibit 8-K" -> get_filing_section(ticker, accession_number="...") (outline mode) → pick exhibit → get_filing_section(ticker, section_id="item_7_01_exhibit_99_02") Sister Sources (non-SEC): - Earnings call transcripts → compare_earnings_calls (cross-quarter view) or list_filings + section_id="transcript_prepared_remarks" - IR press releases / events → screen_filing_signals with signal_type="ir_press_release" - Forward guidance / operational KPIs / segment outlook in the earnings PRESENTATION DECK (not in the SEC filing or XBRL) → get_ir_documents(ticker, fiscal_year, fiscal_period, query=…) - Raw XBRL dimensional facts → get_xbrl_facts - A figure ABSENT from the section you expected → search_sec_filings(company=<ticker/CIK>, query="exact phrase") locates which section of which filing carries it (per-section drill-in pointers) — absence from one section does not mean the filing lacks it Delisted / acquired issuers: pass cik (10-digit, zero-padded) instead of ticker and set include_delisted=true. Examples: SAVE Spirit Airlines (cik="0001498710"), RDFN Redfin (cik="0001382821"). Responses capped at ~20K chars. Use offset for pagination or query to narrow results.
get_financials
ChatGPTGet multi-period financial statements: income statement, balance sheet, and cash flow in one call. Returns quantitative historical data with key metrics and trends. Default: all 3 statements, quarterly, 2 years. For qualitative analysis (risks, accounting quality, management tone), use get_filing_index (signal map) then get_filing_section to read the text. Use Cases: - "Show me AAPL's financials" -> all statements - "MSFT revenue trend 5 years" -> period="annual", years=5 - "Is Tesla's debt increasing?" -> statements=["balance"] - "As of a past date / point-in-time" -> get_financials("MSFT", vantage_date="2024-04-30") (values as known from filings published on/before that date) Each period cites its original disclosing SEC filing (accession + filed date in a footnote; resolvable mdck + EDGAR index handles in the <raw_data> block), so every figure is traceable to its source filing. Responses capped at ~20K chars. If truncated, whole statements are dropped (not sliced) with a note — request fewer statements or reduce years.
get_financials
ChatGPTGet multi-period financial statements: income statement, balance sheet, and cash flow in one call. Returns quantitative historical data with key metrics and trends. Default: all 3 statements, quarterly, 2 years. For qualitative analysis (risks, accounting quality, management tone), use get_filing_index (signal map) then get_filing_section to read the text. Use Cases: - "Show me AAPL's financials" -> all statements - "MSFT revenue trend 5 years" -> period="annual", years=5 - "Is Tesla's debt increasing?" -> statements=["balance"] - "As of a past date / point-in-time" -> get_financials("MSFT", vantage_date="2024-04-30") (values as known from filings published on/before that date) Each period cites its original disclosing SEC filing (accession + filed date in a footnote; resolvable mdck + EDGAR index handles in the <raw_data> block), so every figure is traceable to its source filing. Responses capped at ~20K chars. If truncated, whole statements are dropped (not sliced) with a note — request fewer statements or reduce years.
get_guidance_vs_actual
ChatGPTDid management deliver what they guided? Joins forward guidance from earnings-call transcripts to reported actuals from 10-K/10-Q + 8-K earnings for the same ticker + fiscal period. Returns both sides verbatim with quotes and locators — agents synthesize the delivered-vs-guided narrative. This is a cross-feed temporal join; no single feed answers this question. Use Cases: - "Did NVDA deliver on Q2 FY2026 guidance?" -> get_guidance_vs_actual("NVDA", fiscal_period="Q2 FY2026") - "How disciplined has MSFT been against its own guidance?" -> get_guidance_vs_actual("MSFT") then compare across periods - "Latest period's guidance-vs-actual" -> get_guidance_vs_actual("TSLA") (period defaults to most recent) Output: - Guidance: forward items targeting the period — from earnings-call transcripts AND 8-K earnings releases (metric, value/range, period, source). - Actuals: SEC 10-Q/K metric + narrative signals (revenue trend, margin, beat/miss, guidance revised) for that period, plus 8-K earnings signals when present. - Beat/miss: best-effort verdict (beat/miss/inline) where a USD guidance range + reported actual align for the same metric; not_comparable (with reason) otherwise — e.g. %-form guidance needs a base. - Notes: counts of calls/filings covered + comparison verdicts so agents know coverage depth before interpreting.
get_guidance_vs_actual
ChatGPTDid management deliver what they guided? Joins forward guidance from earnings-call transcripts to reported actuals from 10-K/10-Q + 8-K earnings for the same ticker + fiscal period. Returns both sides verbatim with quotes and locators — agents synthesize the delivered-vs-guided narrative. This is a cross-feed temporal join; no single feed answers this question. Use Cases: - "Did NVDA deliver on Q2 FY2026 guidance?" -> get_guidance_vs_actual("NVDA", fiscal_period="Q2 FY2026") - "How disciplined has MSFT been against its own guidance?" -> get_guidance_vs_actual("MSFT") then compare across periods - "Latest period's guidance-vs-actual" -> get_guidance_vs_actual("TSLA") (period defaults to most recent) Output: - Guidance: forward items targeting the period — from earnings-call transcripts AND 8-K earnings releases (metric, value/range, period, source). - Actuals: SEC 10-Q/K metric + narrative signals (revenue trend, margin, beat/miss, guidance revised) for that period, plus 8-K earnings signals when present. - Beat/miss: best-effort verdict (beat/miss/inline) where a USD guidance range + reported actual align for the same metric; not_comparable (with reason) otherwise — e.g. %-form guidance needs a base. - Notes: counts of calls/filings covered + comparison verdicts so agents know coverage depth before interpreting.
get_ir_documents
ChatGPTRetrieve IR earnings-PRESENTATION-DECK text — forward guidance, operational KPIs, and segment outlook that are ONLY in the company's investor-relations slide deck and NOT in the SEC 8-K/10-Q release text or XBRL. Reach for this when the answer is a forward-looking guidance range or an operational KPI that the structured tools miss: - get_metric_history / get_xbrl_facts return no series for a KPI or guidance figure - get_filing_section finds the 8-K earnings release but it lacks the guidance/KPI (decks are a separate exhibit/source) What lives here (not in XBRL/filing text): production or revenue guidance ranges, segment/division outlook, operational KPIs presented as slide charts (e.g., berth capacity %, Mboed production guidance, adjusted-EBITDA guidance). Use Cases: - "OXY Q3 2024 production guidance" -> get_ir_documents("OXY", fiscal_year=2024, fiscal_period="Q3", query="production guidance") - "NCLH berth capacity outlook" -> get_ir_documents("NCLH", fiscal_year=2021, fiscal_period="Q3", query="berth") - "KNTK adjusted EBITDA guidance range" -> get_ir_documents("KNTK", fiscal_year=2023, fiscal_period="Q3", query="EBITDA") Each deck returns its title, original IR url, a stable MetricDuck-hosted gcs_uri, and the matching slide text cited by page. Pass a query to land on the exact page; omit it for a bounded prefix of the latest deck. Resolve by ticker or cik; narrow with fiscal_year/fiscal_period.
get_ir_documents
ChatGPTRetrieve IR earnings-PRESENTATION-DECK text — forward guidance, operational KPIs, and segment outlook that are ONLY in the company's investor-relations slide deck and NOT in the SEC 8-K/10-Q release text or XBRL. Reach for this when the answer is a forward-looking guidance range or an operational KPI that the structured tools miss: - get_metric_history / get_xbrl_facts return no series for a KPI or guidance figure - get_filing_section finds the 8-K earnings release but it lacks the guidance/KPI (decks are a separate exhibit/source) What lives here (not in XBRL/filing text): production or revenue guidance ranges, segment/division outlook, operational KPIs presented as slide charts (e.g., berth capacity %, Mboed production guidance, adjusted-EBITDA guidance). Use Cases: - "OXY Q3 2024 production guidance" -> get_ir_documents("OXY", fiscal_year=2024, fiscal_period="Q3", query="production guidance") - "NCLH berth capacity outlook" -> get_ir_documents("NCLH", fiscal_year=2021, fiscal_period="Q3", query="berth") - "KNTK adjusted EBITDA guidance range" -> get_ir_documents("KNTK", fiscal_year=2023, fiscal_period="Q3", query="EBITDA") Each deck returns its title, original IR url, a stable MetricDuck-hosted gcs_uri, and the matching slide text cited by page. Pass a query to land on the exact page; omit it for a bounded prefix of the latest deck. Resolve by ticker or cik; narrow with fiscal_year/fiscal_period.
get_metric_history
ChatGPTTime series for one metric across fiscal periods. Returns newest-first rows with fiscal_year + fiscal_period labels — AUTHORITATIVE for period-specific questions ("Q2 FY2025?"). The period_end calendar date is NOT the fiscal label, especially for non-December FYE companies (AAPL FY ends Sep; CRM FY ends Jan; ORCL FY ends May). Each row with an SEC accession is cited back to the source filing via the MetricDuck viewer. Use Cases: - "What was AAPL's Q2 FY2025 gross margin?" -> get_metric_history("AAPL", "gross_margin") - "ROE last 5 years for MSFT" -> get_metric_history("MSFT", "roe", period_type="FY", window=5) - "NVDA TTM revenue trend" -> get_metric_history("NVDA", "revenues", period_type="TTM") - "ABNB gross booking value trend" -> get_metric_history("ABNB", "gross_booking_value") (operating KPI; quarterly or FY) - "Net interest margin for a bank" -> get_metric_history("<bank>", "net_interest_margin") - "As of a past date / point-in-time" -> get_metric_history("MSFT", "revenues", vantage_date="2024-04-30") (series as known from filings published on/before that date) Common XBRL metric_ids: gross_margin, oper_margin, net_margin, ebitda_margin, roe, roa, roic, pe_ratio, ev_ebitda, ev_sales, fcf_yield, pb_ratio, current_ratio, debt_to_equity, interest_coverage, revenues, net_income, ebitda, fcf, net_cf_ops, capex, dividends_per_share, dividends_paid, dividend_yield, dividend_payout_ratio, fcf_payout_ratio, dividend_coverage. Also serves NON-XBRL operating KPIs (LLM-extracted from 10-K/10-Q MD&A + earnings releases), available QUARTERLY and ANNUAL (FY) — coverage varies by KPI. This set spans banking (net_interest_margin, common_equity_tier_1_capital_ratio, return_on_average_assets/equity), insurance (combined_ratio), SaaS (arr, remaining_performance_obligations), retail/marketplace (store_count, same_store_sales, gross_booking_value, take_rate), lodging/REIT (revpar, occupancy_rate, average_daily_rate), airlines (passenger_load_factor, prasm, casm), energy (oil_production), workforce (headcount), and more — full data-derived (non-exhaustive) list: net_interest_margin, return_on_average_assets, return_on_average_equity, nonperforming_assets_to_total_assets, nonperforming_loans_to_total_loans, allowance_for_credit_losses_to_total_loans, loan_to_deposit_ratio, net_charge_offs_to_average_loans, common_equity_tier_1_capital_ratio, tier_1_leverage_ratio, tier_1_capital_ratio, total_capital_ratio, return_on_average_tangible_common_equity, net_leverage_ratio, nonperforming_loan_ratio, liquidity_coverage_ratio, net_stable_funding_ratio, combined_ratio, loss_ratio, expense_ratio, policies_in_force, arr, recurring_revenue, remaining_performance_obligations, organic_revenue_growth, cancellation_rate, subscribers, arpu, store_count, same_store_sales, average_order_value, active_customers, customers, active_buyers, orders, bookings, backlog, gross_booking_value, nights_and_seats_booked, monthly_active_platform_consumers, trips, take_rate, occupancy_rate, average_daily_rate, revpar, weighted_average_remaining_lease_term, assets_under_management, passenger_load_factor, available_seat_miles, revenue_passenger_miles, passenger_mile_yield, prasm, trasm, casm, casm_ex, oil_production, natural_gas_production, book_to_bill_ratio, wafer_shipments, production_capacity, headcount, full_time_equivalent_employees, cash_runway. If a KPI you need isn't listed, just try its canonical name; only if it's truly absent does it live solely in filing text — then reach it via get_filing_section(ticker, "mda_results_operations", query=…) or compare_earnings_calls(ticker). Metric_id matching is strict (lowercase, exact spelling). Financial-sector tickers (banks, insurers) often NULL on COGS-based metrics (gross_margin, gross_profit) — use sector-appropriate alternatives (e.g. net_interest_margin, combined_ratio) where available. Price-derived multiples here (pe_ratio, ev_ebitda, pb_ratio…) use the PERIOD-END close; for a price on a SPECIFIC date use get_stock_price. To assemble a CUSTOM multiple (e.g. EV including operating leases) combine get_stock_price (pri…
get_metric_history
ChatGPTTime series for one metric across fiscal periods. Returns newest-first rows with fiscal_year + fiscal_period labels — AUTHORITATIVE for period-specific questions ("Q2 FY2025?"). The period_end calendar date is NOT the fiscal label, especially for non-December FYE companies (AAPL FY ends Sep; CRM FY ends Jan; ORCL FY ends May). Each row with an SEC accession is cited back to the source filing via the MetricDuck viewer. Use Cases: - "What was AAPL's Q2 FY2025 gross margin?" -> get_metric_history("AAPL", "gross_margin") - "ROE last 5 years for MSFT" -> get_metric_history("MSFT", "roe", period_type="FY", window=5) - "NVDA TTM revenue trend" -> get_metric_history("NVDA", "revenues", period_type="TTM") - "ABNB gross booking value trend" -> get_metric_history("ABNB", "gross_booking_value") (operating KPI; quarterly or FY) - "Net interest margin for a bank" -> get_metric_history("<bank>", "net_interest_margin") - "As of a past date / point-in-time" -> get_metric_history("MSFT", "revenues", vantage_date="2024-04-30") (series as known from filings published on/before that date) Common XBRL metric_ids: gross_margin, oper_margin, net_margin, ebitda_margin, roe, roa, roic, pe_ratio, ev_ebitda, ev_sales, fcf_yield, pb_ratio, current_ratio, debt_to_equity, interest_coverage, revenues, net_income, ebitda, fcf, net_cf_ops, capex, dividends_per_share, dividends_paid, dividend_yield, dividend_payout_ratio, fcf_payout_ratio, dividend_coverage. Also serves NON-XBRL operating KPIs (LLM-extracted from 10-K/10-Q MD&A + earnings releases), available QUARTERLY and ANNUAL (FY) — coverage varies by KPI. This set spans banking (net_interest_margin, common_equity_tier_1_capital_ratio, return_on_average_assets/equity), insurance (combined_ratio), SaaS (arr, remaining_performance_obligations), retail/marketplace (store_count, same_store_sales, gross_booking_value, take_rate), lodging/REIT (revpar, occupancy_rate, average_daily_rate), airlines (passenger_load_factor, prasm, casm), energy (oil_production), workforce (headcount), and more — full data-derived (non-exhaustive) list: net_interest_margin, return_on_average_assets, return_on_average_equity, nonperforming_assets_to_total_assets, nonperforming_loans_to_total_loans, allowance_for_credit_losses_to_total_loans, loan_to_deposit_ratio, net_charge_offs_to_average_loans, common_equity_tier_1_capital_ratio, tier_1_leverage_ratio, tier_1_capital_ratio, total_capital_ratio, return_on_average_tangible_common_equity, net_leverage_ratio, nonperforming_loan_ratio, liquidity_coverage_ratio, net_stable_funding_ratio, combined_ratio, loss_ratio, expense_ratio, policies_in_force, arr, recurring_revenue, remaining_performance_obligations, organic_revenue_growth, cancellation_rate, subscribers, arpu, store_count, same_store_sales, average_order_value, active_customers, customers, active_buyers, orders, bookings, backlog, gross_booking_value, nights_and_seats_booked, monthly_active_platform_consumers, trips, take_rate, occupancy_rate, average_daily_rate, revpar, weighted_average_remaining_lease_term, assets_under_management, passenger_load_factor, available_seat_miles, revenue_passenger_miles, passenger_mile_yield, prasm, trasm, casm, casm_ex, oil_production, natural_gas_production, book_to_bill_ratio, wafer_shipments, production_capacity, headcount, full_time_equivalent_employees, cash_runway. If a KPI you need isn't listed, just try its canonical name; only if it's truly absent does it live solely in filing text — then reach it via get_filing_section(ticker, "mda_results_operations", query=…) or compare_earnings_calls(ticker). Metric_id matching is strict (lowercase, exact spelling). Financial-sector tickers (banks, insurers) often NULL on COGS-based metrics (gross_margin, gross_profit) — use sector-appropriate alternatives (e.g. net_interest_margin, combined_ratio) where available. Price-derived multiples here (pe_ratio, ev_ebitda, pb_ratio…) use the PERIOD-END close; for a price on a SPECIFIC date use get_stock_price. To assemble a CUSTOM multiple (e.g. EV including operating leases) combine get_stock_price (pri…
get_stock_price
ChatGPTDaily end-of-day stock prices (open/high/low, close, split- & dividend-adjusted adj_close, volume) for US exchange-listed companies. Sourced from a market-data feed, not SEC filings. Markets are open only on business days, so rows exist ONLY for trading days — the data IS the trading calendar: - Price ON OR AFTER a date (e.g. an announcement landing on a weekend): pass start_date=<date>; the FIRST row is that date or the next open day. - Price ON OR BEFORE a date: pass end_date=<date>; the LAST row is that date or the prior open day. - A single specific date: pass start_date=<date> (omit end_date) — returns a short forward window whose first row is your on/after price. Use Cases: - "AAPL close on 2025-07-28" -> get_stock_price("AAPL", start_date="2025-07-28") (first row = that day or next open day) - "DKNG total return 2025-01-02 → 2026-02-27" -> TWO calls: get_stock_price("DKNG", start_date="2025-01-02") and get_stock_price("DKNG", end_date="2026-02-27"); take each first/last close and compute the return (cheaper than one 14-month window) - "SUI 1/14/30 calendar days after an 8-K date" -> get_stock_price("SUI", start_date="<announce>", end_date="<announce + ~32d>"), then pick the first row on/after announce, +1, +14, +30 - "Latest price" -> get_stock_price("AAPL") When the window spans ≥2 trading days, the response also reports the first/last close and the period return on BOTH close (literal point-to-point) and adj_close (split/dividend-adjusted — the true economic return; the two diverge across a split or dividend). Each response also includes the latest REPORTED period-end shares outstanding on/before your end date (period-end balance-sheet count; dei cover where absent) plus the implied market cap at the latest close — use these for market-cap / EV / P/B math instead of deriving share counts from NI/EPS (that yields weighted-average shares, a different basis). Coverage: ~8,400 US common-equity tickers, end-of-day only (no intraday/real-time, no options/FX). Recent history is dense; deep pre-2014 history may be sparse. For period-end valuation multiples (P/E, EV/EBITDA, P/B) use get_metric_history; to assemble a CUSTOM multiple (e.g. lease-adjusted EV) combine this price with get_metric_history("ticker","oper_lease_liabs" / "ttl_debt" / "cash_st_invs" / "ttl_equity" / "shares_basic").
get_stock_price
ChatGPTDaily end-of-day stock prices (open/high/low, close, split- & dividend-adjusted adj_close, volume) for US exchange-listed companies. Sourced from a market-data feed, not SEC filings. Markets are open only on business days, so rows exist ONLY for trading days — the data IS the trading calendar: - Price ON OR AFTER a date (e.g. an announcement landing on a weekend): pass start_date=<date>; the FIRST row is that date or the next open day. - Price ON OR BEFORE a date: pass end_date=<date>; the LAST row is that date or the prior open day. - A single specific date: pass start_date=<date> (omit end_date) — returns a short forward window whose first row is your on/after price. Use Cases: - "AAPL close on 2025-07-28" -> get_stock_price("AAPL", start_date="2025-07-28") (first row = that day or next open day) - "DKNG total return 2025-01-02 → 2026-02-27" -> TWO calls: get_stock_price("DKNG", start_date="2025-01-02") and get_stock_price("DKNG", end_date="2026-02-27"); take each first/last close and compute the return (cheaper than one 14-month window) - "SUI 1/14/30 calendar days after an 8-K date" -> get_stock_price("SUI", start_date="<announce>", end_date="<announce + ~32d>"), then pick the first row on/after announce, +1, +14, +30 - "Latest price" -> get_stock_price("AAPL") When the window spans ≥2 trading days, the response also reports the first/last close and the period return on BOTH close (literal point-to-point) and adj_close (split/dividend-adjusted — the true economic return; the two diverge across a split or dividend). Each response also includes the latest REPORTED period-end shares outstanding on/before your end date (period-end balance-sheet count; dei cover where absent) plus the implied market cap at the latest close — use these for market-cap / EV / P/B math instead of deriving share counts from NI/EPS (that yields weighted-average shares, a different basis). Coverage: ~8,400 US common-equity tickers, end-of-day only (no intraday/real-time, no options/FX). Recent history is dense; deep pre-2014 history may be sparse. For period-end valuation multiples (P/E, EV/EBITDA, P/B) use get_metric_history; to assemble a CUSTOM multiple (e.g. lease-adjusted EV) combine this price with get_metric_history("ticker","oper_lease_liabs" / "ttl_debt" / "cash_st_invs" / "ttl_equity" / "shares_basic").
get_xbrl_facts
ChatGPTRaw XBRL facts from SEC filings — use only when get_financials cannot answer the question. Scope: escape-hatch for dimensional / industry-specific / as-filed numbers. ~3,000 facts per filing with dimensional breakdowns (segment, geography, product line). Search by human-readable label (not XBRL concept names). First try `get_financials` — it covers the 323+ standard metrics (revenue, margins, EPS, FCF, ROIC, leverage, etc.) across TTM/FY/Q + YOY/CAGR dimensions for all 5,500+ companies. It is faster, cheaper, and more portable across tickers. Use `get_xbrl_facts` only when: - You need a segment / geographic / product-line breakdown that get_financials aggregates away — available only for concepts the filer XBRL-tags dimensionally (usually revenue + segment profit / Adjusted EBITDA). Segment-level costs / operating expenses are frequently NOT tagged; those live only in the MD&A — read them with get_filing_section(section_id="mda_results_operations"). - You need revenue concentration / share by customer, channel, distributor, geography, or product — the as-filed ConcentrationRiskPercentage facts (e.g. "what % of revenue from channel partners / a distributor / a region"). Deterministic and present even when the filing prose only describes the relationship qualitatively. Search concentration. - You need an industry-specific metric not in the standard catalog (e.g., medical cost ratio for a health insurer, reserve replacement ratio for an oil & gas name) - You need to verify a specific number from filing text against the as-filed XBRL value - You need a historical fiscal year not returned by get_financials (pass fiscal_year) - You need a cash-flow / income line across periods to de-cumulate a standalone quarter — the as-filed cash-flow statement is cumulative YTD (a Q2 10-Q reports the 6-month figure). Set period_history: true to get the concept's full series (quarter / 6-mo / 9-mo / FY) across filings in one call, then subtract the prior YTD sharing the same start date (Q2 standalone = 6-month YTD − Q1 3-month). Sign: values are the as-filed positive MAGNITUDES. Facts the filing presents NEGATIVE — a cash OUTFLOW (PaymentsTo…, IncreaseDecreaseIn…, capex, inventory build, "Other, net") or a contra-asset (accumulated depreciation) — are flagged (filed −) in the table and carry is_negated: true in the <raw_data> envelope; apply that sign when interpreting direction. For ready-signed cash-flow / income lines, get_financials applies statement signs for you. Exactness: the markdown rounds for readability; the <raw_data> block carries each fact's EXACT value + decimals (the as-filed precision floor: −3 = thousands, −6 = millions) + a stable mdck handle + two ways to see the fact in its filing: handle.edgar (SEC EDGAR — the independent primary source) and handle.viewer (the MetricDuck viewer, which opens the filing with the fact highlighted; auto-falls back to EDGAR with a plain scroll when the filing isn't cached in MD). Share counts (pick the right basis): the dei EntityCommonStockSharesOutstanding (shown as "cover-page / current") is the most-current shares outstanding, as of the filing/cover date — use it for market cap, equity value, and "shares outstanding from the cover page". The us-gaap CommonStockSharesOutstanding is the balance-sheet period-end count (an earlier date); WeightedAverageNumberOf…SharesOutstanding is the per-period average for EPS. These can differ a few % for buyback-heavy / recently-issuing filers — match the as-of date in the Period column to your task. Searching: comma-separated terms OR-match (e.g., revenue,product). Responses are capped at ~20K chars — over the cap, whole facts are paged out of BOTH the table and the <raw_data> block together (the JSON stays valid) with an explicit facts_omitted count; narrow the search or lower limit for the rest.
get_xbrl_facts
ChatGPTRaw XBRL facts from SEC filings — use only when get_financials cannot answer the question. Scope: escape-hatch for dimensional / industry-specific / as-filed numbers. ~3,000 facts per filing with dimensional breakdowns (segment, geography, product line). Search by human-readable label (not XBRL concept names). First try `get_financials` — it covers the 323+ standard metrics (revenue, margins, EPS, FCF, ROIC, leverage, etc.) across TTM/FY/Q + YOY/CAGR dimensions for all 5,500+ companies. It is faster, cheaper, and more portable across tickers. Use `get_xbrl_facts` only when: - You need a segment / geographic / product-line breakdown that get_financials aggregates away — available only for concepts the filer XBRL-tags dimensionally (usually revenue + segment profit / Adjusted EBITDA). Segment-level costs / operating expenses are frequently NOT tagged; those live only in the MD&A — read them with get_filing_section(section_id="mda_results_operations"). - You need revenue concentration / share by customer, channel, distributor, geography, or product — the as-filed ConcentrationRiskPercentage facts (e.g. "what % of revenue from channel partners / a distributor / a region"). Deterministic and present even when the filing prose only describes the relationship qualitatively. Search concentration. - You need an industry-specific metric not in the standard catalog (e.g., medical cost ratio for a health insurer, reserve replacement ratio for an oil & gas name) - You need to verify a specific number from filing text against the as-filed XBRL value - You need a historical fiscal year not returned by get_financials (pass fiscal_year) - You need a cash-flow / income line across periods to de-cumulate a standalone quarter — the as-filed cash-flow statement is cumulative YTD (a Q2 10-Q reports the 6-month figure). Set period_history: true to get the concept's full series (quarter / 6-mo / 9-mo / FY) across filings in one call, then subtract the prior YTD sharing the same start date (Q2 standalone = 6-month YTD − Q1 3-month). Sign: values are the as-filed positive MAGNITUDES. Facts the filing presents NEGATIVE — a cash OUTFLOW (PaymentsTo…, IncreaseDecreaseIn…, capex, inventory build, "Other, net") or a contra-asset (accumulated depreciation) — are flagged (filed −) in the table and carry is_negated: true in the <raw_data> envelope; apply that sign when interpreting direction. For ready-signed cash-flow / income lines, get_financials applies statement signs for you. Exactness: the markdown rounds for readability; the <raw_data> block carries each fact's EXACT value + decimals (the as-filed precision floor: −3 = thousands, −6 = millions) + a stable mdck handle + two ways to see the fact in its filing: handle.edgar (SEC EDGAR — the independent primary source) and handle.viewer (the MetricDuck viewer, which opens the filing with the fact highlighted; auto-falls back to EDGAR with a plain scroll when the filing isn't cached in MD). Share counts (pick the right basis): the dei EntityCommonStockSharesOutstanding (shown as "cover-page / current") is the most-current shares outstanding, as of the filing/cover date — use it for market cap, equity value, and "shares outstanding from the cover page". The us-gaap CommonStockSharesOutstanding is the balance-sheet period-end count (an earlier date); WeightedAverageNumberOf…SharesOutstanding is the per-period average for EPS. These can differ a few % for buyback-heavy / recently-issuing filers — match the as-of date in the Period column to your task. Searching: comma-separated terms OR-match (e.g., revenue,product). Responses are capped at ~20K chars — over the cap, whole facts are paged out of BOTH the table and the <raw_data> block together (the JSON stays valid) with an explicit facts_omitted count; narrow the search or lower limit for the rest.
list_filings
ChatGPTBrowse Sources inventory and the section catalog for a single company. Covers SEC filings: 10-K, 10-Q, 8-K, DEF 14A, plus 20-F / 40-F / 6-K for foreign private issuers. Scope: filings-metadata utility. Returns filing list (form type, dates, accession numbers) plus per-section details (word count, chunk count, tables) for 10-K/10-Q/DEF 14A; 8-K returns filing metadata only. Default: last 2 years. Use fiscal_year + fiscal_period to pin a single historical filing in one call. For signal triage and "what matters" in a filing, use `get_filing_index` instead. Use list_filings only when: - You need an accession_number for a specific historical filing (before get_xbrl_facts or get_filing_section) - You need to pin a specific fiscal year/period (e.g., FY2020 Q3) - You need the full section inventory with sizes to plan pagination - You need to confirm whether a specific filing exists Sister Sources (non-SEC): - Earnings call transcripts → compare_earnings_calls (cross-quarter view) - IR press releases / events → screen_filing_signals with signal_type="ir_press_release" Delisted / acquired issuers: pass cik (10-digit, zero-padded) instead of (or alongside) ticker and set include_delisted=true. SEC's ticker registry excludes delisted issuers, so ticker-only calls 404 even when filings exist in MetricDuck. Examples: SAVE Spirit Airlines (cik="0001498710"), RDFN Redfin (cik="0001382821"), ATVI Activision (cik="0000718877"). Data horizon: 2013+. Responses capped at ~20K chars; narrow via form_type, fiscal_year, or reduce years.
list_filings
ChatGPTBrowse Sources inventory and the section catalog for a single company. Covers SEC filings: 10-K, 10-Q, 8-K, DEF 14A, plus 20-F / 40-F / 6-K for foreign private issuers. Scope: filings-metadata utility. Returns filing list (form type, dates, accession numbers) plus per-section details (word count, chunk count, tables) for 10-K/10-Q/DEF 14A; 8-K returns filing metadata only. Default: last 2 years. Use fiscal_year + fiscal_period to pin a single historical filing in one call. For signal triage and "what matters" in a filing, use `get_filing_index` instead. Use list_filings only when: - You need an accession_number for a specific historical filing (before get_xbrl_facts or get_filing_section) - You need to pin a specific fiscal year/period (e.g., FY2020 Q3) - You need the full section inventory with sizes to plan pagination - You need to confirm whether a specific filing exists Sister Sources (non-SEC): - Earnings call transcripts → compare_earnings_calls (cross-quarter view) - IR press releases / events → screen_filing_signals with signal_type="ir_press_release" Delisted / acquired issuers: pass cik (10-digit, zero-padded) instead of (or alongside) ticker and set include_delisted=true. SEC's ticker registry excludes delisted issuers, so ticker-only calls 404 even when filings exist in MetricDuck. Examples: SAVE Spirit Airlines (cik="0001498710"), RDFN Redfin (cik="0001382821"), ATVI Activision (cik="0000718877"). Data horizon: 2013+. Responses capped at ~20K chars; narrow via form_type, fiscal_year, or reduce years.
list_recent_filings
ChatGPTDiscover recent SEC filings landed since a watermark — single call, universe-wide, optional portfolio filter. Use this when: building event-driven agent workflows (Routines, alerts, daily portfolio checks). The right primitive when the question is "what new filings have landed?" rather than "what filings does this one company have?". Returns: flat list of {ticker, accession, filed_at, form_type, form_subtype}, newest first. form_subtype is computed from the filing's section inventory: '8-K-earnings' (has any earnings_ section), '8-K-transcript' (has any transcript_ section), '8-K-event' (has any item_ section), '8-K-other' (8-K with none of the above), or null for non-8-K forms. Cost: ~one call regardless of portfolio size — vs O(N) calls if you fan out per-ticker via `list_filings`. Composition: for each row in the result, drill in via `get_filing_index(ticker, accession_number=...)` to get the signal map of that specific filing, then `get_filing_section` for narrative content. Use `list_filings` instead when:* you need ALL filings for ONE company (paginate by year). list_recent_filings is the cross-company / event-discovery primitive; list_filings is the per-company catalog.
list_recent_filings
ChatGPTDiscover recent SEC filings landed since a watermark — single call, universe-wide, optional portfolio filter. Use this when: building event-driven agent workflows (Routines, alerts, daily portfolio checks). The right primitive when the question is "what new filings have landed?" rather than "what filings does this one company have?". Returns: flat list of {ticker, accession, filed_at, form_type, form_subtype}, newest first. form_subtype is computed from the filing's section inventory: '8-K-earnings' (has any earnings_ section), '8-K-transcript' (has any transcript_ section), '8-K-event' (has any item_ section), '8-K-other' (8-K with none of the above), or null for non-8-K forms. Cost: ~one call regardless of portfolio size — vs O(N) calls if you fan out per-ticker via `list_filings`. Composition: for each row in the result, drill in via `get_filing_index(ticker, accession_number=...)` to get the signal map of that specific filing, then `get_filing_section` for narrative content. Use `list_filings` instead when:* you need ALL filings for ONE company (paginate by year). list_recent_filings is the cross-company / event-discovery primitive; list_filings is the per-company catalog.
screen_companies
ChatGPTScreen 5,500+ US companies by financial metrics. Find stocks matching quantitative criteria. Metric IDs (canonical names from filing_metrics): - Valuation: pe_ratio, pb_ratio, ev_ebitda, fcf_yield, market_cap, ev - Profitability: gross_margin, oper_margin, net_margin, ebitda_margin, roe, roa, roic - Cash Flow: fcf, net_cf_ops, cash_conversion - Balance Sheet: debt_to_equity, current_ratio, ttl_debt, ttl_equity, cash_st_invs - Size: revenues, net_income, ebitda, gross_profit Growth screening: use period_type on any base metric: - Revenue growth YoY: metric_id="revenues", period_type="ttm.yoy" - 3-year revenue CAGR: metric_id="revenues", period_type="ttm.cagr3" - Earnings growth: metric_id="net_income", period_type="ttm.yoy" Period types: ttm (default), q, fy, ss (balance sheet snapshot), ttm.yoy, ttm.cagr3, ttm.cagr5 Sectors: TECH, FIN, HEALTH, CONS_STAPLES, CONS_DISC, IND, ENERGY, UTIL, RE, MAT, COMM Operators: gt (>), gte (>=), lt (<), lte (<=), eq (=), between Tag filtering (required_tags / excluded_tags): filter by business model classification. Requires companies to be classified — unclassified companies are excluded from tag-filtered results. Note: For P/E screening, negative P/E means losses. Add a gt(0) filter to exclude loss-making companies. Note: ROIC values are decimals (0.15 = 15%). Margins and returns are also decimals. Use Cases: - "High ROIC tech stocks" -> filters=[{metric_id:"roic", operator:"gt", value:0.15}], sectors=["TECH"] - "Undervalued profitable industrials" -> filters=[{metric_id:"pe_ratio", operator:"lt", value:15}, {metric_id:"pe_ratio", operator:"gt", value:0}], sectors=["IND"] - "Revenue growing >10% YoY" -> filters=[{metric_id:"revenues", operator:"gt", value:0.10, period_type:"ttm.yoy"}] - "AI infrastructure companies not exposed to China supply chain" -> required_tags=["ai_ml_infrastructure"], excluded_tags=["china_supply_chain_heavy"] - "Profitable subscription businesses" -> filters=[{metric_id:"net_margin", operator:"gt", value:0.10}], required_tags=["subscription_recurring"] - "Quality companies with a material charge" -> filters=[{metric_id:"roic", operator:"gt", value:0.15}, {metric_id:"market_cap", operator:"gt", value:10000000000}], signals=["has_material_charge"] When signals are provided, results include matched_signals and signal_details fields. Signals filter AFTER metric screening — only companies passing metric filters are checked for signals. Responses capped at ~20K chars. If truncated, reduce limit or add stricter filters.
screen_companies
ChatGPTScreen 5,500+ US companies by financial metrics. Find stocks matching quantitative criteria. Metric IDs (canonical names from filing_metrics): - Valuation: pe_ratio, pb_ratio, ev_ebitda, fcf_yield, market_cap, ev - Profitability: gross_margin, oper_margin, net_margin, ebitda_margin, roe, roa, roic - Cash Flow: fcf, net_cf_ops, cash_conversion - Balance Sheet: debt_to_equity, current_ratio, ttl_debt, ttl_equity, cash_st_invs - Size: revenues, net_income, ebitda, gross_profit Growth screening: use period_type on any base metric: - Revenue growth YoY: metric_id="revenues", period_type="ttm.yoy" - 3-year revenue CAGR: metric_id="revenues", period_type="ttm.cagr3" - Earnings growth: metric_id="net_income", period_type="ttm.yoy" Period types: ttm (default), q, fy, ss (balance sheet snapshot), ttm.yoy, ttm.cagr3, ttm.cagr5 Sectors: TECH, FIN, HEALTH, CONS_STAPLES, CONS_DISC, IND, ENERGY, UTIL, RE, MAT, COMM Operators: gt (>), gte (>=), lt (<), lte (<=), eq (=), between Tag filtering (required_tags / excluded_tags): filter by business model classification. Requires companies to be classified — unclassified companies are excluded from tag-filtered results. Note: For P/E screening, negative P/E means losses. Add a gt(0) filter to exclude loss-making companies. Note: ROIC values are decimals (0.15 = 15%). Margins and returns are also decimals. Use Cases: - "High ROIC tech stocks" -> filters=[{metric_id:"roic", operator:"gt", value:0.15}], sectors=["TECH"] - "Undervalued profitable industrials" -> filters=[{metric_id:"pe_ratio", operator:"lt", value:15}, {metric_id:"pe_ratio", operator:"gt", value:0}], sectors=["IND"] - "Revenue growing >10% YoY" -> filters=[{metric_id:"revenues", operator:"gt", value:0.10, period_type:"ttm.yoy"}] - "AI infrastructure companies not exposed to China supply chain" -> required_tags=["ai_ml_infrastructure"], excluded_tags=["china_supply_chain_heavy"] - "Profitable subscription businesses" -> filters=[{metric_id:"net_margin", operator:"gt", value:0.10}], required_tags=["subscription_recurring"] - "Quality companies with a material charge" -> filters=[{metric_id:"roic", operator:"gt", value:0.15}, {metric_id:"market_cap", operator:"gt", value:10000000000}], signals=["has_material_charge"] When signals are provided, results include matched_signals and signal_details fields. Signals filter AFTER metric screening — only companies passing metric filters are checked for signals. Responses capped at ~20K chars. If truncated, reduce limit or add stricter filters.
screen_filing_signals
ChatGPTScreen companies by signals across all source types — filings, earnings, transcripts, IR events. This is NOT metric screening (use screen_companies for P/E, ROIC, etc.). Screens by verifiable facts, not LLM-generated scores. Available signals: Filing intelligence (from 10-K/10-Q): - tone_cautious: Management tone is cautious/defensive - tone_shifted: Tone shifted more cautious vs prior - material_weakness: Material weakness in internal controls - accounting_aggressiveness: Accounting aggressiveness flagged (aggressive or conservative) - sbc_high: Stock-based compensation > 15% of revenue - has_new_risks: New risk factors vs prior filing - customer_concentration_high: Customer concentration > 20% or elevated risk - covenant_risk: Covenant tight, waiver obtained, or violation - debt_maturity_near: Significant debt maturing within 12 months - guidance_revised: Guidance raised, lowered, or withdrawn - has_material_charge: Material non-recurring charge or write-down - cash_earnings_divergence: Profitable but negative free cash flow - leverage_spike: Debt-to-equity jumped 50%+ year-over-year - margin_compression: Gross margin declined 3%+ year-over-year - dividend_coverage_weak: Dividend coverage below operating cash flow - sbc_unhedged: Stock comp exceeds buybacks (net dilution) - ocf_deterioration: Operating cash flow declined 40%+ YoY - has_fuel_sensitivity: Fuel cost sensitivity quantified in MD&A - has_commodity_sensitivity: Commodity price sensitivity quantified in MD&A - has_tariff_sensitivity: Tariff/trade policy impact quantified in MD&A - mda_has_scale_claims: ≥3 quantified operational scale claims extracted from MD&A narrative (e.g. renewal rates, member counts, comp sales) - segment_breakdown: Per-segment revenue + ratios + names (always emits when segments present) - customer_concentration: Customer concentration payload (always emits when populated) - geographic_concentration: Geographic concentration payload (always emits when populated) - has_segment_growth_outlier: Any segment grew >20% YoY - has_segment_decline_material: Any segment declined >10% YoY - largest_segment_declining: Top-revenue-share segment is declining YoY - segment_concentration_high: Top segment > 70% of total revenue - risk_landscape_breakdown: Top risks array (severity, is_new, change_vs_prior) + counts - exposure_breakdown: Commodity / tariff exposure (qualitative or quantified magnitude) - has_escalated_risk: ≥1 risk escalated vs prior filing - risk_severity_high_count_above_3: >3 risks with severity=high - guidance_breakdown: Forward guidance accuracy + revision direction payload - guidance_lowered: Guidance lowered (extractor or inferred direction) - guidance_raised: Guidance raised (extractor or inferred direction) - debt_profile_breakdown: Debt + covenant + refinancing_risk + computed near_term_pct - purchase_obligations_breakdown: Take-or-pay schedule with total committed sum - commitments_breakdown: Cloud computing + VIE/SPE exposure - near_term_debt_pct_above_30: >30% of total debt maturing within 12 months - has_purchase_obligations_concentrated: Top counterparty > 50% of purchase obligations - sensitivities_breakdown: Quantified MD&A sensitivities array (variable + sensitivity + direction) - scale_claims_breakdown: MD&A scale claims array (capped at 20 by emission order) - tone_breakdown: Management tone payload (overall + change vs prior) - accounting_breakdown: Accounting quality (material weakness + aggressiveness + sbc%) - sbc_breakdown: Stock-based compensation as % of revenue Earnings releases (8-K Item 2.02 and 6-K Ex 99.1, from earnings press releases): - earnings_revenue_grew: Revenue grew year-over-year - earnings_revenue_declined: Revenue declined year-over-year - earnings_margin_expanded: Operating or gross margin expanded vs prior year - earnings_margin_contracted: Operating or gross margin contracted vs prior year - earnings_guidance_raised_8k: Forward guidance raised in earnings release - earnings_guidance_lowered_8k: Forward guidance lowered in earnings release - earnings_guidance_breakdown: Full forward-guidance …
screen_filing_signals
ChatGPTScreen companies by signals across all source types — filings, earnings, transcripts, IR events. This is NOT metric screening (use screen_companies for P/E, ROIC, etc.). Screens by verifiable facts, not LLM-generated scores. Available signals: Filing intelligence (from 10-K/10-Q): - tone_cautious: Management tone is cautious/defensive - tone_shifted: Tone shifted more cautious vs prior - material_weakness: Material weakness in internal controls - accounting_aggressiveness: Accounting aggressiveness flagged (aggressive or conservative) - sbc_high: Stock-based compensation > 15% of revenue - has_new_risks: New risk factors vs prior filing - customer_concentration_high: Customer concentration > 20% or elevated risk - covenant_risk: Covenant tight, waiver obtained, or violation - debt_maturity_near: Significant debt maturing within 12 months - guidance_revised: Guidance raised, lowered, or withdrawn - has_material_charge: Material non-recurring charge or write-down - cash_earnings_divergence: Profitable but negative free cash flow - leverage_spike: Debt-to-equity jumped 50%+ year-over-year - margin_compression: Gross margin declined 3%+ year-over-year - dividend_coverage_weak: Dividend coverage below operating cash flow - sbc_unhedged: Stock comp exceeds buybacks (net dilution) - ocf_deterioration: Operating cash flow declined 40%+ YoY - has_fuel_sensitivity: Fuel cost sensitivity quantified in MD&A - has_commodity_sensitivity: Commodity price sensitivity quantified in MD&A - has_tariff_sensitivity: Tariff/trade policy impact quantified in MD&A - mda_has_scale_claims: ≥3 quantified operational scale claims extracted from MD&A narrative (e.g. renewal rates, member counts, comp sales) - segment_breakdown: Per-segment revenue + ratios + names (always emits when segments present) - customer_concentration: Customer concentration payload (always emits when populated) - geographic_concentration: Geographic concentration payload (always emits when populated) - has_segment_growth_outlier: Any segment grew >20% YoY - has_segment_decline_material: Any segment declined >10% YoY - largest_segment_declining: Top-revenue-share segment is declining YoY - segment_concentration_high: Top segment > 70% of total revenue - risk_landscape_breakdown: Top risks array (severity, is_new, change_vs_prior) + counts - exposure_breakdown: Commodity / tariff exposure (qualitative or quantified magnitude) - has_escalated_risk: ≥1 risk escalated vs prior filing - risk_severity_high_count_above_3: >3 risks with severity=high - guidance_breakdown: Forward guidance accuracy + revision direction payload - guidance_lowered: Guidance lowered (extractor or inferred direction) - guidance_raised: Guidance raised (extractor or inferred direction) - debt_profile_breakdown: Debt + covenant + refinancing_risk + computed near_term_pct - purchase_obligations_breakdown: Take-or-pay schedule with total committed sum - commitments_breakdown: Cloud computing + VIE/SPE exposure - near_term_debt_pct_above_30: >30% of total debt maturing within 12 months - has_purchase_obligations_concentrated: Top counterparty > 50% of purchase obligations - sensitivities_breakdown: Quantified MD&A sensitivities array (variable + sensitivity + direction) - scale_claims_breakdown: MD&A scale claims array (capped at 20 by emission order) - tone_breakdown: Management tone payload (overall + change vs prior) - accounting_breakdown: Accounting quality (material weakness + aggressiveness + sbc%) - sbc_breakdown: Stock-based compensation as % of revenue Earnings releases (8-K Item 2.02 and 6-K Ex 99.1, from earnings press releases): - earnings_revenue_grew: Revenue grew year-over-year - earnings_revenue_declined: Revenue declined year-over-year - earnings_margin_expanded: Operating or gross margin expanded vs prior year - earnings_margin_contracted: Operating or gross margin contracted vs prior year - earnings_guidance_raised_8k: Forward guidance raised in earnings release - earnings_guidance_lowered_8k: Forward guidance lowered in earnings release - earnings_guidance_breakdown: Full forward-guidance …
search_companies
ChatGPTResolve a company name or ticker to the exact ticker symbol via fuzzy name/ticker match. Scope: exact-entity lookup only. Handles partial names ("micro" -> MSFT), typos, and ticker variations. Returns ticker, full name, CIK, SIC, filer type (domestic / foreign private issuer / fund — i.e. which form family to expect), fiscal year-end, and a primary-source SEC EDGAR entity-page link (verify the resolution + see the company's full filing history) for each match. Use this when: you have a specific company name or ambiguous ticker and need to confirm the exact ticker before calling other tools. Delisted / renamed / acquired companies are resolvable by current OR former name (e.g. "American Software" → Logility, "Chase Manhattan" → JPM). They are returned ranked below active matches, flagged [delisted], with their CIK. They have no current ticker — pass the returned cik to downstream tools (every company tool accepts a CIK in place of a ticker). Input tip: queries matching the pattern of 2-5 uppercase letters are auto-extracted as a ticker. If you pass an all-caps company name (e.g., "AMCOR") that is NOT a ticker, the lookup may miss — pass "Amcor" with normal casing to force name-search behavior. On miss, this tool returns suggested near-matches when possible. Do NOT use this for concept/theme/industry discovery (e.g., "gold miners", "LNG exposure", "companies mentioning tariffs"). This tool matches on company-name text only — it cannot surface companies by what they do. For concept discovery, use search_sec_filings (full-text search across filings) or screen_companies (metric + sector filters). Coverage boundary: MetricDuck is SEC-EDGAR only. This tool is the authoritative coverage check. A no-match on a non-US local-exchange symbol (e.g. 3087.T, LSE:HSBA, 7203:JP) is a coverage boundary, not a lookup miss — the tool says so explicitly and you should treat it as terminal (don't retry ticker variations). Foreign issuers that file a US 20-F/40-F (HSBC, Toyota, Novo Nordisk…) ARE covered — reach them by company name, not their local symbol.
search_companies
ChatGPTResolve a company name or ticker to the exact ticker symbol via fuzzy name/ticker match. Scope: exact-entity lookup only. Handles partial names ("micro" -> MSFT), typos, and ticker variations. Returns ticker, full name, CIK, SIC, filer type (domestic / foreign private issuer / fund — i.e. which form family to expect), fiscal year-end, and a primary-source SEC EDGAR entity-page link (verify the resolution + see the company's full filing history) for each match. Use this when: you have a specific company name or ambiguous ticker and need to confirm the exact ticker before calling other tools. Delisted / renamed / acquired companies are resolvable by current OR former name (e.g. "American Software" → Logility, "Chase Manhattan" → JPM). They are returned ranked below active matches, flagged [delisted], with their CIK. They have no current ticker — pass the returned cik to downstream tools (every company tool accepts a CIK in place of a ticker). Input tip: queries matching the pattern of 2-5 uppercase letters are auto-extracted as a ticker. If you pass an all-caps company name (e.g., "AMCOR") that is NOT a ticker, the lookup may miss — pass "Amcor" with normal casing to force name-search behavior. On miss, this tool returns suggested near-matches when possible. Do NOT use this for concept/theme/industry discovery (e.g., "gold miners", "LNG exposure", "companies mentioning tariffs"). This tool matches on company-name text only — it cannot surface companies by what they do. For concept discovery, use search_sec_filings (full-text search across filings) or screen_companies (metric + sector filters). Coverage boundary: MetricDuck is SEC-EDGAR only. This tool is the authoritative coverage check. A no-match on a non-US local-exchange symbol (e.g. 3087.T, LSE:HSBA, 7203:JP) is a coverage boundary, not a lookup miss — the tool says so explicitly and you should treat it as terminal (don't retry ticker variations). Foreign issuers that file a US 20-F/40-F (HSBC, Toyota, Novo Nordisk…) ARE covered — reach them by company name, not their local symbol.
search_sec_filings
ChatGPTSearch the full text of every SEC filing since 2001 to find companies related to any concept — a product, technology, regulation, event, or company. Returns filing-level results with aggregated statistics (company count, form type breakdown, industry distribution). For 10-K/10-Q filings processed by MetricDuck, also shows WHICH SECTIONS contain the term with drill-in pointers. Searchable form types (all SEC forms since 2001): - 10-K, 10-Q — Annual/quarterly reports (section-level drill-down available) - 8-K — Material events, earnings announcements, leadership changes - DEF 14A, DEFM14A, PRE 14A — Proxy statements: executive compensation, board proposals, merger votes - S-1, F-1 — IPO registration statements (new market entrants, competitive landscape) - S-3, S-4 — Shelf registrations, M&A registration statements - 424B series — Prospectus supplements (debt/equity offerings) - N-CSR, N-CSRS — Fund annual/semi-annual reports (institutional positioning) - SD — Conflict minerals disclosure (physical supply chain mapping) - SC 13D, SC 13G — Beneficial ownership (activist investors, large holders) - 20-F, 40-F, 6-K — Foreign private issuer reports - Any other SEC form type — omit form_type to search all The FORM TYPE reveals the context: - 10-K risk factors → dependency, competition, or regulatory exposure - 10-K revenue footnote / business description → customer/supplier/partner - 8-K → material event reaction or announcement - S-1 → new market entrant (IPO in your space) - DEF 14A → executive compensation tied to a metric or initiative - SD → physical supply chain (minerals, manufacturing) - SC 13D → activist investor targeting a company Section-level enrichment (10-K/10-Q only): For MetricDuck-processed filings, results include which sections contain the term (risk factors, MD&A, revenue footnote, etc.) with chunk pointers for immediate drill-in via get_filing_section. Non-standard forms (S-1, DEF 14A, etc.) return filing metadata and accession numbers but no section-level detail. Use cases: - "Who supplies Apple?" → ticker_lookup="AAPL" → companies listing Apple in revenue footnotes - "Recent data breaches?" → query="cybersecurity incident", form_type="8-K" - "Tariff-exposed companies?" → query="tariff", form_type="10-K" → risk factor disclosures - "Activist campaigns?" → query="board representation", form_type="DEF 14A,SC 13D" When to use other tools instead: - You already know the company → get_filing_index (signal triage) or list_filings (filing inventory) - You want financial metrics → screen_companies (numeric filters) - You want earnings call cross-quarter view → compare_earnings_calls Key limitation: keyword matching only, not semantic. "No material weakness" matches "material weakness found." Verify hits with get_filing_section for context. Search tips: quoted exact phrases ("material weakness"); proximity NEAR(5); OR / NOT; trailing wildcards (restructur*). Historical event queries (M&A announcements, lawsuits, restructurings, leadership changes): the default 1-year date_from and rank_by="date" ordering bury historical anchors under mutual-fund NPORT-P holdings. For specific events, prefer form_type="8-K" + widen date_from to before the event + rank_by="relevance" — this surfaces the anchor 8-K in the top results instead of fund noise.
search_sec_filings
ChatGPTSearch the full text of every SEC filing since 2001 to find companies related to any concept — a product, technology, regulation, event, or company. Returns filing-level results with aggregated statistics (company count, form type breakdown, industry distribution). For 10-K/10-Q filings processed by MetricDuck, also shows WHICH SECTIONS contain the term with drill-in pointers. Searchable form types (all SEC forms since 2001): - 10-K, 10-Q — Annual/quarterly reports (section-level drill-down available) - 8-K — Material events, earnings announcements, leadership changes - DEF 14A, DEFM14A, PRE 14A — Proxy statements: executive compensation, board proposals, merger votes - S-1, F-1 — IPO registration statements (new market entrants, competitive landscape) - S-3, S-4 — Shelf registrations, M&A registration statements - 424B series — Prospectus supplements (debt/equity offerings) - N-CSR, N-CSRS — Fund annual/semi-annual reports (institutional positioning) - SD — Conflict minerals disclosure (physical supply chain mapping) - SC 13D, SC 13G — Beneficial ownership (activist investors, large holders) - 20-F, 40-F, 6-K — Foreign private issuer reports - Any other SEC form type — omit form_type to search all The FORM TYPE reveals the context: - 10-K risk factors → dependency, competition, or regulatory exposure - 10-K revenue footnote / business description → customer/supplier/partner - 8-K → material event reaction or announcement - S-1 → new market entrant (IPO in your space) - DEF 14A → executive compensation tied to a metric or initiative - SD → physical supply chain (minerals, manufacturing) - SC 13D → activist investor targeting a company Section-level enrichment (10-K/10-Q only): For MetricDuck-processed filings, results include which sections contain the term (risk factors, MD&A, revenue footnote, etc.) with chunk pointers for immediate drill-in via get_filing_section. Non-standard forms (S-1, DEF 14A, etc.) return filing metadata and accession numbers but no section-level detail. Use cases: - "Who supplies Apple?" → ticker_lookup="AAPL" → companies listing Apple in revenue footnotes - "Recent data breaches?" → query="cybersecurity incident", form_type="8-K" - "Tariff-exposed companies?" → query="tariff", form_type="10-K" → risk factor disclosures - "Activist campaigns?" → query="board representation", form_type="DEF 14A,SC 13D" When to use other tools instead: - You already know the company → get_filing_index (signal triage) or list_filings (filing inventory) - You want financial metrics → screen_companies (numeric filters) - You want earnings call cross-quarter view → compare_earnings_calls Key limitation: keyword matching only, not semantic. "No material weakness" matches "material weakness found." Verify hits with get_filing_section for context. Search tips: quoted exact phrases ("material weakness"); proximity NEAR(5); OR / NOT; trailing wildcards (restructur*). Historical event queries (M&A announcements, lawsuits, restructurings, leadership changes): the default 1-year date_from and rank_by="date" ordering bury historical anchors under mutual-fund NPORT-P holdings. For specific events, prefer form_type="8-K" + widen date_from to before the event + rank_by="relevance" — this surfaces the anchor 8-K in the top results instead of fund noise.