Normalized US-GAAP financial statements for every SEC XBRL filer — point-in-time, as originally reported, and trivial to integrate.
as_of to get figures as originally reported on that date — no look-ahead bias in backtests.include_ratios — derived only from the statements in the same response.Every value is also source-linked back to its SEC filing — accession, filed date, a direct EDGAR URL, and the us-gaap tag it was read from (tag order per field) — when you set include_provenance.
Datavidence Financials is also a Model Context Protocol server, so LLM agents
(Claude Desktop and any MCP-compatible client) can call it as tools. It’s published on the
official MCP registry
as ai.datavidence/datavidence-financials.
FL_API_KEY=sandbox_demo_key uvx datavidence-financials
The sandbox_demo_key returns sample data with no account — swap in your key for live data.
{
"mcpServers": {
"datavidence-financials": {
"command": "uvx",
"args": ["datavidence-financials"],
"env": { "FL_API_KEY": "sandbox_demo_key" }
}
}
}
Restart Claude Desktop, then ask: “Get AAPL’s FY2023 financials with ratios.”
get_financials normalized three statements for a company & fiscal year (supports as_of, provenance, ratios).
get_financials_batch up to 25 companies in one call.
list_filings discover a company’s recent SEC filings.
get_revisions how a year’s figures changed across filings — as reported, then restated.
search_companies find a ticker & CIK by company name.
get_usage your quota — free, consumes nothing.
Source & docs: GitHub
· PyPI.
Every plan gets the same data and the full API — plans differ in monthly volume, and Pro and Business also include the point-in-time bulk file. The Free plan includes 1,500 requests a month, and paid plans start at $29 a month. Keys are issued through RapidAPI. See pricing →
Authenticate with an X-API-Key header on every request. Errors use a standard
{ "status": "error", "error": { "code", "message" } } envelope, and every response
carries X-RateLimit-Limit / Remaining / Reset.
sandbox_demo_key as your X-API-Key. It returns a fixed sample dataset
for one example — ticker=AAPL, year=2023 (other companies or years
return a SANDBOX_LIMITED error) — without consuming quota or hitting SEC, so you can wire up
integration before subscribing. All parameters — as_of, include_provenance,
include_ratios — work against it.
curl -H "X-API-Key: sandbox_demo_key" \ "https://api.financials.datavidence.ai/v1/extract-ledger?ticker=AAPL&year=2023&include_ratios=true"
import requests
BASE = "https://api.financials.datavidence.ai"
headers = {"X-API-Key": "sandbox_demo_key"} # swap for your key
r = requests.get(
f"{BASE}/v1/extract-ledger",
params={"ticker": "AAPL", "year": 2023, "include_ratios": True},
headers=headers, timeout=30,
)
r.raise_for_status()
data = r.json()["data"]
print(data["income_statement"]["total_revenue"], data["ratios"]["net_margin"])
const BASE = "https://api.financials.datavidence.ai";
const url = new URL(BASE + "/v1/extract-ledger");
url.search = new URLSearchParams({ ticker: "AAPL", year: "2023", include_provenance: "true" });
const res = await fetch(url, { headers: { "X-API-Key": "sandbox_demo_key" } });
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const { data } = await res.json();
console.log(data.income_statement.total_revenue, data.provenance.income_statement.total_revenue.source_url);
req, _ := http.NewRequest("GET",
"https://api.financials.datavidence.ai/v1/extract-ledger?ticker=AAPL&year=2023", nil)
req.Header.Set("X-API-Key", "sandbox_demo_key")
resp, err := http.DefaultClient.Do(req)
// ... check err, resp.StatusCode, then json.Decode(resp.Body)
GET /v1/extract-ledger normalized three-statement financials for a fiscal year.
GET /v1/extract-ledger/batch the same for up to 25 companies in one request.
GET /v1/revisions how a fiscal year’s figures changed across filings.
GET /v1/companies find a company’s ticker and CIK by name.
GET /v1/submissions trimmed SEC submissions index (recent filings).
GET /v1/usage your current quota — free, doesn't consume a request.
Full schemas in the API reference.
source_url) and for any decisions or
automated/algorithmic use, which are entirely at your own risk. Sample/sandbox
data is a fixed sample with fictional identifiers, for integration testing only.