# Upwork Freelancers Scraper (`parseforge/upwork-freelancers-scraper`) Actor

Search and scrape Upwork freelancer profiles by keyword. Get hourly rates, job success scores, earnings, skills, location, Top Rated status, and availability badges. Filter by Top Rated, Top Rated Plus, or US-only freelancers.

- **URL**: https://apify.com/parseforge/upwork-freelancers-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Jobs, Lead generation, Other
- **Stats:** 106 total users, 50 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## 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

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 💼 Upwork Freelancer Scraper

> 🚀 **Pull Upwork freelancer profiles in minutes.** Hourly rates, job success scores, earnings, skills, location, Top Rated status, availability. No API key, no login.

> 🕒 **Last updated:** 2026-05-08 · **📊 13+ fields** per profile · **🌍 Region, sub-region, country filters** · **🚫 No auth** required

Pull live freelancer profiles from Upwork by keyword search. The actor builds the matching Upwork search URL with your filters, walks the result pages, and returns one structured record per freelancer ready for talent sourcing, agency benchmarking, market-rate research, or competitive intelligence.

Every run fetches data live so you get the current state of Upwork at run time, not a stale dump. Records include hourly rate, Job Success Score, Top Rated badges, total earnings, total jobs completed, skills array, country and city where available, profile photo URL, and the canonical Upwork profile link.

| 👥 Built for | 🎯 Primary use cases |
|---|---|
| Talent sourcers | Build matched freelancer pipelines by skill |
| Agency owners | Benchmark competitor talent and pricing |
| Recruitment teams | Source candidates for outbound outreach |
| Market researchers | Track hourly rates by skill and region |
| Procurement | Validate vendor pricing across geographies |
| Researchers | Study gig-economy labor market trends |

---

### 📋 What the Upwork Freelancer Scraper does

- 🔍 **Keyword search.** Pass any Upwork search query (e.g. `python developer`, react, `web scraping`).
- 🏆 **Quality filters.** Top Rated only, Top Rated Plus only, or all freelancers.
- 🌍 **Location filters.** US only, by region (Africa, Americas, Asia, Europe, Oceania), by sub-region, or by specific country.
- 💰 **Pricing.** Hourly rate as advertised by the freelancer.
- 📈 **Quality signals.** Job Success Score, Top Rated badge level, total jobs, total earnings.
- 🛠️ **Skills array.** All skills the freelancer has tagged on their profile.

The scraper walks the Upwork search result pages with your filter combination, extracts each freelancer card, and pushes the structured record to the dataset. Records include a back-reference URL to the original Upwork profile so you can rejoin downstream data.

> 💡 **Why it matters:** Upwork has the largest pool of vetted freelancers but its UI is paginated, JS-rendered, and filter-locked. A live, structured pull beats manual sourcing for talent acquisition, agency benchmarking, and market research at scale.

---

### 🎬 Full Demo

🚧 Coming soon: a 3-minute walkthrough showing setup, a live run, and how to pipe results into Google Sheets via Apify integrations.

---

### ⚙️ Input

| Field | Type | Name | Description |
|---|---|---|---|
| searchQuery | string | Search Query | Required. Freelancer search keyword (e.g. `python developer`, react, `web scraping`). |
| maxItems | integer | Max Items | Free users: limited to 10 items (preview). Paid users: optional, max 1,000,000. |
| topRatedOnly | boolean | Top Rated Only | When true, returns only Top Rated and Top Rated Plus freelancers. |
| topRatedPlusOnly | boolean | Top Rated Plus Only | When true, returns only Top Rated Plus freelancers. |
| usOnly | boolean | US Only | When true, returns only US-based freelancers. Ignored if region/sub-region/country is set. |
| region | enum | Region | Filter by continent: Africa, Americas, Asia, Europe, Oceania. |
| subRegion | enum | Sub-region | Filter by sub-region: `Eastern Europe`, `Western Europe`, `Latin America`, `Middle East`, `North America`. |
| country | enum | Country | Filter by specific country (full ISO list). |

