Upwork Freelancers Scraper · Rates, Earnings & JSS
Pricing
from $3.50 / 1,000 freelancer rows
Upwork Freelancers Scraper · Rates, Earnings & JSS
Find and shortlist Upwork freelancers without logging in. Search any skill, keep your Upwork filters, then filter by rate, JSS, earnings and hours. Get exact earnings, badges, location and skills, plus rating, hire-again rate and client feedback on request. Pay per freelancer.
Pricing
from $3.50 / 1,000 freelancer rows
Rating
0.0
(0)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
3
Monthly active users
8 days ago
Last modified
Categories
Share
Upwork Freelancers Scraper · Rates, Earnings, JSS & Work History
Scrape Upwork freelancer profiles from talent search without logging in. Each row is one freelancer: name, title, hourly rate, exact lifetime earnings, Job Success Score, hours billed, hourly and fixed-price job counts, Top Rated / Top Rated Plus badge, location, skills, portfolio and agency. Turn on profile details to add rating, hire-again rate, member since, last worked on, availability, job categories and the latest contracts with client feedback both ways.
Why use it
- Live talent search: the same results and order Upwork shows today, up to 10,000 freelancers per search.
- Exact numbers: lifetime earnings to the cent (unless the freelancer hides them), JSS as a percentage, hours billed.
- Filters that work: keep your own Upwork search URL with every filter, or filter by country, rate, JSS, earnings, hours, badge and agency membership here.
- Profile details on demand: pay for the profile read only when you want it.
- No login, no cookies, no Upwork account at risk.
Use cases
- Recruiting and talent sourcing: shortlist freelancers by rate, JSS, earnings and hours.
- Agency lead generation: find agency members and Top Rated Plus freelancers in a niche.
- Rate benchmarking: compare hourly rates by skill and country.
- Market research on the freelance economy: earnings and activity by category.
How it works
- Each keyword becomes an Upwork talent search (
/nx/search/talent/?q=...); search URLs are used as they are. - The actor reads 10 freelancers per search page from the page's own data and walks pages until it has Max results. Pages load over plain HTTP where Upwork allows it, otherwise in a real Firefox browser on a US residential connection.
- With Add profile details, it opens each freelancer's public profile and merges the extra fields.
- Freelancer profile URLs are read directly.
Input
| Field | What it does |
|---|---|
searchQueries | Keywords, one search each, e.g. python developer |
startUrls | Upwork talent search URLs (filters kept) or profile URLs |
profileUrls | Profile URLs, ~01... ids or custom profile URLs |
maxItems | Freelancers per search (default 50, up to 10,000) |
includeProfileDetails | Adds rating, hire-again, member since, contracts and feedback |
location, topRatedPlusOnly | Sent to Upwork with keyword searches |
topRatedOnly, minHourlyRate, maxHourlyRate, minJobSuccessScore, minTotalEarnings, minTotalHours, excludeAgencyMembers | Filters applied to the results |
{"searchQueries": ["python developer"],"location": "United States","maxItems": 100,"minJobSuccessScore": 90,"includeProfileDetails": true}
Output sample
{"freelancerId": "~0157e03059a690281f","profileUrl": "https://www.upwork.com/freelancers/~0157e03059a690281f","name": "Eugene K.","title": "Python Developer","country": "United States","city": "San Diego","hourlyRate": 37,"currency": "USD","jobSuccessScore": 100,"totalEarnings": null,"earningsHidden": true,"totalHours": 391,"totalHourlyJobs": 40,"totalFixedPriceJobs": 56,"topRatedStatus": "not_eligible","skills": ["Data Scraping", "Flask", "pandas"],"agency": null,"searchQuery": "python developer","totalSearchResults": 8529,"hasProfileDetails": true,"rating": 4.92,"totalFeedback": 67,"totalJobsWorked": 82,"hireAgainPercentage": 85.5,"memberSince": "2017-10-11T14:17:24Z","lastWorkedOn": "2025-10-16T00:00:00.000Z","availability": "As Needed - Open to Offers","completedJobsCount": 81,"workHistory": [{ "title": "Scraping for Tattoo Shops", "contractType": "Fixed", "status": "Closed", "clientFeedbackScore": 5, "clientFeedback": "I will hire Eugene again if we need him.", "freelancerFeedbackScore": 5 }]}
Key output fields
- Search card (every row):
freelancerId,profileUrl,customProfileUrl,name,title,description,country,state,city,region,timezone,hourlyRate,jobSuccessScore,totalEarnings,earningsHidden,totalHours,totalHourlyJobs,totalFixedPriceJobs,topRatedStatus,isTopRated,isTopRatedPlus,identityVerified,skills,portfolio,agency,portraitUrl,searchPosition. - Profile details (
hasProfileDetails: true):rating,totalFeedback,totalJobsWorked,hireAgainPercentage,memberSince,lastWorkedOn,availability,contractToHire,jobCategories,specializedProfiles,portfolioProjects,completedJobsCount,jobsInProgressCount,workHistory(latest 10 completed contracts plus those in progress, with feedback both ways),testimonials.
FAQ
Do I need an Upwork account? No. Everything comes from pages Upwork shows to logged-out visitors.
Why is totalEarnings null for some freelancers? They chose to hide earnings (earningsHidden: true).
Why do rows from profileUrls have no earnings or JSS? Upwork shows those on search cards only, not on logged-out profile pages. Search for the freelancer to get them.
Why only the latest contracts? The logged-out profile page carries the newest 10 completed contracts; completedJobsCount gives the full count.
Languages, education, employment? Upwork does not include them in the logged-out profile page, so they are not in the output.
Free Apify plan? The first 3 rows of a run are complete. After that, totalEarnings is rounded to its order of magnitude and workHistory / portfolioProjects are left out, with a freePlanNote on the row. Any paid Apify plan gets every field.
Pricing? Pay per event: one event per freelancer row, plus one per row with profile details. Error rows (failed or private profiles, empty searches) are free.
Support
Open an issue on the actor's Issues tab and include the run link.
Explore more scrapers
🤖 For AI agents & LLM apps
Call the actor with searchQueries and maxItems; each dataset item is one flat freelancer record with stable freelancerId. Use profileUrls for a known freelancer. Fields absent on the source are null, never guessed.
⚠️ Disclaimer
This actor collects only data Upwork shows publicly to logged-out visitors. It is not affiliated with or endorsed by Upwork. You are responsible for using the data in line with Upwork's terms, data-protection law (GDPR, CCPA) and your local regulations; do not use personal data for spam.
SEO Keywords
upwork scraper, upwork freelancers scraper, upwork talent search scraper, upwork profile scraper, upwork freelancer data, scrape upwork freelancers, upwork hourly rates, upwork job success score, upwork earnings, upwork top rated plus, freelancer lead generation, hire freelancers data, upwork api alternative