# Kwork Monitor: Мониторинг заказов Kwork - Ranked New Order Feed (`getascraper/kwork-monitor`) Actor

Ranks new Kwork.ru freelance projects (заказы Kwork) by an Opportunity Score from Kwork's own signals: competing offers, above-average-budget flag, buyer order history. Category Intelligence rollup plus a budget/competition monitor mode. Export JSON, CSV, Sheets, BigQuery. No login. $0.0018/project.

- **URL**: https://apify.com/getascraper/kwork-monitor.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.35 / 1,000 ranked projects

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## 🎯 Kwork Monitor: Мониторинг заказов Kwork

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#F0FDFA;border:1px solid #99F6E4;border-top:4px solid #0D9488;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Score every new Kwork order the moment it's posted.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Kwork (Кворк) is Russia's largest freelance-project marketplace. This actor reads its newest-orders feed and ranks every project with an Opportunity Score built from Kwork's own real signals: existing competing offers, its own above-average-budget flag, and the buyer's completed-order history, so you know which order to answer first instead of scrolling the raw feed.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #99F6E4;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0F766E">🎯 Opportunity Score</span><br>
<span style="font-size:12px;color:#57534E">Every project ranked from real Kwork signals, not just a flat new-order list.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #99F6E4;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0F766E">📊 Category Intelligence</span><br>
<span style="font-size:12px;color:#57534E">See which category has the least competition and the best budgets before reading a single project.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #99F6E4;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0F766E">🔔 Budget & competition alerts</span><br>
<span style="font-size:12px;color:#57534E">Get notified when a tracked project's budget rises or new offers start coming in.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #99F6E4;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#0F766E">🔓 No login required</span><br>
<span style="font-size:12px;color:#57534E">Reads Kwork's public order listing directly. No account, no API key.</span>
</td>
</tr>
</table>

***

### 🔍 What does Kwork Monitor do?

Kwork (Кворк) is Russia's largest freelance-project marketplace, where buyers post project
requests and freelancers compete to win them. This actor reads Kwork's own newest-orders feed
and returns each project with a real **Opportunity Score**, computed entirely from signals
Kwork itself already tracks: how many sellers have already made an offer, whether Kwork's own
system flags the budget as above the category average, and how many completed orders the buyer
already has on the platform.

No commercial tool does this today. The only alternatives are unmaintained hobby projects on
GitHub that individual freelancers built by hand because nothing else served this need. This
actor also ships a second view, **Category Intelligence**, a rollup showing average opportunity,
the share of zero-competition projects, and the share of above-average-budget projects per
category, so you can decide which category is worth watching before reading individual projects.

Turn on monitor mode and this actor becomes a standing watch: run it on a schedule and it reports
only what actually changed since your last check, a brand-new project, a budget that rose, or a
project that picked up competing offers, instead of making you re-read the same listing every
time.

***

### 👥 Who uses it?

**Freelancers who lose good orders to whoever responds first** - "I used to refresh the Kwork
feed by hand hoping to spot a good order before anyone else replied. Now I schedule this every
few minutes and only look at the ones with a real Opportunity Score."

**Freelancers choosing which category to specialize in** - "The Category Intelligence view told
me which category had the least competition and the best budgets right now, instead of me
guessing from a gut feeling."

**Agencies tracking specific project types** - "We filter to our categories and set a minimum
buyer order count, so we only see requests from buyers who've actually paid for work before, not
first-time posters testing the waters."

**Freelancers who already bid once and want to know if it's worth a follow-up** - "Monitor mode
tells me when a project I'm tracking gets a higher budget or new competing offers, so I know
whether to check back in."

***

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#F0FDFA;border:1px solid #99F6E4;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0D9488;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Set your filters</span><br>
<span style="font-size:12px;color:#57534E">Pick categories, or filter by existing offers, above-average budget, and buyer order history.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F0FDFA;border:1px solid #99F6E4;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0D9488;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run in the cloud</span><br>
<span style="font-size:12px;color:#57534E">The actor reads Kwork's public order listing directly. No login, no API key needed.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#F0FDFA;border:1px solid #99F6E4;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#0D9488;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Download your data</span><br>
<span style="font-size:12px;color:#57534E">Export ranked projects and category intelligence as JSON, CSV, or Excel, or connect to Sheets and BigQuery.</span>
</td>
</tr>
</table>

Each run reads Kwork's own newest-orders page, so it always returns the freshest projects
available. Want a standing watch instead of a one-off pull? Turn on **Only Changed Projects** and
give it a State Name, then schedule the run every few minutes to build ongoing coverage.

***

### ⚙️ Input