Example 1. Top Rated React developers in Latin America.

```json
{
  "searchQuery": "react developer",
  "topRatedOnly": true,
  "subRegion": "Latin America",
  "maxItems": 50
}
````

Example 2. US-based Python data scientists.

```json
{
  "searchQuery": "python data scientist",
  "usOnly": true,
  "topRatedPlusOnly": true,
  "maxItems": 100
}
```

> ⚠️ **Good to Know:** only one location filter can be active at a time (region, subRegion, or country). Setting any of them overrides usOnly.

***

### 📊 Output

The dataset returns one structured record per freelancer profile. Each record carries identifiers, name, title, hourly rate, Top Rated status, Job Success Score, total earnings, total jobs, country, skills array, profile photo, and a back-reference URL. Consume the dataset as JSON, CSV, Excel, XML, or RSS via the Apify console or API.

#### 🧾 Schema

| Field | Type | Example |
|---|---|---|
| 🔗 profileUrl | string (url) | `https://www.upwork.com/freelancers/~012abc345def678901` |
| 🖼️ portraitUrl | string (url) | `https://www.upwork.com/profile-portraits/c1abc.jpg` |
| 👤 firstName | string | Carlos |
| 👤 lastName | string | Garcia |
| 📝 title | string | `Senior React Developer | TypeScript | Next.js` |
| 💰 hourlyRate | number | `65` |
| 🏆 topRatedStatus | string | `Top Rated Plus` |
| 📈 jobSuccessScore | number | `100` |
| 💵 totalEarnings | number | `250000` |
| 📊 totalJobs | number | `127` |
| 📍 country | string | Argentina |
| 🛠️ skills | array | `["React", "TypeScript", "Next.js", "Node.js", "GraphQL"]` |
| 📅 scrapedAt | ISO datetime | `2026-05-08T12:00:00.000Z` |

#### 📦 Sample records

##### 1. Top Rated Plus freelancer (full profile)

```json
{
  "profileUrl": "https://www.upwork.com/freelancers/~012abc345def678901",
  "portraitUrl": "https://www.upwork.com/profile-portraits/c1abc.jpg",
  "firstName": "Carlos",
  "lastName": "G.",
  "title": "Senior React Developer | TypeScript | Next.js",
  "hourlyRate": 65,
  "topRatedStatus": "Top Rated Plus",
  "jobSuccessScore": 100,
  "totalEarnings": 250000,
  "totalJobs": 127,
  "country": "Argentina",
  "skills": ["React", "TypeScript", "Next.js", "Node.js", "GraphQL"],
  "scrapedAt": "2026-05-08T12:00:00.000Z"
}
```

##### 2. Top Rated freelancer (mid-level)

```json
{
  "profileUrl": "https://www.upwork.com/freelancers/~023bcd456ef9012345",
  "portraitUrl": "https://www.upwork.com/profile-portraits/c2bcd.jpg",
  "firstName": "Anna",
  "lastName": "K.",
  "title": "Full-Stack JavaScript Developer",
  "hourlyRate": 45,
  "topRatedStatus": "Top Rated",
  "jobSuccessScore": 96,
  "totalEarnings": 75000,
  "totalJobs": 58,
  "country": "Poland",
  "skills": ["JavaScript", "React", "Node.js", "MongoDB"],
  "scrapedAt": "2026-05-08T12:00:00.000Z"
}
```

##### 3. New freelancer (sparse fields)

```json
{
  "profileUrl": "https://www.upwork.com/freelancers/~034cde567f123456789",
  "portraitUrl": "https://www.upwork.com/profile-portraits/c3cde.jpg",
  "firstName": "Raj",
  "lastName": "P.",
  "title": "Junior Web Developer",
  "hourlyRate": 18,
  "topRatedStatus": null,
  "jobSuccessScore": null,
  "totalEarnings": 0,
  "totalJobs": 0,
  "country": "India",
  "skills": ["HTML", "CSS"],
  "scrapedAt": "2026-05-08T12:00:00.000Z"
}
```

