Upwork Jobs Scraper - $0.80 / 1000 Jobs avatar

Upwork Jobs Scraper - $0.80 / 1000 Jobs

Pricing

from $0.80 / 1,000 jobs

Go to Apify Store
Upwork Jobs Scraper - $0.80 / 1000 Jobs

Upwork Jobs Scraper - $0.80 / 1000 Jobs

Scrape Upwork job posts as clean JSON: title, full description, budget or hourly range, experience level, skills and post time for any search or the newest-jobs feed, with Upwork's filters. Optional proposals and client stats. No login. $0.80 per 1000 jobs.

Pricing

from $0.80 / 1,000 jobs

Rating

0.0

(0)

Developer

Scrapeunblocker

Scrapeunblocker

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Upwork Jobs Scraper

Scrape Upwork job posts as clean, structured JSON - the title, the full description, when the job was published, whether it is hourly or fixed price with the hourly range or budget, the experience level, project length, workload and the skills the client asks for. Search by keyword with Upwork's own filters, or read the newest jobs feed. Turn on job page details to also get the number of proposals, interviews and hires, the qualifications and the client's country, city, payment verification, rating, reviews and total spent. No Upwork account, API key or proxies to set up.

Features

  • Any keyword - the jobs Upwork lists for it, in Upwork's order (position), up to 5000 per search.
  • Newest jobs feed - every new job, newest first, with no keyword (enter *).
  • Upwork's filters - job type, experience level, fixed-price budget, hourly rate, client's past hires, hours per week, project length, client location, category and contract-to-hire.
  • Numbers you can compute with - hourlyMin, hourlyMax and budget in USD as numbers, dates in ISO 8601 UTC.
  • Full descriptions - the whole job text, not a snippet.
  • Job page details - proposals, interviews, invites, hires, positions to hire, the client's last activity, required qualifications (countries, Job Success Score, English level) and the client's stats (never the client's name).
  • Deduplicated - a job that moves between pages while you read is returned once per search.

Use cases

  • Job alerts - run the newest jobs feed or your keywords on a schedule and act on new posts first.
  • Lead generation - find clients with verified payment, a high rating and a big total spend.
  • Market research - which skills are in demand, at which rates and budgets.
  • Pricing your services - compare hourly ranges and budgets for your skill and experience level.
  • Competition checks - see how many proposals a job already has before you apply.

Input

FieldTypeDefaultDescription
searchesarray["python"]Keywords (one search each); * (or an empty string) = newest jobs feed.
maxResultsPerSearchinteger50Jobs per search (1-5000).
includeDetailsbooleanfalseAdd each job's page: proposals and client stats.
jobTypestringanyhourly or fixed.
experienceLevelarrayallentry, intermediate, expert.
fixedPriceMin / fixedPriceMaxinteger-Fixed-price budget range in USD.
hourlyRateMin / hourlyRateMaxinteger-Hourly rate range in USD.
clientHiresarrayallClient's past hires: 0, 1-9, 10-.
workloadstringanypart_time (under 30 hrs/week) or full_time.
projectLengtharrayallweek, month, semester (3-6 months), ongoing (over 6 months).
clientLocationsarrayallClient regions or countries as Upwork names them, e.g. Europe, United States.
categoriesarrayallUpwork categories (pick from the list).
contractToHirebooleanfalseOnly contract-to-hire jobs.
sortstringUpwork'srelevance or recency (default: relevance for a keyword, newest for the feed).
concurrencyinteger2Searches run at the same time (1-5).

Example input

{
"searches": ["python", "*"],
"maxResultsPerSearch": 200,
"jobType": "hourly",
"experienceLevel": ["intermediate", "expert"],
"hourlyRateMin": 40,
"sort": "recency"
}

Output

One dataset item per job:

{
"id": "2112181236302511171",
"ciphertext": "~022112181236302511171",
"url": "https://www.upwork.com/jobs/~022112181236302511171",
"title": "Python Expert",
"description": "FastAPI Qdrant Multi Tenant XTTS Voice Clone SadTalker Avatar Docker\n\nDescription:\n\nBuild secure multi tenant AI Avatar backend in FastAPI plus Docker ...",
"publishedAt": "2026-10-19T14:16:56.680Z",
"createdAt": "2026-10-19T13:57:04.268Z",
"renewedAt": null,
"jobType": "fixed",
"hourlyMin": null,
"hourlyMax": null,
"budget": 150,
"weeklyRetainerBudget": null,
"currency": "USD",
"experienceLevel": "expert",
"duration": "1 to 3 months",
"workload": null,
"skills": ["Python", "Python Script", "API"],
"premium": false,
"enterprise": null,
"position": 1,
"query": "python",
"sort": "relevance"
}

With includeDetails on, each job also gets (shortened):

{
"title": "Full Stack Developer for Node.js and React.js",
"jobType": "fixed",
"budget": 700,
"privateListing": false,
"category": "Web Development",
"categoryGroup": "Web, Mobile & Software Dev",
"occupation": "Full Stack Development",
"proposals": 16,
"interviewing": 0,
"invitesSent": 0,
"hired": 0,
"positionsToHire": 4,
"lastClientActivity": "2026-10-15T15:48:40.742Z",
"qualifications": {
"countries": ["India"],
"minJobSuccessScore": 90,
"englishLevel": 3,
"risingTalent": true,
"portfolioRequired": false
},
"client": {
"country": "India",
"city": "Pune",
"timezone": "Europe/London (UTC+01:00)",
"paymentVerified": true,
"rating": 4.99,
"reviews": 12,
"totalSpent": 7432.47,
"hires": 24,
"totalAssignments": 28,
"activeAssignments": 3,
"hoursBilled": 415.5,
"memberSince": "2021-04-10T00:00:00.000Z",
"isTopClient": false,
"isEnterprise": false
}
}

A private listing (its page is shown to signed-in Upwork members only) keeps the search fields and gets "privateListing": true; a job whose page could not be read gets "detailsError": "unavailable".

The Jobs view shows one row per job with the title, date, type, rates or budget, experience level, length, workload and skills; the Job page details view shows the proposals and the client's stats. Searches that return no jobs or cannot be run go to the ERRORS record in the run's key-value store, with the reason. They are not billed.

Pricing

$0.80 per 1000 jobs (pay per result) - one dataset item is one job. With includeDetails on, every job that comes back with its job page details is also charged the job-details event at $0.80 per 1000 ($1.60 per 1000 jobs with details in all); private listings and pages that could not be read are not. Failed searches are free.

Notes

  • Upwork shows signed-out visitors the first 5000 results of a search; split a broad search with filters or narrower keywords to go further.
  • The client's stats and the number of proposals are on each job's page, so they come only with includeDetails (one more request per job, a slower run).
  • The newest jobs feed (*) lists every new job; with sort set to recency, a renewed job is placed by its renewal time.
  • Client names are never returned.
  • Powered by ScrapeUnblocker.