| Field | Type | Required | Description |
|---|---|---|---|
| `categoryIds` | array | No | Kwork categories to include. Applied to the newest-orders page fetched each run; leave empty for all categories. |
| `maxExistingOffers` | integer | No | Only return projects with at most this many existing competing offers. Leave empty for no filter, or set to `0` for zero-competition projects only. |
| `higherPriceOnly` | boolean | No | Only return projects Kwork itself flags as above the category average budget. Default: off. |
| `minBuyerOrderCount` | integer | No | Only return projects from buyers with at least this many completed past orders. Default: `0` (no minimum). |
| `proxyConfiguration` | proxy | No | Apify proxy settings. Datacenter proxy is the default and sufficient. |
| `maxItems` | integer | No | Maximum number of projects to return. Default and maximum: `12`, matching Kwork's own newest-orders page size. |
| `onlyChangedProjects` | boolean | No | Monitor mode: return only projects that are new, or whose budget rose or existing offers increased, since the last run with the same State Name. Default: off. |
| `stateName` | string | No | Identifies which watch this run's monitor state belongs to. Default: `default`. |
| `resetState` | boolean | No | Clears saved monitor history for State Name before this run. Default: off. |

***

### 📤 Data table

This actor produces two datasets: **Projects** (the default output, ranked by Opportunity Score)
and **Category Intelligence** (a per-category rollup).

#### Projects

| Field | Type | Description |
|---|---|---|
| `projectId` | string | Kwork's own unique project ID. |
| `title` | string | Project title. |
| `description` | string | Full project description. |
| `categoryId` | string | Kwork's own category ID. |
| `categoryName` | string | Category display name. |
| `priceLimit` | number | The project's stated budget. |
| `possiblePriceLimit` | number | The project's maximum possible budget, including any buyer flexibility. |
| `isHigherPrice` | boolean | True when Kwork itself flags this budget as above the category average. |
| `existingOffers` | number | Number of sellers who have already made an offer on this project. |
| `buyerCompletedOrders` | number | The buyer's completed order count on Kwork. |
| `buyerProfileUrl` | string | Link to the buyer's Kwork profile. |
| `expiresWithinHours` | number | Hours remaining before the project stops accepting offers. |
| `opportunityScore` | number | 0-100 score combining competition, budget, and buyer signals. |
| `opportunityLabel` | string | Plain-language read of the score, e.g. "Strong: no competition yet, above-average budget, experienced buyer." |
| `opportunityBreakdown` | object | The three individual component scores behind `opportunityScore`. |
| `projectUrl` | string | Link to the project on Kwork. |
| `scrapedAt` | string | ISO 8601 timestamp of when the row was scraped. |
| `changeType` | string | Monitor mode only: `NEW_PROJECT`, `BUDGET_INCREASED`, or `COMPETITION_RISING`. |
| `previousValue` / `currentValue` / `delta` | number | Monitor mode only: the tracked value before and after, and the change. |

#### Category Intelligence

| Field | Type | Description |
|---|---|---|
| `categoryId` | string | Kwork's own category ID. |
| `categoryName` | string | Category display name. |
| `projectsScraped` | number | Number of projects seen in this category this run. |
| `avgOpportunityScore` | number | Average Opportunity Score across this category's projects. |
| `zeroCompetitionSharePct` | number | Percent of this category's projects with zero existing offers. |
| `aboveAverageBudgetSharePct` | number | Percent of this category's projects flagged above the category average budget. |
| `scrapedAt` | string | ISO 8601 timestamp of when this snapshot was taken. |

***

### 💰 Pricing

This actor charges per project returned. Category Intelligence rows are included at no extra
charge. Empty runs cost nothing. There are no monthly subscriptions or seat fees.

***

### ⭐ Enjoying Kwork Monitor?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#F0FDFA;border:1px solid #99F6E4;border-left:5px solid #0D9488;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">If the Opportunity Score helped you catch a good order before anyone else did, we'd love to hear it.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other freelancers find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#0D9488;border:1px solid #99F6E4;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/kwork-monitor/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

***

### ❓ FAQ

**Does this actor require a Kwork account or API key?**
No. It reads Kwork's public order listing directly. No registration and no API key are needed to
run it.

**Как найти заказы на Kwork без конкуренции?** (How do I find Kwork orders with no competition?)
Set Max Existing Offers to `0` in the input form. The actor returns only projects where no seller
has made an offer yet, ranked by Opportunity Score so you can see the strongest ones first.

**How many projects does one run return?**
Up to 12, matching Kwork's own newest-orders page. This actor is built to run on a schedule so
you see new orders as they land, rather than as a single large one-time export.

**What counts as a "budget increase" in monitor mode?**
A rise in the project's own `possiblePriceLimit` since the last run with the same State Name,
typically a buyer raising their offer because nobody has taken the project yet. The actor reports
the previous value, the current value, and the exact change.

***

### 🔗 Other actors

