Finance & Market Data
Financial Modeling Prep API: Pricing, Limits & Examples
Compare Financial Modeling Prep API pricing, free-tier limits, endpoints, code examples, validation checks, and production integration patterns for AI agents.
Published: April 12, 2026 · By the QVeris Team

FMP is broad and easy to test, but production fit depends on plan access and data semantics
Financial Modeling Prep provides stock quotes, historical prices, company profiles, financial statements, ratios, calendars, news, filings, and other market datasets through JSON APIs. The Basic plan is useful for evaluation and small personal workflows; commercial products should verify endpoint access, history, freshness, bandwidth, display rights, and redistribution terms before launch.
A practical fit when one API must cover fundamentals, prices, calendars, profiles, and news.
Do not assume every documented endpoint, market, history window, or display use is included in every plan.
Return source, symbol, exchange, currency, event time, fiscal period, units, and freshness with the data.
Who should use the Financial Modeling Prep API?
Teams that need familiar REST endpoints for profiles, quotes, statements, metrics, and calendars.
Analysts building scheduled earnings, filings, news, price, or fundamental-data workflows.
Agent builders that can validate structured results before a model summarizes or acts on them.
Financial Modeling Prep pricing and free-tier limits
The following personal-use prices and limits were checked against FMP’s official pricing page on July 30, 2026. Pricing, endpoint access, and licensing can change; confirm the official page before purchasing or launching.
| Plan | Listed price | Call limit | Best starting point |
|---|---|---|---|
| Basic | Free | 250 calls/day | Testing, learning, personal prototypes, end-of-day and reference data |
| Starter | $22/month* | 300 calls/minute | US fundamentals, historical prices, news, crypto, and forex |
| Premium | $59/month* | 750 calls/minute | Longer history, more regions, intraday charts, indicators, and corporate calendars |
| Ultimate | $149/month* | 3,000 calls/minute | Global coverage, transcripts, holdings, bulk delivery, and deeper access |
*Prices shown by FMP for annual billing when checked. FMP also documents trailing 30-day bandwidth limits and separate personal versus commercial use. Displaying or redistributing FMP data may require an additional agreement.
What data and endpoints does the FMP API provide?
Use quote, batch quote, end-of-day history, and intraday chart endpoints for market snapshots and time series.
Validate: venue, delay, session, adjustmentRetrieve income statements, balance sheets, cash flows, key metrics, ratios, growth, and reported financials.
Validate: period, currency, units, restatementsTrack earnings, dividends, splits, IPOs, and economic releases. FMP lists earnings-calendar refreshes every three hours.
Validate: timezone, announced date, update timeAdd company identity, market capitalization, industry, news, press releases, SEC material, analyst data, and transcripts where the plan permits.
Validate: source, publication time, entitlementStep-by-step FMP API implementation
Start with a narrow operation such as company profile, quote, income statement, or earnings calendar.
Load it from an environment variable and append it as the apikey query parameter.
Distinguish HTTP errors, FMP error payloads, empty results, incomplete pages, and valid records.
Preserve endpoint, provider, requested symbol, retrieval time, source timestamps, and plan-dependent warnings.
Quotes, calendars, profiles, statements, and transcripts should not share one cache TTL.
Give the model typed operations and bounded parameters rather than arbitrary URLs or raw API keys.
curl "https://financialmodelingprep.com/stable/quote?symbol=AAPL&apikey=YOUR_API_KEY"
const url = new URL("https://financialmodelingprep.com/stable/profile");
url.searchParams.set("symbol", "AAPL");
url.searchParams.set("apikey", process.env.FMP_API_KEY);
const response = await fetch(url, { signal: AbortSignal.timeout(8000) });
if (!response.ok) throw new Error(`FMP HTTP ${response.status}`);
const rows = await response.json();
if (!Array.isArray(rows) || rows.length === 0) {
throw new Error("FMP returned no company profile");
}
const result = {
provider: "financial-modeling-prep",
endpoint: "profile",
requestedSymbol: "AAPL",
retrievedAt: new Date().toISOString(),
data: rows[0]
};
Validation checklist before an agent uses FMP data
| Check | What to verify | Failure if skipped |
|---|---|---|
| Identity | Symbol, exchange, CIK, instrument type | Wrong company or listing |
| Time | Event time, retrieval time, timezone, market session | Old data described as current |
| Financial period | Fiscal year, quarter, filing date, accepted date | Mixing annual and quarterly values |
| Units | Currency, scale, percentage, per-share basis | Million-versus-unit or currency errors |
| Completeness | Nulls, pagination, record limits, historical window | Partial results that look complete |
| Market semantics | Real-time or delayed, adjusted or unadjusted, venue and coverage | Invalid comparisons and misleading alerts |
Direct FMP integration, MCP, or QVeris routing?
| Approach | Use when | You own |
|---|---|---|
| Direct FMP API | The application has a fixed set of known endpoints and one primary provider. | Authentication, client code, validation, retries, caching, and schema changes. |
| FMP MCP server | An MCP-compatible client needs FMP-backed tools inside a controlled assistant workflow. | Server operation, credentials, tool schemas, policy, and provider-specific errors. |
| QVeris capability routing | The agent must discover, inspect, compare, and call across multiple financial capabilities. | Business policy and validation rules; QVeris provides a common discovery and execution layer. |
Security, cost, and latency controls
- Keep FMP keys in server-side secret storage.
- Redact URLs and query strings from logs.
- Allowlist endpoints and bound symbols, dates, and page sizes.
- Cache slow-changing profiles and statements.
- Batch symbols only where the plan and endpoint allow it.
- Track daily calls, rolling bandwidth, retries, and response size.
- Use separate TTLs for quotes, calendars, profiles, and statements.
- Set connection and total timeouts.
- Do not silently serve stale cache after a provider failure.
Troubleshooting common FMP API failures
| Symptom | Likely cause | First action |
|---|---|---|
| 401 / 403 | Invalid key, unavailable endpoint, or plan restriction | Test the key in the official docs and inspect endpoint plan access. |
| 429 | Daily, per-minute, or workflow retry limit reached | Stop automatic retries, add backoff, cache, and inspect usage. |
| Empty array | Wrong symbol, unsupported market, no record, or restricted history | Resolve the instrument first and test a known symbol and date. |
| Values disagree | Different fiscal period, currency, units, adjustment, or update time | Compare raw records and metadata before changing prompts. |
| Agent gives a confident wrong answer | The tool returned data without evidence, warnings, or validation status | Return provenance and validation fields, and block synthesis on failed checks. |
FMP alternatives: choose by the exact workflow
Do not choose a provider from endpoint count alone. Compare the markets, fields, update cycles, history, limits, licensing, and failure behavior your application actually needs.
Compare fundamentals-oriented breadth with market-data depth, latency, and asset coverage.
Compare free access, technical indicators, fundamentals, history, and production limits.
Compare real-time workflows, news, alternative signals, fundamentals, and commercial fit.
A QVeris implementation pattern for FMP-backed agents
Keep FMP as a provider-backed capability, not as an arbitrary URL the model can construct. A production flow should separate intent, discovery, inspection, execution, validation, and final synthesis.
Determine whether the user needs a quote, statement, calendar, profile, news item, or multi-source research workflow.
Confirm required parameters, provider notes, result fields, freshness expectations, and cost before calling.
Call the selected capability, validate identity, time, units, period, completeness, and preserve the execution record.
Financial Modeling Prep API FAQ
Is the Financial Modeling Prep API free?
How do I authenticate an FMP API request?
apikey query parameter to a Stable endpoint. Keep the key in a server-side secret rather than shipping it in browser code.Does FMP provide real-time stock prices?
Does FMP provide an earnings calendar?
What should an AI agent validate in FMP data?
When should I use QVeris with FMP?
What are common Financial Modeling Prep alternatives?
Official FMP sources and related QVeris guides
Prove one FMP workflow before expanding
Choose one endpoint, one known symbol, and one expected result. Validate identity, time, units, plan access, error handling, and provenance before adding more datasets or allowing an agent to select capabilities dynamically.
A verified profile link does not guarantee entitlement, field availability, price or current execution success; inspect the current contract before calling.
