# Instagram Scraper (Pay-Per-Event) (`prodiger/instagram-scraper`) Actor

Scrape Instagram posts, profile details, hashtags, and comments. Drop-in compatible with apify/instagram-scraper input shape — at ~13% lower per-row cost on transparent pay-per-event pricing.

- **URL**: https://apify.com/prodiger/instagram-scraper.md
- **Developed by:** [Arnas](https://apify.com/prodiger) (community)
- **Categories:** Social media
- **Stats:** 6 total users, 4 monthly users, 99.3% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

**Scrape Instagram posts, profile details, hashtags, and comments** at pay-per-event pricing. Drop-in compatible with the popular `apify/instagram-scraper` input shape, at ~13% lower per-row cost.

Pure HTTP — no headless browser, no login. Hits Instagram's public web API endpoints with rotating residential proxies and conservative concurrency. Run-level deduplication by media `pk` means overlapping inputs (e.g. the same post appearing under multiple search queries) are charged exactly once.

### What does Instagram Scraper do?

It extracts public Instagram data via four result types:

- **Posts** — feed of posts from a profile or hashtag (image, video, sidecar/carousel; includes caption, likes, comments count, media URLs, timestamps, owner info).
- **Details** — profile metadata (username, bio, follower / following / posts counts, verified flag, profile pic, business category).
- **Hashtag** — hashtag metadata (post count, top posts count, profile pic).
- **Comments** — comments on a specific post URL (text, owner, likes, replies count). Best-effort: Instagram throttles unauthenticated comments traffic aggressively.

Inputs accepted:

- `directUrls` — list of Instagram URLs (`/p/<code>/`, `/reel/<code>/`, `/<username>/`, `/explore/tags/<tag>/`).
- `username` — list of bare profile usernames (without `@`).
- `search` — search query against Instagram's public topsearch endpoint, expanded into hashtag or profile follow-ups.

Try it: paste an Instagram profile URL like `https://www.instagram.com/humansofny/`, set `resultsLimit: 30`, and click **Run**.

### Why use Instagram Scraper?

- **~13% cheaper** than the reference `apify/instagram-scraper`: $1.30/1,000 posts vs. $1.50/1,000; $2.00/1,000 comments vs. $2.30/1,000.
- **Pay-per-event billing**: each result is charged only after it lands in the dataset. If you abort the run, you stop paying within a second.
- **Drop-in input parity**: same field names (`directUrls`, `resultsType`, `resultsLimit`, `searchType`, `searchLimit`, `search`, `onlyPostsNewerThan`, `addParentData`) so downstream automations targeting the reference can swap actor IDs with no code change.
- **Run-level deduplication**: each unique media `pk` / profile username / hashtag name is charged exactly once per run, even when overlapping inputs surface the same row multiple times.
- **Normalized output**: every post row carries both raw `takenAt` (epoch) and `takenAtIso` (ISO 8601). Every row has `scrapedAt`. Hashtags and mentions parsed from the caption are exposed as arrays. No missing-field surprises — fields that don't apply are `null`, not absent.

Business use cases: brand monitoring, influencer discovery, market research, content trend analysis, lead generation from public business profiles, hashtag campaign tracking.

### How to use Instagram Scraper

1. Open the Actor in [Apify Console](https://console.apify.com).
2. Click **New input** and pick what to scrape:
   - For a specific profile: set `directUrls: ["https://www.instagram.com/<username>/"]` or `username: ["<username>"]`.
   - For a hashtag: set `directUrls: ["https://www.instagram.com/explore/tags/<tag>/"]`.
   - For search: set `search: "#travel"` (hashtag prefix sets context to hashtag automatically).
3. Choose `resultsType`: `posts` (default), `details`, `hashtag`, or `comments`.
4. Set `resultsLimit` — max rows per source.
5. Click **Start** and watch results land in the dataset.

### Input

| Field | Type | Description |
|-------|------|-------------|
| `directUrls` | array | Instagram URLs — profile / post / reel / hashtag. |
| `username` | array | Bare profile usernames (no `@`). |
| `resultsType` | enum | `posts` (default), `details`, `hashtag`, `comments`. |
| `resultsLimit` | int | Max rows per source. Default 30. |
| `search` | string | Search query. `#` prefix forces hashtag context. |
| `searchType` | enum | `hashtag` (default), `profile`, `user`. |
| `searchLimit` | int | Max search hits to expand. Default 10. |
| `onlyPostsNewerThan` | string | `YYYY-MM-DD` or relative (`3 days`, `2 months`). |
| `addParentData` | bool | Attach originating profile/hashtag as `parentData`. |
| `maxRequestRetries` | int | Per-request retry limit (1-10). Default 5. |
| `proxyConfiguration` | object | Apify proxy. Residential strongly recommended. |

### Output

A simplified post row:

```json
{
  "id": "3000000000000000000",
  "shortCode": "Cz4tHR-JqXa",
  "type": "Image",
  "caption": "Hello from NYC #travel",
  "url": "https://www.instagram.com/p/Cz4tHR-JqXa/",
  "commentsCount": 12,
  "likesCount": 345,
  "videoViewCount": null,
  "takenAt": 1700000000,
  "takenAtIso": "2023-11-14T22:13:20.000Z",
  "displayUrl": "https://cdn.example.com/image.jpg",
  "videoUrl": null,
  "dimensionsHeight": 1080,
  "dimensionsWidth": 1080,
  "images": [],
  "videos": [],
  "hashtags": ["travel"],
  "mentions": [],
  "ownerUsername": "humansofny",
  "ownerFullName": "Humans of New York",
  "ownerId": "1234",
  "locationName": null,
  "locationId": null,
  "isSponsored": false,
  "scrapedAt": "2026-05-26T15:00:00.000Z"
}
````

Datasets can be downloaded as JSON, JSONL, CSV, Excel, HTML, RSS, or XML.

### Data fields

| Field | Posts | Details | Hashtag | Comments |
|-------|:-:|:-:|:-:|:-:|
| `id` | yes | yes | yes | yes |
| `shortCode` | yes | — | — | — |
| `type` (Image / Video / Sidecar) | yes | — | — | — |
| `caption` | yes | — | — | — |
| `commentsCount` / `likesCount` | yes | — | — | — |
| `takenAt` / `takenAtIso` | yes | — | — | — |
| `displayUrl` / `videoUrl` / `images[]` / `videos[]` | yes | — | — | — |
| `hashtags[]` / `mentions[]` | yes | — | — | — |
| `ownerUsername` / `ownerFullName` / `ownerId` | yes | — | — | — |
| `locationName` / `locationId` | yes | — | — | — |
| `isSponsored` | yes | — | — | — |
| `username` / `fullName` / `biography` / `externalUrl` | — | yes | — | — |
| `followersCount` / `followingCount` / `postsCount` | — | yes | — | — |
| `isVerified` / `isBusinessAccount` / `businessCategoryName` | — | yes | — | — |
| `profilePicUrl` / `profilePicUrlHd` | — | yes | partial | — |
| `name` / `postsCount` / `topPostsCount` | — | — | yes | — |
| `text` / `createdAt` / `createdAtIso` / `repliesCount` | — | — | — | yes |
| `postShortCode` / `postUrl` | — | — | — | yes |
| `scrapedAt` | yes | yes | yes | yes |

### Pricing

Pay-per-event — you only pay for what successfully lands in the dataset.

| Event | Slug | Price | Per 1,000 |
|-------|------|-------|-----------|
| Actor start (one-time per run) | `actor-start` | $0.005 | — |
| Post scraped | `post-scraped` | $0.0013 | **$1.30** |
| Profile scraped | `profile-scraped` | $0.0013 | **$1.30** |
| Hashtag scraped | `hashtag-scraped` | $0.0013 | **$1.30** |
| Comment scraped | `comment-scraped` | $0.002 | **$2.00** |

**~13% cheaper** than `apify/instagram-scraper`'s $1.50/1,000 results and $2.30/1,000 comments. No monthly rental fee.

#### Cost estimation

| Goal | Approx cost |
|------|-------------|
| 1,000 posts from one profile | $0.005 + $1.30 = **$1.305** |
| 10,000 posts across 100 hashtags | $0.005 + $13.00 = **$13.005** |
| 1,000 comments from one post | $0.005 + $2.00 = **$2.005** |
| 100 profile details | $0.005 + $0.13 = **$0.135** |

### Tips

- **Use a residential proxy.** Instagram blocks datacenter IPs aggressively. The default `proxyConfiguration` is already `{ useApifyProxy: true, apifyProxyGroups: ["RESIDENTIAL"] }`.
- **Set `resultsLimit` low while testing.** A `resultsLimit: 5` smoke test costs less than a penny and proves the input shape.
- **Combine `directUrls` and `username`** to dedupe the same profile under both inputs — the run-level dedup ensures you're charged once.
- **`onlyPostsNewerThan: "3 days"`** stops pagination early on reverse-chronological feeds, saving you both time and dollars.

### Limitations

- **Public data only.** No login, no session cookies. Private profiles return profile metadata but no posts.
- **No `stories` / `mentions` / `places` result types in v0.1.** Stories require authentication; the other two are planned.
- **Comments are best-effort.** Instagram throttles unauthenticated comments traffic more aggressively than feed traffic. The actor surfaces partial results and never fails the run on a comments-endpoint rate limit.
- **No media download.** Output includes media URLs; the actor does not fetch image / video bytes.
- **US-English UI default.** Localization is governed by the proxy's geo.

### FAQ

**Is scraping Instagram legal?**
Public data scraping is generally permitted under recent US case law (e.g. *hiQ Labs v. LinkedIn*). However, you are responsible for compliance with Instagram's Terms of Service, your local laws, and applicable data-protection regulations (GDPR, CCPA). Do not store personal data without a lawful basis.

**Why is my run returning zero rows?**
Two common causes: (1) Instagram blocked the proxy session — try again with a fresh session, or check your proxy plan. (2) The profile is private. Private profiles return the `details` row but no posts.

**Can I get comment replies?**
v0.1 returns top-level comments only. Comment replies (the threaded responses) are deferred to a future enum value `resultsType: comment-replies`.

**Does this work for Reels?**
Yes — reels appear inside the regular profile and hashtag post feeds with `type: "Video"`. A dedicated `resultsType: reels` is planned.

**How does this compare to `apify/instagram-scraper`?**
Same input shape, ~13% lower per-row cost, transparent pay-per-event billing (vs. flat PPR), run-level dedup. The reference supports `stories`, `mentions`, and `places` result types that this actor does not (yet).

### Support

Issues and feature requests welcome on the Actor's Issues tab. For custom integrations or scaled use cases, contact us via Apify Store messaging.

### Disclaimer

This actor scrapes publicly accessible Instagram content. You are responsible for complying with Instagram's Terms of Service and applicable laws (GDPR, CCPA, etc.) in your jurisdiction. The actor does not bypass authentication, solve CAPTCHAs, or access private data.

# Actor input Schema

## `directUrls` (type: `array`):

Instagram URLs to scrape. Accepted patterns: profile (https://www.instagram.com/<username>/), post (https://www.instagram.com/p/<shortcode>/), reel (https://www.instagram.com/reel/<shortcode>/), hashtag (https://www.instagram.com/explore/tags/<tag>/). Leave empty when using `username` or `search` instead.

## `username` (type: `array`):

List of Instagram profile usernames (without the leading @). Alternative to providing profile URLs via `directUrls`.

## `resultsType` (type: `string`):

What to return per source. `posts` returns the post feed for the source. `details` returns profile metadata. `hashtag` returns hashtag metadata. `comments` returns comments for a specific post URL.

## `resultsLimit` (type: `integer`):

Maximum number of result rows per direct URL / username / search hit. For `posts`, caps posts per profile or hashtag. For `comments`, caps comments per post.

## `search` (type: `string`):

Find hashtags, profiles, or users matching this query (uses Instagram's public topsearch endpoint). Prefix with `#` for hashtag intent (e.g. `#travel`).

## `searchType` (type: `string`):

What category to search.

## `searchLimit` (type: `integer`):

Maximum number of search hits (hashtags / profiles) to expand into follow-up requests.

## `onlyPostsNewerThan` (type: `string`):

Filter out posts older than this cutoff. Accepts a UTC date (`YYYY-MM-DD`) or a relative value (`3 days`, `2 months`, `1 year`). Applied client-side after fetch.

## `addParentData` (type: `boolean`):

When true, attach the originating profile or hashtag as `parentData` on each post row.

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

Per-request retry limit on transient failures (429, 5xx).

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

Apify proxy. Residential proxies are strongly recommended — Instagram blocks datacenter IPs aggressively.

## Actor input object example

```json
{
  "directUrls": [
    "https://www.instagram.com/humansofny/"
  ],
  "resultsType": "posts",
  "resultsLimit": 30,
  "searchType": "hashtag",
  "searchLimit": 10,
  "addParentData": false,
  "maxRequestRetries": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "directUrls": [
        "https://www.instagram.com/humansofny/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("prodiger/instagram-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 = {
    "directUrls": ["https://www.instagram.com/humansofny/"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("prodiger/instagram-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 '{
  "directUrls": [
    "https://www.instagram.com/humansofny/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call prodiger/instagram-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Instagram Scraper (Pay-Per-Event)",
        "description": "Scrape Instagram posts, profile details, hashtags, and comments. Drop-in compatible with apify/instagram-scraper input shape — at ~13% lower per-row cost on transparent pay-per-event pricing.",
        "version": "0.1",
        "x-build-id": "icxH3MTWk0QBNSwaA"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/prodiger~instagram-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-prodiger-instagram-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/prodiger~instagram-scraper/runs": {
            "post": {
                "operationId": "runs-sync-prodiger-instagram-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/prodiger~instagram-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-prodiger-instagram-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "directUrls": {
                        "title": "Direct Instagram URLs",
                        "type": "array",
                        "description": "Instagram URLs to scrape. Accepted patterns: profile (https://www.instagram.com/<username>/), post (https://www.instagram.com/p/<shortcode>/), reel (https://www.instagram.com/reel/<shortcode>/), hashtag (https://www.instagram.com/explore/tags/<tag>/). Leave empty when using `username` or `search` instead.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "username": {
                        "title": "Usernames",
                        "type": "array",
                        "description": "List of Instagram profile usernames (without the leading @). Alternative to providing profile URLs via `directUrls`.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "resultsType": {
                        "title": "Results type",
                        "enum": [
                            "posts",
                            "details",
                            "hashtag",
                            "comments"
                        ],
                        "type": "string",
                        "description": "What to return per source. `posts` returns the post feed for the source. `details` returns profile metadata. `hashtag` returns hashtag metadata. `comments` returns comments for a specific post URL.",
                        "default": "posts"
                    },
                    "resultsLimit": {
                        "title": "Results limit (per source)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of result rows per direct URL / username / search hit. For `posts`, caps posts per profile or hashtag. For `comments`, caps comments per post.",
                        "default": 30
                    },
                    "search": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Find hashtags, profiles, or users matching this query (uses Instagram's public topsearch endpoint). Prefix with `#` for hashtag intent (e.g. `#travel`)."
                    },
                    "searchType": {
                        "title": "Search type",
                        "enum": [
                            "hashtag",
                            "profile",
                            "user"
                        ],
                        "type": "string",
                        "description": "What category to search.",
                        "default": "hashtag"
                    },
                    "searchLimit": {
                        "title": "Search limit",
                        "minimum": 1,
                        "maximum": 250,
                        "type": "integer",
                        "description": "Maximum number of search hits (hashtags / profiles) to expand into follow-up requests.",
                        "default": 10
                    },
                    "onlyPostsNewerThan": {
                        "title": "Only posts newer than",
                        "type": "string",
                        "description": "Filter out posts older than this cutoff. Accepts a UTC date (`YYYY-MM-DD`) or a relative value (`3 days`, `2 months`, `1 year`). Applied client-side after fetch."
                    },
                    "addParentData": {
                        "title": "Add parent data",
                        "type": "boolean",
                        "description": "When true, attach the originating profile or hashtag as `parentData` on each post row.",
                        "default": false
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Per-request retry limit on transient failures (429, 5xx).",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy. Residential proxies are strongly recommended — Instagram blocks datacenter IPs aggressively.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
