# VivaReal Property Scraper - Brazil Real Estate Data (`memo23/vivareal-property-scraper`) Actor

Scrape property listings from VivaReal Brazil — search any city or neighborhood, for sale or rent. Every row has price, condo fee, IPTU, bedrooms, bathrooms, area, amenities, full address with geo coordinates, all photos and the advertiser. Fast JSON API, no page limits. JSON/CSV/Excel.

- **URL**: https://apify.com/memo23/vivareal-property-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Real estate, AI, Agents
- **Stats:** 2 total users, 1 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 property listings

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

## VivaReal Property Scraper 🇧🇷🏠

Extract real-estate listings from **VivaReal** (www.vivareal.com.br), Brazil's largest property portal — at scale, with no browser, no login and no captcha solving. Search any city or neighborhood, choose **sale or rental**, and get one clean row per property: price, condominium fee, IPTU, bedrooms, bathrooms, area, amenities, full address with **GPS coordinates**, every photo, and the advertiser.

Built on VivaReal's own internal **glue-api** — the same JSON feed the website itself uses — so results are fast, complete and stable. The same architecture also covers the sibling portal **ZAP Imóveis**.

![How the VivaReal Property Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-vivareal.png)

---

### Why use this scraper

- **Search by name, not by fiddly URLs** — type `São Paulo, SP`, `Rio de Janeiro` or `Copacabana` and the actor resolves it for you. Or paste any VivaReal search / property URL.
- **Rich rows out of the box** — price, condo fee, IPTU, room counts, usable area, amenities list, neighborhood + zone + city + state + zip, latitude/longitude, up to ~30 image URLs, and the advertiser (name, license, phone, WhatsApp, website).
- **Sale or rental** — a single toggle flips between `venda` and `aluguel`; rental rows include the total monthly price (rent + fees).
- **Fast & reliable** — reads JSON straight from the glue-api over Brazilian residential IPs, paginating up to 100 listings per request. No headless browser to time out.
- **Pay per result** — you are billed per property row, with a tiny per-run start fee. No monthly rental.
- **Export anywhere** — JSON, CSV, Excel, or the Apify API.

---

### What you can scrape

| Input | Example | What you get |
|-------|---------|--------------|
| **Locations** | `São Paulo, SP`, `Copacabana` | Every matching listing, paginated |
| **Sale / Rental** | `SALE` or `RENTAL` | For-sale or for-rent properties |
| **Property types** | `APARTMENT`, `HOME`, `FARM`… | Restrict to given unit types |
| **Search URLs** | `/venda/sp/sao-paulo/…` | The exact search you see on site |
| **Property URLs** | `/imovel/…-id-123/` | A single property, by URL |

---

### How it works

1. **Resolve the location.** Free-text like `São Paulo, SP` is looked up against VivaReal's location autocomplete to get the internal `addressLocationId` (state acronyms disambiguate same-named places).
2. **Call the glue-api.** The actor requests `https://glue-api.vivareal.com/v2/listings` over a Brazilian residential IP with the required `x-domain` header — returning full JSON, no interactive Cloudflare challenge.
3. **Parse each listing** into a flat row: pricing, rooms, area, amenities, address + geo, images and advertiser.
4. **Paginate** through `from`/`size` up to your `maxItems` / `maxItemsPerSearch` caps, deduplicating by listing id.

---

### Input

| Field | Type | Description |
|-------|------|-------------|
| `locationQueries` | array | Cities / neighborhoods to search, e.g. `São Paulo, SP`. |
| `businessType` | select | `SALE` (venda) or `RENTAL` (aluguel). Default `SALE`. |
| `propertyTypes` | array | Optional filter: `APARTMENT`, `HOME`, `CONDOMINIUM`, `PENTHOUSE`, `FLAT`, `KITNET`, `ALLOTMENT_LAND`, `FARM`, `OFFICE`, `BUSINESS`. |
| `startUrls` | array | VivaReal search (`/venda/…`, `/aluguel/…`) and/or property (`/imovel/…`) URLs. |
| `maxItems` | integer | Hard cap on rows for the whole run. Default 1000. |
| `maxItemsPerSearch` | integer | Cap per location / search. Default 1000. |
| `maxConcurrency` | integer | Parallel requests. Default 6. |
| `maxRequestRetries` | integer | Retries per request on blocks/errors. Default 12. |
| `proxy` / `customProxyUrls` | object / array | Optional proxy overrides — leave empty to use the built-in Brazilian residential proxy. |

#### Example input

