TopStartups APItopstartups.io ↗
Access startup profiles, funding data, job listings, and salary benchmarks from TopStartups.io via 4 structured endpoints with filtering and pagination.
What is the TopStartups API?
The TopStartups.io API exposes 4 endpoints covering startup discovery, job listings, individual company profiles, and salary benchmarks. The get_startups endpoint returns paginated startup records filterable by industry, funding stage, investor name, and HQ location. The get_salary_data endpoint surfaces up to ~2,500 salary and equity records tied to specific startup stages, roles, and team functions — making it usable for compensation research without manual data collection.
curl -X GET 'https://api.parse.bot/scraper/53e9bd7c-29f3-4f70-b60d-4af39472b47a/get_startups?page=1&sort=funding&investors=Sequoia&industries=Artificial+Intelligence&hq_location=San+Francisco&company_size=11-50+employees&founded_year=2020&funding_round=Series+A' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace topstartups-io-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: TopStartups SDK — discover startups, browse jobs, analyze compensation."""
from parse_apis.topstartups_io_api import TopStartups, StartupSort, StartupNotFound
client = TopStartups()
# Search for AI startups sorted by funding
for startup in client.startups.search(industries="Artificial Intelligence", sort=StartupSort.FUNDING, limit=3):
print(startup.name, startup.hq_location, startup.latest_funding_round)
# Drill into one startup by name and browse its open jobs
openai = client.startups.get(name="OpenAI")
print(openai.name, openai.valuation, openai.company_size)
for job in openai.jobs.list(limit=3):
print(job.job_title, job.location, job.experience)
# Search jobs across all startups filtered by role
for job in client.jobs.search(role="Engineer", job_location="Remote", limit=3):
print(job.job_title, job.company.name, job.location)
# Analyze salary data for Series A engineering roles
for record in client.salaryrecords.search(team="Engineering", stage="Series A", limit=5):
print(record.title, record.salary, record.equity_dollars, record.location)
# Typed error handling for a startup that doesn't exist
try:
client.startups.get(name="NonexistentStartup12345")
except StartupNotFound as exc:
print(f"Not found: {exc.name}")
print("exercised: startups.search / startups.get / startup.jobs.list / jobs.search / salaryrecords.search")
Retrieve a paginated list of startups with optional filters for industry, location, size, founding year, funding stage, and investors. Returns up to ~20 startups per page. Pagination via page number; has_more indicates additional pages exist.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| sort | string | Sort order. Accepted values: 'funding', 'valuation'. |
| investors | string | Filter by investor name (e.g. 'Sequoia'). |
| industries | string | Filter by industry (e.g. 'SaaS', 'Artificial Intelligence'). |
| hq_location | string | Filter by HQ location (e.g. 'New York'). |
| company_size | string | Filter by company size (e.g. '11-50 employees'). |
| founded_year | string | Filter by founded year (e.g. '2020'). |
| funding_round | string | Filter by funding stage (e.g. 'Series A'). |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"has_more": "boolean, whether more pages are available",
"startups": "array of startup objects with name, website, logo_url, description, industry_tags, hq_location, company_size, founded_year, latest_funding_round, investors, valuation, and founders"
},
"sample": {
"data": {
"page": 1,
"has_more": true,
"startups": [
{
"name": "Pogo",
"website": "https://www.joinpogo.com/?utm_source=topstartups.io",
"founders": "Leaders at $1B+ startups",
"logo_url": "https://images.crunchbase.com/image/upload/c_pad,f_auto,q_auto:eco,dpr_1/v9h9vnif2jljbnyrhk4d",
"investors": [
"20VC",
"Josh Buckley"
],
"valuation": null,
"description": "Help over 3M+ users earn and save by unlocking the power of their data.",
"hq_location": "Brooklyn, New York, USA",
"company_size": "11-50 employees",
"founded_year": "2020",
"industry_tags": [
"Consumer",
"Mobile App",
"FinTech"
],
"latest_funding_round": "Series A in 2025"
}
]
},
"status": "success"
}
}About the TopStartups API
Startup Discovery and Filtering
The get_startups endpoint returns up to ~20 startup records per page. Each record includes name, website, logo_url, description, industry_tags, hq_location, company_size, founded_year, and latest funding information. You can filter by industries (e.g. 'SaaS', 'Artificial Intelligence'), funding_round (e.g. 'Series A'), investors (e.g. 'Sequoia'), hq_location, company_size, and founded_year. Sorting by 'funding' or 'valuation' is supported. The has_more field in the response lets you drive pagination loops cleanly.
Company Profiles and Job Listings
get_startup_details accepts a startup name and returns a full profile including founders, investors (as an array of strings), valuation, description, hq_location, company_size, and founded_year. If the startup cannot be located, the endpoint returns a not-found result rather than an error, so your code should check for null fields.
The get_jobs endpoint lists open roles at startups, with each job record carrying job_title, location, experience, posted_date, apply_url, and associated company details. You can filter by role, job_location, yoe (years of experience), startup__name, startup__markets, and startup__company_size.
Salary and Equity Data
get_salary_data returns structured compensation records from the TopStartups salary database. Each record includes title, salary, equity_percent, equity_dollars, location, total_yoe, years_at_startup, and stage. Filters include team (e.g. 'Engineering', 'Product'), title, stage, company_size, and work_location. Results are applied server-side and can return up to ~2,500 records in a single response, making bulk salary benchmarking straightforward.
The TopStartups API is a managed, monitored endpoint for topstartups.io — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when topstartups.io changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official topstartups.io API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a startup discovery tool that filters companies by funding stage and investor (e.g. all Series B companies backed by Sequoia)
- Aggregate salary benchmarks for specific engineering or product roles across startup stages using
get_salary_data - Monitor new job postings at target startups by polling
get_jobsfiltered bystartup__nameorstartup__markets - Enrich a CRM with structured startup metadata — founders, investors, valuation, and HQ — via
get_startup_details - Analyze equity compensation trends by filtering
get_salary_dataonstageandteamto compare early vs. late-stage offers - Generate a filtered startup list by founding year and company size for market research or investment screening
- Track which startups are actively hiring for remote roles by combining
job_locationandstartup__marketsfilters inget_jobs
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does TopStartups.io have an official developer API?+
What does `get_startup_details` return that `get_startups` does not?+
get_startup_details returns fields not present in the listing endpoint: founders (founder information), investors (an array of investor name strings), and valuation. The listing endpoint returns broader pagination-friendly data but does not include those per-company details.Does `get_salary_data` return individual submissions or aggregated statistics?+
salary, equity_percent, equity_dollars, total_yoe, years_at_startup, and stage. The API does not return pre-aggregated statistics like medians or percentiles — any aggregation needs to be done on your end after fetching the records.Are historical funding rounds or full funding history available for a startup?+
get_startups and a valuation field in get_startup_details, but does not return a timeline of all past funding rounds. You can fork this API on Parse and revise it to add an endpoint that surfaces historical funding round data if the source makes it available.How does pagination work across the listing endpoints?+
get_startups and get_jobs return a page integer and a has_more boolean. Pass an incrementing page string parameter in each request and stop when has_more is false. get_salary_data returns all matching records in a single response (up to ~2,500) and does not use the same pagination pattern.