# Google Maps Scraper (`scraply/google-maps-scraper`) Actor

🗺️ Google Maps Scraper scrapes business data from Google Maps — names, addresses, phones, websites, ratings, reviews, hours, categories, lat/long. 🚀 Ideal for lead gen, local SEO & competitor research. Fast, accurate results with CSV/JSON export.

- **URL**: https://apify.com/scraply/google-maps-scraper.md
- **Developed by:** [Scraply](https://apify.com/scraply) (community)
- **Categories:** Automation, AI, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$19.99/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

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

## 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

### Google Maps Scraper

Google Maps Scraper is a fast, reliable Google Maps scraping tool that extracts structured business data from public Google Maps results — names, addresses, phones, websites, ratings, reviews, opening hours, categories, and lat/long. It solves the challenge of turning messy map results into clean, analytics-ready records for prospecting, local SEO, and market research. Built for marketers, developers, analysts, and researchers, this google maps data scraper scales from single-city scans to bulk coverage across regions, enabling you to scrape Google Maps business listings at speed for lead gen and competitive insights.

### What data / output can you get?

| Data type | Description | Example value |
| --- | --- | --- |
| name | Business display name | “Sample Coffee” |
| website | Cleaned website URL (no redirect params) | “https://samplecoffee.com” |
| avg_rating | Average rating as a number | 4.6 |
| total_reviews | Total number of reviews | 128 |
| street_address | Street line | “123 Main St” |
| city | City | “New York” |
| state | State/Region | “NY” |
| zip | Postal/ZIP code | “10001” |
| country_code | Country code | “US” |
| full_address | Concatenated address string | “123 Main St New York NY 10001 US” |
| tags | Categories/labels list | [“Coffee shop”] |
| notes | Additional notes (if present) | null |
| place_id | Unique Google place identifier | “abcd1234” |
| phone | Phone number string | “+1 212-555-0100” |
| lat | Latitude | 40.75 |
| long | Longitude | -73.99 |
| hours | Opening hours array (per day with 24h flags) | [{"day": "Monday", "hours": "8 AM–6 PM", "open24Hour": null, "close24Hour": null}] |
| success | Status flag for the place record | true |

Bonus (when review capture is enabled via API): per-place review entities pushed to the dataset include author_name, author_url, rating, text, time, relative_time, author_reviews_count, author_photo, likes. Results are accessible via Apify’s Dataset and can be exported to CSV, JSON, or Excel. A final, sorted list is also saved to the Key‑Value Store as maps.json for easy download.

### Key features

- 🔭 Bold coverage with grid-based viewports  
  Uses grid-based viewport expansion to find more places per location — ideal to extract business data from Google Maps across larger areas.

- 🧪 Deduplication by place_id  
  Ensures clean datasets by deduplicating results on the unique Google place identifier.

- 🧰 Optional review capture (API/advanced)  
  Best‑effort review fetching per place with structured fields (author, rating, text, timestamps, likes).

- 🧭 Sorting in final maps.json  
  Final output can be sorted by relevance (default), rating, review_count, name, or distance (if specified via input).

- 🛡️ Resilient proxy ladder  
  Automatic fallback from direct → datacenter → residential (sticky after residential) with clear logging. Designed for tough blocks on large runs — a production‑ready google places scraper.

- ⚡ Live dataset writes  
  Streams items to the dataset as they’re found to avoid data loss on long jobs or network hiccups.

- 🗂️ Easy exports  
  Export from the Dataset in one click to CSV, JSON, or Excel for CRM uploads and analysis.

- 👩‍💻 Developer-friendly  
  Works great in automation pipelines via the Apify API/SDK — a reliable google maps scraper python workflow component and google maps data extractor for ETL jobs.

### How to use Google Maps Scraper - step by step

1. Sign in to your Apify account and open the Google Maps Scraper actor.
2. Add your inputs: provide a list of locations (e.g., cities or regions) and a list of keywords/terms to target. You can also supply direct Google Maps search URLs.
3. Configure limits: set Max Results to cap total places across all searches.
4. Set Proxy Configuration as needed: by default it starts direct and will auto‑fallback to datacenter → residential if blocked.
5. Start the run. Watch logs for grid progress, deduplication counts, and any proxy fallback events.
6. Monitor progress in the Dataset — items are written live as they’re discovered.
7. Download results: export the Dataset to CSV/JSON/Excel or fetch the final merged and sorted file from the Key‑Value Store as maps.json.

Pro tip (API/advanced): You can enable best‑effort review capture and control final sorting through additional input keys supported by the actor (e.g., maxComments, sortOrder, gridSize) when triggering via API. This is handy for building a google maps lead extractor pipeline or fully automated google maps lead generation scraper.

### Use cases

| Use case name | Description |
| --- | --- |
| Local SEO + citation audits | Audit ratings, categories, and NAP data to benchmark presence across neighborhoods and improve rankings with a google business listings scraper. |
| Agency lead generation | Discover and export qualified lists by city/category to fill outreach campaigns — a practical google maps contact extractor. |
| Competitor mapping | Map competitors across regions, compare ratings and review volumes, and spot white-space opportunities. |
| Franchise territory planning | Quantify market coverage and identify expansion gaps using structured place density and rating metrics. |
| Data enrichment pipeline (API) | Enrich CRMs with phones, websites, and geocoordinates using an automated google maps scraper python/Apify API workflow. |
| Academic & market research | Collect public business metadata for economic or urban studies using a repeatable google maps scraping tool. |
| Product ops & listing verification | Validate category/tag consistency and opening hours across distributed locations at scale. |

### Why choose Google Maps Scraper?

This production‑ready google maps scraper software prioritizes precision, automation, and resilience for real‑world lead gen and research.

- ✅ Accurate, structured output: Clean fields for addresses, phones, ratings, hours, and coordinates.
- 🌍 Scalable coverage: Grid‑based discovery plus deduplication for broad, high‑recall searches.
- 👩‍💻 Developer access: Ideal for API/SDK automation and google maps scraper python pipelines.
- 🔒 Safe & robust: Automatic proxy fallback (direct → datacenter → residential, sticky) with clear logs.
- 🧩 Easy integrations: Export to CSV/JSON/Excel for CRMs, BI tools, and automation platforms.
- 🚫 No browser add‑ons: Works without any google maps scraper chrome extension or manual steps.
- 💸 Cost‑effective: Pay only for what you run — perfect for teams needing a best‑in‑class google maps data extractor.

Bottom line: If you need to scrape Google Maps business listings reliably and at scale, this is the best Google Maps Scraper for lead gen, local SEO, and analytics workflows.

### Is it legal / ethical to use Google Maps Scraper?

Yes — when done responsibly. This actor scrapes publicly available Google Maps pages and does not access private or authenticated content. You should:

- Only collect public business data.
- Comply with Google’s terms, and applicable data protection laws (e.g., GDPR/CCPA).
- Use the data ethically and avoid spam or misuse.
- Consult your legal team for edge cases or jurisdiction‑specific rules.

You are responsible for ensuring your use complies with all applicable laws and terms.

### Input parameters & output format

Example JSON input
```json
{
  "locations": ["New York"],
  "keywords": ["coffee shops"],
  "urls": [],
  "maxResults": 20,
  "proxyConfiguration": { "useApifyProxy": false }
}
````

Parameters

- locations (array, required: no)\
  Description: List of location names (e.g., New York, Florida).\
  Default: none

- keywords (array, required: yes)\
  Description: Search keywords or user-specified terms (supports bulk).\
  Default: none

- urls (array, required: no)\
  Description: Direct Google Maps search URLs (optional, supports bulk).\
  Default: none

- maxResults (integer, required: no)\
  Description: Maximum number of places to return (cap across all searches).\
  Default: 20 (min: 1, max: 10000)

- proxyConfiguration (object, required: no)\
  Description: Default is direct (no proxy). Actor auto‑falls back to datacenter → residential if blocked.\
  Default: { "useApifyProxy": false }

Output formats

- Dataset:\
  The actor pushes two kinds of records:
  1. One item per place with core fields.
  2. Optional review records per place (when reviews are enabled via API), containing place\_id, reviews\[], and review\_count.
- Key‑Value Store:\
  maps.json — final merged and sorted list of place records. When reviews were fetched, each place in maps.json includes “reviews” and “review\_count”.

Example Dataset place item

```json
{
  "name": "Sample Coffee",
  "website": "https://samplecoffee.com",
  "avg_rating": 4.6,
  "total_reviews": 128,
  "street_address": "123 Main St",
  "city": "New York",
  "state": "NY",
  "zip": "10001",
  "country_code": "US",
  "full_address": "123 Main St New York NY 10001 US",
  "tags": ["Coffee shop"],
  "notes": null,
  "place_id": "abcd1234",
  "phone": "+1 212-555-0100",
  "lat": 40.75,
  "long": -73.99,
  "hours": [],
  "success": true
}
```

Example Dataset review record (when enabled via API)

```json
{
  "place_id": "abcd1234",
  "reviews": [
    {
      "author_name": "John Doe",
      "author_url": "https://maps.google.com/user/123",
      "rating": 5,
      "text": "Great coffee and friendly staff!",
      "time": "1700000000",
      "relative_time": "2 weeks ago",
      "author_reviews_count": 17,
      "author_photo": "https://example.com/photo.jpg",
      "likes": 3
    }
  ],
  "review_count": 1
}
```

Example maps.json item (Key‑Value Store)

```json
[
  {
    "name": "Sample Coffee",
    "website": "https://samplecoffee.com",
    "avg_rating": 4.6,
    "total_reviews": 128,
    "street_address": "123 Main St",
    "city": "New York",
    "state": "NY",
    "zip": "10001",
    "country_code": "US",
    "full_address": "123 Main St New York NY 10001 US",
    "tags": ["Coffee shop"],
    "notes": null,
    "place_id": "abcd1234",
    "phone": "+1 212-555-0100",
    "lat": 40.75,
    "long": -73.99,
    "hours": [],
    "success": true,
    "reviews": [
      {
        "author_name": "John Doe",
        "author_url": "https://maps.google.com/user/123",
        "rating": 5,
        "text": "Great coffee and friendly staff!",
        "time": "1700000000",
        "relative_time": "2 weeks ago",
        "author_reviews_count": 17,
        "author_photo": "https://example.com/photo.jpg",
        "likes": 3
      }
    ],
    "review_count": 1
  }
]
```

Note: Some fields may be missing or null if not present on the public Google Maps page.

### FAQ

#### Is there a free trial or plan available?

Yes. You can test runs with free trial minutes on Apify (120 trial minutes are available for this actor). For ongoing usage, check the Apify Store listing for current pricing.

#### Do I need to install a Chrome extension to use this?

No. This google maps scraper software runs on Apify’s infrastructure — no google maps scraper chrome extension, cookies, or manual setup required.

#### Can I use it with Python, API, or in automation workflows?

Yes. You can control runs and fetch results via the Apify API/SDK, making it a great fit for a google maps scraper python pipeline or an automated ETL workflow.

#### What data types does it extract from Google Maps?

It captures names, websites, ratings, review counts, phone numbers, categories/tags, opening hours, geocoordinates, and address components, plus optional reviews when enabled. It’s a complete google my business scraper for public listings.

#### How many results can I scrape per run?

You control the cap with maxResults. The grid-based approach balances coverage and speed to help you scrape Google Maps business listings efficiently.

#### How does it handle blocking?

The actor starts direct and automatically falls back to datacenter and then residential proxies (sticky) if blocked. It logs each change so you can see when the proxy mode switches.

#### Can it fetch reviews too?

Yes, on a best‑effort basis when enabled via API input. Review records are pushed to the Dataset separately and included in maps.json alongside the place when fetched.

#### What export formats are supported?

You can export the Dataset to CSV, JSON, or Excel directly from Apify. The final sorted output is also saved as maps.json in the Key‑Value Store for easy download.

### Closing CTA / Final thoughts

Google Maps Scraper is built to extract reliable, structured Google Maps business data at scale. With grid‑based discovery, proxy resilience, live dataset writes, and optional reviews, it’s ideal for marketers, sales teams, researchers, and developers who need a dependable google maps lead extractor.

Run it from the Apify Console, export to CSV/JSON/Excel, or integrate via the API/SDK to power a python‑based automation pipeline. Start extracting smarter, compliance‑aware insights from public Google Maps pages and turn them into actionable lead lists, SEO audits, and market intelligence.

# Actor input Schema

## `locations` (type: `array`):

🏙️ Examples: *New York*, *Texas*, *Downtown Chicago* — mix and match for bulk coverage.

## `keywords` (type: `array`):

☕ Describe the businesses or places you care about — *coffee shops*, *dentists*, *coworking*, *hotels near airport*, and so on. 📝 Add many keywords to multiply your searches!

## `urls` (type: `array`):

🌐 Bulk-friendly list of map links. ✨ Great when you’ve bookmarked exact searches.

## `maxResults` (type: `integer`):

🔢 Total unique places across **all** locations, keywords, and URLs (duplicates are merged automatically). ✨ Default is friendly for quick tests; raise it for big lists.

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

🎛️ Optional Apify Proxy — leave off for simple runs; turn on for heavier jobs or picky networks.

## Actor input object example

```json
{
  "locations": [
    "New York"
  ],
  "keywords": [
    "coffee shops"
  ],
  "urls": [],
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "locations": [
        "New York"
    ],
    "keywords": [
        "coffee shops"
    ],
    "urls": [],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraply/google-maps-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 = {
    "locations": ["New York"],
    "keywords": ["coffee shops"],
    "urls": [],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("scraply/google-maps-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 '{
  "locations": [
    "New York"
  ],
  "keywords": [
    "coffee shops"
  ],
  "urls": [],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call scraply/google-maps-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Maps Scraper",
        "description": "🗺️ Google Maps Scraper scrapes business data from Google Maps — names, addresses, phones, websites, ratings, reviews, hours, categories, lat/long. 🚀 Ideal for lead gen, local SEO & competitor research. Fast, accurate results with CSV/JSON export.",
        "version": "0.1",
        "x-build-id": "JVfM7Ke2DPbU4qaUL"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scraply~google-maps-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scraply-google-maps-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/scraply~google-maps-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scraply-google-maps-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/scraply~google-maps-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scraply-google-maps-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": [
                    "keywords"
                ],
                "properties": {
                    "locations": {
                        "title": "📍 Cities, regions, or neighborhoods",
                        "type": "array",
                        "description": "🏙️ Examples: *New York*, *Texas*, *Downtown Chicago* — mix and match for bulk coverage.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "keywords": {
                        "title": "🔎 What to find (keywords)",
                        "type": "array",
                        "description": "☕ Describe the businesses or places you care about — *coffee shops*, *dentists*, *coworking*, *hotels near airport*, and so on. 📝 Add many keywords to multiply your searches!",
                        "items": {
                            "type": "string"
                        }
                    },
                    "urls": {
                        "title": "🔗 Optional: Google Maps links",
                        "type": "array",
                        "description": "🌐 Bulk-friendly list of map links. ✨ Great when you’ve bookmarked exact searches.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "🎯 How many places to collect",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "🔢 Total unique places across **all** locations, keywords, and URLs (duplicates are merged automatically). ✨ Default is friendly for quick tests; raise it for big lists.",
                        "default": 20
                    },
                    "proxyConfiguration": {
                        "title": "🌐 Connection & reliability",
                        "type": "object",
                        "description": "🎛️ Optional Apify Proxy — leave off for simple runs; turn on for heavier jobs or picky networks."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