***

### ✨ Why choose this Actor

| | Capability |
|---|---|
| 🎯 | **Built for the job.** Scoped specifically to Upwork freelancer profiles so you skip the parser engineering entirely. |
| 🔖 | **Structured output.** Clean, typed fields ready for analysis, dashboards, or downstream pipelines. |
| ⚡ | **Fast.** Optimized request patterns return results in seconds, not minutes. |
| 🔁 | **Always fresh.** Every run pulls live data, so the dataset reflects Upwork as of run time. |
| 🌐 | **No infra to manage.** Apify handles proxies, retries, scaling, scheduling, and storage. |
| 🛡️ | **Reliable.** Battle-tested across many runs and edge cases, with graceful error handling. |
| 🚫 | **No code required.** Configure in the UI, run from CLI, schedule via cron, or call from any language with the Apify SDK. |

> 📊 Production-grade structured talent data without the engineering overhead of building and maintaining your own scraper.

***

### 📈 How it compares to alternatives

| Approach | Cost | Coverage | Refresh | Filters | Setup |
|---|---|---|---|---|---|
| **⭐ Upwork Freelancer Scraper** *(this Actor)* | $5 free credit, then pay-per-use | Full Upwork search results | **Live per run** | Top Rated, region, sub-region, country | ⚡ 2 min |
| Build your own scraper | Engineering hours | Full once built | Whenever you maintain it | Custom code | 🐢 Days to weeks |
| Paid talent databases | $$$ monthly | Vendor-defined | Periodic | Vendor-defined | ⏳ Hours |
| Manual sourcing | Hours per profile | Limited | Stale | Manual filter clicking | 🕒 Variable |

Pick this Actor when you want broad coverage, source-native filtering, and no pipeline maintenance.

***

### 🚀 How to use

1. 📝 **Sign up.** [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=vmoqkp) (takes 2 minutes).
2. 🌐 **Open the Actor.** Go to the Upwork Freelancer Scraper page on the Apify Store.
3. 🎯 **Set filters.** Set a search query and pick quality + location filters, then set maxItems.
4. 🚀 **Run it.** Click **Start** and let the Actor collect your data.
5. 📥 **Download.** Grab your results in the **Dataset** tab as CSV, Excel, JSON, or XML.

> ⏱️ Total time from signup to downloaded dataset: **3-5 minutes.** No coding required.

***

### 💼 Business use cases

<table>
<tr>
<td width="50%" valign="top">

#### 📊 Talent sourcing

- Build matched candidate pipelines by skill stack
- Identify Top Rated specialists in your tech area
- Filter by region or country for time-zone alignment
- Power outbound recruiting workflows

</td>
<td width="50%" valign="top">

#### 🏢 Agency and competitive intelligence

- Benchmark competitor freelancer rosters and rates
- Track agency hiring patterns over time
- Build comp sets for pricing decisions
- Monitor talent flow into specific industries

</td>
</tr>
<tr>
<td width="50%" valign="top">

#### 🎯 Procurement and vendor management

- Validate vendor freelancer rates before contract talks
- Build approved-vendor lists by skill and region
- Source contingent labor for spikes
- Audit existing vendor pricing against market rates

</td>
<td width="50%" valign="top">

#### 🛠️ Engineering and product

- Prototype talent-marketplace products without owning a crawler
- Replace fragile in-house Upwork scrapers
- Wire datasets into your apps via the Apify API or webhooks
- Skip the proxy, retry, and parsing maintenance entirely

</td>
</tr>
</table>

***

### 🌟 Beyond business use cases

Data like this powers more than commercial workflows. The same structured records support research, education, civic projects, and personal initiatives.

<table>
<tr>
<td width="50%">

#### 🎓 Research and academia

