Angel APIangel.co ↗
Access Wellfound startup job listings, company profiles, funding rounds, team members, and founder details via 4 structured API endpoints.
What is the Angel API?
The Wellfound API provides 4 endpoints for querying startup jobs, company profiles, individual job listings, and founder/investor profiles from Wellfound (formerly AngelList). The search_jobs endpoint accepts role and location slugs and returns paginated results — up to ~50 jobs per page — each with salary range, equity range, remote status, and a nested startup object. Companion endpoints expose full company funding history, team composition, and person-level investment portfolios.
curl -X GET 'https://api.parse.bot/scraper/210f9c61-c5df-4099-a373-a36fdf60c465/search_jobs?page=1&role=software-engineer&location=san-francisco' \ -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 angel-co-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: Wellfound SDK — search startup jobs and explore companies."""
from parse_apis.wellfound_angellist_api import Wellfound, JobNotFound
client = Wellfound()
# Search for software engineering jobs, capped at 5 results
for job in client.jobsummaries.search(role="software-engineer", limit=5):
print(job.title, job.startup.name, job.remote)
# Drill into one job's full details
job_summary = client.jobsummaries.search(role="designer", limit=1).first()
if job_summary:
full_job = job_summary.details()
print(full_job.title, full_job.salary.min, full_job.salary.currency)
print(full_job.industry, full_job.job_type)
# Look up a startup by slug and explore its profile
startup = client.startups.get(slug="stripe")
print(startup.name, startup.size, startup.total_raised)
for member in startup.team:
print(member.name, member.role_type)
# Handle a missing job gracefully
try:
expired = client.jobsummaries.search(role="software-engineer", limit=1).first()
if expired:
detail = expired.details()
print(detail.title, detail.posted_at)
except JobNotFound as exc:
print(f"Job expired: {exc.job_id_slug}")
print("exercised: jobsummaries.search / job.details / startups.get / typed error")
Search for jobs by role or location on Wellfound. Returns paginated results with job details and associated startup information. At least one of role or location must be provided. Pagination via page number; each page returns up to ~50 jobs. Results include salary, equity, job type, and startup metadata for each listing.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based) |
| role | string | Role slug to search for (e.g. 'software-engineer', 'product-manager', 'designer', 'data-scientist') |
| location | string | Location slug to search for (e.g. 'san-francisco', 'new-york', 'remote', 'london') |
{
"type": "object",
"fields": {
"jobs": "array of job objects with id, job_id_slug, title, description, location, remote, salary, equity, job_type, posted_at, and startup info",
"page": "integer, current page number",
"total": "integer, total number of jobs returned on this page"
},
"sample": {
"data": {
"jobs": [
{
"id": "4318749",
"title": "Software Engineer",
"equity": {
"max": null,
"min": null
},
"remote": false,
"salary": {
"max": null,
"min": null,
"currency": null
},
"startup": {
"id": "10660041",
"logo": "https://photos.wellfound.com/startups/i/10660041-medium_jpg.jpg",
"name": "Metriport",
"size": "SIZE_11_50",
"slug": "metriport-2",
"concept": "Healthcare data access and management",
"markets": [],
"locations": null
},
"job_type": "full-time",
"location": [
"San Francisco"
],
"posted_at": null,
"description": "Metriport is an open-source data intelligence platform...",
"job_id_slug": "4318749-software-engineer"
}
],
"page": 1,
"total": 39
},
"status": "success"
}
}About the Angel API
Job Search and Listings
The search_jobs endpoint accepts a role slug (e.g. software-engineer, data-scientist) and/or a location slug (e.g. san-francisco, remote). At least one of the two is required. Results are paginated by page number, with each page returning up to ~50 job objects. Each job includes id, job_id_slug, title, description, location, remote (boolean), salary (min/max), equity (min/max), job_type, posted_at, and a nested startup object. The job_id_slug field feeds directly into get_job_details for full listing data.
Detailed Job and Company Data
get_job_details takes a job_id_slug (e.g. 4322508-software-engineer) and returns the complete listing: structured salary (min, max, currency), equity (min, max), benefits text, industry, job_type, location array, and a startup sub-object with name, slug, website, logo, and concept. Note that job listings expire; passing a stale ID returns a not-found error.
get_startup_details takes a company slug (e.g. stripe, calm) and returns the full company profile: team array with member name, title, role_type, bio, and linkedin; funding array with series, amount, valuation, and closed_at per round; markets array of industry strings; social URLs for Twitter, LinkedIn, and Facebook; and the company size category.
Person Profiles
get_person_details accepts a person slug (e.g. naval) and returns id, name, bio, social links, location, and an investments array covering their portfolio. Person slugs appear in company team data or can be derived from Wellfound profile URLs.
The Angel API is a managed, monitored endpoint for angel.co — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when angel.co 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 angel.co 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?+
- Aggregate startup job listings filtered by role and city to build a niche job board.
- Track funding history for a list of startups using the
fundingarray fromget_startup_details. - Monitor new remote engineering roles by polling
search_jobswithlocation=remoteand a role slug. - Enrich a CRM with company size, market categories, and social links from startup profiles.
- Research a founder's investment portfolio using
get_person_detailsbefore a partnership call. - Compare equity and salary ranges across job listings for compensation benchmarking.
- Pull team member LinkedIn profiles from startup data to build outreach lists for recruiting.
| 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 Wellfound have an official public developer API?+
What does `search_jobs` return and how does pagination work?+
title, salary (min/max), equity (min/max), job_type, remote, posted_at, location, and a nested startup object. Supply the page parameter (1-based) to advance through results. The response also includes a total field showing the count of jobs on that page.Does the API cover investor profiles or only founders?+
get_person_details returns a profile for any person with a Wellfound slug — including investors — along with their investments array. However, the API does not currently expose investor-specific filters such as searching by fund name, check size, or investment stage. You can fork the API on Parse and revise it to add an endpoint targeting those filtered views.Are job listings guaranteed to be active?+
job_id_slug to get_job_details, the endpoint returns a not-found error. The posted_at field in search_jobs results can help you filter for recency before fetching full details.Can I search startups directly by name, market, or funding stage without knowing a slug?+
slug via get_startup_details and job search by role or location slug via search_jobs. There is no endpoint for querying companies by name, industry, or funding stage directly. You can fork the API on Parse and revise it to add a company search endpoint.