Upwork Jobs Scraper
Pricing
from $1.50 / 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.50 / 1,000 job scrapeds
Rating
5.0
(3)
Developer
Gio
Maintained by CommunityActor stats
0
Bookmarked
117
Total users
27
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape Upwork job listings by keyword. No API key, no login, no proxy setup. Get structured Upwork job data plus client intelligence in one call.
Works with any search query (google ads, python developer, react, copywriter, anything Upwork supports). Bypasses Cloudflare automatically with a real browser fingerprint.
Why this scraper
Most Upwork scrapers stop at title + budget + skills. This one returns the client intelligence that actually determines whether a job is worth applying to:
- Client country (filter by region)
- Total client spend on Upwork (filter low-spenders out)
- Payment verified status (skip unverified clients)
- Number of proposals already submitted (skip saturated jobs)
- Contract type and budget range
- Full description text
- Experience level required
Use it to feed a lead-scoring pipeline, automate proposal generation, or build a job alerting system that filters noise BEFORE sending you a notification.
Input
{"query": "python developer","max_jobs": 50}
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
query | string | yes | web scraping | Any Upwork search keyword |
max_jobs | integer | no | 10 | 1 to 200. Pagination handled automatically. |
Output fields
Each job returns the following structured fields:
| Field | Type | Description | Example |
|---|---|---|---|
jobId | string | Unique Upwork job ID (use for deduplication) | 022027586354497239213 |
title | string | Job title | Senior Google Ads Specialist |
description | string | Full job description | Looking for an expert to manage... |
contractType | string | Contract type and rate | Hourly: $60.00 - $120.00 |
budget | string | Budget for fixed-price jobs | $2,500.00 |
experienceLevel | string | Required experience | Expert, Intermediate, Entry |
duration | string | Estimated project duration | 3 to 6 months, < 30 hrs/week |
postedOn | string | Time since posting | 21 minutes ago |
extraSkills | array | Required skills | ["Google Ads", "PPC"] |
proposals | string | Proposal count bucket | Less than 5, 10 to 15, 20 to 50 |
clientCountry | string | Client country | United States, Germany |
clientTotalSpent | string | Lifetime spend on Upwork | $50K+, $10K to $50K |
clientVerified | boolean | Payment method verified | true |
url | string | Direct link to the job | https://www.upwork.com/jobs/~022027... |
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. We've been on Shopify for 4 years and need...","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","extraSkills": ["Google Ads", "PPC Campaign Setup & Management", "Pay Per Click Advertising"],"proposals": "10 to 15","clientCountry": "United States","clientTotalSpent": "$50K+","clientVerified": true,"url": "https://www.upwork.com/jobs/~022027586354497239213"}
Use cases
Freelancers
Monitor new Upwork postings matching your skills. Filter on clientTotalSpent and clientVerified so you only apply to clients who actually pay. Apply before competitors fill the proposal queue (proposals field).
AI proposal pipelines
Feed each job into a Claude or GPT prompt that scores fit, drafts a tailored proposal, and queues it for review. The full description plus client data gives the LLM what it needs.
Lead generation
Search for companies hiring services you offer. Filter on clientCountry and clientTotalSpent to identify accounts worth direct outreach.
Market intelligence
Track demand trends for specific skills, budget ranges, or geographies. Run daily, push to BigQuery or a Google Sheet, watch what changes.
Automation with n8n / Make / Zapier
- HTTP Request node:
POST https://api.apify.com/v2/acts/gio21~upwork-jobs-scraper/run-sync-get-dataset-items - Headers:
Authorization: Bearer <YOUR_APIFY_TOKEN> - Body:
{"query": "your keyword", "max_jobs": 50} - Use the
jobIdfield to dedupe against a Google Sheet or database. - Branch by
clientCountry,experienceLevel, orproposalsto filter ruthlessly. - Send matched jobs to Slack, Telegram, or an LLM proposal-draft step.
The actor supports synchronous calls that return the dataset directly. No polling needed.
Pricing
$1.50 per 1,000 jobs scraped (live).
| Jobs | Cost |
|---|---|
| 10 | $0.015 |
| 100 | $0.15 |
| 1,000 | $1.50 |
| 10,000 | $15.00 |
Pay only for jobs returned. Subscription-tier discounts (down to $1.00 per 1,000 for higher Apify plans) roll out June 11, 2026.
FAQ
How fresh are the results? Each run hits Upwork in real time and returns jobs as Upwork displays them. Newest jobs first.
Can I filter by location, hourly rate, or category?
Use the query field. Upwork supports search operators like "python developer location:United States" or "react budget:$1000+". Anything you can type in Upwork's search bar works here.
Does it handle Cloudflare? Yes. Uses a real browser fingerprint, no manual proxy setup required.
Does it require an Upwork login? No. All returned fields work without authentication.
What if a field is empty?
Some Upwork postings genuinely lack a field (older fixed-price jobs without budget, brand-new clients without spend history). Those fields will be null on the affected rows. Title, jobId, description and url are always populated for valid jobs.
Can I deduplicate runs?
Yes. The jobId is the canonical Upwork ID. Store it in your DB or sheet and skip duplicates on subsequent runs.
How do I increase max_jobs above the default?
Bump the input value up to 200 per run. For more than 200, schedule multiple runs with different keywords.
Limitations
- Cloudflare changes: Upwork can update bot detection. If results stop coming back, open an issue and we patch within hours.
- Rate limit: One concurrent run per query is the safe ceiling. Two-plus parallel runs on the same query can trigger temporary IP blocks.
- No saved-job sync: The actor reads from Upwork search, not your personal saved jobs.
Built with
- puppeteer-real-browser for Cloudflare-resistant browser fingerprinting.
- Apify SDK for actor runtime and pay-per-event billing.
Support
Found a bug or want a missing field? Open an issue on the Apify Store page or message us via the Apify community. Average response time: under 24 hours.