Upwork Post Details Scraper avatar

Upwork Post Details Scraper

Try for free

2 hours trial then $9.99/month - No credit card required now

Go to Store
Upwork Post Details Scraper

Upwork Post Details Scraper

arlusm/upwork-post-details-scraper
Try for free

2 hours trial then $9.99/month - No credit card required now

This scraper takes direct Upwork job post URLs and extracts information such as job title, budget, description, and client data. It can optionally use a proxy server from a specified country. The results are provided in a structured JSON format for easy analysis or further processing.

Developer
Maintained by Community

Actor Metrics

  • 14 monthly users

  • No reviews yet

  • 2 bookmarks

  • >99% runs succeeded

  • 4.5 hours response time

  • Created in Jan 2025

  • Modified 3 days ago

Upwork Job Post Scraper

This scraper takes individual Upwork job post URLs and extracts detailed information about each post (title, description, budget, etc.). It can optionally use a proxy with a specified country code to request the data.


Input

The input is a JSON object that must contain at least one startUrls entry. It can also include an optional proxyCountryCode:

1{
2  "startUrls": [
3    {
4      "url": "https://www.upwork.com/freelance-jobs/apply/WIX-Website-Template-Development-for-Virtual-Staging-SaaS_~021883994784056195740"
5    }
6  ],
7  "proxyCountryCode": "FR"
8}

Input Fields

FieldTypeRequiredDescriptionDefault
startUrlsarrayyesAn array of objects, each containing a url for a specific Upwork job post.none
proxyCountryCodestringnoA two-letter country code to configure proxy usage. (e.g., US, FR) or "LOCAL" to disable."FR"
  • startUrls: Each URL should be the direct link to an Upwork job post.
  • proxyCountryCode: Determines where the proxy server is located. If "LOCAL", no remote proxy is used.

Output

The scraper outputs an array of job detail objects. Each job object may contain:

  • title: Title of the job post.
  • paymentType: Indicates if it’s an hourly or fixed-price job.
  • paymentAmount: The proposed pay range or budget.
  • description: Detailed text describing the job scope and requirements.
  • jobPosted: When the job was posted (e.g., “3 days ago”).
  • lastViewedByClient: The client’s latest activity timestamp.
  • jobType: Usually “Remote Job” or region-limited.
  • projectType: Complexity or nature of the project.
  • estimatedHours: “Less than 30 hrs/week” or “More than 30 hrs/week.”
  • duration: Project duration (e.g., “3-6 months”).
  • experienceLevel: The experience level required (“Entry”, “Intermediate”, “Expert”).
  • clientLocation: Where the client is located.
  • clientTotalSpent: Total amount the client has spent on Upwork.
  • clientTotalHires: How many freelancers the client has hired.
  • clientActiveHires: How many of those hires are currently active.
  • clientHoursBilled: The total hours the client has billed.
  • clientMemberSince: The date the client joined Upwork.
  • proposals: The range of proposals submitted (e.g., “5 to 10”).
  • interviews: How many candidates are currently being interviewed.
  • invitesSent: How many invitations the client sent out.
  • skills: An array of extracted skills for the job.
  • locationRestriction: Any geographical restriction applied to applicants (e.g., “Only freelancers located in the U.S. may apply.”).
  • contractToHire: Boolean indicating whether it’s a “contract-to-hire” opportunity.

Example output:

1[
2  {
3    "title": "Looking for a Startup Hubspot Sales Ops and CRM Manager",
4    "paymentType": "Hourly",
5    "paymentAmount": "$65.00 - $110.00",
6    "description": "We’re seeking a skilled and proactive freelance ...",
7    "jobPosted": "3 days ago",
8    "lastViewedByClient": "yesterday",
9    "jobType": "Remote Job",
10    "projectType": "Complex project",
11    "estimatedHours": "Less than 30 hrs/week",
12    "duration": "3-6 months",
13    "experienceLevel": "Intermediate",
14    "clientLocation": "United States",
15    "clientTotalSpent": "$154K",
16    "clientTotalHires": "30",
17    "clientActiveHires": "9",
18    "clientHoursBilled": "8,297 hours",
19    "clientMemberSince": "Apr 20, 2022",
20    "proposals": "20 to 50",
21    "interviews": "7",
22    "invitesSent": "5",
23    "skills": [
24      "HubSpot",
25      "Marketing Automation",
26      "Sales Operations",
27      "Sales"
28    ],
29    "locationRestriction": "Only freelancers located in the U.S. may apply.",
30    "contractToHire": true
31  }
32]

Usage

  1. Provide the Input: When running on Apify, add your Upwork job post URLs in startUrls (and optionally modify the proxyCountryCode).
  2. Run the Scraper: The scraper navigates to each job URL, parses the HTML, and collects the specified data.
  3. View Results: Once finished, the dataset will contain an array of job objects matching the above schema.