# AmbitionBox Reviews Scraper (`memo23/ambitionbox-reviews-scraper`) Actor

Scrape AmbitionBox employee reviews — 7 named sub-ratings, work policy (WFO/WFH/Hybrid), job profile, location, verified flag, employer responses. Flat per-review rows with full company aggregate (rating distribution, top mentions, top job profiles) denormalized. Akamai-aware via Apify IN.

- **URL**: https://apify.com/memo23/ambitionbox-reviews-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Automation, Agents, Lead generation
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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.

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

## AmbitionBox Reviews Scraper

Scrape employee reviews from **AmbitionBox.com** — 7 structured sub-ratings, work policy, location, job profile, employer responses, and a full company aggregate (rating distribution + top mentions + top job profiles) on every row. **Paste a bare company slug like `tcs` and get back self-contained flat rows ready for CSV.**

![How AmbitionBox Reviews Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-ambitionbox.png)

### Why this actor

AmbitionBox is the dominant employee-review platform in India (the Glassdoor of the Indian B2B market), owned by Info Edge / Naukri. It's behind **Akamai Bot Manager** with explicit per-region rules — direct requests and US/GB residential proxies get blocked with a 2.3 KB cookie-challenge interstitial, and `/jobs/{slug}-jobs` URLs are hard-403'd across every proxy.

The actor handles all that for you:

- **Apify Residential IN** routing (only pool that returns clean 200 OK)
- **`__NEXT_DATA__` extraction** — AmbitionBox runs Next.js with full server-side data hydration. One `JSON.parse` unlocks 73 fields per page, including a clean `reviewsData[]` array with **53 fields per review**
- **Slug auto-canonicalisation** — `tata-consultancy-services` → `tcs` (AmbitionBox 301s the long form). Paste any of `/overview/`, `/reviews/`, `/salaries/`, or `/interviews/` URLs and they all resolve to the same canonical reviews surface
- **Auto-pagination** — 20 reviews per page, walks until `maxItems` rows are emitted **for that company** (each company gets its own budget)
- **One flat row per review** — every row carries the full company aggregate denormalized, so CSV consumers don't need to join

### Use cases

- **Competitive intelligence** — compare sub-rating profiles (Salary, Skill Dev, Work-Life, Job Security…) across employers
- **Salary benchmarking adjacent** — pair with the salary surface to cross-reference review-rated culture with paid compensation
- **Reviewer firmographics** — every row carries job profile (System Engineer), location (Pune), division (Software Development), and employment type (permanent/contract)
- **Work-policy analysis** — `workPolicy: "WFO" | "WFH" | "Hybrid"` is a first-class field
- **Reputation monitoring** — track `verified`, `isContested`, and `employerResponse` to spot disputed reviews and vendor replies

### Input

| Field | Type | Required | Notes |
|---|---|---|---|
| `startUrls` | `string[]` | yes | Mix of bare slugs (`tcs`) and AmbitionBox URLs. `/overview/`, `/reviews/`, `/salaries/`, `/interviews/` all resolve to the same canonical reviews scrape. **`/jobs/{slug}-jobs` URLs are rejected** (Akamai blocks them). |
| `maxItems` | `integer` | no | Maximum review rows emitted **per company URL**. 3 companies × `maxItems: 100` → up to 300 total rows. Each row = one paid `outputrecord`. Default `1000`. Free-tier users have a hidden global ceiling of `100` rows. |
| `maxConcurrency` | `integer` | no | Parallel HTTP requests across companies. Sweet spot 3–5 via Apify Residential IN. Default `4`. |
| `maxRequestRetries` | `integer` | no | Per-URL retry budget on Akamai cookie-shell responses, proxy CONNECT failures, and network errors. Each retry rotates the proxy session with mild exponential backoff. Default `6`. |
| `proxy` | object | no | **Apify Residential IN required** — direct and US/GB get blocked. Default is wired correctly. |

#### Example input

