Developer Platform
Stock fundamentals, charts, and MCP — built for apps and AI agents
The same precomputed data that powers TGMCharts, as an API: 28 computed metric series (20-year daily valuation history), 46 chart renders that embed as PNGs, per-stock summaries, a screener, and a Model Context Protocol server your agent can call directly. Refreshed daily. Missing data stays an honest N/A — never a fabricated zero.
Three ways in
No key, no signup — these work as-is. Responses are CORS-open and cache-friendly.
JSON & CSV data
Per-stock summaries (~5 KB) and computed metric histories — daily P/E, EV/EBITDA, FCF yield, rolling TTM revenue, quarterly margins — with methodology and as-of dates on every payload.
curl https://tgmcharts.com/api/v1/summary/KOcurl "https://tgmcharts.com/api/v1/series/KO/pe-ratio?years=10&format=csv"Chart images
1600×900 PNG renders of any chart metric, in TGMCharts' house style with the as-of date in the frame. Drop the URL into an <img> tag, a README, a newsletter, or an agent's output.
<img src="https://tgmcharts.com/api/v1/charts/NVDA/revenue-quarterly"
width="800" alt="NVDA quarterly revenue" />https://tgmcharts.com/api/v1/charts/KO/revenue?compare=PEPMCP for AI agents
A streamable-HTTP MCP server with six tools: summaries, metric series, chart URLs, comparisons, screening, and the metric catalog. Works with Claude Code, Claude Desktop, and any MCP client.
claude mcp add --transport http tgmcharts https://tgmcharts.com/api/v1/mcp{
"mcpServers": {
"tgmcharts": { "type": "http", "url": "https://tgmcharts.com/api/v1/mcp" }
}
}Live from the API
Each image below is the endpoint's actual response — copy the URL under it.
In a notebook
import requests
summary = requests.get("https://tgmcharts.com/api/v1/summary/KO").json()
print(summary["valuation"]["peRatio"], summary["asOf"]["dataUpdatedAt"])
pe = requests.get("https://tgmcharts.com/api/v1/series/KO/pe-ratio", params={"years": 10}).json()
points = pe["points"] # [{"date": "2016-08-30", "value": 22.1}, ...]CSV output (?format=csv) loads straight into pandas, spreadsheets, or R. Every series response carries its computation methodology in the payload.
In an agent
# Every metric slug is enumerated in the machine-readable spec:
curl https://tgmcharts.com/api/v1/openapi.json
# Feed it to your agent framework (OpenAI function calling,
# Claude tool use, LangChain, …) — or skip the glue entirely
# and connect the MCP server.The spec's x-tgmcharts-metrics extension carries the full catalog (slug, unit, basis, methodology, tier flags) in one fetch, and llms.txt documents the whole machine-readable surface.
The data promise
Precomputed, not proxied
Every response reads stored, precomputed data. No request ever waits on — or varies with — a live vendor call.
Honest N/A
Missing or not-meaningful values come back null or empty with a written reason. Nothing is zero-filled or estimated.
As-of on everything
Payloads and chart frames carry their data date. A public freshness probe (/api/health/freshness) enforces the daily SLA.
Computed in the open
Series responses state their methodology — what was divided by what, on which basis, stepped on which dates.
Metric catalog
One slug = one series. Series = JSON/CSV via /api/v1/series (TGMCharts-computed metrics); Chart = PNG via /api/v1/charts. Statement-level series join the JSON tier when the SEC-filings-sourced fundamentals lane ships.
| Metric | Slug | Unit | Basis | Series | Chart |
|---|---|---|---|---|---|
| P/E Ratio | pe-ratio | ratio | daily | ✓ | ✓ |
| P/S Ratio | ps-ratio | ratio | daily | ✓ | ✓ |
| P/B Ratio | pb-ratio | ratio | daily | ✓ | ✓ |
| P/FCF Ratio | pfcf-ratio | ratio | daily | ✓ | ✓ |
| P/OCF Ratio | pocf-ratio | ratio | daily | ✓ | ✓ |
| EV/EBITDA | ev-ebitda | ratio | daily | ✓ | ✓ |
| EV/EBIT | ev-ebit | ratio | daily | ✓ | ✓ |
| EV/Sales | ev-sales | ratio | daily | ✓ | ✓ |
| EV/FCF | ev-fcf | ratio | daily | ✓ | ✓ |
| EV/Assets | ev-assets | ratio | daily | ✓ | ✓ |
| Earnings Yield | earnings-yield | percent | daily | ✓ | ✓ |
| FCF Yield | fcf-yield | percent | daily | ✓ | ✓ |
| EBITDA Yield | ebitda-yield | percent | daily | ✓ | ✓ |
| OCF Yield | ocf-yield | percent | daily | ✓ | ✓ |
| Dividend Yield | dividend-yield | percent | daily | ✓ | ✓ |
| Total Return | total-return | usd | daily | ✓ | ✓ |
| ROIC | roic | percent | daily | ✓ | ✓ |
| Revenue (TTM) | revenue-ttm | usd | ttm | ✓ | ✓ |
| Net Income (TTM) | net-income-ttm | usd | ttm | ✓ | ✓ |
| Free Cash Flow (TTM) | fcf-ttm | usd | ttm | ✓ | ✓ |
| EBITDA (TTM) | ebitda-ttm | usd | ttm | ✓ | ✓ |
| Capital Expenditure (TTM) | capex-ttm | usd | ttm | ✓ | ✓ |
| Buybacks (TTM) | buybacks-ttm | usd | ttm | ✓ | ✓ |
| Stock-Based Compensation (TTM) | sbc-ttm | usd | ttm | ✓ | ✓ |
| R&D Expense (TTM) | rd-ttm | usd | ttm | ✓ | ✓ |
| Gross Margin (Quarterly) | gross-margin-quarterly | percent | quarterly | ✓ | ✓ |
| Operating Margin (Quarterly) | operating-margin-quarterly | percent | quarterly | ✓ | ✓ |
| Net Margin (Quarterly) | net-margin-quarterly | percent | quarterly | ✓ | ✓ |
| Revenue | revenue | usd | annual | — | ✓ |
| Net Income | net-income | usd | annual | — | ✓ |
| EPS | eps | usdPerShare | annual | — | ✓ |
| Free Cash Flow | free-cash-flow | usd | annual | — | ✓ |
| EBITDA | ebitda | usd | annual | — | ✓ |
| Capital Expenditure | capex | usd | annual | — | ✓ |
| Buybacks | buybacks | usd | annual | — | ✓ |
| Stock-Based Compensation | stock-based-comp | usd | annual | — | ✓ |
| R&D Expense | r-and-d | usd | annual | — | ✓ |
| Gross Margin | gross-margin | percent | annual | — | ✓ |
| Operating Margin | operating-margin | percent | annual | — | ✓ |
| Profit Margin | profit-margin | percent | annual | — | ✓ |
| Return on Equity | roe | percent | annual | — | ✓ |
| Return on Assets | roa | percent | annual | — | ✓ |
| Revenue (Quarterly) | revenue-quarterly | usd | quarterly | — | ✓ |
| Net Income (Quarterly) | net-income-quarterly | usd | quarterly | — | ✓ |
| EPS (Quarterly) | eps-quarterly | usdPerShare | quarterly | — | ✓ |
| Free Cash Flow (Quarterly) | fcf-quarterly | usd | quarterly | — | ✓ |
Pricing
Request units: JSON call = 1 · chart render = 5 · MCP tool call = 2. Keys and upgrades live in the developer console; while checkout is opening, the waitlist (mention "API waitlist") gets you in first.
Free
Live today$0
- 1,000 units/day fair use
- Works with or without a key
- All series + chart metrics
- MCP server access
- Attribution required
- Commercial use at this volume
Builder
Coming soon$19/mo
- 100k units/mo
- Exact per-account metering
- Priority coverage onboarding
- Email support
Pro
Coming soon$49/mo
- 1M units/mo
- Exact per-account metering
- Higher burst
- Priority support
Scale
Coming soon$199/mo
- 10M units/mo included
- $0.10 per 1k overage (metered)
- Custom limits
- Priority support
Free keys are live now in the developer console with exact per-account metering. Paid checkout opens shortly (preview pricing — confirmed at launch); keyless free use stays governed by edge fair-use limits.
FAQ
Is there a free stock fundamentals API?
Yes — this one. TGMCharts serves per-stock summaries, 20-year daily valuation series (P/E, P/S, EV/EBITDA, FCF yield, dividend yield, ROIC, total return), rolling TTM flows, and quarterly margins for 800+ US-listed stocks and ETFs, free, CORS-open, and keyless, with attribution. Data is precomputed daily from company filings and market data.
How do I connect Claude or another AI agent to stock market data?
Point any MCP client at the TGMCharts MCP server: `claude mcp add --transport http tgmcharts https://tgmcharts.com/api/v1/mcp`. The agent gets six tools — summaries, metric histories, chart-image URLs, comparisons, screening, and the metric catalog. Frameworks that consume OpenAPI can instead generate tools from /api/v1/openapi.json.
Can I get stock charts as images from an API?
Yes — GET /api/v1/charts/{symbol}/{metric} returns a 1600×900 PNG of the metric's history in TGMCharts' chart style, ready for <img> tags, READMEs, newsletters, and agent outputs. 46 chart metrics including revenue, EPS, free cash flow, margins, and the daily valuation-ratio lines, with ?compare= for two-company bars.
Do I need an API key?
No — the free tier is keyless and CORS-open. Keys (created at /developers/keys, sent as Authorization: Bearer tgm_live_… or x-api-key) add exact metering, per-account quotas, and paid tiers. A keyed request bypasses the shared cache, gets X-RateLimit headers, and 401s loudly on a bad key instead of silently downgrading.
What does the free tier require?
Attribution: name TGMCharts as the data source and link tgmcharts.com where the data or charts are shown ("data by TGMCharts"). Chart images carry the attribution in the render. Fair use is 1,000 request-units per day (JSON call = 1 unit, chart render = 5, MCP tool call = 2).
Where does the data come from, and what can I redistribute?
Everything is precomputed daily — no request ever hits a live market-data vendor. The JSON/CSV series tier serves TGMCharts-computed metrics (daily valuation and yield series, rolling TTM flows, quarterly margins, ROIC, total return). Statement-level line items are available as chart renders today and join the JSON tier when our SEC-filings-sourced fundamentals lane ships.
How fresh is the data, and how should I cache?
Data refreshes daily after the US market close (every covered symbol within ~24h; freshness probe: /api/health/freshness). Cache responses for at least an hour — endpoints send cache headers that do this for you.
What happens for missing or not-meaningful values?
Honest states, never fabrication: unknown symbols 404 with an onboarding hint, metrics that don't apply to a company type return null with a written explanation, and empty histories return [] with a note. Nothing is zero-filled.
Can I use it commercially?
Yes — free-tier volumes with attribution cover commercial applications. Bulk redistribution or resale of the data as a dataset is not allowed. See the API terms on the terms page.
Endpoints: /api/v1/summary/{symbol} · /api/v1/series/{symbol}/{metric} · /api/v1/charts/{symbol}/{metric} · /api/v1/mcp · openapi.json · API keys · API terms