# Angi.com \[Only $0.8💰] Scraper (Resilient Leads & Profiles) (`memo23/angi-scraper`) Actor

\[Only $0.8💰]  Extract high-quality contractor leads from Angi.com (Angie's List). Scrape business names, phone numbers, full addresses, ratings, review counts, and service categories. Just input a ZIP code or category link to instantly get structured local business data in JSON or CSV.

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

## Pricing

from $0.90 / 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

## Angi.com Scraper (Leads & Profiles)

#### How it works

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

**Unlock the Full Power of Angi Home Services Data** - The most resilient scraper for extracting high-quality leads, professional profiles, and business details from Angi.com (formerly Angie's List). Whether you're conducting market research, performing competitor analysis, or building a local service database, our scraper delivers precise, structured data at scale.

*"From garage builders and plumbers to roofers and electricians, turn Angi's massive directory into your strategic advantage."*

### Why Use This Scraper?

- **Multiple Starting Points**: Start from the entire US directory, a specific state, a city, a service category, or directly input professional profile URLs.
- **Enterprise-Grade Resilience**: Implements parallel TLS fingerprint racing (`impit`) and intelligent proxy rotation to bypass aggressive Cloudflare and anti-bot blocks.
- **Deep Directory Discovery**: Automatically discovers nested states → cities → categories → professional profiles without manual pagination.
- **Structured Output**: Extract clean, verified business names, addresses, phone numbers, and service categories.
- **Export Ready**: Supports deeply nested JSON for developers or flattened CSV formats for CRM imports.

### Overview

The Angi.com Scraper is designed to seamlessly navigate Angi's Next.js infrastructure. By relying on a custom internal handler rather than standard browser automation, it maintains high throughput and bypasses limitations that block standard crawlers. The output focuses primarily on **business profile rows**, regardless of where the scrape starts.

### Supported Inputs

You can mix and match different types of Angi URLs in the `startUrls` input:

- **US Directory Root**: `https://www.angi.com/companylist/us/` (Scrapes the entire US)
- **Near Me Root**: `https://www.angi.com/nearme/`
- **State Hubs**: `https://www.angi.com/companylist/us/tx/` (Scrapes all cities in Texas)
- **City Hubs**: `https://www.angi.com/companylist/us/al/adamsville/`
- **Category Lists**: `https://www.angi.com/nearme/garage-builders/`
- **Direct Profiles**: `https://www.angi.com/companylist/us/al/cullman/access-garage-doors-of-birmingham-reviews-1.htm`
- **ZIP Codes**: Just input a 5-digit ZIP code like `90210` and the scraper will automatically resolve it to the corresponding city hub!

### Use Cases

| Audience | Example Use Case |
|---|---|
| **Sales & Lead Gen** | Build targeted contact lists of local contractors (e.g., all plumbers in Texas) with verified phone numbers. |
| **Market Researchers** | Analyze service density and categorize businesses by specific niches across different ZIP codes. |
| **Marketing Agencies** | Offer specialized marketing or SEO services to home service professionals found on Angi. |
| **Competitor Analysis** | Track local competitors, their listed services, operating hours, and service areas. |

### How It Works

```mermaid
flowchart LR
    A[Start URLs] --> B{URL Type?}
    
    B -->|Directory/Hub| C[Discover States & Cities]
    B -->|Category| D[Discover Businesses]
    B -->|Profile| E[Direct Extraction]
    
    C --> D
    D --> E
    
    E --> F[Next.js JSON Payload]
    F --> G[(Apify Dataset)]
    
    style A fill:#2e86de,stroke:#000,color:#fff
    style B fill:#feca57,stroke:#000,color:#000
    style E fill:#10ac84,stroke:#000,color:#fff
    style G fill:#ff6b6b,stroke:#000,color:#fff
````

1. **You provide URLs**: Input one or more Angi directory, category, or profile URLs.
2. **Actor categorizes inputs**: The scraper detects the URL type (hub, state, city, category, or profile).
3. **Deep fan-out**: For directory URLs, the scraper automatically navigates the hierarchy to discover individual business profiles.
4. **Data extraction**: The actor fetches the Next.js build data for each profile, extracting robust business information.
5. **Dataset export**: The extracted profiles are saved to your Apify dataset, ready for JSON or CSV download.

### Input Configuration

Here is a typical configuration. The `useInternalHandler` flag is enabled by default to ensure maximum anti-bot resilience.

```json
{
  "startUrls": [
    { "url": "https://www.angi.com/nearme/garage-builders/" }
  ],
  "maxItems": 500,
  "flattenDatasetOutput": true,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

### Output Overview

The scraper's primary dataset items are **business profile rows**.

- **Nested JSON**: Keeps objects intact (e.g., `contactInfo.address.city`).
- **Flattened (CSV-friendly)**: If you enable `flattenDatasetOutput`, nested objects are flattened into dot-separated keys (e.g., `contactInfo_address_city`), ensuring no columns are dropped in Excel.

#### Sample JSON Output

```json
{
  "url": "https://www.angi.com/companylist/us/al/cullman/access-garage-doors-of-birmingham-reviews-1.htm",
  "category": {
    "text": "Garage Builders",
    "title": "Garage Builders",
    "link": "/companylist/us/al/garage-builders.htm"
  },
  "state": {
    "text": "AL",
    "title": "AL Home Services",
    "href": "https://www.angi.com/companylist/us/al/"
  },
  "city": {
    "text": "Adamsville",
    "title": "Adamsville",
    "link": "/companylist/us/al/adamsville/"
  },
  "companyProfile": {
    "businessInfo": {
      "businessName": "Access Garage Doors of Birmingham",
      "amenities": {},
      "hoursInfo": {
        "hoursInfoDetail": [],
        "acceptsAppointments": false
      }
    },
    "contactInfo": {
      "emails": [],
      "phoneNumbers": ["205-555-0123"],
      "address": {
        "street1": "123 Business Way",
        "city": "Cullman",
        "state": "AL",
        "country": "United States",
        "postalCode": "35055"
      }
    },
    "logoUrl": "https://example.com/logo.png"
  }
}
```

#### Key Output Fields

##### Top-Level Group

- **`url`** (String): The direct URL to the professional's profile on Angi.
- **`category`** (Object): Details about the specific service niche.
- **`state`** (Object): Geographic state container.
- **`city`** (Object): Local city container.

##### Company Data

- **`companyProfile`** (Object): The core data container extracted from the profile page.
  - **`businessInfo`** (Object): Contains the official `businessName`, `amenities`, and `hoursInfo`.
  - **`contactInfo`** (Object): Contains arrays for `emails`, `phoneNumbers`, and the physical `address` object.
  - **`slug`** (Object): Canonical URL and aliases.
  - **`logoUrl`** (String): Full URL to the business logo.
  - **`images`** (Array): Gallery of business-provided images or project photos.

*Note: For ease of use in flat exports like CSV, key profile fields are also mirrored at the top level.*

### FAQ

**Can I scrape a specific category nationwide?**
Yes! Input a nationwide category URL like `https://www.angi.com/nearme/garage-builders/`, and the scraper will automatically navigate through all states and cities for that category.

**Does it extract emails?**
The scraper extracts emails only when they are publicly available on the business profile. Many businesses do not expose their email publicly.

**What is the "flattenDatasetOutput" option?**
Angi's data is deeply nested. If you want to download a CSV for Excel or Google Sheets, enable this option. It unpacks nested objects so that every data point gets its own column.

### Support

- For issues or feature requests, please use the **Issues** section of this actor.
- If you need customization or have questions, feel free to contact the author:
  - Author's website: <https://muhamed-didovic.github.io/>
  - Email: <muhamed.didovic@gmail.com>

### Additional Services

- **Request Customization**: Need specific filters or custom fields? <muhamed.didovic@gmail.com>
- **Dataset Purchases**: Looking for a pre-scraped dataset of all Angi pros? Reach out for pricing.
- **API Access**: High-volume API services available for enterprise integrations.

# Actor input Schema

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

Provide Angi URLs (e.g. /companylist/us/, /nearme/, state hubs, city hubs, category listings, or direct profiles).

## `zipCodes` (type: `array`):

Enter a list of 5-digit ZIP codes (e.g. 90210). The scraper will automatically resolve them to the correct Angi city directories.

## `zipCodeCategory` (type: `string`):

If providing ZIP codes, optionally select a service category to strictly scrape that category within the ZIP code. Leave default to scrape the whole city.

## `flattenDatasetOutput` (type: `boolean`):

If **true**, deep-flatten rows: nested objects → keys like businessInfo\_businessName; arrays of objects → name\_0\_field; primitive arrays comma-joined; empty objects as '{}'. Includes the duplicate companyProfile\_\* tree. If **false** (default), keep nested JSON.

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

Stop the run after pushing this many rows to the dataset (each profile save or missing\_profile\_payload row). Omit or **0** for no limit.

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

Retries after failures before giving up.

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

Specifies proxy servers that will be used by the scraper in order to hide its origin.<br><br>For details, see <a href='https://apify.com/apify/web-scraper#proxy-configuration' target='_blank' rel='noopener'>Proxy configuration</a> in README.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.angi.com/companylist/us/al/garage-builders.htm"
    },
    {
      "url": "https://www.angi.com/companylist/us/al/forestdale/garage-builders.htm"
    }
  ],
  "zipCodes": [],
  "zipCodeCategory": "",
  "flattenDatasetOutput": false,
  "maxRequestRetries": 100,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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": [
        {
            "url": "https://www.angi.com/companylist/us/al/garage-builders.htm"
        },
        {
            "url": "https://www.angi.com/companylist/us/al/forestdale/garage-builders.htm"
        }
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/angi-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": [
        { "url": "https://www.angi.com/companylist/us/al/garage-builders.htm" },
        { "url": "https://www.angi.com/companylist/us/al/forestdale/garage-builders.htm" },
    ],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/angi-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": [
    {
      "url": "https://www.angi.com/companylist/us/al/garage-builders.htm"
    },
    {
      "url": "https://www.angi.com/companylist/us/al/forestdale/garage-builders.htm"
    }
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/angi-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Angi.com [Only $0.8💰] Scraper (Resilient Leads & Profiles)",
        "description": "[Only $0.8💰]  Extract high-quality contractor leads from Angi.com (Angie's List). Scrape business names, phone numbers, full addresses, ratings, review counts, and service categories. Just input a ZIP code or category link to instantly get structured local business data in JSON or CSV.",
        "version": "0.0",
        "x-build-id": "OJ4VGRf6eHyvtze8c"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~angi-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-angi-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~angi-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-angi-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~angi-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-angi-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": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Provide Angi URLs (e.g. /companylist/us/, /nearme/, state hubs, city hubs, category listings, or direct profiles).",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "zipCodes": {
                        "title": "ZIP Codes",
                        "type": "array",
                        "description": "Enter a list of 5-digit ZIP codes (e.g. 90210). The scraper will automatically resolve them to the correct Angi city directories.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "zipCodeCategory": {
                        "title": "Category for ZIP Codes (Optional)",
                        "enum": [
                            "",
                            "air-duct-cleaning",
                            "animal-removal",
                            "tv-antenna",
                            "appliance-repair",
                            "architects",
                            "asbestos-removal",
                            "awnings",
                            "remodeling-basements",
                            "basement-waterproofing",
                            "basketball-goals",
                            "bathtub-refinishing",
                            "biohazard-remediation",
                            "blind-cleaning",
                            "cabinet-makers",
                            "cabinet-refinishing",
                            "carpet-cleaning",
                            "carpet",
                            "ceiling-fans",
                            "central-vacuum-cleaners",
                            "childproofing",
                            "chimney-caps",
                            "chimney-repair",
                            "chimney-sweep",
                            "cleaning",
                            "closets",
                            "computer-repair",
                            "concrete-driveways",
                            "concrete-repair",
                            "countertops",
                            "deck-maintenance",
                            "decks-and-porches",
                            "dock-building-repair",
                            "pet-fencing",
                            "doors",
                            "drain-cleaning",
                            "drain-pipe-installation",
                            "drapery-cleaning",
                            "driveway-gates",
                            "driveways",
                            "dryer-vent-cleaning",
                            "drywall",
                            "dumpster-rental",
                            "earthquake-retrofit",
                            "egress",
                            "electrical",
                            "epoxy-flooring",
                            "excavating",
                            "fencing",
                            "fireplaces",
                            "firewood",
                            "buffing-and-polishing",
                            "floor-cleaning",
                            "flooring",
                            "foundation-repair",
                            "fountains",
                            "furniture-refinishing",
                            "garage-builders",
                            "garage-doors",
                            "gas-logs",
                            "gas-leak-repair",
                            "contractor",
                            "generator-installers",
                            "glass-block",
                            "glass-and-mirrors",
                            "gas-grill-repair",
                            "gutter-cleaning",
                            "gutter-repair-replacement",
                            "handyman-service",
                            "landscaping-hardscaping-and-pavers",
                            "hardwood-flooring",
                            "hauling",
                            "heating-oil-companies",
                            "holiday-decorating",
                            "home-automation",
                            "home-builders",
                            "energy-audit",
                            "home-inspection",
                            "kitchen-and-bath-remodeling",
                            "home-security-systems",
                            "home-staging",
                            "home-theater-systems",
                            "home-warranty-companies",
                            "house-cleaning",
                            "exterior-painting",
                            "hurricane-shutters",
                            "hvac",
                            "insulation",
                            "interior-design",
                            "interior-painting",
                            "wrought-iron",
                            "lawn-irrigation",
                            "appraisals",
                            "land-surveying",
                            "landscaping-lighting",
                            "appliance-sales",
                            "landscaping",
                            "lawn-and-yard-work",
                            "lawn-mower-repair",
                            "lawn-fertilization-and-treatment",
                            "lead-testing-and-removal",
                            "leaf-removal",
                            "leather-and-vinyl-repair",
                            "lighting",
                            "locksmiths",
                            "mailbox-repair",
                            "marble-and-granite",
                            "masonry",
                            "metal-fabrication-and-restoration",
                            "remodeling-modular-and-mobile-home",
                            "mold-testing-and-remediation",
                            "moving",
                            "concrete-leveling",
                            "mulch-and-topsoil",
                            "plant-nurseries",
                            "oriental-rug-cleaning",
                            "outdoor-kitchens",
                            "sunroom-and-patio-remodeling",
                            "patios",
                            "pest-control",
                            "home-phone-service",
                            "phone-repair",
                            "piano-moving",
                            "plaster-plaster-repair",
                            "playground-equipment",
                            "plumbing",
                            "pool-and-spa-service",
                            "swimming-pools",
                            "pressure-washing",
                            "home-and-garage-organization",
                            "radon-testing",
                            "real-estate-agents",
                            "property-appraiser",
                            "roof-cleaning",
                            "roof-ice-and-snow-removal",
                            "roofing",
                            "roto-tilling",
                            "satellite-tv-service",
                            "screen-repair",
                            "septic-tank",
                            "sewer-cleaning",
                            "siding",
                            "skylights",
                            "small-appliance-repair",
                            "snow-removal",
                            "solar-panels",
                            "concrete-stamped-decorative",
                            "stone-and-gravel",
                            "structural-engineering",
                            "stucco",
                            "ceramic-tile",
                            "garbage-collection",
                            "tree-service",
                            "upholstering",
                            "upholstery-cleaning",
                            "wallpapering",
                            "wallpaper-removal",
                            "water-and-smoke-damage",
                            "water-heaters",
                            "water-softeners",
                            "welding",
                            "wells-and-pumps",
                            "window-cleaning",
                            "windows",
                            "hurricane-film",
                            "window-tinting",
                            "window-treatments",
                            "woodworking"
                        ],
                        "type": "string",
                        "description": "If providing ZIP codes, optionally select a service category to strictly scrape that category within the ZIP code. Leave default to scrape the whole city.",
                        "default": ""
                    },
                    "flattenDatasetOutput": {
                        "title": "Flatten output",
                        "type": "boolean",
                        "description": "If **true**, deep-flatten rows: nested objects → keys like businessInfo_businessName; arrays of objects → name_0_field; primitive arrays comma-joined; empty objects as '{}'. Includes the duplicate companyProfile_* tree. If **false** (default), keep nested JSON.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max dataset items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Stop the run after pushing this many rows to the dataset (each profile save or missing_profile_payload row). Omit or **0** for no limit."
                    },
                    "maxRequestRetries": {
                        "title": "Limit retries per request",
                        "type": "integer",
                        "description": "Retries after failures before giving up.",
                        "default": 100
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Specifies proxy servers that will be used by the scraper in order to hide its origin.<br><br>For details, see <a href='https://apify.com/apify/web-scraper#proxy-configuration' target='_blank' rel='noopener'>Proxy configuration</a> in README.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
