Upwork Scraper

  • trudax/upwork-scraper
  • Modified
  • Users 388
  • Runs 5.5k
  • Created by Author's avatarGustavo Rudiger

Extract data from the top freelancing website. Search by URL or search terms, filter by categories, English level, and hourly rate. Get info about freelancers and agencies from upwork.com without login. Download your data as HTML table, JSON, CSV, Excel, or XML.

Free trial for 7 days

Then $40.00/month

No credit card required now

Upwork Scraper

Free trial for 7 days

Then $40.00/month

What does Upwork Scraper do?

Upwork Scraper enables you to extract data from Upwork. It allows you to extract info from freelancers, jobs and agencies without login or using the Upwork API.

Why scrape Upwork?

Upwork is the biggest freelance marketplace platform in the world, with over 145,000 employers who spend a total of over $2.5 billion per year. It's also worth noting that 30% of Fortune 100 companies use Upwork.

With all that activity, Upwork data is well worth collecting and using in a number of different ways.

If you're a freelancer, you might use it to keep track of the competition or identify new opportunities. You can also automatically apply to the jobs by integrating with the Upwork Job Auto Apply actor and passing the applyUrl. Check the integration documentation for more details.

If you're an employer, you could gather data on potential freelancers, find your competitors on the platform, or make sure that your projects are targeted so as to attract the best talent.

How much will it cost to scrape Upwork?

Upwork Scraper is efficient and cheap to run. It will only cost approx. $0.25 per 100 requests on top of the monthly rental fee.

How to scrape Upwork

You can fill the search inputs in the actor or, if you want a more complex search, you can copy the url generated by your search in Upwork website and use it as a start url in the actor inputs. You can start the scraper from any of the following URLs:

Example results

The output of Upwork Scraper is stored in a dataset and will look something like this:

Freelancer profile:

{ "name": "John Dow", "location": "St. John's - Canada", "locality": "St. John's", "country": "Canada", "title": "Blockchain Developer", "description": "I believe highly in perfection in my work. I have written short articles, reviews, as well as blog posts for different companies using WordPress and have done website testing as well. I am a gifted technical writer and article spinner. I have also been a ghostwriter for multiple clients on a variety of both fiction and non-fiction writing. I also do data entry on a daily basis into Excel books and am responsible for payroll at my full time job. I have excellent communication skills and work as an administrative assistant on a full time basis. I understand the need for quality work and communication to get the job done right!", "jobSuccess": "100%", "hourlyRate": "100.00", "totalHours": "835", "totalJobs": "20", "stats": [ "20\nTotal Jobs", "835\nTotal Hours", "20 Total Jobs", "835 Total Hours", "20 Total Jobs", "835 Total Hours" ], "profileUrl": "https://www.upwork.com/freelancers/XXXXXX" }

Job:

{ "title": "Job title", "description": "Job description", "jobType": "Hourly: $45.00", "contractorTier": "Intermediate", "skills": "Database\nDatabase Maintenance\nWeb Service\nJava\nGit\nSQLite\nCSS\nWeb Development\nHTML", "createdAt": "15 minutes ago", "scrapedAt": "2022-08-16T13:50:20.995Z", "url": "https://www.upwork.com/freelance-jobs/apply/XXXX/", "applyUrl": "https://www.upwork.com/ab/proposals/job/XXXX/apply/#/" }

Extend output function

You can use this function to update the result output of this actor. You can choose what data from the page you want to scrape. The output from this will function will get merged with the result output.

The return value of this function has to be an object!

You can return fields to archive 3 different things:

  • Add a new field - Return object with a field that is not in the result output
  • Change a field - Return an existing field with a new value
  • Remove a field - Return an existing field with a value undefined
async () => { return { pageTitle: document.querySelector("title").innerText, }; };

This example will add the title of the page to the final object:

{ "name": "John Dow", "location": "St. John's - Canada", "locality": "St. John's", "country": "Canada", "title": "Blockchain Developer", "description": "I believe highly in perfection in my work. I have written short articles, reviews, as well as blog posts for different companies using WordPress and have done website testing as well. I am a gifted technical writer and article spinner. I have also been a ghostwriter for multiple clients on a variety of both fiction and non-fiction writing. I also do data entry on a daily basis into Excel books and am responsible for payroll at my full time job. I have excellent communication skills and work as an administrative assistant on a full time basis. I understand the need for quality work and communication to get the job done right!", "jobSuccess": "100%", "hourlyRate": "100.00", "totalHours": "835", "totalJobs": "20", "stats": [ "20\nTotal Jobs", "835\nTotal Hours", "20 Total Jobs", "835 Total Hours", "20 Total Jobs", "835 Total Hours" ], "profileUrl": "https://www.upwork.com/freelancers/XXXXXX", "pageTitle": "John Doe - Fast, Friendly, Reliable! - Upwork" }

Personal data

You should be aware that your results might contain personal data. Personal data is protected by GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. You can also read our blog post on the legality of web scraping.