Skip to content
NewProduct Updates — October 2026
Upwork Jobs ScraperExport jobs now

Upwork Jobs Scraper

Give it a search URL or Keyword, get the jobs: title, description, budget, ciphertext, client city, client rating, min job success score, URL and 42 more fields, in a spreadsheet, in your tools, through the API or from your AI agent.

1 creditper resultNew
Export jobs now
1Input
Options, per result
1 credit per result
2Results
[
  {
    "id": "6364d3f0f495b6ab9dcf8d3b5c6e0b01",
    "url": "https://www.upwork.com/jobs/~022089069371186411351",
    "title": "Python Developer for Web App",
    "budget": "15-35/hr",
    "job_id": "2089069371186411351",
    "object": "result",
    "skills": "Python, Django, JavaScript, JSON",
    "task_id": "a7d805643046af88260fbbc02c2ee40f",
    "duration": "1 to 3 months",
    "job_type": "Hourly",
    "workload": "Part-time",
    "input_url": "https://www.upwork.com/jobs/~022089069371186411351",
    "posted_at": "2026-08-16 19:20:35.799+00",
    "ciphertext": "~022089069371186411351",
    "param_sort": "Relevance",
    "description": "We are seeking a Python developer to build a web application that supports user authentication, data management, and API integrations. The project involves developing core application features, improving performance, and ensuring a smooth user experience. You will work closely with our team to deliver a reliable, scalable solution. Experience with web application development and a strong understanding of Python-based systems are important for this role.",
    "collected_at": "2026-09-15 09:57:17.711089+00",
    "budget_amount": "",
    "duration_weeks": "9",
    "job_created_at": "2026-08-16 19:18:46.015+00",
    "param_category": "Any",
    "hourly_rate_max": "35",
    "hourly_rate_min": "15",
    "result_position": "1",
    "experience_level": "Intermediate",
    "param_job_details": "FALSE",
    "param_max_results": "1",
    "param_posted_within": "Any time",
    "param_client_history": "Any",
    "param_hourly_or_fixed": "Any",
    "param_experience_level": "Any"
  },
  {
    "id": "6512bd43d9caa6e02c990b0a82652dca",
    "url": "https://www.upwork.com/jobs/~022090087423123075346",
    "title": "Python Dev",
    "budget": "3/hr",
    "job_id": "2090087423123075346",
    "object": "result",
    "skills": "Python",
    "task_id": "aa706c7d7d7383a68a5bc5617cfdb62a",
    "duration": "Less than 1 month",
    "job_type": "Hourly",
    "workload": "Part-time",
    "input_url": "https://www.upwork.com/nx/search/jobs/?q=python",
    "posted_at": "2026-08-19 14:48:01.789+00",
    "ciphertext": "~022090087423123075346",
    "param_sort": "Relevance",
    "description": "We are seeking a skilled Python developer to create a web scraper using Scrapy. The ideal candidate will have experience in web scraping and data processing, with a strong understanding of Python and its libraries. The project involves extracting data from websites and storing it in a structured format. Familiarity with Django is a plus. The role requires attention to detail and the ability to work independently.",
    "collected_at": "2026-09-15 09:53:39.417936+00",
    "budget_amount": "",
    "duration_weeks": "3",
    "job_created_at": "2026-08-19 14:44:08.699+00",
    "param_category": "Any",
    "hourly_rate_max": "3",
    "hourly_rate_min": "3",
    "result_position": "1",
    "experience_level": "Entry Level",
    "param_job_details": "FALSE",
    "param_max_results": "80",
    "param_posted_within": "Any time",
    "param_client_history": "Any",
    "param_hourly_or_fixed": "Any",
    "param_experience_level": "Any"
  }
]

A real result this scraper collected.Download it (CSV)

50 fields per job

Every run returns them, as CSV, JSON, JSONL, Excel, or through the API.

Export Jobs

included17 fields
job_id
id
Unique Upwork job posting identifier.
2090087423123075346
url
link
Direct URL to the job posting on Upwork.
upwork.com/jobs/~022090087423123075346
ciphertext
text
Upwork's public job reference (the `~02...` token used in job URLs).
~022090087423123075346
title
text
Job title.
Python Dev
description
text
Full job description as posted.
We are seeking a skilled Python developer to create a web scraper using Scrapy.

Job Details

+1 per result, if you switch it on33 fields
is_enterprise
yes / no
True when the posting comes from an Upwork Enterprise client. Read from the job page, so it needs the `job_details` add-on (or a single job URL as task input).
No
freelancers_to_hire
number
Number of freelancers the client wants to hire, when stated. Upwork carries this one number on two paths of the job payload (`clientActivity.numberOfPositionsToHire` and `numberOfPositionsToHire`); both are read here and the first non-null wins. Read from the job page, so it needs the `job_details` add-on (or a single job URL as task input).
1
currency
text
Currency of the budget / hourly rate.
USD
proposals_count
number
Exact number of proposals (applicants) received so far.
9
category
text
Upwork category of the job.
Web Development

What it costs

Switch on the options you need and pick a volume.

Every plan

1 credit per job with these options

Jobs a month

10,000

Per 1,000 jobs

$2.00

On Starter, $20 a month for up to 10,000 jobs.

Live

Built to run

Most scrapers break in silence. This one doesn't, and we show it, openly.

Incident-free runs, 90 days
100.00%
Fixing rate
100%
Median time to fix
-
90 days agoToday
OperationalDegradedDownFixed incidentOpen incidentHow we measure

Frequently asked questions

What people ask before running the Upwork Jobs Scraper.

Upwork Jobs

Is it legal to scrape Upwork jobs?

Yes — a brief posted in public is public data. Everything we collect is what any visitor can read on Upwork without signing in. More in our guide to the legality of web scraping.

