# OSM Neighborhood Analyzer (`saregaa/osm-neighborhood-analyzer`) Actor

Analyzes any neighborhood using OpenStreetMap — no API key needed. Enter an address and radius, get back nearby restaurants, subway, parks, schools, hospitals and 27 more categories in one call. Results include distance, phone, opening hours, website.

- **URL**: https://apify.com/saregaa/osm-neighborhood-analyzer.md
- **Developed by:** [Saregaa](https://apify.com/saregaa) (community)
- **Categories:** Real estate, Travel, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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

## OSM Neighborhood Analyzer — Free Foursquare & Google Places Alternative

> **Find nearby subway stations, restaurants, parks, schools, hospitals, and 30+ other place categories around any address in the world — with a single API call. No API key. No usage fees. Powered by OpenStreetMap.**

---

### What Is This Actor?

**OSM Neighborhood Analyzer** turns any address into a complete neighborhood intelligence report in seconds. You provide an address and a search radius; the actor returns every relevant place nearby — sorted by walking distance, complete with phone numbers, opening hours, and websites.

This is a **production-ready, free alternative to Foursquare Places API, Google Places API, and HERE Places API**. Where those services charge $2–$17 per 1,000 requests, this actor uses the OpenStreetMap Overpass API — free, open, and covering every country on Earth.

The key innovation is a **single optimized batch query**: instead of firing one request per category (30+ API calls), the actor intelligently groups all tag lookups into one Overpass QL query. This makes it 10–30× faster than naive implementations and virtually eliminates the risk of rate limiting.

---

### Who Is This For?

**Real estate platforms & proptech startups** — Automatically enrich every listing with a neighborhood walkability score: nearest subway (312m), 14 restaurants within 500m, 3 schools within 1km.

**Lead generation & local SEO tools** — Build datasets of businesses around any location: all restaurants, gyms, pharmacies, or salons in a city district.

**Travel & relocation apps** — Help users understand a new neighborhood before they move or visit. Pull all relevant POIs in one API call.

**Market research & consulting** — Analyze competitor density, service gaps, and amenity coverage across multiple cities.

**Data scientists & GIS analysts** — Export clean, structured JSON/CSV datasets for spatial analysis in Python, R, QGIS, or any mapping tool.

**Urban planners & academics** — No budget for proprietary APIs? OpenStreetMap data is free, global, and continuously updated by millions of contributors.

---

### Key Features

- **30+ place categories in one request** — transport, food, health, education, finance, leisure, and more
- **Single-query batch architecture** — all categories fetched in one optimized Overpass QL call (typically 5–15 seconds)
- **Distance-sorted results** — every result includes `distance_m` (straight-line from your address)
- **Rich structured output** — name, address, phone, website, opening hours, GPS coordinates, wheelchair access, operator
- **Global coverage** — works for any address on Earth where OSM contributors have mapped the area
- **Automatic failover** — queries 4 different Overpass API mirrors if one is unavailable
- **Proxy support** — optional Apify proxy to bypass Nominatim and Overpass rate limits on high-volume runs
- **Dual output** — flat dataset (CSV/JSON/Excel-ready) + full structured report with per-category summary

---

### Covered Categories (32 Total)

| Group                 | Categories                                                         |
| --------------------- | ------------------------------------------------------------------ |
| 🚇 Transport          | Metro/Subway, Bus Stop, Train Station, Tram Stop, Airport, Parking |
| 🍽️ Food & Grocery   | Restaurant, Café, Fast Food, Bakery, Supermarket, Market          |
| 🎓 Education          | Kindergarten, School, University, Library                          |
| 🏥 Health             | Hospital, Clinic, Pharmacy, Dentist, Gym/Fitness, Spa              |
| 🏦 Finance & Services | Bank, ATM, Post Office, Laundry, Hair Salon                        |
| 🌿 Leisure            | Park, Playground, Cinema, Theater, Museum, Beach, Shopping Mall    |

---

### Example Output

Each result is a flat JSON object ready for immediate use:

```json
{
  "osm_id": 5506236036,
  "osm_type": "node",
  "name": "LasaGnaM Nazionale",
  "category_key": "fast_food",
  "distance_m": 892,
  "address": "Via Nazionale 184, Roma, 00184",
  "street": "Via Nazionale",
  "housenumber": "184",
  "city": "Roma",
  "postcode": "00184",
  "country": null,
  "lat": 41.898089,
  "lng": 12.4889961,
  "opening_hours": "Mo-Th 07:30-22:00; Fr 07:30-23:00; Sa 10:00-23:30; Su 10:00-22:00",
  "phone": "+39 06 4891 3677",
  "website": "https://lasagnam.it/",
  "wheelchair": null,
  "operator": null
}
````

The full run output also includes a **summary report** in the Key-Value Store:

```json
{
  "meta": {
    "location": "Piazza del Colosseo, Rome, Italy",
    "geocoded": "41.890251,12.492373",
    "radius_m": 1000,
    "total_places": 347
  },
  "summary": {
    "restaurant": { "label": "Restaurant", "count": 84, "nearest_m": 47, "avg_dist_m": 612 },
    "metro_subway": { "label": "Metro / Subway", "count": 2, "nearest_m": 231, "avg_dist_m": 478 },
    "park": { "label": "Park", "count": 5, "nearest_m": 89, "avg_dist_m": 534 }
  }
}
```

***

### Input Parameters

| Parameter              | Type    | Required | Default  | Description                                                 |
| ---------------------- | ------- | -------- | -------- | ----------------------------------------------------------- |
| `address`            | string  | ✅       | —       | Any address or place name (e.g.`"350 5th Ave, New York"`) |
| `radius`             | integer | —       | `1000` | Search radius in meters (100–5000)                         |
| `limit`              | integer | —       | `50`   | Max results per category (1–200)                           |
| `proxyConfiguration` | object  | —       | —       | Apify proxy config (recommended for high-volume use)        |

The `address` field accepts free-form text. It is geocoded via Nominatim (OpenStreetMap's geocoding service) to latitude/longitude coordinates, then used as the center of the search radius.

***

### How It Works (Technical)

1. **Geocoding** — The address string is resolved to `(lat, lng)` via Nominatim, with Chrome impersonation via `curl_cffi` to avoid WAF blocks. Falls back across 2 Nominatim servers.
2. **Query building** — All 32 category tag filters are merged into a single optimized Overpass QL query using regex tag grouping, minimizing round-trips.
3. **Data fetch** — The batch query is sent to the best available Overpass API mirror (4 servers with automatic fallover). The actor handles HTTP 429/504/5xx with retry + backoff.
4. **Local parsing** — Raw OSM elements are matched to categories, enriched with computed distance, structured into flat records, sorted by `distance_m`, and trimmed to `limit`.
5. **Export** — Results pushed to Apify Dataset (flat, CSV/JSON exportable) and a full structured report saved to Key-Value Store as `OUTPUT`.

***

### Output Locations

| Output                              | Where                        | Format                   |
| ----------------------------------- | ---------------------------- | ------------------------ |
| Individual place records            | Default Dataset              | JSON / CSV / Excel / XML |
| Full structured report with summary | Key-Value Store →`OUTPUT` | JSON                     |

Access via Apify API:

- **Dataset**: `{apiDefaultDatasetUrl}/items`
- **Full report**: `{apiDefaultKeyValueStoreUrl}/records/OUTPUT`

***

### Comparison: OSM Neighborhood Analyzer vs Paid Alternatives

| Feature                  | This Actor           | Foursquare Places | Google Places API | HERE Places |
| ------------------------ | -------------------- | ----------------- | ----------------- | ----------- |
| Price per 1,000 results  | **~$1.00**   |                   |                   |             |
| API key required         | ❌ No                | ✅ Yes            | ✅ Yes            | ✅ Yes      |
| Global coverage          | ✅                   | ✅                | ✅                | ✅          |
| Opening hours            | ✅                   | ✅                | ✅                | ✅          |
| Phone & website          | ✅                   | ✅                | ✅                | ✅          |
| All categories in 1 call | ✅                   | ❌                | ❌                | ❌          |
| CSV/Excel export         | ✅                   | ❌                | ❌                | ❌          |
| Wheelchair info          | ✅                   | ❌                | Partial           | ❌          |
| No monthly subscription  | ✅                   | ❌                | ❌                | ❌          |

> **Note**: OSM data quality varies by city and region. Major cities in Europe, North America, and East Asia have excellent coverage. Remote or rural areas may have fewer mapped POIs.

***

### Usage Examples

#### Real Estate Listing Enrichment

Input: `"123 Main Street, Austin, TX"` with `radius: 1500`

Extracts nearest subway, schools (for families), restaurants, parks, gyms — everything a buyer or renter wants to know before visiting.

#### Restaurant Density Analysis

Input: `"Times Square, New York"` with `radius: 500`, `limit: 200`

Returns up to 200 restaurants sorted by distance — ready for competitive density mapping or lead generation.

#### Relocating to a New City

Input: `"Marienplatz, Munich, Germany"` with `radius: 2000`

Get a complete amenity report — hospitals, pharmacies, schools, supermarkets, public transport — in one run.

***

### Proxy Recommendation

For high-volume usage or if you encounter `HTTP 429` errors from Nominatim, enable **Apify Proxy** in the `proxyConfiguration` input. This routes geocoding requests through rotating IPs and prevents rate limiting.

For single ad-hoc runs, no proxy is needed — the actor handles Nominatim gracefully with retry logic and multiple server fallback.

***

### FAQ

**Is the data free to use commercially?**
OpenStreetMap data is licensed under the [Open Database License (ODbL)](https://www.openstreetmap.org/copyright). Commercial use is permitted with attribution: *"© OpenStreetMap contributors"*. Check the full license for your use case.

**How fresh is the data?**
OSM data is updated continuously by its community. The Overpass API typically reflects changes within minutes to hours of edits.

**What if a place is missing a phone number or website?**
OSM is community-maintained. Urban areas in Western Europe and North America tend to have the most complete data. Missing fields return `null`.

**Can I search for a category not in the list?**
The current version covers 32 predefined categories. For custom OSM tag queries, contact the author.

**How do I get results for multiple addresses?**
Use the [Apify API](https://docs.apify.com/api/v2) to run the actor programmatically in a loop, one address per run. Each run is fast (5–15 seconds) and low-cost.

**Why is one Overpass query better than multiple?**
Each HTTP request to Overpass carries overhead, and the API has per-IP rate limits. Batching all 32 category lookups into one query eliminates 31 round-trips and dramatically reduces the chance of getting rate-limited.

***

### Pricing

This actor uses the **Pay-per-result** model: **$1.00 per 1,000 results**.

A typical neighborhood analysis (1km radius, dense urban area) returns 200–500 places, costing $0.20–$0.50 per run. One full city-center analysis with 5km radius might yield 2,000–5,000 results — still well under $5.

Compare this to a single Google Places "Nearby Search" call returning 20 results for $0.032 — that's **$1.60 per 1,000 results**, and you get only one category per call.

***

### Related Actors

- [OpenStreetMap POI Extractor](https://apify.com/automation-lab/openstreetmap-poi-extractor) — single-category POI extraction with bounding box
- [OSM POI Search - Nearby Places](https://apify.com/ryanclinton/osm-poi-search) — similar radius search, 13 categories
- [Openstreetmap Address Geocoder](https://apify.com/agenscrape/openstreetmap-address-geocoder) — address ↔ coordinates conversion

**OSM Neighborhood Analyzer** is the only actor on the Apify Store that fetches all 32 categories in a single optimized batch query with distance sorting, full address parsing, and structured summary reports.

# Actor input Schema

## `address` (type: `string`):

The target address to analyze (e.g. Piazza del Colosseo, Rome, Italy). Will be converted into coordinates using Nominatim.

## `radius` (type: `integer`):

Geographical search radius around the resolved address coordinates.

## `limit` (type: `integer`):

Maximum number of nearest places to return for each specific category (e.g., max 50 restaurants, max 50 parks).

## `categories` (type: `array`):

Choose which types of places you want to find. If none are selected, all categories will be searched.

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

Highly recommended to bypass strict Nominatim or Overpass rate limits.

## Actor input object example

```json
{
  "address": "Piazza del Colosseo, Rome, Italy",
  "radius": 1000,
  "limit": 50,
  "categories": [
    "metro_subway",
    "bus_stop",
    "parking",
    "supermarket",
    "restaurant",
    "cafe",
    "pharmacy",
    "bank",
    "park",
    "museum"
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `runMetadata` (type: `string`):

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "address": "Piazza del Colosseo, Rome, Italy",
    "radius": 1000,
    "limit": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("saregaa/osm-neighborhood-analyzer").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 = {
    "address": "Piazza del Colosseo, Rome, Italy",
    "radius": 1000,
    "limit": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("saregaa/osm-neighborhood-analyzer").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 '{
  "address": "Piazza del Colosseo, Rome, Italy",
  "radius": 1000,
  "limit": 50
}' |
apify call saregaa/osm-neighborhood-analyzer --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "OSM Neighborhood Analyzer",
        "description": "Analyzes any neighborhood using OpenStreetMap — no API key needed. Enter an address and radius, get back nearby restaurants, subway, parks, schools, hospitals and 27 more categories in one call. Results include distance, phone, opening hours, website.",
        "version": "0.0",
        "x-build-id": "3PpelprjixFhVNDkU"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/saregaa~osm-neighborhood-analyzer/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-saregaa-osm-neighborhood-analyzer",
                "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/saregaa~osm-neighborhood-analyzer/runs": {
            "post": {
                "operationId": "runs-sync-saregaa-osm-neighborhood-analyzer",
                "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/saregaa~osm-neighborhood-analyzer/run-sync": {
            "post": {
                "operationId": "run-sync-saregaa-osm-neighborhood-analyzer",
                "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": [
                    "address"
                ],
                "properties": {
                    "address": {
                        "title": "Search Address",
                        "type": "string",
                        "description": "The target address to analyze (e.g. Piazza del Colosseo, Rome, Italy). Will be converted into coordinates using Nominatim.",
                        "default": "Piazza del Colosseo, Rome, Italy"
                    },
                    "radius": {
                        "title": "Search Radius (meters)",
                        "minimum": 100,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Geographical search radius around the resolved address coordinates.",
                        "default": 1000
                    },
                    "limit": {
                        "title": "Max results per category",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of nearest places to return for each specific category (e.g., max 50 restaurants, max 50 parks).",
                        "default": 50
                    },
                    "categories": {
                        "title": "Select Categories to Search",
                        "type": "array",
                        "description": "Choose which types of places you want to find. If none are selected, all categories will be searched.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "metro_subway",
                                "bus_stop",
                                "train_station",
                                "tram_stop",
                                "airport",
                                "parking",
                                "supermarket",
                                "restaurant",
                                "cafe",
                                "bakery",
                                "market",
                                "fast_food",
                                "kindergarten",
                                "school",
                                "university",
                                "library",
                                "hospital",
                                "clinic",
                                "pharmacy",
                                "dentist",
                                "gym",
                                "spa",
                                "bank",
                                "atm",
                                "post_office",
                                "laundry",
                                "hair_salon",
                                "park",
                                "playground",
                                "cinema",
                                "theater",
                                "museum",
                                "beach",
                                "shopping_mall"
                            ],
                            "enumTitles": [
                                "🚇 Metro / Subway",
                                "🚌 Bus Stop",
                                "🚉 Train Station",
                                "🚊 Tram Stop",
                                "✈️ Airport",
                                "🅿️ Parking",
                                "🛒 Supermarket",
                                "🍴 Restaurant",
                                "☕ Café",
                                "🍞 Bakery",
                                "🍏 Market",
                                "🍔 Fast Food",
                                "🧸 Kindergarten",
                                "🏫 School",
                                "🎓 University",
                                "📚 Library",
                                "🏥 Hospital",
                                "🩺 Clinic",
                                "💊 Pharmacy",
                                "🦷 Dentist",
                                "🏋️ Gym / Fitness",
                                "🧖 Spa",
                                "🏦 Bank",
                                "🏧 ATM",
                                "📮 Post Office",
                                "🧺 Laundry",
                                "💈 Hair Salon",
                                "🌳 Park",
                                "🛝 Playground",
                                "🎬 Cinema",
                                "🎭 Theater",
                                "🏛️ Museum",
                                "🏖️ Beach",
                                "🛍️ Shopping Mall"
                            ]
                        },
                        "default": [
                            "metro_subway",
                            "bus_stop",
                            "parking",
                            "supermarket",
                            "restaurant",
                            "cafe",
                            "pharmacy",
                            "bank",
                            "park",
                            "museum"
                        ]
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Highly recommended to bypass strict Nominatim or Overpass rate limits."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
