Skip to main content
Glama

Get XBRL financial facts for a company

edgar_get_company_facts
Read-onlyIdempotent

Retrieve reported XBRL financial facts for one SEC company from EDGAR: list available concepts or fetch time-series values filtered by form, fiscal period, or date.

Instructions

Get reported XBRL financial data (us-gaap, ifrs-full, dei, ...) for one company from the SEC companyfacts API, e.g. Assets, Revenues, NetIncomeLoss, EarningsPerShareDiluted. Two modes: (1) omit concepts to LIST the concepts the company reports (name, label, units, number of values) so you can pick exact names; (2) pass concepts to get their time-series values, newest first, optionally filtered by form (10-K/10-Q), fiscal period or date. Use edgar_get_concept_across_companies to compare one concept across many companies. Behavior: free, read-only GET to data.sec.gov (no token). Concept names are case-sensitive. Values are as reported (duplicates across filings possible; set dedupe=true to keep one value per period). RETURNS: paged {count,total,offset,hasMore,nextOffset,meta:{cik,name},items}. List mode items: {taxonomy,concept,label,units,values}. Values mode items: {taxonomy,concept,label,unit,value,start,end,fy,fp,form,filed,accession_number,frame}. Errors: COMPANY_NOT_FOUND, NOT_FOUND (no XBRL data), SEC_FETCH_FAILED. WHEN NOT TO USE: for filing documents/text use edgar_list_filings + edgar_get_filing_document; for one concept across all companies use edgar_get_concept_across_companies. COST: free - direct sec.gov requests from this MCP server, no APIFY_TOKEN, no Apify billing. PARAMETERS: concepts switches the mode: omitted/empty = list mode (only taxonomy and search apply; forms, fiscalPeriod, since and dedupe are ignored), non-empty = values mode (search is ignored). Concept names are case-sensitive and must match exactly as listed (e.g. "NetIncomeLoss", not "netincome"); names the company never reported come back in meta.missing_concepts instead of failing. Many companies report revenue as "RevenueFromContractWithCustomerExcludingAssessedTax" rather than "Revenues", so run list mode with search "revenue" first. taxonomy applies in both modes. In values mode the filters combine with AND: forms matches the form of the filing that reported the value (["10-K"] = annual reports), fiscalPeriod matches fp ("FY" = full year; "Q4" is rarely reported separately), since compares the period end date. dedupe=true keeps one value per concept/unit/start-end period (the latest filed, i.e. restated) - set false to see every filing's figure. Rows are sorted by period end, newest first, then paged with limit/offset. EXAMPLE: {"company":"MSFT","concepts":["Revenues"],"fiscalPeriod":"FY","limit":5} -> 5 newest annual Revenues values in USD.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
formsNoOptional, values mode only, default all forms. Form types of the reporting filing (case-insensitive), e.g. ["10-K"] for annual or ["10-Q"] for quarterly figures
limitNoOptional page size: items to return, integer 1-500 (default 50). Example: 10
sinceNoOptional, values mode only. Keep values whose period end date >= this date, format YYYY-MM-DD, e.g. "2021-01-01"
dedupeNoOptional boolean, values mode only, default true = one value per concept/unit/period (latest filed); false = every reported value incl. repeats from later filings
offsetNoOptional zero-based number of items to skip, integer >= 0 (default 0); pass nextOffset from the previous response, e.g. 20
searchNoOptional, list mode only. Case-insensitive substring matched against concept name or label. Example: "revenue"
companyYesRequired, 1-200 chars. Ticker ("AAPL", case-insensitive), CIK of 1-10 digits ("320193" or "0000320193"; any SEC filer, even without a ticker) or registrant-name fragment ("Apple"; the first SEC ticker-map match is used). Call edgar_resolve_company first if a name is ambiguous.
conceptsNoOptional; omit = list mode. 1-25 exact, case-sensitive XBRL concept names = values mode. Example: ["Revenues","NetIncomeLoss","Assets"]
taxonomyNoOptional, default omitted = all taxonomies. Exact taxonomy key: "us-gaap", "ifrs-full", "dei" or "srt". Example: "us-gaap"
fiscalPeriodNoOptional, values mode only, one of "FY" | "Q1" | "Q2" | "Q3" | "Q4"; default all periods. Example: "FY"

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
metaNoTool-specific context (company, source_url, ...)
countYesNumber of items in this page
itemsYesResult rows for this page
totalYesTotal items matching the filters (before paging)
offsetYesOffset of the first item in this page
hasMoreYesTrue if more items exist after this page
nextOffsetYesOffset to pass for the next page, or null

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changedv1.2.2
    • changedInput schema / properties / company / description
      Previous value: -"Ticker (\"AAPL\"), CIK (\"320193\", zero-padding optional) or company name fragment (\"Apple\"); best match is used. Call edgar_resolve_company first if the name is ambiguous."New value: +"Required, 1-200 chars. Ticker (\"AAPL\", case-insensitive), CIK of 1-10 digits (\"320193\" or \"0000320193\"; any SEC filer, even without a ticker) or registrant-name fragment (\"Apple\"; the first SEC ticker-map match is used). Call edgar_resolve_company first if a name is ambiguous."
    • changedInput schema / properties / concepts / description
      Previous value: -"Exact concept names, e.g. [\"Revenues\",\"NetIncomeLoss\"]. Omit to list available concepts."New value: +"Optional; omit = list mode. 1-25 exact, case-sensitive XBRL concept names = values mode. Example: [\"Revenues\",\"NetIncomeLoss\",\"Assets\"]"
    • changedInput schema / properties / dedupe / description
      Previous value: -"Values mode: keep one value per concept/unit/period (latest filed). Default true."New value: +"Optional boolean, values mode only, default true = one value per concept/unit/period (latest filed); false = every reported value incl. repeats from later filings"
    • changedInput schema / properties / fiscalPeriod / description
      Previous value: -"Values mode: keep only this fiscal period"New value: +"Optional, values mode only, one of \"FY\" | \"Q1\" | \"Q2\" | \"Q3\" | \"Q4\"; default all periods. Example: \"FY\""
    • changedInput schema / properties / forms / description
      Previous value: -"Values mode only: keep values reported in these form types (case-insensitive), e.g. [\"10-K\"] for annual or [\"10-Q\"] for quarterly. Omit for all forms."New value: +"Optional, values mode only, default all forms. Form types of the reporting filing (case-insensitive), e.g. [\"10-K\"] for annual or [\"10-Q\"] for quarterly figures"
    • changedInput schema / properties / limit / description
      Previous value: -"Optional page size: items to return, integer 1-500 (default 50)"New value: +"Optional page size: items to return, integer 1-500 (default 50). Example: 10"
    • changedInput schema / properties / offset / description
      Previous value: -"Number of items to skip for paging (default 0); use nextOffset from the previous response"New value: +"Optional zero-based number of items to skip, integer >= 0 (default 0); pass nextOffset from the previous response, e.g. 20"
    • changedInput schema / properties / search / description
      Previous value: -"List mode only: case-insensitive substring filter on concept name or label, e.g. \"revenue\""New value: +"Optional, list mode only. Case-insensitive substring matched against concept name or label. Example: \"revenue\""
    • changedInput schema / properties / since / description
      Previous value: -"Values mode: keep values whose period end >= YYYY-MM-DD"New value: +"Optional, values mode only. Keep values whose period end date >= this date, format YYYY-MM-DD, e.g. \"2021-01-01\""
    • changedInput schema / properties / taxonomy / description
      Previous value: -"Restrict to a taxonomy: \"us-gaap\", \"ifrs-full\", \"dei\", \"srt\". Omit for all."New value: +"Optional, default omitted = all taxonomies. Exact taxonomy key: \"us-gaap\", \"ifrs-full\", \"dei\" or \"srt\". Example: \"us-gaap\""
  2. Addedv1.2.1

