# Whop.com Leaderboards Scraper (PPR) (`memo23/whop-leaderboards-scraper`)

Unlock comprehensive insights from Whop.com leaderboards effortlessly with our scraper. Extract user rankings, statistics, reviews, profiles, and more for accurate, up-to-date market research, competitor analysis, and performance tracking. Save time and resources while gaining a competitive edge.

- **URL**: https://beta-securitybyobscurity.apify.com/memo23/whop-leaderboards-scraper.md
- **Developed by:** [Muhamed Didovic](https://beta-securitybyobscurity.apify.com/memo23) (community)
- **Categories:** Automation, Lead generation, Integrations
- **Stats:** 39 total users, 6 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 results

This Actor is paid per result. You are not charged for the Apify platform usage, but only a fixed price for dataset items the Actor outputs.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-result

# README

### Overview

Unlock the full potential of Whop.com data with our versatile Whop Leaderboards Scraper. This tool can handle multiple types of Whop URLs:

- Leaderboards URLs (e.g., https://whop.com/discover/leaderboards/)
- Filtered leaderboards URLs (e.g., https://whop.com/discover/leaderboards/f/most\_reviews\_24\_hours/)

Gather extensive leaderboard details such as rankings, user statistics, reviews, and more. This tool is designed to automate the data extraction process, ensuring you receive accurate and up-to-date information for market research, competitor analysis, and performance tracking. Save time and resources by leveraging our advanced scraper to explore Whop's comprehensive leaderboard data.

### Features

- Flexible URL Support:
  - Leaderboards: Scrape general leaderboard pages
  - Filtered Leaderboards: Extract data from filtered leaderboard pages
- Detailed Information: Extract comprehensive leaderboard details including:
  - User rankings
  - User statistics (e.g., active users count, reviews count)
  - User reviews and ratings
  - User profiles and images
- Customizable Data Extraction: Select which fields you want to extract
- Proxy Support: Built-in support for rotating proxies to handle rate limiting

### How to Use

1. **Set Up**: Create an account on Apify if you haven't already, and navigate to the Whop Leaderboards Scraper actor
2. **Configure Input**:
   - **Start URLs**: Enter the Whop URL you want to scrape (e.g., `https://whop.com/discover/leaderboards/f/most_reviews_24_hours/`).
3. **Set Scraping Options**: Configure additional scraping parameters:
   - Maximum number of items to scrape
   - Concurrency settings
   - Proxy configuration
   - Output format preferences
4. **Run the Scraper**: Launch the scraper and monitor progress
5. **Download Results**: Access your data in your preferred format (JSON, CSV, Excel)

### Input Data

The scraper accepts the following input parameters in JSON format:

```json
{
    "startUrls": {
        "title": "Start URLs",
        "type": "array",
        "description": "URLs to start with.",
        "editor": "requestListSources",
        "prefill": [
            {
                "url": "https://whop.com/discover/leaderboards/"
            },
            {
                "url": "https://whop.com/discover/leaderboards/f/most_reviews_24_hours/"
            }
        ]
    },
    "maxItems": {
        "title": "Max Items to scrape per crawl",
        "type": "integer",
        "description": "Maximum number of items to scrape per crawl. If not defined, all items will be scraped.",
        "default": 100
    },
    "maxConcurrency": {
        "title": "Max Concurrency",
        "type": "integer",
        "description": "Maximum number of pages that can be processed at the same time.",
        "default": 10
    },
    "minConcurrency": {
        "title": "Min Concurrency",
        "type": "integer",
        "description": "Minimum number of pages that will be processed at the same time.",
        "default": 1
    },
    "maxRequestRetries": {
        "title": "Max Request Retries",
        "type": "integer",
        "description": "Number of times the crawler will retry a failed request before giving up.",
        "default": 100
    },
    "proxy": {
        "sectionCaption": "Proxy configuration",
        "title": "Proxy configuration",
        "type": "object",
        "description": "Specifies proxy servers that will be used by the scraper in order to hide its origin.",
        "prefill": {
            "useApifyProxy": true,
            "apifyProxyGroups": ["RESIDENTIAL"]
        },
        "default": {
            "useApifyProxy": true,
            "apifyProxyGroups": ["RESIDENTIAL"]
        },
        "editor": "proxy"
    }
}
```

### Output Structure

Each leaderboard entry returned by the scraper will contain the following fields. Note that some fields may be empty or missing depending on the available information.

```json
{
    "__typename": "PublicAccessPass",
    "id": "prod_yrJn9Kp3mBY3Z",
    "title": "Dr. Profit Premium",
    "alreadyOwned": false,
    "headline": "Prescribe Your Path to Crypto Success",
    "createdAt": 1721418480,
    "route": "drprofit-trading",
    "whopRanking": 423,
    "activeUsersCount": 1646,
    "showMemberCount": true,
    "verified": true,
    "displayDiscoverStats": true,
    "defaultPlan": {
        "__typename": "PublicPlan",
        "baseCurrency": "usd",
        "name": "Renewal",
        "rawInitialPrice": 0,
        "rawRenewalPrice": 440,
        "id": "plan_SVFbakMWHMLbK",
        "planType": "renewal",
        "expirationDays": null,
        "directLink": "https://whop.com/checkout/plan_SVFbakMWHMLbK?d2c=true",
        "trialPeriodDays": null,
        "free": false,
        "releaseMethod": "buy_now",
        "stock": null,
        "inStock": true,
        "billingPeriod": 180,
        "appleIapPrice": null,
        "alreadyEntered": false,
        "visibility": "visible",
        "splitPayRequiredPayments": null
    },
    "users": {
        "__typename": "PublicProfileUserConnection",
        "nodes": [
            {
                "__typename": "PublicProfileUser",
                "id": "user_hzNddx5xLKaE1",
                "name": "uzair patel",
                "username": "uzair142",
                "createdAt": 1615837846,
                "profilePicSm": {
                    "__typename": "ImgSrcset",
                    "double": "https://img-v2-prod.whop.com/0_-tw7JiuUwHrRs0t5yd97DCjmY5_v_cqh7Ml7f_xMU/rs:fill:32:32/el:1/dpr:2/aHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXZhdGFycy80MDEwNzg4OTQ3NDIwNzc0NDAvZmU4MzU3NjVmOGE0NTg4NmIwMTczZGQ5NjFiNGEzZWY"
                }
            },
            {
                "__typename": "PublicProfileUser",
                "id": "user_oEwUTD55K5LLw",
                "name": "Rook",
                "username": "cryptorooki3",
                "createdAt": 1636057355,
                "profilePicSm": {
                    "__typename": "ImgSrcset",
                    "double": "https://img-v2-prod.whop.com/WwsN3vIusfEKxxNqEpSrzflZ7miQ3DlJa8g5d5uRjGw/rs:fill:32:32/el:1/dpr:2/aHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXZhdGFycy80MDI0NzAxMzM2NTE2MDM0NjcvYzI1ZGJhZTU3OTE5Y2Y0MjAzOGVkZjgxOTZmYzljNmM"
                }
            },
            {
                "__typename": "PublicProfileUser",
                "id": "user_OWFExcHmzWOkR",
                "name": "AZ01",
                "username": "criminaltenderloind01d",
                "createdAt": 1637244452,
                "profilePicSm": {
                    "__typename": "ImgSrcset",
                    "double": "https://img-v2-prod.whop.com/1uwMXchnh_zSonGyPXHAM_UqmgtQ0ylk4zmxU8sMlF4/rs:fill:32:32/el:1/dpr:2/aHR0cHM6Ly9jZG4uZGlzY29yZGFwcC5jb20vYXZhdGFycy8zNDgxNDQ2NzQ0ODMwNzcxMjAvY2RkMTI2Nzk3M2VjYjA1YzEzZTg2NDE1MDI5NGNhOTg"
                }
            }
        ]
    },
    "last24HoursGmv": 0,
    "globalAffiliatePercentage": 30,
    "last24HoursAffiliateEarnings": 0,
    "last24HoursNewUsers": 0,
    "last7DaysPublishedReviews": 97,
    "last24HoursAverageTimeSpent": 18,
    "last30DaysNewUsers": 32,
    "last24HoursTotalSeconds": 202,
    "totalBountyAmount": 0,
    "imageSrcset": {
        "__typename": "ImgSrcset",
        "isVideo": false,
        "original": "https://img-v2-prod.whop.com/ISGJB6tto_5a32D_3mY7uVlItTZXYIFNVZL1e8l2MW8/rs:fill:80:80/el:1/aHR0cHM6Ly9hc3NldHMud2hvcC5jb20vdXBsb2Fkcy8yMDI0LTA3LTE5L3VzZXJfNDQ4MjA4MV8yYWEwYjc5MS00ZmZkLTQxNmItODc0My1iNmY3OWRjNzQ4ZDgucG5n",
        "double": "https://img-v2-prod.whop.com/AcejG-ijKIhb9kFD1-b4P3LWvVaQxF4iAZ0uEWrOgYI/rs:fill:80:80/el:1/dpr:2/aHR0cHM6Ly9hc3NldHMud2hvcC5jb20vdXBsb2Fkcy8yMDI0LTA3LTE5L3VzZXJfNDQ4MjA4MV8yYWEwYjc5MS00ZmZkLTQxNmItODc0My1iNmY3OWRjNzQ4ZDgucG5n"
    },
    "publishedReviewsCount": 101,
    "reviewsAverage": 4.92,
    "mostRecentReview": {
        "__typename": "Review",
        "id": "rev_5dkeYnF9RCpSE4",
        "stars": 5,
        "user": {
            "__typename": "PublicUser",
            "id": "user_m3L7Pan1ODsQS",
            "name": "Demian Caceres Alge",
            "username": "demianca07",
            "createdAt": 1732997395,
            "profilePicSrcset": {
                "__typename": "ImgSrcset",
                "original": "https://img-v2-prod.whop.com/0Kjyaf0X-OQXvaZPONg-OoPG1_gm108nA9epWaE_2rg/rs:fill:64:64/el:1/aHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9RGVtaWFuJTIwQ2FjZXJlcyUyMEFsZ2UmYmFja2dyb3VuZD01MzU5NjEmY29sb3I9ZmZmJmZvcm1hdD1wbmc",
                "double": "https://img-v2-prod.whop.com/CS-uWvvLEfIOmsLOUq9v_HqhhZtU-R39bd9zsEQxxNM/rs:fill:64:64/el:1/dpr:2/aHR0cHM6Ly91aS1hdmF0YXJzLmNvbS9hcGkvP25hbWU9RGVtaWFuJTIwQ2FjZXJlcyUyMEFsZ2UmYmFja2dyb3VuZD01MzU5NjEmY29sb3I9ZmZmJmZvcm1hdD1wbmc"
            }
        },
        "createdAt": 1740667758,
        "publishedAt": 1740667759,
        "description": "I've followed tons of gurus and signal groups, copytraded, handed accounts to managers, done leverage and studied course after course. \n\nEvery single time the end result was another loss on my account. I found Dr. Profit on X and thought this must be another one of the same. \n\nBut after following for a while and studying his Sunday Reports I realized it wasn't the case. \n\nThis dude is a legend. \n\nThanks for all the guidance. Looking forward to investing in Dubai soon and learning more from you in terms of wealth management. \n\nBut before that, let's get rich this cycle. Thanks from the bottom of my heart. A true leader creates more leaders and thinkers. You're doing it.",
        "title": null,
        "status": "published"
    },
    "publicReviewsChart": {
        "__typename": "ChartsDataNumber",
        "min": 0.76266,
        "max": 28.98116,
        "sum": 77.02885,
        "data": [
            {
                "__typename": "ChartsDataPointNumber",
                "t": 1739794166,
                "v": 2.28799
            },
            ...
        ]
    }
}
```

### Output fields explanations

`__typename`: The GraphQL type name of the object, in this case, "PublicAccessPass".
`id`: The unique identifier for the access pass.
`title`: The title of the access pass.
`alreadyOwned`: A boolean indicating if the access pass is already owned by the user.
`headline`: A short description or tagline for the access pass.
`createdAt`: The timestamp when the access pass was created.
`route`: The URL route for the access pass.
`whopRanking`: The ranking of the access pass on Whop.
`activeUsersCount`: The number of active users for the access pass.
`showMemberCount`: A boolean indicating if the member count should be displayed.
`verified`: A boolean indicating if the access pass is verified.
`displayDiscoverStats`: A boolean indicating if discovery statistics should be displayed.
`defaultPlan`: An object containing details about the default plan for the access pass.
`__typename`: The GraphQL type name of the object, in this case, "PublicPlan".
`baseCurrency`: The currency used for the plan.
`name`: The name of the plan.
`rawInitialPrice`: The initial price of the plan.
`rawRenewalPrice`: The renewal price of the plan.
`id`: The unique identifier for the plan.
`planType`: The type of the plan (e.g., "renewal").
`expirationDays`: The number of days until the plan expires.
`directLink`: The direct link to purchase the plan.
`trialPeriodDays`: The number of trial period days for the plan.
`free`: A boolean indicating if the plan is free.
`releaseMethod`: The method of release for the plan (e.g., "buy\_now").
`stock`: The stock availability of the plan.
`inStock`: A boolean indicating if the plan is in stock.
`billingPeriod`: The billing period for the plan in days.
`appleIapPrice`: The price for Apple in-app purchases.
`alreadyEntered`: A boolean indicating if the plan is already entered.
`visibility`: The visibility status of the plan.
`splitPayRequiredPayments`: The number of required payments for split pay.
`users`: An object containing details about the users associated with the access pass.
`__typename`: The GraphQL type name of the object, in this case, "PublicProfileUserConnection".
`nodes`: An array of user objects.
`__typename`: The GraphQL type name of the object, in this case, "PublicProfileUser".
`id`: The unique identifier for the user.
`name`: The name of the user.
`username`: The username of the user.
`createdAt`: The timestamp when the user was created.
`profilePicSm`: An object containing details about the user's profile picture.
`__typename`: The GraphQL type name of the object, in this case, "ImgSrcset".
`double`: The URL of the profile picture in double resolution.
`last24HoursGmv`: The gross merchandise value in the last 24 hours.
`globalAffiliatePercentage`: The global affiliate percentage.
`last24HoursAffiliateEarnings`: The affiliate earnings in the last 24 hours.
`last24HoursNewUsers`: The number of new users in the last 24 hours.
`last7DaysPublishedReviews`: The number of published reviews in the last 7 days.
`last24HoursAverageTimeSpent`: The average time spent in the last 24 hours.
`last30DaysNewUsers`: The number of new users in the last 30 days.
`last24HoursTotalSeconds`: The total seconds spent in the last 24 hours.
`totalBountyAmount`: The total bounty amount.
`imageSrcset`: An object containing details about the image source set.
`__typename`: The GraphQL type name of the object, in this case, "ImgSrcset".
`isVideo`: A boolean indicating if the image is a video.
`original`: The URL of the original image.
`double`: The URL of the image in double resolution.
`publishedReviewsCount`: The number of published reviews.
`reviewsAverage`: The average rating of the reviews.
`mostRecentReview`: An object containing details about the most recent review.
`__typename`: The GraphQL type name of the object, in this case, "Review".
`id`: The unique identifier for the review.
`stars`: The star rating of the review.
`user`: An object containing details about the user who wrote the review.
`__typename`: The GraphQL type name of the object, in this case, "PublicUser".
`id`: The unique identifier for the user.
`name`: The name of the user.
`username`: The username of the user.
`createdAt`: The timestamp when the user was created.
`profilePicSrcset`: An object containing details about the user's profile picture.
`__typename`: The GraphQL type name of the object, in this case, "ImgSrcset".
`original`: The URL of the original profile picture.
`double`: The URL of the profile picture in double resolution.
`createdAt`: The timestamp when the review was created.
`publishedAt`: The timestamp when the review was published.
`description`: The description of the review.
`title`: The title of the review.
`status`: The status of the review (e.g., "published").
`publicReviewsChart`: An object containing details about the public reviews chart.
`__typename`: The GraphQL type name of the object, in this case, "ChartsDataNumber".
`min`: The minimum value in the chart.
`max`: The maximum value in the chart.
`sum`: The sum of the values in the chart.
`data`: An array of data points in the chart.
`__typename`: The GraphQL type name of the object, in this case, "ChartsDataPointNumber".
`t`: The timestamp of the data point.
`v`: The value of the data point.

### Notes about Data Availability

- Not all fields will be present for every leaderboard entry
- Field availability may vary based on the information provided by Whop
- Some fields may contain aggregated or estimated values

### Support

- For issues or feature requests, please use the [Issues](https://console.apify.com/actors/cAbCkTzBPP0HFO50f/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
  - My Apify Actors/Scrapers: <https://apify.com/memo23>

### Additional Services

- Request customization or whole dataset: <muhamed.didovic@gmail.com>
- If you need anything else scraped, or this actor customized, email: <muhamed.didovic@gmail.com>
- For API services of this scraper (no Apify fee, just usage fee for the API), contact: <muhamed.didovic@gmail.com>

# Actor input Schema

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

URLs to start with.

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

Maximum number of Listings/Items to scrape per crawl. If not defined, all items will be scraped.

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

Maximum number of pages that can be processed at the same time.

## `minConcurrency` (type: `integer`):

Minimum number of pages that will be processed at the same time.

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

Number of times the crawler will retry a failed request 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://whop.com/discover/leaderboards/f/most_reviews_24_hours/"
    }
  ],
  "maxItems": 100,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "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://whop.com/discover/leaderboards/f/most_reviews_24_hours/"
        }
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/whop-leaderboards-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://whop.com/discover/leaderboards/f/most_reviews_24_hours/" }],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/whop-leaderboards-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://whop.com/discover/leaderboards/f/most_reviews_24_hours/"
    }
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/whop-leaderboards-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Whop.com Leaderboards Scraper (PPR)",
        "description": "Unlock comprehensive insights from Whop.com leaderboards effortlessly with our scraper. Extract user rankings, statistics, reviews, profiles, and more for accurate, up-to-date market research, competitor analysis, and performance tracking. Save time and resources while gaining a competitive edge.",
        "version": "0.0",
        "x-build-id": "NGXkySJsOdu8vlYSc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~whop-leaderboards-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-whop-leaderboards-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~whop-leaderboards-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-whop-leaderboards-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~whop-leaderboards-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-whop-leaderboards-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": "Start URLs",
                        "type": "array",
                        "description": "URLs to start with.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Max Listings/Items to scrape per crawl",
                        "type": "integer",
                        "description": "Maximum number of Listings/Items to scrape per crawl. If not defined, all items will be scraped.",
                        "default": 100
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "type": "integer",
                        "description": "Maximum number of pages that can be processed at the same time.",
                        "default": 10
                    },
                    "minConcurrency": {
                        "title": "Min Concurrency",
                        "type": "integer",
                        "description": "Minimum number of pages that will be processed at the same time.",
                        "default": 1
                    },
                    "maxRequestRetries": {
                        "title": "Max Request Retries",
                        "type": "integer",
                        "description": "Number of times the crawler will retry a failed request 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
