Toptal APItoptal.com ↗
Access Toptal freelance talent data via API. Search by skill and category, retrieve full profiles with bio, skills, experience, education, and availability.
What is the Toptal API?
The Toptal API gives developers access to Toptal's freelance talent network through 2 endpoints, returning up to 22 profile summaries per skill search and full individual profiles with over 10 structured fields. The search_talent endpoint lets you query talent by skill slug and category, while get_profile returns a complete profile including work history, education, certifications, portfolio items, and live availability status.
curl -X GET 'https://api.parse.bot/scraper/d982459a-b441-4d18-8961-40d7a1034090/search_talent?skill=python' \ -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 toptal-com-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: Toptal talent SDK — search by skill, drill into a full profile."""
from parse_apis.toptal_com_api import Toptal, InputNotFound
client = Toptal()
# Search for Python freelancers — limit caps total items yielded.
for talent in client.talent_summaries.search(skill="python", limit=5):
print(talent.name, "|", talent.job_title, "|", talent.country)
# Drill into the first result's full profile via summary → detail navigation.
first = client.talent_summaries.search(skill="react", limit=1).first()
if first is not None:
profile = first.details()
print(profile.name, "-", profile.title)
print("Location:", profile.location)
print("Available:", profile.is_available, f"({profile.availability_type})")
for exp in profile.work_experience[:2]:
print(f" {exp.role} @ {exp.company} ({exp.date_range})")
for cat in profile.skill_categories:
print(f" [{cat.category}] {cat.skills}")
# Direct point-lookup when you already know the slug.
try:
dev = client.talents.get(profile_slug="oliver-schoenborn")
print(dev.name, "| Member since:", dev.member_since)
print("Skills:", ", ".join(dev.skills[:5]))
except InputNotFound:
print("Profile not found")
print("exercised: talent_summaries.search / TalentSummary.details / talents.get")
Browse Toptal freelance talent by skill within a category (e.g., Python developers, UX designers). Returns a list of talent profiles with summary information. Each skill page shows a fixed set of featured talents (typically 11-22 profiles). The site organizes talent by skill-specific pages rather than a free-text search, so the skill parameter must be a valid skill slug matching Toptal's URL structure (e.g., 'python', 'react', 'ux', 'financial-modeling'). No server-side pagination is available; the full talent list for the given skill is returned in a single call.
| Param | Type | Description |
|---|---|---|
| skillrequired | string | Skill slug matching Toptal's URL pattern (e.g., 'python', 'react', 'javascript', 'ux', 'financial-modeling', 'data-engineers'). Must be a valid slug from the Toptal website. |
| category | string | Toptal talent category. Common values include 'developers', 'designers', 'finance-experts', 'project-managers', 'product-managers'. When omitted, defaults to 'developers'. |
{
"type": "object",
"fields": {
"skill": "The skill slug that was searched",
"title": "Page title from the skill listing (e.g., 'Hire Freelance Python Developers')",
"talents": "Array of talent profile summaries",
"category": "The category that was searched",
"total_results": "Number of talent profiles returned"
},
"sample": {
"data": {
"skill": "python",
"title": "Hire Freelance Python Developers",
"talents": [
{
"bio": "After years of developing distributed simulation systems for VR, Oliver's focused on DevOps engineering...",
"name": "Oliver Schoenborn",
"skills": [
"Python",
"Kubernetes",
"Docker"
],
"country": "Canada",
"education": [
{
"year_from": "1991",
"institution": "University of Toronto - Toronto"
}
],
"image_url": "https://bs-uploads.toptal.io/blackfish-uploads/talent/1182/picture/optimized/huge_8826e4745e16ba7bca7d57dd4f96a5c1-f4d63b2db8f9e62dab71f09c41a7cbc6.jpg",
"job_title": "Freelance Python Developer",
"profile_url": "https://www.toptal.com/developers/resume/oliver-schoenborn",
"member_since": "October 1, 2014",
"profile_slug": "oliver-schoenborn",
"verified_vertical": "Engineering"
}
],
"category": "developers",
"total_results": 22
},
"status": "success"
}
}About the Toptal API
Searching Talent by Skill and Category
The search_talent endpoint accepts a skill parameter (a slug matching Toptal's URL pattern, such as python, react, or financial-modeling) and an optional category parameter (developers, designers, finance-experts, project-managers). It returns an array of talent profile summaries under the talents field, along with the page title, the matched skill and category slugs, and a total_results count. Each skill listing typically surfaces between 11 and 22 featured profiles. The profile_slug from each summary is the key input for retrieving full detail.
Retrieving Full Talent Profiles
The get_profile endpoint takes a profile_slug and optional category and returns a structured profile record. Fields include name, title, bio, location, skills (array), education (array of entries), certifications, portfolio (array of notable projects), member_since, and is_available. The is_available boolean reflects current hiring availability. Work experience, technologies used, and project descriptions are surfaced through the portfolio field, making it possible to assess a freelancer's domain depth without visiting the site directly.
Data Scope and Coverage
Coverage spans Toptal's main talent verticals: software developers, designers, finance experts, and project managers. Skill slugs map directly to Toptal's URL structure, so any skill that has a dedicated page on Toptal (e.g., ux, javascript, blockchain, financial-modeling) can be queried. Results reflect the featured talent Toptal surfaces for each skill — not an exhaustive ranked list of all registered members.
The Toptal API is a managed, monitored endpoint for toptal.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when toptal.com 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 toptal.com 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 candidate shortlisting tool that queries
search_talentby skill and surfaces profiles withis_available: true. - Aggregate freelancer bios and skill sets across multiple skill slugs to analyze talent supply in a given technology area.
- Compare certifications and education entries across profiles to benchmark qualifications for a specific role.
- Enrich a recruiting CRM by pulling structured
work experienceandportfoliodata from individual Toptal profiles. - Monitor
is_availablestatus on a set of knownprofile_slugvalues to catch when a preferred freelancer opens up. - Populate an internal talent directory with Toptal profile data including
location,title, andmember_sincedates.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Toptal have an official public developer API?+
What does `search_talent` return, and can I paginate through all talent for a skill?+
total_results count, page title, and the matched skill and category. Pagination is not supported; the endpoint reflects the fixed set of profiles Toptal features per skill page.Does `get_profile` return hourly rates or pricing for a freelancer?+
bio, skills, education, certifications, portfolio, location, member_since, and is_available. Rate or pricing information is not exposed. You can fork this API on Parse and revise it to add a rate field if Toptal surfaces that data on a profile page you want to target.Can I retrieve the full list of all registered Toptal members, not just featured profiles?+
Are all four Toptal categories — developers, designers, finance-experts, and project-managers — supported?+
search_talent and get_profile accept a category parameter covering those four values. Omitting category defaults to the talent context implied by the skill slug. Skill slugs must match Toptal's URL pattern for a valid result to be returned.