Skip to main content
Glama

Secedgar Get Financials

secedgar_get_financials
Read-onlyIdempotent

Get historical XBRL financial data for a company. Accepts friendly concept names (e.g., "revenue", "net_income", "assets") or raw XBRL tags. Discover available friendly names with secedgar_search_concepts. Handles historical tag changes and deduplicates data automatically. The full series is also staged as df_ when a canvas is available — inspect it with secedgar_dataframe_describe, then analyze it with secedgar_dataframe_query.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
unitNoSEC unit key to read the series in, for a concept reported in more than one (e.g. "ZAR" and a "USD" convenience translation, or "USD/EUR" among exchange-rate pairs). "USD-per-shares" is read as "USD/shares". When omitted, the series takes the unit of its newest value, then the unit with more periods; any other units are named in caveats.
limitNoCap the inline data[] to the most-recent N periods (the series is newest-first). The full series is always registered to the dataframe, so older periods stay queryable via secedgar_dataframe_query. Omit to return every period inline.
companyYesTicker symbol (e.g., "AAPL") or CIK number. Ticker is preferred.
conceptYesFinancial concept — friendly name (e.g., "revenue", "net_income", "assets", "eps_diluted") or raw XBRL tag (e.g., "AccountsPayableCurrent"). Friendly names auto-resolve to the correct XBRL tags and handle historical tag changes.
taxonomyNoXBRL taxonomy. us-gaap for US companies, ifrs-full for foreign filers, dei for entity info (shares outstanding).us-gaap
period_typeNoFilter to annual (FY) or quarterly (Q1-Q4) data. "all" returns both. When omitted, defaults to "annual"; instant (balance-sheet) concepts automatically fall back to returning the full series on the first call when the annual filter yields nothing (#48).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
capNoThe limit cap applied.
cikNoResolved CIK, zero-padded to 10 digits.
dataNoDeduplicated series, newest first, one value per calendar period. A period SEC framed on a proxy statement figure takes the filer's own report instead; an annual period framed on a 10-Q trailing-twelve-month figure is left out.
unitNoUnit of every value in data (e.g., "USD", "USD/shares"): the unit input when given (an unreported one fails with no_unit_data), else the newest value's unit, then the unit with more periods. A series never mixes units.
errorNoPresent when the call failed. Absent on success.
labelNoHuman-readable taxonomy label of the concept tag.
shownNoNumber of periods shown inline.
noticeNoGuidance when the inline series was capped, or when the full series is staged as a dataframe.
caveatsNoCompleteness warnings, absent when none apply: other units the concept is reported in, with period counts and spans (pass unit to read one); quarters missing from every recent year (SEC reports fiscal Q4 only within the 10-K); a series ending well short of today (a retired or dropped tag).
companyNoResolved entity name (SEC-conformed).
conceptNoXBRL tag behind the newest value; each row names its own tag.
datasetNoDataframe of the same series; fiscal keys are source_filing_fy/source_filing_fp, so order by period_end. Absent when canvas is unavailable.
truncatedNoTrue when the inline data[] was capped by limit.
tags_triedNoXBRL tags attempted, when a friendly name maps to several.
descriptionNoXBRL taxonomy description of the tag. Often absent for extension tags and older concepts.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed15 schema fields changed
    • addedInput schema / properties / unit
      Added value: +{
      +  "description": "SEC unit key to read the series in, for a concept reported in more than one (e.g. \"ZAR\" and a \"USD\" convenience translation, or \"USD/EUR\" among exchange-rate pairs). \"USD-per-shares\" is read as \"USD/shares\". When omitted, the series takes the unit of its newest value, then the unit with more periods; any other units are named in caveats.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • changedOutput schema / properties / caveats / description
      Previous value: -"Data-completeness warnings about the returned series. Two kinds. On quarterly results, one entry when one or two calendar quarters are absent from every recent qualifying year — SEC reports a filer's fiscal Q4 as the 10-K residual rather than a discrete quarterly fact, so the calendar quarter fiscal Q4 spans has no frame-tagged value, and a filer whose other fiscal quarters span non-calendar durations loses a second quarter the same way. Applies to calendar-year filers (no discrete Q4) as much as to off-calendar ones. On any result, one entry when the series stops well short of today — either because the concept resolved to an XBRL tag SEC has retired from the taxonomy (the current tags reported nothing), or because a current tag's series ends more than two years plus a filing window back, which is what a filer migrating to a different element or dropping the disclosure looks like. Absent when the series has nothing to flag."New value: +"Completeness warnings, absent when none apply: other units the concept is reported in, with period counts and spans (pass unit to read one); quarters missing from every recent year (SEC reports fiscal Q4 only within the 10-K); a series ending well short of today (a retired or dropped tag)."
    • changedOutput schema / properties / concept / description
      Previous value: -"XBRL tag behind the newest value. A friendly name can walk several tags, so each row names its own."New value: +"XBRL tag behind the newest value; each row names its own tag."
    • changedOutput schema / properties / data / description
      Previous value: -"Deduplicated time series, newest first — one value per calendar period. Where SEC's period frame sits on a proxy statement's figure (the pay-versus-performance table re-tags net income), the value comes from the filer's own report of the same period; an annual period SEC framed on a 10-Q's trailing-twelve-month figure is left out, since the filer has not closed that year."New value: +"Deduplicated series, newest first, one value per calendar period. A period SEC framed on a proxy statement figure takes the filer's own report instead; an annual period framed on a 10-Q trailing-twelve-month figure is left out."
    • changedOutput schema / properties / data / items / description
      Previous value: -"One reported value with its period, fiscal context, source filing, and source tag."New value: +"One reported value with its period, source filing, and tag."
    • changedOutput schema / properties / data / items / properties / fiscal_period / description
      Previous value: -"Fiscal period of the source filing (FY, Q1, Q2, Q3, Q4), not the data period. Null when the source filing did not encode a fiscal period."New value: +"Fiscal period of the source filing (FY, Q1–Q4), not of the data period. Null when not encoded."
    • changedOutput schema / properties / data / items / properties / fiscal_year / description
      Previous value: -"Fiscal year of the source filing, not the data period — every comparative period restated in the same filing carries that filing's fiscal year, so use end (or period) as the time key. Null when the source filing did not encode a fiscal year."New value: +"Fiscal year of the source filing, not of the data period (restated comparatives carry the filing's year); key time on end. Null when not encoded."
    • changedOutput schema / properties / data / items / properties / tag / description
      Previous value: -"XBRL tag this value was reported under — differs from concept when an older or successor tag in the friendly name answers this period."New value: +"XBRL tag this value was reported under; differs from concept when an older or successor tag answers this period."
    • changedOutput schema / properties / dataset / description
      Previous value: -"Canvas dataframe handle holding the same time series. Use for cross-company JOINs via secedgar_dataframe_query. The source-filing fiscal keys are materialized as source_filing_fy/source_filing_fp — order, group, and window by period_end, not by those columns. Absent when canvas is unavailable."New value: +"Dataframe of the same series; fiscal keys are source_filing_fy/source_filing_fp, so order by period_end. Absent when canvas is unavailable."
    • changedOutput schema / properties / dataset / properties / name / description
      Previous value: -"Dataframe handle (df_XXXXX_XXXXX) — inspect its columns with secedgar_dataframe_describe, then query it with secedgar_dataframe_query."New value: +"Dataframe handle (df_XXXXX_XXXXX) for secedgar_dataframe_describe, then secedgar_dataframe_query."
    • changedOutput schema / properties / description / description
      Previous value: -"XBRL taxonomy description of the concept tag. Often absent for company-extension tags or older concepts."New value: +"XBRL taxonomy description of the tag. Often absent for extension tags and older concepts."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `company_not_found`: The company input does not resolve to a CIK. `ambiguous_company`: The company input resolves to multiple entities and the target is ambiguous. `unknown_concept`: The concept input is neither a supported friendly name nor shaped like an XBRL tag, so no request is sent. `no_concept_data`: The company does not report any XBRL data for the resolved concept and taxonomy. `no_frame_data`: Concept exists but has no frame-aligned (standard calendar period) entries. `no_period_data`: Concept has data but the period_type filter excluded all of it. `rate_limited`: SEC is rate-limiting this server's IP — SEC answered 429, or the call was refused without being sent while the cool-down after one runs. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `company_not_found`: The company input does not resolve to a CIK. `ambiguous_company`: The company input resolves to multiple entities and the target is ambiguous. `unknown_concept`: The concept input is neither a supported friendly name nor shaped like an XBRL tag, so no request is sent. `no_concept_data`: The company does not report any XBRL data for the resolved concept and taxonomy. `no_frame_data`: Concept exists but has no frame-aligned (standard calendar period) entries. `no_period_data`: Concept has data but the period_type filter excluded all of it. `no_unit_data`: The unit input names a unit the resolved concept is not reported in for this company. `rate_limited`: SEC is rate-limiting this server's IP — SEC answered 429, or the call was refused without being sent while the cool-down after one runs. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "company_not_found",
      -  "ambiguous_company",
      -  "unknown_concept",
      -  "no_concept_data",
      -  "no_frame_data",
      -  "no_period_data",
      -  "rate_limited"
      -]New value: +[
      +  "company_not_found",
      +  "ambiguous_company",
      +  "unknown_concept",
      +  "no_concept_data",
      +  "no_frame_data",
      +  "no_period_data",
      +  "no_unit_data",
      +  "rate_limited"
      +]
    • changedOutput schema / properties / tags_tried / description
      Previous value: -"XBRL tags that were attempted (shown when using friendly names that map to multiple tags)."New value: +"XBRL tags attempted, when a friendly name maps to several."
    • changedOutput schema / properties / unit / description
      Previous value: -"Unit of measure of the newest value (e.g., \"USD\", \"shares\", \"USD/shares\")."New value: +"Unit of every value in data (e.g., \"USD\", \"USD/shares\"): the unit input when given (an unreported one fails with no_unit_data), else the newest value's unit, then the unit with more periods. A series never mixes units."
  2. Changed10 schema fields changed
    • changedOutput schema / properties / concept / description
      Previous value: -"XBRL tag name used."New value: +"XBRL tag behind the newest value. A friendly name can walk several tags, so each row names its own."
    • changedOutput schema / properties / data / description
      Previous value: -"Deduplicated time series, newest first."New value: +"Deduplicated time series, newest first — one value per calendar period. Where SEC's period frame sits on a proxy statement's figure (the pay-versus-performance table re-tags net income), the value comes from the filer's own report of the same period; an annual period SEC framed on a 10-Q's trailing-twelve-month figure is left out, since the filer has not closed that year."
    • changedOutput schema / properties / data / items / description
      Previous value: -"One reported value with its period, fiscal context, and source filing."New value: +"One reported value with its period, fiscal context, source filing, and source tag."
    • addedOutput schema / properties / data / items / properties / tag
      Added value: +{
      +  "description": "XBRL tag this value was reported under — differs from concept when an older or successor tag in the friendly name answers this period.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / data / items / required
      Previous value: -[
      -  "period",
      -  "value",
      -  "end",
      -  "fiscal_year",
      -  "fiscal_period",
      -  "form",
      -  "filed",
      -  "accession_number"
      -]New value: +[
      +  "period",
      +  "value",
      +  "end",
      +  "fiscal_year",
      +  "fiscal_period",
      +  "form",
      +  "filed",
      +  "accession_number",
      +  "tag"
      +]
    • changedOutput schema / properties / description / description
      Previous value: -"XBRL taxonomy description for this concept. Often absent for company-extension tags or older concepts."New value: +"XBRL taxonomy description of the concept tag. Often absent for company-extension tags or older concepts."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `company_not_found`: The company input does not resolve to a CIK. `ambiguous_company`: The company input resolves to multiple entities and the target is ambiguous. `no_concept_data`: The company does not report any XBRL data for the resolved concept and taxonomy. `no_frame_data`: Concept exists but has no frame-aligned (standard calendar period) entries. `no_period_data`: Concept has data but the period_type filter excluded all of it. `rate_limited`: SEC is rate-limiting this server's IP — SEC answered 429, or the call was refused without being sent while the cool-down after one runs. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `company_not_found`: The company input does not resolve to a CIK. `ambiguous_company`: The company input resolves to multiple entities and the target is ambiguous. `unknown_concept`: The concept input is neither a supported friendly name nor shaped like an XBRL tag, so no request is sent. `no_concept_data`: The company does not report any XBRL data for the resolved concept and taxonomy. `no_frame_data`: Concept exists but has no frame-aligned (standard calendar period) entries. `no_period_data`: Concept has data but the period_type filter excluded all of it. `rate_limited`: SEC is rate-limiting this server's IP — SEC answered 429, or the call was refused without being sent while the cool-down after one runs. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "company_not_found",
      -  "ambiguous_company",
      -  "no_concept_data",
      -  "no_frame_data",
      -  "no_period_data",
      -  "rate_limited"
      -]New value: +[
      +  "company_not_found",
      +  "ambiguous_company",
      +  "unknown_concept",
      +  "no_concept_data",
      +  "no_frame_data",
      +  "no_period_data",
      +  "rate_limited"
      +]
    • changedOutput schema / properties / label / description
      Previous value: -"Human-readable label for the concept."New value: +"Human-readable taxonomy label of the concept tag."
    • changedOutput schema / properties / unit / description
      Previous value: -"Unit of measure (e.g., \"USD\", \"shares\", \"USD/shares\")."New value: +"Unit of measure of the newest value (e.g., \"USD\", \"shares\", \"USD/shares\")."
  3. Changed2 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `company_not_found`: The company input does not resolve to a CIK `ambiguous_company`: The company input resolves to multiple entities and the target is ambiguous `no_concept_data`: The company does not report any XBRL data for the resolved concept and taxonomy `no_frame_data`: Concept exists but has no frame-aligned (standard calendar period) entries `no_period_data`: Concept has data but the period_type filter excluded all of it Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `company_not_found`: The company input does not resolve to a CIK. `ambiguous_company`: The company input resolves to multiple entities and the target is ambiguous. `no_concept_data`: The company does not report any XBRL data for the resolved concept and taxonomy. `no_frame_data`: Concept exists but has no frame-aligned (standard calendar period) entries. `no_period_data`: Concept has data but the period_type filter excluded all of it. `rate_limited`: SEC is rate-limiting this server's IP — SEC answered 429, or the call was refused without being sent while the cool-down after one runs. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "company_not_found",
      -  "ambiguous_company",
      -  "no_concept_data",
      -  "no_frame_data",
      -  "no_period_data"
      -]New value: +[
      +  "company_not_found",
      +  "ambiguous_company",
      +  "no_concept_data",
      +  "no_frame_data",
      +  "no_period_data",
      +  "rate_limited"
      +]
  4. Changed2 schema fields changed
    • changedOutput schema / properties / dataset / properties / name / description
      Previous value: -"Dataframe handle (df_XXXXX_XXXXX) — pass to secedgar_dataframe_query."New value: +"Dataframe handle (df_XXXXX_XXXXX) — inspect its columns with secedgar_dataframe_describe, then query it with secedgar_dataframe_query."
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Guidance when the inline series was capped, or when the full series is staged as a dataframe.",
      +  "type": "string"
      +}
  5. Changed4 schema fields changed
    • removedOutput schema / properties / data / items / properties / fiscal_period / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / data / items / properties / fiscal_period / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / data / items / properties / fiscal_year / anyOf
      Removed value: -[
      -  {
      -    "type": "number"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / data / items / properties / fiscal_year / type
      Added value: +[
      +  "number",
      +  "null"
      +]
  6. Changed6 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "company",
      +      "cik",
      +      "concept",
      +      "label",
      +      "unit",
      +      "data"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `company_not_found`: The company input does not resolve to a CIK `ambiguous_company`: The company input resolves to multiple entities and the target is ambiguous `no_concept_data`: The company does not report any XBRL data for the resolved concept and taxonomy `no_frame_data`: Concept exists but has no frame-aligned (standard calendar period) entries `no_period_data`: Concept has data but the period_type filter excluded all of it Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "company_not_found",
      +            "ambiguous_company",
      +            "no_concept_data",
      +            "no_frame_data",
      +            "no_period_data"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "company",
      -  "cik",
      -  "concept",
      -  "label",
      -  "unit",
      -  "data"
      -]
  7. Changed1 schema field changed
    • changedOutput schema / properties / caveats / description
      Previous value: -"Data-completeness warnings about the returned series. Two kinds. On quarterly results, one entry when one or two calendar quarters are absent from every recent qualifying year — SEC reports a filer's fiscal Q4 as the 10-K residual rather than a discrete quarterly fact, so the calendar quarter fiscal Q4 spans has no frame-tagged value, and a filer whose other fiscal quarters span non-calendar durations loses a second quarter the same way. Applies to calendar-year filers (no discrete Q4) as much as to off-calendar ones. On any result, one entry when the concept resolved to an XBRL tag SEC has retired from the taxonomy, which means the current tags reported nothing and the series may stop years short. Absent when the series has nothing to flag."New value: +"Data-completeness warnings about the returned series. Two kinds. On quarterly results, one entry when one or two calendar quarters are absent from every recent qualifying year — SEC reports a filer's fiscal Q4 as the 10-K residual rather than a discrete quarterly fact, so the calendar quarter fiscal Q4 spans has no frame-tagged value, and a filer whose other fiscal quarters span non-calendar durations loses a second quarter the same way. Applies to calendar-year filers (no discrete Q4) as much as to off-calendar ones. On any result, one entry when the series stops well short of today — either because the concept resolved to an XBRL tag SEC has retired from the taxonomy (the current tags reported nothing), or because a current tag's series ends more than two years plus a filing window back, which is what a filer migrating to a different element or dropping the disclosure looks like. Absent when the series has nothing to flag."
  8. Changed1 schema field changed
    • changedOutput schema / properties / caveats / description
      Previous value: -"Data-completeness warnings about the returned series. Populated on quarterly results when one calendar quarter is absent from every recent fully-reported year — SEC reports a filer's fiscal Q4 as the 10-K residual rather than a discrete quarterly fact, so the calendar quarter that fiscal Q4 spans has no frame-tagged value. Applies to calendar-year filers (no discrete Q4) as much as to off-calendar ones. Absent when the series has nothing to flag."New value: +"Data-completeness warnings about the returned series. Two kinds. On quarterly results, one entry when one or two calendar quarters are absent from every recent qualifying year — SEC reports a filer's fiscal Q4 as the 10-K residual rather than a discrete quarterly fact, so the calendar quarter fiscal Q4 spans has no frame-tagged value, and a filer whose other fiscal quarters span non-calendar durations loses a second quarter the same way. Applies to calendar-year filers (no discrete Q4) as much as to off-calendar ones. On any result, one entry when the concept resolved to an XBRL tag SEC has retired from the taxonomy, which means the current tags reported nothing and the series may stop years short. Absent when the series has nothing to flag."
  9. Changed1 schema field changed
    • addedOutput schema / properties / caveats
      Added value: +{
      +  "description": "Data-completeness warnings about the returned series. Populated on quarterly results when one calendar quarter is absent from every recent fully-reported year — SEC reports a filer's fiscal Q4 as the 10-K residual rather than a discrete quarterly fact, so the calendar quarter that fiscal Q4 spans has no frame-tagged value. Applies to calendar-year filers (no discrete Q4) as much as to off-calendar ones. Absent when the series has nothing to flag.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  10. Changed3 schema fields changed
    • changedOutput schema / properties / data / items / properties / fiscal_period / description
      Previous value: -"Fiscal period of the source filing (FY, Q1, Q2, Q3, Q4). Null when the source filing did not encode a fiscal period."New value: +"Fiscal period of the source filing (FY, Q1, Q2, Q3, Q4), not the data period. Null when the source filing did not encode a fiscal period."
    • changedOutput schema / properties / data / items / properties / fiscal_year / description
      Previous value: -"Fiscal year of the source filing. Null when the source filing did not encode a fiscal year."New value: +"Fiscal year of the source filing, not the data period — every comparative period restated in the same filing carries that filing's fiscal year, so use end (or period) as the time key. Null when the source filing did not encode a fiscal year."
    • changedOutput schema / properties / dataset / description
      Previous value: -"Canvas dataframe handle holding the same time series. Use for cross-company JOINs via secedgar_dataframe_query. Absent when canvas is unavailable."New value: +"Canvas dataframe handle holding the same time series. Use for cross-company JOINs via secedgar_dataframe_query. The source-filing fiscal keys are materialized as source_filing_fy/source_filing_fp — order, group, and window by period_end, not by those columns. Absent when canvas is unavailable."
  11. Changed3 schema fields changed
    • addedOutput schema / properties / cap
      Added value: +{
      +  "description": "The limit cap applied.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Number of periods shown inline.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True when the inline data[] was capped by limit.",
      +  "type": "boolean"
      +}
  12. Changed1 schema field changed
    • changedInput schema / properties / period_type / description
      Previous value: -"Filter to annual (FY) or quarterly (Q1-Q4) data. \"all\" returns both. When omitted, defaults to \"annual\" for income/cash-flow concepts and \"all\" for balance-sheet (instant) items so balance-sheet calls return data on the first attempt."New value: +"Filter to annual (FY) or quarterly (Q1-Q4) data. \"all\" returns both. When omitted, defaults to \"annual\"; instant (balance-sheet) concepts automatically fall back to returning the full series on the first call when the annual filter yields nothing (#48)."
  13. Changed1 schema field changed
    • addedInput schema / properties / limit
      Added value: +{
      +  "description": "Cap the inline data[] to the most-recent N periods (the series is newest-first). The full series is always registered to the dataframe, so older periods stay queryable via secedgar_dataframe_query. Omit to return every period inline.",
      +  "maximum": 100,
      +  "minimum": 1,
      +  "type": "integer"
      +}
  14. Changed2 schema fields changed
    • addedInput schema / properties / company / minLength
      Added value: +1
    • addedInput schema / properties / concept / minLength
      Added value: +1
  15. Changed1 schema field changed
    • addedOutput schema / properties / dataset
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Canvas dataframe handle holding the same time series. Use for cross-company JOINs via secedgar_dataframe_query. Absent when canvas is unavailable.",
      +  "properties": {
      +    "expires_at": {
      +      "description": "ISO 8601 expiry timestamp.",
      +      "type": "string"
      +    },
      +    "name": {
      +      "description": "Dataframe handle (df_XXXXX_XXXXX) — pass to secedgar_dataframe_query.",
      +      "type": "string"
      +    },
      +    "row_count": {
      +      "description": "Rows materialized in the dataframe.",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "name",
      +    "row_count",
      +    "expires_at"
      +  ],
      +  "type": "object"
      +}
  16. Changed3 schema fields changed
    • changedOutput schema / properties / data / items / properties / end / description
      Previous value: -"Period end date."New value: +"Period end date (YYYY-MM-DD)."
    • changedOutput schema / properties / data / items / properties / filed / description
      Previous value: -"Date the source filing was submitted."New value: +"Date the source filing was submitted (YYYY-MM-DD)."
    • changedOutput schema / properties / data / items / properties / start / description
      Previous value: -"Period start date (duration items only)."New value: +"Period start date (YYYY-MM-DD). Duration items only."
  17. Changed6 schema fields changed
    • changedInput schema / properties / period_type / description
      Previous value: -"Filter to annual (FY) or quarterly (Q1-Q4) data. \"all\" returns both. Defaults: \"annual\" for income/cash-flow concepts, \"all\" for balance-sheet (instant) items so a bare friendly-name call returns data without a follow-up retry."New value: +"Filter to annual (FY) or quarterly (Q1-Q4) data. \"all\" returns both. When omitted, defaults to \"annual\" for income/cash-flow concepts and \"all\" for balance-sheet (instant) items so balance-sheet calls return data on the first attempt."
    • changedOutput schema / properties / cik / description
      Previous value: -"Company CIK."New value: +"Resolved CIK, zero-padded to 10 digits."
    • changedOutput schema / properties / company / description
      Previous value: -"Company name."New value: +"Resolved entity name (SEC-conformed)."
    • changedOutput schema / properties / data / items / properties / fiscal_period / description
      Previous value: -"Fiscal period (FY, Q1, Q2, Q3, Q4)."New value: +"Fiscal period of the source filing (FY, Q1, Q2, Q3, Q4). Null when the source filing did not encode a fiscal period."
    • changedOutput schema / properties / data / items / properties / fiscal_year / description
      Previous value: -"Fiscal year."New value: +"Fiscal year of the source filing. Null when the source filing did not encode a fiscal year."
    • changedOutput schema / properties / description / description
      Previous value: -"XBRL taxonomy description."New value: +"XBRL taxonomy description for this concept. Often absent for company-extension tags or older concepts."
  18. Changed2 schema fields changed
    • removedInput schema / properties / period_type / default
      Removed value: -"annual"
    • changedInput schema / properties / period_type / description
      Previous value: -"Filter to annual (FY) or quarterly (Q1-Q4) data. \"all\" returns both."New value: +"Filter to annual (FY) or quarterly (Q1-Q4) data. \"all\" returns both. Defaults: \"annual\" for income/cash-flow concepts, \"all\" for balance-sheet (instant) items so a bare friendly-name call returns data without a follow-up retry."
  19. Changed1 schema field changed
    • addedOutput schema / properties / data / items / description
      Added value: +"One reported value with its period, fiscal context, and source filing."
  20. Changed1 schema field changed
    • changedInput schema / properties / concept / description
      Previous value: -"Financial concept — friendly name (e.g., \"revenue\", \"net_income\", \"assets\", \"eps_diluted\") or raw XBRL tag (e.g., \"AccountsPayableCurrent\"). Friendly names auto-resolve to the correct XBRL tags and handle historical tag changes. See secedgar://concepts for the full list of supported names and mappings."New value: +"Financial concept — friendly name (e.g., \"revenue\", \"net_income\", \"assets\", \"eps_diluted\") or raw XBRL tag (e.g., \"AccountsPayableCurrent\"). Friendly names auto-resolve to the correct XBRL tags and handle historical tag changes."
  21. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, it discloses real behavior: automatic deduplication, handling of historical XBRL tag changes, and that the full series is staged as df_<id> and queryable via secedgar_dataframe_query. That side-effect (dataframe registration) is exactly the kind of non-obvious trait an agent needs before calling.

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?

Four compact sentences, front-loaded with purpose then routed alternatives then behavior. Every sentence carries weight, though the dense dataframe mention mid-paragraph could be separated for readability.

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?

With 6 parameters, full schema coverage, an output schema, and safety annotations already present, the description supplies the remaining essentials: discovery path for concept names, dedup/tag-change behavior, and the dataframe staging workflow. Nothing needed to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already explains company, concept, unit, limit, taxonomy, and period_type in detail, including the annual fallback behavior. The description restates friendly-name resolution over the concept parameter but adds no syntax or format detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Get historical XBRL financial data for a company') and immediately clarifies the two accepted concept forms (friendly names vs raw XBRL tags). It distinguishes itself from secedgar_search_concepts by naming that sibling as the discovery path, so an agent can route without opening schemas.

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

Usage Guidelines4/5

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

Explicitly routes the agent: use secedgar_search_concepts to discover friendly names, and use secedgar_dataframe_describe/query to inspect and analyze the staged full series. It does not state when to prefer this over near-neighbors like secedgar_get_snapshot or secedgar_compare_companies, so no exclusion guidance is given.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.