- [HH.ru Jobs Scraper: Парсер вакансий HH.ru](https://apify.com/getascraper/hh-ru-jobs-scraper) ↗ - Search Russia's largest general job board by keyword, city, salary, and experience level.
- [Habr Career Scraper: Вакансии Хабр Карьера](https://apify.com/getascraper/habr-career-scraper) ↗ - Scrape Russian tech job vacancies with structured skill tags and real salary benchmarks.
- [Auto.ru Scraper: Парсер Авто.ру](https://apify.com/getascraper/autoru-scraper) ↗ - Scrape used-car listings from Russia's largest car marketplace with price-drop alerts.
- [Avito Auto Scraper: Парсер Авито Авто](https://apify.com/getascraper/avito-auto-scraper) ↗ - Extract used-car listings from Avito, Russia's largest classifieds site.

# Actor input Schema

## `categoryIds` (type: `array`):

Only surface projects from these Kwork categories, e.g. 38 (Доработка и настройка сайта / WordPress & site fixes), 46 (Соцсети и SMM / social media), 265 (Подбор персонала / recruitment), 270 (Презентации и инфографика / presentations). This filter is applied client-side to the single page this Actor is allowed to fetch (see Max Projects below), not as a server-side search parameter, so a narrow category selection can return fewer than Max Projects, or zero, in a given run rather than a guaranteed count. Leave empty for all categories.

## `maxExistingOffers` (type: `integer`):

Only surface projects with at most this many existing seller offers already submitted (Kwork's own kwork\_count field, the real per-project competition count). Leave empty for no filter. Set to 0 specifically to surface only zero-competition, first-mover projects, a common and genuinely valuable filter since a large share of new listings start with no offers yet.

## `higherPriceOnly` (type: `boolean`):

When enabled, only surfaces projects where Kwork's own isHigherPrice flag is true, meaning Kwork itself has already judged this project's budget to be above the category average. Uses the platform's own computed signal instead of reinventing a weaker one from raw price data.

## `minBuyerOrderCount` (type: `integer`):

Only surface projects posted by buyers with at least this many completed past orders on Kwork (wantGetSumOrderCount), a real buyer-experience signal. 0 means no minimum, includes brand-new buyers too.

## `proxyConfiguration` (type: `object`):

Datacenter proxy is sufficient for Kwork: real-Chrome, Googlebot, and empty-User-Agent requests all reached full real content with no CAPTCHA or WAF challenge encountered (QRATOR, present in front of the site, is confirmed purely passive).

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

Maximum number of projects to return per run. Capped at 12, a genuine technical ceiling, not a conservative default: Kwork's own robots.txt disallows any URL containing page= in the query string, and page-2-and-beyond of the project listing is only reachable that way, so this Actor can only ever fetch the single newest page (12 projects) per run. Run this Actor again (or on a schedule) rather than expecting a higher number here to return more.

## `onlyChangedProjects` (type: `boolean`):

Monitor mode: re-checks the same newest-projects page and outputs only projects that are newly seen, or whose budget rose (BUDGET\_INCREASED) or existing-offer count rose (COMPETITION\_RISING) since the last run that used the same State Name below. Run this Actor on a schedule with the same State Name to build a standing new-order and price/competition-drift alert.

## `stateName` (type: `string`):

Identifies which watch this run's monitor state belongs to. Use a different value for each independent watch you want to track in parallel (e.g. "wordpress-fixes" vs "smm-projects").

## `resetState` (type: `boolean`):

Clears the persisted monitor state for State Name before this run, so the next run treats every project as new again. Use this to start a watch over from scratch.

## Actor input object example

```json
{
  "categoryIds": [],
  "higherPriceOnly": false,
  "minBuyerOrderCount": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxItems": 12,
  "onlyChangedProjects": false,
  "stateName": "default",
  "resetState": false
}
```

# Actor output Schema

## `projects` (type: `string`):

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "categoryIds": [],
    "higherPriceOnly": false,
    "minBuyerOrderCount": 0,
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "maxItems": 12,
    "onlyChangedProjects": false,
    "stateName": "default",
    "resetState": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/kwork-monitor").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 = {
    "categoryIds": [],
    "higherPriceOnly": False,
    "minBuyerOrderCount": 0,
    "proxyConfiguration": { "useApifyProxy": True },
    "maxItems": 12,
    "onlyChangedProjects": False,
    "stateName": "default",
    "resetState": False,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/kwork-monitor").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "categoryIds": [],
  "higherPriceOnly": false,
  "minBuyerOrderCount": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxItems": 12,
  "onlyChangedProjects": false,
  "stateName": "default",
  "resetState": false
}' |
apify call getascraper/kwork-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/kwork-monitor"
        }
    }
}
```

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

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/JVlRUELfnevL2zJIx/builds/8EXDzOYI2Z7Kud8bB/openapi.json
