Upwork Jobs Scraper
Pricing
from $1.00 / 1,000 job scrapeds
Upwork Jobs Scraper
Scrape job listings from Upwork search results. Returns title, description, budget, skills, experience level, duration, and posting time. Bypasses Cloudflare automatically — no proxy needed.
Pricing
from $1.00 / 1,000 job scrapeds
Rating
0.0
(0)
Developer
Gio
Actor stats
0
Bookmarked
28
Total users
15
Monthly active users
4 days ago
Last modified
Categories
Share
Scrape Upwork job listings by keyword — no API key, no login, no proxy required. Enter a search query and get structured Upwork job data instantly.
Works with any Upwork search: "google ads", "python developer", "react", "copywriter" and more. Bypasses Cloudflare automatically using a real browser fingerprint.
🚀 What it does
- Searches Upwork for jobs matching your keyword
- Paginates automatically to reach your
max_jobstarget (Upwork returns up to 50 per page) - Extracts structured data from each Upwork listing
- Returns results in JSON — ready for n8n, Make, Zapier, Google Sheets, or any pipeline
- Runs in ~60–90 seconds per query
📦 Output fields
| Field | Description | Example |
|---|---|---|
jobId | Unique job ID (use for deduplication) | 022027586354497239213 |
title | Job title | Google Ads Specialist |
description | Job description (up to 600 chars) | Looking for an expert... |
contractType | Contract type + hourly rate | Hourly: $60.00 - $120.00 |
budget | Budget for fixed-price jobs | $2,500.00 |
experienceLevel | Required experience | Expert |
duration | Estimated project duration | 3 to 6 months, < 30 hrs/week |
postedOn | Time since posting | 21 minutes ago |
skills | Required skills list | ["Google Ads", "PPC", ...] |
extraSkills | Number of hidden skills | 3 |
url | Direct link to the job | https://www.upwork.com/jobs/~... |
⚙️ Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
query | string | ✅ | web scraping | Search keyword (e.g. python developer, google ads specialist) |
max_jobs | integer | ❌ | 10 | Max jobs to return (1–50) |
Example input
{"query": "google ads specialist","max_jobs": 10}
📊 Example output
[{"jobId": "022027586354497239213","title": "Meta + Google Ads help for established ecommerce brand","description": "Looking for someone who understands how to grow a real brand without burning money...","contractType": "Hourly: $60.00 - $120.00","budget": "$60.00 - $120.00","experienceLevel": "Expert","duration": "More than 6 months, Less than 30 hrs/week","postedOn": "13 hours ago","skills": ["Google Ads", "PPC Campaign Setup & Management", "Pay Per Click Advertising"],"extraSkills": 7,"url": "https://www.upwork.com/jobs/~022027586354497239213"}]
💡 Use cases
- Freelancers — Monitor new Upwork job postings matching your skills and apply early
- AI pipelines — Feed Upwork job data into LLMs to filter, score, and generate proposals automatically
- Automation — Connect to n8n or Make to receive Telegram/Slack alerts for new Upwork jobs
- Market research — Track demand trends for specific skills on Upwork
- Lead generation — Identify businesses actively hiring on Upwork for services you offer
🔄 Automating with n8n / Make
- Add an HTTP Request node → POST to this actor's API endpoint
- Pass
{ "query": "your keyword", "max_jobs": 10 }as JSON body - Use the
jobIdfield to deduplicate against a Google Sheet - Feed new jobs into an AI agent for filtering and proposal generation
- Send matched jobs to Telegram or Slack
💰 Pricing
$1 per 1,000 jobs scraped.
- 10 jobs = $0.01
- 100 jobs = $0.10
- 1,000 jobs = $1.00
Pay only for what you use. No subscriptions.
⚠️ Notes & limitations
- Cloudflare bypass: Works automatically with no proxy needed. If Upwork updates their bot detection, results may vary — open an issue if you encounter problems.
- Client data (country, payment verified, proposals count): Not available without a logged-in session. This will be added in a future version with cookie-based authentication.
- Results per run: Upwork shows 10 jobs per search page by default. Set
max_jobsup to 50 to get more. - Rate limiting: Avoid running more than 1 concurrent run on the same query to prevent IP blocks.
🛠️ Built with
- puppeteer-real-browser — Real Chrome fingerprint to bypass Cloudflare
- Apify SDK — Actor framework and pay-per-event billing
📬 Support
Found a bug or need a feature? Open an issue or reach out via the Apify community.