Upwork Scraper Without Stale Job Posts

Upwork Scraper Without Stale Job Posts

Comes without any stale data like many other scrapers do. Low cost and efficient. Can filter out duplicates and posts older than 24h

AUTOMATIONJOBSApify

Upwork Job Scraper

This scraper extracts detailed job information from Upwork job listings based on the provided Upwork job search URL.

Handling Upwork's 403 Errors

Upwork has increased its protections, which may result in more 403 Forbidden errors. To minimize these issues and ensure successful job scraping, follow these best practices:

1. Use Multiple Proxy Countries

  • Some proxy locations work better than others. Instead of using a fixed country every time(e.g., "FR"), try rotating between different countries ("SE", "DE", "SG", etc.).
  • If a request fails, retry using a different proxy country.

2. Utilize Cookies for Better Access

  • Logging in to Upwork and extracting session cookies can improve success rates.
  • If you're using cookies, use your own country as the proxy country.

Input

Check the json example in input tab: https://apify.com/arlusm/upwork-scraper-with-fresh-job-posts/input-schema

To call via API:

POST url: https://api.apify.com/v2/acts/arlusm~upwork-scraper-with-fresh-job-posts/run-sync-get-dataset-items?token={YOUR_TOKEN}

POST body content:

1"startUrls": 
2[
3  {
4    "url": "https://www.upwork.com/nx/search/jobs/?per_page=50&q=stripe",
5    "method": "GET"
6  }
7],
8"proxyCountryCode": "FR",

Output

The output is an array of job objects, with each object containing the following details:

  • title: The title of the job post
  • link: Direct URL to the job post
  • paymentType: Hourly or fixed-price payment type
  • budget: The job's budget (if available)
  • projectLength: Estimated project duration
  • shortBio: Description of the job
  • skills: List of required skills
  • publishedDate: When the job was posted
  • normalizedDate: publishedDate formatted in DateTime. This is not accurate, but rather an estimation,
  • searchUrl: The URL that was used for the job search

Example output:

1[
2  {
3    "title": "Full Stack Web Developer",
4    "link": "https://www.upwork.com/job/full-stack-web-developer_~abcd1234",
5    "paymentType": "Hourly",
6    "budget": "$100.00",
7    "projectLength": "3-6 months",
8    "shortBio": "Looking for an experienced full-stack web developer...",
9    "skills": ["JavaScript", "React", "Node.js"],
10    "publishedDate": "Posted 6 minutes ago",
11    "normalizedDate": "2025-01-20T13:34:01.384Z",
12    "searchUrl": "https://www.upwork.com/search/jobs/?q=web%20developer"
13  }
14]

Usage

The scraper can be configured via Apify’s interface. Simply provide the Upwork job search URL, and the scraper will return job data as described.

Frequently Asked Questions

Is it legal to scrape job listings or public data?

Yes, if you're scraping publicly available data for personal or internal use. Always review Websute's Terms of Service before large-scale use or redistribution.

Do I need to code to use this scraper?

No. This is a no-code tool — just enter a job title, location, and run the scraper directly from your dashboard or Apify actor page.

What data does it extract?

It extracts job titles, companies, salaries (if available), descriptions, locations, and post dates. You can export all of it to Excel or JSON.

Can I scrape multiple pages or filter by location?

Yes, you can scrape multiple pages and refine by job title, location, keyword, or more depending on the input settings you use.

How do I get started?

You can use the Try Now button on this page to go to the scraper. You’ll be guided to input a search term and get structured results. No setup needed!