Skip to main content
Glama

Valuein — SEC EDGAR Fundamentals & Smart-Money Data

Point-in-Time Valuation Ratios

get_pit_valuation_ratios
Read-onlyIdempotent

Current and historical valuation multiples for a company. Omit as_of_date and it returns today's P/E, P/S, P/B, EV/EBITDA, EV/Revenue and FCF yield, computed from the latest EOD close and the latest TTM financials. Use it for any "what is X's P/E " / "how is X valued right now" question — never derive a multiple yourself by dividing a price by an earnings figure; that is exactly the arithmetic the provenance contract forbids. Pass as_of_date to get the same snapshot on a specific historical date — zero look-ahead bias (the 'Compustat + CRSP merge' pattern). The EOD close is sourced from stock_price_daily.parquet at as_of_date (or the nearest prior trading day), and all financial figures come from SEC filings with accepted_at ≤ as_of_date so no future information is used. TTM financials are computed by summing the four most recent standalone-quarter values (or using the most recent FY filing when no quarterly series is available). Returns: price snapshot (close, price_date, is_exact_date_match), TTM P&L (revenue, gross_profit, operating_income, EBITDA, net_income, OCF, CapEx, FCF), balance sheet snapshot (shares, cash, debt, book equity), derived market values (market_cap, enterprise_value), valuation multiples (P/E, P/S, P/B, EV/EBITDA, EV/Revenue, FCF yield %), and TTM margins (gross, operating, net). Use for: historical valuation screens, backtesting entry-point multiples, forensic audit of peak / trough valuations, comparing a company's current multiples to its own history. Pro and Institutional only — full = all companies & full history, pro = all companies & last 15 years. On the free plans this tool returns an ENTITLEMENT_DENIED upgrade envelope (required_plan 'pro') BEFORE any read: the EOD close it needs comes from the daily price series, market data the free tiers do not carry. Every plan still has the multiples at each fiscal year end via get_financial_ratios (category 'valuation') and get_valuation_metrics.

Input Schema

