VentureRadar Company Discovery API
Most company data tells you how much a startup raised. This one tells you who backed it. Every profile carries a fundingSignals array naming the accelerators, incubators, grants and awards on record, each with a link to the backer's own page, alongside sector focus, founding year, location, ownership, LinkedIn and four scoring dimensions. That provenance is the thing deal-sourcing actually filters on, and it is rarely available as structured data.
RECORDS2
MEDIAN LAGon demand
FIELDS26
Input parameters
| PARAMETER | TYPE | REQ | DEFAULT | DESCRIPTION |
|---|---|---|---|---|
| companyUrls | string[] | yes | — | One or more company profile URLs in the form https://www.ventureradar.com/organisation/ |
Output schema
| FIELD | TYPE | DESCRIPTION | NULLABLE |
|---|---|---|---|
| result_type | string | company or error. Present on every row, so one pass over the dataset is safe. | no |
| companyId | string | Stable profile identifier, the uuid half of the profile URL. | yes |
| companyName | string | Company name as listed on the profile. | yes |
| profileUrl | string | The profile this row was collected from. The natural join and upsert key. | yes |
| website | string | The company's own website. | yes |
| description | string | What the company does, in a paragraph. Ran 400 to 700 characters on live records. | yes |
| descriptionSource | string | Where the description came from, for example directory research, a community submission or Wikipedia. Useful for judging how much to trust the text. | yes |
| location | string | Country or region as listed. | yes |
| country | string | Country code where the source publishes one, otherwise a copy of location. On both live records it matched location exactly, so do not treat it as ISO. | yes |
| founded | integer | Year founded, coerced to a plain integer. | yes |
| ownership | string | Ownership status, for example Privately Held or Private Company. | yes |
| keywords | string[] | Descriptive keywords on the profile. Often identical to areasOfFocus. | yes |
| areasOfFocus | string[] | Sector and technology focus. The field to group and filter on: a company can sit in several sectors at once. | yes |
| string | Company LinkedIn page where the profile lists one. | yes | |
| string | Company X or Twitter profile. Absent on both live test records, so treat it as a bonus rather than a column you can rely on. | yes | |
| websitePopularity | string | Banded popularity of the company website, for example Low, Medium or High. | yes |
| analystScore | integer | Automated analyst score on a 0 to 100 scale. Note that scores.analystScore carries the same figure on a 0 to 1000 scale. | yes |
| scores | object | Sub-scores behind the headline rating: analystScore, popularityScore, socialProofScore, websiteTrafficScore. Values are passed through as the source sends them, which mixes strings and integers inside one object. | yes |
| fundingSignals | object[] | The differentiator. One entry per backer with category, source and url, where category is a band such as INCUBATOR / ACCEL'R or VENTURE FUNDED and source names the backer, for example Y Combinator. No amounts, only provenance. | yes |
| milestones | object[] | Dated events as text and date, for example accelerator batches, funding headlines and competition placings. Observed running back to 2014. | yes |
| similarCompanies | string[] | Companies the source considers comparable. Empty on both live test records, so plan a crawl that widens by backer rather than by lookalike. | yes |
| summary | string | One-line plain-language recap on every company row, naming country, founding year, top focus areas and the number of funding signals. Written so an agent can read a record without post-processing. | yes |
| sourceUrl | string | On an error row, the input URL that produced no record. | yes |
| error_message | string | On an error row, why the input returned nothing, in plain language: the page no longer exists, the layout changed, the source timed out. | yes |
| error_type | string | On an error row, the machine-readable category: CollectionError, MissingRequiredParameter or MissingApiKey. | yes |
| fetched_at | string | UTC ISO timestamp on every row. This is what makes run-over-run diffs work. | no |
Worked examples
{
"companyUrls": [
"https://www.ventureradar.com/organisation/Theneo/b40ae154-6867-456f-a215-d98fdae0048c"
]
}
{
"companyUrls": [
"https://www.ventureradar.com/organisation/Theneo/b40ae154-6867-456f-a215-d98fdae0048c",
"https://www.ventureradar.com/organisation/Entrepreneur%20First/eae1b629-708d-4c87-ae00-1976d9d70e41"
]
}
{
"companyUrls": [
"https://www.ventureradar.com/organisation/Flutterwave/145b5fd0-a04e-463b-abdf-1e73b8359d77",
"https://www.ventureradar.com/organisation/Hightouch/265a97e0-202c-4032-846c-78b39aa76016",
"https://www.ventureradar.com/organisation/GrubMarket/6d9c50c5-d7c2-4955-9a1e-c79d881c4f9a",
"https://www.ventureradar.com/organisation/Gridware/98714a43-24eb-430e-9829-72f6b2123290"
]
}
{
"companyUrls": [
"https://www.ventureradar.com/organisation/Seabound/4813cea0-a53e-4403-a9d8-03fffa0e0b6f",
"https://www.ventureradar.com/organisation/Fleetzero/914ccf8c-5107-4712-b54e-b40d8e79d45f",
"https://www.ventureradar.com/organisation/Aerones/992be6bc-0a5a-4964-8100-ca01dc84422e"
]
}
{
"companyUrls": [
"https://www.ventureradar.com/organisation/Theneo"
]
}
POWER-USER TIP
The two analyst scores are on different scales — Top-level analystScore is 0 to 100 and scores.analystScore is the same figure on a 0 to 1000 scale, so the same company reads as 75 in one field and "750" in the other. Pick one and stick to it, or a chart built from a mixed join will look like an order-of-magnitude spread that is not there.
POWER-USER TIP
Cast the scores object before you compare — Inside scores the source does not commit to one serialization. On live records analystScore and websiteTrafficScore arrived as strings while popularityScore and socialProofScore arrived as integers, in the same object, on the same row. Coerce before sorting or "964" will rank below 342.
POWER-USER TIP
Backer pages are the discovery layer this API does not have — There is no search endpoint: you have to bring profile URLs. The practical source of them is the directory's own backer page, at /source//, which lists the companies attributed to that accelerator or fund. Every fundingSignals entry returns exactly that URL, so one company you already know expands into a cohort you can feed straight back in.
POWER-USER TIP
A run budget silently trims the batch — Before collecting anything the Actor divides the run's maximum total charge by the per-company price and processes only that many URLs, logging a warning for the rest. Send 1000 URLs on a budget that covers 200 and you get 200 rows and no error. Check the run log line that reports how many of your URLs were actually processed.
POWER-USER TIP
Coverage is bimodal, so sample before you commit — An actively tracked startup fills nearly every field; a long-tail entry can come back with little more than a name, a URL and a popularity band. Empty fields are omitted from the row rather than returned blank, so a thin profile reads as thin rather than broken. Run ten URLs before you run a thousand.
Coverage
23
fields on a company row — 21 of them populated on both live test records
1,000
profile URLs per run — de-duplicated, collected in chunks of 20
4
scoring dimensions — analyst · popularity · social proof · website traffic
2
saved dataset views — company overview · funding signals
Tasks
Saved runs with the inputs already filled in — each one a standalone page and a working configuration example.
Written about this source
Walkthroughs, worked examples and posts about this source.
TASK
Find Which Accelerators and VCs Backed a Startup
TASK
Track New Milestones for a Startup Watchlist
TASK
Bulk Collect Startup Profiles from a URL List
TASK
Qualify a Startup Shortlist with Sector and Scores
TASK
Get Startup Company Data in Claude via MCP
TASK
Export Startup Company Data to CSV or Sheets
Code
curl
curl -X POST "https://api.apify.com/v2/acts/johnvc~ventureradar-company-api/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"companyUrls":["https://www.ventureradar.com/organisation/Theneo/b40ae154-6867-456f-a215-d98fdae0048c"]}'
Python
from apify_client import ApifyClient
client = ApifyClient("APIFY_TOKEN")
run = client.actor("johnvc/ventureradar-company-api").call(
run_input={
"companyUrls": [
"https://www.ventureradar.com/organisation/Theneo/b40ae154-6867-456f-a215-d98fdae0048c",
"https://www.ventureradar.com/organisation/Entrepreneur%20First/eae1b629-708d-4c87-ae00-1976d9d70e41",
]
}
)
for row in client.dataset(run.default_dataset_id).iterate_items():
if row.get("result_type") != "company":
print("skipped:", row.get("sourceUrl"), row.get("error_message"))
continue
backers = [s.get("source") for s in row.get("fundingSignals") or []]
print(row["companyName"], row.get("founded"), "|", ", ".join(backers) or "no signals")
Backer-first expansion
# fundingSignals returns the backer's own page on the source site. That page
# lists the other companies attributed to the same accelerator or fund, which
# is how you turn one known company into a cohort worth collecting.
from apify_client import ApifyClient
client = ApifyClient("APIFY_TOKEN")
run = client.actor("johnvc/ventureradar-company-api").call(
run_input={"companyUrls": ["https://www.ventureradar.com/organisation/Theneo/b40ae154-6867-456f-a215-d98fdae0048c"]}
)
for row in client.dataset(run.default_dataset_id).iterate_items():
for signal in row.get("fundingSignals") or []:
print(signal["category"], "|", signal["source"], "|", signal.get("url"))
Changelog
2026-08-08
0.0.8 Rebuilt after a fleet-wide fix for numeric fields that arrive as strings, and the MCP call path was re-verified on this build.
2026-08-07
0.0.6 Published to the Apify Store with six task pages and a monthly keep-alive run.
2026-08-06
Pay-per-event pricing set: one company-scraped event per profile returned, tiered from FREE down to GOLD.
What people use it for
- Sourcing deals by accelerator or incubator backing
- Screening a startup shortlist by sector and score
- Tracking accelerator batches and award milestones
- Enriching a CRM with founding year and sector focus
- Mapping which backers are active in a sector
- Giving an AI agent live context on unfamiliar startups
Alternatives
Crunchbase Company API — round sizes and named investors, where this one names the backer but never the amountours
PitchBook Company API — private-market financials rather than accelerator and grant provenanceours
Startup Investor Database — the firms doing the backing, filterable by stage and thesis, rather than the companies backedours
VentureRadar Similar Companies Scraper on the same marketplace — genuinely better for casting a wide net, since it takes a keyword or a seed company and returns lookalike names without needing profile URLs; it stops at the basics though, with no funding signals, no dated milestones and no per-URL error rowcompeting