MCP App Store
Finance
MetricDuck icon

MetricDuck

by Jujube Technologies Inc.

Overview

Answers about U.S. public companies grounded in primary SEC filings, with every figure linked back to its source on SEC EDGAR. Pull exact as-filed XBRL facts and multi-period financial statements, track a metric across fiscal periods, screen and rank 5,500+ companies by financials, compare peers, read filing sections (risk factors, MD&A, earnings), and full-text search SEC EDGAR. Coverage: 10-K/10-Q (and amendments), 8-K, 20-F/40-F/6-K (foreign issuers that file with the SEC), and DEF 14A proxy statements. Not covered: insider/ownership filings (Forms 3/4/5, 13D/G), institutional holdings (13F), or registration/offering prospectuses (S-1, 424B). Updated daily from SEC EDGAR; daily end-of-day prices from a market-data feed. Informational research tool, not investment advice. Free up to 500 queries/day.

Tools

browse_company

ChatGPT
Entity-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

ChatGPT
Entity-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

ChatGPT
Signal-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

ChatGPT
Signal-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

ChatGPT
Compare 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

ChatGPT
Compare 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

ChatGPT
How 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

ChatGPT
How 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

ChatGPT
Get 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

ChatGPT
Get 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

ChatGPT
Get 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

ChatGPT
Get 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

ChatGPT
Read 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

ChatGPT
Read 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

ChatGPT
Get 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

ChatGPT
Get 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

ChatGPT
Did 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

ChatGPT
Did 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

ChatGPT
Retrieve 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

ChatGPT
Retrieve 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

ChatGPT
Time 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

ChatGPT
Time 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

ChatGPT
Daily 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

ChatGPT
Daily 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

ChatGPT
Raw 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

ChatGPT
Raw 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

ChatGPT
Browse 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

ChatGPT
Browse 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

ChatGPT
Discover 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

ChatGPT
Discover 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

ChatGPT
Screen 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

ChatGPT
Screen 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

ChatGPT
Screen 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

ChatGPT
Screen 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

ChatGPT
Resolve 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

ChatGPT
Resolve 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

ChatGPT
Search 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

ChatGPT
Search 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.

App Stats

38

Tools

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily