Upwork Job Scraper - Fresh Jobs & Client Signals
Pricing
from $2.00 / 1,000 saved upwork jobs
Upwork Job Scraper - Fresh Jobs & Client Signals
Find fresh Upwork jobs by keyword, filter worthwhile gigs by budget, hourly or fixed type, experience level, proposal count, and title terms, then export clean rows for alerts, lead routing, market research, and workflows. No Upwork login or cookies required.
Pricing
from $2.00 / 1,000 saved upwork jobs
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
4
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
π What does Upwork Job Scraper do?
Upwork Job Scraper finds fresh Upwork jobs by keyword and turns them into clean, flat rows you can export, schedule, route, or plug into an automation workflow. It captures stable Upwork IDs, job URLs, titles, descriptions, skills, budgets, hourly ranges, proposal counts, posting times, public activity signals, and search context.
Use it when you need to find new gigs quickly, monitor a niche, route matching jobs to a freelancer or agency team, build job alerts, research buyer demand, or feed a spreadsheet, dashboard, CRM, or workflow tool.
To get started, enter one or more keywords, choose how fresh the jobs should be, set how many listings to save, add filters for worthwhile gigs, and click Start.
{"searchTerm":"web scraping\nlead generation\ndata entry\nAI automation\nShopify\nPython","postedWithin":"7d","sortBy":"recency","maxItems":25,"jobType":"any","experienceLevel":"any","maxProposalCount":0,"saveOnlyUniqueItems":true,"maxPagesPerSearch":2}
With Upwork Job Scraper, you can:
- π Search Upwork jobs by keyword, title, skill, or buyer-intent phrase.
- β‘ Find fresh jobs quickly with last 24h, 3d, 7d, 14d, and 30d windows.
- β»οΈ Save one row per unique job by default, even when keywords and pages overlap.
- ποΈ Filter by posting date, hourly or fixed-price work, experience level, proposal count, budget, hourly range, and title terms.
- π¦ Collect public job details such as title, description, skills, budget, hourly range, publish time, and Upwork job URL.
- π Add public activity fields such as client activity time, interviewing count, invites sent, unanswered invites, hires, offers, and recommendations when Upwork exposes them.
- β¬οΈ Export results as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.
- π§ Check the run summary to see candidates, saved rows, duplicates, filters, blocked requests, warnings, and suggested next-run timing.
No Upwork account login, user-provided cookies, or user-provided Upwork credentials are required.
π¦ What Upwork job data can I extract?
Each dataset row represents one saved Upwork job opportunity.
| Data group | Example fields |
|---|---|
| π Identity | source_job_id, url |
| πΌ Job details | title, description, skills, engagement_type, experience_level |
| π° Budget | budget_amount, budget_currency, hourly_min_amount, hourly_max_amount, hourly_currency |
| π Activity | proposal_count, client_last_activity_at, interviewing_count, invites_sent, hires_count |
| π Search context | source_query |
| β±οΈ Time | published_at, source_created_at, observed_at |
Field availability depends on what Upwork exposes publicly for each search
result or job. Missing values are saved as null instead of guessed or filled
with fake zeroes.
βοΈ Can I use this Actor through an API?
Yes. You can run Upwork Job Scraper manually in Apify Console or use it as an API for Upwork job discovery.
Developers can call this Actor through:
- π Apify API
- π Python SDK
- π© Node.js SDK
- πͺ Webhooks
- β° Scheduled runs
- π§© Apify integrations
This makes it useful for freelance job alerts, agency opportunity monitoring, lead routing, internal work queues, labor-market dashboards, and automated research workflows.
π― Why scrape Upwork jobs?
Upwork job postings are a useful source of fresh freelance opportunities and active buyer demand. Scraping Upwork jobs can help you find gigs quickly, monitor client demand, route worthwhile jobs to specialized teams, and study the language buyers use when asking for work.
| Use case | How Upwork job data helps |
|---|---|
| β‘ Find new gigs quickly | Track fresh jobs by keyword and sort newest-first. |
| π Monitor a niche | Schedule repeat runs for terms such as data extraction, AI automation, Shopify, or Python. |
| π Filter worthwhile gigs | Keep jobs by budget, hourly range, experience level, proposal count, and title relevance. |
| π§² Route qualified leads | Send matching jobs to the right freelancer, sales rep, or delivery pod. |
| π Build alerts and dashboards | Compare jobs by stable Upwork IDs and export clean rows. |
| π§ͺ Research market language | Analyze titles and descriptions to understand how buyers describe tasks. |
π Fresh Upwork job discovery by keyword
Most users should start with searchTerm. Enter one keyword, skill, title, or
buyer-intent phrase per line:
web scrapinglead generationdata extractionAI automationShopifyPython
The Actor searches each term, saves matching jobs, removes duplicates when
saveOnlyUniqueItems is enabled, and applies one shared maxItems cap across
the whole run.
Keep sortBy set to recency and choose a postedWithin window when you care
about fresh jobs you can apply to or route quickly.
β»οΈ Clean, duplicate-free Upwork job datasets
Upwork search results can overlap across related keywords and pages. For normal
datasets, keep saveOnlyUniqueItems enabled so the Actor saves each Upwork job
once and skips duplicate candidates before they become saved rows.
The OUTPUT summary shows candidateItemsSeen, duplicateCandidatesSeen,
duplicatesSkipped, and jobsSaved, so you can see how many matching rows were
found, how many were duplicates, and how many unique job listings were saved.
Turn unique-job mode off only when you intentionally want to measure keyword overlap or search ranking behavior.
π΅ How much does scraping Upwork jobs cost?
Upwork Job Scraper is designed for Pay-Per-Event pricing, where you are charged for saved job listings. The planned launch price is $2.50 per 1,000 saved job listings, or $0.0025 per saved job listing.
| Saved job listings | Estimated Actor charge |
|---|---|
| 100 jobs | $0.25 |
| 1,000 jobs | $2.50 |
| 10,000 jobs | $25.00 |
Check the Pricing tab for the current rate before production runs. Start
with maxItems between 10 and 100 if you want to inspect output quality before
larger searches.
π How do I use Upwork Job Scraper?
Upwork Job Scraper is designed for an easy first run:
- Create or log in to your Apify account.
- Open Upwork Job Scraper.
- Enter one or more Upwork job keywords, such as
web scrapingorlead generation. - Choose a freshness window such as last 24 hours, last 3 days, or last 7 days.
- Set the maximum number of job listings to collect.
- Add filters such as job type, experience level, proposal count, title terms, hourly range, or fixed budget if needed.
- Click Start.
- Open the Output tab to inspect the dataset and run summary.
- Download your data in JSON, JSONL, CSV, Excel, XML, RSS, or HTML.
β¬οΈ Input
The input form follows the way users actually run Upwork job scrapers:
- Enter keywords.
- Keep jobs fresh.
- Filter for worthwhile gigs.
- Export clean unique rows.
Enter at least one keyword in searchTerm. The Actor searches each keyword,
deduplicates overlapping jobs when saveOnlyUniqueItems is enabled, and applies
one shared maxItems cap.
π Keywords
Use one keyword, skill, title, or phrase per line. Multiple terms help you cover a niche without creating separate runs.
Good keyword examples:
web scrapinglead generationdata entryAI automationShopifyPython
If broad keywords return off-target rows, use title filters:
{"searchTerm":"automation","titleMustInclude":"automation\nworkflow\nzapier","titleExclude":"crypto\nforex","maxItems":100}
ποΈ Freshness, filters, and run controls
| Option | What it does |
|---|---|
π
postedWithin | Keeps jobs from the selected freshness window when publish time is available. |
π sortBy | Sorts keyword searches by newest first or relevance. |
π’ maxItems | Sets the total number of jobs to save across the run. |
πΌ jobType | Keeps hourly, fixed-price, or any jobs. |
πͺ experienceLevel | Keeps entry, intermediate, expert, or any jobs. |
π₯ maxProposalCount | Skips jobs above a proposal-count ceiling when available. |
πΈ minHourlyRate | Keeps hourly jobs whose max hourly rate reaches the selected floor. |
πΈ maxHourlyRate | Keeps hourly jobs whose min hourly rate stays below the selected ceiling. |
π° minFixedBudget | Keeps fixed-price jobs at or above a budget floor. |
π° maxFixedBudget | Keeps fixed-price jobs at or below a budget ceiling. |
π― titleMustInclude | Saves jobs whose title contains at least one required term. |
π« titleExclude | Skips jobs whose title contains excluded terms. |
β»οΈ saveOnlyUniqueItems | Saves each Upwork job once by default. |
π maxPagesPerSearch | Sets how many result pages to check for each keyword. |
For most first runs, keep the default quality controls on and use a small
maxItems value.
β¬οΈ Output sample
The results are stored in the default dataset. Each result is one saved Upwork job opportunity.
{"title":"Build a web scraping pipeline","url":"https://www.upwork.com/jobs/~021234567890123456789","description":"Need help collecting public product data and exporting it to CSV.","published_at":"2026-06-25T15:52:24.851Z","category":null,"subcategory":null,"skills":["Data Extraction","Python","Web Scraping"],"engagement_type":"fixed","experience_level":"expert","budget_amount":500,"budget_currency":"USD","hourly_min_amount":null,"hourly_max_amount":null,"hourly_currency":null,"freelancers_to_hire":1,"proposal_count":4,"client_last_activity_at":"2026-06-25T17:06:13.700Z","interviewing_count":1,"invites_sent":0,"unanswered_invites_count":0,"hires_count":0,"offers_count":0,"recommended_count":2,"source_query":"web scraping","source_job_id":"1234567890123456789","source_created_at":"2026-06-25T15:50:00.000Z","observed_at":"2026-06-25T18:49:05.448Z"}
The default Apify table view focuses on the fields most users scan first: title, description, posted time, type, experience level, budget, hourly range, proposal count, client activity, skills, query, and URL.
π Run summary
The Actor writes a compact OUTPUT record with run accounting. Use it to audit
whether the run stopped because it hit maxItems, page limits, source
exhaustion, filters, or blocked requests.
Useful summary fields include:
| Summary field | Meaning |
|---|---|
π¦ stopReason | Why the run stopped. |
π candidateItemsSeen | Number of candidate job rows seen before filtering. |
β
jobsSaved | Number of dataset rows saved. |
π duplicateCandidatesSeen | Number of duplicate candidates detected. |
β»οΈ duplicatesSkipped | Duplicate candidates skipped when unique-job mode is on. |
π
rowsExcludedByDate | Rows removed by freshness filter. |
πΌ rowsExcludedByJobType | Rows removed by hourly/fixed-price filter. |
πͺ rowsExcludedByExperience | Rows removed by experience-level filter. |
π₯ rowsExcludedByProposals | Rows removed by proposal-count filter. |
π° rowsExcludedByBudget | Rows removed by budget or hourly-range filters. |
π― rowsExcludedByTitle | Rows removed by title include/exclude filters. |
π§± blockedRequests | Source responses that looked blocked, challenged, or denied. |
β οΈ failedRequests | Requests that failed after retries. |
β° nextRunAfter | Suggested time for a scheduled follow-up run. |
π warnings | Human-readable warnings from the run. |
π§ Practical notes
Upwork job listings change quickly. Treat each run as a point-in-time snapshot.
For monitoring, schedule repeated runs and compare rows by source_job_id or
url.
Activity fields come from public job detail data. They are collected when Upwork
exposes them for a job during the run. If Upwork does not expose a field, the
value remains null.
Some source responses may be blocked, challenged, rate-limited, or incomplete.
When that happens, the Actor records blocked and failed request counts in
OUTPUT instead of pretending every missing row was available.
For larger monitoring jobs, increase maxItems and maxPagesPerSearch
gradually, then use Apify schedules for recurring monitoring. This keeps source
access, costs, and result review manageable.
β Common questions
π§² Is this for finding freelance gigs or sales leads?
Mostly gigs first, leads second. Most users search Upwork jobs to discover fresh
work they can apply to, route to a specialist, or qualify as an agency
opportunity. Keyword choice controls the workflow: web scraping finds
freelance gigs, while phrases like lead generation, Apollo enrichment, or
Shopify migration can surface buyer intent for agencies and service teams.
π Does this need an Upwork login?
No. The Actor is designed around public Upwork job surfaces and does not ask for an Upwork account, user cookies, or user-provided credentials.
π³ Can it scrape client payment verification, total spend, or ratings?
Those richer client fields are not promised in the public output. The Actor captures the public job and activity fields that have cloud-run evidence. If Upwork exposes additional reliable client fields later, they should be added as new stable columns rather than changing existing fields.
π³οΈ Why are some fields null?
Upwork does not expose every field for every job. The Actor uses null for
unavailable values instead of guessing.
π Can I run alerts from this Actor?
Yes. Use keywords, sortBy: "recency", a freshness window such as 24h or
7d, and scheduled Apify runs. Keep saveOnlyUniqueItems enabled and compare
saved rows by source_job_id or url.
π Can I use it for high-volume Upwork monitoring?
Yes, but increase volume gradually. Start with a small run, inspect OUTPUT,
then raise maxItems and maxPagesPerSearch. Use schedules instead of one
very large run when you need ongoing monitoring.
