Extract geographic revenue breakdowns from SEC EDGAR 10-K filings — the revenue-by-country split a company actually disclosed, resolved to ISO country codes.
import edgar_geo_revenue as egr
egr.set_user_agent("Your Name your@email.com")
egr.fetch_geo_revenue("AAPL")
# {'fiscal_year': 2025, 'total_revenue_usd': 416161000000,
# 'segments': [['US', 36.47], ['CN', 15.47]],
# 'region_segments': [['INTL', 48.06]], 'pct_coverage': 100.0}
Source on GitHub · MIT licensed
The filing is easy to fetch. The difficulty is that revenue-by-geography has no standard location, table shape, or label vocabulary in EDGAR:
R1.htm to R200.htm.Rules here survived a production audit of 463 SEC filers, of which 262 had a usable geographic disclosure. Much of the remainder genuinely do not disclose one.
Each of these is a plausible heuristic that was tried in production, produced wrong numbers, and was removed:
Combined place labels are resolved on the set of places, not the label text, so
{EUROPE, MEA} is recognised as EMEA and {US, CA} as North America across every punctuation
variant.
| Field | Meaning |
|---|---|
fiscal_year |
Fiscal year from the filing’s own period metadata |
total_revenue_usd |
Total revenue for that year, USD |
segments |
[[ISO2, percent], …] country-level rows |
region_segments |
[[REGION, percent], …] genuinely region-level rows |
pct_coverage |
Share of total revenue the rows account for |
None means no geographic disclosure was found — a normal result, not an error.
This library fetches only public filings from SEC EDGAR, and it is built to stay inside the SEC’s fair-access policy for automated tools:
A real contact address is required, with no default. SEC asks that automated requests
identify the requester. There is no fallback User-Agent, and calling without one raises
UserAgentNotSet rather than issuing an anonymous request:
egr.set_user_agent("Your Name your@email.com")
# or: export EDGAR_GEO_USER_AGENT="Your Name your@email.com"
company_tickers.json, the submissions API, and
filing archive R-files. No authenticated, bulk, or paywalled endpoint is touched.Filing content is public domain as a US government work. This library is MIT licensed and is not affiliated with or endorsed by the SEC.
Built from the extraction layer behind MetricsHour, which publishes geographic revenue exposure for listed companies alongside macro and trade data. For the parsed dataset with country pages and screening, see metricshour.com/screener.