# Upwork Job Scraper – AI Insights, Real-Time Feed & 59+ Filters (`hyperbach/upwork-scraper-ai`) Actor

Scrape Upwork jobs with AI-scored urgency, complexity & quality at $2 per 1,000 results. Real-time feed with 59+ filters (skills, budget, client rating, hire intent), automatic deduplication, and notifications-only mode for NEW jobs since your last run. For freelancers, agencies, and job boards.

- **URL**: https://apify.com/hyperbach/upwork-scraper-ai.md
- **Developed by:** [Hyperbach](https://apify.com/hyperbach) (community)
- **Categories:** Jobs, Lead generation, AI
- **Stats:** 15 total users, 1 monthly users, 93.5% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Upwork Job Scraper – AI Insights, Real-Time Feed & 59+ Filters

> Scrape Upwork jobs with AI-scored urgency, complexity & client quality. Only $2 per 1,000 results — no monthly fee.

### What makes this scraper different

|  | This scraper | Typical Upwork scraper |
|---|---|---|
| **AI enrichment** | ✅ Each job scored for urgency, complexity, technical requirements | ❌ Raw data only |
| **Filters** | ✅ 59+ fields (skills, budget, client country, hire rate, payment verified, English level, …) | ⚠️ ~5–15 filters |
| **Job score (0–100)** | ✅ Every job ranked by price, client reputation, spending, location | ❌ No ranking — you sift the noise yourself |
| **Screening questions** | ✅ Captured per job (when present) — feed straight into your auto-proposal generator | ❌ Hidden until you open the posting |
| **Notifications mode** | ✅ Returns only NEW jobs since your last call (cursor tracking per client) | ❌ Returns everything every time |
| **Deduplication** | ✅ Automatic | ⚠️ Manual |
| **Pricing** | ✅ $2 / 1,000 results, no monthly fee | ⚠️ $5–$30 / month + usage |


### 🚀 Quick Start

#### 1. Basic Usage
```javascript
{
  "limit": 10
}
````

#### 2. With Smart Filtering

```javascript
{
  "limit": 20,
  "skills": "React",
  "price_min": ">=50",
  "buyer_score": ">=4.0",
  "ai_urgency": "Urgent"
}
```

#### 3. Notification Mode (Only New Jobs)

```javascript
{
  "notifications_only": "true",
  "limit": 50
}
```

### ⚡ Performance

- **Median run duration:** ~25 seconds for 100 results
- **Smart caching** keeps repeated queries responsive
- **Success rate** is currently improving with active reliability work — see the Issues tab for status

### ⚙️ Input Configuration

*All parameters are optional.*

| Parameter | Type | Description |
|-----------|------|-------------|
| `limit` | number | Number of jobs to return (1-100, default: 10) |
| `notifications_only` | boolean | If true, only returns NEW jobs since last call |

### ⚠️ Filter Quality — Read This Before Filtering

Upwork only **requires** title, description, skills, and price-type from the
client. Almost everything else is optional, and clients fill it in
inconsistently. **If you filter on a field that's empty for most jobs, you
exclude all the matching jobs that simply didn't supply the value** — not
just the non-matching ones.

Field density measured on the last 30 days (~135K postings):

- **Always-filled (safe to filter):** `title`, `description`, `skills`,
  `price_type`, `category_name`, `subcategory_name`, `experience_level`,
  `qual_pref_english`, `qual_type`, `client_location`, `hire_rate`,
  `company_size`, `open_jobs` (all ≥99%)
- **Mostly filled (mild loss):** `buyer_contract_date` (~82%),
  `buyer_payment_verified` (~78%), `ai_explicit_mention_of_agency` (~73%)
- **Half-filled (use carefully):** `price` / `price_min` / `price_max`
  (~40% — fixed-price jobs leave hourly bounds null and vice versa),
  `buyer_score`, `buyer_feedback_count`, `total_spent`, `industry`,
  `engagement_label`, `ai_summary`, `ai_technical_skills` (30-70%)
- **Sparse (filter at your own risk):** `ai_urgency` (~14%),
  `ai_duration` (~27%), `ai_deadline` (~12%), `qual_portfolio_required` (~7%),
  `qual_rising_talent` (~12%) — most jobs are *not* tagged

**Recommendation:** filter on dense fields, then use sparse fields for
post-fetch sorting / scoring / display. Combining sparse filters compounds
the loss multiplicatively.

### 📊 Available Filter Fields

You can filter jobs by **59 different fields** across these categories:

#### 📋 Essential Job Information

Core job details like title, description, pricing

**Available fields:** `title`, `description`, `skills`, `price_type`, `price`, `price_min`, `price_max`, `category_name`, `subcategory_name`, `date_posted`, `url`, `keywords`, `exclude_keywords`

#### 📋 Job Requirements

Experience level, qualifications, and constraints

**Available fields:** `experience_level`, `engagement_label`, `engagement_weeks`, `qual_min_hours_week`, `qual_min_success_score`, `qual_pref_english`, `qual_rising_talent`, `qual_portfolio_required`, `qual_type`

#### 📋 Client Information

Details about the client posting the job

**Available fields:** `client_location`, `jobs_posted`, `hire_rate`, `avg_hourly_rate`, `open_jobs`, `total_spent`, `hires`, `active_hires`, `total_hours`, `industry`, `company_size`, `buyer_city`, `buyer_feedback_count`, `buyer_score`, `buyer_contract_date`, `buyer_payment_verified`

#### 📋 AI-Powered Insights

AI-generated analysis of job requirements and urgency

**Available fields:** `ai_urgency`, `ai_duration`, `ai_deadline`, `ai_technical_skills`, `ai_inferred_technical_skills`, `ai_explicit_mention_of_agency`, `ai_clients_technical_understanding`, `ai_summary`

#### 📋 System Metadata

Internal tracking and system fields

**Available fields:** `id`, `created_at`, `questions`, `job_score`, `job_score_breakdown`

#### 🔥 Most Popular Filters

| Field | Type | Example | Description |
|-------|------|---------|-------------|
| `skills` | text | "React" | Filter by required skills |
| `price_min` | numeric | ">=50" | Minimum hourly rate |
| `buyer_score` | numeric | ">=4.0" | Client rating (1-5 stars) |
| `experience_level` | select | "Intermediate" | Required experience level |
| `ai_urgency` | select | "Urgent" | AI-detected project urgency |
| `date_posted` | date | ">=2025-01-01" | Job posting date |

> **Tip:** `job_score` (0–100) is included in every response. It is not a filter input, but you can sort/threshold items client-side: jobs ≥ 70 are typically high-value; < 30 are usually safe to skip.

### 🎛️ Filter Syntax Guide

Different field types support different filtering options:

#### **📝 Text Fields** (`skills`, `title`, `description`)

- **Contains search**: `"React"` → finds jobs mentioning React
- **Case-insensitive**: automatically handled
- **Empty check**: `"=null"` → finds jobs with empty/null values
- **Non-empty check**: `"!=null"` → finds jobs with content

#### **🔢 Numeric Fields** (`price`, `price_min`, `buyer_score`)

- **Exact match**: `"1000"` → exactly 1000
- **Operators**: `">=50"`, `"<=100"`, `">25"`, `"<75"`
- **Ranges**: `"500-2000"` → between 500 and 2000 (inclusive)

#### **✅ Boolean Fields** (`buyer_payment_verified`, `qual_rising_talent`, `qual_portfolio_required`)

- **True**: `"true"` or `"1"`
- **False**: `"false"` or `"0"`

#### **📅 Date Fields** (`date_posted`, `created_at`)

- **Exact date**: `"2025-01-15"`
- **Operators**: `">=2025-01-01"`, `"<=2025-12-31"`
- **ISO format**: `"2025-01-15T10:30:00Z"`

#### **🎯 Select Fields** (`experience_level`, `ai_urgency`)

- **Exact match**: `"Intermediate"`, `"Urgent"`
- **Case-sensitive**: use exact values from field options (e.g. `"Urgent"`, not `"urgent"` or `"high"`)

#### 📋 Complete Field Reference

##### Essential Job Information

| Field | Type | Operators | Examples | Description |
|-------|------|-----------|----------|-------------|
| `title` | text | contains, =null, !=null | `Build a React Dashboard with Real-time Analytics`, `Virtual Assistant for Email Management`, `Logo Design for Tech Startup` | The job posting title as written by the client. Contains the main description of what work needs to be done. |
| `description` | text | contains, =null, !=null | `We need an experienced React developer to build a ...`, `Looking for a Python expert who can integrate machine learning models ...` | Full job description text as written by the client. Contains detailed requirements, expectations, and project scope. |
| `skills` | text | contains, =null, !=null | `JavaScript, React, Node.js`, `Python, Machine Learning, TensorFlow` | Comma-separated list of required skills and technologies for the job as specified by the client. |
| `price_type` | select | equals | `Fixed-price`, `Hourly` | How the job is priced: Fixed Price (one-time payment) or Hourly (paid per hour worked). |
| `price` | numeric | >=, <=, >, <, =, ranges | `500`, `1200`, `50` | The budget amount for the fixed-price job. |
| `price_min` | numeric | >=, <=, >, <, =, ranges | `25`, `50`, `100` | Minimum budget or hourly rate for the job. Lower bound of the client's budget range. |
| `price_max` | numeric | >=, <=, >, <, =, ranges | `75`, `150`, `500` | Maximum budget or hourly rate for the job. Upper bound of the client's budget range. |
| `category_name` | select | equals | `Accounting & Consulting`, `Admin Support`, `Customer Service`, `Data Science & Analytics`, `Design & Creative`, +7 more | Main category of the job (e.g., Web Development, Data Science, Design). Upwork's primary job classification. |
| `subcategory_name` | select | equals | `3D Modeling & CAD`, `AI & Machine Learning`, `AI Apps & Integration`, `Accounting & Bookkeeping`, `Art & Illustration`, +45 more | Specific subcategory within the main category (e.g., Front-End Development, Machine Learning). More granular classification. |
| `date_posted` | date | >=, <=, >, <, =, equals | `2024-01-15`, `2024-01-20T14:30:00Z` | When the job was posted on Upwork. Use this to find recent opportunities or analyze posting patterns. |
| `url` | text | contains, =null, !=null | `https://www.upwork.com/jobs/~01234567890abcdef`, `https://www.upwork.com/jobs/~987654321fedcba09` | Direct link to the job posting on Upwork. Use this to view the full job details or apply. |
| `keywords` | text | contains | `python machine learning`, `react javascript typescript`, `design ui ux figma`, `marketing seo content`, `data analysis sql python` | Full-text search across job title, description, skills, categories, location, industry, and AI-generated fields. Uses PostgreSQL full-text search for fast performance on millions of jobs. |
| `exclude_keywords` | text | contains | `wordpress php`, `data entry copy paste`, `logo design graphic`, `social media marketing`, `excel spreadsheet manual` | Exclude jobs containing any of these keywords. Uses the same full-text search across job title, description, skills, categories, location, industry, and AI-generated fields. Perfect for filtering out unwanted job types or technologies. |

##### Job Requirements

| Field | Type | Operators | Examples | Description |
|-------|------|-----------|----------|-------------|
| `experience_level` | select | equals | `Entry_level`, `Expert`, `Intermediate` | Required experience level for the job: Entry Level, Intermediate, or Expert. |
| `engagement_label` | select | equals | `1 to 3 months`, `3 to 6 months`, `Less than 1 month`, `More than 6 months` | Expected duration or type of engagement (e.g., 1 to 3 months, 3 to 6 months, Less than 1 month, Less than 1 week, More than 6 months). |
| `engagement_weeks` | select | equals | `3`, `9`, `18`, `52` | Project duration in weeks. Options: 1, 3, 9, 18, 52 weeks. |
| `qual_min_hours_week` | select | equals | `0`, `10`, `30`, `40` | Minimum hours per week required for hourly jobs. Options: 10, 30, 40. |
| `qual_min_success_score` | select | equals | `0`, `80`, `90` | Minimum Upwork success score required to apply for the job. |
| `qual_pref_english` | select | equals | `ANY`, `CONVERSATIONAL`, `FLUENT`, `NATIVE` | Client's preferred English proficiency level for freelancers. |
| `qual_rising_talent` | boolean | equals | `True`, `False` | Whether the job is open to Upwork Rising Talent (newer freelancers with potential). |
| `qual_portfolio_required` | boolean | equals | `True`, `False` | Whether the client requires a portfolio or work samples to apply. |
| `qual_type` | select | equals | `AGENCY`, `ANY`, `INDEPENDENT` | Type of freelancer the client is looking for: Agency (team/company), Independent (solo freelancer), or Any (no preference). |

##### Client Information

| Field | Type | Operators | Examples | Description |
|-------|------|-----------|----------|-------------|
| `client_location` | text | contains, =null, !=null | `United States`, `United Kingdom`, `Canada` | Geographic location of the client posting the job. |
| `jobs_posted` | numeric | >=, <=, >, <, =, ranges | `1`, `10`, `>50` | Total number of jobs the client has posted on Upwork. |
| `hire_rate` | numeric | >=, <=, >, <, =, ranges | `75`, `90`, `50` | Percentage of freelancers the client has hired from total applications. Higher rates indicate clients who actively hire rather than just browse. |
| `avg_hourly_rate` | numeric | >=, <=, >, <, =, ranges | `45.50`, `75.00`, `>=100` | Average hourly rate this client typically pays freelancers. Based on their historical hiring patterns. |
| `open_jobs` | numeric | >=, <=, >, <, =, ranges | `0`, `2`, `<5` | Number of jobs the client currently has open/active. |
| `total_spent` | numeric | >=, <=, >, <, =, ranges | `100`, `500`, `>=1000000` | Total amount the client has spent on Upwork across all their projects. |
| `hires` | numeric | >=, <=, >, <, =, ranges | `1`, `10`, `>50` | Total number of freelancers hired by the client. |
| `active_hires` | numeric | >=, <=, >, <, =, ranges | `1`, `10`, `>50` | Number of freelancers currently hired by the client. |
| `total_hours` | numeric | >=, <=, >, <, =, ranges | `100`, `500`, `>=1000` | Total number of hours the client has worked on Upwork across all their projects. |
| `industry` | select | equals | \`\`, `Aerospace`, `Agriculture & Forestry`, `Art & Design`, `Automotive`, +15 more | Main industry the client operates in. Select from available choices. |
| `company_size` | select | equals | `0`, `1`, `10`, `100`, `1000`, +4 more | Size of the client's company. Predefined option for company size. Select from available choices. |
| `buyer_city` | text | contains, =null, !=null | `New York`, `London`, `Paris`, `Tokyo`, `Sydney`, `Berlin`, `Rome`, `Madrid`, `Amsterdam`, `Mumbai`, `Beijing`, `Delhi`, `Mumbai` | City where the client is located. |
| `buyer_feedback_count` | numeric | >=, <=, >, <, =, ranges | `1`, `10`, `>=2` | Number of feedbacks the client has received. |
| `buyer_score` | numeric | >=, <=, >, <, =, ranges | `>=4.7`, `5.0` | Score of the client's performance on Upwork. |
| `buyer_contract_date` | date | >=, <=, >, <, =, equals | `2024-01-15`, `2024-01-20T14:30:00Z` | Date when the client first registered their account on Upwork. Indicates how long the client has been active on the platform. |
| `buyer_payment_verified` | boolean | equals | `True`, `False` | Boolean flag indicating whether the client has verified their payment method on Upwork. |

##### AI-Powered Insights

| Field | Type | Operators | Examples | Description |
|-------|------|-----------|----------|-------------|
| `ai_urgency` | select | equals | `Immediate`, `Long-Term`, `Moderately Urgent`, `Not Urgent`, `Urgent`, `Very Urgent` | AI-detected urgency level of the job based on language and posting patterns. |
| `ai_duration` | select | equals | `Flexible`, `Flexible Deadline`, `Long-Term`, `Mid-Term`, `Part-Time`, `Short-Term` | AI-detected project duration based on job description analysis. Indicates expected length and type of engagement. |
| `ai_deadline` | select | equals | `Fixed Deadline`, `Flexible Deadline`, `Immediate Deadline`, `No Deadline` | AI-detected deadline type for the job based on urgency indicators and time-sensitive language in the job description. |
| `ai_technical_skills` | text | contains, =null, !=null | `JavaScript, React, Node.js`, `Python, Django, PostgreSQL`, `AWS, Docker, Kubernetes` | Technical skills explicitly mentioned in the job description, extracted using AI. These are skills directly stated by the client as requirements or preferences. |
| `ai_inferred_technical_skills` | text | contains, =null, !=null | `Git, REST APIs, Testing`, `Database Design, Security`, `Responsive Design, SEO` | Technical skills inferred by AI from the job description context, even when not explicitly mentioned. These are skills likely needed based on project requirements and industry patterns. |
| `ai_explicit_mention_of_agency` | select | equals | `Agencies Welcome`, `No Agencies`, `No Mention` | AI-detected explicit mention of agency preferences in the job posting. Indicates whether the client welcomes agencies, prefers individual freelancers, or has no specific preference. |
| `ai_clients_technical_understanding` | select | equals | `Expert`, `High`, `Low`, `Moderate` | AI-detected assessment of the client's technical understanding based on how they describe their project requirements. Helps identify whether the client has deep technical knowledge, moderate understanding, basic knowledge, or expert-level expertise in the domain. |
| `ai_summary` | text | contains, =null, !=null | `This job is a full-stack developer role for a startup. The ideal candidate will have experience with React, Node.js, and PostgreSQL.`, `This job is a data analyst role for a consulting firm. The ideal candidate will have experience with SQL, Python, and data visualization tools.` | AI-generated summary of the job description. Provides a concise overview of the job requirements and responsibilities. |

##### System Metadata

| Field | Type | Operators | Examples | Description |
|-------|------|-----------|----------|-------------|
| `id` | text | contains, =null, !=null | `~01234567890abcdef`, `~987654321fedcba09` | Unique identifier for the job posting on Upwork. Use this to track specific jobs or avoid duplicates. |
| `created_at` | date | >=, <=, >, <, =, equals | `2024-01-20T14:30:00Z` | Timestamp when this job record was created in our system (not the Upwork posting date). |
| `questions` | array | (read-only, not a filter input) | `['Name one long-tail keyword you would target for a UK mortgage and investment app and explain why?', 'Share a specific SEO or ASO result you have driven. Include the numbers?']`, `['Are you willing to undergo a background check, in accordance with local law/regulations?', 'How soon can be available for work?', 'What is your level of proficiency in English?', 'Briefly describe your experience with Oracle Fusion HCM']` | Upwork screening questions captured for the job, as written by the client. Empty array `[]` for ~83% of postings (jobs without screening questions). When present, contains 1-6 question strings. Feed straight into a proposal-answer generator to pre-write answers, or surface as an application checklist. |
| `job_score` | numeric | (read-only, not a filter input) | `85`, `62`, `47`, `12`, `0` | Rule-based 0–100 score that ranks the job by attractiveness. Weighted across price (20), client reputation (42), client spending (40), premium status (5), and location (10). Computed per request from the row's own fields — no DB lookup needed. Use to sort or threshold client-side. |
| `job_score_breakdown` | object | (read-only, not a filter input) | - | Always-included explanation of the `job_score`: per-category raw/normalized/weight, ranked `top_contributors`, and `penalties`. Use to surface why a job ranked high in UI, or to debug threshold filters. See Output Format below. |

### 📤 Output Format

Each dataset item is a flat job record. Real example from a fresh posting (`job_score: 94`):

```json
{
  "id": "022053503680858460814",
  "title": "Senior React Native / Cloud Backend Engineer for iOS Video App",
  "url": "https://www.upwork.com/jobs/~022053503680858460814",
  "description": "We are looking for a senior engineer to join a small, fast-moving team building a live iOS app in React Native with heavy cloud backend connectivity and cloud-based video processing. This is not a web app project. We need someone experienced with real iOS apps on real devices, App Store/TestFlight workflows, mobile-to-cloud video uploads, client/server sync, and production-safe feature deployment...",
  "date_posted": "2026-05-10T15:53:24Z",
  "created_at": "2026-05-10T15:59:01Z",
  "price_type": "Hourly",
  "price_min": 70,
  "price_max": 100,
  "skills": "React Native, iOS, Mobile App Development, Google Cloud Platform, Python, AI Development",
  "category_name": "Web, Mobile & Software Dev",
  "subcategory_name": "Web Development",
  "experience_level": "Expert",
  "engagement_label": "3 to 6 months",
  "qual_pref_english": "ANY",
  "client_location": "United States",
  "buyer_city": "Miami",
  "buyer_score": 4.93,
  "buyer_feedback_count": 44,
  "buyer_payment_verified": true,
  "jobs_posted": 57,
  "hires": 55,
  "hire_rate": 100,
  "total_spent": 54226.41,
  "avg_hourly_rate": 55.35,
  "total_hours": 473,
  "open_jobs": 1,
  "ai_clients_technical_understanding": "High",
  "ai_technical_skills": "React Native, iOS app development, App Store/TestFlight workflows, mobile video/photo upload, camera roll/photo library permissions, cloud backend (GCP preferred, AWS acceptable), async jobs/queues/workers, client/server state sync, production logging/debugging, AI-assisted development",
  "ai_inferred_technical_skills": "Slack, Markdown documentation, real device testing",
  "ai_explicit_mention_of_agency": "No Mention",
  "ai_summary": "You'll build and maintain a production iOS app in React Native focused on cloud-connected video/photo uploads, delivering fully tested features on real devices with App Store/TestFlight workflows. The client expects a senior engineer with deep mobile iOS experience (real-device testing with a personal iPhone), cloud backend knowledge (preferably GCP), daily collaboration, and an AI-driven development workflow, working 4 hours daily in the 9–5 ET window. Be aware this role demands intense communication, real-device testing with large media libraries, and rapid iteration cycles, so if you prefer solo deep work or lack the hardware/setup, it's not a fit.",
  "job_score": 94,
  "job_score_breakdown": {
    "categories": {
      "price":             { "raw_score": 18, "normalized_score": 18, "weight": 20 },
      "client_reputation": { "raw_score": 42, "normalized_score": 42, "weight": 42 },
      "client_spending":   { "raw_score": 24, "normalized_score": 24, "weight": 40 },
      "location":          { "raw_score": 10, "normalized_score": 10, "weight": 10 }
    },
    "top_contributors": [
      { "attribute": "price_min,price_max",    "value": "$70-$100/hr",       "score": 18, "category": "price" },
      { "attribute": "hire_rate",              "value": "100% (57 jobs)",    "score": 15, "category": "client_reputation" },
      { "attribute": "buyer_score",            "value": "4.93 (44 reviews)", "score": 15, "category": "client_reputation" },
      { "attribute": "avg_hourly_rate",        "value": "$55.35/hr",         "score": 15, "category": "client_spending" },
      { "attribute": "buyer_payment_verified", "value": true,                "score": 12, "category": "client_reputation" },
      { "attribute": "client_location",        "value": "United States",     "score": 10, "category": "location" },
      { "attribute": "total_spent",            "value": "$54,226.41",        "score": 6,  "category": "client_spending" },
      { "attribute": "total_hours",            "value": "473 hours",         "score": 3,  "category": "client_spending" }
    ],
    "penalties": []
  },
  "questions": [
    "Describe a React Native iOS app you worked on that was live in TestFlight or the App Store. What parts of the client/server flow did you personally build or maintain, especially around photo/video uploads, auth, sync, or backend job status?",
    "Do you personally have an iPhone with a large real photo/video library that you can use for testing? What model and how many photos/videos in your camera roll?",
    "How are you currently using AI as a developer?",
    "How do you prevent regression?"
  ]
}
```

`job_score` is the rule-based 0–100 rank. Category weights: price (20) + client\_reputation (42) + client\_spending (40) + premium (5) + location (10). Each category is capped at its weight, then summed and bounded to 0–100.

`job_score_breakdown` is always included and explains which fields contributed how many points. Use it to build UI that highlights why a job ranked high, or to debug your score-threshold filters. `top_contributors` is sorted descending; `penalties` lists negative contributions (e.g., unverified payment, low hire rate on a client with many jobs posted).

`questions` is the array of Upwork screening questions captured for the job — empty `[]` for ~83% of postings, 1–6 strings when the client included them. Feed it into your auto-proposal generator.

Empty/missing AI fields are returned as `null` (not every job goes through full AI enrichment).

For the full list of fields with types and operator support, see [Complete Field Reference](#-complete-field-reference) above.

### 💰 Pricing

**$2.00 per 1,000 results.** No monthly subscription. No platform usage fees. Runs that return zero results cost nothing.

### 🎯 Smart Usage Patterns

#### 💼 Freelancer Job Alerts

```javascript
// High-value React jobs from quality clients
{
  "notifications_only": "true",
  "skills": "React", 
  "price_min": ">=60",
  "buyer_score": ">=4.0",
  "buyer_payment_verified": "true",
  "ai_urgency": "Urgent"
}

// Entry-level opportunities for new freelancers
{
  "experience_level": "Entry Level",
  "price_min": ">=15",
  "buyer_payment_verified": "true",
  "exclude_keywords": "data entry copy paste"
}

// Remote-friendly design jobs
{
  "keywords": "design ui ux figma",
  "price_type": "Fixed-price",
  "price": "500-5000",
  "ai_complexity_score": "Moderate"
}
```

#### 🏢 Agency Lead Generation

```javascript
// Jobs explicitly seeking agencies or teams
{
  "ai_explicit_mention_of_agency": "Agencies Welcome",
  "ai_complexity_score": "High",
  "price_min": ">=100", 
  "total_spent": ">=10000",
  "ai_budget_estimation_indicators": "High Budget"
}

// Enterprise projects with team requirements
{
  "ai_explicit_mention_of_agency": "Agencies Preferred",
  "engagement_label": "More than 6 months",
  "ai_portfolio_requirements": "Required",
  "company_size": ">=1000",
  "ai_clients_technical_understanding": "High"
}

// High-value development projects for agencies
{
  "ai_explicit_mention_of_agency": "Agencies Only",
  "keywords": "react node.js typescript",
  "price": ">=25000",
  "ai_complexity_score": "High",
  "ai_duration": "Long-Term",
  "buyer_score": ">=4.5"
}
```

#### 🔍 Market Research & Analysis

```javascript
// Track AI/ML job trends and pricing
{
  "keywords": "machine learning artificial intelligence",
  "date_posted": ">=2025-01-01",
  "limit": 100
}

// Monitor mobile app development market
{
  "skills": "iOS Android React Native",
  "price_type": "Fixed-price",
  "date_posted": ">=2024-12-01",
  "experience_level": "Intermediate"
}

// Analyze client spending patterns
{
  "total_spent": ">=100000",
  "hire_rate": ">=90",
  "buyer_payment_verified": "true",
  "limit": 50
}
```

#### 🎯 Specialized Niches

```javascript
// Blockchain & crypto projects with quality clients
{
  "keywords": "blockchain cryptocurrency solidity ethereum",
  "exclude_keywords": "scam pyramid scheme",
  "ai_complexity_score": "High",
  "ai_clients_technical_understanding": "High",
  "ai_budget_estimation_indicators": "High Budget",
  "price_min": ">=50"
}

// Technical writing with portfolio requirements
{
  "keywords": "technical writing documentation",
  "ai_portfolio_requirements": "Required",
  "ai_clients_technical_understanding": "Moderate",
  "experience_level": "Intermediate",
  "price_min": ">=30",
  "qual_pref_english": "FLUENT"
}

// Urgent fixes for immediate delivery
{
  "ai_urgency": "Immediate",
  "ai_deadline": "Fixed Deadline",
  "keywords": "bug fix maintenance urgent",
  "ai_duration": "Short-Term",
  "price_min": ">=40",
  "date_posted": ">=2025-01-01"
}
```

#### 🚀 Notification & Automation

```javascript
// Daily new job alerts for Python developers
{
  "notifications_only": "true",
  "skills": "Python",
  "price_min": ">=45",
  "buyer_score": ">=3.5",
  "limit": 20
}

// Weekend side project hunting
{
  "engagement_label": "Less than 1 month",
  "price_type": "Fixed-price",
  "price": "1000-10000",
  "ai_complexity_score": "Low"
}
```

### 📈 Use Cases

- **💼 Freelancer Job Alerts**: Get notified of relevant opportunities
- **🏢 Agency Lead Generation**: Find high-value projects for your team
- **📊 Market Research**: Track pricing and demand trends
- **🤖 Automation**: Build job boards, alerts, and matching systems
- **📱 Mobile Apps**: Power job discovery applications
- **🔍 Competitive Analysis**: Monitor competitor job requirements

### 🚨 Common Issues & Solutions

#### Issue: "No jobs returned"

- **Solution**: Check your filters aren't too restrictive
- **Tip**: Start with broader filters and narrow down

#### Issue: "Same jobs appearing"

- **Solution**: Use `notifications_only: true` for new jobs only
- **Tip**: Cursor tracking is automatic per user session

#### Issue: "Rate limit exceeded"

- **Solution**: Add delays between requests
- **Tip**: Use higher `limit` values to reduce request frequency

### 🔗 Integration Examples

#### Webhook Integration

```javascript
// Set up webhook to receive new job notifications
const webhook = await apifyClient.webhooks().create({
  eventTypes: ['ACTOR.RUN.SUCCEEDED'],
  requestUrl: 'https://your-app.com/webhook/new-jobs'
});
```

#### Slack Bot Integration

```javascript
// Post new jobs to Slack channel
const jobs = await actor.call({
  notifications_only: 'true',
  skills: 'React',
  price_min: '>=50'
});

jobs.items.forEach(job => {
  slack.postMessage({
    channel: '#job-alerts',
    text: `🚀 New ${job.skills} job: ${job.title} - $${job.price_min}+/hr`
  });
});
```

### 📊 Need historical data?

For research or model training, the live scraper isn't the right tool. We also publish a **historical Upwork jobs dataset** with 1.9M+ records from 2024–2025 in CSV, JSON, Parquet, SQLite, and DuckDB formats — with the same AI-enriched fields. See the [Upwork Jobs Dataset on Gumroad](https://hyperbach.gumroad.com/l/upwork) for details.

### 🆘 Support

Found an issue or have a feature request? Open an issue on the [Issues tab](https://apify.com/hyperbach/upwork-scraper-ai/issues). We respond within ~48 hours.

Contact: apify@hyperbach.com

# Actor input Schema

## `clientId` (type: `string`):

Unique identifier for the client. The service automatically tracks what jobs this client has already seen.

## `limit` (type: `integer`):

Maximum number of items to return (1-100).

## `notifications_only` (type: `boolean`):

Only return new jobs since last call (requires notification feed mode).

## `fields` (type: `array`):

Optional list of field names to keep in the dataset output. If empty, all fields are returned. Saves storage cost on long runs. Example: id, title, url, job\_score, questions. Always-implicit field `id` is kept whether listed or not.

## `title` (type: `string`):

The job posting title as written by the client. Contains the main description of what work needs to be done.

## `description` (type: `string`):

Full job description text as written by the client. Contains detailed requirements, expectations, and project scope.

## `category_name` (type: `string`):

Main category of the job (e.g., Web Development, Data Science, Design). Upwork's primary job classification.

## `subcategory_name` (type: `string`):

Specific subcategory within the main category (e.g., Front-End Development, Machine Learning). More granular classification.

## `date_posted` (type: `string`):

When the job was posted on Upwork. Use this to find recent opportunities or analyze posting patterns.

## `price_type` (type: `string`):

How the job is priced: Fixed Price (one-time payment) or Hourly (paid per hour worked).

## `price` (type: `string`):

The budget amount for the fixed-price job.

## `price_min` (type: `string`):

Minimum budget or hourly rate for the job. Lower bound of the client's budget range.

## `price_max` (type: `string`):

Maximum budget or hourly rate for the job. Upper bound of the client's budget range.

## `skills` (type: `string`):

Comma-separated list of required skills and technologies for the job as specified by the client.

## `experience_level` (type: `string`):

Required experience level for the job: Entry Level, Intermediate, or Expert.

## `client_location` (type: `string`):

Geographic location of the client posting the job.

## `jobs_posted` (type: `string`):

Total number of jobs the client has posted on Upwork.

## `hire_rate` (type: `string`):

Percentage of freelancers the client has hired from total applications. Higher rates indicate clients who actively hire rather than just browse.

## `open_jobs` (type: `string`):

Number of jobs the client currently has open/active.

## `total_spent` (type: `string`):

Total amount the client has spent on Upwork across all their projects.

## `hires` (type: `string`):

Total number of freelancers hired by the client.

## `active_hires` (type: `string`):

Number of freelancers currently hired by the client.

## `avg_hourly_rate` (type: `string`):

Average hourly rate this client typically pays freelancers. Based on their historical hiring patterns.

## `total_hours` (type: `string`):

Total number of hours the client has worked on Upwork across all their projects.

## `industry` (type: `string`):

Main industry the client operates in. Select from available choices.

## `company_size` (type: `string`):

Size of the client's company. Predefined option for company size. Select from available choices.

## `job_is_premium` (type: `boolean`):

Boolean flag indicating whether job is premium applies to this job.

## `engagement_label` (type: `string`):

Expected duration or type of engagement (e.g., 1 to 3 months, 3 to 6 months, Less than 1 month, Less than 1 week, More than 6 months).

## `engagement_weeks` (type: `string`):

Project duration in weeks. Options: 1, 3, 9, 18, 52 weeks.

## `hourly_budget_type` (type: `string`):

Type of hourly budget. Options: AS\_NEEDED, DEFAULT, FULL\_TIME, MANUAL, NOT\_PROVIDED, NOT\_SURE, PART\_TIME.

## `client_invites_sent` (type: `string`):

Number of client invites sent to freelancers.

## `client_positions_to_hire` (type: `string`):

Number of client positions to hire.

## `qual_min_hours_week` (type: `string`):

Minimum hours per week required for hourly jobs. Options: 10, 30, 40.

## `qual_min_success_score` (type: `string`):

Minimum Upwork success score required to apply for the job.

## `qual_pref_english` (type: `string`):

Client's preferred English proficiency level for freelancers.

## `qual_rising_talent` (type: `boolean`):

Whether the job is open to Upwork Rising Talent (newer freelancers with potential).

## `qual_portfolio_required` (type: `boolean`):

Whether the client requires a portfolio or work samples to apply.

## `qual_type` (type: `string`):

Type of freelancer the client is looking for: Agency (team/company), Independent (solo freelancer), or Any (no preference).

## `buyer_offset_utc` (type: `string`):

UTC offset of the buyer's timezone in milliseconds. Indicates the time difference between the buyer's local time and UTC.

## `buyer_city` (type: `string`):

City where the client is located.

## `buyer_feedback_count` (type: `string`):

Number of feedbacks the client has received.

## `buyer_score` (type: `string`):

Score of the client's performance on Upwork.

## `buyer_contract_date` (type: `string`):

Date when the client first registered their account on Upwork. Indicates how long the client has been active on the platform.

## `buyer_payment_verified` (type: `boolean`):

Boolean flag indicating whether the client has verified their payment method on Upwork.

## `created_at` (type: `string`):

Timestamp when this job record was created in our system (not the Upwork posting date).

## `ai_urgency` (type: `string`):

AI-detected urgency level of the job based on language and posting patterns.

## `ai_duration` (type: `string`):

AI-detected project duration based on job description analysis. Indicates expected length and type of engagement.

## `ai_deadline` (type: `string`):

AI-detected deadline type for the job based on urgency indicators and time-sensitive language in the job description.

## `ai_technical_skills` (type: `string`):

Technical skills explicitly mentioned in the job description, extracted using AI. These are skills directly stated by the client as requirements or preferences.

## `ai_inferred_technical_skills` (type: `string`):

Technical skills inferred by AI from the job description context, even when not explicitly mentioned. These are skills likely needed based on project requirements and industry patterns.

## `ai_specific_requirements_before_applying` (type: `string`):

AI-extracted specific requirements that clients mention applicants must fulfill before applying, such as portfolio submissions, work samples, or specific application instructions.

## `ai_explicit_mention_of_agency` (type: `string`):

AI-detected explicit mention of agency preferences in the job posting. Indicates whether the client welcomes agencies, prefers individual freelancers, or has no specific preference.

## `ai_clients_technical_understanding` (type: `string`):

AI-detected assessment of the client's technical understanding based on how they describe their project requirements. Helps identify whether the client has deep technical knowledge, moderate understanding, basic knowledge, or expert-level expertise in the domain.

## `ai_named_entities` (type: `string`):

AI-extracted named entities from the job description including company names, technologies, frameworks, tools, locations, and other important entities mentioned by the client. This field helps identify specific brands, platforms, or technologies the client is working with.

## `ai_anti_bot_phrase` (type: `string`):

AI-detected anti-bot phrases and instructions used by clients in job descriptions to filter out automated applications and ensure human applicants read the full posting. These phrases typically ask applicants to include specific words, numbers, emojis, or perform certain actions in their proposals to prove they've read the requirements carefully.

## `ai_summary` (type: `string`):

AI-generated summary of the job description. Provides a concise overview of the job requirements and responsibilities.

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

Full-text search across job title, description, skills, categories, location, industry, and AI-generated fields. Uses PostgreSQL full-text search for fast performance on millions of jobs.

## `exclude_keywords` (type: `string`):

Exclude jobs containing any of these keywords. Uses the same full-text search across job title, description, skills, categories, location, industry, and AI-generated fields. Perfect for filtering out unwanted job types or technologies.

## Actor input object example

```json
{
  "clientId": "default",
  "limit": 50,
  "notifications_only": false
}
```

# Actor output Schema

## `newJobs` (type: `string`):

Dataset of new AI-enriched Upwork jobs returned by this run. Cursor-tracked per clientId — only jobs the caller has not seen since their last run.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("hyperbach/upwork-scraper-ai").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 = {}

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

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

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

```

## CLI example

```bash
echo '{}' |
apify call hyperbach/upwork-scraper-ai --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=hyperbach/upwork-scraper-ai",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Upwork Job Scraper – AI Insights, Real-Time Feed & 59+ Filters",
        "description": "Scrape Upwork jobs with AI-scored urgency, complexity & quality at $2 per 1,000 results. Real-time feed with 59+ filters (skills, budget, client rating, hire intent), automatic deduplication, and notifications-only mode for NEW jobs since your last run. For freelancers, agencies, and job boards.",
        "version": "1.1",
        "x-build-id": "Se7rCvQVD7U3iDVMq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/hyperbach~upwork-scraper-ai/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-hyperbach-upwork-scraper-ai",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/hyperbach~upwork-scraper-ai/runs": {
            "post": {
                "operationId": "runs-sync-hyperbach-upwork-scraper-ai",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/hyperbach~upwork-scraper-ai/run-sync": {
            "post": {
                "operationId": "run-sync-hyperbach-upwork-scraper-ai",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "clientId": {
                        "title": "Client ID",
                        "minLength": 1,
                        "maxLength": 255,
                        "type": "string",
                        "description": "Unique identifier for the client. The service automatically tracks what jobs this client has already seen.",
                        "default": "default"
                    },
                    "limit": {
                        "title": "Limit",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of items to return (1-100).",
                        "default": 50
                    },
                    "notifications_only": {
                        "title": "Notifications Only",
                        "type": "boolean",
                        "description": "Only return new jobs since last call (requires notification feed mode).",
                        "default": false
                    },
                    "fields": {
                        "title": "Fields (output projection)",
                        "type": "array",
                        "description": "Optional list of field names to keep in the dataset output. If empty, all fields are returned. Saves storage cost on long runs. Example: id, title, url, job_score, questions. Always-implicit field `id` is kept whether listed or not.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "title": {
                        "title": "Job Title",
                        "type": "string",
                        "description": "The job posting title as written by the client. Contains the main description of what work needs to be done."
                    },
                    "description": {
                        "title": "Description",
                        "type": "string",
                        "description": "Full job description text as written by the client. Contains detailed requirements, expectations, and project scope."
                    },
                    "category_name": {
                        "title": "Category Name",
                        "enum": [
                            "Accounting & Consulting",
                            "Admin Support",
                            "Customer Service",
                            "Data Science & Analytics",
                            "Design & Creative",
                            "Engineering & Architecture",
                            "IT & Networking",
                            "Legal",
                            "Sales & Marketing",
                            "Translation",
                            "Web, Mobile & Software Dev",
                            "Writing"
                        ],
                        "type": "string",
                        "description": "Main category of the job (e.g., Web Development, Data Science, Design). Upwork's primary job classification."
                    },
                    "subcategory_name": {
                        "title": "Subcategory Name",
                        "enum": [
                            "3D Modeling & CAD",
                            "AI & Machine Learning",
                            "AI Apps & Integration",
                            "Accounting & Bookkeeping",
                            "Art & Illustration",
                            "Audio & Music Production",
                            "Blockchain, NFT & Cryptocurrency",
                            "Branding & Logo Design",
                            "Building & Landscape Architecture",
                            "Chemical Engineering",
                            "Civil & Structural Engineering",
                            "Community Management & Tagging",
                            "Content Writing",
                            "Contract Manufacturing",
                            "Corporate & Contract Law",
                            "Customer Service & Tech Support",
                            "Data Analysis & Testing",
                            "Data Entry & Transcription Services",
                            "Data Extraction/ETL",
                            "Data Mining & Management",
                            "Database Management & Administration",
                            "Desktop Application Development",
                            "DevOps & Solution Architecture",
                            "Digital Marketing",
                            "ERP/CRM Software",
                            "Ecommerce Development",
                            "Editing & Proofreading Services",
                            "Electrical & Electronic Engineering",
                            "Energy & Mechanical Engineering",
                            "Finance & Tax Law",
                            "Financial Planning",
                            "Game Design & Development",
                            "Graphic, Editorial & Presentation Design",
                            "Information Security & Compliance",
                            "Interior & Trade Show Design",
                            "International & Immigration Law",
                            "Language Tutoring & Interpretation",
                            "Lead Generation & Telemarketing",
                            "Legal, Medical & Technical Translation",
                            "Management Consulting & Analysis",
                            "Market Research & Product Reviews",
                            "Marketing, PR & Brand Strategy",
                            "Mobile Development",
                            "NFT, AR/VR & Game Art",
                            "Network & System Administration",
                            "Other - Accounting & Consulting",
                            "Other - Software Development",
                            "Performing Arts",
                            "Personal & Professional Coaching",
                            "Photography"
                        ],
                        "type": "string",
                        "description": "Specific subcategory within the main category (e.g., Front-End Development, Machine Learning). More granular classification."
                    },
                    "date_posted": {
                        "title": "Date Posted",
                        "type": "string",
                        "description": "When the job was posted on Upwork. Use this to find recent opportunities or analyze posting patterns."
                    },
                    "price_type": {
                        "title": "Price Type",
                        "enum": [
                            "Fixed-price",
                            "Hourly"
                        ],
                        "type": "string",
                        "description": "How the job is priced: Fixed Price (one-time payment) or Hourly (paid per hour worked)."
                    },
                    "price": {
                        "title": "Budget/Price - Fixed-price",
                        "type": "string",
                        "description": "The budget amount for the fixed-price job."
                    },
                    "price_min": {
                        "title": "Hourly Rate - Min",
                        "type": "string",
                        "description": "Minimum budget or hourly rate for the job. Lower bound of the client's budget range."
                    },
                    "price_max": {
                        "title": "Hourly Rate - Max",
                        "type": "string",
                        "description": "Maximum budget or hourly rate for the job. Upper bound of the client's budget range."
                    },
                    "skills": {
                        "title": "Skills",
                        "type": "string",
                        "description": "Comma-separated list of required skills and technologies for the job as specified by the client."
                    },
                    "experience_level": {
                        "title": "Experience Level",
                        "enum": [
                            "Entry_level",
                            "Expert",
                            "Intermediate"
                        ],
                        "type": "string",
                        "description": "Required experience level for the job: Entry Level, Intermediate, or Expert."
                    },
                    "client_location": {
                        "title": "Client Location",
                        "type": "string",
                        "description": "Geographic location of the client posting the job."
                    },
                    "jobs_posted": {
                        "title": "Jobs Posted",
                        "type": "string",
                        "description": "Total number of jobs the client has posted on Upwork."
                    },
                    "hire_rate": {
                        "title": "Client Hire Rate",
                        "type": "string",
                        "description": "Percentage of freelancers the client has hired from total applications. Higher rates indicate clients who actively hire rather than just browse."
                    },
                    "open_jobs": {
                        "title": "Open Jobs",
                        "type": "string",
                        "description": "Number of jobs the client currently has open/active."
                    },
                    "total_spent": {
                        "title": "Total Spent",
                        "type": "string",
                        "description": "Total amount the client has spent on Upwork across all their projects."
                    },
                    "hires": {
                        "title": "Hires",
                        "type": "string",
                        "description": "Total number of freelancers hired by the client."
                    },
                    "active_hires": {
                        "title": "Active Hires",
                        "type": "string",
                        "description": "Number of freelancers currently hired by the client."
                    },
                    "avg_hourly_rate": {
                        "title": "Client Avg Hourly Rate",
                        "type": "string",
                        "description": "Average hourly rate this client typically pays freelancers. Based on their historical hiring patterns."
                    },
                    "total_hours": {
                        "title": "Total Hours",
                        "type": "string",
                        "description": "Total number of hours the client has worked on Upwork across all their projects."
                    },
                    "industry": {
                        "title": "Industry",
                        "enum": [
                            "",
                            "Aerospace",
                            "Agriculture & Forestry",
                            "Art & Design",
                            "Automotive",
                            "Aviation",
                            "Education",
                            "Energy & Utilities",
                            "Engineering & Architecture",
                            "Fashion & Beauty",
                            "Finance & Accounting",
                            "Food & Beverage",
                            "Government & Public Sector",
                            "HR & Business Services",
                            "Health & Fitness",
                            "Legal",
                            "Manufacturing & Construction",
                            "Media & Entertainment",
                            "Military & Defense",
                            "Mining"
                        ],
                        "type": "string",
                        "description": "Main industry the client operates in. Select from available choices."
                    },
                    "company_size": {
                        "title": "Company Size",
                        "enum": [
                            "0",
                            "1",
                            "10",
                            "100",
                            "1000",
                            "10000",
                            "2",
                            "500",
                            "None"
                        ],
                        "type": "string",
                        "description": "Size of the client's company. Predefined option for company size. Select from available choices."
                    },
                    "job_is_premium": {
                        "title": "Job Is Premium",
                        "type": "boolean",
                        "description": "Boolean flag indicating whether job is premium applies to this job."
                    },
                    "engagement_label": {
                        "title": "Engagement Label",
                        "enum": [
                            "1 to 3 months",
                            "3 to 6 months",
                            "Less than 1 month",
                            "More than 6 months"
                        ],
                        "type": "string",
                        "description": "Expected duration or type of engagement (e.g., 1 to 3 months, 3 to 6 months, Less than 1 month, Less than 1 week, More than 6 months)."
                    },
                    "engagement_weeks": {
                        "title": "Engagement Weeks",
                        "enum": [
                            "3",
                            "9",
                            "18",
                            "52"
                        ],
                        "type": "string",
                        "description": "Project duration in weeks. Options: 1, 3, 9, 18, 52 weeks."
                    },
                    "hourly_budget_type": {
                        "title": "Hourly Budget Type",
                        "enum": [
                            "DEFAULT",
                            "MANUAL",
                            "NOT_PROVIDED"
                        ],
                        "type": "string",
                        "description": "Type of hourly budget. Options: AS_NEEDED, DEFAULT, FULL_TIME, MANUAL, NOT_PROVIDED, NOT_SURE, PART_TIME."
                    },
                    "client_invites_sent": {
                        "title": "Client Invites Sent",
                        "type": "string",
                        "description": "Number of client invites sent to freelancers."
                    },
                    "client_positions_to_hire": {
                        "title": "Client Positions To Hire",
                        "type": "string",
                        "description": "Number of client positions to hire."
                    },
                    "qual_min_hours_week": {
                        "title": "Qual Min Hours Week",
                        "enum": [
                            "0",
                            "10",
                            "30",
                            "40"
                        ],
                        "type": "string",
                        "description": "Minimum hours per week required for hourly jobs. Options: 10, 30, 40."
                    },
                    "qual_min_success_score": {
                        "title": "Qual Min Success Score",
                        "enum": [
                            "0",
                            "80",
                            "90"
                        ],
                        "type": "string",
                        "description": "Minimum Upwork success score required to apply for the job."
                    },
                    "qual_pref_english": {
                        "title": "Qual Pref English",
                        "enum": [
                            "ANY",
                            "CONVERSATIONAL",
                            "FLUENT",
                            "NATIVE"
                        ],
                        "type": "string",
                        "description": "Client's preferred English proficiency level for freelancers."
                    },
                    "qual_rising_talent": {
                        "title": "Qual Rising Talent",
                        "type": "boolean",
                        "description": "Whether the job is open to Upwork Rising Talent (newer freelancers with potential)."
                    },
                    "qual_portfolio_required": {
                        "title": "Qual Portfolio Required",
                        "type": "boolean",
                        "description": "Whether the client requires a portfolio or work samples to apply."
                    },
                    "qual_type": {
                        "title": "Qual Type",
                        "enum": [
                            "AGENCY",
                            "ANY",
                            "INDEPENDENT"
                        ],
                        "type": "string",
                        "description": "Type of freelancer the client is looking for: Agency (team/company), Independent (solo freelancer), or Any (no preference)."
                    },
                    "buyer_offset_utc": {
                        "title": "Buyer Offset UTC",
                        "type": "string",
                        "description": "UTC offset of the buyer's timezone in milliseconds. Indicates the time difference between the buyer's local time and UTC."
                    },
                    "buyer_city": {
                        "title": "Buyer City",
                        "type": "string",
                        "description": "City where the client is located."
                    },
                    "buyer_feedback_count": {
                        "title": "Buyer Feedback Count",
                        "type": "string",
                        "description": "Number of feedbacks the client has received."
                    },
                    "buyer_score": {
                        "title": "Buyer Score",
                        "type": "string",
                        "description": "Score of the client's performance on Upwork."
                    },
                    "buyer_contract_date": {
                        "title": "Buyer Contract Date",
                        "type": "string",
                        "description": "Date when the client first registered their account on Upwork. Indicates how long the client has been active on the platform."
                    },
                    "buyer_payment_verified": {
                        "title": "Buyer Payment Verified",
                        "type": "boolean",
                        "description": "Boolean flag indicating whether the client has verified their payment method on Upwork."
                    },
                    "created_at": {
                        "title": "Created At",
                        "type": "string",
                        "description": "Timestamp when this job record was created in our system (not the Upwork posting date)."
                    },
                    "ai_urgency": {
                        "title": "Urgency",
                        "enum": [
                            "Immediate",
                            "Long-Term",
                            "Moderately Urgent",
                            "Not Urgent",
                            "Urgent",
                            "Very Urgent"
                        ],
                        "type": "string",
                        "description": "AI-detected urgency level of the job based on language and posting patterns."
                    },
                    "ai_duration": {
                        "title": "Duration",
                        "enum": [
                            "Flexible",
                            "Flexible Deadline",
                            "Long-Term",
                            "Mid-Term",
                            "Part-Time",
                            "Short-Term"
                        ],
                        "type": "string",
                        "description": "AI-detected project duration based on job description analysis. Indicates expected length and type of engagement."
                    },
                    "ai_deadline": {
                        "title": "Deadline",
                        "enum": [
                            "Fixed Deadline",
                            "Flexible Deadline",
                            "Immediate Deadline",
                            "No Deadline"
                        ],
                        "type": "string",
                        "description": "AI-detected deadline type for the job based on urgency indicators and time-sensitive language in the job description."
                    },
                    "ai_technical_skills": {
                        "title": "Technical Skills (AI Extracted)",
                        "type": "string",
                        "description": "Technical skills explicitly mentioned in the job description, extracted using AI. These are skills directly stated by the client as requirements or preferences."
                    },
                    "ai_inferred_technical_skills": {
                        "title": "Technical Skills (AI Inferred)",
                        "type": "string",
                        "description": "Technical skills inferred by AI from the job description context, even when not explicitly mentioned. These are skills likely needed based on project requirements and industry patterns."
                    },
                    "ai_specific_requirements_before_applying": {
                        "title": "Specific Requirements Before Applying",
                        "type": "string",
                        "description": "AI-extracted specific requirements that clients mention applicants must fulfill before applying, such as portfolio submissions, work samples, or specific application instructions."
                    },
                    "ai_explicit_mention_of_agency": {
                        "title": "Explicit Mention Of Agency",
                        "enum": [
                            "Agencies Welcome",
                            "No Agencies",
                            "No Mention"
                        ],
                        "type": "string",
                        "description": "AI-detected explicit mention of agency preferences in the job posting. Indicates whether the client welcomes agencies, prefers individual freelancers, or has no specific preference."
                    },
                    "ai_clients_technical_understanding": {
                        "title": "Client's Technical Understanding",
                        "enum": [
                            "Expert",
                            "High",
                            "Low",
                            "Moderate"
                        ],
                        "type": "string",
                        "description": "AI-detected assessment of the client's technical understanding based on how they describe their project requirements. Helps identify whether the client has deep technical knowledge, moderate understanding, basic knowledge, or expert-level expertise in the domain."
                    },
                    "ai_named_entities": {
                        "title": "Named Entities",
                        "type": "string",
                        "description": "AI-extracted named entities from the job description including company names, technologies, frameworks, tools, locations, and other important entities mentioned by the client. This field helps identify specific brands, platforms, or technologies the client is working with."
                    },
                    "ai_anti_bot_phrase": {
                        "title": "Anti Bot Phrase",
                        "type": "string",
                        "description": "AI-detected anti-bot phrases and instructions used by clients in job descriptions to filter out automated applications and ensure human applicants read the full posting. These phrases typically ask applicants to include specific words, numbers, emojis, or perform certain actions in their proposals to prove they've read the requirements carefully."
                    },
                    "ai_summary": {
                        "title": "Summary",
                        "type": "string",
                        "description": "AI-generated summary of the job description. Provides a concise overview of the job requirements and responsibilities."
                    },
                    "keywords": {
                        "title": "Keywords Search",
                        "type": "string",
                        "description": "Full-text search across job title, description, skills, categories, location, industry, and AI-generated fields. Uses PostgreSQL full-text search for fast performance on millions of jobs."
                    },
                    "exclude_keywords": {
                        "title": "Exclude Keywords",
                        "type": "string",
                        "description": "Exclude jobs containing any of these keywords. Uses the same full-text search across job title, description, skills, categories, location, industry, and AI-generated fields. Perfect for filtering out unwanted job types or technologies."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
