# Trulia Scraper - US Property Listings, Prices, Photos & Agents (`abotapi/trulia-scraper`) Actor

Scrape Trulia.com property listings: price, beds, baths, square footage, address, GPS, photos, listing agent and broker, plus price history, tax history, features and open houses on detail pages. Search by location with keyword and sort filters, or paste Trulia URLs.

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

## Pricing

from $1.00 / 1,000 listing scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Trulia Scraper

Extract property listings from Trulia across the United States: for sale, for rent, and recently sold. Search by location with optional keyword and sort, or paste Trulia URLs directly. Every listing comes back as one clean record with price, beds, baths, square footage, full address, GPS coordinates, photos, and the listing agent and broker. Turn on detail mode to also pull price history, tax history, the full feature list, open houses, agent contact, and affordability data from each property page.

### Why this scraper

- Rich output out of the box: search results already include price, beds, baths, size, full address, neighborhood, GPS, photo gallery, listing agent name and broker, status flags, and tracking ids. No detail fetch needed for the common fields.
- Optional deep detail: one toggle adds price history, tax history, features, open houses, listing agent and broker contact, local protections, estimated rent, and more.
- Three listing channels: for sale, for rent, and recently sold.
- Real keyword filter: narrow a location to listings that mention a term like pool or waterfront.
- Two input modes: build searches from simple fields, or paste search and property URLs you already have. Multiple URLs supported with automatic pagination.
- Lean and predictable: detail mode is off by default, so a standard run is fast and low cost. One result cap (Max items) keeps every run predictable.
- Optional export: pipe results straight into Notion, Linear, Airtable, or Apify via MCP connectors.

### Data you get

> Sample shape, values are illustrative placeholders, not from a live listing.

| Field | Example |
| --- | --- |
| id | 00000001 |
| url | https://www.trulia.com/home/sample-address-ny-10000-00000001 |
| listingType | FOR_SALE |
| propertyType | SINGLE_FAMILY_HOME |
| price | 750000 |
| formattedPrice | $750,000 |
| streetAddress | 123 Sample Street |
| city | Sampletown |
| state | NY |
| zipCode | 10000 |
| neighborhood | Sample Heights |
| latitude | 40.0000 |
| longitude | -73.0000 |
| bedrooms | 3 |
| bathrooms | 2 |
| floorSpace | 1,800 sqft |
| listingAgentName | Agent Name |
| brokerName | Sample Realty |
| heroImage | https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/00000000-full.jpg |
| photos | [ "https://www.trulia.com/pictures/thumbs_6/zillowstatic/fp/00000000-full.jpg" ] |
| tags | [ "NEW", "OPEN SUN" ] |
| scrapedAt | 2026-01-01T00:00:00.000Z |

With Fetch property details enabled, each record also includes: priceHistory, taxes, features, openHouses, providerDetails (agent and broker contact), localProtections, affordability, estimatedRent, totalPhotoCount, plus the full homeDetails object.

### How to use

Basic search:

