Scrapers.lat logo scrapers.lat
Jobs

Upwork Freelancers & Jobs Scraper

Search Upwork talent and jobs. Extract freelancer profiles (hourly rate, total earned, job success, skills, location) and job posts (budget, type, skills). Export to JSON, CSV or Excel.

16 fields per record JSON · CSV · Excel · API Pay per use
upwork-scraper.json 200 OK
{
  "title": "Python Full-Stack Developer",
  "url": "https://www.upwork.com/jobs/~02207444872177208…",
  "type": "Hourly",
  "description": "Job Title: Python Full Stack Developer About t…",
  "currency": "USD",
  "duration": "3 to 6 months",
  "engagement": "Part Time",
  "experienceLevel": "Expert",
  "premium": false
}
What you get

Every run returns clean, typed records, ready for your CRM, spreadsheet or database.

  • One clean record per result, deduped and normalized
  • Stable schema in JSON, CSV or Excel, or read it via the Apify API
  • Pay per use in the cloud, nothing to install or maintain
Fields it returns
TitleUrlTypeDescriptionCurrencyDurationEngagementExperience LevelPremiumSkillsCreated OnPosted AtBudget AmountHourly Min
Sample output

A real example record, exactly the shape you receive.

TitleUrlTypeDescription
Python Full-Stack Developerhttps://www.upwork.com/jobs/~0220…HourlyJob Title: Python Full Stack Deve…
Python Developerhttps://www.upwork.com/jobs/~0220…FixedPosition- Python Developer Exp- 4…
Expert Python Developerhttps://www.upwork.com/jobs/~0220…FixedLooking for an experienced Python…
Hiring Python Developerhttps://www.upwork.com/jobs/~0220…HourlyStrong proficiency in Python and …
GET /upwork-scraper
{
  "title": "Python Full-Stack Developer",
  "url": "https://www.upwork.com/jobs/~02207444872177208…",
  "type": "Hourly",
  "description": "Job Title: Python Full Stack Developer About t…",
  "currency": "USD",
  "duration": "3 to 6 months",
  "engagement": "Part Time",
  "experienceLevel": "Expert",
  "premium": false
}

Frequently asked questions

Which Upwork data can this scraper collect?

It reads two public surfaces: the talent search (freelancer profiles) and the job search (job posts). Set the search type, enter a keyword, and it returns clean records with rates, earnings, job success, skills, budgets and more.

How many results can I get per keyword?

Popular keywords return tens of thousands of freelancers and thousands of jobs. The talent search exposes up to about 191,000 profiles per keyword. Use the Max Items input to cap how many records you collect.

Do I need an Upwork login or cookies?

No. The scraper only reads publicly available search pages and needs no account, cookie or token from you.

Why are some job budgets or hourly ranges empty?

Some hourly jobs are posted with an open budget and some client details are hidden on public posts, so those values come through empty. Every field that is always empty on public data is left out of the output entirely.

Can I search freelancers and jobs in the same run?

Each run collects one type. Run the actor once with the search type set to freelancers and again with it set to jobs, or schedule two separate tasks.

Ready when you are.

Run the scraper live on Apify right now, or have us build one tailored to exactly what you need.