NameRequiredDescriptionDefault
tickerYesStock ticker symbol, e.g. AAPL, MSFT — or a CIK (SEC identifier), e.g. '0000320193'.
as_of_dateYesThe historical date for the valuation snapshot (YYYY-MM-DD). The EOD close on the nearest prior trading day will be used. All financials are PIT-filtered to filings accepted on or before this date. Use a date in the recent past (within the last year) to get current-ish multiples; use any historical date back to 1993 (subject to your plan's history window) to get the multiples as they would have been observable on that date.

Output Schema

NameRequiredDescriptionDefault
cikYes
cashYes
noteYes
_metaYesProvenance envelope — data lineage for every MCP response
closeYes
tickerYes
ttm_fcfYes
ttm_ocfYes
currencyYes
net_debtYes
pb_ratioYes
pe_ratioYes
ps_ratioYes
ev_ebitdaYes
ttm_capexYes
as_of_dateYes
ev_revenueYes
market_capYes
price_dateYes
total_debtYes
ttm_ebitdaYes
book_equityYes
ttm_revenueYes
company_nameYes
fcf_yield_pctYes
net_margin_pctYes
shares_dilutedYes
ttm_net_incomeYes
ttm_period_endYes
enterprise_valueYes
gross_margin_pctYes
ttm_gross_profitYes
reporting_currencyYesISO currency of every monetary financial field (read from the facts' units). When not USD, `close` (USD) cannot be combined with them: market_cap, enterprise_value, pe_ratio, ps_ratio, pb_ratio, ev_ebitda, ev_revenue and fcf_yield_pct are null.
is_exact_date_matchYes
operating_margin_pctYes
ttm_operating_incomeYes
financials_accepted_atYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / basis / description
      Previous value: -"payg_charge = real charge (agent-pay or your balance). payg_rate_card = indicative price, not billed."New value: +"payg_charge = real pay-per-call charge (a card or MPP payment through agent-pay). payg_rate_card = indicative price, not billed."
  2. Changed2 schema fields changed
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / basis / description
      Previous value: -"payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed."New value: +"payg_charge = real charge (agent-pay or your balance). payg_rate_card = indicative price, not billed."
    • changedOutput schema / properties / _meta / properties / cost_usd / properties / billed / description
      Previous value: -"true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free."New value: +"true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value only: no charge was made for this call (it was within your plan)."
  3. Changed2 schema fields changed
    • addedOutput schema / properties / reporting_currency
      Added value: +{
      +  "description": "ISO currency of every monetary financial field (read from the facts' units). When not USD, `close` (USD) cannot be combined with them: market_cap, enterprise_value, pe_ratio, ps_ratio, pb_ratio, ev_ebitda, ev_revenue and fcf_yield_pct are null.",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "_meta",
      -  "ticker",
      -  "cik",
      -  "company_name",
      -  "as_of_date",
      -  "price_date",
      -  "close",
      -  "currency",
      -  "is_exact_date_match",
      -  "ttm_period_end",
      -  "financials_accepted_at",
      -  "ttm_revenue",
      -  "ttm_gross_profit",
      -  "ttm_operating_income",
      -  "ttm_ebitda",
      -  "ttm_net_income",
      -  "ttm_ocf",
      -  "ttm_capex",
      -  "ttm_fcf",
      -  "shares_diluted",
      -  "cash",
      -  "total_debt",
      -  "net_debt",
      -  "book_equity",
      -  "market_cap",
      -  "enterprise_value",
      -  "pe_ratio",
      -  "ps_ratio",
      -  "pb_ratio",
      -  "ev_ebitda",
      -  "ev_revenue",
      -  "fcf_yield_pct",
      -  "gross_margin_pct",
      -  "operating_margin_pct",
      -  "net_margin_pct",
      -  "note"
      -]New value: +[
      +  "_meta",
      +  "ticker",
      +  "cik",
      +  "company_name",
      +  "as_of_date",
      +  "price_date",
      +  "close",
      +  "currency",
      +  "reporting_currency",
      +  "is_exact_date_match",
      +  "ttm_period_end",
      +  "financials_accepted_at",
      +  "ttm_revenue",
      +  "ttm_gross_profit",
      +  "ttm_operating_income",
      +  "ttm_ebitda",
      +  "ttm_net_income",
      +  "ttm_ocf",
      +  "ttm_capex",
      +  "ttm_fcf",
      +  "shares_diluted",
      +  "cash",
      +  "total_debt",
      +  "net_debt",
      +  "book_equity",
      +  "market_cap",
      +  "enterprise_value",
      +  "pe_ratio",
      +  "ps_ratio",
      +  "pb_ratio",
      +  "ev_ebitda",
      +  "ev_revenue",
      +  "fcf_yield_pct",
      +  "gross_margin_pct",
      +  "operating_margin_pct",
      +  "net_margin_pct",
      +  "note"
      +]
  4. Added
  5. Removed
  6. Changed1 schema field changed
    • changedOutput schema / properties / _meta / properties / fundamentals_as_of / description
      Previous value: -"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt. Use THIS — not `last_updated` — when telling a user how current the fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to."New value: +"ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt in bulk. Use THIS — not `last_updated` — when telling a user how current the cross-sectional fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to. It is a floor for a single filer, not a ceiling: a filer with a live partition receives its filing, facts and ratios intraday (minutes after EDGAR dissemination), so an entity-scoped read may carry a filing newer than this; cross-sectional ranks (factor scores, earnings signals) refresh with the weekly bulk export."
  7. Changed2 schema fields changed
    • changedInput schema / properties / ticker / description
      Previous value: -"Stock ticker symbol, e.g. AAPL, MSFT"New value: +"Stock ticker symbol, e.g. AAPL, MSFT — or a CIK (SEC identifier), e.g. '0000320193'."
    • changedInput schema / properties / ticker / pattern
      Previous value: -"^[A-Za-z.\\-]+$"New value: +"^[A-Za-z0-9.\\-]+$"
  8. Changed2 schema fields changed
    • addedOutput schema / properties / _meta / properties / fundamentals_as_of
      Added value: +{
      +  "description": "ISO timestamp when the FINANCIAL STATEMENTS were last rebuilt. Use THIS — not `last_updated` — when telling a user how current the fundamentals are. The snapshot is republished on every weekday price refresh while the statements are carried forward unchanged, so `last_updated` can be far more recent than the numbers it sits next to.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / _meta / properties / price_as_of
      Added value: +{
      +  "description": "ISO timestamp when the price surfaces were last refreshed.",
      +  "type": "string"
      +}
  9. Changed2 schema fields changed
    • addedOutput schema / properties / _meta / properties / cost_usd
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Per-call cost transparency. Omitted for subscription-only tools that have no PAYG-equivalent price.",
      +  "properties": {
      +    "amount_usd": {
      +      "minimum": 0,
      +      "type": "number"
      +    },
      +    "basis": {
      +      "description": "payg_charge = real agent-pay charge. payg_rate_card = indicative price, not billed.",
      +      "enum": [
      +        "payg_charge",
      +        "payg_rate_card"
      +      ],
      +      "type": "string"
      +    },
      +    "billed": {
      +      "description": "true = this amount was actually charged via PAYG for this call. false = indicative PAYG-equivalent value; your plan already covers this call for free.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "amount_usd",
      +    "billed",
      +    "basis"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / _meta / properties / latency_ms
      Added value: +{
      +  "description": "Wall-clock milliseconds this tool call took, measured server-side around the handler.",
      +  "minimum": 0,
      +  "type": "integer"
      +}
  10. Added

TDQS

A4.9/5.0
Behavior5/5

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

It discloses critical operational behavior, including data sourcing (stock_price_daily.parquet), calculation methods (TTM summation), and integrity checks (SEC filings accepted_at <= as_of_date to ensure zero look-ahead bias). This is highly transparent.

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?

While the definition is quite long, every sentence provides essential, high-density information regarding scope, method, and limitations, making its length justified by its complexity. It is highly effective.

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?

The description covers data quality control (look-ahead bias), pricing constraints (Pro/Institutional vs Free), and specific historical data methods, leaving the agent with all necessary context to call the tool correctly and manage expectations.

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?

The description adds vital context to both parameters: it defines the date format requirement for historical lookback and specifies the data retention limits (e.g., 'recent past' vs. 'back to 1993').

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?

The description clearly defines the tool as providing current and historical valuation multiples (P/E, P/S, etc.) and explicitly states its primary function: answering 'what is X's P/E' questions.

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?

It provides clear instructions on using the `as_of_date` parameter (today's vs. historical snapshot) and explicitly warns against a specific misuse: deriving multiples manually, routing users to relevant siblings (`get_financial_ratios` and `get_valuation_metrics`).

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.