Discover/Upwork API
live

Upwork APIupwork.com

Search Upwork freelancers by keyword. Returns profiles with hourly rates, job success scores, skills, location, and earnings data via a single endpoint.

Endpoint health
verified 3d ago
search_freelancers
1/1 passing latest checkself-healing
Endpoints
1
Updated
26d ago

What is the Upwork API?

The Upwork API exposes one endpoint — search_freelancers — that returns up to 50 freelancer profiles per page across 17 structured fields including hourly rate, currency, job success score, skills array, city, country, and total results count. Pass any keyword or skill term to retrieve paginated, ranked freelancer listings directly from Upwork's marketplace.

Try it
Page number (1-based)
Search keyword(s) to find freelancers by title, description, or skills
Number of results per page (1-50)
api.parse.bot/scraper/59193041-dabe-405d-8d1b-570a0b3a553e/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/59193041-dabe-405d-8d1b-570a0b3a553e/search_freelancers?page=1&query=python+developer&per_page=5' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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 upwork-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: Upwork Freelancer Search — find talent by keyword, inspect profiles."""
from parse_apis.upwork_freelancer_search_api import Upwork, FreelancerSearchFailed

client = Upwork()

# Search for Python developers, cap at 5 results total
for freelancer in client.freelancers.search(query="python developer", per_page=5, limit=5):
    print(freelancer.name, freelancer.title, freelancer.hourly_rate, freelancer.country)

# Drill into one result for detailed inspection
top = client.freelancers.search(query="data engineer", per_page=3, limit=3).first()
if top:
    print(top.name, top.skills, top.job_success_score, top.total_earnings)

# Typed error handling around a search call
try:
    result = client.freelancers.search(query="react native", limit=1).first()
    if result:
        print(result.name, result.profile_url)
except FreelancerSearchFailed as exc:
    print(f"Search failed: {exc}")

print("exercised: freelancers.search / .first() / typed error catch")
All endpoints · 1 totalmissing one? ·

Full-text search over Upwork's freelancer talent pool. Returns paginated results with detailed profile information including skills, hourly rate, job success score, location, and earnings. Pagination via integer page counter; each page returns up to per_page results. The query matches freelancer titles, descriptions, and skills.

Input
ParamTypeDescription
pageintegerPage number (1-based)
querystringSearch keyword(s) to find freelancers by title, description, or skills
per_pageintegerNumber of results per page (1-50)
Response
{
  "type": "object",
  "fields": {
    "page": "integer - current page number",
    "query": "string - the search query used",
    "per_page": "integer - results per page",
    "freelancers": "array of freelancer objects with name, title, description, profile_url, portrait_url, hourly_rate, currency, country, city, state, timezone, skills, job_success_score, top_rated, top_rated_plus, total_hours, total_earnings, total_completed_jobs, vetted, id_verified, hide_earnings, hide_jss, ciphertext",
    "total_pages": "integer - total number of pages available",
    "results_count": "integer - number of freelancer results returned on this page",
    "total_results": "integer - total matching freelancers"
  }
}

About the Upwork API

What the API Returns

The search_freelancers endpoint accepts a query string (skill name, job title, or any keyword) and returns an array of freelancer objects. Each object includes name, title, a short description, a direct profile_url, hourly_rate with currency, country and city for location, a skills array listing the freelancer's tagged competencies, and a job_success_score reflecting their historical client rating on the platform.

Pagination

Results are paginated using page (1-based integer) and per_page (1–50). The response also returns total_results (total matching freelancers for the query), total_pages, and results_count (records returned in the current page). This lets you walk through large result sets or build an interface that shows ranked candidates across multiple pages.

Data Coverage and Freshness

The API reflects Upwork's public freelancer marketplace. Profiles with private or restricted visibility on Upwork may not appear in results. Fields like hourly_rate and job_success_score correspond to what the freelancer has publicly set or earned on the platform at the time of the request. Availability status and recent activity are not included in the current response shape.

