VOOZH about

URL: https://apify.com/chronometrica/upwork-job-scraper

⇱ Upwork Job Scraper | Fresh Jobs, Filters & Client Signals Β· Apify


πŸ‘ Upwork Job Scraper - Fresh Jobs & Client Signals avatar

Upwork Job Scraper - Fresh Jobs & Client Signals

Pricing

from $2.00 / 1,000 saved upwork jobs

Go to Apify Store

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

πŸ‘ Chronometrica

Chronometrica

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

0

Monthly active users

4 days ago

Last modified

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 groupExample fields
πŸ†” Identitysource_job_id, url
πŸ’Ό Job detailstitle, description, skills, engagement_type, experience_level
πŸ’° Budgetbudget_amount, budget_currency, hourly_min_amount, hourly_max_amount, hourly_currency
πŸ“Š Activityproposal_count, client_last_activity_at, interviewing_count, invites_sent, hires_count
πŸ” Search contextsource_query
⏱️ Timepublished_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 caseHow Upwork job data helps
⚑ Find new gigs quicklyTrack fresh jobs by keyword and sort newest-first.
πŸ”” Monitor a nicheSchedule repeat runs for terms such as data extraction, AI automation, Shopify, or Python.
πŸ’Ž Filter worthwhile gigsKeep jobs by budget, hourly range, experience level, proposal count, and title relevance.
🧲 Route qualified leadsSend matching jobs to the right freelancer, sales rep, or delivery pod.
πŸ“Š Build alerts and dashboardsCompare jobs by stable Upwork IDs and export clean rows.
πŸ§ͺ Research market languageAnalyze 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 scraping
lead generation
data extraction
AI automation
Shopify
Python

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 listingsEstimated 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:

  1. Create or log in to your Apify account.
  2. Open Upwork Job Scraper.
  3. Enter one or more Upwork job keywords, such as web scraping or lead generation.
  4. Choose a freshness window such as last 24 hours, last 3 days, or last 7 days.
  5. Set the maximum number of job listings to collect.
  6. Add filters such as job type, experience level, proposal count, title terms, hourly range, or fixed budget if needed.
  7. Click Start.
  8. Open the Output tab to inspect the dataset and run summary.
  9. 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:

  1. Enter keywords.
  2. Keep jobs fresh.
  3. Filter for worthwhile gigs.
  4. 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 scraping
lead generation
data entry
AI automation
Shopify
Python

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

OptionWhat it does
πŸ“… postedWithinKeeps jobs from the selected freshness window when publish time is available.
πŸ”€ sortBySorts keyword searches by newest first or relevance.
πŸ”’ maxItemsSets the total number of jobs to save across the run.
πŸ’Ό jobTypeKeeps hourly, fixed-price, or any jobs.
πŸͺœ experienceLevelKeeps entry, intermediate, expert, or any jobs.
πŸ‘₯ maxProposalCountSkips jobs above a proposal-count ceiling when available.
πŸ’Έ minHourlyRateKeeps hourly jobs whose max hourly rate reaches the selected floor.
πŸ’Έ maxHourlyRateKeeps hourly jobs whose min hourly rate stays below the selected ceiling.
πŸ’° minFixedBudgetKeeps fixed-price jobs at or above a budget floor.
πŸ’° maxFixedBudgetKeeps fixed-price jobs at or below a budget ceiling.
🎯 titleMustIncludeSaves jobs whose title contains at least one required term.
🚫 titleExcludeSkips jobs whose title contains excluded terms.
♻️ saveOnlyUniqueItemsSaves each Upwork job once by default.
πŸ“„ maxPagesPerSearchSets 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 fieldMeaning
🚦 stopReasonWhy the run stopped.
πŸ‘€ candidateItemsSeenNumber of candidate job rows seen before filtering.
βœ… jobsSavedNumber of dataset rows saved.
πŸ” duplicateCandidatesSeenNumber of duplicate candidates detected.
♻️ duplicatesSkippedDuplicate candidates skipped when unique-job mode is on.
πŸ“… rowsExcludedByDateRows removed by freshness filter.
πŸ’Ό rowsExcludedByJobTypeRows removed by hourly/fixed-price filter.
πŸͺœ rowsExcludedByExperienceRows removed by experience-level filter.
πŸ‘₯ rowsExcludedByProposalsRows removed by proposal-count filter.
πŸ’° rowsExcludedByBudgetRows removed by budget or hourly-range filters.
🎯 rowsExcludedByTitleRows removed by title include/exclude filters.
🧱 blockedRequestsSource responses that looked blocked, challenged, or denied.
⚠️ failedRequestsRequests that failed after retries.
⏰ nextRunAfterSuggested time for a scheduled follow-up run.
πŸ“ warningsHuman-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.

You might also like

Upwork Jobs Finder

sentry/upwork-jobs-finder

Upwork Jobs Finder scrapes Upwork job listings by keyword and exports structured freelance job data, including title, budget, hourly rate, skills, and description. Ideal for Upwork lead generation, job monitoring, market research, and automation workflows.

Upwork Job Scraper

brilliant_gum/upwork-job-scraper

Scrape Upwork job listings by keyword or URL β€” no login needed. Get title, budget, skills, and full client history (country, total spent, rating, payment verified). Filter by hourly or fixed-price jobs.

πŸ‘ User avatar

Yuliia Kulakova

7

Upwork Jobs Scraper

crw/upwork-job-search-scraper

Scrape Upwork job postings without limits. No cookies or login required β€” session is acquired automatically. Filter by keyword, category, experience level, job type, budget, location, and more.

Upwork Extractor

jupri/upwork

πŸ’« Scrape Upwork.com Jobs

Upwork Jobs Scraper

moving_beacon-owner1/upwork-jobs-scraper

Upwork Jobs Scraperβ€” Scrapes Upwork job listings based on keywords or the latest available jobs. Extracts job details including title, budget, experience level, skills, description, posting date, and URL, with support for pagination, sorting, and item limits.

2

Cheapest Upwork Jobs Scraper

energizing_technology/cheapest-upwork-jobs-scraper

Get the latest jobs from upwork!

Upwork Jobs Scraper

igview-owner/upwork-jobs-scraper

Scrape Upwork jobs by simply pasting your search URL. Get clean job data with title, description, budget, skills, type and links. Perfect for job hunting, market research and lead generation.

πŸ‘ User avatar

Sachin Kumar Yadav

45

Upwork Job Monitor

sentry/upwork-job-monitor

Upwork Job Monitor tracks freelance job listings over time with new-job alerts, closed-job detection, budget trend shifts, and hiring-intent signals by keyword. Export clean Upwork jobs data for lead generation, market research, and automation.