Plan: Free and above · Credits: 1 per call; screen facets are free
The Size and Identity Filters
number
Market-cap floor in USD;
market_cap_usd_lte sets the ceiling. Converted through a weekly FX snapshot; each row also carries market_cap_local and market_cap_currency so the conversion is checkable. There is deliberately no local-currency filter — 10bn JPY and 10bn USD differ by two orders of magnitude.string
ISO country code of domicile (
US, JP, TW). sector, industry and exchange narrow the same way — values exactly as the free facets endpoint spells them. has_cik=true is the honest form of “US filers only”, which country cannot answer.The Valuation Filters
pe_ttm_gte/_lte (trailing-twelve-month PE), pb_gte/_lte (price to book), ps_ttm_gte/_lte (price to TTM sales), fcf_yield_gte/_lte (free cash flow over market cap, a fraction, may be negative), dividend_yield_gte/_lte (a fraction: 0.03 is 3%).
A loss-maker has no PE. pe_ttm is null rather than negative, so sorting ascending gives the cheapest profitable companies and can never rank losses as cheap. Screen the loss-makers themselves with is_lossmaking=true. pb goes null the same way when book equity is negative — common among heavy repurchasers.
The Profitability, Leverage and Growth Filters
gross_margin, operating_margin, net_margin, return_on_equity, return_on_assets and return_on_invested_capital — all fractions (0.2 = 20%) with _gte/_lte bounds. debt_to_equity_gte/_lte bounds total debt over shareholders’ equity. payout_ratio is dividends over earnings, as a fraction.
Growth is year-on-year, as fractions against the same period one year earlier: revenue_growth_yoy, eps_growth_yoy, earnings_growth_yoy, free_cash_flow_growth_yoy, book_value_growth_yoy, operating_income_growth_yoy and ebitda_growth_yoy. A growth rate is null when the year-ago base was zero or negative.
Gross and operating margin are null for banks, insurers and REITs by design — the concepts do not apply and no substitute is invented. Filter those sectors on net_margin or return_on_equity instead of reading the nulls as missing data.
Two of these ratios are guarded, so they are null in cases where a number could be computed but would mislead:
payout_ratiois null on a loss rather than negative. Values above 1 are kept — paying out more than the year’s earnings is real.return_on_invested_capitalis null where cash exceeds debt plus equity, where pretax income is not positive, and where the tax charge exceeds pretax income.
The Liquidity, Efficiency and Coverage Filters
Each takes_gte/_lte bounds:
- Liquidity, as multiples of current liabilities:
current_ratio,quick_ratio(drops inventory),cash_ratio(cash only) andoperating_cash_flow_ratio. - Efficiency:
asset_turnover,inventory_turnover,receivables_turnoverandworking_capital_turnoverare times per year;days_sales_outstandingandoperating_cycleare days, not fractions —days_sales_outstanding_lte=45is “collects inside 45 days”. - Leverage and coverage:
debt_to_assetsis a fraction and may exceed 1 for a company with negative equity.interest_coverageis operating income over interest expense, and is null — not infinite — where a company reports no interest expense.
sort value, so you can rank on the axis you screened on.
The turnover denominators are not yet the same everywhere: Korea and Taiwan average the opening and closing balance, mainland China and Hong Kong use the closing balance alone. The difference is a few percent for a fast-growing balance sheet and none for a steady one.
Amounts Are Returned but Not Filterable
ebitda, revenue, net_income, inventory, current_assets, interest_expense and the other amounts on the row are in the company’s own reporting currency — fundamentals_currency says which. A threshold like “EBITDA above one billion” would sweep in every KRW and JPY filer, so these columns have no filter and no sort. Screen on the unit-free ratios, or on market_cap_usd for size.
The Momentum Filters
ret_1m, ret_3m, ret_6m, ret_12m bounds — price returns in percent (ret_1m_gte=20 is a 20% move), unlike the ratio filters, which are fractions on the same row. return_suspect=true marks a company whose return disagrees with its market-cap change over the same window — the fingerprint of an unadjusted split; those rows are excluded from return filters and sorts unless include_suspect_returns is set.
Coverage: Any Ratio Filter Narrows the Universe
Valuation and fundamentals reach about 20,000 companies — roughly two-thirds of the screen — from six sources.fundamentals_source on each row says which one it came from:
Where a company appears in more than one source, SEC wins, so ADRs keep their US-GAAP numbers; an A-share annual wins over the Hong Kong announcement for the roughly 150 companies listed in both places.
has_fundamentals=true asks what is screenable at all, and the free facets endpoint reports the count. Any ratio filter silently narrows the screen to that cohort, so “the cheapest companies in the world on PE” really means “the cheapest of the companies we hold statements for”. A null is missing data in that source, never this company has no financials and never a zero.
Each source is missing what it does not publish, so filtering on a field also narrows to the markets that carry it:
dividend_yield,payout_ratio,debt_to_equityandreturn_on_invested_capitalare null for every Taiwanese and A-share row. Korea carries dividends and debt for part of its companies.return_on_invested_capitalreaches Japan (~2,600), the US (~1,900), Hong Kong (~1,100) and Korea (~900).ebitdareaches Japan (~3,600), the US (~2,700), Taiwan (~2,300), Hong Kong (~2,200) and Korea (~350), and is null for every A-share row. The Korean figure is small on purpose: a filer whose depreciation is split across several lines is left null rather than partially summed.- The four liquidity ratios are null for A-share rows except about the 70 largest companies, whose full statement carries current-asset and current-liability totals; the summary source behind the rest carries no current/non-current split, and banks, insurers and brokers have none at all.
current_ratioreaches about 950 of the roughly 7,300 China-domiciled companies — most of them listed outside the mainland — andworking_capital_turnoverabout 750. return_on_equityandbook_value_growth_yoyare on parent-only equity, so they are null for A-share rows except about the 100 largest, whose full statement carries parent-only equity; the summary source for the rest carries only total equity, which includes minority interests.receivables_turnover,days_sales_outstanding,operating_cycleandinterest_coverageare null for every Taiwanese row: the source has no receivables balance and no interest-expense line.- Japanese rows are read from full statements and carry every ratio column. Consolidated and parent-only accounts are never mixed in one row.
- Hong Kong reports in about ten currencies, more CNY than HKD. Read
fundamentals_currencybefore comparing amounts.
pe_ttm or pb on a Korean, Taiwanese or A-share row is usually a missing market cap rather than a loss, because the price ratios need market_cap_usd.
fundamentals_stale=true finds companies whose newest period is over two years old — those rows carry no price ratio at all, because today’s price over 2009 earnings would rank as the cheapest stock on the exchange.
fundamentals_grain says whether numbers are TTM or latest-annual; fundamentals_filed_at is when the market could first know them.