# Free Google Hotels Scraper — Search + Prices (`s-r/free-google-hotels-scraper`) Actor

- **URL**: https://apify.com/s-r/free-google-hotels-scraper.md
- **Developed by:** [SR](https://apify.com/s-r) (community)
- **Categories:** Travel, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN 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

## Free Google Hotels Scraper — Search, Per-Room Prices & 18-31 OTA Comparison

A Google Hotels scraper that returns structured JSON for hotel search, plus a one-call detail mode that pulls per-room rates and the full Booking.com / Expedia / Hotels.com / Trip.com / Agoda OTA price comparison Google Hotels shows on its property pages. No SerpApi-style markup, no Selenium, no booking.com API key — just the data that already loads in your browser when you open `google.com/travel/search`.

### What you get

- Hotel name, star rating (1-5), star class label, review count, and the structured 5/4/3/2/1-star review breakdown
- Best per-night price as displayed (`€189`) plus `best_price_numeric` and `currency` parsed for direct filtering
- Full OTA price comparison — typically 18-31 booking partners per property (Booking.com, Expedia, Hotels.com, Trip.com, Agoda, Priceline, Hotwire, Vio.com, Travelocity, Orbitz, Kayak, Skyscanner and more), each with its own per-night price, total stay price, and deeplink
- Per-room pricing — every room type Google's mobile property page lists (Deluxe King, Junior Suite, Family Room, etc.) with `room_name`, `price_display`, `price_numeric`, `price_int`, and the OTA deeplink
- Short and long descriptions, ~24 amenity categories grouped by type (pool, spa, fitness, accessibility, family-friendly, business)
- Photo gallery URLs (typically 30-150 high-resolution images per property)
- Latitude / longitude implicit in the `detail_url`, plus `check_dates` (check_in, check_out, nights) so you know exactly which stay window the prices belong to
- Search query echoed back on every row so you can join multiple queries into one dataset

### Why scrape Google Hotels

Hotel pricing data is the most fragmented surface on the public web. The headline price you see on `booking.com/hotel/...` is often €15-€50 different from the same room sold on Expedia, Hotels.com, Agoda, or the property's direct site, and the cheapest option on any given night swaps between OTAs unpredictably. There is no single Google Hotels API — Google's official **Hotel Center** is gated to verified hotel chains and OTAs, **Booking.com's affiliate API** requires an approved partner agreement that takes weeks, and **Expedia's EAN/Rapid API** is sales-team-only with a multi-thousand-dollar minimum. For analysts, marketers, travel-tech founders, and meta-search builders, Google Hotels is the one place where 30 OTAs already bid against each other in one HTML page — if you can read that page programmatically, you have the cheapest rate-shopping signal on the internet.

This actor solves that by hitting `google.com/travel/search` and `google.com/travel/hotels/entity/<id>` directly with `curl_cffi` (Chrome TLS fingerprinting), parsing the `AF_initDataCallback ds:1` hydration blob the page ships with on every load. Because we hit the same SSR templates Google's web client renders for human users, you get exactly what shows up in the browser — including the OTA rate ladder and the per-room matrix that Google only emits in the mobile SSR variant. No headless browser, no CAPTCHA solver, no $1500/month booking.com API key.

Concrete buyer math: a hotel chain revenue manager rate-shopping 200 competitor properties across 6 OTAs every Monday morning pays $0.012 × 200 = **$2.40 per weekly run** — versus paid rate-shopping tools like OTA Insight or Lighthouse that start at $400-1200/month flat. A travel-tech founder building a meta-search MVP can ship on $500/month of full-detail scraping and skip the 8-week Booking.com partner application entirely.

### Input

| Field | Default | Description |
|---|---|---|
| `queries` | required | Array of hotel search queries (`"hotels in Amsterdam"`, `"5-star hotels Tokyo"`, `"beach resorts Bali"`) |
| `max_results_per_query` | `20` | Cap hotels per query (1-100) |
| `hl` | `en` | Language code (`en`, `nl`, `de`, `es`, `fr`, `it`, `ja`, `pt`, `pl`, `sv`) |
| `gl` | `us` | Two-letter country code controlling currency + market |
| `use_cookies` | `true` | Use a fresh anonymous Google session — bypasses the EU consent banner |
| `use_proxy` | `false` | Optional. Apify direct connection works for Google Travel; only enable on rate limits |
| `fetch_details` | `false` | When `true`, fetches each hotel's detail page with mobile UA (~1.5-3s per hotel) and adds `rooms[]`, `ota_offers[]`, amenities, photos, descriptions, and review breakdown |
| `detail_concurrency` | `5` | Parallel detail fetches (1-25). Higher = faster, more session pressure |

### Output

```json
{
  "position": 1,
  "name": "Pulitzer Amsterdam",
  "rating": 4.5,
  "reviews_count": 4823,
  "review_breakdown": {"5": 3201, "4": 1102, "3": 312, "2": 121, "1": 87},
  "star_class": "5-star hotel",
  "star_rating": 5,
  "price_per_night": "€385",
  "best_price_numeric": 385,
  "featured_price_display": "€385",
  "featured_price_numeric": 385,
  "currency": "EUR",
  "check_dates": {"check_in": "2026-05-12", "check_out": "2026-05-13", "nights": 1},
  "detail_url": "https://www.google.com/travel/hotels/entity/CgsI_K-G…",
  "search_query": "hotels in Amsterdam",
  "description_short": "Refined hotel set in 25 canal houses…",
  "description_long": "The Pulitzer Amsterdam is a luxury 5-star hotel…",
  "amenities": [
    {"group": "General", "item": "Free Wi-Fi"},
    {"group": "Wellness", "item": "Spa"},
    {"group": "Family", "item": "Kid-friendly"}
  ],
  "photos": ["https://lh3.googleusercontent.com/proxy/abc=w1080-h720", "..."],
  "ota_offers": [
    {"ota": "Booking.com", "price_per_night": "€385", "price_total": "€385", "deeplink": "https://www.google.com/travel/clk?..."},
    {"ota": "Expedia", "price_per_night": "€392", "price_total": "€392", "deeplink": "https://www.google.com/travel/clk?..."},
    {"ota": "Hotels.com", "price_per_night": "€401", "price_total": "€401", "deeplink": "https://www.google.com/travel/clk?..."}
  ],
  "rooms": [
    {"ota": "Booking.com", "room_name": "Deluxe King Room", "price_display": "€385", "price_numeric": 385, "price_int": 385, "deeplink": "https://www.google.com/travel/clk?..."},
    {"ota": "Booking.com", "room_name": "Junior Suite", "price_display": "€661", "price_numeric": 661, "price_int": 661, "deeplink": "https://www.google.com/travel/clk?..."}
  ]
}
````

`ota_offers[]` is the full booking-partner ladder; `rooms[]` is the per-room matrix Google only embeds in the mobile SSR template (the actor switches UA automatically when `fetch_details=true`). Both are empty arrays when `fetch_details=false` — that mode returns just the search-results-page summary.

### Use cases

**Hotel revenue manager rate-shopping competitor properties.** You manage a 4-star property in Barcelona and need to know every Monday how Booking.com, Expedia, and Hotels.com are pricing your 12 closest competitors over the next 30 nights. You queue 12 queries × 30 dates × full details = 360 hotel detail fetches, $4.32 a week. The dataset gives you exact OTA-by-OTA undercut margins so you can decide whether to drop your Booking.com rate by €15 or hold.

**Travel-tech founder building a hotel meta-search.** You want a Trivago / Kayak alternative for boutique hotels. The single hardest unlock is the OTA rate ladder — and Booking.com partner approval takes 8 weeks with sales calls. This actor gives you the same OTA prices Google Hotels already aggregates: 18-31 booking partners per hotel with deeplinks. Ship the MVP in two weeks for $500 of scraping cost, validate demand, then go for partner deals after you have traffic.

**Travel agency building corporate hotel-program data.** Your client wants to negotiate corporate rates for the 50 hotels their employees stay at most. Pull `rooms[]` once a week for a year — you have a full per-room price history showing rate seasonality, lead-time premiums, and which OTA consistently wins on each property. Use that as leverage in the corporate-rate RFP.

**Hotel-pricing analyst doing market intelligence.** You sell a $200/month report on hotel-rate trends in 25 European cities. Each report needs `best_price_numeric` and `star_rating` for ~500 hotels per city. Run search-only mode (no details): 25 cities × 100 hotels × $0.003 = $7.50 per refresh, fully automated.

### How it compares

| Actor | Price per hotel detail | Per-room pricing | OTA rate ladder | Review breakdown |
|---|---|---|---|---|
| **This actor (s-r/free-google-hotels-scraper)** | **$0.012** (full detail) / $0.003 (search-only) | **yes** (Deluxe Room, Junior Suite, etc.) | yes (18-31 OTAs) | yes (5/4/3/2/1) |
| `martin.forejt/google-hotels-scraper` (#3 on `google hotels scraper` SERP) | per-result, similar tier | partial | yes | partial |
| `webautomation.io/google-hotels-custom-extractor` (#4 SERP) | tool subscription | no | no | no |
| Bright Data Google Hotels SERP API (#1 SERP) | $0.50-$0.75 per request | no | yes | partial |
| SerpApi Google Hotels (#6 SERP) | $0.005-$0.025 per query | no | yes (limited) | yes |

The competitive edge here is `rooms[]` — most Google Hotels scrapers return the OTA list but skip per-room pricing because it only appears in Google's mobile SSR variant. This actor swaps to a mobile UA on detail fetches so you get the full room matrix in one call.

### Pricing

This actor uses Apify's pay-per-event monetization with a two-tier model. **Search mode** ($0.003 per hotel) returns the hotel name, rating, reviews count, summary price, and detail URL — fast and cheap for inventory or list-building tasks. **Full-detail mode** ($0.012 per hotel, opt in via `fetch_details=true`) adds the OTA rate ladder, per-room pricing, amenities, descriptions, photos, and review breakdown. All pricing is pay-per-event — you only pay for results you receive. No actor-start fee, no per-compute-unit charges.

### Limits and gotchas

- `fetch_details=true` adds ~1.5-3s per hotel and runs in parallel up to `detail_concurrency` (capped at 25); a 100-hotel run with details takes ~30-60 seconds end-to-end
- Per-room data only loads on Google's mobile SSR template — the actor switches the User-Agent automatically on detail calls, so you don't need to configure anything
- Google Hotels caps each search-results page at 100 hotels; for >100 results in one city, run multiple narrower queries (e.g. `"5-star hotels Amsterdam"`, `"3-star hotels Amsterdam"`)
- The OTA rate ladder is sourced from the `ds:1` hydration blob — when Google A/B-tests a new layout, expect 1-2 day lag while we update the parser
- Apify residential proxy is **not** required — Apify's default datacenter IPs work fine for Google Travel; leaving `use_proxy=false` saves you ~$8/GB
- Cold-start time is ~3-5 seconds for the first request; subsequent requests in the same run reuse the session pool
- Prices are quoted in the local currency Google Travel renders for the `gl` country code; for cross-currency comparison, convert downstream using the `currency` field

### FAQ

**Can I scrape Google Hotels without an API key?**
Yes. This actor calls `google.com/travel/search` and `google.com/travel/hotels/entity/<id>` directly with anonymous Google session cookies — no Google API key, Booking.com partner ID, or Expedia EAN credential is needed. You only pay Apify's per-result rate.

**How does the per-room pricing work?**
When `fetch_details=true`, the actor fetches the property page with a mobile User-Agent. Google's mobile SSR variant embeds the room matrix (Deluxe King €385, Junior Suite €661, Family Room €420, etc.) inside the `ds:1` JSON payload — desktop UA gets a stripped-down version that omits this. The `rooms[]` array is populated only on detail fetches.

**Will Google rate-limit my scraping?**
At default settings (5 concurrent detail fetches, fresh session cookies, `use_proxy=false`) the actor sustains ~150 hotel details per minute on Apify's default IPs without throttling. If you push `detail_concurrency` to 25 you may see occasional 429s — the actor retries automatically. For sustained >500/min throughput, enable `use_proxy=true` and supply a residential proxy URL.

**Do I need to provide cookies?**
No. The actor pulls fresh anonymous Google session cookies from a managed minter pool on every run. Setting `use_cookies=true` (the default) is the recommended path; turning it off triggers the EU consent banner and reduces success rate.

**What's the cost to scrape 1000 hotels with full details?**
1000 × $0.012 = **$12 per run**. For comparison: scraping 1000 hotels with search-only data is 1000 × $0.003 = **$3**. Most users start with search-only on a broad query, filter the result set down to the 50-100 hotels they actually care about, then re-run those with `fetch_details=true` — a $3 + $1.20 workflow that gets full OTA pricing for one city for under $5.

### Related Actors

- [Free Google Maps Scraper](https://apify.com/s-r/free-google-maps-scraper) — pull places, contact details, hours, and lat/lng for any Google Maps category
- [Free Google Maps Reviews Scraper](https://apify.com/s-r/free-google-maps-reviews-scraper) — every review for any place: stars, text, owner reply
- [Free Google Shopping Reviews](https://apify.com/s-r/free-google-shopping-reviews) — Google Shopping product reviews and rating breakdown by SKU

# Actor input Schema

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

Hotel search queries (e.g. 'hotels in Amsterdam', 'beach resorts Bali').

## `max_results_per_query` (type: `integer`):

Cap hotels per query (1-100).

## `hl` (type: `string`):

Language code (en, nl, de, es…).

## `gl` (type: `string`):

Two-letter country code.

## `use_cookies` (type: `boolean`):

Recommended.

## `use_proxy` (type: `boolean`):

Default OFF. Apify direct connection works for Google Travel; only enable if you hit rate limits.

## `fetch_details` (type: `boolean`):

When true, the actor fetches each hotel's detail page (with mobile UA so Google's SSR includes per-room pricing) and returns: per-room rates (Deluxe Room €385, Junior Suite €661, etc — full room-name + price\_display + price\_numeric + booking deeplink), the full OTA price list (Booking.com, Expedia, Hotels.com, Trip.com, Agoda, etc — typically 15-30 booking partners with per-night price + deeplink), star rating, full description, amenities (24+ categories), photo gallery URLs, and the structured 5/4/3/2/1-star review breakdown. Adds ~1.5-3s per hotel; runs in parallel up to detail\_concurrency.

## `detail_concurrency` (type: `integer`):

How many hotel detail pages to fetch in parallel when fetch\_details=true. Capped at 25.

## Actor input object example

```json
{
  "queries": [
    "hotels in Amsterdam",
    "5-star hotels Tokyo"
  ],
  "max_results_per_query": 20,
  "hl": "en",
  "gl": "us",
  "use_cookies": true,
  "use_proxy": false,
  "fetch_details": false,
  "detail_concurrency": 5
}
```

# 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": [
        "amsterdam hotels"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("s-r/free-google-hotels-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": ["amsterdam hotels"] }

# Run the Actor and wait for it to finish
run = client.actor("s-r/free-google-hotels-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": [
    "amsterdam hotels"
  ]
}' |
apify call s-r/free-google-hotels-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Free Google Hotels Scraper — Search + Prices",
        "version": "0.1",
        "x-build-id": "BnTeDkWSPjbBeLqYS"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/s-r~free-google-hotels-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-s-r-free-google-hotels-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/s-r~free-google-hotels-scraper/runs": {
            "post": {
                "operationId": "runs-sync-s-r-free-google-hotels-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/s-r~free-google-hotels-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-s-r-free-google-hotels-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": "Hotel search queries (e.g. 'hotels in Amsterdam', 'beach resorts Bali').",
                        "items": {
                            "type": "string"
                        }
                    },
                    "max_results_per_query": {
                        "title": "Max results per query",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Cap hotels per query (1-100).",
                        "default": 20
                    },
                    "hl": {
                        "title": "Language",
                        "type": "string",
                        "description": "Language code (en, nl, de, es…).",
                        "default": "en"
                    },
                    "gl": {
                        "title": "Country (ISO)",
                        "type": "string",
                        "description": "Two-letter country code.",
                        "default": "us"
                    },
                    "use_cookies": {
                        "title": "Use fresh Google cookies",
                        "type": "boolean",
                        "description": "Recommended.",
                        "default": true
                    },
                    "use_proxy": {
                        "title": "Route through PROXY_URL",
                        "type": "boolean",
                        "description": "Default OFF. Apify direct connection works for Google Travel; only enable if you hit rate limits.",
                        "default": false
                    },
                    "fetch_details": {
                        "title": "Fetch full details per hotel",
                        "type": "boolean",
                        "description": "When true, the actor fetches each hotel's detail page (with mobile UA so Google's SSR includes per-room pricing) and returns: per-room rates (Deluxe Room €385, Junior Suite €661, etc — full room-name + price_display + price_numeric + booking deeplink), the full OTA price list (Booking.com, Expedia, Hotels.com, Trip.com, Agoda, etc — typically 15-30 booking partners with per-night price + deeplink), star rating, full description, amenities (24+ categories), photo gallery URLs, and the structured 5/4/3/2/1-star review breakdown. Adds ~1.5-3s per hotel; runs in parallel up to detail_concurrency.",
                        "default": false
                    },
                    "detail_concurrency": {
                        "title": "Detail fetch concurrency",
                        "minimum": 1,
                        "maximum": 25,
                        "type": "integer",
                        "description": "How many hotel detail pages to fetch in parallel when fetch_details=true. Capped at 25.",
                        "default": 5
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
