# JobStreet $1💰 Keyword & URL Job Scraper (`abotapi/jobstreet-scraper`) Actor

From $1/1K. Scrape JobStreet listings across Malaysia, Singapore, Indonesia, and the Philippines. Extract titles, companies, salaries, locations, descriptions, company info, and apply details. Search with filters or paste JobStreet URLs directly. Fast, browser-free, and cost-efficient.

- **URL**: https://apify.com/abotapi/jobstreet-scraper.md
- **Developed by:** [AbotAPI](https://apify.com/abotapi) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 4 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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

## JobStreet Jobs Scraper (Malaysia, Singapore, Philippines, Indonesia)

Scrape job listings from JobStreet across all four Southeast Asian markets: Malaysia (my.jobstreet.com), Singapore (sg.jobstreet.com), the Philippines (ph.jobstreet.com), and Indonesia (id.jobstreet.com). The actor reads JobStreet's public JSON search and returns one clean, flat record per job, with an optional full description, company overview, salary, and contact details pulled from the public job-detail endpoint. No browser, fast, and inexpensive.

Search two ways: fill in the filter fields (country, keywords, location, category, work type, salary, date range), or paste one or more JobStreet search URLs and let the actor read the filters straight from each link.

### Why this scraper

- Covers all four JobStreet country sites from one actor, with the country auto-detected from each pasted URL.
- 60+ fields per job, including the full HTML description, plain-text body, bullet points, salary, company overview, and any phone numbers or emails found in the ad body.
- Detail enrichment is batched: one extra request fetches the full description for a whole page of up to 22 jobs, so deep runs stay fast.
- Forward pagination across as many pages as you allow, with automatic de-duplication by job ID.
- Filter by category and subcategory, work type, salary range (monthly or annual), and listing recency.
- Global caps on item count and run time, so a run never overshoots your budget. Partial results are always flushed.

### Data you get

> Sample shape, values are illustrative placeholders, not from a live listing.

| Field | Example |
| --- | --- |
| `id` | `"00000001"` |
| `url` | `"https://my.jobstreet.com/job/00000001"` |
| `title` | `"Software Engineer"` |
| `teaser` | `"Join a growing team building cloud services."` |
| `companyName` | `"Sample Company Sdn Bhd"` |
| `companyId` | `"00000000"` |
| `companyOverview` | `"Sample Company is a leading provider of ..."` |
| `advertiserName` | `"Sample Company Sdn Bhd"` |
| `locationLabel` | `"Kuala Lumpur"` |
| `locationSeoHierarchy` | `["Kuala Lumpur", "Wilayah Persekutuan"]` |
| `countryCode` | `"MY"` |
| `classificationInfo` | `{ "classification": "Information & Communication Technology", "subClassification": "Developers/Programmers" }` |
| `workTypes` | `["Full time"]` |
| `salaryLabel` | `"RM 5,000 to RM 8,000 per month"` |
| `content` | `"<p>Full job description HTML appears here when includeFullDescription=true.</p>"` |
| `contentText` | `"Full job description plain text appears here."` |
| `bulletPoints` | `["Competitive salary", "Hybrid work", "Career growth"]` |
| `phoneNumbers` | `["+60100000000"]` |
| `emails` | `["careers@example.com"]` |
| `listingDate` | `"2026-01-01T00:00:00Z"` |
| `listingDateDisplay` | `"2d ago"` |
| `expiresAt` | `"2026-02-01T00:00:00Z"` |
| `isVerified` | `true` |
| `applyLink` | `"https://my.jobstreet.com/job/00000001/apply"` |
| `scrapedAt` | `"2026-01-01T00:00:00.000Z"` |

The full record carries more: `classifications[]` with IDs, `workArrangementLabels`, `salaryCurrency`, `shareLink`, `companyOpenJobs`, `branding`, `advertiser` details, and raw passthrough blocks (`advertiserRaw`, `employerRaw`, `companyProfileRaw`) so no upstream field is ever dropped.

### How to use

#### 1. Basic search (Malaysia)

```json
{
  "country": "MY",
  "keywords": "software engineer",
  "location": "Kuala Lumpur",
  "maxItems": 50
}
````

#### 2. Search with filters (Singapore, ICT, full time, salary range)

```json
{
  "country": "SG",
  "keywords": "data engineer",
  "classification": ["6281"],
  "workType": ["242"],
  "salaryMin": 5000,
  "salaryMax": 12000,
  "salaryType": "monthly",
  "daterange": 14,
  "sortmode": "ListedDate",
  "maxItems": 100,
  "includeFullDescription": true
}
```

#### 3. Multiple countries via URL mode

```json
{
  "urls": [
    "https://my.jobstreet.com/it-jobs/in-Penang",
    "https://sg.jobstreet.com/jobs-in-information-communication-technology",
    "https://ph.jobstreet.com/accountant-jobs",
    "https://id.jobstreet.com/marketing-jobs/in-Jakarta-Raya"
  ],
  "maxItems": 200,
  "includeFullDescription": false
}
```

In URL mode, the filter fields in Option 1 are ignored. Each URL's host sets the country, and its path and query string set the filters. You can mix all four country sites in one run.

#### 4. Recent jobs only, sorted by date

```json
{
  "country": "ID",
  "keywords": "marketing",
  "daterange": 7,
  "sortmode": "ListedDate",
  "maxItems": 30
}
```

### Input parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `country` | string | `"MY"` | Market to search: `MY`, `SG`, `PH`, or `ID`. Applies in filter mode only. |
| `keywords` | string | (empty) | Job title or keywords. Empty matches all jobs in the location. |
| `location` | string | (empty) | Location within the country, for example `Kuala Lumpur` or `Jakarta Raya`. Empty searches the whole country. |
| `classification` | array | `[]` | One or more category IDs. Empty means all categories. |
| `workType` | array | `[]` | Work types: `242` Full time, `243` Part time, `244` Contract/Temp, `245` Casual/Vacation. |
| `salaryMin` | integer | (none) | Minimum salary in local currency. |
| `salaryMax` | integer | (none) | Maximum salary in local currency. |
| `salaryType` | string | `"monthly"` | Whether salary values are `monthly` or `annual`. |
| `daterange` | integer | (none) | Listed within N days. Accepted: 1, 3, 7, 14, 31. |
| `sortmode` | string | `"ListedDate"` | `ListedDate` newest first, or `KeywordRelevance` best match. |
| `urls` | array | `[]` | One or more JobStreet search URLs. Overrides Option 1. Country auto-detected per URL. |
| `includeFullDescription` | boolean | `true` | Fetch the full HTML description, company overview, expiry, and phone via the job-detail endpoint. Batched per page. |
| `maxItems` | integer | `20` | Global cap across all URLs and pages. `0` means unlimited. |
| `maxTimeSec` | integer | `0` | Global wall-clock cap in seconds. `0` means no limit. Partial results are flushed when reached. |
| `proxyConfiguration` | object | Apify datacenter | Proxy settings. See below. |

### Output example

> Sample shape, values are illustrative placeholders, not from a live listing.

```json
{
  "id": "00000001",
  "url": "https://my.jobstreet.com/job/00000001",
  "applyLink": "https://my.jobstreet.com/job/00000001/apply",
  "title": "Software Engineer",
  "teaser": "Join a growing team building cloud services.",
  "companyName": "Sample Company Sdn Bhd",
  "companyId": "00000000",
  "companyOverview": "Sample Company is a leading provider of cloud services in the region.",
  "advertiserName": "Sample Company Sdn Bhd",
  "locationLabel": "Kuala Lumpur",
  "locationSeoHierarchy": ["Kuala Lumpur", "Wilayah Persekutuan"],
  "countryCode": "MY",
  "classificationInfo": {
    "classification": "Information & Communication Technology",
    "subClassification": "Developers/Programmers"
  },
  "workTypes": ["Full time"],
  "salaryLabel": "RM 5,000 to RM 8,000 per month",
  "content": "<p>Full job description HTML appears here when includeFullDescription=true.</p>",
  "contentText": "Full job description plain text appears here.",
  "bulletPoints": ["Competitive salary", "Hybrid work", "Career growth"],
  "phoneNumbers": ["+60100000000"],
  "emails": ["careers@example.com"],
  "listingDate": "2026-01-01T00:00:00Z",
  "listingDateDisplay": "2d ago",
  "expiresAt": "2026-02-01T00:00:00Z",
  "isVerified": true,
  "scrapedAt": "2026-01-01T00:00:00.000Z"
}
```

### Plan requirement and proxy

The actor defaults to Apify datacenter proxy, which is included on the free plan, and JobStreet serves its public data fine through it. If your account cannot reach datacenter proxy, the actor automatically falls back to a backup pool, then to a direct connection, so a run never fails just because of proxy access.

For heavy or production workloads, residential proxy gives more rotation and reliability. Set `proxyConfiguration.apifyProxyGroups` to `["RESIDENTIAL"]` (available on Apify paid plans) and optionally pin the country with `apifyProxyCountry` to match the market you are scraping.

# Actor input Schema

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

Country market to search. MY = my.jobstreet.com, SG = sg.jobstreet.com, PH = ph.jobstreet.com, ID = id.jobstreet.com.

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

Job title or keywords (e.g. 'software engineer'). Leave empty to match all jobs in the location.

## `location` (type: `string`):

Where to search within the country. Examples: 'Kuala Lumpur', 'Selangor', 'Singapore', 'Metro Manila', 'Jakarta Raya'. Leave empty to search the whole country.

## `classification` (type: `array`):

Filter by one or more top-level job categories. Leave empty for all. Subclassifications can still be used via URL mode.

## `workType` (type: `array`):

Filter by one or more work types. Leave empty for all.

## `salaryMin` (type: `integer`):

Optional minimum salary, in the local currency (RM / SGD / PHP / IDR). By default treated as a monthly figure.

## `salaryMax` (type: `integer`):

Optional maximum salary, in the local currency. By default treated as a monthly figure.

## `salaryType` (type: `string`):

Whether the salary filter values are monthly or annual amounts. JobStreet markets quote monthly salaries by default.

## `daterange` (type: `integer`):

Only return jobs listed in the last N days. Accepted values: 1, 3, 7, 14, 31. Other values are dropped with a warning.

## `sortmode` (type: `string`):

ListedDate = newest first. KeywordRelevance = best match.

## `urls` (type: `array`):

Paste one or more JobStreet search URLs (e.g. https://my.jobstreet.com/software-engineer-jobs/in-Kuala-Lumpur).

## `includeFullDescription` (type: `boolean`):

If true, fetches the full job HTML body, company overview, expiry date, and phone (when available) via the jobseeker graphql endpoint. Batched per page: one extra request covers up to 22 jobs.

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

Total cap across ALL URLs and ALL pages (not per-URL). Example: maxItems=50 with 3 URLs paginates URL 1 until the budget is filled; URLs 2 and 3 run only if budget remains. Set to 0 for unlimited.

## `maxTimeSec` (type: `integer`):

Wall-clock cap across ALL URLs and pages. When exceeded, the actor stops paginating, flushes whatever it already fetched to the dataset, and exits cleanly. Set to 0 for no time limit.

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

Defaults to Apify datacenter proxy. If your account can't access it (free tier), the actor falls back to a backup proxy pool automatically. For heavy/production workloads, set apifyProxyGroups to \["RESIDENTIAL"] on an Apify paid plan.

## Actor input object example

```json
{
  "country": "MY",
  "keywords": "software engineer",
  "location": "Kuala Lumpur",
  "classification": [],
  "workType": [],
  "salaryMin": 3000,
  "salaryMax": 8000,
  "salaryType": "monthly",
  "daterange": 7,
  "sortmode": "ListedDate",
  "urls": [],
  "includeFullDescription": true,
  "maxItems": 200,
  "maxTimeSec": 300,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}
```

# Actor output Schema

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

Dataset items (one per job)

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": []
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/jobstreet-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 = { "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": [],
    } }

# Run the Actor and wait for it to finish
run = client.actor("abotapi/jobstreet-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 '{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}' |
apify call abotapi/jobstreet-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "JobStreet $1💰 Keyword & URL Job Scraper",
        "description": "From $1/1K. Scrape JobStreet listings across Malaysia, Singapore, Indonesia, and the Philippines. Extract titles, companies, salaries, locations, descriptions, company info, and apply details. Search with filters or paste JobStreet URLs directly. Fast, browser-free, and cost-efficient.",
        "version": "1.0",
        "x-build-id": "j9Qlex65lc8UTlPMZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~jobstreet-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-jobstreet-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/abotapi~jobstreet-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-jobstreet-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/abotapi~jobstreet-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-jobstreet-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": {
                    "country": {
                        "title": "Country",
                        "enum": [
                            "MY",
                            "SG",
                            "PH",
                            "ID"
                        ],
                        "type": "string",
                        "description": "Country market to search. MY = my.jobstreet.com, SG = sg.jobstreet.com, PH = ph.jobstreet.com, ID = id.jobstreet.com.",
                        "default": "MY"
                    },
                    "keywords": {
                        "title": "Keywords",
                        "type": "string",
                        "description": "Job title or keywords (e.g. 'software engineer'). Leave empty to match all jobs in the location."
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Where to search within the country. Examples: 'Kuala Lumpur', 'Selangor', 'Singapore', 'Metro Manila', 'Jakarta Raya'. Leave empty to search the whole country."
                    },
                    "classification": {
                        "title": "Classification",
                        "type": "array",
                        "description": "Filter by one or more top-level job categories. Leave empty for all. Subclassifications can still be used via URL mode.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1200",
                                "6251",
                                "6304",
                                "1203",
                                "1204",
                                "7019",
                                "6163",
                                "1206",
                                "6076",
                                "6263",
                                "6123",
                                "1209",
                                "6205",
                                "1210",
                                "1211",
                                "1212",
                                "6317",
                                "6281",
                                "1214",
                                "1216",
                                "6092",
                                "6008",
                                "6058",
                                "1220",
                                "6043",
                                "6362",
                                "1223",
                                "6261",
                                "6246",
                                "1225"
                            ],
                            "enumTitles": [
                                "Accounting",
                                "Administration & Office Support",
                                "Advertising, Arts & Media",
                                "Banking & Financial Services",
                                "Call Centre & Customer Service",
                                "CEO & General Management",
                                "Community Services & Development",
                                "Construction",
                                "Consulting & Strategy",
                                "Design & Architecture",
                                "Education & Training",
                                "Engineering",
                                "Farming, Animals & Conservation",
                                "Government & Defence",
                                "Healthcare & Medical",
                                "Hospitality & Tourism",
                                "Human Resources & Recruitment",
                                "Information & Communication Technology",
                                "Insurance & Superannuation",
                                "Legal",
                                "Manufacturing, Transport & Logistics",
                                "Marketing & Communications",
                                "Mining, Resources & Energy",
                                "Real Estate & Property",
                                "Retail & Consumer Products",
                                "Sales",
                                "Science & Technology",
                                "Self Employment",
                                "Sport & Recreation",
                                "Trades & Services"
                            ]
                        },
                        "default": []
                    },
                    "workType": {
                        "title": "Work type",
                        "type": "array",
                        "description": "Filter by one or more work types. Leave empty for all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "242",
                                "243",
                                "244",
                                "245"
                            ],
                            "enumTitles": [
                                "Full time",
                                "Part time",
                                "Contract / Temp",
                                "Casual / Vacation"
                            ]
                        },
                        "default": []
                    },
                    "salaryMin": {
                        "title": "Minimum salary",
                        "type": "integer",
                        "description": "Optional minimum salary, in the local currency (RM / SGD / PHP / IDR). By default treated as a monthly figure."
                    },
                    "salaryMax": {
                        "title": "Maximum salary",
                        "type": "integer",
                        "description": "Optional maximum salary, in the local currency. By default treated as a monthly figure."
                    },
                    "salaryType": {
                        "title": "Salary period",
                        "enum": [
                            "monthly",
                            "annual"
                        ],
                        "type": "string",
                        "description": "Whether the salary filter values are monthly or annual amounts. JobStreet markets quote monthly salaries by default.",
                        "default": "monthly"
                    },
                    "daterange": {
                        "title": "Listed within N days",
                        "type": "integer",
                        "description": "Only return jobs listed in the last N days. Accepted values: 1, 3, 7, 14, 31. Other values are dropped with a warning."
                    },
                    "sortmode": {
                        "title": "Sort order",
                        "enum": [
                            "ListedDate",
                            "KeywordRelevance"
                        ],
                        "type": "string",
                        "description": "ListedDate = newest first. KeywordRelevance = best match.",
                        "default": "ListedDate"
                    },
                    "urls": {
                        "title": "JobStreet search URLs",
                        "type": "array",
                        "description": "Paste one or more JobStreet search URLs (e.g. https://my.jobstreet.com/software-engineer-jobs/in-Kuala-Lumpur).",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "includeFullDescription": {
                        "title": "Fetch full job description",
                        "type": "boolean",
                        "description": "If true, fetches the full job HTML body, company overview, expiry date, and phone (when available) via the jobseeker graphql endpoint. Batched per page: one extra request covers up to 22 jobs.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Max items to return",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Total cap across ALL URLs and ALL pages (not per-URL). Example: maxItems=50 with 3 URLs paginates URL 1 until the budget is filled; URLs 2 and 3 run only if budget remains. Set to 0 for unlimited.",
                        "default": 20
                    },
                    "maxTimeSec": {
                        "title": "Max run time (seconds)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Wall-clock cap across ALL URLs and pages. When exceeded, the actor stops paginating, flushes whatever it already fetched to the dataset, and exits cleanly. Set to 0 for no time limit.",
                        "default": 0
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Defaults to Apify datacenter proxy. If your account can't access it (free tier), the actor falls back to a backup proxy pool automatically. For heavy/production workloads, set apifyProxyGroups to [\"RESIDENTIAL\"] on an Apify paid plan.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": []
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