```json
{
  "startUrls": ["tcs", "infosys", "wipro"],
  "maxItems": 100,
  "maxConcurrency": 4,
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "IN" }
}
````

That yields **up to 300 review rows** — 100 per company across 3 companies, 5 pages each.

### Output schema

Every row has `rowType: "review"`. One flat row per review with **53 fields** + the **company aggregate** nested under `companyAggregate`.

```jsonc
{
  "rowType":            "review",
  "reviewsUrl":         "https://www.ambitionbox.com/reviews/tcs-reviews",

  // ── Company identity (denormalized) ──
  "companyId":          42,                              // stable AmbitionBox company ID
  "companyName":        "TCS",
  "companyUrlName":     "tcs",

  // ── Per-review fields ──
  "reviewId":           79702411,
  "reviewTitle":        "rated by a System Engineer in Pune",
  "reviewUrl":          "https://www.ambitionbox.com/reviews/tcs-reviews?rid=79702411",
  "overallRating":      2,                                // 1-5
  "subRatings": {                                         // 7 structured sub-ratings
    "Salary":              1,
    "Skill development":   2,
    "Job security":        4,
    "Promotions":          1,
    "Work satisfaction":   2,
    "Company culture":     3,
    "Work-life balance":   3
  },
  "likesText":          "Job security \nOnsite opportunities",
  "disLikesText":       "Value of employees is like labour in India\n…",
  "likesChip":          [],                               // optional structured pros chips
  "dislikesChip":       [],                               // optional structured cons chips
  "workDescriptionText": null,
  "benefitsText":       null,
  "workDescriptionTags": [],

  "jobProfile":         { "id": "29", "name": "System Engineer", "slug": "system-engineer" },
  "jobLocation":        { "id": "9",  "name": "Pune",            "slug": "pune" },
  "division":           "Software Development",
  "employmentType":     "permanent",
  "workPolicy":         "WFO",                            // "WFO" / "WFH" / "Hybrid"
  "beyondWorkHours":    "Occasionally",
  "workLabels": {
    "travelTags":       ["No Travel"],
    "workTimeMonitor":  ["Strict Timings"],
    "workDays":         ["5 days"]
  },

  "publishedAt":             "2026-05-14T14:50:46Z",      // ISO 8601
  "modifiedAt":              "2026-05-14T15:54:48Z",
  "modifiedAtHumanReadable": "14 May 2026",                // derived UI-friendly date
  "reviewerName":            "Anonymous",                  // or actual name
  "reviewerId":              0,                            // 0 when anonymous
  "currentJob":              null,                         // current employee at posting time
  "startDate":               null,                         // rarely populated by reviewers
  "endDate":                 null,
  "reviewerExperience":      null,                         // free-text summary when present
  "continuedYears":          7,                            // tenure
  "views":                   0,                            // AmbitionBox view counter
  "verified":                true,
  "isContested":             false,
  "isFeaturedReview":        false,
  "helpfulCount":            null,
  "notHelpfulCount":         null,
  "employerResponse":        null,                         // { text, respondedAt } when present
  "isEmployerResponded":     false,
  "contentTypeLabel":        ["LATEST"],

  // ── Company aggregate — same on every row from the same company ──
  "companyAggregate": {
    "companyId":              42,
    "companyName":            "TCS",
    "urlName":                "tcs",
    "companyUrl":             "https://www.ambitionbox.com/overview/tcs-overview",
    "rating":                 { "average": 3.3, "count": 114252, "bestRating": 5, "worstRating": 1 },
    "ratingDistribution": [
      { "stars": 5, "count": 37015, "percentage": 32.4 },
      { "stars": 4, "count": 33323, "percentage": 29.2 },
      { "stars": 3, "count": 23039, "percentage": 20.2 },
      { "stars": 2, "count": 10000, "percentage":  8.8 },
      { "stars": 1, "count": 10875, "percentage":  9.5 }
    ],
    "subRatingAverages": {                                // company-wide sub-rating means
      "jobSecurity":       3.8,
      "workLifeBalance":   3.5,
      "salaryAndBenefits": 2.5,
      "skillDevelopment":  3.2,
      "workSatisfaction":  3.0,
      "companyCulture":    3.2,
      "careerGrowth":      2.3
    },
    "topMentions": {                                      // most-discussed themes across all reviews
      "positive":          ["Job Security", "Salary", "Work Life Balance", "Appraisal", "Work Culture", "Learning", "Career Growth", "Senior Management"],
      "negative":          []
    },
    "topJobProfiles": [                                   // most-reviewed roles + reviewer count
      { "name": "System Engineer",          "slug": "system-engineer",          "count": 15087 },
      { "name": "IT Analyst",               "slug": "it-analyst",               "count": 6251  },
      { "name": "AST Consultant",           "slug": "ast-consultant",           "count": 4720  },
      { "name": "Assistant System Engineer","slug": "assistant-system-engineer","count": 3994  },
      { "name": "Process Associate",        "slug": "process-associate",        "count": 3372  }
    ],
    "topJobLocations":        [],                         // top locations (when AmbitionBox surfaces them)
    "totalReviews":           114252,
    "pagesScraped":           5
  },

  "scrapedAt":          "2026-05-15T04:08:39.019Z"
}
```

### How it works

1. **Auto-classify input** — `tcs` → `/reviews/tcs-reviews`. URL variants (`/overview/`, `/salaries/`, `/interviews/`) dedupe to the same canonical scrape. `/jobs/*` URLs are rejected with a clear log line — Akamai hard-403s them across every proxy.
2. **Fetch via Apify Residential IN** — `impit` with Firefox TLS fingerprint. Direct connections and US/GB residential get the Akamai cookie-shell (2.3 KB stub); only IN residential reliably returns the full 716 KB page.
3. **Extract `__NEXT_DATA__`** — single `JSON.parse` of the inline `<script id="__NEXT_DATA__">` blob. Unlocks `pageProps.reviewsData[20]` plus aggregate fields (`ratingsData`, `ratingDistribution`, `topMentions`, `topJobProfiles`, `companyHeaderData`).
4. **Paginate** — `?page=N` until empty or `maxItems` reviews are emitted for that company. 20 reviews per page.
5. **Emit flat rows** — one `outputrecord` per review. `companyAggregate` denormalized on every row so CSV consumers get a self-contained file.

### What makes this different from other AmbitionBox actors

We surveyed all AmbitionBox actors on Apify Store (3 specialists, ~57 combined users). Direct head-to-head: **53 per-review fields vs 31** on the closest competitor — and we also bundle the company aggregate on every row, which they don't ship at all.

| Capability | Ours | Closest competitor |
|---|---|---|
| Per-review fields | **53** | 31 |
| `subRatings` shape | keyed object (`{Salary:1, Skill development:2, ...}`) — CSV-friendly | array of `{name, rating}` objects |
| `jobProfile` / `jobLocation` | structured `{id, name, slug}` — joinable | flat string only |
| Dates | ISO 8601 (`"2026-05-14T14:50:46Z"`) + human-readable derived | ambiguous-timezone strings only |
| `employerResponse` text | full `{text, respondedAt}` object | only `isEmployerResponded` boolean |
| `workLabels` (travel/timing/days) | ✅ surfaced | ❌ not in output |
| `likesChip` / `dislikesChip` / `workDescriptionTags` | ✅ surfaced | ❌ not in output |
| `isContested` / `contentTypeLabel` / `reviewerExperience` | ✅ surfaced | partial / missing |
| Company aggregate denormalized | ✅ on every row (rating distribution + top mentions + top job profiles with counts) | ❌ not available — separate API call needed |
| `/jobs/*` Akamai block | ✅ documented + auto-routed to `/reviews/` | ❌ silent failure |
| All 4 surfaces (overview/reviews/salaries/interviews) in one pipeline | ✅ | ❌ split across 3 separate actors |

### Notes & limitations

- **`/jobs/*` URLs are not scrapable.** Akamai hard-403s the jobs surface across every proxy and UA combination we tested. The actor rejects these URLs with a clear message and routes you at `/reviews/{slug}-reviews` for the same company.
- **Apify Residential IN required.** Direct, US, and GB residential proxies get the Akamai cookie-shell interstitial. The actor defaults the proxy block to `RESIDENTIAL` + `IN` — don't override unless you know what you're doing.
- **`employerResponse` is sparse.** Most Indian employers (TCS, Infosys, Wipro) don't respond to AmbitionBox reviews. The field is `null` for ~99% of rows in practice — by design, not a bug.
- **`helpfulCount` / `notHelpfulCount`** can come back `null` from AmbitionBox's payload. They're surfaced when populated but we don't synthesize.
- **Workplace fields fill rate** — `likesText` ≈ 85%, `disLikesText` ≈ 88%, `workDescriptionText` ≈ 5% (rarely filled by reviewers), `benefitsText` similar. This matches AmbitionBox's own UI — those are optional reviewer fields.

### FAQ

**Which company URLs work?**
Bare slugs like `tcs` or `infosys`, plus any of the four AmbitionBox company surfaces — `/overview/{slug}-overview`, `/reviews/{slug}-reviews`, `/salaries/{slug}-salaries`, `/interviews/{slug}-interviews`. All four resolve to the same canonical reviews scrape, so paste whichever URL you have.

**Why are `/jobs/{slug}-jobs` URLs rejected?**
Akamai Bot Manager hard-403s the jobs surface across every proxy and UA we tested (Apify Residential IN included). The actor rejects these URLs upfront with a clear log line rather than silently failing — paste the `/reviews/` URL for the same company instead.

**Do I get one row per company or one per review?**
One row per review. Each row carries the full `companyAggregate` (rating distribution, top mentions, top job profiles) denormalized, so a CSV export gives you self-contained per-review records without needing a join.

**What does each `outputrecord` charge cover?**
One review row with all 53 fields plus the company aggregate. There's no extra charge for the aggregate — it's bundled. `maxItems` is **per-company URL**, so a `maxItems: 100` run with 3 companies = up to 300 charges.

**Can I skip the proxy?**
No. AmbitionBox runs Akamai with explicit per-region rules. Direct connections and US/GB residential get a 2.3 KB cookie-challenge interstitial. The actor defaults to Apify Residential IN — leave it alone unless you know you have a working IN residential pool elsewhere.

**Why is `employerResponse` always `null` in my output?**
\~99% of Indian employers (TCS, Infosys, Wipro) don't respond to AmbitionBox reviews. The field is populated when present but most rows will be `null`. Same for `helpfulCount` / `notHelpfulCount` — AmbitionBox doesn't always send them in the payload.

### Support

- **Bugs / feature requests** — open an issue on the GitHub repo
- **Custom exports / tailored fields** — drop a note via the Apify Store contact form
- **Other actors** — see my Apify Store profile for the rest of the catalog

***

### ⚠️ Disclaimer

This Actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by** AmbitionBox, Info Edge (India) Ltd., Naukri, or any of their subsidiaries. All trademarks mentioned are the property of their respective owners.

The scraper accesses only **publicly visible** content rendered server-side by AmbitionBox — no login bypass, no authenticated endpoints, no API-key forgery, no CAPTCHA solving. The actor honours AmbitionBox's `/jobs/*` hard-block (we reject those URLs rather than try to bypass them).

Users are responsible for:

- Complying with AmbitionBox's Terms of Service
- Respecting reviewer privacy — most reviewers post anonymously (`reviewerName: "Anonymous"`, `reviewerId: 0`); do not attempt to de-anonymize
- Following the Indian DPDP Act 2023 + your jurisdiction's data-protection laws (GDPR, CCPA, etc.) when storing, processing, or republishing review data
- Not using the scraper to contact or harass reviewers
- Not republishing scraped data in a way that competes commercially with AmbitionBox

***

### SEO Keywords

ambitionbox scraper, scrape ambitionbox, ambitionbox reviews scraper, ambitionbox api, ambitionbox.com scraper, Apify ambitionbox, employee reviews scraper india, glassdoor india alternative, tcs reviews scraper, infosys reviews scraper, wipro reviews scraper, india tech company reviews, employer ratings india, work-life balance ratings india, indian it company reviews, work culture ratings, salary reviews india, employee review aggregator, employer reputation data india, akamai bot manager bypass, apify residential proxy india, next.js data extraction

# Actor input Schema

## `startUrls` (type: `array`):

Paste any mix of:
• Bare company slug — `tcs`, `infosys`, `wipro`
• Reviews URL — `https://www.ambitionbox.com/reviews/{slug}-reviews`
• Overview URL — `https://www.ambitionbox.com/overview/{slug}-overview` (auto-rewrites to reviews)
• Salaries/Interviews URLs — also auto-rewrite to the same company's reviews surface

⚠️ `/jobs/{slug}-jobs` URLs are HARD-BLOCKED by Akamai and will be rejected — use `/reviews/` instead for the same company.

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

Maximum review rows emitted **per company URL**. Pass 3 companies with `maxItems: 100` → up to 300 total rows (100 each). Pass 1 company with `maxItems: 1000` → up to 1000 rows from that company. Each row is one paid `outputrecord` event. Default 1000. Free-tier users are additionally capped at 100 total rows across the whole run.

## `maxConcurrency` (type: `integer`):

Parallel HTTP requests across companies. AmbitionBox is Akamai-protected — concurrency 3-5 is the sweet spot via Apify Residential IN.

## `maxRequestRetries` (type: `integer`):

Per-URL retry budget on network errors, proxy CONNECT failures, and Akamai cookie-shell responses. Each retry rotates the proxy session. Default 6.

## `proxy` (type: `object`):

Apify Residential IN required. AmbitionBox is Akamai-protected — direct connections and US/GB residential proxies get the cookie-shell interstitial. Only IN residential returns clean 200 OK responses with full page content.

## Actor input object example

```json
{
  "startUrls": [
    "tcs",
    "infosys",
    "https://www.ambitionbox.com/reviews/wipro-reviews"
  ],
  "maxItems": 1000,
  "maxConcurrency": 4,
  "maxRequestRetries": 6,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# 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 = {
    "startUrls": [
        "tcs",
        "infosys",
        "https://www.ambitionbox.com/reviews/wipro-reviews"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IN"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/ambitionbox-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 = {
    "startUrls": [
        "tcs",
        "infosys",
        "https://www.ambitionbox.com/reviews/wipro-reviews",
    ],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IN",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/ambitionbox-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 '{
  "startUrls": [
    "tcs",
    "infosys",
    "https://www.ambitionbox.com/reviews/wipro-reviews"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}' |
apify call memo23/ambitionbox-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "AmbitionBox Reviews Scraper",
        "description": "Scrape AmbitionBox employee reviews — 7 named sub-ratings, work policy (WFO/WFH/Hybrid), job profile, location, verified flag, employer responses. Flat per-review rows with full company aggregate (rating distribution, top mentions, top job profiles) denormalized. Akamai-aware via Apify IN.",
        "version": "0.1",
        "x-build-id": "485yDONSMjS6nceOX"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~ambitionbox-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-ambitionbox-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/memo23~ambitionbox-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-ambitionbox-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/memo23~ambitionbox-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-ambitionbox-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": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "AmbitionBox URLs or bare slugs",
                        "type": "array",
                        "description": "Paste any mix of:\n• Bare company slug — `tcs`, `infosys`, `wipro`\n• Reviews URL — `https://www.ambitionbox.com/reviews/{slug}-reviews`\n• Overview URL — `https://www.ambitionbox.com/overview/{slug}-overview` (auto-rewrites to reviews)\n• Salaries/Interviews URLs — also auto-rewrite to the same company's reviews surface\n\n⚠️ `/jobs/{slug}-jobs` URLs are HARD-BLOCKED by Akamai and will be rejected — use `/reviews/` instead for the same company.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max reviews per company URL",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum review rows emitted **per company URL**. Pass 3 companies with `maxItems: 100` → up to 300 total rows (100 each). Pass 1 company with `maxItems: 1000` → up to 1000 rows from that company. Each row is one paid `outputrecord` event. Default 1000. Free-tier users are additionally capped at 100 total rows across the whole run.",
                        "default": 1000
                    },
                    "maxConcurrency": {
                        "title": "Max parallel requests",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Parallel HTTP requests across companies. AmbitionBox is Akamai-protected — concurrency 3-5 is the sweet spot via Apify Residential IN.",
                        "default": 4
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Per-URL retry budget on network errors, proxy CONNECT failures, and Akamai cookie-shell responses. Each retry rotates the proxy session. Default 6.",
                        "default": 6
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Residential IN required. AmbitionBox is Akamai-protected — direct connections and US/GB residential proxies get the cookie-shell interstitial. Only IN residential returns clean 200 OK responses with full page content.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "IN"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
