# Expedia Reviews Scraper (`reviewly/expedia-reviews-scraper`) Actor

Scrapes guest reviews from Expedia hotel/product pages. Extracts ratings, review text, stay info, management responses, photos, and hotel metadata (address, coordinates, star rating, rating distribution).

- **URL**: https://apify.com/reviewly/expedia-reviews-scraper.md
- **Developed by:** [Reviewly](https://apify.com/reviewly) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 result scrapeds

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

## 🏨 Expedia Reviews Scraper — Extract Hotel Reviews Without an API Key

**Turn any Expedia hotel page into a clean dataset of guest reviews — scores, review text, stay details, traveller photos, and management responses — plus the hotel's full rating profile.**

- ⭐ Scrape **every guest review** of a property, newest-first, with full text and stay info
- 🏨 Capture the **hotel profile**: address, coordinates, star rating, guest rating, rating distribution, category scores (cleanliness, location, staff…)
- 🛡️ **Anti-bot protection handled for you** — a fast HTTP client with a real browser TLS fingerprint, with an automatic hardened-browser fallback and IP rotation when blocked
- 📅 **Incremental scraping** with a date cutoff, perfect for daily or weekly review monitoring
- 📦 Export to **JSON, CSV, or Excel**, or pull results straight into your app via the Apify API

Paste an Expedia hotel URL, press **Start**, get data.

---

### 📌 What This Actor Does

Give it one or more **Expedia hotel/product page URLs** — any slug form works, on any Expedia country site:

| URL form | Example |
|---|---|
| Long slug | `https://www.expedia.co.uk/Kastoria-Hotels-Hotel-Anastassiou.h6136437.Hotel-Information` |
| Short path | `https://www.expedia.com/h17369936.Hotel-Information` |
| Minimal slug | `https://www.expedia.com/Hotel.h600217.Hotel-Information` |

The country site you use (`expedia.com`, `expedia.co.uk`, …) decides the language and currency of the responses. For every property the Actor returns one structured record combining the hotel profile and as many reviews as you ask for, pulled from Expedia's own internal GraphQL API — not from fragile HTML selectors.

---

### ⚙️ Input

| Field | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array | — | Expedia hotel page URLs (objects with `url`, or plain strings). |
| `maxReviews` | integer | `1000` | Max reviews per property. `0` = no limit. |
| `reviewSort` | select | `newest` | `newest`, `relevant`, `highest`, or `lowest`. |
| `targetDate` | string | — | ISO date cutoff — stop at reviews older than this (forces newest-first). |
| `includeRatingsOnlyReviews` | boolean | `true` | Include reviews that carry only a score, no text. |
| `proxy` | object | — | Proxy configuration. Residential recommended. (`proxyConfiguration` is accepted as an alias.) |

```json
{
    "startUrls": [
        { "url": "https://www.expedia.co.uk/Kastoria-Hotels-Hotel-Anastassiou.h6136437.Hotel-Information" }
    ],
    "maxReviews": 200,
    "reviewSort": "newest",
    "targetDate": "2024-01-01",
    "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
````

***

### 📤 Output

One dataset record per property:

```json
{
    "propertyId": "6136437",
    "name": "Hotel Anastassiou",
    "description": "Morning coffee by Kastoria Lake sets the tone…",
    "starRating": 2,
    "rating": 8,
    "superlative": "Very good",
    "reviewCount": 70,
    "ratingCounts": [
        { "rating": 10, "count": 21, "percent": 30, "description": "10 - Excellent" }
    ],
    "categoryRatings": [
        { "label": "Cleanliness", "score": 8.4 },
        { "label": "Location", "score": 8.2 }
    ],
    "address": {
        "street": "1st km Highway Kastoria-Athens",
        "city": "Kastoria",
        "region": "Western Macedonia",
        "postalCode": "52100",
        "country": "GRC"
    },
    "coordinates": { "latitude": 40.498285, "longitude": 21.266815 },
    "image": "https://images.trvl-media.com/lodging/…",
    "priceRange": "from £40 - per night (includes taxes and fees)",
    "petsAllowed": "Pets not allowed…",
    "url": "https://www.expedia.co.uk/Kastoria-Hotels-Hotel-Anastassiou.h6136437.Hotel-Information",
    "reviews": [
        {
            "reviewId": "65f2cdfd6167c03fb85cefe7",
            "rating": 10,
            "ratingOutOf": 10,
            "superlative": "Excellent",
            "title": "Love this town!!",
            "text": "Nice hotel. Nice room. Nice people!!…",
            "locale": "en_US",
            "date": "2024-03-14",
            "dateText": "14 Mar 2024",
            "verified": true,
            "stayInfo": "Stayed 1 night in Mar 2024",
            "themes": ["Liked: Cleanliness, staff & service…"],
            "helpfulCount": 0,
            "reviewer": "Jaymi",
            "travelers": [],
            "photos": ["https://a.travel-assets.com/ugc/hotel-reviews/…"],
            "managementResponses": [
                { "header": "Response from Anastassiou hotel on 8 Apr 2025", "date": "2025-04-08", "text": "Thank you…" }
            ]
        }
    ]
}
```

Reviews are `null`-dated (with `dateText` kept) only when the site locale renders dates in a non-English format.

***

### 🧠 How It Works

1. **Fast path (default):** an HTTP client with a genuine Firefox TLS/HTTP2 fingerprint ([impit](https://github.com/apify/impit)) fetches the hotel page, earns Expedia's Akamai Bot Manager cookies, and parses the hotel profile from the page's schema.org microdata and server-rendered state.
2. **Reviews via GraphQL:** the Actor then pages through Expedia's internal `PropertyReviewsQuery` API (25 reviews per request) on the same session, absorbing rotated cookies on every response.
3. **Fallback on hard blocks:** if an IP is challenged, a fingerprint-hardened Firefox ([Camoufox](https://camoufox.com)) solves the check (DataDome interstitial reload loop included), and impit replays the browser's own identity — same proxy session, same Firefox shape, no client hints.
4. **IP rotation:** each start URL gets up to 8 fresh proxy sessions before giving up; a working session is reused across properties.
5. When a fallback attempt fails to clear, a **debug screenshot + challenge iframe details** are stored in the run's key-value store so failures are self-diagnosing.

#### Maintenance notes

- The reviews API uses a **persisted query hash** (`REVIEWS_QUERY_HASH` in `src/scraper.js`). If Expedia bumps its client, requests return `PersistedQueryNotFound` — recapture the hash from the browser DevTools Network tab (filter `graphql`, operation `PropertyReviewsQuery`, copy `extensions.persistedQuery.sha256Hash`).
- The GraphQL gateway requires a `client-info` header (`CLIENT_INFO` in `src/scraper.js`); any recent value captured the same way works.

***

### 🖥️ Running Locally

```bash
pnpm install
## optional, only needed for the browser fallback:
npx camoufox-js fetch

## input lives in storage/key_value_stores/default/INPUT.json
pnpm start
```

Set the Apify run timeout to **≥ 900 s** — a run that needs several browser solves can take a while.

# Actor input Schema

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

Expedia hotel/product page URLs. All slug forms are accepted — long (https://www.expedia.co.uk/Kastoria-Hotels-Hotel-Anastassiou.h6136437.Hotel-Information), short (https://www.expedia.com/h17369936.Hotel-Information) or minimal (https://www.expedia.com/Hotel.h600217.Hotel-Information). The URL's country site (expedia.com vs expedia.co.uk…) decides the language/currency of the responses.

## `maxReviews` (type: `integer`):

Maximum number of reviews to scrape per property. 0 means no limit (all reviews).

## `reviewSort` (type: `string`):

Order in which reviews are fetched. When "Target date" is set, newest-first is enforced so the cutoff works.

## `targetDate` (type: `string`):

Stop scraping reviews older than this date (ISO 8601, e.g. 2025-01-01). Reviews are collected newest-first, so this returns only reviews on or after the date — useful for incremental runs.

## `includeRatingsOnlyReviews` (type: `boolean`):

Include reviews that carry only a score, with no text.

## `proxy` (type: `object`):

Residential proxy is recommended — Expedia's Akamai Bot Manager distrusts datacenter IPs. The same proxy session is shared between the (fallback) bypass browser and all fetch requests so the anti-bot cookies stay bound to one IP.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.expedia.co.uk/Kastoria-Hotels-Hotel-Anastassiou.h6136437.Hotel-Information"
    }
  ],
  "maxReviews": 1000,
  "reviewSort": "newest",
  "includeRatingsOnlyReviews": true,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Each record contains hotel info (propertyId, name, description, url, starRating, guest rating, superlative, reviewCount, ratingCounts, categoryRatings, address, coordinates, image, priceRange, petsAllowed) and a reviews array with reviewId, rating (out of 10), superlative, title, text, locale, date (ISO) + dateText, verified, stayInfo, themes, helpfulCount, reviewer, travelers, photos, and managementResponses.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.expedia.co.uk/Kastoria-Hotels-Hotel-Anastassiou.h6136437.Hotel-Information"
        }
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("reviewly/expedia-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.expedia.co.uk/Kastoria-Hotels-Hotel-Anastassiou.h6136437.Hotel-Information" }],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("reviewly/expedia-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.expedia.co.uk/Kastoria-Hotels-Hotel-Anastassiou.h6136437.Hotel-Information"
    }
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call reviewly/expedia-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Expedia Reviews Scraper",
        "description": "Scrapes guest reviews from Expedia hotel/product pages. Extracts ratings, review text, stay info, management responses, photos, and hotel metadata (address, coordinates, star rating, rating distribution).",
        "version": "0.0",
        "x-build-id": "cWsYa8oq9a8vDbO8I"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/reviewly~expedia-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-reviewly-expedia-reviews-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/reviewly~expedia-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-reviewly-expedia-reviews-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/reviewly~expedia-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-reviewly-expedia-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Expedia hotel/product page URLs. All slug forms are accepted — long (https://www.expedia.co.uk/Kastoria-Hotels-Hotel-Anastassiou.h6136437.Hotel-Information), short (https://www.expedia.com/h17369936.Hotel-Information) or minimal (https://www.expedia.com/Hotel.h600217.Hotel-Information). The URL's country site (expedia.com vs expedia.co.uk…) decides the language/currency of the responses.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxReviews": {
                        "title": "Max reviews per property",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of reviews to scrape per property. 0 means no limit (all reviews).",
                        "default": 1000
                    },
                    "reviewSort": {
                        "title": "Review sort order",
                        "enum": [
                            "newest",
                            "relevant",
                            "highest",
                            "lowest"
                        ],
                        "type": "string",
                        "description": "Order in which reviews are fetched. When \"Target date\" is set, newest-first is enforced so the cutoff works.",
                        "default": "newest"
                    },
                    "targetDate": {
                        "title": "Target date (cutoff)",
                        "type": "string",
                        "description": "Stop scraping reviews older than this date (ISO 8601, e.g. 2025-01-01). Reviews are collected newest-first, so this returns only reviews on or after the date — useful for incremental runs."
                    },
                    "includeRatingsOnlyReviews": {
                        "title": "Include ratings-only reviews",
                        "type": "boolean",
                        "description": "Include reviews that carry only a score, with no text.",
                        "default": true
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Residential proxy is recommended — Expedia's Akamai Bot Manager distrusts datacenter IPs. The same proxy session is shared between the (fallback) bypass browser and all fetch requests so the anti-bot cookies stay bound to one IP."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