- Empirical datasets for papers, thesis work, and coursework
- Longitudinal studies tracking changes across snapshots
- Reproducible research with cited, versioned data pulls
- Classroom exercises on data analysis and ethical scraping

</td>
<td width="50%">

#### 🎨 Personal and creative

- Side projects, portfolio demos, and indie app launches
- Data visualizations, dashboards, and infographics
- Content research for bloggers, YouTubers, and podcasters
- Hobbyist collections and personal trackers

</td>
</tr>
<tr>
<td width="50%">

#### 🤝 Non-profit and civic

- Transparency reporting and accountability projects
- Advocacy campaigns backed by public-interest data
- Community-run databases for local issues
- Investigative journalism on public records

</td>
<td width="50%">

#### 🧪 Experimentation

- Prototype AI and machine-learning pipelines with real data
- Validate product-market hypotheses before engineering spend
- Train small domain-specific models on niche corpora
- Test dashboard concepts with live input

</td>
</tr>
</table>

***

### 🔌 Automating Upwork Freelancer Scraper

This Actor exposes a REST endpoint, so you can drive it from any language or workflow tool.

- **Node.js** - call it via the [Apify JS SDK](https://docs.apify.com/sdk/js).
- **Python** - call it via the [Apify Python SDK](https://docs.apify.com/sdk/python).
- **REST** - hit it directly through the [Apify v2 API](https://docs.apify.com/api/v2).

**Schedules.** Use Apify Scheduler to run hourly, daily, or weekly snapshots. Combine with the Apify dataset diff tools to track new freelancer profiles between runs.

***

### ❓ Frequently Asked Questions

<details>
<summary><b>💳 Do I need a paid Apify plan to run this actor?</b></summary>

No. You can start right now on the free Apify plan, which includes **$5 in monthly credit**. That is enough to run the scraper several times and explore the output. Paid plans unlock higher item caps, more concurrent runs, and larger datasets. [Create a free Apify account here](https://console.apify.com/sign-up?fpr=vmoqkp).

</details>

<details>
<summary><b>🚨 What happens if my run fails or returns no results?</b></summary>

Failed runs are not charged. If Upwork changes its DOM, proxies get rate-limited, or your filters match nothing, re-run the actor or open our [contact form](https://tally.so/r/BzdKgA) and we will look into it. The run log in the Apify console explains why a run stopped.

</details>

<details>
<summary><b>📏 How many items can I scrape per run?</b></summary>

Free users are limited to **10 items per run** so you can preview the output and confirm the actor works for your use case. Paid users can raise maxItems up to **1,000,000** per run. [Upgrade here](https://console.apify.com/sign-up?fpr=vmoqkp) if you need full scale.

</details>

<details>
<summary><b>🕒 How fresh is the data?</b></summary>

Every run fetches live data at the moment of execution. There is no cache or delay: records reflect what Upwork returned at run time. Schedule the actor to maintain a rolling snapshot.

</details>

<details>
<summary><b>🧑‍💻 Can I call this actor from my own code?</b></summary>

Yes. Apify exposes every actor as a REST endpoint and ships first-class SDKs for [Node.js](https://docs.apify.com/sdk/js) and [Python](https://docs.apify.com/sdk/python). You can start a run, read the dataset, and handle webhooks from your own app in a few lines.

</details>

<details>
<summary><b>📤 How do I export the data?</b></summary>

Every Apify dataset can be downloaded in one click as CSV, JSON, JSONL, Excel, HTML, XML, or RSS. You can also pull results programmatically via the [Apify API](https://docs.apify.com/api/v2) or stream into BigQuery, S3, and other destinations through built-in integrations.

</details>

<details>
<summary><b>📅 Can I schedule the actor to run automatically?</b></summary>

Yes. Use the Apify scheduler to run the actor on any cadence, from hourly to monthly. Results are saved to your dataset and can be delivered to webhooks, email, Slack, cloud storage, or automation tools such as Zapier and Make.

</details>

<details>
<summary><b>🏪 Can I use the data commercially?</b></summary>

Yes. The scraped data is yours to use in your own internal pipelines, products, and reports, subject to the terms of service of the source site. The Apify dataset itself has no extra licensing on top.

</details>

<details>
<summary><b>💼 Which plan should I pick for production use?</b></summary>

Apify's Starter and Scale plans are designed for production workloads. They give you faster instances, more concurrent runs, and higher proxy quotas. Pick the plan that matches your dataset size and refresh cadence; the in-app pricing calculator will help you size it.

</details>

<details>
<summary><b>🛠️ The data I need is not in the output. Can you add it?</b></summary>

Most likely yes. Open the [contact form](https://tally.so/r/BzdKgA) and tell us which field you need. We add fields all the time when there is a clear use case and the source page exposes the data.

</details>

<details>
<summary><b>⚖️ Is scraping Upwork legal?</b></summary>

This Actor only collects data from publicly accessible Upwork freelancer profile pages, the same content any visitor can read. Public web scraping is generally legal in most jurisdictions for non-personal data, but laws vary by country and use case. You are responsible for compliance with the source site's Terms of Service and applicable law.

***

</details>

### 🔌 Integrate with any app

Upwork Freelancer Scraper connects to any cloud service via [Apify integrations](https://apify.com/integrations):

- [**Make**](https://docs.apify.com/platform/integrations/make) - Automate multi-step workflows
- [**Zapier**](https://docs.apify.com/platform/integrations/zapier) - Connect with 5,000+ apps
- [**Slack**](https://docs.apify.com/platform/integrations/slack) - Get run notifications in your channels
- [**Airbyte**](https://docs.apify.com/platform/integrations/airbyte) - Pipe results into your warehouse
- [**GitHub**](https://docs.apify.com/platform/integrations/github) - Trigger runs from commits and releases
- [**Google Drive**](https://docs.apify.com/platform/integrations/drive) - Export datasets straight to Sheets

You can also use webhooks to trigger downstream actions when a run finishes. Push fresh data into your product backend or alert your team in Slack.

***

### 🔗 Recommended Actors

- [**💼 LinkedIn Profile Scraper**](https://apify.com/parseforge/linkedin-profile-scraper) - LinkedIn profile and contact data
- [**💼 Wellfound Jobs Scraper**](https://apify.com/parseforge/wellfound-jobs-scraper) - Startup jobs from Wellfound (formerly AngelList)
- [**💼 Indeed Scraper**](https://apify.com/parseforge/indeed-scraper) - Job listings with compensation and benefits
- [**💼 Glassdoor Scraper**](https://apify.com/parseforge/glassdoor-scraper) - Company reviews, salaries, and ratings
- [**🔍 Google Search Scraper**](https://apify.com/parseforge/google-search-scraper) - SERP harvesting with country and language targeting

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more reference-data scrapers.

***

**🆘 Need Help?** [**Open our contact form**](https://tally.so/r/BzdKgA) to request a new scraper, propose a custom project, or report an issue.

***

> ⚠️ **Disclaimer.** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Upwork or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. The scraper accesses only publicly available pages and is intended for legitimate research, analytics, and lead-generation use. Users are responsible for compliance with the source site's Terms of Service and applicable law.

# Actor input Schema

## `searchQuery` (type: `string`):

Search keyword for finding freelancers (e.g. 'python developer', 'web scraping', 'react')

## `maxItems` (type: `integer`):

Free users: Limited to 100. Paid users: Optional, max 1,000,000

## `topRatedOnly` (type: `boolean`):

Only show Top Rated and Top Rated Plus freelancers

## `topRatedPlusOnly` (type: `boolean`):

Only show Top Rated Plus freelancers

## `usOnly` (type: `boolean`):

Only show freelancers from the United States. Ignored when region, sub-region, or country is set.

## `region` (type: `string`):

Filter by continent. Only one location filter can be used at a time (region, sub-region, or country). Overrides 'US Only'.

## `subRegion` (type: `string`):

Filter by sub-region. Only one location filter can be used at a time (region, sub-region, or country). Overrides 'US Only'.

## `country` (type: `string`):

Filter by specific country. Only one location filter can be used at a time (region, sub-region, or country). Overrides 'US Only'.

## Actor input object example

```json
{
  "searchQuery": "python developer",
  "maxItems": 10,
  "topRatedOnly": false,
  "topRatedPlusOnly": false,
  "usOnly": false
}
```

# Actor output Schema

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

Dataset with all scraped freelancer profiles

# 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 = {
    "searchQuery": "python developer",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/upwork-freelancers-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 = {
    "searchQuery": "python developer",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/upwork-freelancers-scraper").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 '{
  "searchQuery": "python developer",
  "maxItems": 10
}' |
apify call parseforge/upwork-freelancers-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Upwork Freelancers Scraper",
        "description": "Search and scrape Upwork freelancer profiles by keyword. Get hourly rates, job success scores, earnings, skills, location, Top Rated status, and availability badges. Filter by Top Rated, Top Rated Plus, or US-only freelancers.",
        "version": "1.0",
        "x-build-id": "4otbQZBLT5aorP50i"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~upwork-freelancers-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-upwork-freelancers-scraper",
                "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/parseforge~upwork-freelancers-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-upwork-freelancers-scraper",
                "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/parseforge~upwork-freelancers-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-upwork-freelancers-scraper",
                "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": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Search keyword for finding freelancers (e.g. 'python developer', 'web scraping', 'react')"
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 100. Paid users: Optional, max 1,000,000"
                    },
                    "topRatedOnly": {
                        "title": "Top Rated Only",
                        "type": "boolean",
                        "description": "Only show Top Rated and Top Rated Plus freelancers",
                        "default": false
                    },
                    "topRatedPlusOnly": {
                        "title": "Top Rated Plus Only",
                        "type": "boolean",
                        "description": "Only show Top Rated Plus freelancers",
                        "default": false
                    },
                    "usOnly": {
                        "title": "US Only",
                        "type": "boolean",
                        "description": "Only show freelancers from the United States. Ignored when region, sub-region, or country is set.",
                        "default": false
                    },
                    "region": {
                        "title": "Region",
                        "enum": [
                            "",
                            "Africa",
                            "Americas",
                            "Asia",
                            "Europe",
                            "Oceania"
                        ],
                        "type": "string",
                        "description": "Filter by continent. Only one location filter can be used at a time (region, sub-region, or country). Overrides 'US Only'."
                    },
                    "subRegion": {
                        "title": "Sub-region",
                        "enum": [
                            "",
                            "Eastern Europe",
                            "Western Europe",
                            "Latin America",
                            "Middle East",
                            "North America"
                        ],
                        "type": "string",
                        "description": "Filter by sub-region. Only one location filter can be used at a time (region, sub-region, or country). Overrides 'US Only'."
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "",
                            "Afghanistan",
                            "Albania",
                            "Algeria",
                            "Andorra",
                            "Angola",
                            "Antigua and Barbuda",
                            "Argentina",
                            "Armenia",
                            "Australia",
                            "Austria",
                            "Azerbaijan",
                            "Bahamas",
                            "Bahrain",
                            "Bangladesh",
                            "Barbados",
                            "Belarus",
                            "Belgium",
                            "Belize",
                            "Benin",
                            "Bhutan",
                            "Bolivia",
                            "Bosnia and Herzegovina",
                            "Botswana",
                            "Brazil",
                            "Brunei",
                            "Bulgaria",
                            "Burkina Faso",
                            "Burundi",
                            "Cambodia",
                            "Cameroon",
                            "Canada",
                            "Cape Verde",
                            "Central African Republic",
                            "Chad",
                            "Chile",
                            "China",
                            "Colombia",
                            "Comoros",
                            "Congo",
                            "Costa Rica",
                            "Croatia",
                            "Cyprus",
                            "Czech Republic",
                            "Denmark",
                            "Djibouti",
                            "Dominica",
                            "Dominican Republic",
                            "Ecuador",
                            "Egypt",
                            "El Salvador",
                            "Equatorial Guinea",
                            "Eritrea",
                            "Estonia",
                            "Ethiopia",
                            "Fiji",
                            "Finland",
                            "France",
                            "Gabon",
                            "Gambia",
                            "Georgia",
                            "Germany",
                            "Ghana",
                            "Greece",
                            "Grenada",
                            "Guatemala",
                            "Guinea",
                            "Guinea-Bissau",
                            "Guyana",
                            "Haiti",
                            "Honduras",
                            "Hong Kong",
                            "Hungary",
                            "Iceland",
                            "India",
                            "Indonesia",
                            "Iraq",
                            "Ireland",
                            "Israel",
                            "Italy",
                            "Jamaica",
                            "Japan",
                            "Jordan",
                            "Kazakhstan",
                            "Kenya",
                            "Kiribati",
                            "Kuwait",
                            "Kyrgyzstan",
                            "Laos",
                            "Latvia",
                            "Lebanon",
                            "Lesotho",
                            "Liberia",
                            "Libya",
                            "Liechtenstein",
                            "Lithuania",
                            "Luxembourg",
                            "Madagascar",
                            "Malawi",
                            "Malaysia",
                            "Maldives",
                            "Mali",
                            "Malta",
                            "Marshall Islands",
                            "Mauritania",
                            "Mauritius",
                            "Mexico",
                            "Micronesia",
                            "Moldova",
                            "Monaco",
                            "Mongolia",
                            "Montenegro",
                            "Morocco",
                            "Mozambique",
                            "Myanmar",
                            "Namibia",
                            "Nauru",
                            "Nepal",
                            "Netherlands",
                            "New Zealand",
                            "Nicaragua",
                            "Niger",
                            "Nigeria",
                            "North Macedonia",
                            "Norway",
                            "Oman",
                            "Pakistan",
                            "Palau",
                            "Panama",
                            "Papua New Guinea",
                            "Paraguay",
                            "Peru",
                            "Philippines",
                            "Poland",
                            "Portugal",
                            "Puerto Rico",
                            "Qatar",
                            "Romania",
                            "Russia",
                            "Rwanda",
                            "Saint Kitts and Nevis",
                            "Saint Lucia",
                            "Saint Vincent and the Grenadines",
                            "Samoa",
                            "San Marino",
                            "Sao Tome and Principe",
                            "Saudi Arabia",
                            "Senegal",
                            "Serbia",
                            "Seychelles",
                            "Sierra Leone",
                            "Singapore",
                            "Slovakia",
                            "Slovenia",
                            "Solomon Islands",
                            "Somalia",
                            "South Africa",
                            "South Korea",
                            "Spain",
                            "Sri Lanka",
                            "Sudan",
                            "Suriname",
                            "Sweden",
                            "Switzerland",
                            "Taiwan",
                            "Tajikistan",
                            "Tanzania",
                            "Thailand",
                            "Togo",
                            "Tonga",
                            "Trinidad and Tobago",
                            "Tunisia",
                            "Turkey",
                            "Turkmenistan",
                            "Tuvalu",
                            "Uganda",
                            "Ukraine",
                            "United Arab Emirates",
                            "United Kingdom",
                            "United States",
                            "Uruguay",
                            "Uzbekistan",
                            "Vanuatu",
                            "Venezuela",
                            "Vietnam",
                            "Yemen",
                            "Zambia",
                            "Zimbabwe"
                        ],
                        "type": "string",
                        "description": "Filter by specific country. Only one location filter can be used at a time (region, sub-region, or country). Overrides 'US Only'."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
