Upwork Jobs Scraper & New Job Monitor - Job Alerts Feed avatar

Upwork Jobs Scraper & New Job Monitor - Job Alerts Feed

Under maintenance

Pricing

from $2.80 / 1,000 job returneds

Go to Apify Store
Upwork Jobs Scraper & New Job Monitor - Job Alerts Feed

Upwork Jobs Scraper & New Job Monitor - Job Alerts Feed

Under maintenance

For freelancers and agencies replacing Upwork's discontinued RSS job feeds: Upwork jobs by search term, hourly or fixed, budget, rate, experience level and client country, with budget or rate, skills, posted time and full description. Watch mode returns only jobs posted since your last check.

Pricing

from $2.80 / 1,000 job returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 hours ago

Last modified

Categories

Share

Upwork Jobs Scraper & New Job Monitor

Upwork job alerts, as a replacement for Upwork's discontinued RSS job feeds. Get job posts from Upwork's public job search, newest first, by search term and filters: hourly or fixed-price, fixed budget, hourly rate, experience level and client country. One row per job: title, link, posted time, budget or hourly rate in USD, experience level, estimated duration, hours per week, skills and the full description. Watch mode turns a search into a feed: run it on a schedule and each run returns only the jobs posted since the last check, so you can send a proposal while the job is still fresh.

No Upwork account, cookies or API key needed. Export as JSON, CSV or Excel, or push new jobs to Slack, email or a sheet with an Apify integration.

What you can do with it

  • Freelancers and agencies: watch shopify or web scraping every 15 minutes and get only the new jobs, then push them to Slack, email or a sheet with an Apify integration.
  • Lead filtering: fixed-price jobs from $500 to $999, or hourly jobs paying at least $40/hour, for expert freelancers, from clients in the United States.
  • Market research: how many jobs Upwork lists for a skill (jobsInSearch), budgets and rates by skill, which skills are asked together.

Input

FieldWhat it does
searchQueriesSearch terms, one per line, as you would type them on Upwork: web scraping, shopify, "react native".
searchUrlsOr paste an Upwork job search address, such as https://www.upwork.com/nx/search/jobs/?q=shopify&t=1&amount=500-999. The filters q, t, contractor_tier, amount, hourly_rate and location are kept.
jobTypeany (default), hourly or fixed.
experienceLevelsentry, intermediate, expert (any of them).
minFixedBudget / maxFixedBudgetFixed-price budget range in USD (returns fixed-price jobs only).
minHourlyRate / maxHourlyRateHourly rate range in USD (returns hourly jobs only; a job matches when its stated range overlaps yours, as on Upwork).
clientCountryClient's country in English as Upwork writes it: United States, United Kingdom, Germany.
maxResultsPerSearchJobs per search, 1 to 500 (default 50).
onlyNewWatch mode (see below).
watchNameKeeps separate memories for separate schedules of the same search.
resetMonitoringStateStart a watch over.

Example: { "searchQueries": ["web scraping"], "maxResultsPerSearch": 50 }

Watch example: { "searchQueries": ["shopify"], "jobType": "fixed", "minFixedBudget": 500, "onlyNew": true } on a schedule.

Every filter is sent to Upwork, and every returned row is checked again against it here: Upwork silently ignores filter values it does not know, so a row that does not match your job type, level, budget or rate is never returned.

Output

One row per job (status: "ok"):

FieldMeaning
jobIdUpwork's job ID, the ~02… part of the job's address.
title, urlThe job title and its link (https://www.upwork.com/jobs/~02…).
postedAtWhen the job was posted, or reposted if later (publishedAt, renewedAt, createdAt are also given).
jobTypehourly or fixed.
fixedBudgetFixed-price jobs: the budget in USD.
hourlyMin, hourlyMaxHourly jobs: the rate range in USD. null when the client did not state a rate (about 3 in 10 hourly jobs in our October 2026 sample). Never 0.
currencyUSD when a budget or rate is given, otherwise null.
experienceLevelentry, intermediate or expert.
durationEstimated duration as Upwork shows it: Less than 1 month, 1 to 3 months, 3 to 6 months, More than 6 months.
workloadHourly jobs: Less than 30 hrs/week, 30+ hrs/week, Hours to be determined or Not sure.
skillsThe skills listed on the job.
descriptionThe job description as shown in search (search-term highlights removed). Email addresses and phone numbers are replaced with [email removed] / [phone removed].
queryInTextWhether every word of your search term appears in the title, description or skills. Upwork's search also returns related jobs; this tells you which ones are exact.
positionInSearch, jobsInSearchPosition in the list read (newest first), and the total Upwork shows for the search.
changeTypeWatch mode: first-check or new.
searchQuery, searchFilters, searchUrl, watchName, checkedAtWhich search the row came from.

Watch mode, and what "new" means here

The first run returns the newest page of jobs for the search and remembers them (first-check). Every later run returns new jobs: jobs you have not received that were posted or reposted after the oldest job of the first check. It reads the newest page first and goes to the next page only while every job on the page is new, up to maxResultsPerSearch.

A check that finds nothing returns one free no-new-jobs row and is charged as one search-checked event. Jobs that could not be returned because of your run's maximum charge are not marked as delivered, and the next run returns them.

Rows that explain instead of data (never charged)

no-results, none-matching-filters, no-new-jobs, not-found (Upwork did not take a filter, so the list would be a different one), blocked (Upwork kept showing a check page), login-required (Upwork sent the search to its login page), incomplete (a later page could not be read), unreadable, not-read-page-limit, bad-input, budget-reached, more-not-returned. Each has a note that says what happened.

Limits

  • Unofficial and not affiliated with Upwork. It reads only the job search pages that Upwork shows to logged-out visitors.
  • Upwork shows logged-out visitors about the first 450 to 500 jobs of a search (50 per page, 10 pages).
  • Up to 10 searches and 20 pages per run.
  • Pages are opened in a real browser that waits for Upwork's automatic check to finish. It never clicks or solves a check page and never logs in; if the check does not clear, the run returns a free blocked row.
  • Filters that need an Upwork account (for example "payment verified") are not supported.
  • Client details (rating, payment verification, money spent) are not in the rows: Upwork does not show them to logged-out visitors, and this Actor never invents them. The client country filter is applied by Upwork itself.

Thanks for using this Actor

We build these tools for people who run them every day, and we improve them from what users tell us.

  • Missing a field, or need another filter? Tell us in the Issues tab. If the data is there, we add it.
  • Found a bug or a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.

If this Actor saved you time, a short review helps other people find it.