# Upwork Scraper | Job and Details | pay per result 2,5$/1k (`fasty_dev/upwork-job-scraper`) Actor

⚡ Fastest Upwork scraper - no auth needed! Get detailed, structured job data at 2.5$/1k results. faster, cheaper, and more reliable than competitors with zero setup hassle.

- **URL**: https://apify.com/fasty_dev/upwork-job-scraper.md
- **Developed by:** [Fasty Dev](https://apify.com/fasty_dev) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 78 total users, 2 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 Scraper | Job and Details | Pay Per Result

⚡ **No-auth Upwork scraper with lightning speed & superior data quality** | Get fully structured, detailed job data instantly - cheaper, faster, and zero configuration needed!

### Why Choose This Scraper?

✅ **Zero Setup Required** - No authentication, no cookies, no configuration hassle\
✅ **Complete Job Details** - Full job description, client history, budget, skills, and activity metrics\
✅ **Pay Per Result** - Only $2.5 per 1,000 jobs scraped\
✅ **Real-time Data** - Fresh data crawled directly from Upwork at request time\
✅ **Proxy Included** - No additional proxy costs or setup\
✅ **Structured Output** - Clean, consistent JSON format ready for analysis

### Features

#### Comprehensive Filtering Options

- **Keywords**: Search by specific terms or fetch all available jobs
- **Experience Levels**: Entry, Intermediate, Expert
- **Budget Filters**:
  - Hourly rate range (min/max)
  - Fixed price range (min/max)
- **Competition Level**: Filter by number of proposals (less than 5, 5-10, 10-15, 15-20, 20-50)
- **Client Criteria**:
  - Payment verification status
  - Hiring history (no hires, 1-9 hires, 10+ hires)
- **Project Details**:
  - Duration (less than 1 month, 1-3 months, 3-6 months, 6+ months)
  - Hours per week (less than 30, more than 30)
  - Contract-to-hire opportunities
- **Sorting**: Newest or Relevance

#### Pagination Support

Use `offset` and `limit` parameters to scrape large datasets:

- `limit`: 10-250 jobs per request
- `offset`: Start position for pagination
- Example: For 1,000 jobs, run 4 requests with limit=250 and offset=0, 250, 500, 750

### Input Parameters

```json
{
  "keywords": "React developer",
  "limit": 10,
  "offset": 0,
  "sortby": "newest",
  "experience_level": ["intermediate", "expert"],
  "budget": {
    "hourly": true,
    "min_budget_hourly": 30,
    "max_budget_hourly": 100,
    "fixed_price": false
  },
  "numbers_of_proposals": ["less_than_5", "5_to_10"],
  "client_payment_verified": true,
  "client_history": ["10_plus_hires"],
  "project_length": ["1_to_3_months"],
  "hours_per_week": ["more_than_30"],
  "contract_to_hire_role": false
}
```

#### Parameter Details

| Parameter | Type | Description | Default |
|-----------|------|-------------|---------|
| `keywords` | string | Search term (e.g., 'React developer'). Leave empty for all jobs | - |
| `limit` | number | Maximum jobs per request (10-250) | 10 |
| `offset` | number | Starting position for pagination (0-1000) | 0 |
| `sortby` | string | Sort by: `newest` or `relevance` | newest |
| `experience_level` | array | Filter by: `entry_level`, `intermediate`, `expert` | - |
| `budget.hourly` | boolean | Include hourly jobs | false |
| `budget.min_budget_hourly` | number | Minimum hourly rate ($/hour) | 0 |
| `budget.max_budget_hourly` | number | Maximum hourly rate ($/hour) | 0 |
| `budget.fixed_price` | boolean | Include fixed-price jobs | false |
| `budget.min_budget_fixed_price` | number | Minimum project budget (USD) | 0 |
| `budget.max_budget_fixed_price` | number | Maximum project budget (USD) | 0 |
| `numbers_of_proposals` | array | Competition level based on proposal count | - |
| `client_payment_verified` | boolean | Only verified payment clients | false |
| `client_history` | array | Filter by hiring history | - |
| `project_length` | array | Expected project duration | - |
| `hours_per_week` | array | Time commitment per week | - |
| `contract_to_hire_role` | boolean | Long-term employment potential | false |

### Output Format

Each job returns comprehensive data including:

```json
{
    "id": "~022000563332367977041",
    "uuid": "2000563332367977041",
    "link": "https://www.upwork.com/jobs/~022000563332367977041",
    "title": "AI-empowered Node.js/Typescript Full-stack Developer - Restructure/Extract Existing Nextjs",
    "description": "OVERVIEW\nWe have a fully functional Asset Fulfillment & Tracking Platform built as a Next.js monolith. All business logic exists and works - we need an experienced backend developer to extract the backend into a dedicated Node.js API and restructure it for multi-tenant,...",
    "budget": {
      "type": "FIXED",
      "fixed_amount": 1400,
      "min_hourly_rate": 0,
      "max_hourly_rate": 0
    },
    "skills": [
      "TypeScript",
      "Next.js",
      "Node.js",
      "PostgreSQL"
    ],
    "published_at": "2025-12-15T13:47:22.882Z",
    "person_to_hire": 1,
    "category_group": "Web, Mobile & Software Dev",
    "category": "Web Development",
    "duration": "Less than 1 month",
    "workload": "",
    "contractor_tier": "INTERMEDIATE",
    "qualifications": {
      "countries": [],
      "languages": [],
      "min_job_success_score": 0,
      "pref_english_skill": "ANY",
      "rising_talent": false
    },
    "questions": [
      "Link to a Node.js/TypeScript backend project you've built (GitHub/GitLab) - we want to see your code structure, middleware patterns, and TypeScript usage",
      "Which backend framework would you choose for this project and why? (1-2 sentences)",
      "Brief explanation of how you'd implement platform-scoped middleware that reads a header and filters all database queries (2-3 sentences showing you understood the multi-tenancy requirement)",
      "Confirmation you're comfortable using AI coding tools to accelerate development",
      "Your availability for the next 15 days (Dec 15-30)"
    ],
    "connect_required": 25,
    "position": "97",
    "client": {
      "id": "890262926677856256",
      "name": "",
      "industry": "Tech & IT",
      "size": 10,
      "payment_verified": true,
      "phone_verified": false,
      "location": {
        "city": "Dubai",
        "country": "United Arab Emirates"
      },
      "stats": {
        "score": 4.98,
        "feedback_count": 41,
        "total_spent": 17479.76,
        "avg_hourly_rate": 26.704545454545453,
        "total_job_posted": 41,
        "total_job_open": 1,
        "total_job_with_hires": 54,
        "hire_rate": 1
      },
      "job_history": [
        {
          "id": "",
          "uuid": "",
          "title": "Thin-MVP Storage Platform Interface",
          "type": "FIXED",
          "total_charge": 1950,
          "total_hours": 0,
          "feedback_to_worker": {
            "score": 5,
            "comment": "Great work on the interface - simple, clean, and easy to work with. Smooth communication and quick delivery. As always, would definitely work again."
          },
          "feedback_to_client": {
            "score": 5,
            "comment": "Amazing collab, on point fair and very clear communication."
          },
          "contractor": {
            "id": "~013580487b628032c4",
            "name": "Andra B."
          }
        }
      ]
    },
    "activity": {
      "total_applicants": 14,
      "client_last_viewed": "2025-12-15T16:20:26.567Z",
      "interviewing": 0,
      "invited": 0,
      "unanswered_invitations": 0
    },
    "attachments": [
      "https://www.upwork.com/att/download/openings/2000563332367977041/attachments/4aa9285d-a45a-4723-8f00-94c01a02288c/download"
    ]
  }
```

### Use Cases

- **Freelancers**: Find high-quality jobs matching your skills with detailed client insights
- **Market Research**: Analyze job trends, budget ranges, and skill demands
- **Lead Generation**: Identify potential clients based on hiring patterns
- **Competitive Analysis**: Monitor competitor job postings and requirements
- **Data Analytics**: Build datasets for ML/AI projects or market intelligence

### Pricing

**$2.5 per 1,000 results** - Simple, transparent, pay-per-result pricing

No hidden costs, no proxy fees, no authentication setup required.

### Getting Started

1. **Add to your Apify account**
2. **Set your filters** (or leave default for all jobs)
3. **Run and get results** - That's it!

For large datasets (1,000+ jobs), use pagination with `offset` parameter.

### Comparison with Alternatives

| Feature | This Scraper | Typical Competitors |
|---------|-------------|---------------------|
| Authentication Setup | ✅ None required | ❌ Required |
| Proxy Setup | ✅ Included | ❌ Extra cost |
| Data Completeness | ✅ Full details | ⚠️ Basic info |
| Price per 1K results | $2.5 | $5-10+ |
| Configuration Complexity | ✅ Zero setup | ⚠️ Complex |

### Support

Need custom filtering options or additional data fields? Contact us for feature requests.

***

**Ready to start scraping Upwork jobs? Add this actor to your account now!**

# Actor input Schema

## `keywords` (type: `string`):

Search term for finding jobs (e.g., 'React developer', 'content writer'). Leave empty to fetch all available jobs.

## `limit` (type: `number`):

Maximum number of jobs to retrieve in this request.

## `offset` (type: `number`):

Starting position for pagination. Use 0 for first page, 10 for second page (if limit=10), etc.

## `sortby` (type: `string`):

Order results by newest postings or most relevant to your search.

## `experience_level` (type: `array`):

Filter by required experience level. Select one or multiple levels.

## `budget` (type: `object`):

Filter by job budget range. Choose hourly rate or fixed price, then set min/max amounts.

## `numbers_of_proposals` (type: `array`):

Filter by competition level based on number of submitted proposals.

## `client_payment_verified` (type: `boolean`):

Only show jobs from clients with verified payment methods.

## `client_history` (type: `array`):

Filter by client's hiring track record on Upwork.

## `project_length` (type: `array`):

Filter by expected project duration.

## `hours_per_week` (type: `array`):

Filter by expected time commitment per week.

## `contract_to_hire_role` (type: `boolean`):

Only show jobs with potential for long-term employment.

## Actor input object example

```json
{
  "limit": 10,
  "offset": 0,
  "sortby": "newest",
  "client_payment_verified": false,
  "contract_to_hire_role": false
}
```

# 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 = {
    "limit": 10,
    "offset": 0,
    "sortby": "newest"
};

// Run the Actor and wait for it to finish
const run = await client.actor("fasty_dev/upwork-job-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 = {
    "limit": 10,
    "offset": 0,
    "sortby": "newest",
}

# Run the Actor and wait for it to finish
run = client.actor("fasty_dev/upwork-job-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 '{
  "limit": 10,
  "offset": 0,
  "sortby": "newest"
}' |
apify call fasty_dev/upwork-job-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fasty_dev/upwork-job-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/hRVbvvHO4HsXqmQjU/builds/1lXgQoJs9N9DrgElU/openapi.json
