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.
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"
]
}
Coverage
Written about this source
Walkthroughs, worked examples and posts about this source.
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"))
MCP
Apify's hosted MCP server loads this source from the URL below as the tool johnvc--ventureradar-company-api. Sign in to Apify when your client asks (OAuth), or send an Apify token as an Authorization: Bearer header.
https://mcp.apify.com/?tools=johnvc/ventureradar-company-api
Changelog
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
More sources for Investor and funding research, Lead sourcing and CRM enrichment, Grounding AI agents and MCP tools →