# OfferUp Scraper — Listings, Sellers & Vehicle VINs (`memo23/offerup-marketplace-scraper`) Actor

Scrape OfferUp listings — by search keyword or pasted item URL. One row per listing: title, price, condition, location, photos, category, seller profile (rating, items sold, join date) and vehicle attributes (make, model, year, mileage, VIN). Optional full-item enrichment. JSON/CSV out.

- **URL**: https://apify.com/memo23/offerup-marketplace-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## OfferUp Marketplace Scraper

Turn any [OfferUp](https://offerup.com) search into clean, structured marketplace data. Scrape by **search keyword** (`iphone 15`, `honda civic`, `dining table`), or paste **search URLs** and **item URLs** — and get one flat row per listing with title, price, condition, location, photos, category, the full **seller profile**, and — for cars — full **vehicle attributes including the VIN**.

Built for resale and arbitrage sourcing, used-car and dealer intelligence, price monitoring, and marketplace research across the US.

#### How it works

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

#### ✨ Why use this scraper?

- **Deeper rows than any other OfferUp scraper** — not just title/price/image. Every enriched row carries the full description, all photos, the category tree, GPS coordinates, post date, shipping/pickup options, and the complete seller profile (rating, review count, items sold, join date, business & TruYou-verified flags, public phone number when shown).
- **Vehicle VIN + full specs** — for autos listings you get make, model, year, trim, mileage, **VIN**, transmission, drivetrain, fuel type, title status and MPG — decoded straight from OfferUp's own data. Perfect for used-car dealers, VIN checks and market pricing.
- **Two ways in** — search by keyword, or paste search/item URLs. Mix them in one run.
- **Fast mode or deep mode** — leave *Scrape full item pages* off for quick title/price/condition/location/image rows; turn it on to add everything above. You choose cost vs depth.
- **Beats the block** — OfferUp serves datacenter scrapers a 403; this actor routes every request through US residential IPs with a real browser fingerprint and racing retries, so you get the real page.
- **Structured, not scraped** — reads OfferUp's own embedded `__NEXT_DATA__` JSON rather than fragile HTML selectors, so the output stays reliable.
- **JSON, CSV, Excel or API** — pipe straight into your sheet, CRM or pipeline. Billed per listing.

#### 🎯 Use cases

| You are a… | Use it to… |
|---|---|
| Reseller / flipper | Source underpriced listings by keyword and location, with condition, price and seller quality |
| Used-car dealer / analyst | Pull local vehicle inventory with VIN, mileage, title status and price for market analysis |
| Price-monitoring / arbitrage | Track asking prices for a product across a metro over time |
| Marketplace / SaaS builder | Seed a second-hand catalog dataset with structured, deduplicated rows |
| Lead-gen | Find active business sellers (electronics stores, dealers) with ratings and public phone numbers |
| Market researcher | Measure supply, price distribution and category mix in a local marketplace |

#### 📥 Supported inputs

| Input | Example | What it does |
|---|---|---|
| Search keyword | `iphone 15`, `honda civic`, `sectional sofa` | Builds & paginates that OfferUp search feed |
| Search URL | `https://offerup.com/search?q=iphone` | Paginates that search |
| Item URL | `https://offerup.com/item/detail/{id}` | Scrapes that single listing in full detail |

**Not supported:** buyer/message data, offers, and anything behind a login. The actor reads only public OfferUp search and item pages.

> **Note on location.** OfferUp determines each search's region from the request IP, not from a URL parameter — there is no reliable ZIP/city filter on the web layer. This actor uses US residential exits, so results are localized to the exit region. To target a specific metro, run with your own city-level US residential proxy.

#### ⚙️ How it works

1. **Classify** every input — keywords become search URLs; pasted URLs are sorted into search / item.
2. **Unlock** each page with a real browser TLS fingerprint over a US residential IP (racing a small batch of fresh sessions), so the real page is returned instead of a 403.
3. **Parse** the embedded `__NEXT_DATA__` JSON — the search feed's listing tiles, and each item page's full listing object.
4. **Enrich** (optional) — for each listing, fetch its item page to add description, all photos, category, seller profile, shipping and vehicle attributes.
5. **Push** one flat, deduplicated row per listing to the dataset.

#### 🔧 Input configuration

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | array | `["iphone"]` | Keywords to search OfferUp for. Each is paginated. |
| `startUrls` | array | `[]` | OfferUp search and/or item URLs. Auto-classified. |
| `scrapeDetails` | boolean | `false` | Fetch each listing's full item page (description, photos, category, seller, shipping, vehicle). |
| `maxItems` | integer | `1000` | Hard cap on rows for the whole run. |
| `maxItemsPerSearch` | integer | `1000` | Cap per keyword / search URL. |
| `maxConcurrency` | integer | `6` | Parallel requests (keep moderate). |
| `maxRequestRetries` | integer | `20` | Retry budget per request; each retry rotates to a fresh residential IP. |
| `proxy` | object | built-in | Optional override — the actor ships with US residential proxy at no extra cost. |

#### 📤 Output overview

One row per listing. In fast mode you get the search-tile fields; with **Scrape full item pages** on (or when you paste an item URL) every row is fully enriched.

**Fast mode (search tile):** `listingId`, `title`, `price`, `condition`/`conditionText`, `locationName`, `primaryImage`, `flags`, `url`.

**Deep mode adds:** `description`, all `photos`, `category` (L1/L2/L3), `latitude`/`longitude`, `postDate`, `quantity`, `seller` (rating, review count, items sold, join date, business/dealer/TruYou flags, phone, website, avatar), `fulfillment` (pickup/shipping), and `vehicle` (make, model, year, trim, mileage, VIN, transmission, drivetrain, fuel, title status, MPG) for autos.

#### 🧾 Output samples

**A car listing (deep mode):**

```json
{
  "rowType": "listing",
  "listingId": "9f3c…",
  "url": "https://offerup.com/item/detail/9f3c…",
  "title": "2012 Honda Civic",
  "price": 7999,
  "currency": "USD",
  "isFirmPrice": false,
  "conditionText": "Used",
  "locationName": "Fort Worth, TX",
  "latitude": 32.79, "longitude": -97.33,
  "category": { "l1Name": "Vehicles", "l2Name": "Cars & Trucks", "name": "Cars & Trucks" },
  "photos": ["https://images.offerup.com/…", "… 28 more"],
  "postDate": "2026-06-19T20:11:10.144Z",
  "seller": {
    "name": "AutoMax", "ratingAverage": 5, "ratingCount": 95,
    "itemsSold": 45, "dateJoined": "2015-07-28T06:34:01Z",
    "isBusinessAccount": true, "isAutosDealer": true, "isTruyouVerified": true,
    "phoneNumber": "817…"
  },
  "vehicle": {
    "make": "Honda", "model": "Civic", "year": "2012", "trim": "LX Sedan 4D",
    "miles": "100903", "vin": "19XFB2F55CE361481",
    "transmission": "Automatic", "driveTrain": "FWD", "fuelType": "Gasoline",
    "cityMpg": "28", "highwayMpg": "38"
  }
}
````

**An electronics listing (deep mode):**

```json
{
  "title": "iPhone 15 plus 128GB Unlocked",
  "price": 390,
  "conditionText": "Used",
  "locationName": "Fort Worth, TX",
  "category": { "l1Name": "Electronics & Media", "l2Name": "Cell phones & Accessories" },
  "seller": { "name": "Cell Repair Pro", "itemsSold": 8, "isBusinessAccount": true },
  "photos": ["https://images.offerup.com/…"],
  "vehicle": null
}
```

#### 🔑 Key output fields

| Field | Description |
|---|---|
| `listingId` | OfferUp listing UUID (stable dedup key) |
| `title` / `price` / `currency` | Listing title, numeric price, always `USD` |
| `conditionText` | Item condition (`New`, `Used`, …) |
| `locationName` / `latitude` / `longitude` | Listing location + GPS |
| `category` | Category path — `l1Name` › `l2Name` › `l3Name` |
| `photos` | Array of full-resolution image URLs |
| `postDate` | When the listing was posted (ISO) |
| `seller` | Full seller profile: rating, review count, items sold, join date, business/dealer/TruYou flags, phone, website |
| `fulfillment` | Local pickup / shipping options |
| `vehicle` | Autos only: make, model, year, trim, mileage, **VIN**, transmission, drivetrain, fuel, title status, MPG |
| `url` | Canonical item-detail URL |

#### ❓ FAQ

**Can I target a specific ZIP or city?** OfferUp resolves a search's location from the request IP, not the URL — so there's no reliable ZIP filter on the web layer. Results reflect the US residential exit region. For a specific metro, supply your own city-level US residential proxy in the `proxy` field.

**What's the difference between fast and deep mode?** Fast mode (default) returns the search-tile fields (title, price, condition, location, image, URL) — cheap and quick. Deep mode (*Scrape full item pages*) fetches each listing's item page to add description, all photos, category, seller profile, shipping and vehicle attributes — richer rows, ~2× the requests.

**Do I get the seller's phone number?** When the seller has enabled a public/click-to-call number on their listing, yes. Many private sellers don't publish one, in which case `phoneNumber` is `null`.

**Does it work for cars?** Yes — autos listings return a full `vehicle` object with VIN, mileage, make/model/year, transmission, drivetrain, fuel type, title status and MPG.

**Is a proxy included?** Yes. The actor ships with US residential proxy — required because OfferUp blocks datacenter IPs. You can override it with your own US proxies.

**How many results per search?** OfferUp returns ~50 listings per page, up to ~50 pages — about 2,500 per keyword. Use several keywords to go wider.

#### 🛟 Support

Found a bug or need a field added? Open an issue on the actor's Issues tab in the Apify Console and we'll take a look.

#### 🚀 Additional services

Need a different marketplace, site, or a custom schema? We build and maintain scrapers across classifieds, real estate, jobs and e-commerce.

#### 🔎 Explore more scrapers

- Craigslist Scraper
- Facebook Marketplace Scraper
- Kleinanzeigen Scraper
- eBay Search Scraper

#### ⚠️ Disclaimer

This actor scrapes only **publicly available** listing data from OfferUp. It does not access private messages, buyer data, or any content behind a login, and it does not collect personal data beyond the public seller information OfferUp itself displays on a listing. You are responsible for using the scraped data in compliance with OfferUp's Terms of Service, applicable laws (including data-protection and consumer-protection laws), and any restrictions on automated access. Use the output lawfully and ethically.

#### 🔍 SEO Keywords

OfferUp scraper, OfferUp API, OfferUp data extractor, scrape OfferUp listings, OfferUp marketplace scraper, OfferUp price scraper, OfferUp seller scraper, OfferUp car scraper, OfferUp VIN scraper, used car scraper, OfferUp search scraper, classifieds scraper, second-hand marketplace data, OfferUp listing export, OfferUp JSON, resale sourcing data.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search OfferUp for, e.g. `iphone 15`, `mountain bike`, `honda civic`, `dining table`. Each keyword is paginated across the OfferUp search feed.

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

Direct OfferUp search URLs (`https://offerup.com/search?q=iphone`) and/or item URLs (`https://offerup.com/item/detail/{id}`). Auto-classified. Item URLs are always fully detailed.

## `scrapeDetails` (type: `boolean`):

For each listing found in a search, also fetch its item page to add the full description, all photos, category tree, seller profile (rating, items sold, join date, business/dealer flags), shipping/pickup options, and vehicle attributes (make, model, year, mileage, VIN) for autos. Richer rows, but ~2× the requests. Off = the fast search-tile fields (title, price, condition, location, image, listing URL). Item URLs you paste are always fully detailed.

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

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

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

Cap per keyword / search URL. OfferUp returns ~50 listings per page, up to 50 pages. Default 1000.

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

Parallel HTTP requests. OfferUp gates on the request IP — keep this moderate (4-8). Default 6.

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

Per-request retry budget on IP blocks (403), 429 and network errors. Each retry rotates to a fresh residential IP. Default 20 (the block is flaky per-IP — more retries help break through).

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

Leave empty — the actor already routes all traffic through its own built-in US residential proxy at no extra cost to you. OfferUp is US-only and resolves each search's location from the request IP, so US residential exits are required. Only set this if you want to use your own US proxies.

## Actor input object example

```json
{
  "searchQueries": [
    "iphone"
  ],
  "startUrls": [],
  "scrapeDetails": false,
  "maxItems": 1000,
  "maxItemsPerSearch": 1000,
  "maxConcurrency": 6,
  "maxRequestRetries": 20
}
```

# 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 = {
    "searchQueries": [
        "iphone"
    ],
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/offerup-marketplace-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 = {
    "searchQueries": ["iphone"],
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/offerup-marketplace-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 '{
  "searchQueries": [
    "iphone"
  ],
  "startUrls": []
}' |
apify call memo23/offerup-marketplace-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "OfferUp Scraper — Listings, Sellers & Vehicle VINs",
        "description": "Scrape OfferUp listings — by search keyword or pasted item URL. One row per listing: title, price, condition, location, photos, category, seller profile (rating, items sold, join date) and vehicle attributes (make, model, year, mileage, VIN). Optional full-item enrichment. JSON/CSV out.",
        "version": "0.1",
        "x-build-id": "zKaDhadYmqNnUONCy"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~offerup-marketplace-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-offerup-marketplace-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~offerup-marketplace-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-offerup-marketplace-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~offerup-marketplace-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-offerup-marketplace-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQueries": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "Keywords to search OfferUp for, e.g. `iphone 15`, `mountain bike`, `honda civic`, `dining table`. Each keyword is paginated across the OfferUp search feed.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Search & item URLs (optional)",
                        "type": "array",
                        "description": "Direct OfferUp search URLs (`https://offerup.com/search?q=iphone`) and/or item URLs (`https://offerup.com/item/detail/{id}`). Auto-classified. Item URLs are always fully detailed.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "scrapeDetails": {
                        "title": "Scrape full item pages",
                        "type": "boolean",
                        "description": "For each listing found in a search, also fetch its item page to add the full description, all photos, category tree, seller profile (rating, items sold, join date, business/dealer flags), shipping/pickup options, and vehicle attributes (make, model, year, mileage, VIN) for autos. Richer rows, but ~2× the requests. Off = the fast search-tile fields (title, price, condition, location, image, listing URL). Item URLs you paste are always fully detailed.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max results (whole run)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on rows across the entire run. Each row is one paid `listing` event; enriched rows add one `detail` event. Default 1000. Free-tier users are additionally capped at 100.",
                        "default": 1000
                    },
                    "maxItemsPerSearch": {
                        "title": "Max listings per search",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Cap per keyword / search URL. OfferUp returns ~50 listings per page, up to 50 pages. Default 1000.",
                        "default": 1000
                    },
                    "maxConcurrency": {
                        "title": "Max parallel requests",
                        "minimum": 1,
                        "maximum": 15,
                        "type": "integer",
                        "description": "Parallel HTTP requests. OfferUp gates on the request IP — keep this moderate (4-8). Default 6.",
                        "default": 6
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Per-request retry budget on IP blocks (403), 429 and network errors. Each retry rotates to a fresh residential IP. Default 20 (the block is flaky per-IP — more retries help break through).",
                        "default": 20
                    },
                    "proxy": {
                        "title": "Proxy configuration (optional override)",
                        "type": "object",
                        "description": "Leave empty — the actor already routes all traffic through its own built-in US residential proxy at no extra cost to you. OfferUp is US-only and resolves each search's location from the request IP, so US residential exits are required. Only set this if you want to use your own US proxies."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
