Upwork Freelancer & Talent Scraper
parseforge/upwork-scraper
JobsDeveloper toolsLead generation
Scrapes Upwork freelancer profiles by search term and returns each one as a flat row with title, hourly rate, skills, location, and job success score.
- Total users
- 32
- Monthly active
- 7
- Total runs
- 221
- Bookmarked
- 0
- Rating
- Not rated yet
- Last modified
- 9 days ago
Overview
Upwork Freelancer & Talent Scraper
Scrape Upwork freelancer profiles from any talent search, up to a million per run. Every profile comes with its title, rate, skills, location, and job success score. No login or API key. Export to CSV, JSON, Excel, or XML.
Upwork's official API needs a developer account, OAuth tokens, and strict rate limits. This reads the public talent search results directly, filtered by your keywords, and returns each freelancer card in one fixed schema. Build a candidate pipeline without touching the API.
| Who uses it | What they scrape Upwork for |
|---|---|
| Recruiters | Build a shortlist of freelancers matching a specific skill set. |
| Sales teams | Find independent contractors who may need your SaaS tool. |
| Market researchers | Track the supply and average rates of a skill in a region. |
| Agency owners | Benchmark competitor freelancer profiles and their rates. |
What it does
This Actor collects Upwork freelancer profiles by search term and returns each one as a flat row.
- ๐ Keyword-driven search: feed it one search term or a list of hundreds, and it harvests every public freelancer card Upwork returns.
- ๐ Flat row output: each freelancer lands as one row with title, hourly rate, skills, location, and job success score, ready for a spreadsheet.
- โก High-volume runs: set maxItems up to 1,000,000 and let the Actor paginate through results until it hits your cap or the search runs dry.
- ๐ Stateless design: no cookies, no sessions, no logins. Every run starts fresh from the public talent marketplace.
Results export to CSV, JSON, Excel, or XML, or straight from the API.
What you can do with Upwork data
๐ฅ Build a candidate pipeline.
A recruiter searches for 'react developer' and 'node.js developer', collects 500 profiles, and filters by job success score to invite the top 20 to an interview.
๐ Track freelance rate trends.
A market analyst runs the Actor weekly for 'UI designer' and 'UX researcher', then plots the average hourly rate over time to advise a pricing report.
๐ฏ Find prospects for your tool.
A SaaS founder searches for 'virtual assistant' and 'bookkeeper', collects 1,000 profiles, and enriches the list with contact data for a cold outreach campaign.
๐ข Benchmark your agency against the market.
An agency owner scrapes profiles for 'copywriter' and 'SEO specialist', compares their own rates and skills to the top 100 results, and adjusts their service packages.
Why choose this scraper
| What you get | |
|---|---|
| No API registration | Skip the OAuth dance and developer account setup. |
| Full freelancer card | Title, rate, skills, location, and job success score in every row. |
| Bulk search terms | Paste a list of 50 skills and collect candidates for all of them in one run. |
| Predictable schema | Every run returns the same columns, so your pipeline never breaks. |
How it compares
This Actor focuses on freelancer profiles from talent search, while the competitors below target job postings or offer a different input method for talent data.
| Feature | ParseForge | Upwork Job Extractor โก | Upwork Talent Search Scraper | Upwork Jobs Scraper 2026 |
|---|---|---|---|---|
| Scrapes freelancer profiles | Yes | Not listed | Yes | Not listed |
| Keyword-based search input | Yes | Not listed | Not listed | Not listed |
| Scrapes job postings | Not listed | Yes | Not listed | Yes |
| No API key required | Yes | Not listed | Not listed | Not listed |
| Accepts direct Upwork URL | Not listed | Not listed | Yes | Not listed |
Configure the run
Drive the Actor from one or more search terms, and set a hard cap on how many profiles to collect per run. The Input tab lists every parameter.
A first run with the defaults:
{
"searchTerms": [
"react developer"
],
"maxItems": 10
}
A larger pull:
{
"searchTerms": [
"react developer"
],
"maxItems": 200
}
Pricing
Pay-per-result: $0.021 per result collected. You pay only for the results written to your dataset.
| Results collected | Approximate cost |
|---|---|
| 100 results | $2.10 |
| 1,000 results | $21.00 |
| 10,000 results | $210.00 |
New Apify accounts start with $5 in free credit.
Free users
Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.
Run it
- Create a free Apify account with $5 in credit.
- Open the Upwork Freelancer & Talent Scraper.
- Set your inputs and any filters, then click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.
Use with AI agents (MCP)
Give an AI agent live access to Upwork through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/upwork-scraper"
Then prompt it in plain language to run the scraper and read back the results.
Troubleshooting
Why am I getting no results?
Check that your search terms match how Upwork lists skills. Try a broader term like 'developer' instead of a very niche phrase. Also verify that maxItems is set to at least 1.
The run stopped early and I didn't get my full maxItems count.
Upwork may have returned fewer results than your cap for that search term. The Actor collects everything available and then stops. Try a more common search term or remove location filters.
I'm getting errors or empty rows after a few hundred results.
Upwork may be rate-limiting your IP. Add Apify proxy configuration to your run to rotate IP addresses, and increase the run's timeout if needed.
The hourly rate field is empty for some freelancers.
Some freelancers do not publish their hourly rate on their public card. The Actor leaves the field blank when Upwork does not show it.
Can I filter by job success score or hourly rate inside the Actor?
The Actor collects all results for your search terms. To filter by score or rate, export the dataset to a spreadsheet and sort or filter there, or use a downstream Apify Actor to process the data.
FAQ
| Question | Answer |
|---|---|
| Do I need an Upwork account or API key to run this? | No. The Actor reads the public talent search pages that anyone can see in a browser. No login, no API key, no OAuth. |
| What data do I get for each freelancer? | You get the freelancer's title, hourly rate, skills list, location, job success score, and other visible profile card fields. The exact columns are shown in the sample output on the Actor's page. |
| Can I scrape a specific freelancer's full profile page? | This Actor collects the cards from the talent search results page. It does not open individual profile pages, so you get the summary data that appears in the search listing. |
| How many profiles can I collect in one run? | You set the maxItems limit, up to 1,000,000. The Actor stops when it reaches your cap or when Upwork has no more results for your search terms. |
| Can I search for more than one skill at a time? | Yes. Add multiple search terms in the input, and the Actor runs each one sequentially, appending all results to the same dataset. |
| Does this work for any country or location? | The Actor returns whatever Upwork shows for your search. You can include location keywords in your search terms, like 'react developer Germany', to narrow results. |
| Will I get blocked by Upwork? | The Actor uses standard HTTP requests with reasonable delays. For very large runs, consider using Apify proxies to rotate IP addresses and reduce the chance of rate-limiting. |
| What output formats are supported? | You can export your dataset to CSV, JSON, Excel, or XML from the Apify console or via the API. |
| Can I schedule this to run automatically? | Yes. Use Apify's scheduler to run the Actor daily, weekly, or on a custom cron expression, and have fresh freelancer data waiting for you. |
| How is this different from the Upwork Jobs Scraper? | This Actor scrapes freelancer profiles from the talent search. The Jobs Scraper scrapes job postings from the project catalog. They target opposite sides of the marketplace. |
Related actors
Browse the full ParseForge collection for more scrapers.
๐ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.
โ ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Upwork Global Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.
Input
| Field | Type | What it does | Default |
|---|---|---|---|
| searchTerms | array | Keywords used to search the Upwork talent marketplace (e.g. 'react developer', 'graphic designer', 'copywriter'). The scraper iterates through Upwork's public talent search results for each term and harvests every freelancer card it finds. | ["react developer"] |
| maxItems | integer | How many job listings to collect per run. | 10 |
Pricing
from $19.00 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| result | Single result in the default dataset. | $0.019 to $0.021 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
API
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~upwork-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchTerms": [
"react developer"
],
"maxItems": 3
}' Examples
Input that runs as-is.
{
"searchTerms": [
"react developer"
],
"maxItems": 3
} Reviews
No reviews yet. Be the first.
Issues
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
Related scrapers
Run Upwork Freelancer & Talent Scraper on Apify All scrapers
