# Bluesky Omni Scraper (`actorpilot/bluesky-scraper`) Actor

Extract posts, profiles, threads and followers from Bluesky via the official AT Protocol API. Search by keyword or hashtag, scrape author feeds, full threads and follower lists. No browser, no login. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/actorpilot/bluesky-scraper.md
- **Developed by:** [S. Klein](https://apify.com/actorpilot) (community)
- **Categories:** Social media, News, Automation
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## Bluesky Scraper - Posts, Profiles & AT Protocol Data Extractor

Extract Bluesky posts, profiles, followers & threads via the public AT Protocol API. 7 scrape modes. No login required. No proxies. MCP-ready.

Try it free - click **Try for free** above. Most research tasks cost under $0.05.

---

### What does Bluesky Scraper do?

This Actor connects directly to the public Bluesky AppView API (`api.bsky.app`) and supports seven scrape modes in one Actor:

| Mode | What it collects |
|---|---|
| `searchPosts` | Posts matching a keyword, phrase, or hashtag |
| `authorFeed` | Posts from one or more Bluesky accounts |
| `postThread` | A full post thread including nested replies |
| `profile` | Profile stats for one or more accounts |
| `followers` | Follower lists |
| `follows` | Following lists |
| `customFeed` | Posts from any public Bluesky feed generator |

All modes support cursor-based pagination and export clean results to Apify datasets.

---

### Why use Bluesky Scraper?

| Advantage | Why it matters |
|---|---|
| 7 modes in one Actor | Search, profile, feed, thread, followers, following, and custom feeds without switching tools |
| Direct AT Protocol API | Faster, cheaper, and more reliable than browser scraping |
| Structured hashtags and mentions | Extracted from AT Protocol facets instead of fragile text parsing |
| No login required | Uses public data only |
| Stable post IDs | Every post includes a permanent AT URI |
| MCP-ready | Easy to use from Claude, Codex, Cursor, VS Code, Windsurf, Zed, and other AI tools through Apify MCP |

---

### Common use cases

- Brand monitoring across Bluesky
- Research and journalism workflows
- Influencer discovery and account analysis
- Academic datasets for NLP and social analysis
- Competitor intelligence
- Social listening and trend tracking

---

### Real-World Workflow Examples

**Brand Monitoring Pipeline**
1. Run `searchPosts` daily with your brand name as query
2. Filter results where `likeCount > 5` for high-signal posts
3. Export to CSV and load into your monitoring dashboard
4. Use `searchSort: "latest"` to catch mentions in real time

**Competitor Audience Analysis**
1. Run `followers` mode on a competitor's Bluesky handle
2. Cross-reference follower handles with `profile` mode for stats
3. Identify high-follower accounts for outreach targeting

**Academic Dataset Collection**
1. Use `searchPosts` with date range (`searchSince`, `searchUntil`) and `searchLang`
2. Collect posts around a specific event or topic
3. Export to JSON for NLP processing — all text, hashtags, and mentions are pre-extracted

---

### How to use Bluesky Scraper

1. Click **Try for free**
2. Choose a `mode`
3. Enter a query, handle, post URL, or feed URI depending on the mode
4. Set `maxItems`
5. Start the run
6. Download results as JSON, CSV, HTML, or Excel

---

### Input

| Field | Required | Description |
|---|---|---|
| `mode` | Yes | One of: `searchPosts`, `authorFeed`, `postThread`, `profile`, `followers`, `follows`, `customFeed` |
| `searchQuery` | For `searchPosts` | Keyword, phrase, or hashtag such as `#AI` |
| `handles` | For `authorFeed`, `profile`, `followers`, `follows` | One or more Bluesky handles |
| `postUrl` | For `postThread` | Full Bluesky post URL or AT URI |
| `feedUri` | For `customFeed` | AT URI of a public feed generator |
| `maxItems` | No | Maximum items to collect. `0` means unlimited |
| `searchSort` | No | `latest` or `top` |
| `searchSince` | No | Start date such as `2024-01-01` |
| `searchUntil` | No | End date such as `2024-12-31` |
| `searchLang` | No | ISO 639-1 language code such as `en` or `de` |
| `includeReplies` | No | Include replies in `authorFeed` |
| `includeReposts` | No | Include reposts in `authorFeed` |

Example search input:

```json
{
  "mode": "searchPosts",
  "searchQuery": "#AI",
  "searchSort": "latest",
  "searchLang": "en",
  "maxItems": 500
}
````

Example custom feed input:

```json
{
  "mode": "customFeed",
  "feedUri": "at://did:plc:z72i7hdynmchkltzmefcsowb/app.bsky.feed.generator/whats-hot",
  "maxItems": 100
}
```

***

### Output

Each item is pushed to the default Apify dataset.

Example post output:

```json
{
  "postId": "at://did:plc:abc123/app.bsky.feed.post/3kwikpostabcde",
  "url": "https://bsky.app/profile/alice.bsky.social/post/3kwikpostabcde",
  "text": "Really enjoying the discourse around #AI safety this week.",
  "authorHandle": "alice.bsky.social",
  "authorDisplayName": "Alice",
  "authorFollowerCount": 3200,
  "likeCount": 47,
  "repostCount": 12,
  "replyCount": 8,
  "quoteCount": 3,
  "engagementRate": 0.0192,
  "createdAt": "2024-11-15T14:22:30.000Z",
  "lang": ["en"],
  "hasMedia": false,
  "tags": ["AI"],
  "scrapedMode": "authorFeed"
}
```

Key output fields:

- `postId`, `url`, `text`
- `authorHandle`, `authorDisplayName`, `authorDid`
- `likeCount`, `repostCount`, `replyCount`, `quoteCount`
- `engagementRate`
- `createdAt`, `lang`
- `tags`, `mentionedDids`
- `hasMedia`, `mediaUrls`

***

### Use with AI agents via Apify MCP

This Actor can be used from AI tools such as Claude, Codex, Cursor, VS Code, Windsurf, Zed, and other MCP-compatible clients through Apify's Actors MCP server.

Important: this Actor is not a standalone remote MCP server. Instead, you connect Apify's Actors MCP server once, then ask your assistant to use this Actor.

#### MCP setup

Add this MCP server configuration to your client:

```json
{
  "mcpServers": {
    "apify": {
      "command": "npx",
      "args": ["-y", "@apify/actors-mcp-server"],
      "env": {
        "APIFY_TOKEN": "your_apify_api_token_here"
      }
    }
  }
}
```

#### Copy-paste prompt for Claude, Codex, Cursor, and similar tools

If your AI assistant can edit MCP settings for you, paste this:

```text
Please set up Apify's Actors MCP server in my MCP configuration.

Use this package:
- command: npx
- args: -y @apify/actors-mcp-server

Set my APIFY_TOKEN in the MCP environment.

After setup, use the Apify actor "bluesky-scraper" and help me run it from chat.
```

#### Example prompts after setup

- Search for the 20 most recent Bluesky posts about `#climatepolicy` in English and summarize the main arguments.
- Fetch the full reply thread for this Bluesky post and identify the main discussion points.
- Find the top 50 followers of `atproto.com` and list their display names and follower counts.
- Run the `bluesky-scraper` actor in `profile` mode for these handles and compare their audience sizes.

#### Client notes

- Claude, Codex, Cursor, VS Code, Windsurf, and Zed can usually use the stdio MCP config above directly.
- n8n, LangChain, OpenAI Agents SDK, Gemini, and custom apps can use Apify actors too, but the exact MCP wiring depends on the client runtime you use around Apify's MCP server.

***

### How much does it cost to scrape Bluesky?

| Run size | Estimated cost |
|---|---|
| 100 posts | ~$0.01-$0.05 |
| 1,000 posts | ~$0.10-$0.30 |
| 10,000 posts | ~$1.00-$2.00 |

New Apify accounts receive $5 in free monthly credits.

Bluesky's public API means no proxy costs are required — making this one of the cheapest social scrapers on Apify.

***

### Tips

- Use `searchSince` and `searchUntil` to reduce noise in historical searches.
- Use `searchLang` for multilingual topics.
- `authorFeed` is best when you need engagement metrics and account-level analysis.
- `postThread` is best for journalism and conversation analysis.
- `maxItems: 0` enables unlimited collection, but use it carefully for large accounts.

***

### Bluesky vs Twitter/X for research

If you need social data and want a reliable, open source of truth, Bluesky has real advantages:

- Public API with no authentication wall
- Consistent data structure via AT Protocol
- Permanent post IDs that do not disappear
- Chronological feed available without algorithmic filtering
- Growing user base especially in tech, academia, and journalism

For bulk historical data or brand monitoring, Bluesky is increasingly a viable complement or alternative to X/Twitter data pipelines.

***

### FAQ

**Is scraping Bluesky legal?**
This Actor accesses public Bluesky data through the public AT Protocol API. You are responsible for complying with Bluesky terms and applicable regulations.

**Can I scrape private accounts?**
No. This Actor only accesses public data.

**Why are some fields null in `searchPosts` mode?**
The public search endpoint returns lighter author objects than other endpoints.

**What rate limits apply?**
The Actor handles public API rate limits and honors retry headers where applicable.

**How is this different from Twitter/X scrapers?**
Bluesky uses the open AT Protocol API which is publicly accessible and stable. There are no login walls, no CAPTCHAs, and no rate-limit workarounds needed. Data structure is clean and consistent by design.

**Can I monitor hashtags in real time?**
Use `searchPosts` mode with `searchSort: "latest"` and schedule the Actor to run every 15–30 minutes on Apify. Each run picks up the newest posts matching your query.

**What is the difference between an AT URI and a bsky.app URL?**
A bsky.app URL like `https://bsky.app/profile/alice.bsky.social/post/3kwik` is the human-readable link. An AT URI like `at://did:plc:abc123/app.bsky.feed.post/3kwik` is the permanent protocol-level identifier. Both are included in the output.

**What happens if a handle changes?**
Bluesky handles can change but the underlying DID (`authorDid`) is permanent. Use the DID for long-term tracking instead of the handle.

**Do you support custom pipelines or features?**
Yes. Contact us through the Apify platform if you need custom work.

# Actor input Schema

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

Choose a scrape mode. Each mode requires different settings below.

## `searchQuery` (type: `string`):

Keyword or hashtag to search for. Examples: 'climate change', '#AI', 'OpenAI lang:en'. Bluesky search syntax is supported.

## `searchSort` (type: `string`):

Sort search results by newest first, or by most likes and reposts. Applies to: searchPosts

## `searchSince` (type: `string`):

Only return posts on or after this date. Format: YYYY-MM-DD, e.g. 2024-01-15. Leave empty for no lower limit. Applies to: searchPosts

## `searchUntil` (type: `string`):

Only return posts on or before this date. Format: YYYY-MM-DD, e.g. 2024-12-31. Leave empty for no upper limit. Applies to: searchPosts

## `searchLang` (type: `string`):

Only return posts in a specific language. Use a two-letter ISO 639-1 code: 'en' for English, 'de' for German, 'fr' for French, 'es' for Spanish, 'ja' for Japanese. Leave empty for all languages. Applies to: searchPosts

## `handles` (type: `array`):

Enter Bluesky handles without the @ symbol. Both formats work: 'username.bsky.social' or a custom domain like 'nytimes.com'. Multiple handles are processed in sequence.

## `includeReplies` (type: `boolean`):

Also collect posts where this account replied to someone. Disabled by default — only top-level posts are returned. Applies to: authorFeed

## `includeReposts` (type: `boolean`):

Also collect posts that this account reposted from others. Disabled by default. Applies to: authorFeed

## `postUrl` (type: `string`):

Paste the URL of any Bluesky post directly from your browser address bar. Example: 'https://bsky.app/profile/username.bsky.social/post/abc123'. AT URIs (at://...) are also accepted. Applies to: postThread

## `feedUri` (type: `string`):

The AT URI of a Bluesky feed generator. How to find it: (1) Open any feed on bsky.app, click '...' → 'Share feed' and copy the link — then paste the at:// part. (2) Or browse and discover feeds at skyfeed.app. Only public feeds work without login. Example: at://did:plc:.../app.bsky.feed.generator/whats-hot. Applies to: customFeed

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

Maximum number of results to collect. Set to 0 to collect everything available — warning: this can take a very long time and generate high costs for popular accounts or broad search queries. Tip: start with 100 to test your settings first.

## Actor input object example

```json
{
  "mode": "searchPosts",
  "searchQuery": "#AI",
  "searchSort": "latest",
  "searchLang": "en",
  "handles": [
    "bsky.app"
  ],
  "includeReplies": false,
  "includeReposts": false,
  "postUrl": "https://bsky.app/profile/pfrazee.com/post/3mnsxzydov22d",
  "feedUri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot",
  "maxItems": 100
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# 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 = {
    "searchLang": "en",
    "postUrl": "https://bsky.app/profile/pfrazee.com/post/3mnsxzydov22d",
    "feedUri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot",
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("actorpilot/bluesky-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 = {
    "searchLang": "en",
    "postUrl": "https://bsky.app/profile/pfrazee.com/post/3mnsxzydov22d",
    "feedUri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot",
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("actorpilot/bluesky-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 '{
  "searchLang": "en",
  "postUrl": "https://bsky.app/profile/pfrazee.com/post/3mnsxzydov22d",
  "feedUri": "at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot",
  "maxItems": 100
}' |
apify call actorpilot/bluesky-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Bluesky Omni Scraper",
        "description": "Extract posts, profiles, threads and followers from Bluesky via the official AT Protocol API. Search by keyword or hashtag, scrape author feeds, full threads and follower lists. No browser, no login. Export to JSON, CSV or Excel.",
        "version": "1.0",
        "x-build-id": "blyhjQfIO67tLNQOC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/actorpilot~bluesky-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-actorpilot-bluesky-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/actorpilot~bluesky-scraper/runs": {
            "post": {
                "operationId": "runs-sync-actorpilot-bluesky-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/actorpilot~bluesky-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-actorpilot-bluesky-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "What do you want to scrape?",
                        "enum": [
                            "searchPosts",
                            "authorFeed",
                            "postThread",
                            "profile",
                            "followers",
                            "follows",
                            "customFeed"
                        ],
                        "type": "string",
                        "description": "Choose a scrape mode. Each mode requires different settings below.",
                        "default": "searchPosts"
                    },
                    "searchQuery": {
                        "title": "Search query",
                        "minLength": 1,
                        "type": "string",
                        "description": "Keyword or hashtag to search for. Examples: 'climate change', '#AI', 'OpenAI lang:en'. Bluesky search syntax is supported.",
                        "default": "#AI"
                    },
                    "searchSort": {
                        "title": "Sort results by",
                        "enum": [
                            "latest",
                            "top"
                        ],
                        "type": "string",
                        "description": "Sort search results by newest first, or by most likes and reposts. Applies to: searchPosts",
                        "default": "latest"
                    },
                    "searchSince": {
                        "title": "From date",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}(T[0-9:.Z+-]*)?$",
                        "type": "string",
                        "description": "Only return posts on or after this date. Format: YYYY-MM-DD, e.g. 2024-01-15. Leave empty for no lower limit. Applies to: searchPosts"
                    },
                    "searchUntil": {
                        "title": "To date",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}(T[0-9:.Z+-]*)?$",
                        "type": "string",
                        "description": "Only return posts on or before this date. Format: YYYY-MM-DD, e.g. 2024-12-31. Leave empty for no upper limit. Applies to: searchPosts"
                    },
                    "searchLang": {
                        "title": "Language filter",
                        "type": "string",
                        "description": "Only return posts in a specific language. Use a two-letter ISO 639-1 code: 'en' for English, 'de' for German, 'fr' for French, 'es' for Spanish, 'ja' for Japanese. Leave empty for all languages. Applies to: searchPosts"
                    },
                    "handles": {
                        "title": "Bluesky handles",
                        "type": "array",
                        "description": "Enter Bluesky handles without the @ symbol. Both formats work: 'username.bsky.social' or a custom domain like 'nytimes.com'. Multiple handles are processed in sequence.",
                        "items": {
                            "type": "string",
                            "pattern": "^(?!@)[a-zA-Z0-9][-a-zA-Z0-9.]*\\.[a-zA-Z]{2,}$"
                        },
                        "default": [
                            "bsky.app"
                        ]
                    },
                    "includeReplies": {
                        "title": "Include replies",
                        "type": "boolean",
                        "description": "Also collect posts where this account replied to someone. Disabled by default — only top-level posts are returned. Applies to: authorFeed",
                        "default": false
                    },
                    "includeReposts": {
                        "title": "Include reposts",
                        "type": "boolean",
                        "description": "Also collect posts that this account reposted from others. Disabled by default. Applies to: authorFeed",
                        "default": false
                    },
                    "postUrl": {
                        "title": "Post URL (copy from bsky.app)",
                        "type": "string",
                        "description": "Paste the URL of any Bluesky post directly from your browser address bar. Example: 'https://bsky.app/profile/username.bsky.social/post/abc123'. AT URIs (at://...) are also accepted. Applies to: postThread"
                    },
                    "feedUri": {
                        "title": "Custom feed URI",
                        "type": "string",
                        "description": "The AT URI of a Bluesky feed generator. How to find it: (1) Open any feed on bsky.app, click '...' → 'Share feed' and copy the link — then paste the at:// part. (2) Or browse and discover feeds at skyfeed.app. Only public feeds work without login. Example: at://did:plc:.../app.bsky.feed.generator/whats-hot. Applies to: customFeed"
                    },
                    "maxItems": {
                        "title": "Max results",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of results to collect. Set to 0 to collect everything available — warning: this can take a very long time and generate high costs for popular accounts or broad search queries. Tip: start with 100 to test your settings first.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
