Get Upwork jobs as clean, structured, AI-scored JSON — in 5 lines of Python or Node.
Scraping Upwork yourself means rotating proxies, solving CAPTCHAs, reverse-engineering their GraphQL, and getting IP-banned anyway. This repo skips all that: it shows you how to pull ranked, enriched Upwork job data from a hosted, maintained API — the Upwork Job Scraper actor on Apify.
Every job comes back with a
job_score(0–100) — ranked by the client's pay, hire rate, and spend — plus 59 filters so you pull only the jobs worth bidding on, not the firehose.
$2 per 1,000 results · pay per use, no monthly fee · free tier to try · runs that return 0 results cost nothing.
| DIY Upwork scraper | This (hosted actor) |
|---|---|
| Proxies, CAPTCHAs, GraphQL, IP bans | Just call an API |
| Raw HTML/JSON you parse yourself | Clean, flat job records |
| You build ranking & dedup | job_score 0–100 + per-client "new jobs only" cursor |
| Breaks when Upwork changes | Maintained for you |
| ~5–15 fields | 59 filters, incl. AI-extracted skills, summaries & client signals |
pip install apify-clientfrom apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>") # https://console.apify.com/account/integrations
run = client.actor("hyperbach/upwork-scraper-ai").call(run_input={
"limit": 25,
"skills": "React",
"price_min": ">=50",
"buyer_score": ">=4.0",
"buyer_payment_verified": "true",
})
jobs = list(client.dataset(run["defaultDatasetId"]).iterate_items())
for j in sorted(jobs, key=lambda x: x.get("job_score", 0), reverse=True):
print(f'{j["job_score"]:>3} {j["title"]} → {j["url"]}')npm install apify-clientimport { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('hyperbach/upwork-scraper-ai').call({
limit: 25, skills: 'React', price_min: '>=50', buyer_score: '>=4.0',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.sort((a, b) => b.job_score - a.job_score)
.forEach(j => console.log(j.job_score, j.title, j.url));curl -X POST "https://api.apify.com/v2/acts/hyperbach~upwork-scraper-ai/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"limit": 25, "skills": "React", "buyer_score": ">=4.0"}'More in examples/ — including a REST-only version and a "new jobs since last run" alert loop.
A flat, ranked job record per posting. Real sample: examples/sample_job.json
59 fields across job details (skills, budget, category, keywords/exclude_keywords),
client quality (hire_rate, total_spent, buyer_score, payment_verified, avg_hourly_rate),
requirements (experience level, English level, hours/week), and AI insights
(ai_summary, ai_technical_skills, ai_explicit_mention_of_agency, …).
Full reference on the actor page.
# High-value React leads from proven clients, newest first
{"skills": "React", "price_min": ">=60", "buyer_score": ">=4.5",
"total_spent": ">=10000", "buyer_payment_verified": "true"}
# Only NEW jobs since your last call (per-client cursor) — perfect for alerts
{"notifications_only": "true", "skills": "Python", "price_min": ">=45"}- Freelancers — a ranked daily feed of the best-fit, best-paying jobs, with screening questions ready for your proposal.
- Agencies — filter straight to high-budget, agency-friendly clients with real spend and hire history.
- Job boards & SaaS — power a niche Upwork job board or alerting product with clean, scored data.
- Researchers — track Upwork pricing, demand, and skill trends at scale.
For research or model training, there's a separate Upwork Jobs Dataset — 1.9M+ historical records (2024–2025) in CSV / JSON / Parquet / SQLite / DuckDB with the same AI-enriched fields.
- ▶ Upwork Job Scraper on Apify — run it, see the full input schema & pricing
- 📚 Apify API docs · apify-client (Python) · apify-client (JS)
Example code: MIT. Not affiliated with or endorsed by Upwork; "Upwork" is a trademark of its owner. This repo is a client + examples for a hosted scraping API, not a standalone scraper.
{ "title": "Senior React Native / Cloud Backend Engineer ...", "url": "https://www.upwork.com/jobs/~02205...", "price_type": "Hourly", "price_min": 70, "price_max": 100, "skills": "React Native, iOS, Google Cloud Platform, Python, AI Development", "buyer_score": 4.93, "hire_rate": 100, "total_spent": 54226.41, "buyer_payment_verified": true, "client_location": "United States", "ai_summary": "You'll build and maintain a production iOS app in React Native ...", "questions": ["Describe a React Native iOS app you shipped ...", "..."], "job_score": 94, "job_score_breakdown": { "top_contributors": [ /* why it ranked 94 */ ] } }