When to use aggregates vs raw entities
/api/data/entities also
applies here.
Single-metric aggregate
Path parameter
source | Aggregates over |
|---|---|
companies | Entity-level metrics (funding totals, valuations) |
funding-rounds | Per-round metrics (deal counts, round sizes) |
valuations | Valuation history |
founders | Founder counts |
investors | Investor counts |
Query parameters
| Param | Required | Description |
|---|---|---|
metric | yes | count, count_distinct:field, sum:field, avg:field, median:field, p25:field, p75:field |
group_by | yes | Dimension(s), comma-separated for multi-dim: hq_country, year,sector |
filter | no | Filter expression — same syntax as /api/data/entities. See Filtering |
sort | no | metric (prefix - for desc) or dimension |
limit | no | Max groups returned (default 25, max 500) |
currency | no | ISO 4217 code for monetary metric conversion. Defaults to USD. |
Example — top 10 countries by deal count, 2024
Multi-metric aggregate
Query parameters
| Param | Required | Description |
|---|---|---|
metric | yes | Repeated: metric=label,metric_type (e.g. metric=deals,count) |
group_by | no | Omit for a flat aggregation (returns a one-element array) |
metric_filter | no | Per-metric filter: label:filter_expression — only applies to that metric |
metric_having | no | Post-aggregation filter on a metric value (e.g. pct[gt]:25) |
filter | no | Global filter expression applied to every metric |
sort | no | Sort by metric label (prefix - for desc) or dimension |
limit | no | Max groups (default 25, max 500) |
currency | no | ISO 4217 code for monetary metric conversion. Defaults to USD. |
Example — hero stats for the funding dashboard
group_by) — data is a single-element array, matching the
shape of the grouped response so clients can use one parser for both:
response.data[0].deals — there’s always exactly one row.
Example — top 5 sectors by total funding, with deal counts
Heatmap (2D cross-tabulation)
year × sector or country × stage matrix for a heatmap visualisation.
Query parameters
| Param | Required | Default | Description |
|---|---|---|---|
x | yes | — | X-axis dimension key |
y | yes | — | Y-axis dimension key |
metric | no | count | count, company_count, total_amount, avg_amount, median_amount |
top_n_x | no | 15 | Max X-axis categories (1–50) |
top_n_y | no | 15 | Max Y-axis categories (1–50) |
filter | no | — | Filter expression |
currency | no | USD | ISO 4217 code for monetary metric conversion |
round_year, round_quarter, round_type, standardized_round,
amount_range, stage, country, continent, city, region, sector,
standardized_sector, technology, industry_tags, business_model, income_stream,
client_focus, investor_type, investor_country, investor_continent.
Example — funding by year × sector
cells is sparse — only non-zero [x_index, y_index, value] triples are returned.
x_totals / y_totals are the marginal totals along each axis.
Other analytics endpoints
These return purpose-built shapes that can’t be expressed via the generic aggregates. See the API Reference for full parameter and response schemas.| Endpoint | What it returns |
|---|---|
GET /api/analytics/funding-analytics/round-transitions | From → to stage transitions per company with median days between rounds |
GET /api/analytics/funding-analytics/funnel | Companies bucketed into 9 capital-phase buckets ($0-1M through $2B+), broken down by dimension |
GET /api/analytics/timeseries | Yearly metrics (employees, revenue, valuation) per entity |
Available dimensions
Available dimensions vary by source. Across all aggregate endpoints, common dimension groups:| Category | Dimensions |
|---|---|
| Location | hq_country, hq_city, hq_state, hq_continent, macro_region, region |
| Time | year, quarter, launch_year |
| Taxonomy | sector, technology, industry, sub_industry, business_model, income_stream, client_focus, sdg |
| Funding | round_type, standardized_round, amount_range |
| Investor | investor_type, investor_country, investor_continent |
| Entity status | company_status |
GET /api/reference/filters/{key}/values (where {key} is
the filter key, e.g. location, tag_id, growth_stage).
Performance tips
- Always filter before aggregating. An unfiltered aggregate on a large source can hit the 15s query timeout.
- Prefer the multi-metric endpoint over multiple single-metric calls — fewer round trips, a single SQL query server-side.
- For dashboard-style views, fan out 3–8 aggregate calls in parallel from your client. Each query is small and independently cacheable.
- Use
count_distinct:entity_idwhen you want unique-company counts across rounds (rather than the deal countcount).