Upwork Freelancers Scraper
Upwork Freelancer Profile Scraper
Scrapes freelancer profiles from Upwork by keyword. Returns hourly rate, Job Success Score, lifetime earnings band, skills, location, Top Rated status, availability and completed job counts as structured JSON.
Upwork Scraper Features
- Search freelancers by any keyword — role, stack, or specialism
- Filter to Top Rated / Top Rated Plus profiles only
- Filter to US-based freelancers only
- Returns 13 fields per profile, including Job Success Score and total hours worked
- Paginates the result set, so large searches complete in one run
- Caps output with
maxItems
What can you do with Upwork freelancer data?
- Recruiters — Build a shortlist for a stack, filtered to Top Rated, without paging through search by hand.
- Rate benchmarking — Compare hourly rates across regions for the same skill before setting a budget.
- Agencies — Map the competition in a specialism: how many, at what rate, with what success scores.
- Market researchers — Track the supply side of a skill over time by re-running the same query.
- Sales teams — Find independent professionals in a category as a prospect list.
How Upwork Scraper Works
- You supply a search keyword and, optionally, the Top Rated and US-only filters.
- The scraper runs the search and pages through the results.
- Each profile card is parsed into the field set below.
- Records stream to the dataset as they are parsed, stopping at
maxItems.
Input
{
"searchQuery": "python developer",
"topRatedOnly": true,
"usOnlyFilter": false,
"maxItems": 100
}
| Field | Type | Default | Description |
|---|---|---|---|
searchQuery |
string | python developer |
Keyword — e.g. graphic designer, rust engineer |
maxItems |
integer | 20 |
Maximum freelancer profiles to scrape |
topRatedOnly |
boolean | false |
Restrict to Top Rated or Top Rated Plus freelancers |
usOnlyFilter |
boolean | false |
Restrict to US-based freelancers |
Combine both filters for the narrowest, highest-signal set.
Upwork Scraper Output Fields
{
"name": "Jane D.",
"title": "Senior Python Developer | Django & FastAPI",
"hourly_rate": "$85/hr",
"job_success_score": "100%",
"total_earnings": "$300K+",
"location": "Austin, United States",
"skills": "Python,Django,FastAPI,PostgreSQL,AWS",
"availability": "Available Now",
"top_rated_status": "Top Rated Plus",
"profile_url": "https://www.upwork.com/freelancers/~01abcdef",
"total_jobs": "142",
"total_hours": "6800",
"scraped_at": "2026-07-25T09:14:22Z"
}
| Field | Type | Description |
|---|---|---|
name |
string | Public display name |
title |
string | Professional title or tagline |
hourly_rate |
string | Hourly rate — e.g. $85/hr |
job_success_score |
string | Job Success Score percentage |
total_earnings |
string | Lifetime earnings band — e.g. $10K+ |
location |
string | City and country |
skills |
string | Comma-separated skills listed on the profile |
availability |
string | Availability badge — Available Now or empty |
top_rated_status |
string | Top Rated, Top Rated Plus, or empty |
profile_url |
string | Full URL to the Upwork profile |
total_jobs |
string | Jobs completed |
total_hours |
string | Hours worked |
scraped_at |
string | ISO timestamp of extraction |
FAQ
Does the Upwork Scraper need an Upwork account?
No. It reads public freelancer search results.
Why is name abbreviated, like "Jane D."?
That is how Upwork displays freelancer names in public search. Full surnames are not shown to logged-out visitors, and nothing is invented to fill the gap.
Why is total_earnings a band rather than an exact figure?
Upwork publishes it as a band — $10K+, $300K+. The field carries what the platform shows.
Can I get a freelancer's full work history or client reviews?
Not with this actor. You get the profile-level summary, including job and hour totals.
Does topRatedOnly include Top Rated Plus?
Yes — both tiers. The top_rated_status field tells you which one each profile holds.
Need More Features?
Need per-review extraction or category browsing instead of keyword search? Open an issue on the actor.
Why Use Upwork Scraper?
- Job Success Score and hours on every record — The two fields that separate a real track record from a new profile.
- Filters that match how you actually hire — Top Rated and US-only are applied at search, not left for you to post-process.
- Pay per profile — No subscription. A single shortlist run costs what those profiles cost and then stops.