Read one page of rows from one Queryable Entity. Use this for a point lookup, a multi-period history, or a filtered list. Call list_queryable_entities first, then describe_queryable_entities.
What you can read:
- company: name, ticker, sector, HQ country. Screen tools need these integer ids.
- stock_price: daily prices, volume, dividends, and splits. price_explanation: why a significant price move happened.
- financial_data_point: one row per statement line or ratio per fiscal period. Join time_period and financial_metric. Discover metric keys on financial_metric (name like '%net_debt%' finds pre-computed ratios).
- valuation_multiple: multiples such as P/E and EV/EBITDA, by company and date.
- consensus_data_point: analyst estimates. Join time_period and consensus_metric. The fiscal period is on time_period (fiscal_year, fiscal_quarter, end_date). consensus_date is the estimate snapshot date, not the fiscal period.
- earnings_calendar: earnings dates. standard_event: corporate events; for earnings, filter type to "Earnings announcement". file: filings, transcripts, and news. Join company and filter company.symbol.
- ku_cell: filings-derived knowledge-unit cells. Filter ku.name. An unfiltered read is a short slice of ids. knowledge_unit holds the definitions. company_drivers and executive_summary are per-company narratives. For a qualitative screen across many companies, use screen_drivers or screen_earnings.
- sector, product, product_category (companies that share a category are peers), and ticker: catalogs. List sector in full. Do not resolve a sector with a single-word like filter.
Allowed entities: company, company_drivers, consensus_data_point, consensus_metric, earnings_calendar, executive_summary, file, financial_data_point, financial_metric, knowledge_unit, ku_cell, price_explanation, product, product_category, sector, standard_event, stock_price, ticker, time_period, valuation_multiple.
Arguments: entity, select, filters, filter_logic (AND or OR, default AND), sort, joins, limit. Filter operators: =, !=, >, >=, <, <=, in, like. Pass IN lists on filter.value. Do not pass value_path.
Joins: when a field has join_target, join that table and use alias.field in select, filters, and sort. Many tickers in one query: company.symbol in ["AAPL","MSFT"]. Use a camelCase alias (timePeriod, financialMetric). joins.relation is join_relation when describe shows it, otherwise join_target. On ku_cell, describe knowledge_unit but join relation ku. Other ku_cell relations: groupCompany, cellTimePeriod, cellStandardEvent, groupProductCategory, cellProductCategory. The name product_category matches two ku_cell relations, so it is rejected.
financial_data_point accepts only time_period and financial_metric joins. Do not join company. Filter timePeriod.company_id. Reported actuals use timePeriod.provenance = financials and timePeriod.duration = year. This table has no geographic revenue, segment mix, customer geography, or tariff exposure.
valuation_multiple.value, financial_data_point.value, and consensus_data_point.value are stored as text. A filter on them compares lexicographically ("100" < "99"). For a numeric threshold, use aggregate_entity and put the cut in having.
company.hq_country stores codes and full names. Filter both, for example in ["JP","Japan"]. HK is Hong Kong. CN is mainland China. They do not overlap. Other codes: US, KR.
limit above the entity max_limit (from describe) fails. A full page sets truncated=true and may include next_hint {field:"id", op:">", value:<last id>}. Add that filter, sort by id asc, include id in select, and repeat. There is no offset. For COUNT, SUM, AVG, MIN, MAX, or a threshold screen, use aggregate_entity.