# 🚀 Upwork Jobs Scraper · 5,000 Free Jobs/Month (`omkar-cloud/upwork-jobs-scraper`) Actor

Upwork Jobs Scraper gets you Upwork jobs ⚡ fast, 🎯 100% accurate and 🔍 ridiculously detailed — budgets, rates, proposals and client spend, hires and ratings. 💰 $1 per 1,000 jobs, no start fee. Scrape your first 5,000 jobs free every month 🚀

- **URL**: https://apify.com/omkar-cloud/upwork-jobs-scraper.md
- **Developed by:** [Omkar Cloud](https://apify.com/omkar-cloud) (community)
- **Categories:** Jobs, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 jobs

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Upwork Jobs Scraper

Upwork Jobs Scraper by Omkar Cloud gets you 🎯 accurate, 🔍 detailed Upwork jobs data.

Upwork uses Cloudflare bot protection to stop you from getting its data.

Upwork Jobs Scraper beats it, so you get the data, and can successfully complete your project.

**$1 per 1,000 jobs.** And with Apify's free plan you get $5 of credit every month, so your first **~5,000 jobs each month are free**.

This is an excellent Actor made by Omkar Cloud, which is Rated Excellent — [4.7 based on 30 reviews on Trustpilot](https://www.trustpilot.com/review/omkar.cloud).

👉 [**Try Upwork Jobs Scraper free**](https://apify.com/omkar-cloud/upwork-jobs-scraper) — your first ~5,000 jobs are Free.

### What can I get

- 💼 **Search 106K+ open jobs** — Upwork's own filters: budget, hourly rate, experience, client hires, location & time zone
- 🧑‍💼 **Client intel on every job** — total spent, hires, rating, location and member-since date
- 📊 **Competition at a glance** — proposals, interviews, invites and hires for each job
- 📄 **Full details** — description, skills, category, required qualifications & similar jobs

### Why Upwork Jobs Scraper

Most other Upwork scrapers fail you in one of four ways:

- 🗄️ **Inaccurate, cached, stale data**
- 🧩 **Low-detail data** — a few fields per job, never the full picture
- 💸 **Pay more to get the same data**
- 🪦 **Works today, breaks next month** — nobody maintains it

Upwork Jobs Scraper is scraped live on every run, priced honestly, and actively maintained.

### Example: A Full Upwork Job

```json
{
  "input_url": "https://www.upwork.com/jobs/~022110042793670717934",
  "id": "2110042793670717934",
  "title": "Lead AI Engineer (Data & Automation)",
  "link": "https://www.upwork.com/jobs/~022110042793670717934",
  "description": "Skyward is a SEO and AI-search agency that runs its client work on software it builds itself...",
  "job_type": "hourly",
  "experience_level": "intermediate",
  "hourly_rate_min": 20,
  "hourly_rate_max": 60,
  "hourly_rate_currency": "USD",
  "duration": "More than 6 months",
  "duration_weeks": 52,
  "workload": "More than 30 hrs/week",
  "skills": ["Data Engineering", "Artificial Intelligence", "Python", "ETL Pipeline"],
  "category": "Data Mining & Management",
  "occupation": "Data Engineering",
  "proposals": 274,
  "interviewing": 0,
  "invites_sent": 0,
  "hired": 0,
  "is_payment_verified": true,
  "client_city": "Cold Spring Harbor",
  "client_country": "United States",
  "client_member_since": "2020-08-06",
  "client_total_spent": 183239.52,
  "client_total_hires": 74,
  "client_active_hires": 35,
  "client_hours_billed": 4138.7,
  "client_rating": 4.99,
  "published_at": "2026-10-13T16:19:51Z"
}
```

*Trimmed for readability.* Every row is flat — each value is its own column, so CSV and Excel exports need no clean-up.

### Get Started with 5,000 Free Jobs

1. [Hit **Try for Free Button**](https://apify.com/omkar-cloud/upwork-jobs-scraper) — the input is pre-filled with "ai agent" and "web scraping" jobs.
2. Enjoy your data 😎.

### What you can paste

| Input | Example | What you get |
|---|---|---|
| **Search keywords** | `ai agent` | Every matching job, with the filters you set |
| **Job search URL** | `https://www.upwork.com/nx/search/jobs/?q=shopify&t=1` | The URL's jobs, with its own keyword and filters |
| **Job URL** | `https://www.upwork.com/jobs/~022110042793670717934` | That job, with full job + client details |

### Pricing

High value, Low price.

| What | Price | What you get |
|---|---|---|
| **Standard jobs** | **$1.00 per 1,000** | id, title, link, description, type, level, hourly rate or budget, length, hours, skills, posting time |
| **Detailed jobs** | $3.00 per 1,000 | Everything above + proposals, interviews, invites, required qualifications, category, and the client's spend, hires, rating, location and company |

No start fee — you pay only for the rows you get. Control your spend with **Max jobs per search**: 1,000 jobs ≈ $1.

💡 Apify's free plan includes $5 of credit every month — about **5,000 free jobs, every month**.

👉 [**Scrape your first 5,000 jobs free**](https://apify.com/omkar-cloud/upwork-jobs-scraper)

### FAQ

**How much does a typical run cost?** 1,000 standard jobs cost $1. With full job + client details switched on, 1,000 jobs cost $3. A search for 100 jobs costs 10 cents.

**How many jobs can one search return?** Upwork serves up to 5,000 jobs per search. Narrow it with filters or add more keywords to reach more.

**Do I pay twice for the same job?** No. A job found by several searches in one run is scraped and billed once.

**What if a job page fails?** Some jobs are private (invited freelancers only) or close while you scrape. You keep the search row, billed at the standard rate only.

### Run It from Code

Grab your API token from [Integrations Settings here](https://console.apify.com/settings/integrations) and replace `<YOUR_API_TOKEN>` below.

**Python** (`pip install apify-client`)

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("omkar-cloud/upwork-jobs-scraper").call(run_input={
    "searchQueries": ["ai agent"],
    "jobType": ["hourly"],
    "clientHires": ["10-"],
    "scrapeJobDetails": True,
    "maxResultsPerSearch": 50,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(job["title"], job["hourly_rate_max"], job["client_total_spent"])
```

**Node.js** (`npm install apify-client`)

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('omkar-cloud/upwork-jobs-scraper').call({
    startUrls: ['https://www.upwork.com/nx/search/jobs/?q=shopify&t=1'],
    maxResultsPerSearch: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### 💬 Have Questions? We Have Answers.

You're a business owner — we know how hard completing a project can be. So we offer full support: just message us and we'll reply ✅ with a solution within 1 working day.

[![Message Us on WhatsApp](https://raw.githubusercontent.com/omkarcloud/assets/master/images/whatsapp-us.png)](https://api.whatsapp.com/send?phone=918178804274\&text=I%20need%20help%20with%20using%20the%20Upwork%20Jobs%20Scraper%20Actor.)

[![Ask Us on Email](https://raw.githubusercontent.com/omkarcloud/assets/master/images/ask-on-email.png)](mailto:happy.to.help@omkar.cloud?subject=Help%20with%20Upwork%20Jobs%20Scraper%20Actor\&body=I%20need%20help%20with%20using%20the%20Upwork%20Jobs%20Scraper%20Actor.)

You are important to us — just message us and we will solve your problem ✅ within 1 working day. 🩷 Pinky Promise 🤙!

### Related Actors

- 👩‍💻 [**Upwork Freelancer Scraper**](https://apify.com/omkar-cloud/upwork-freelancer-scraper) — scrape Upwork freelancers & agencies: rates, Job Success, earnings & work history. $2 per 1,000 profiles.
- 💼 [**Google Jobs Scraper**](https://apify.com/omkar-cloud/google-jobs-scraper) — jobs from every board Google indexes, with salaries & apply links.

### Popular Actors by Omkar Cloud

- [**G2 Product Scraper**](https://apify.com/omkar-cloud/g2-product-scraper) — G2 product details, ratings & AI-found contacts
- [**Website Email Contact Scraper**](https://apify.com/omkar-cloud/website-email-contact-scraper) — emails, phones & socials from any website
- [**AliExpress Product Scraper**](https://apify.com/omkar-cloud/aliexpress-product-scraper) — live product details, SKU variants, stock & shipping
- [**Booking Scraper**](https://apify.com/omkar-cloud/booking-scraper) — Booking.com hotels: prices, ratings, rooms & amenities

👉 [**Scrape your first 5,000 jobs free now**](https://apify.com/omkar-cloud/upwork-jobs-scraper)

# Actor input Schema

## `searchQueries` (type: `array`):

Skills, job titles or keywords — one Upwork job search per line. Every search uses the filters below.

## `startUrls` (type: `array`):

Paste any Upwork job search URL (its own keyword and filters are applied), or a job page URL (scraped with full details).

## `sort` (type: `string`):

Newest jobs first, or Upwork's best matches.

## `jobType` (type: `array`):

Keep hourly jobs, fixed-price jobs, or both.

## `experienceLevel` (type: `array`):

The experience level the client asks for.

## `hourlyRateMin` (type: `integer`):

Keep hourly jobs paying at least this much.

## `hourlyRateMax` (type: `integer`):

Keep hourly jobs paying at most this much.

## `fixedBudget` (type: `array`):

Keep fixed-price jobs within any of these budget ranges.

## `duration` (type: `array`):

Keep jobs with any of these project lengths.

## `workload` (type: `array`):

Part time (less than 30 hrs/week) or full time (30+ hrs/week).

## `clientHires` (type: `array`):

Keep jobs from clients with this many past hires.

## `clientLocation` (type: `array`):

Countries, regions or subregions by name or ISO code, e.g. United States, US, Europe, Southern Asia.

## `clientTimezone` (type: `array`):

IANA time zone or UTC offset, e.g. America/New_York or UTC-05:00.

## `contractToHire` (type: `boolean`):

Keep only jobs that can become a full-time role.

## `skillIds` (type: `array`):

Upwork skill IDs (any of them match), e.g. 996364628025274386 = Python, 1031626773660942336 = React.

## `category` (type: `array`):

Upwork job category names or IDs, e.g. Web, Mobile & Software Dev or Design & Creative.

## `subcategory` (type: `array`):

Upwork job subcategory names or IDs, e.g. Web Development or AI Apps & Integration.

## `maxResultsPerSearch` (type: `integer`):

Stop each search after this many jobs. This caps your cost. Upwork serves up to 5,000 jobs per search.

## `scrapeJobDetails` (type: `boolean`):

Open every job for the full description, proposals, interviews, invites, required qualifications and the client's total spend, hires, rating, location and company. Billed as a detailed row.

## Actor input object example

```json
{
  "searchQueries": [
    "ai agent",
    "web scraping"
  ],
  "startUrls": [
    "https://www.upwork.com/nx/search/jobs/?q=shopify&t=1"
  ],
  "sort": "recency",
  "contractToHire": false,
  "maxResultsPerSearch": 100,
  "scrapeJobDetails": false
}
```

# Actor output Schema

## `results` (type: `string`):

Every row with every field.

## `overview` (type: `string`):

Every job: title, type, level, rate or budget, length, skills and posting time.

## `clients` (type: `string`):

Detailed rows: proposals, interviews and the client's spend, hires, rating and location.

## `details` (type: `string`):

Detailed rows: category, occupation, skills and full description.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "ai agent",
        "web scraping"
    ],
    "startUrls": [
        "https://www.upwork.com/nx/search/jobs/?q=shopify&t=1"
    ],
    "maxResultsPerSearch": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("omkar-cloud/upwork-jobs-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": [
        "ai agent",
        "web scraping",
    ],
    "startUrls": ["https://www.upwork.com/nx/search/jobs/?q=shopify&t=1"],
    "maxResultsPerSearch": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("omkar-cloud/upwork-jobs-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "ai agent",
    "web scraping"
  ],
  "startUrls": [
    "https://www.upwork.com/nx/search/jobs/?q=shopify&t=1"
  ],
  "maxResultsPerSearch": 100
}' |
apify call omkar-cloud/upwork-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,omkar-cloud/upwork-jobs-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/69wCbLew8DdhLr62a/builds/MTA4QpOgm8ysOBRiI/openapi.json