Reliability & maintenanceVerified

The Upwork API is a managed, monitored endpoint for upwork.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when upwork.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 upwork.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.

Last verified
3d ago
Latest check
1/1 endpoint passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a vendor sourcing tool that queries freelancers by skill and compares hourly rates across locations
  • Aggregate job success scores to rank candidates programmatically before manual review
  • Enrich a recruiter CRM with Upwork profile URLs, titles, and skills arrays pulled by keyword
  • Generate a market-rate report by querying multiple skill keywords and averaging returned hourly_rate values
  • Monitor how many freelancers list a given emerging skill using the total_results count across queries
  • Power an internal talent finder that lets non-technical staff search Upwork without accessing the site directly
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 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.

Frequently asked questions
Does Upwork have an official developer API?+
Yes. Upwork offers an official API at https://developers.upwork.com. It requires OAuth 2.0 and application approval, which can take time. This Parse API provides immediate access to freelancer search data without an approval process.
What does the job_success_score field represent?+
It reflects the freelancer's publicly displayed Job Success Score on Upwork — a percentage calculated from client feedback, contract outcomes, and repeat engagements. Not every profile displays a score; for newer freelancers with limited history the field may be absent or null.
Can I filter results by hourly rate range, location, or specific skills?+
The current endpoint accepts only a free-text query string for filtering. Results reflect Upwork's default relevance ranking for that query. Filtering by hourly_rate range, specific country, or skills subset is not available in the current API. You can fork the API on Parse and revise it to add filter parameters targeting those fields.
Are freelancer earnings or total contract history included?+
The response includes profile-level data such as hourly_rate, job_success_score, and skills. Detailed earnings history, total contract value, or individual client review text are not currently returned. You can fork the API on Parse and revise it to add a profile-detail endpoint that exposes deeper earnings and review data.
How many results can I retrieve per request and is there a cap on total pages?+
per_page accepts values from 1 to 50. The total_pages and total_results fields in each response tell you the full scope of available results for a given query. Deep pagination into very large result sets may return fewer unique profiles as Upwork's public-facing search typically surfaces the most relevant candidates in earlier pages.
Page content last updated . Spec covers 1 endpoint from upwork.com.
Related APIs in MarketplaceSee all →
freelancer.de API
Search and discover freelancers on freelancer.de by their skills and expertise, then view detailed profiles with ratings, experience metrics, and portfolio information. Find the perfect freelancer for your project by browsing skill sets and comparing professional backgrounds all in one place.
malt.fr API
Search and discover freelancers on Malt.fr by their expertise, view detailed profile information, and get autocomplete suggestions to refine your searches. Find the right freelancer for your project with access to comprehensive professional profiles and skills data.
serviceseeking.com.au API
Search and browse job postings and local service providers across Australia on ServiceSeeking.com.au. View detailed business profiles, ratings, pricing, and explore hundreds of service categories — from tradespeople to home services and beyond.
airtasker.com API
Search and browse Airtasker tasks by location, category, price, and keywords, then access detailed task information and user profiles. Get location suggestions and category recommendations to discover available work and service opportunities in your area.
mostaql.com API
Browse projects and freelancers on Mostaql.com's Arabic marketplace, view detailed project information and freelancer profiles, and explore available project categories. Find the right talent or opportunities that match your skills and requirements.
monster.com API
Search and retrieve job listings from Monster.com. Supports keyword and location-based search with structured results including job descriptions, salary ranges, company info, and employment details. Also provides access to popular job categories.
indeed.com API
Search and discover job opportunities on Indeed while accessing detailed job descriptions, company profiles, and salary insights all in one place. Get comprehensive career information including specific compensation data to help you find and evaluate the right job opportunity for you.
offerzen.com API
Browse and retrieve tech job listings from OfferZen's developer marketplace. Access structured job data including required skills, company details, location, and workplace policy, with support for keyword filtering and pagination.