```json
{
  "locationQueries": ["São Paulo, SP", "Copacabana, RJ"],
  "businessType": "SALE",
  "propertyTypes": ["APARTMENT"],
  "maxItems": 500
}
````

***

### Output sample

Each row is one property listing:

```json
{
  "listingId": "2795093905",
  "url": "https://www.vivareal.com.br/imovel/apartamento-2-quartos-city-america-sao-paulo-sp-69m2-id-2795093905/",
  "portal": "VIVAREAL",
  "title": "Apartamento para venda com 69 m² com 2 quartos em City América - São Paulo - SP",
  "businessType": "SALE",
  "listingType": "USED",
  "propertyType": "APARTMENT",
  "price": 790000,
  "currency": "BRL",
  "monthlyCondoFee": 700,
  "yearlyIptu": 300,
  "rentalTotalPrice": null,
  "bedrooms": 2,
  "bathrooms": 2,
  "suites": 1,
  "parkingSpaces": 1,
  "usableArea": 69,
  "amenities": ["ELEVATOR", "PETS_ALLOWED", "PARTY_HALL", "GAMES_ROOM", "POOL"],
  "neighborhood": "City América",
  "zone": "Zona Norte",
  "city": "São Paulo",
  "stateAcronym": "SP",
  "zipCode": "05101100",
  "latitude": -23.506317,
  "longitude": -46.725045,
  "images": ["https://resizedimgs.vivareal.com/img/vr-listing/…/imovel.jpg?action=fit-in&dimension=870x653"],
  "advertiserName": "M&R Imóveis",
  "advertiserLicense": "125405-F-SP",
  "advertiserPhone": "11978576933",
  "advertiserWebsite": "http://…",
  "createdAt": "2026-01-14T…",
  "sourceType": "search",
  "scrapedAt": "2026-07-09T…"
}
```

#### Key output fields

| Field | Meaning |
|-------|---------|
| `price`, `currency` | Sale/rent price in BRL |
| `monthlyCondoFee`, `yearlyIptu` | Condominium fee and property tax |
| `rentalTotalPrice` | Total monthly cost for rentals (rent + fees) |
| `bedrooms`, `bathrooms`, `suites`, `parkingSpaces` | Room counts |
| `usableArea`, `totalArea` | Area in m² |
| `amenities` | Building/unit amenity codes |
| `latitude`, `longitude` | GPS coordinates |
| `advertiser*` | Agency name, license, phone, WhatsApp, website, logo |

***

### FAQ

**Is scraping VivaReal legal?**
The actor collects only publicly available listing data. You are responsible for using the output in compliance with VivaReal's terms, applicable laws (including the Brazilian LGPD) and any copyright over the content.

**Do I need a proxy?**
No. A Brazilian residential proxy is built in at no extra cost. You can supply your own via `proxy` or `customProxyUrls` if you prefer.

**Does it work for rentals?**
Yes — set `businessType` to `RENTAL`. Rental rows include `rentalTotalPrice`.

**Does it also cover ZAP Imóveis?**
VivaReal and ZAP Imóveis share the same glue-api architecture, so the same approach applies. This actor targets VivaReal.

**How is pricing calculated?**
Pay-per-event: a small fee per property row plus a tiny per-run start fee. No monthly subscription.

**Why is a listing's `url` a rebuilt link?**
VivaReal serves listing data separately from its page URLs, so the actor reconstructs the canonical property URL from the listing id. VivaReal redirects it to the live page.

***

### Support

Found a missing field or a location that won't resolve? Open an issue on the actor's page — include the input you used. Feature requests welcome.

### ⚠️ Disclaimer

This scraper accesses only publicly available information on VivaReal. It does not log in, bypass paywalls, or collect private/personal data beyond what advertisers publish on public listings. You are solely responsible for how you use the collected data, including compliance with VivaReal's Terms of Use, the Brazilian LGPD, the GDPR where applicable, and all relevant local laws. This tool is not affiliated with, endorsed by, or connected to VivaReal, Grupo ZAP, or OLX Brasil.

### SEO Keywords

VivaReal scraper, VivaReal API, VivaReal property scraper, Brazil real estate scraper, scrape VivaReal listings, imóveis Brazil data, ZAP Imóveis scraper, Brazilian property data, real estate data extraction Brazil, VivaReal venda aluguel scraper, apartamento casa scraper, property listings Brazil, São Paulo real estate data, Rio de Janeiro property scraper, imoveis scraper, Apify real estate.

# Actor input Schema

## `locationQueries` (type: `array`):

Cities or neighborhoods to search, e.g. `São Paulo, SP`, `Rio de Janeiro`, `Copacabana`. Add the state acronym (`, SP`, `, RJ`) to disambiguate same-named places. Each is resolved and paginated.

## `businessType` (type: `string`):

Whether to scrape properties for sale or for rent. Applies to the Locations above.

## `propertyTypes` (type: `array`):

Restrict to specific property types. Leave empty for all. Common values: `APARTMENT`, `HOME`, `CONDOMINIUM`, `PENTHOUSE`, `FLAT`, `KITNET`, `ALLOTMENT_LAND`, `FARM`, `OFFICE`, `BUSINESS`.

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

Paste VivaReal search URLs (`https://www.vivareal.com.br/venda/sp/sao-paulo/...` or `/aluguel/...`) and/or property URLs (`https://www.vivareal.com.br/imovel/...-id-<id>/`). Auto-classified.

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

Hard cap on rows across the entire run. Each row is one paid `property` event. Default 1000. Free-tier users are additionally capped at 100.

## `maxItemsPerSearch` (type: `integer`):

Cap per location / search URL. VivaReal serves at most 1500 listings per search (30 per API page) — split a big city into neighborhoods or property types to reach more. Default 1000.