TDQS

A4.9/5.0
Behavior5/5

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

Annotations cover read-only/idempotent/open-world, but the description adds materially more: no token or Apify billing, case-sensitive concept names, duplicate values across filings and what dedupe=true does, and the concrete error codes (COMPANY_NOT_FOUND, NOT_FOUND, SEC_FETCH_FAILED). This is behavioral context the annotations cannot express.

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

Conciseness4/5

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

Well front-loaded and sectioned (modes, returns, when-not-to-use, cost, parameters, example), so an agent can skim. Minor redundancy: 'free' and 'no APIFY_TOKEN/billing' are stated twice (in the Behavior line and again in COST), and the RETURNS block duplicates what the output schema already provides.

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

Completeness5/5

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

For a 10-parameter, mode-switching tool this is fully specified: mode selection, filter interaction, pagination, sort order, error handling and a worked example are all present. Nothing an agent needs to call it correctly is missing, even discounting the return-value detail that the output schema already carries.

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

Parameters5/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes well beyond the schema: it explains that concepts switches modes and that other filters are ignored in list mode, that values-mode filters combine with AND, that unmatched concepts surface in meta.missing_concepts rather than failing, and warns that revenue is often tagged RevenueFromContractWithCustomerExcludingAssessedTax.

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

Purpose5/5

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

States a specific verb (get), resource (XBRL financial data / companyfacts) and scope (one company), and explicitly names the sibling it is not (edgar_get_concept_across_companies) plus the filing-document alternatives. An agent can route correctly without opening any schema.

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

Usage Guidelines5/5

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

Gives an explicit WHEN NOT TO USE block naming edgar_list_filings, edgar_get_filing_document and edgar_get_concept_across_companies with the condition that selects each. It also distinguishes the two internal modes (list vs values) and when to prefer list mode first to discover concept names.

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