MCP Server live — AI agents can now query 105M+ SEC facts. Connect your agent →
ValueinValuein
All SEC Filing Coverage
20-F
Foreign Private Issuer

Global 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

BABAAlibaba Group
ASMLASML Holding
SAPSAP SE
TMToyota Motor
NVONovo Nordisk
SONYSony Group
SHOPShopify (dual-listed)
RIORio Tinto

Full universe includes 800+ foreign private issuers filing with the SEC.

Python SDK

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}")
MCP Server

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.

Compare revenue growth for the top 20 ADR companies vs their S&P500 sector peers in 2024
Which foreign private issuers in the Technology sector have higher operating margins than the S&P500 average?
Show me the FCF conversion ratio for all 20-F filers with revenue over $10 billion
What is Samsung's revenue trend over the last 5 years from 20-F filings?
Excel Power Query

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.

Power Query M-Code — 20-F Revenue Data
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
    Top50

Add international coverage to your strategy

Institutional plan includes the full universe with 20-F filers. Free tier available.