Do I need an Upwork account?

No login required. No account to sync, no cookie to paste, no Chrome extension — and no Upwork account of yours to put at risk. Paste a search and go, which is rarer than it sounds on a marketplace this well guarded.

What data do I get for each job?

50 data points per job. Title, the full brief, when it went live, fixed budget or hourly range, duration, weekly workload, experience level, the complete skill list, how many freelancers are wanted — and the client behind it when Job Details is on.

How fast is it?

About 800 jobs a minute. Switch on Job Details and it settles at roughly 10 a minute — that is the price of the client block. Keep it for shortlists, leave it off when you are sweeping a whole category.

Where do the jobs end up once they are scraped?

Wherever you already work. Google Sheets, Make, n8n, Amazon S3, email, webhooks — plus our MCP server, so Claude or ChatGPT can launch a run and read the results itself. CSV, Excel and JSON too. See all integrations.

What does Job Details add, and what does it cost?

1 extra credit per job, and it roughly doubles the export. You get the client behind the brief — country, total spent, rating, reviews, hires, payment verification, member since — plus the exact proposal count and the applicant requirements. 31 columns become 64.

Can I filter which jobs get collected?

Yes — and the jobs you filter out cost you nothing. Category, hourly or fixed, budget range in dollars, experience level, the client's hiring history, the client's country and how recently it was posted. Whatever your URL already sets is left alone.

Do I get the budget for each job?

Yes, in fields you can actually sort on. Fixed-price jobs bring the budget amount, hourly jobs a minimum and a maximum rate, and every job carries the figure Upwork displays, the currency and whether it is hourly or fixed.

Can I collect only the jobs posted recently?

Yes — set a Newer Than threshold. Give it 24h, 7d, 2w or an exact date in your own timezone, and the search flips to newest-first and stops the moment it reaches older jobs. A daily re-run of the same search costs almost nothing.

Do I need a search URL, or will a keyword do?

All three work. An Upwork search URL with your filters, a plain keyword like python developer, or the link to one posting if you only want that job. Feed it a single job link and Job Details comes free.

Inputs and data

What do I give the Upwork Jobs Scraper?

URL, such as https://www.upwork.com/jobs/~022089069371186411351. Paste thousands at once or upload a CSV; duplicate inputs are skipped. 12 settings shape the run: see them in the playground.

What data does it return?

50 data attributes per job, each with its description and an example: see the full list.

Do I get duplicates?

No. Duplicates are removed, and you only pay for unique results.

How fresh is the data?

As fresh as your run: each run collects the data from the site at the moment it runs, nothing comes from a stored database.

In what formats do I get the results?

CSV, Excel or JSON from the dashboard, through the API, or sent after every run to Google Sheets, Amazon S3, an SFTP server, a webhook or by email.

How long are my results kept?

7 days on the free plan, 28 days on paid plans. Then they are deleted. Download or deliver what you want to keep.

Speed and reliability

How fast is the Upwork Jobs Scraper?

Around 800 jobs a minute for one squid. Your plan's slots run several squids at the same time.

How reliable is it?

100.00% of its runs had no incident over the last 90 days (0 incidents, 100% fixed). Every day is on this page.

What happens when the site changes?

Our team fixes the scraper: every scraper on lobstr.io is built and maintained by us. How we measure.

Can runs repeat on their own?

Yes, on paid plans: every hour, every day, every weekday or on a custom schedule, in your time zone.

Can I cap a run?

Yes: set the most results per task and per run in the settings. The run stops there and so does the bill.

Pricing

How much does the Upwork Jobs Scraper cost?

1 credit per result. Options add to it: Job Details +1. The playground shows the price as you pick them.

Can I use it on the free plan?

Yes. The free plan gives 100 credits every month, 100 results with this scraper, with exports capped at 30 rows.

How do the plans work?

Every month a plan gives credits, which pay for results, and slots, which set how many squids run at the same time. Starter: $20 for 10,000 credits; Pro: $100 for 100,000 credits; Team: $500 for 1,000,000 credits. Upgrades start right away and are prorated; downgrades and cancellations take effect at the end of the cycle.

Do unused credits roll over?

No. Your credits refresh every month with your plan.

What if I run out of credits?

You choose, per squid: pause and pick up where it stopped, or end the run. To keep going, upgrade or reset your billing cycle: your plan renews right away and your credits come back. Auto Billing Reset does it for you when your usage crosses a threshold you set.

Is there a yearly discount?

Yes: paying yearly takes 20% off every plan.

Can I get a refund?

A monthly plan: within 10 days of the charge, if no credit was used in that period. A yearly plan: within 30 days, in full if no credit was used, otherwise minus one month. Cancel from your billing page, then write to contact@lobstr.io. The details are in the terms of use.

API and agents

Can I run it from my code?

Yes, through the REST API at https://api.lobstr.io/v1, with your key from the dashboard. The playground’s Code tab writes the calls for your settings, in cURL and Python. The documentation has the full reference.

Can my AI agent run it?

Yes. Add our MCP server, https://mcp.lobstr.io/mcp, to Claude, ChatGPT, Cursor or any MCP client and sign in with lobstr.io. Your agent shows the cost and asks you before a run spends credits. The playground’s Agent tab gives you a prompt.

Do API calls cost credits?

No. Credits pay for results, not for requests.

Can I know when a run ends?

Yes. Point a webhook at your server and lobstr.io calls it when a run succeeds or fails.

Are there rate limits?

Yes, per endpoint: 120 requests a minute on squids and runs, 90 on tasks, 2 a second on results. Above that the API answers 429 with a Retry-After header.

Ready to start?

Your first jobs in a few minutes, free.