Upwork Jobs [$0.59] — 130K+ Instant Database, Budgets & Filters avatar

Upwork Jobs [$0.59] — 130K+ Instant Database, Budgets & Filters

Pricing

from $0.59 / 1,000 job results

Go to Apify Store
Upwork Jobs [$0.59] — 130K+ Instant Database, Budgets & Filters

Upwork Jobs [$0.59] — 130K+ Instant Database, Budgets & Filters

[From $0.59/1k] The only Upwork jobs scraper with its own 130,000+ job database — instant, uncapped, nothing to get blocked, refreshed every 6 hours. Search by keyword + filters (budget, experience, type, client location, date) or live-scrape any URL. Great for lead-gen, recruiting & idea research.

Pricing

from $0.59 / 1,000 job results

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Categories

Share

Upwork Jobs Scraper — 130K+ Instant Database, Fresh Every 6h

Upwork Jobs Scraper

The only Upwork job scraper backed by its own 130,000+ job database — search by keyword and filters and get results instantly, uncapped, with nothing to get blocked. The database is refreshed every 6 hours, so you get today's jobs without ever hammering Upwork yourself. Need a filter we don't cover yet? It automatically falls back to a fresh live scrape, so you always get data.

You give itYou get back
A keyword (e.g. python scraper) + optional filtersEvery matching job from the 130k+ database, newest first
A public Upwork search URLThe same jobs that URL would show, fully structured
minFixedBudget, experienceLevel, jobType, clientLocation, maxAgeDays, publishedAfterPrecisely filtered results — budgets, client country, skills, activity all included

Pure HTTP + a pre-harvested database. No browser, no third-party CAPTCHA-bypass service, no per-search 250-job cap.

Why use this instead of a live-only scraper

  • Instant & uncapped. Live Upwork scrapers re-fetch every run, get rate-limited, and stop around Upwork's ~50–250 results per search. This one serves from a cumulative database — ask for 5,000 python jobs and get 5,000.
  • Always fresh. A background worker refreshes the mirror every 6 hours and ages out jobs older than 45 days, so results are current without you paying for a live crawl each time.
  • Budgets & client data included. ~40% of jobs carry an explicit fixed budget and ~100% carry client country — the fields that make Upwork data actually useful for demand analysis.
  • Nothing to get blocked. Because the common case is served from the database, there's no live request to detect or ban.
  • Two ways in, one clean schema. Paste a search URL or use structured filters — either returns the identical, fully-nested job object.

Overview

Upwork is the largest open marketplace of paid freelance work — every job post is a business holding out a budget to solve a problem. That makes it the richest public signal of what services are in demand and what people will pay for them. This actor turns that stream into structured data you can filter, export, and analyze:

  • Recruiters & agencies — find live projects in your niche and the clients posting them.
  • Lead generation — surface businesses actively hiring for a service you sell.
  • Freelancers — monitor new gigs matching your skills, filtered by budget and client quality.
  • Market & startup-idea research — cluster recurring paid tasks to find automation opportunities and validate demand with real budgets, not guesses.

Supported inputs

InputExampleEmits
Search keywords + filterssearchQuery: "web scraping", minFixedBudget: 200All matching jobs from the database
Upwork search URLhttps://www.upwork.com/nx/search/jobs/?q=python&sort=recencyThe jobs that URL resolves to
Individual job URLhttps://www.upwork.com/jobs/~021936702637394960044That single job, fully structured

How it works

How the Upwork Jobs Scraper works

  1. You submit a keyword + filters (or a URL).
  2. The Instant Database is queried first — a cumulative Turso store of 130k+ Upwork jobs, indexed for full-text keyword search and filtered by budget, experience, job type, client location and publish date. Results come back in seconds, newest first.
  3. Automatic live fallback — if a filter combination isn't yet covered in the database, the actor transparently runs a fresh scrape so you still get data.
  4. A background worker refreshes the database every 6 hours and ages out stale jobs, keeping results current.
  5. You export to JSON, CSV or Excel, or pull via the Apify API.

Input configuration

FieldTypeRequiredNotes
startUrlsarrayone of URL / keywordsPublic Upwork search or job URLs. Filters in the URL are honored.
searchQuerystringone of URL / keywordsKeywords matched against job title + description.
jobTypearraynohourly, fixed.
experienceLevelarraynoentry, intermediate, expert.
minFixedBudgetnumbernoOnly fixed-price jobs with budget ≥ this (USD).
clientLocationarraynoClient country name(s), substring match.
maxAgeDaysnumbernoOnly jobs published in the last N days.
publishedAfterstringnoOnly jobs published at/after this ISO date (e.g. 2026-07-01).
monitorModebooleanno🔔 Return only jobs new since the previous run for this exact search. Put the Actor on a Schedule for a clean, duplicate-free feed of new gigs.
maxItemsnumbernoCap on jobs returned per search.
proxyobjectnoOptional proxy override (only used on live fallback).

Example input

{
"searchQuery": "web scraping",
"jobType": ["fixed"],
"experienceLevel": ["intermediate", "expert"],
"minFixedBudget": 200,
"maxAgeDays": 7,
"maxItems": 500
}

Output

