Upwork Jobs Scraper - Job Search with Client Details avatar

Upwork Jobs Scraper - Job Search with Client Details

Pricing

from $2.55 / 1,000 jobs

Go to Apify Store
Upwork Jobs Scraper - Job Search with Client Details

Upwork Jobs Scraper - Job Search with Client Details

Scrape Upwork jobs by keyword or search URL: title, description, budget, skills, posted time, plus client country, total spent, hires, rating and proposals. No login.

Pricing

from $2.55 / 1,000 jobs

Rating

0.0

(0)

Developer

Ben

Ben

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

💼 Upwork Jobs Scraper - Job Search with Client Details

Search Upwork's job board by keyword or search URL and get every job as structured data: title, full description, hourly range or fixed budget, skills, experience level and time posted. Each job can include what Upwork shows about the client: country, total spent, hires, rating, payment verification and the number of proposals so far. Export to JSON/CSV/Excel, run on a schedule, call via API, or connect to Make, Zapier or n8n.

🔎 What is the Upwork Jobs Scraper?

It is an Apify Actor that runs Upwork's public job search for you and saves one row per job. No Upwork account, cookies or login are needed, because it reads the same public data a visitor sees.

Type a keyword such as "python developer", or set up a search with any filters on upwork.com and paste its address. With Include client details on, the Actor also opens each job and adds the client and activity figures that decide whether a job is worth a proposal.

A time limit turns it into a job alert. Set Posted within to 1 hour, schedule the Actor hourly, and every run returns only the jobs published since the last one.

Upwork limits how fast its data can be read, so the Actor paces itself: about one job with client details per second on a small run, and several connections side by side on a large one.

What data does it extract?

  • Job: jobId, url, title, description, jobType (hourly or fixed), experienceLevel, skills[], category, categoryGroup
  • Money: hourlyRateMin, hourlyRateMax, fixedBudget, currency
  • Scope: duration, durationWeeks, workload, projectType
  • Timing: createdAt, publishedAt
  • Activity: proposals, interviewing, invitesSent, hired, positions, lastClientActivity
  • Client: clientCountry, clientCity, clientTimezone, clientPaymentVerified, clientTotalSpent, clientHires, clientActiveHires, clientJobsWithHires, clientHoursBilled, clientRating, clientReviews, clientMemberSince, clientIndustry, clientCompanySize
  • Requirements: requirements (regions, countries, minimum job success score, English level and similar conditions the client set)

clientDetailsLoaded tells you whether the client block was read. Upwork hides the details of some jobs from visitors; those rows keep their search data.

⬇️ Input

FieldTypeWhat it does
queriesarrayKeywords or full Upwork job-search URLs. Each entry is searched separately
maxJobsPerQueryintegerMaximum jobs to save per search. 50 when left empty
postedWithinHoursintegerOnly jobs published in the last N hours
jobTypestringany, hourly or fixed
experienceLevelsarrayAny of entry, intermediate, expert
clientCountriesarrayOnly clients from these countries, for example "United States"
sortBystringnewest, relevance, clientSpend or clientRating
includeClientDetailsbooleanAdd the client and activity fields. On by default

The filters apply to keywords. A pasted Upwork URL keeps the filters it contains (job type, experience level, budget, hourly rate, project length, hours per week, client hires, client location, category and sort order).

Example input

Expert-level fixed-price Shopify jobs from US clients, published in the last 24 hours:

{
"queries": ["shopify"],
"maxJobsPerQuery": 100,
"postedWithinHours": 24,
"jobType": "fixed",
"experienceLevels": ["expert"],
"clientCountries": ["United States"]
}

⬆️ Output

One row per job. This is a real row with the description shortened:

