Actor picture

Upwork Scraper

trudax/upwork-scraper

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/month

No credit card required now

Author's avatarGustavo Rudiger
  • Modified
  • Users199
  • Runs1,296
Actor picture
Upwork Scraper

Free trial for 7 days

Then $40/month

What does Upwork Scraper do?

Upwork Scraper enables you to extract data from Upwork. It allows you to extract info from freelancers 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.

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 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:

{
  "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"
}

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"
}

Upwork stores the full data of a freelancer in a JavaScript variable. You can access that variable to get more information from a freelancer profile. The code below adds the full profile variable to the output. You can use the extended output function to extract only the data that you need.

async () => {
  return { profileResponse: window.PROFILE_RESPONSE };
};

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.

Industries

See how Upwork Scraper is used in industries around the world