## `maxConcurrency` (type: `integer`):

Parallel HTTP requests (mainly affects pasted property URLs). Default 6.

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

Per-request retry budget on Cloudflare blocks (403), 429 and network errors. Each retry rotates to a fresh Brazilian residential IP. Default 12.

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

Leave empty — the actor already routes all traffic through its own built-in Brazilian residential proxy at no extra cost to you. Only set this if you want to use your own proxies.

## `customProxyUrls` (type: `array`):

Optional — bring your own HTTP proxy (e.g. `http://user:pass@host:port`). When set, these are used instead of Apify Proxy on any plan; the scraper rotates the session per request. You usually don't need this: the default Brazilian residential proxy reaches the VivaReal API reliably. Must work from Apify's cloud egress (test with a real run first).

## Actor input object example

```json
{
  "locationQueries": [
    "São Paulo, SP"
  ],
  "businessType": "SALE",
  "propertyTypes": [],
  "startUrls": [],
  "maxItems": 1000,
  "maxItemsPerSearch": 1000,
  "maxConcurrency": 6,
  "maxRequestRetries": 12,
  "customProxyUrls": []
}
```

# 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 = {
    "locationQueries": [
        "São Paulo, SP"
    ],
    "propertyTypes": [],
    "startUrls": [],
    "customProxyUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/vivareal-property-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 = {
    "locationQueries": ["São Paulo, SP"],
    "propertyTypes": [],
    "startUrls": [],
    "customProxyUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/vivareal-property-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 '{
  "locationQueries": [
    "São Paulo, SP"
  ],
  "propertyTypes": [],
  "startUrls": [],
  "customProxyUrls": []
}' |
apify call memo23/vivareal-property-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "VivaReal Property Scraper - Brazil Real Estate Data",
        "description": "Scrape property listings from VivaReal Brazil — search any city or neighborhood, for sale or rent. Every row has price, condo fee, IPTU, bedrooms, bathrooms, area, amenities, full address with geo coordinates, all photos and the advertiser. Fast JSON API, no page limits. JSON/CSV/Excel.",
        "version": "0.1",
        "x-build-id": "5anifuBjV57LYHgAN"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~vivareal-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-vivareal-property-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/memo23~vivareal-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-vivareal-property-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/memo23~vivareal-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-vivareal-property-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": {
                    "locationQueries": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Cities or neighborhoods to search, e.g. `São Paulo, SP`, `Rio de Janeiro`, `Copacabana`. Add the state acronym (`, SP`, `, RJ`) to disambiguate same-named places. Each is resolved and paginated.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "businessType": {
                        "title": "Sale or rental",
                        "enum": [
                            "SALE",
                            "RENTAL"
                        ],
                        "type": "string",
                        "description": "Whether to scrape properties for sale or for rent. Applies to the Locations above.",
                        "default": "SALE"
                    },
                    "propertyTypes": {
                        "title": "Property types (optional)",
                        "type": "array",
                        "description": "Restrict to specific property types. Leave empty for all. Common values: `APARTMENT`, `HOME`, `CONDOMINIUM`, `PENTHOUSE`, `FLAT`, `KITNET`, `ALLOTMENT_LAND`, `FARM`, `OFFICE`, `BUSINESS`.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "VivaReal URLs (optional)",
                        "type": "array",
                        "description": "Paste VivaReal search URLs (`https://www.vivareal.com.br/venda/sp/sao-paulo/...` or `/aluguel/...`) and/or property URLs (`https://www.vivareal.com.br/imovel/...-id-<id>/`). Auto-classified.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max results (whole run)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on rows across the entire run. Each row is one paid `property` event. Default 1000. Free-tier users are additionally capped at 100.",
                        "default": 1000
                    },
                    "maxItemsPerSearch": {
                        "title": "Max results per location",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Cap per location / search URL. VivaReal serves at most 1500 listings per search (30 per API page) — split a big city into neighborhoods or property types to reach more. Default 1000.",
                        "default": 1000
                    },
                    "maxConcurrency": {
                        "title": "Max parallel requests",
                        "minimum": 1,
                        "maximum": 15,
                        "type": "integer",
                        "description": "Parallel HTTP requests (mainly affects pasted property URLs). Default 6.",
                        "default": 6
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Per-request retry budget on Cloudflare blocks (403), 429 and network errors. Each retry rotates to a fresh Brazilian residential IP. Default 12.",
                        "default": 12
                    },
                    "proxy": {
                        "title": "Proxy configuration (optional override)",
                        "type": "object",
                        "description": "Leave empty — the actor already routes all traffic through its own built-in Brazilian residential proxy at no extra cost to you. Only set this if you want to use your own proxies."
                    },
                    "customProxyUrls": {
                        "title": "Custom proxy URLs (advanced)",
                        "type": "array",
                        "description": "Optional — bring your own HTTP proxy (e.g. `http://user:pass@host:port`). When set, these are used instead of Apify Proxy on any plan; the scraper rotates the session per request. You usually don't need this: the default Brazilian residential proxy reaches the VivaReal API reliably. Must work from Apify's cloud egress (test with a real run first).",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
