# JobStreet $1💰 Companies | Reviews Scraper (`abotapi/jobstreet-companies-reviews-scraper`) Actor

From $1/1K. Pull JobStreet company profiles and employee reviews across Malaysia, Singapore, Indonesia, and the Philippines. Search by company, industry, or URL. Returns rich company records with embedded reviews or flat review datasets, with optional open job listings included.

- **URL**: https://apify.com/abotapi/jobstreet-companies-reviews-scraper.md
- **Developed by:** [AbotAPI](https://apify.com/abotapi) (community)
- **Categories:** Automation, Lead generation, Jobs
- **Stats:** 2 total users, 1 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 Companies & Reviews Scraper (Malaysia, Singapore, Philippines, Indonesia)

Pull company profiles and employee reviews 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). Choose one of two output shapes: one rich record per company with the top reviews embedded, or one flat record per review for sentiment and NLP pipelines. No browser, fast, and inexpensive.

Source companies three ways: paste company URLs, search by company name, or browse a whole industry. You can also embed each company's currently open jobs.

### Why this scraper

- Covers all four JobStreet country sites, with the country auto-detected from each pasted URL.
- Two output modes from one actor: company aggregates, or one row per review.
- Deep review data: title, pros, cons, full experience text, job title, employment status, work location, per-category star ratings, recommended flag, upvotes, and date.
- One request returns the company profile plus the first 30 reviews. Need more? The actor paginates automatically (verified to hundreds of reviews per company).
- Company aggregates include overall rating, review count, recommended percentage, salary perception, the full star distribution, per-category ratings, perks, awards, and an AI-written review summary when available.
- Optional open-jobs embedding: attach each company's live job listings (title, location, salary, work type, date, URL).

### Data you get

#### Companies mode (one row per company)

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

| Field | Example |
| --- | --- |
| `id` | `"000000000000000"` |
| `name` | `"Sample Company"` |
| `url` | `"https://my.jobstreet.com/companies/sample-company-000000000000000"` |
| `region` | `"MY"` |
| `industry` | `"Information & Communication Technology"` |
| `ratingOverall` | `4` |
| `reviewCount` | `450` |
| `recommendedPercent` | `86` |
| `salaryRating` | `3` |
| `totalJobs` | `75` |
| `ratingBreakdown` | `{ "companyRating5StarCount": 100, "companyRating1StarCount": 10 }` |
| `categoryRatings` | `[{ "description": "Work/Life balance", "rating": 4, "count": 120 }]` |
| `perks` | `["Medical coverage", "Annual bonus"]` |
| `aiSummary` | `{ "headline": "...", "summary": "...", "pros": "...", "cons": "...", "themes": ["..."] }` |
| `topReviews` | `[ { review object }, ... ]` |
| `topReviewCount` | `5` |
| `jobs` | `[ { job object }, ... ]` (when includeJobs=true) |
| `scrapedAt` | `"2026-01-01T00:00:00.000Z"` |

#### Reviews mode (one row per review)

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

| Field | Example |
| --- | --- |
| `reviewId` | `"000000000000000"` |
| `companyId` | `"000000000000000"` |
| `companyName` | `"Sample Company"` |
| `title` | `"Good place to start a career"` |
| `pros` | `"Supportive team, on-time salary."` |
| `cons` | `"Limited career progression."` |
| `overallExperienceDetails` | `"Full review experience text appears here."` |
| `jobTitle` | `"Software Engineer"` |
| `employmentStatus` | `"1 to 2 years in the role, former employee"` |
| `workLocation` | `"Kuala Lumpur"` |
| `salarySummary` | `"Average"` |
| `recommended` | `true` |
| `overallRating` | `4` |
| `ratings` | `[{ "category": "Work/Life balance", "rating": 4 }]` |
| `upvotes` | `3` |
| `createdAt` | `"1 January 2026"` |
| `url` | `"https://my.jobstreet.com/companies/sample-company-000000000000000"` |
| `scrapedAt` | `"2026-01-01T00:00:00.000Z"` |

### How to use

