20-FGlobal companies. Same schema.
The 20-F is the 10-K equivalent for foreign companies listed on US exchanges. Alibaba, ASML, Novo Nordisk, Toyota, SAP — these international giants file annually with the SEC. Valuein standardizes their XBRL-tagged financials to the same schema as domestic 10-K filers, so your queries work across the entire universe without case-by-case adjustments.
- IFRS and US GAAP financials on the same schema
- ADR and directly-listed foreign companies on US exchanges
- Cross-listed companies queryable alongside S&P500
- Annual data from 1994 to present
- Amendment tracking — 20-F/A restated values preserved
Example 20-F filers in dataset
Full universe includes 800+ foreign private issuers filing with the SEC.
Global equity queries that deliver alpha
Production-ready queries using ValueinClient combining 20-F and 10-K data for cross-border analysis.
Cross-Listed International Revenue Screener
Compare revenue scale and growth across all 20-F filers on US exchanges. International companies are frequently mispriced because most quant strategies focus solely on domestic filers.
from valuein_sdk import ValueinClient, ValueinError
sql = """
SELECT
r.symbol, r.name, r.sector,
r.exchange,
MAX(CASE WHEN standard_concept = 'Revenues' AND fiscal_year = 2024 THEN numeric_value END)
/ 1e9 AS revenue_2024_b,
MAX(CASE WHEN standard_concept = 'Revenues' AND fiscal_year = 2022 THEN numeric_value END)
/ 1e9 AS revenue_2022_b,
ROUND(
POWER(
MAX(CASE WHEN standard_concept = 'Revenues' AND fiscal_year = 2024 THEN numeric_value END) /
NULLIF(MAX(CASE WHEN standard_concept = 'Revenues' AND fiscal_year = 2022 THEN numeric_value END), 0),
0.5
) - 1, 3
) AS cagr_2yr
FROM fact f
JOIN references r USING (entity_id)
WHERE f.form_type = '20-F'
AND f.standard_concept = 'Revenues'
AND r.is_active = TRUE
GROUP BY r.symbol, r.name, r.sector, r.exchange
HAVING revenue_2024_b > 1
ORDER BY cagr_2yr DESC
LIMIT 30
"""
try:
with ValueinClient() as client:
df = client.query(sql)
print(df)
except ValueinError as e:
print(f"Valuein error: {e}")Global Gross Margin Comparison — ADRs vs S&P500
Test whether cross-listed international companies in the same sector trade at a discount despite comparable margins — a classic pair-trade setup for global fundamental analysts.
from valuein_sdk import ValueinClient, ValueinError
sql = """
WITH tech_margins AS (
SELECT
r.symbol, r.name,
r.sector,
f.form_type,
CASE WHEN f.form_type = '10-K' THEN 'US Domestic' ELSE 'ADR / Foreign' END AS listing_type,
MAX(CASE WHEN standard_concept = 'GrossProfit' THEN numeric_value END) AS gross_profit,
MAX(CASE WHEN standard_concept = 'Revenues' THEN numeric_value END) AS revenue
FROM fact f
JOIN references r USING (entity_id)
WHERE f.form_type IN ('10-K', '20-F')
AND f.fiscal_year = 2024
AND r.sector = 'Technology'
AND r.is_active = TRUE
GROUP BY r.symbol, r.name, r.sector, f.form_type
)
SELECT
listing_type,
COUNT(*) AS companies,
ROUND(AVG(gross_profit / NULLIF(revenue, 0)) * 100, 1) AS avg_gross_margin_pct,
ROUND(MEDIAN(gross_profit / NULLIF(revenue, 0)) * 100, 1) AS median_gross_margin_pct
FROM tech_margins
WHERE revenue > 0 AND gross_profit IS NOT NULL
GROUP BY listing_type
"""
try:
with ValueinClient() as client:
df = client.query(sql)
print(df)
except ValueinError as e:
print(f"Valuein error: {e}")Operating Cash Flow Quality — International Universe
FCF conversion across the largest cross-listed companies. High FCF conversion in international companies is often overlooked by US-focused analysts — creating systematic mispricings.
from valuein_sdk import ValueinClient, ValueinError
sql = """
SELECT
r.symbol, r.name, r.sector, r.exchange,
ROUND(
MAX(CASE WHEN standard_concept = 'NetCashProvidedByUsedInOperatingActivities'
THEN COALESCE(derived_quarterly_value, numeric_value) END) / 1e9, 2
) AS cfo_b,
ROUND(
ABS(MAX(CASE WHEN standard_concept = 'PaymentsToAcquirePropertyPlantAndEquipment'
THEN numeric_value END)) / 1e9, 2
) AS capex_b,
ROUND(
(MAX(CASE WHEN standard_concept = 'NetCashProvidedByUsedInOperatingActivities'
THEN COALESCE(derived_quarterly_value, numeric_value) END) -
ABS(MAX(CASE WHEN standard_concept = 'PaymentsToAcquirePropertyPlantAndEquipment'
THEN numeric_value END))) / 1e9, 2
) AS fcf_b,
ROUND(
MAX(CASE WHEN standard_concept = 'NetIncomeLoss' THEN numeric_value END) / 1e9, 2
) AS net_income_b
FROM fact f
JOIN references r USING (entity_id)
WHERE f.form_type = '20-F'
AND f.fiscal_year = 2024
AND r.is_active = TRUE
GROUP BY r.symbol, r.name, r.sector, r.exchange
HAVING fcf_b > 0.5
ORDER BY fcf_b DESC
LIMIT 20
"""
try:
with ValueinClient() as client:
df = client.query(sql)
print(df)
except ValueinError as e:
print(f"Valuein error: {e}")Debt Structure Comparison — Global Industrials
Compare leverage ratios across domestic and foreign industrial filers. IFRS lease accounting vs US GAAP creates visible capital structure differences — surface that discrepancy programmatically.
from valuein_sdk import ValueinClient, ValueinError
sql = """
SELECT
r.symbol, r.name, r.exchange,
CASE WHEN f.form_type = '20-F' THEN 'International' ELSE 'US' END AS universe,
ROUND(
MAX(CASE WHEN standard_concept = 'LongTermDebt' THEN numeric_value END) /
NULLIF(MAX(CASE WHEN standard_concept = 'StockholdersEquity' THEN numeric_value END), 0),
2
) AS debt_to_equity,
ROUND(
MAX(CASE WHEN standard_concept = 'LongTermDebt' THEN numeric_value END) / 1e9, 2
) AS long_term_debt_b,
ROUND(
MAX(CASE WHEN standard_concept = 'Assets' THEN numeric_value END) / 1e9, 1
) AS total_assets_b
FROM fact f
JOIN references r USING (entity_id)
WHERE f.form_type IN ('10-K', '20-F')
AND f.fiscal_year = 2024
AND r.sector = 'Industrials'
AND r.is_active = TRUE
GROUP BY r.symbol, r.name, r.exchange, f.form_type
HAVING total_assets_b > 5
ORDER BY debt_to_equity ASC NULLS LAST
LIMIT 30
"""
try:
with ValueinClient() as client:
df = client.query(sql)
print(df.groupby("universe")["debt_to_equity"].describe())
except ValueinError as e:
print(f"Valuein error: {e}")Global research with AI
Ask Claude to compare international companies against domestic peers, surface undervalued ADRs by sector, or analyze revenue trends for specific cross-listed companies — all from your 20-F dataset.
Global comparables in Excel
Combine 10-K and 20-F data in the same Power Query to create a global sector comparables sheet across domestic and international listings.
let
ApiKey = "vi_live_your_key",
BaseUrl = "https://data.valuein.biz/v1/full/fact",
Src = Parquet.Document(
Web.Contents(BaseUrl,
[Headers = [#"X-API-Key" = ApiKey]])
),
ForeignOnly = Table.SelectRows(Src,
each [form_type] = "20-F"
and [standard_concept] = "Revenues"
and [fiscal_year] = 2024),
Sorted = Table.Sort(ForeignOnly,
{{"numeric_value", Order.Descending}}),
Top50 = Table.FirstN(Sorted, 50)
in
Top50Add international coverage to your strategy
Institutional plan includes the full universe with 20-F filers. Free tier available.