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 1993 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.
Show the query ↓Hide the query ↑
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_2yrFROM fact fJOIN references r ON f.entity_id = r.cikWHERE f.form_type = '20-F' AND f.standard_concept = 'Revenues' AND r.is_active = TRUEGROUP BY r.symbol, r.name, r.sector, r.exchangeHAVING revenue_2024_b > 1ORDER BY cagr_2yr DESCLIMIT 30""" try: with ValueinClient() as client: df = client.run_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.
Show the query ↓Hide the query ↑
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 ON f.entity_id = r.cik 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_pctFROM tech_marginsWHERE revenue > 0 AND gross_profit IS NOT NULLGROUP BY listing_type""" try: with ValueinClient() as client: df = client.run_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.
Show the query ↓Hide the query ↑
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_bFROM fact fJOIN references r ON f.entity_id = r.cikWHERE f.form_type = '20-F' AND f.fiscal_year = 2024 AND r.is_active = TRUEGROUP BY r.symbol, r.name, r.sector, r.exchangeHAVING fcf_b > 0.5ORDER BY fcf_b DESCLIMIT 20""" try: with ValueinClient() as client: df = client.run_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.
Show the query ↓Hide the query ↑
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_bFROM fact fJOIN references r ON f.entity_id = r.cikWHERE f.form_type IN ('10-K', '20-F') AND f.fiscal_year = 2024 AND r.sector = 'Industrials' AND r.is_active = TRUEGROUP BY r.symbol, r.name, r.exchange, f.form_typeHAVING total_assets_b > 5ORDER BY debt_to_equity ASC NULLS LASTLIMIT 30""" try: with ValueinClient() as client: df = client.run_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.
Add international coverage to your strategy
Pro plan includes 20-F filers across the full 19,000+ ticker universe. Institutional adds 6-K interim reports and 40-F (Canadian filers). Free tier available.