Each row is one job, returned in Upwork's own nested shape so nothing is lost. Abridged sample:

{
"opening": {
"job": {
"status": "ACTIVE",
"publishTime": "2026-07-08T08:27:46.991Z",
"contractorTier": "INTERMEDIATE",
"info": {
"ciphertext": "~021936702637394960044",
"type": "FIXED",
"title": "Social Media Manager for Airbnb & Hotels"
},
"category": { "name": "Digital Marketing", "urlSlug": "digital-marketing" },
"categoryGroup": { "name": "Sales & Marketing" },
"budget": { "amount": 300, "currencyCode": "USD" },
"engagementDuration": { "label": "1 to 3 months", "weeks": 9 },
"sandsData": {
"occupation": { "prefLabel": "Social Media Marketing" },
"additionalSkills": [{ "prefLabel": "Instagram" }, { "prefLabel": "Facebook" }]
},
"clientActivity": { "totalApplicants": 20, "totalHired": 0 }
}
},
"buyer": {
"isPaymentMethodVerified": false,
"info": {
"location": { "country": "Seychelles", "city": null },
"stats": { "totalAssignments": 0, "feedbackCount": 0, "score": 0 },
"company": { "profile": { "industry": "Travel & Hospitality", "size": 1 } }
}
}
}

Key output fields

FieldMeaning
opening.job.info.title / .typeJob title and payment type (FIXED / HOURLY)
opening.job.budget.amountFixed-price budget in USD
opening.job.contractorTierRequired experience level
opening.job.category / categoryGroupUpwork category taxonomy
opening.job.sandsData.*SkillsOccupation + skill tags
opening.job.publishTimeWhen the job was posted (sort/monitor on this)
opening.job.clientActivity.totalApplicants / totalHiredCompetition + hiring signal
buyer.info.location.countryClient country
buyer.info.stats.*Client history — assignments, spend, feedback score
buyer.isPaymentMethodVerifiedWhether the client's payment method is verified

Pricing

Pay-per-event. You're charged per job returned plus a small run-start fee — the same whether a result is served instantly from the database or live-scraped.

EventWhenNotes
Actor startPer runStandard platform start fee
Job resultPer job returnedThe bulk of the cost

🔔 Monitoring mode — a live feed of new gigs

Turn on monitorMode and put the Actor on a Schedule (Apify Console → Schedules, e.g. hourly or daily). Each run then returns only jobs posted since the previous run for that exact keyword + filter combination — a clean, duplicate-free feed you can wire to a webhook, Slack, or email integration.

  • The first run seeds the cursor and returns the current matches.
  • Every run after returns only what's new (often zero — that's a valid "nothing new yet" result, not an error).
  • Each distinct search (different keywords/filters) is tracked separately, so you can run several monitors in parallel.

Typical setup: searchQuery: "shopify developer", minFixedBudget: 200, monitorMode: true, scheduled hourly → you get pinged only when a new matching gig appears.

Common use cases

  • "Show me every fixed-budget web-scraping job over $200 posted this week." — recurring manual tasks people pay for = automation opportunities.
  • "Alert me the moment a new Shopify-developer gig is posted."monitorMode: true on an hourly schedule (see above).
  • "Which clients in the US are hiring for lead generation right now?" — filter by keyword + clientLocation for a warm B2B lead list.
  • "What are people paying freelancers to do that I could turn into a product?" — export a category and cluster the recurring pain points with budgets attached.

FAQ

How fresh is the database? Refreshed every 6 hours; jobs older than 45 days are aged out.

What if my exact filter isn't in the database? The actor automatically falls back to a live scrape for that query, so you still get results.

Is there a per-search cap like on Upwork itself? No. Upwork limits a search to a few hundred results; the database serves as many matches as exist, up to your maxItems.

Do I get client budgets? Yes where Upwork exposes them — roughly 40% of jobs carry an explicit fixed budget, and nearly all carry client country and activity stats.

Can I scrape a single job page? Yes — pass the job URL in startUrls.

Support

Questions, custom fields, or bulk/enterprise needs: muhameddidovic@gmail.com. More tools: Upwork Reviews Scraper · Fiverr Scraper · Indeed Scraper.

⚠️ Disclaimer

This actor collects only publicly available job-posting data from Upwork and performs no login, paywall circumvention, or access to private/personal account data. You are responsible for using the output in compliance with Upwork's Terms of Service, applicable laws, and data-protection regulations (including GDPR/CCPA where relevant). This tool is provided for legitimate research, recruiting, and market-analysis purposes. It is not affiliated with, endorsed by, or sponsored by Upwork Global Inc. "Upwork" is a trademark of its respective owner.

SEO Keywords

Upwork scraper, Upwork jobs scraper, Upwork job data, Upwork API alternative, scrape Upwork jobs, Upwork freelance jobs, freelance job data, Upwork market research, freelance demand data, Upwork lead generation, Upwork recruiting tool, gig economy data, freelance market analysis, Upwork jobs database, Upwork job monitoring, startup idea validation, SaaS idea research, pain point research, automation opportunity finder, Upwork budget data, freelance job feed, Upwork jobs by keyword, Upwork jobs by budget.