# X (Twitter) Search Scraper (`xtracto/x-search-scraper`) Actor

Search X (Twitter) by keyword, hashtag, or 'from:user' query and stream matching tweets. Supports Top / Latest / People / Photos / Videos tabs. HTTP-only, no native login flow.

- **URL**: https://apify.com/xtracto/x-search-scraper.md
- **Developed by:** [Farhan Febrian Nauval](https://apify.com/xtracto) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## X (Twitter) Search Scraper

Search X (Twitter) tweets by keyword, hashtag, or `from:USERNAME` query — with two modes: anonymous per-user search (no setup) or authenticated general search (paste cookies once for full keyword/hashtag support).

### Why use this actor

- **No account required for per-user search** — pass `from:jack twitter` and get every tweet from `@jack` containing "twitter", newest first. Works out of the box.
- **General keyword and hashtag search with cookies** — paste your logged-in X cookies once to unlock keyword (`bitcoin`), hashtag (`#worldcup`), and combined queries that X login-walls anonymously.
- **Higher rate limits when authenticated** — anonymous mode uses guest-token rate limits (~50 calls per 15 min). Cookies give you account-tier limits (~150 calls per 15 min for normal accounts, more for Premium).
- **Multiple keywords supported** — `from:elonmusk doge mars` matches tweets containing both "doge" AND "mars" (case-insensitive substring AND).
- **Pagination handled automatically** — request up to 500 tweets per query; cursor-based pagination is streamed without you managing it.
- **Bulk input** — pass a list of queries in one run; one dataset row per matching tweet, tagged with the original query in `_input`.
- **Stable JSON output** — every record carries `_input`, `_source`, and `_scrapedAt` envelope fields so you can join results back to your input list.
- **Structured error envelope** — when cookies expire or general search hits a server-side gate, you get one clean `_error` record per query instead of a crashed run.

### How it works

1. You provide a list of search queries. Optionally, paste X cookies into the `xCookies` input field to enable authenticated mode.
2. The actor either:
   - **Authenticated**: hits X's search endpoint directly with your session cookies, paginates via cursor, streams matching tweets.
   - **Anonymous + `from:USERNAME`**: resolves the username, walks the user's timeline, filters for keyword matches.
3. Matching tweets stream into your dataset, ready to download as JSON, CSV, or Excel.

You do not need to manage scrapers, browsers, logins, or rotating IPs — all handled internally.

### How to get X cookies (for authenticated mode)

This is a 1-minute, one-time setup. Required only if you want general keyword/hashtag search; `from:USERNAME` queries work without cookies.

1. **Install [Cookie-Editor](https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm)** in Chrome or Firefox (free extension, 1M+ users).
2. **Log in to [x.com](https://x.com)** in that browser, using either your real account or a throwaway. (Throwaway recommended for heavy automated use — see Notes.)
3. **Click the Cookie-Editor extension icon** while on any x.com page.
4. **Click the "Export" icon (📤)** in the bottom toolbar of the popup, choose **"Export as JSON"**, and your clipboard will have the JSON.
5. **Paste the JSON** into the `xCookies` field on the Apify input form. Save and run.

The minimum required cookies are `auth_token` and `ct0`. The Cookie-Editor export includes them automatically along with helpful aux cookies (`gt`, `twid`, `kdt`, `__cf_bm`).

Alternative format: instead of the JSON export, you can paste a plain `auth_token=xxx; ct0=yyy` cookie string copied from your browser DevTools network tab.

### Input

```json
{
  "queries": [
    "bitcoin",
    "from:elonmusk doge"
  ],
  "maxResults": 20,
  "product": "Top",
  "xCookies": "[ {\"name\":\"auth_token\",\"value\":\"...\"}, {\"name\":\"ct0\",\"value\":\"...\"} ]",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["DATACENTER"]
  }
}
````

| Field | Type | Description |
|---|---|---|
| `queries` | array | List of search queries. Two formats supported: (1) general keywords / hashtags like `bitcoin`, `#worldcup`, `iphone 17` — **require `xCookies`**. (2) per-user `from:USERNAME [keywords]` like `from:jack twitter` — **work without cookies**. |
| `maxResults` | integer | Max tweets returned per query. Default `20`, max `500`. Pagination handled automatically. |
| `product` | string | One of `Top`, `Latest`, `People`, `Photos`, `Videos`. Applied to authenticated search only; anonymous `from:USERNAME` always returns user timeline regardless. Default `Top`. |
| `xCookies` | string (secret) | Your logged-in X cookies as JSON array (Cookie-Editor export) or `name=val; ...` string. See the tutorial section above. Leave empty for anonymous mode. |
| `proxyConfiguration` | object | Apify Proxy settings. Datacenter proxy works for both modes. |

### Output

Input: `from:jack twitter`

```json
{
  "_input": "from:jack twitter",
  "_source": "S1-primary",
  "_scrapedAt": "2026-05-18T11:06:09.702476+00:00",
  "rest_id": "1189634360472829952",
  "id_str": "1189634360472829952",
  "conversation_id_str": "1189634360472829952",
  "created_at": "Wed Oct 30 20:05:08 +0000 2019",
  "full_text": "We've made the decision to stop all political advertising on Twitter globally. We believe political message reach should be earned, not bought. Why? A few reasons...",
  "lang": "en",
  "favorite_count": 308633,
  "retweet_count": 72664,
  "reply_count": 12506,
  "quote_count": 32307,
  "bookmark_count": 3628,
  "is_quote_status": false,
  "display_text_range": [0, 164],
  "entities": {
    "hashtags": [],
    "symbols": [],
    "urls": [],
    "user_mentions": []
  },
  "source": "<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>",
  "views": { "state": "Enabled" },
  "user_id_str": "12",
  "author": {
    "rest_id": "12",
    "screen_name": "jack",
    "name": "jack",
    "description": "no state is the best state",
    "followers_count": 7537451,
    "friends_count": 3,
    "statuses_count": 30509,
    "is_blue_verified": true,
    "created_at": "Tue Mar 21 20:50:14 +0000 2006"
  }
}
```

| Field | Type | Description |
|---|---|---|
| `_input` | string | The query exactly as you supplied it. Use to join results back to your input list. |
| `_source` | string | Internal tag for the fetch path used (`S1-primary` for both anonymous and authenticated runs). |
| `_scrapedAt` | string | ISO-8601 UTC timestamp when the record was scraped. |
| `rest_id` / `id_str` | string | Tweet ID (stable across edits). |
| `conversation_id_str` | string | Root tweet ID of the thread this tweet belongs to. |
| `created_at` | string | Original X-format timestamp (`Wed Oct 30 20:05:08 +0000 2019`). |
| `full_text` | string | Full tweet body (no truncation). |
| `lang` | string | ISO-639 language code detected by X. |
| `favorite_count` | integer | Likes. |
| `retweet_count` | integer | Reposts. |
| `reply_count` | integer | Direct replies. |
| `quote_count` | integer | Quote-tweets. |
| `bookmark_count` | integer | Bookmarks (publicly counted). |
| `is_quote_status` | boolean | `true` if this tweet quotes another. |
| `display_text_range` | array | `[start, end]` character indices for the visible portion of `full_text`. |
| `entities` | object | Structured hashtags, URLs, user mentions, symbols extracted by X. |
| `source` | string | Client used to post (e.g. `Twitter for iPhone`). |
| `views.state` | string | `Enabled` if view-count is publicly available, otherwise omitted. |
| `user_id_str` | string | Author's numeric user ID (mirrors `author.rest_id`). |
| `author` | object | Embedded author block: `rest_id`, `screen_name`, `name`, `description`, follower/following/tweet counts, `is_blue_verified`, `created_at`. |

Tweets with photos / videos also include `extended_entities.media` with full `media_url_https`, sizes, and (for videos) MP4 variants.

#### Error envelope

The actor surfaces structured errors instead of crashing the run:

```json
{
  "_input": "bitcoin",
  "_error": "login_required",
  "_errorDetail": "X requires a logged-in user session for general keyword/hashtag search in 2025+. ...",
  "_source": "S1-primary",
  "_scrapedAt": "2026-05-18T11:06:10.848836+00:00"
}
```

| `_error` value | When |
|---|---|
| `login_required` | General keyword / hashtag query was attempted without `xCookies`. Paste cookies or rewrite as `from:USERNAME`. |
| `cookies_invalid` | `xCookies` was provided but X rejected them (expired or revoked). Re-export from Cookie-Editor after re-logging in to x.com. |
| `resolve_failed` | The username after `from:` does not resolve (deleted, suspended, or typo). |
| `empty_results` | The query is valid but no tweets matched within the pagination window. |
| `blocked` | Transient block from X — retry later. |

### Pricing

This actor is billed per result: **$8.00 per 1,000 tweets** (Tier 6 — X requires the most maintenance overhead of any platform: bundle queryId rotation, guest-token refresh, optional auth cookies). Each matching tweet returned = 1 result. Error envelope records (`login_required`, `cookies_invalid`, etc.) are not billed.

### Other Sosmed Actors

| Platform | Actor | Best for |
|---|---|---|
| Twitter / X | [X Account Scraper](https://apify.com/xtracto/x-account-scraper) | Profile, bio, follower/following counts for any handle |
| Twitter / X | [X Account Tweets Scraper](https://apify.com/xtracto/x-account-tweets-scraper) | Full timeline of a user (no keyword filter) |
| Twitter / X | [X Post Detail Scraper](https://apify.com/xtracto/x-post-detail-scraper) | Single-tweet detail with author and engagement |
| Bluesky | [Bluesky Search Scraper](https://apify.com/xtracto/bluesky-search-scraper) | Full-text search across all of Bluesky (no login wall) |
| Reddit | [Reddit Search Scraper](https://apify.com/xtracto/reddit-search-scraper) | Search posts across subreddits |
| YouTube | [YouTube Search Scraper](https://apify.com/xtracto/youtube-search-scraper) | Search videos by keyword |
| Mastodon | [Mastodon Account Scraper](https://apify.com/xtracto/mastodon-account-scraper) | Profile data for any Mastodon handle |

Browse the full catalog at [apify.com/xtracto](https://apify.com/xtracto).

### Notes

- **X login-walls general search anonymously.** To search by keyword or hashtag (anything that isn't `from:USERNAME`), you must paste `xCookies` from a logged-in x.com session. The Cookie-Editor tutorial above is the fastest path.
- **Cookie rotation:** `auth_token` is typically valid for several weeks to a few months; `ct0` rotates more often. If you start seeing `_error: "cookies_invalid"`, just re-export from Cookie-Editor while logged in. The auth\_token itself is what matters — refresh as needed.
- **Use a throwaway account for heavy automated use.** X enforces per-account rate limits (~150 search calls per 15 minutes for normal accounts, scaling up for Premium). High-volume runs from a single account can trigger flags or a temporary lock. Best practice: use one or more disposable accounts dedicated to scraping, not your primary account.
- **Pagination per query** is automatic via cursor. The actor stops when it hits `maxResults` or when X returns no further pages.
- **Per-user mode is permanent.** The anonymous `from:USERNAME [keywords]` path will keep working even if your cookies expire — it doesn't depend on auth.
- **Keyword filter is AND + substring.** `from:jack iphone twitter` matches tweets containing both `iphone` and `twitter` (case-insensitive). `from:jack new` will also match `news` (no tokenisation).
- **Counters are eventually-consistent.** `favorite_count`, `retweet_count` etc. may lag the live network by a few minutes.
- **Quoted phrases (`"new policy"`), `OR`, `-exclude`, `lang:en`, etc.** are parsed by X server-side when running with cookies; in anonymous `from:USERNAME` mode they are not interpreted (treated as plain tokens).

# Actor input Schema

## `queries` (type: `array`):

List of X (Twitter) search queries. Two modes are supported: (1) Per-user queries using the `from:USERNAME [keywords]` syntax (e.g. `from:jack twitter`) — works anonymously, no setup. (2) General keyword/hashtag queries (e.g. `bitcoin`, `#worldcup`) — requires the `xCookies` field below. Without cookies, general queries return a structured `_error: "login_required"` record.

## `maxResults` (type: `integer`):

Maximum tweets returned per query. Caps at 500. Pagination handled automatically via cursor.

## `product` (type: `string`):

Which X search tab to read from. Only applied when running in authenticated mode (with `xCookies`). Anonymous `from:USERNAME` queries always return the user's full timeline regardless of this setting.

## `xCookies` (type: `string`):

Paste your logged-in X cookies here to unlock general keyword and hashtag search. Accepts either (a) the JSON export from the Cookie-Editor browser extension or (b) a `name=value; name=value` cookie string. At minimum `auth_token` and `ct0` are required. See the actor README for a step-by-step tutorial. Leave empty for anonymous per-user (`from:USERNAME`) mode.

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

Apify Proxy settings. For anonymous per-user (`from:USERNAME`) search, datacenter proxy is fine. For authenticated general keyword/hashtag search (with `xCookies`), use RESIDENTIAL groups — X soft-blocks general search by IP and datacenter ranges get a 404-empty response. Each run picks a fresh egress IP, which is what makes authenticated search reliable.

## Actor input object example

```json
{
  "queries": [
    "from:jack",
    "from:elonmusk"
  ],
  "maxResults": 20,
  "product": "Top",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "queries": [
        "from:jack",
        "from:elonmusk"
    ],
    "maxResults": 20,
    "product": "Top"
};

// Run the Actor and wait for it to finish
const run = await client.actor("xtracto/x-search-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 = {
    "queries": [
        "from:jack",
        "from:elonmusk",
    ],
    "maxResults": 20,
    "product": "Top",
}

# Run the Actor and wait for it to finish
run = client.actor("xtracto/x-search-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 '{
  "queries": [
    "from:jack",
    "from:elonmusk"
  ],
  "maxResults": 20,
  "product": "Top"
}' |
apify call xtracto/x-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "X (Twitter) Search Scraper",
        "description": "Search X (Twitter) by keyword, hashtag, or 'from:user' query and stream matching tweets. Supports Top / Latest / People / Photos / Videos tabs. HTTP-only, no native login flow.",
        "version": "1.0",
        "x-build-id": "I83ury1qbf8VKVmn5"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/xtracto~x-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-xtracto-x-search-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/xtracto~x-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-xtracto-x-search-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/xtracto~x-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-xtracto-x-search-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": [
                    "queries"
                ],
                "properties": {
                    "queries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "List of X (Twitter) search queries. Two modes are supported: (1) Per-user queries using the `from:USERNAME [keywords]` syntax (e.g. `from:jack twitter`) — works anonymously, no setup. (2) General keyword/hashtag queries (e.g. `bitcoin`, `#worldcup`) — requires the `xCookies` field below. Without cookies, general queries return a structured `_error: \"login_required\"` record.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max results per query",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum tweets returned per query. Caps at 500. Pagination handled automatically via cursor.",
                        "default": 20
                    },
                    "product": {
                        "title": "Search tab",
                        "enum": [
                            "Top",
                            "Latest",
                            "People",
                            "Photos",
                            "Videos"
                        ],
                        "type": "string",
                        "description": "Which X search tab to read from. Only applied when running in authenticated mode (with `xCookies`). Anonymous `from:USERNAME` queries always return the user's full timeline regardless of this setting.",
                        "default": "Top"
                    },
                    "xCookies": {
                        "title": "X (Twitter) cookies — optional, unlocks general search",
                        "type": "string",
                        "description": "Paste your logged-in X cookies here to unlock general keyword and hashtag search. Accepts either (a) the JSON export from the Cookie-Editor browser extension or (b) a `name=value; name=value` cookie string. At minimum `auth_token` and `ct0` are required. See the actor README for a step-by-step tutorial. Leave empty for anonymous per-user (`from:USERNAME`) mode."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy settings. For anonymous per-user (`from:USERNAME`) search, datacenter proxy is fine. For authenticated general keyword/hashtag search (with `xCookies`), use RESIDENTIAL groups — X soft-blocks general search by IP and datacenter ranges get a 404-empty response. Each run picks a fresh egress IP, which is what makes authenticated search reliable.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