{
"jobId": "2106035970179278880",
"url": "https://www.upwork.com/jobs/~022106035970179278880",
"title": "Low-code Software Engineer",
"description": "*Job Title:* Freelance Software Engineer (Low Code/No Code Expertise) *Commitment:* 20–30 hours per week ...",
"jobType": "hourly",
"experienceLevel": "Intermediate",
"hourlyRateMin": 15,
"hourlyRateMax": 40,
"currency": "USD",
"duration": "More than 6 months",
"durationWeeks": 52,
"workload": "More than 30 hrs/week",
"projectType": "Ongoing project",
"skills": ["JavaScript", "Low Code & RAD Software", "Python", "C++", "Desktop Application", "API", "Java", "Web Development"],
"category": "Web Development",
"categoryGroup": "Web, Mobile & Software Dev",
"createdAt": "2026-10-02T14:57:58.679Z",
"publishedAt": "2026-10-02T15:01:57.886Z",
"proposals": 48,
"interviewing": 0,
"invitesSent": 0,
"hired": 0,
"positions": 1,
"lastClientActivity": "2026-10-02T14:57:58.559Z",
"requirements": {"regions": ["Europe", "Asia"], "minJobSuccessScore": 90, "prefEnglishSkill": "CONVERSATIONAL", "risingTalent": true},
"clientCountry": "United Kingdom",
"clientCity": "London",
"clientTimezone": "Europe/London (UTC+01:00)",
"clientPaymentVerified": true,
"clientTotalSpent": 232417.3,
"clientHires": 90,
"clientActiveHires": 30,
"clientJobsWithHires": 81,
"clientHoursBilled": 15581.5,
"clientRating": 4.7,
"clientReviews": 46,
"clientMemberSince": "2014-02-17",
"clientIndustry": "Health & Fitness",
"clientCompanySize": 2,
"query": "python developer",
"clientDetailsLoaded": true,
"scrapedAt": "2026-10-02T15:31:42+00:00"
}

A fixed-price job has "jobType": "fixed" and "fixedBudget": 500 instead of the hourly range.

💰 How much does it cost?

You pay per job saved, plus a tiny start fee per run. Client details are included in the price.

Apify planPrice per 1,000 jobs
Free$3.00
Starter$2.85
Scale$2.70
Business and above$2.55

An hourly alert that finds 10 new jobs per run costs about 72 cents a day on the Free plan. Set Maximum cost per run in the run options and the Actor stops saving at that amount.

💡 Use cases

  • 🔔 Job alerts for freelancers and agencies: schedule hourly runs with a time limit and push new jobs to Slack, Telegram or email before the proposal count climbs.
  • 🎯 Lead qualification: keep jobs from payment-verified clients with real spend and a good rating, and skip the rest.
  • 📈 Market research: track budgets, hourly ranges and demand for a skill over weeks.
  • 🧲 Outbound prospecting: find companies that are hiring for a service you sell, by country and industry.

❓ FAQ

Do I need an Upwork account or cookies? No. The Actor reads the public job board as a visitor.

How many jobs can one search return? Upwork shows at most 5,000 jobs per search, and fewer for narrow keywords. Use several keywords or filters to cover more.

Why is clientDetailsLoaded false on some rows? Upwork hides the details of some jobs from visitors, usually jobs limited to invited or local freelancers. Those rows still have the title, description, budget and skills.

Why are some client fields empty? New clients have no hires, rating or spend yet, so Upwork has nothing to show. clientPaymentVerified and clientCountry are filled for almost every visible job.

How do I get only new jobs? Set postedWithinHours to the interval of your schedule, for example 1 with an hourly schedule. The run reads newest first and stops when it reaches older jobs.

Can I use my own Upwork search? Yes. Apply any filters on upwork.com, copy the address bar and paste it as a search. The URL's own filters are used.

How fast is it? Search alone returns 50 jobs per request. With client details the Actor reads about one job per second per connection and opens up to four connections on large runs. In our tests 20 jobs with client details took 25 seconds and 40 took 32 seconds.

Does it return the client's name or contact details? No. Upwork does not show them to visitors, and the Actor does not log in.

Is it legal to scrape Upwork jobs? The Actor collects job posts that Upwork shows publicly to any visitor and does not log in. You are responsible for how you use the data. Job descriptions can contain personal data, so GDPR, CCPA and similar rules apply to storage and reuse, and Upwork's terms of use apply to you as well. If in doubt, ask a lawyer.

Something is missing or broken? Open an issue on the Actor's Issues tab with the run ID. Issues are answered within one business day.

🧩 Need this as a managed feed?

If you would rather receive a daily file of qualified jobs for your niche than run the Actor yourself, request a quote at https://benthepythondev00.github.io/custom.html.

🔗 You might also like

Keywords: upwork scraper, upwork jobs scraper, upwork job search api, upwork job alerts, upwork rss alternative, freelance jobs scraper, upwork client data, upwork leads, upwork jobs to slack, freelance job monitoring, upwork api alternative, upwork jobs csv, remote freelance jobs data, upwork proposals count, upwork budget data, freelance market research