# Restaurant Email Scraper (`scrapedrift/restaurant-email-scraper`) Actor

Restaurant Email Scraper extracts publicly available restaurant email addresses, phone numbers, websites, social links, and business details. Ideal for lead generation, sales outreach, local marketing, partnership discovery, and building targeted restaurant contact lists quickly.

- **URL**: https://apify.com/scrapedrift/restaurant-email-scraper.md
- **Developed by:** [ScrapeDrift](https://apify.com/scrapedrift) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

### Restaurant Email Scraper ⚡

Struggling to find restaurant contact emails fast—without manually hunting across dozens of sites? **Restaurant Email Scraper** pulls restaurant email leads, plus phone numbers and social links, from publicly available web data so you can build your outreach list in one run. This restaurant email scraper helps with restaurant contact email finding and restaurant marketing email list building. It’s a practical fit for outreach teams, analysts, and researchers who need local business email scraping at scale. In most runs, you can go from a location list and a restaurant niche to a usable dataset within minutes—rather than hours of copy‑paste work.

---

### See the Data: Sample Output

Here's a real record from a single run:

```json
{
  "name": "Saffron Spice Kitchen",
  "website": "https://saffronspicekitchen.com",
  "phone": "+1-212-555-0199",
  "full_address": "123 Main St New York NY 10001 US",
  "city": "New York",
  "state": "NY",
  "zip": "10001",
  "country_code": "US",
  "scraped_emails": ["sales@saffronspicekitchen.com", "info@saffronspicekitchen.com"],
  "scraped_phones": ["+1-212-555-0199"],
  "scraped_social_media": ["https://www.instagram.com/saffronspicekitchen/"],
  "emails_found": 2,
  "pages_scraped": 6,
  "avg_rating": 4.6,
  "total_reviews": 248,
  "lat": 40.7128,
  "long": -74.006,
  "place_id": "ChIJN1t_tDeuEmsRUsoyG83frY4",
  "scrape_status": "success",
  "email_found": "sales@saffronspicekitchen.com"
}
````

| Field | Type | What It Tells You |
|---|---|---|
| `name` | string | The business name you can use to de-duplicate and personalize outreach for restaurant outreach email automation. |
| `website` | string | The restaurant’s website link—your starting point for scraping emails from restaurant websites. |
| `phone` | string | The phone associated with the business listing entry, useful when you validate or enrich leads. |
| `full_address` | string | A ready-to-use address string for CRM imports and routing to the right location. |
| `city` | string | Helps you filter your restaurant database email list by geography. |
| `state` | string | Useful for state-level lead segmentation in email list building for restaurants. |
| `zip` | string | Postal code for fine-grained targeting and deduplication. |
| `country_code` | string | Adds standardized geography context for downstream matching. |
| `scraped_emails` | array | All emails found on the website (useful for review and QA across a restaurant contact email finder workflow). |
| `scraped_phones` | array | Phones extracted from the site—helpful when the listing phone is missing or incomplete. |
| `scraped_social_media` | array | Social profile links extracted from the website for multi-channel prospecting. |
| `emails_found` | number | Quick indicator of whether the run actually found usable contacts for a lead. |
| `pages_scraped` | number | How much browsing work was done per business during website scraping. |
| `avg_rating` | number | Listing rating to help prioritize restaurant lead email scraper results. |
| `total_reviews` | number | Reviews count to support lead scoring and sorting in a restaurant directory email extraction flow. |
| `lat` / `long` | number | Coordinates for location-based analytics and routing. |
| `place_id` | string | Unique identifier from the listing data to prevent duplicates across runs. |
| `scrape_status` | string | Indicates success/failure state for each business record (and helps troubleshoot restaurant email scraper issues). |
| `email_found` | string | In the dataset, this is used to flatten results per email when emails were found. |

Export your full dataset as JSON, CSV, or Excel from the Apify dashboard.

***

### Setting It Up

Drop this into your `input.json` and you're ready to go:

```json
{
  "googleMapsSearchTerm": "coffee shops",
  "googleMapsLocation": ["Miami, Florida", "Orlando, Florida"],
  "maxBusinesses": 50,
  "scrapeMaxBusinessesPerLocation": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

| Parameter | Required | What It Does |
|---|---|---|
| `googleMapsSearchTerm` | ✅ | The restaurant niche or business type you want the scraper to search for (for example, “coffee shops”). |
| `googleMapsLocation` | ✅ | One or more target locations to search within (for example, “Miami, Florida”). |
| `maxBusinesses` | ⬜ | Sets your target number of businesses to find (bounded 1–1000). The actor stops once it reaches this goal. |
| `scrapeMaxBusinessesPerLocation` | ⬜ | If enabled, it collects up to `maxBusinesses` results per location; if disabled, it combines all locations up to a single total limit. |
| `proxyConfiguration` | ⬜ | Proxy settings for scraping. Recommended for larger jobs to improve reliability. |
| ↳ `proxy support` | ⬜ | When set to `true`, the actor uses Apify Proxy for this run. |

***

### What It Does

Restaurant Email Scraper searches for restaurant listings by your search term and location(s), then scrapes contact information from each business’s website. It’s built specifically to help you generate restaurant marketing email list style datasets without manual browsing.

#### Restaurant email leads from business websites

After collecting businesses, the actor scrapes their websites to find emails. It also extracts phone numbers and social media profiles, so your restaurant contact email finder output is more complete than “email-only” scraping.

#### Uses your keyword + location targeting

You control the restaurant niche via `googleMapsSearchTerm` and define the search areas through `googleMapsLocation`. This makes the workflow feel like a restaurant lead email scraper: pick a geography, pick a niche, get the contact dataset.

#### Clean, integration-ready dataset rows

Results are written to the default Apify dataset as records with consistent fields such as `name`, `website`, `scraped_emails`, `emails_found`, `pages_scraped`, and `scrape_status`. When emails are found, the dataset output is flattened using `email_found`, making it easier to import into CRMs and outreach tools.

#### Built-in proxy support for reliable scraping

For larger-scale restaurant database email builds, proxy configuration is available in the input via `proxyConfiguration`. Using proxies helps avoid IP blocks and rate limits so runs complete more consistently.

#### Statuses and failure handling included

Each record includes `scrape_status` (for example, values like `success`, `failed`, `error`, or `no_website` depending on what happened). That gives you visibility into incomplete restaurant directory email extraction runs and makes it easier to filter out bad rows during cleanup.

Overall, Restaurant Email Scraper turns location + restaurant niche inputs into a ready-to-use set of restaurant outreach email automation contacts.

***

### Why Restaurant Email Scraper?

There are plenty of ways to pull data from listing sites—here’s why Restaurant Email Scraper stands out.

#### Output that’s easy to use for outreach

The dataset includes both listing-level context (like `avg_rating`, `total_reviews`, `place_id`) and website-level contact data (like `scraped_emails`, `scraped_phones`, `scraped_social_media`). That means your restaurant marketing email list work doesn’t stop at raw extraction—you get the metadata you can use to prioritize and segment.

#### It targets exactly the contacts you need

Instead of returning only directory links, Restaurant Email Scraper scrapes each business’s website for emails and optionally finds related contact signals. This is especially valuable for email scraper for restaurants use cases where you want real outreach addresses, not just “business names.”

#### Includes resilience and clear results state

When issues happen (like missing websites or scraping problems), records include status fields such as `scrape_status` and may include `scrape_error`. That keeps your restaurant marketing email list building process auditable and easier to debug.

***

### Real-World Use Cases

Here's how different teams put Restaurant Email Scraper to work:

**Sales Teams**\
A regional sales rep needs local restaurant leads for a week-long outreach push. They run the actor with a restaurant niche and target cities, then import the dataset and sort by `avg_rating` and `total_reviews` to prioritize high-signal prospects—so prospecting time drops from hours to minutes.

**Marketing Agencies**\
An agency manages multiple campaigns and needs updated contact info for client-approved restaurants. They scrape restaurant marketing email list leads per location, review `scraped_social_media` for channel expansion, and keep a clean CRM-ready dataset using the consistent fields in the output.

**Freelance Researchers**\
A researcher compiling a restaurant contact email finder dataset for a report needs structured results, not messy spreadsheets. They run Restaurant Email Scraper for their defined locations, then filter by `emails_found` and enrich with addresses and coordinates (`lat` / `long`) for analysis.

**Data Engineers & Automation Specialists**\
A developer building an automation pipeline needs reliable, repeatable data ingestion. They trigger the actor, consume results via the Apify platform outputs, and push each `email_found` record downstream for lead routing, deduplication, and enrichment—without manual web browsing.

**Local Outreach Managers**\
A community outreach lead wants contacts for restaurants with specific niches in specific neighborhoods. They use `scrapeMaxBusinessesPerLocation` when they need fairness across locations, and stop at `maxBusinesses` to keep the dataset size controlled for manageable follow-up.

***

### How to Run It

No code required. Here's how to get your first results in under 5 minutes:

1. **Open the actor on Apify** — go to the actor page at [console.apify.com](https://console.apify.com) and find “Restaurant Email Scraper”.
2. **Enter your inputs** — set `googleMapsSearchTerm` (your restaurant niche) and `googleMapsLocation` (one or more locations). Optionally set `maxBusinesses` and `scrapeMaxBusinessesPerLocation`.
3. **Configure proxy settings (optional but recommended)** — in `proxyConfiguration`, enable `proxy support` for improved reliability on larger runs.
4. **Start the run** — launch and monitor the live logs to see progress while the dataset is being filled.
5. **Open the Dataset tab** — results appear as the actor pushes data row by row, including fields like `scraped_emails`, `pages_scraped`, and `scrape_status`.
6. **Export your results** — download as JSON, CSV, or Excel from the Apify dashboard.

The whole setup takes under 5 minutes — results start appearing within seconds of launch.

***

### Export & Integration Options

Once your data is collected, Restaurant Email Scraper fits directly into your existing workflow.

You can export your dataset from the Apify dashboard as JSON, CSV, or Excel. This is typically enough for spreadsheet-based analysis, CRM imports, and restaurant database email cleanup workflows.

For more advanced setups, you can connect the actor to your systems using the Apify API, or use automation tools such as Zapier or Make to move results into your outreach stack. If you use a webhook-based workflow, downstream actions can start as soon as the run completes.

***

### Pricing

Restaurant Email Scraper runs on Apify, which includes a **free tier** — no credit card needed to start. Free tier includes platform credits that are enough for several real test runs, letting you validate your restaurant email scraper results before scaling.

For heavier workloads, you’ll run on Apify’s pay-as-you-go compute model (billed per Actor compute unit). Start free at [apify.com](https://apify.com) — scale up when you need.

***

### Reliability & Limitations

| What We Handle | How |
|---|---|
| Rate-limit risk | Proxy support is available via `proxyConfiguration` to improve scraping reliability. |
| Incomplete businesses (missing websites) | Records are still returned with empty scrape fields and `scrape_status` like `no_website`. |
| Partial progress | Data is pushed to the dataset during website scraping, so you don’t lose everything if a run stops mid-way. |
| Output clarity | Each record includes `scrape_status` (and may include `scrape_error`) so you can filter failures. |

Limitations: the actor works on publicly available sources and relies on each business having accessible website content for scraping contact details. If a business does not provide a website or provides no retrievable contact info, you may see empty `scraped_emails` and `emails_found` set to 0.

For enterprise-scale needs or custom configurations, reach out and we'll help.

***

### Frequently Asked Questions

#### Is there a free plan?

Yes—Apify provides a free tier with platform credits so you can run Restaurant Email Scraper and confirm results before scaling up.

#### Do I need to log in or create an account on the target platform?

No special login is required to run Restaurant Email Scraper, since it works with publicly available data. If a business listing or website content is not publicly accessible, you may not get contact details.

#### How accurate is the extracted data?

Accuracy depends on what the business publishes on its website and where contact details appear. The output includes `scrape_status` and counts like `emails_found`, so you can quickly validate extraction quality per record.

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

You control the limit using `maxBusinesses` (bounded 1–1000). If you enable `scrapeMaxBusinessesPerLocation`, it targets up to `maxBusinesses` results per location; otherwise it combines locations up to a single total limit.

#### How fresh is the data?

The dataset reflects what’s publicly available at the time of the run. For the most up-to-date restaurant contact email finder results, run the actor on your preferred schedule.

#### Is this legal? Does it comply with GDPR / CCPA?

Restaurant Email Scraper collects **publicly available data** and you’re responsible for using it in compliance with GDPR, CCPA, and applicable regulations. Always review your legal basis and your intended use before exporting a restaurant marketing email list.

#### Can I export to Google Sheets or Excel?

Yes. You can export from the Apify dataset tab as JSON, CSV, or Excel, then import into Google Sheets or your spreadsheet tool of choice.

#### Can I schedule this to run automatically?

Yes. Apify supports scheduled runs, so you can rerun Restaurant Email Scraper automatically to refresh your restaurant outreach email automation list.

#### Can I access results via the API?

Yes. You can trigger runs via the Apify API and retrieve results programmatically based on your workflow.

#### What happens when the actor encounters an error?

When errors occur, records include `scrape_status` and may include `scrape_error`, and the run continues where possible. This makes it easier to detect failed leads and re-run only the portions you need.

***

### Get Help & Use Responsibly

Got a question about Restaurant Email Scraper or a feature you'd like added? Reach out at <dataforleads@gmail.com>. We can help with practical setup tips—like tightening your `maxBusinesses` strategy or adjusting how you split results across multiple `googleMapsLocation` entries.

Restaurant Email Scraper collects **publicly available data**. It does not access private accounts, login-gated pages, or password-protected content. It’s your responsibility to comply with GDPR, CCPA, and platform Terms of Service when using and storing the results. For data-removal requests, contact <dataforleads@gmail.com>. Use responsibly, ethically, and only for lawful purposes.

# Actor input Schema

## `googleMapsSearchTerm` (type: `string`):

Enter the business type or niche for email scraper (e.g., 'coffee shops', 'dentists').

## `googleMapsLocation` (type: `array`):

Target geographic location for the email scraper (e.g., 'Miami, Florida').

## `maxBusinesses` (type: `integer`):

Target number of businesses to find (1-1000). The scraper will stop when this target is reached.

## `scrapeMaxBusinessesPerLocation` (type: `boolean`):

If enabled, the scraper will collect up to `maxBusinesses` results per location. If disabled, it combines all locations up to a single total limit.

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

Proxy settings for scraping. Recommended for large-scale scraping.

## Actor input object example

```json
{
  "googleMapsSearchTerm": "Restaurant",
  "googleMapsLocation": [
    "New York"
  ],
  "maxBusinesses": 5,
  "scrapeMaxBusinessesPerLocation": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "googleMapsSearchTerm": "Restaurant",
    "googleMapsLocation": [
        "New York"
    ],
    "maxBusinesses": 5,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapedrift/restaurant-email-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 = {
    "googleMapsSearchTerm": "Restaurant",
    "googleMapsLocation": ["New York"],
    "maxBusinesses": 5,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapedrift/restaurant-email-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 '{
  "googleMapsSearchTerm": "Restaurant",
  "googleMapsLocation": [
    "New York"
  ],
  "maxBusinesses": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapedrift/restaurant-email-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Restaurant Email Scraper",
        "description": "Restaurant Email Scraper extracts publicly available restaurant email addresses, phone numbers, websites, social links, and business details. Ideal for lead generation, sales outreach, local marketing, partnership discovery, and building targeted restaurant contact lists quickly.",
        "version": "1.0",
        "x-build-id": "eeAlyo0XsUqCW9JUm"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapedrift~restaurant-email-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapedrift-restaurant-email-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/scrapedrift~restaurant-email-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapedrift-restaurant-email-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/scrapedrift~restaurant-email-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapedrift-restaurant-email-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": [
                    "googleMapsLocation",
                    "googleMapsSearchTerm"
                ],
                "properties": {
                    "googleMapsSearchTerm": {
                        "title": "Search Term",
                        "type": "string",
                        "description": "Enter the business type or niche for email scraper (e.g., 'coffee shops', 'dentists').",
                        "default": "Restaurant"
                    },
                    "googleMapsLocation": {
                        "title": "Location",
                        "type": "array",
                        "description": "Target geographic location for the email scraper (e.g., 'Miami, Florida').",
                        "default": [
                            "New York"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxBusinesses": {
                        "title": "Maximum Businesses With Emails",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Target number of businesses to find (1-1000). The scraper will stop when this target is reached.",
                        "default": 5
                    },
                    "scrapeMaxBusinessesPerLocation": {
                        "title": "Scrape Max Businesses Per Location",
                        "type": "boolean",
                        "description": "If enabled, the scraper will collect up to `maxBusinesses` results per location. If disabled, it combines all locations up to a single total limit.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings for scraping. Recommended for large-scale scraping."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