```json
{
  "mode": "search",
  "searchLocation": "Austin,TX",
  "searchListingType": "FOR_SALE",
  "maxItems": 50
}
````

Search with keyword and sort:

```json
{
  "mode": "search",
  "searchLocation": "Miami,FL",
  "searchListingType": "FOR_SALE",
  "searchKeyword": "pool",
  "searchSort": "PRICE_LOW_TO_HIGH",
  "maxItems": 100
}
```

For rent, with full detail enrichment:

```json
{
  "mode": "search",
  "searchLocation": "Seattle,WA",
  "searchListingType": "FOR_RENT",
  "fetchDetails": true,
  "maxItems": 40
}
```

URL mode (search URLs are paginated, property URLs return one record each):

```json
{
  "mode": "url",
  "startUrls": [
    "https://www.trulia.com/sold/Denver,CO/",
    "https://www.trulia.com/home/sample-address-co-80000-00000002"
  ],
  "maxItems": 60
}
```

### Input parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| mode | string | search | search (build URLs from filters) or url (paste links) |
| searchLocation | string | New\_York,NY | Search mode. US location as City,STATE |
| searchListingType | string | FOR\_SALE | FOR\_SALE, FOR\_RENT, or SOLD |
| searchKeyword | string | (empty) | Search mode. Narrows to listings mentioning this term |
| searchSort | string | RECOMMENDED | RECOMMENDED, NEWEST, PRICE\_LOW\_TO\_HIGH, PRICE\_HIGH\_TO\_LOW |
| startUrls | array | (empty) | URL mode. Trulia search or property URLs |
| fetchDetails | boolean | false | Add price history, taxes, features, open houses, agent contact |
| maxItems | integer | 20 | Run cap on listings. 0 for unlimited |
| maxPages | integer | 200 | Safety cap on pages per search. The run stops at Max items |
| proxy | object | Residential US | Residential US is required; datacenter is refused |

### Send results into your apps (MCP connectors)

Optionally pipe each result into the tools you already use. Authorize a connector under Apify, Settings, Integrations, then select it in the mcpConnectors field. For Notion, also set notionParentPageUrl. The connector receives a condensed, human-readable summary per item (address plus key fields); the complete record always stays in the Apify dataset. Leave the field empty to skip. Supported connectors: Notion, Linear, Airtable, and Apify.

### Output example

> Sample shape, values are illustrative placeholders, not from a live listing.

```json
{
  "id": "00000001",
  "url": "https://www.trulia.com/home/sample-address-ny-10000-00000001",
  "listingType": "FOR_SALE",
  "propertyType": "SINGLE_FAMILY_HOME",
  "price": 750000,
  "formattedPrice": "$750,000",
  "streetAddress": "123 Sample Street",
  "city": "Sampletown",
  "state": "NY",
  "zipCode": "10000",
  "neighborhood": "Sample Heights",
  "latitude": 40.0000,
  "longitude": -73.0000,
  "bedrooms": 3,
  "bathrooms": 2,
  "floorSpace": "1,800 sqft",
  "listingAgentName": "Agent Name",
  "brokerName": "Sample Realty",
  "heroImage": "https://www.trulia.com/pictures/thumbs_4/zillowstatic/fp/00000000-full.jpg",
  "photos": ["https://www.trulia.com/pictures/thumbs_6/zillowstatic/fp/00000000-full.jpg"],
  "tags": ["NEW"],
  "scrapedAt": "2026-01-01T00:00:00.000Z"
}
```

### Plan requirement

Trulia admits United States residential connections only, so this actor needs an Apify Residential proxy pinned to the US (the default). Datacenter exits are refused. Free Apify plans do not include residential proxy; use a Starter plan or higher (https://apify.com/pricing). The actor rotates US then CA residential exits and can fail over to a backup gateway. If a run returns zero items, check that the proxy is set to Residential US.

# Actor input Schema

## `mode` (type: `string`):

How to start. 'Search by location' builds Trulia search URLs from the filters below. 'Direct URLs' takes Trulia search or property URLs you already have.

## `searchLocation` (type: `string`):

Search mode only. A US location as City,STATE (e.g. New\_York,NY or Austin,TX). Spaces are converted to underscores automatically.

## `searchListingType` (type: `string`):

Search mode only. For sale, for rent, or recently sold listings.

## `searchKeyword` (type: `string`):

Search mode only. Narrows results to listings whose text mentions this keyword (e.g. pool, waterfront, garage). Leave empty for no keyword filter.

## `searchSort` (type: `string`):

Search mode only. Result ordering. Note: Trulia may place a few promoted listings ahead of the chosen order.

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

URL mode only. Trulia search URLs (paginated automatically) or property/home URLs (fetched as single detail records). Multiple URLs supported.

## `fetchDetails` (type: `boolean`):

Include full property details: price history, tax history, full feature list, open houses, listing agent and broker contact, affordability and more. Slower and uses more proxy traffic; billed per enriched listing. Leave off for fast search-result data, which already includes price, beds, baths, address, GPS, photos and agent name.

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

Maximum number of listings to scrape across all searches/URLs. This is the run cap. Set 0 for unlimited.

## `maxPages` (type: `integer`):

Safety cap on search pages to walk per location/URL (40 listings per page). No page limit by default: the run stops at Max items.

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

Trulia admits US residential connections. Residential (US) is required; datacenter exits are refused. The actor rotates US then CA residential exits and can fail over to a backup gateway. Free Apify plans do not include residential proxy.

## `mcpConnectors` (type: `array`):

Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (address + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).

## `notionParentPageUrl` (type: `string`):

URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.

## `maxNotifyListings` (type: `integer`):

Cap on items written to each connector per run. Does not affect the dataset.

## Actor input object example

```json
{
  "mode": "search",
  "searchLocation": "New_York,NY",
  "searchListingType": "FOR_SALE",
  "searchSort": "RECOMMENDED",
  "startUrls": [
    "https://www.trulia.com/for_sale/Austin,TX/"
  ],
  "fetchDetails": false,
  "maxItems": 20,
  "maxPages": 200,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  },
  "maxNotifyListings": 50
}
```

# Actor output Schema

## `overview` (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 = {
    "searchLocation": "New_York,NY",
    "startUrls": [
        "https://www.trulia.com/for_sale/Austin,TX/"
    ],
    "maxItems": 20,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/trulia-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 = {
    "searchLocation": "New_York,NY",
    "startUrls": ["https://www.trulia.com/for_sale/Austin,TX/"],
    "maxItems": 20,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/trulia-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 '{
  "searchLocation": "New_York,NY",
  "startUrls": [
    "https://www.trulia.com/for_sale/Austin,TX/"
  ],
  "maxItems": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call abotapi/trulia-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Trulia Scraper - US Property Listings, Prices, Photos & Agents",
        "description": "Scrape Trulia.com property listings: price, beds, baths, square footage, address, GPS, photos, listing agent and broker, plus price history, tax history, features and open houses on detail pages. Search by location with keyword and sort filters, or paste Trulia URLs.",
        "version": "1.0",
        "x-build-id": "wByV3PrlJD1oReSnk"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~trulia-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-trulia-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/abotapi~trulia-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-trulia-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/abotapi~trulia-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-trulia-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": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Start mode",
                        "enum": [
                            "search",
                            "url"
                        ],
                        "type": "string",
                        "description": "How to start. 'Search by location' builds Trulia search URLs from the filters below. 'Direct URLs' takes Trulia search or property URLs you already have.",
                        "default": "search"
                    },
                    "searchLocation": {
                        "title": "Location",
                        "type": "string",
                        "description": "Search mode only. A US location as City,STATE (e.g. New_York,NY or Austin,TX). Spaces are converted to underscores automatically.",
                        "default": "New_York,NY"
                    },
                    "searchListingType": {
                        "title": "Listing type",
                        "enum": [
                            "FOR_SALE",
                            "FOR_RENT",
                            "SOLD"
                        ],
                        "type": "string",
                        "description": "Search mode only. For sale, for rent, or recently sold listings.",
                        "default": "FOR_SALE"
                    },
                    "searchKeyword": {
                        "title": "Keyword (optional)",
                        "type": "string",
                        "description": "Search mode only. Narrows results to listings whose text mentions this keyword (e.g. pool, waterfront, garage). Leave empty for no keyword filter."
                    },
                    "searchSort": {
                        "title": "Sort by",
                        "enum": [
                            "RECOMMENDED",
                            "NEWEST",
                            "PRICE_LOW_TO_HIGH",
                            "PRICE_HIGH_TO_LOW"
                        ],
                        "type": "string",
                        "description": "Search mode only. Result ordering. Note: Trulia may place a few promoted listings ahead of the chosen order.",
                        "default": "RECOMMENDED"
                    },
                    "startUrls": {
                        "title": "Trulia URLs",
                        "type": "array",
                        "description": "URL mode only. Trulia search URLs (paginated automatically) or property/home URLs (fetched as single detail records). Multiple URLs supported.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "fetchDetails": {
                        "title": "Fetch property details",
                        "type": "boolean",
                        "description": "Include full property details: price history, tax history, full feature list, open houses, listing agent and broker contact, affordability and more. Slower and uses more proxy traffic; billed per enriched listing. Leave off for fast search-result data, which already includes price, beds, baths, address, GPS, photos and agent name.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of listings to scrape across all searches/URLs. This is the run cap. Set 0 for unlimited.",
                        "default": 20
                    },
                    "maxPages": {
                        "title": "Max pages per search",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Safety cap on search pages to walk per location/URL (40 listings per page). No page limit by default: the run stops at Max items.",
                        "default": 200
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Trulia admits US residential connections. Residential (US) is required; datacenter exits are refused. The actor rotates US then CA residential exits and can fail over to a backup gateway. Free Apify plans do not include residential proxy.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    },
                    "mcpConnectors": {
                        "title": "Pipe results into your apps (optional)",
                        "type": "array",
                        "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (address + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
                    },
                    "notionParentPageUrl": {
                        "title": "Notion parent page (Notion connector only)",
                        "type": "string",
                        "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
                    },
                    "maxNotifyListings": {
                        "title": "Max items to export per connector",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap on items written to each connector per run. Does not affect the dataset.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