#### 1. One company, with top reviews (companies mode)

```json
{
  "mode": "companies",
  "urls": ["https://my.jobstreet.com/companies/aeon-168552725744507"],
  "maxReviewsPerCompany": 10,
  "includeAISummary": true
}
````

#### 2. All reviews for a company (reviews mode)

```json
{
  "mode": "reviews",
  "urls": ["https://my.jobstreet.com/companies/aeon-168552725744507"],
  "maxReviewsPerCompany": 200,
  "reviewSort": "recent",
  "maxItems": 200
}
```

#### 3. Browse companies by industry (Singapore)

```json
{
  "mode": "companies",
  "country": "SG",
  "industry": "Banking & Financial Services",
  "maxReviewsPerCompany": 5,
  "maxItems": 20
}
```

#### 4. Search companies by name, embed their open jobs

```json
{
  "mode": "companies",
  "country": "MY",
  "keywords": "maybank",
  "includeJobs": true,
  "maxJobsPerCompany": 50,
  "maxItems": 5
}
```

#### 5. Multiple countries in one run

```json
{
  "mode": "companies",
  "urls": [
    "https://my.jobstreet.com/companies/aeon-168552725744507",
    "https://sg.jobstreet.com/companies/dbs-bank-168553715857256",
    "https://ph.jobstreet.com/companies/anz-168542457657046",
    "https://id.jobstreet.com/companies/bank-negara-indonesia-168551798610106"
  ],
  "maxReviewsPerCompany": 3
}
```

### Input parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | string | `"companies"` | `companies` (one row per company, top reviews embedded) or `reviews` (one row per review). |
| `country` | string | `"MY"` | Market: `MY`, `SG`, `PH`, or `ID`. Auto-detected per URL when URLs are given. |
| `urls` | array | `[]` | Company URLs. Highest priority. Overrides keywords and industry. |
| `keywords` | string | (empty) | Company-name search. Combined with industry, narrows the industry to matching names. |
| `industry` | string | ICT | Browse up to 30 companies in an industry. Leave blank for keyword or URL sourcing. |
| `maxReviewsPerCompany` | integer | `5` | Reviews embedded (companies mode) or fanned out (reviews mode) per company. `0` uses the 30-review snapshot. |
| `reviewSort` | string | `"helpful"` | `helpful` (most upvoted first) or `recent` (newest first). |
| `includeAISummary` | boolean | `true` | Companies mode. Embed the AI-written review summary when the company has one. |
| `includeJobs` | boolean | `false` | Companies mode. Embed the company's open jobs. |
| `maxJobsPerCompany` | integer | `50` | Cap on embedded jobs per company. `0` means all open jobs. |
| `maxItems` | integer | `0` | Total cap (companies or reviews depending on mode). `0` means unlimited. |
| `maxTimeSec` | integer | `0` | Wall-clock cap in seconds. `0` means no limit. Partial results are flushed. |
| `proxyConfiguration` | object | Apify datacenter | Proxy settings. See below. |

### Output example (companies mode)

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

```json
{
  "id": "000000000000000",
  "name": "Sample Company",
  "url": "https://my.jobstreet.com/companies/sample-company-000000000000000",
  "region": "MY",
  "industry": "Information & Communication Technology",
  "ratingOverall": 4,
  "reviewCount": 450,
  "recommendedPercent": 86,
  "salaryRating": 3,
  "totalJobs": 75,
  "categoryRatings": [
    { "description": "Work/Life balance", "rating": 4, "count": 120 },
    { "description": "Career development", "rating": 3, "count": 118 }
  ],
  "perks": ["Medical coverage", "Annual bonus"],
  "topReviews": [
    {
      "reviewId": "000000000000000",
      "title": "Good place to start a career",
      "pros": "Supportive team, on-time salary.",
      "cons": "Limited career progression.",
      "jobTitle": "Software Engineer",
      "overallRating": 4,
      "recommended": true,
      "createdAt": "1 January 2026"
    }
  ],
  "topReviewCount": 1,
  "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 company and review data fine through it. If your account cannot reach datacenter proxy, the actor automatically falls back 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).

# Actor input Schema

## `mode` (type: `string`):

companies -> one row per company with embedded top reviews. reviews -> one row per individual review, fanned out across the resolved companies.

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

Country market. MY = my.jobstreet.com, SG = sg.jobstreet.com, PH = ph.jobstreet.com, ID = id.jobstreet.com. When you paste URLs, the country is auto-detected per URL and overrides this field.

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

Paste JobStreet company URLs (e.g. https://my.jobstreet.com/companies/aeon-168552725744507). Country auto-detected per URL; mix MY, SG, PH and ID freely.

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

Optional. Search by company name (e.g. 'maybank', 'grab', 'shopee'). Combined with 'Industry' below, the actor browses the industry then filters to companies whose name contains the keyword.

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

Optional. Select an industry to browse up to 30 companies in it. Combined with 'Keywords' above, narrows the industry to companies whose name matches the keyword. Leave blank to use keyword-only or URL-only sourcing.

## `maxReviewsPerCompany` (type: `integer`):

Companies mode: how many top reviews to embed per company record (1-30 from the SSR snapshot, more triggers extra requests). Reviews mode: how many reviews to fan out per company. Set 0 to use the SSR default of 30.

## `reviewSort` (type: `string`):

How reviews are ordered. 'helpful' = most upvoted first (best for companies-mode top-N). 'recent' = newest first (best for ongoing sentiment monitoring).

## `includeAISummary` (type: `boolean`):

Companies mode only. When the company has one, a short AI-generated summary of its reviews (pros, cons, themes) is embedded. No extra request, already in the SSR. Disable to drop the field.

## `includeJobs` (type: `boolean`):

Companies mode only. When true, embeds a `jobs` array on each company record with the company's currently-listed jobs (id, title, location, salary, workType, listingDate, url). Adds 1-2 extra API calls per company. Capped by `maxJobsPerCompany`.

## `maxJobsPerCompany` (type: `integer`):

Hard cap on jobs embedded per company when `includeJobs` is true. The actor pulls jobs page-by-page and stops as soon as this many matching jobs have been collected (or the company runs out). Set 0 to pull every open job for the company. This is THE cap on jobs; no other field overrides it.

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

Total cap across all URLs / search results. Set to 0 (default) for unlimited. In reviews mode counts individual reviews; in companies mode counts companies. The `maxJobsPerCompany` cap applies independently to each company's embedded jobs and is not affected by this field.

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

Wall-clock cap. When exceeded, the actor flushes whatever it already fetched and exits cleanly. 0 = no time limit.

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

Defaults to Apify datacenter proxy (free-tier friendly). For production workloads, set apifyProxyGroups to \["RESIDENTIAL"] on a paid Apify plan.

## Actor input object example

```json
{
  "mode": "companies",
  "country": "MY",
  "urls": [],
  "keywords": "bank",
  "industry": "Information & Communication Technology",
  "maxReviewsPerCompany": 10,
  "reviewSort": "helpful",
  "includeAISummary": true,
  "includeJobs": false,
  "maxJobsPerCompany": 100,
  "maxItems": 100,
  "maxTimeSec": 300,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": []
  }
}
```

# Actor output Schema

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

Dataset items

# 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-companies-reviews-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-companies-reviews-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-companies-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "JobStreet $1💰 Companies | Reviews Scraper",
        "description": "From $1/1K. Pull JobStreet company profiles and employee reviews across Malaysia, Singapore, Indonesia, and the Philippines. Search by company, industry, or URL. Returns rich company records with embedded reviews or flat review datasets, with optional open job listings included.",
        "version": "1.0",
        "x-build-id": "RyLcU0g6imrW2bIcm"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~jobstreet-companies-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-jobstreet-companies-reviews-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-companies-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-jobstreet-companies-reviews-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-companies-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-jobstreet-companies-reviews-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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "companies",
                            "reviews"
                        ],
                        "type": "string",
                        "description": "companies -> one row per company with embedded top reviews. reviews -> one row per individual review, fanned out across the resolved companies.",
                        "default": "companies"
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "MY",
                            "SG",
                            "PH",
                            "ID"
                        ],
                        "type": "string",
                        "description": "Country market. MY = my.jobstreet.com, SG = sg.jobstreet.com, PH = ph.jobstreet.com, ID = id.jobstreet.com. When you paste URLs, the country is auto-detected per URL and overrides this field.",
                        "default": "MY"
                    },
                    "urls": {
                        "title": "Company URLs",
                        "type": "array",
                        "description": "Paste JobStreet company URLs (e.g. https://my.jobstreet.com/companies/aeon-168552725744507). Country auto-detected per URL; mix MY, SG, PH and ID freely.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "keywords": {
                        "title": "Keywords",
                        "type": "string",
                        "description": "Optional. Search by company name (e.g. 'maybank', 'grab', 'shopee'). Combined with 'Industry' below, the actor browses the industry then filters to companies whose name contains the keyword."
                    },
                    "industry": {
                        "title": "Industry",
                        "enum": [
                            "",
                            "Accounting",
                            "Administration & Office Support",
                            "Advertising, Arts & Media",
                            "Banking & Financial Services",
                            "Call Centre & Customer Service",
                            "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",
                            "Sport & Recreation",
                            "Trades & Services"
                        ],
                        "type": "string",
                        "description": "Optional. Select an industry to browse up to 30 companies in it. Combined with 'Keywords' above, narrows the industry to companies whose name matches the keyword. Leave blank to use keyword-only or URL-only sourcing.",
                        "default": "Information & Communication Technology"
                    },
                    "maxReviewsPerCompany": {
                        "title": "Max reviews per company",
                        "minimum": 0,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Companies mode: how many top reviews to embed per company record (1-30 from the SSR snapshot, more triggers extra requests). Reviews mode: how many reviews to fan out per company. Set 0 to use the SSR default of 30.",
                        "default": 5
                    },
                    "reviewSort": {
                        "title": "Review sort order",
                        "enum": [
                            "helpful",
                            "recent"
                        ],
                        "type": "string",
                        "description": "How reviews are ordered. 'helpful' = most upvoted first (best for companies-mode top-N). 'recent' = newest first (best for ongoing sentiment monitoring).",
                        "default": "helpful"
                    },
                    "includeAISummary": {
                        "title": "Include AI review summary",
                        "type": "boolean",
                        "description": "Companies mode only. When the company has one, a short AI-generated summary of its reviews (pros, cons, themes) is embedded. No extra request, already in the SSR. Disable to drop the field.",
                        "default": true
                    },
                    "includeJobs": {
                        "title": "Include open jobs",
                        "type": "boolean",
                        "description": "Companies mode only. When true, embeds a `jobs` array on each company record with the company's currently-listed jobs (id, title, location, salary, workType, listingDate, url). Adds 1-2 extra API calls per company. Capped by `maxJobsPerCompany`.",
                        "default": false
                    },
                    "maxJobsPerCompany": {
                        "title": "Max jobs per company",
                        "minimum": 0,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Hard cap on jobs embedded per company when `includeJobs` is true. The actor pulls jobs page-by-page and stops as soon as this many matching jobs have been collected (or the company runs out). Set 0 to pull every open job for the company. This is THE cap on jobs; no other field overrides it.",
                        "default": 50
                    },
                    "maxItems": {
                        "title": "Max items to return",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Total cap across all URLs / search results. Set to 0 (default) for unlimited. In reviews mode counts individual reviews; in companies mode counts companies. The `maxJobsPerCompany` cap applies independently to each company's embedded jobs and is not affected by this field.",
                        "default": 0
                    },
                    "maxTimeSec": {
                        "title": "Max run time (seconds)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Wall-clock cap. When exceeded, the actor flushes whatever it already fetched and exits cleanly. 0 = no time limit.",
                        "default": 0
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Defaults to Apify datacenter proxy (free-tier friendly). For production workloads, set apifyProxyGroups to [\"RESIDENTIAL\"] on a paid Apify 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
