Upwork Job Scraper avatar

Upwork Job Scraper

Pricing

from $35.00 / 1,000 job returneds

Go to Apify Store
Upwork Job Scraper

Upwork Job Scraper

Scrape Upwork job search results by keyword or search URL, with title, budget, skills and client country, spend and verification status. Works with Apify MCP and the API.

Pricing

from $35.00 / 1,000 job returneds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Share

Upwork Job Scraper — Keyword & URL Job Search

Upwork Job Scraper helps freelancers, agencies, and AI agents pull structured Upwork job-search rows — title, budget, skills, client country/spend/verified status, proposal counts, and permalinks — from keywords or Upwork nx/search/jobs URLs. It runs on Apify (API, schedules, integrations, MCP) so you can monitor niches without manual browsing.

This Actor uses a managed authenticated Upwork access route (account-backed nested provider). Optional caller session cookies can be supplied for a single run; they stay out of the dataset, OUTPUT, and logs.

Upwork is a trademark of its owner. This independent Actor is not affiliated with, associated with, or endorsed by Upwork Global Inc.

Best fit

Use this Actor when you need fresh Upwork job cards for monitoring, lead lists, or agent workflows. For multi-board aggregation across Indeed/LinkedIn/Glassdoor, route to Jobs Scraper (multi-board). For Indeed-only detail enrichment, use Indeed Job Scraper (Indeed detail). For Google Jobs SERP cards, use Google Jobs Scraper (Google Jobs SERP).

Workflow story

A freelance agency lead wants new javascript developer posts on a schedule. They save this Actor with searchQueries: ["javascript developer"], sortBy: "recency", and a bounded maxResults. Each execution returns normalized rows with budget and client spend, then Zapier/Make filters payment-verified clients into Slack. When the niche is quiet, the Actor completes with VALID_EMPTY and zero job charges instead of inventing rows.

How to scrape Upwork jobs

  1. Open this Actor in Apify Console
  2. Enter one or more searchQueries or an Upwork nx/search/jobs URL in startUrls
  3. Set maxResults for the quality sample
  4. Start the Actor — download JSON / CSV / Excel from the dataset

Input

See the Input tab. Provide at least one keyword or a valid Upwork search URL.

{
"searchQueries": ["javascript developer"],
"maxResults": 5,
"maxPagesPerQuery": 1,
"sortBy": "recency",
"jobType": "all",
"experienceLevel": "all",
"paymentVerified": false
}

Optional secret field cookies: JSON array of {"name","value"} session cookies for this run only (excluded from dataset and OUTPUT).

Output

One dataset row per job:

{
"jobId": "~022100516022389626945",
"title": "Looking for Skilled AI Engineers",
"jobUrl": "https://www.upwork.com/jobs/Looking_~022100516022389626945/",
"description": "Build agents...",
"jobType": "Hourly",
"budget": "$15-$55 / hr",
"hourlyRange": { "min": 15, "max": 55, "currency": "USD" },
"experienceLevel": "Expert",
"postedAt": "2026-01-15T12:00:00.000Z",
"skills": ["Node.js", "AI"],
"clientCountry": "United Arab Emirates",
"clientPaymentVerified": true,
"clientSpend": 1200,
"source": "neatrat-managed"
}

Data fields

FieldDescription
jobIdUpwork ciphertext id (~…)
title / jobUrl / descriptionCore posting
jobType / budget / hourlyRange / fixedPriceCompensation
experienceLevel / duration / engagementScope labels
postedAtRaw / postedAtRelative + ISO timestamps
skills / proposalsRange / connectsMarketplace signals
clientCountry / clientCity / clientPaymentVerified / clientSpend / clientRating / clientHiresClient signals

Pricing

Monetization is Pay per event + platform usage (usage paid by the run user). The live Pricing tab in Apify Console is the current source of truth for event prices.

Typical events:

EventRole
apify-actor-startSynthetic start event
job-foundPrimary event — one charge per unique job row

Invalid inputs and empty matches skip the job-event charge.

API example

curl "https://api.apify.com/v2/acts/khadinakbar~upwork-job-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["javascript developer"],"maxResults":5,"sortBy":"recency"}'

MCP / agent prompt card

Tool: apify--upwork-job-scraper

Example request:

Search Upwork for recent javascript developer jobs and return title, budget, skills, clientPaymentVerified, and jobUrl. Cap results with maxResults.

After completion: read the default dataset, confirm OUTPUT.outcome is COMPLETE or VALID_EMPTY, and reconcile job-found charges with row count. Provenance is the managed authenticated Upwork route (source: neatrat-managed). Scope is public job-search cards — not proposals, messages, or private client PII. Paginate with maxPagesPerQuery only when you need depth beyond the first page.

Limits and recovery

Provide specific keywords or a valid Upwork search URL. Confirm OUTPUT.outcome after each execution. Schedule monitoring with bounded maxResults. Source data is current public job-search cards via the managed authenticated route.

Best results

  • Prefer specific niche keywords over broad terms
  • Use sortBy: recency for monitoring pipelines
  • Cap maxResults for cost control
  • Treat VALID_EMPTY as a real no-match

Builder's note

I built this Actor after cookieless browser routes stalled on Upwork's protected public HTML. I found the reliable product path is a managed authenticated nested Store Actor billed with an owner token, with optional caller cookies forwarded when supplied. My goal was margin-safe PPE after provider cost and Apify’s share.

This Actor retrieves Upwork job listings through a managed authenticated access route for legitimate market research, lead generation, and personal job monitoring. You are responsible for complying with Upwork's Terms of Service, applicable laws, and your own data-use policies. Use this tool for lawful research and monitoring that respects Upwork's Terms of Service, applicable laws, and your own data-use policies. The authors are not affiliated with Upwork.

Support

Open an issue on the Actor's Issues tab. Sibling routing is covered in Best fit above.