# Life Time Deal Aggregator (`happitap/life-time-deal-aggregator`) Actor

This Apify actor scrapes lifetime deal listings from multiple sources including AppSumo, DealMirror, and StackSocial. It normalizes the data into a consistent format, supports incremental runs, and can send webhook notifications for new deals.

- **URL**: https://apify.com/happitap/life-time-deal-aggregator.md
- **Developed by:** [HappiTap](https://apify.com/happitap) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

## LTD Deal Aggregator

Collect and normalize lifetime deal (LTD) listings from popular marketplaces into one clean dataset.

### 🎯 Overview

This Apify actor scrapes lifetime deal listings from multiple sources including AppSumo, DealMirror, and StackSocial. It normalizes the data into a consistent format, supports incremental runs, and can send webhook notifications for new deals.

### 🚀 Features

- **Multi-source scraping**: AppSumo, DealMirror, StackSocial (PitchGround coming in Phase 2)
- **Adapter pattern architecture**: Easy to add new sources
- **Smart filtering**: Keywords, categories, price range, discount percentage
- **Incremental mode**: Only return new deals since last run
- **Webhook notifications**: Get notified when new deals are found
- **Deduplication**: Automatically removes duplicate deals
- **Detailed scraping**: Optional deep scraping of individual deal pages

### 📋 Use Cases

- **Newsletter creators**: Build daily LTD deal newsletters
- **Affiliates**: Track fresh deals with metadata for promotion
- **Agencies**: Scout tools for clients
- **Founders**: Monitor competitors and pricing trends
- **Automation pipelines**: Integrate with webhooks for automated workflows

### 🔧 Input Configuration

#### Source Selection

- **sources** (array): Select which marketplaces to scrape
  - Options: `appsumo`, `dealmirror`, `stacksocial`, `pitchground`
  - Default: `["appsumo", "dealmirror", "stacksocial"]`

#### Deal Filtering

- **mode** (string): Filter deals by status
  - Options: `live_now`, `new_arrivals`, `ended_recently`
  - Default: `live_now`

- **publishedLastNDays** (number): Only include deals published in the last N days
  - Default: `30`

- **keywords** (string): Include deals containing these keywords (comma-separated)
- **excludeKeywords** (string): Exclude deals containing these keywords (comma-separated)
- **categories** (array): Filter by categories
  - Options: AI, SaaS, DevTools, Marketing, Productivity, Design, Analytics, Sales, Customer Service, HR, Finance, Education, Health, Other

- **minDiscountPercent** (number): Minimum discount percentage
  - Default: `0`

- **minPrice** / **maxPrice** (number): Price range filter
  - Defaults: `0` / `10000`

- **pricingType** (string): Filter by pricing type
  - Options: `lifetime`, `annual`, `subscription`, `any`
  - Default: `lifetime`

#### Crawl Controls

- **includeDetails** (boolean): Scrape individual deal pages for detailed information
  - Default: `true`

- **maxItems** (number): Maximum number of deals to collect
  - Default: `300`

- **maxPages** (number): Maximum number of pages to crawl per source
  - Default: `20`

#### Monitoring & Webhooks

- **incremental** (boolean): Only return new deals since last run
  - Default: `true`

- **notifyOnlyNew** (boolean): Send webhook notifications only for new deals
  - Default: `true`

- **webhookUrl** (string): URL to send notifications to
- **webhookSecret** (string): Secret for webhook authentication
- **webhookBatchSize** (number): Number of deals per webhook batch
  - Default: `50`

#### Performance Settings

- **useProxy** (boolean): Use proxy for requests
  - Default: `false`

- **maxConcurrency** (number): Maximum number of concurrent requests
  - Default: `10`

- **requestRetries** (number): Number of times to retry failed requests
  - Default: `4`

- **timeoutSecs** (number): Timeout for individual requests
  - Default: `30`

- **minDelayMs** / **maxDelayMs** (number): Delay between requests
  - Defaults: `1000` / `3000`

### 📊 Output Schema

Each deal in the dataset contains:

```json
{
  "source": "appsumo",
  "sourceDealId": "product-name-lifetime-deal",
  "title": "Product Name",
  "tagline": "Short product description",
  "dealUrl": "https://appsumo.com/products/...",
  "imageUrl": "https://...",
  "categories": ["AI", "SaaS"],
  "pricing": {
    "listPrice": 299,
    "dealPrice": 49,
    "currency": "USD",
    "discountPercent": 84,
    "isLifetime": true
  },
  "socialProof": {
    "rating": 4.5,
    "reviewCount": 120
  },
  "availability": {
    "status": "live",
    "expiresAt": "2024-12-31T23:59:59.000Z"
  },
  "description": "Detailed product description...",
  "features": ["Feature 1", "Feature 2"],
  "dealTiers": [
    {
      "tierName": "Tier 1",
      "price": 49,
      "limits": "Up to 5 users"
    }
  ],
  "productWebsite": "https://product.com",
  "companyName": "Company Inc",
  "hash": "abc123...",
  "scrapedAt": "2024-12-27T10:00:00.000Z"
}
````

### 🏗️ Architecture

#### Adapter Pattern

The actor uses an adapter pattern to support multiple sources:

```
src/
├── main.js                    ## Main orchestration logic
└── adapters/
    ├── appsumoAdapter.js      ## AppSumo scraping logic
    ├── dealmirrorAdapter.js   ## DealMirror scraping logic
    └── stacksocialAdapter.js  ## StackSocial scraping logic
```

#### Adapter Interface

Each adapter implements:

- `buildStartRequests(input)` → Request\[]
- `parseListPage(ctx)` → { deals, nextPages }
- `parseDetailPage(ctx, stub)` → DealNormalized
- `matchesFilters(deal)` → boolean

### 🔄 Incremental Mode

When `incremental` is enabled:

1. The actor loads previously seen deal hashes from state
2. Only new deals (not in previous state) are returned
3. State is saved after each run for next execution

This is perfect for scheduled runs to monitor new deals.

### 🔔 Webhook Notifications

Configure webhooks to receive real-time notifications:

```json
{
  "deals": [...],
  "count": 50,
  "timestamp": "2024-12-27T10:00:00.000Z",
  "signature": "sha256_hash"
}
```

The signature is generated using: `SHA256(JSON.stringify(payload) + webhookSecret)`

### 📈 Example Use Cases

#### Daily Newsletter

```json
{
  "sources": ["appsumo", "dealmirror", "stacksocial"],
  "mode": "new_arrivals",
  "publishedLastNDays": 1,
  "incremental": true,
  "webhookUrl": "https://your-api.com/webhook"
}
```

#### AI Tools Monitor

```json
{
  "sources": ["appsumo", "dealmirror"],
  "keywords": "AI, artificial intelligence, machine learning",
  "categories": ["AI"],
  "minDiscountPercent": 50,
  "includeDetails": true
}
```

#### Competitor Tracking

```json
{
  "sources": ["appsumo"],
  "keywords": "project management, productivity",
  "maxPrice": 100,
  "includeDetails": true
}
```

### 🛠️ Development

#### Local Setup

```bash
## Install dependencies
npm install

## Run locally
npm start
```

#### Adding a New Source

1. Create a new adapter in `src/adapters/`
2. Implement the adapter interface
3. Register in `ADAPTER_REGISTRY` in `main.js`
4. Add to INPUT\_SCHEMA enum

### 💰 Pricing (Pay Per Event)

This actor uses **pay-per-event (PPE)** pricing for transparent, usage-based costs:

#### Pricing Events

- **Actor Start**: $0.00005 per run (~$0.05 per 1,000 runs)
  - Covers startup costs
  - Apify provides 5 seconds of free compute per run
  - Charged automatically once per run

- **Deal Found**: $0.002 per deal (~$2.00 per 1,000 deals)
  - Charged for each deal added to your dataset
  - Covers scraping, parsing, normalization, and deduplication
  - Only charged for unique deals (duplicates are free)

#### Example Costs

| Deals Scraped | Actor Starts | Total Cost |
|---------------|--------------|------------|
| 100 deals     | 1 run        | **$0.20**  |
| 500 deals     | 1 run        | **$1.00**  |
| 1,000 deals   | 1 run        | **$2.00**  |
| 5,000 deals   | 1 run        | **$10.00** |

**Note**: You only pay for successful results. Failed requests and duplicate deals are not charged.

#### Set Your Spending Limit

Control costs by setting a maximum spending limit per run in the Apify Console. The actor will automatically stop when your limit is reached.

### 📝 Roadmap

#### Phase 2 (Enrichment)

- PitchGround adapter
- Price history tracking
- AI-powered tagging
- Affiliate link templates

#### Phase 3 (Monitoring)

- Price drop detection
- Deal status changes
- Slack/Discord integrations
- Historical snapshots

### 🤝 Support

For issues or feature requests, please contact support or open an issue.

### 📄 License

ISC

# Actor input Schema

## `sources` (type: `array`):

Select which marketplaces to scrape

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

Filter deals by status

## `publishedLastNDays` (type: `integer`):

Only include deals published in the last N days

## `keywords` (type: `string`):

Include deals containing these keywords (comma-separated)

## `excludeKeywords` (type: `string`):

Exclude deals containing these keywords (comma-separated)

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

Filter by categories (if available)

## `minDiscountPercent` (type: `integer`):

Only include deals with at least this discount percentage

## `minPrice` (type: `number`):

Only include deals with price at least this amount

## `maxPrice` (type: `number`):

Only include deals with price at most this amount

## `pricingType` (type: `string`):

Filter by pricing type

## `includeDetails` (type: `boolean`):

Scrape individual deal pages for detailed information

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

Maximum number of deals to collect

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

Maximum number of pages to crawl per source

## `incremental` (type: `boolean`):

Only return new deals since last run

## `notifyOnlyNew` (type: `boolean`):

Send webhook notifications only for new deals

## `webhookUrl` (type: `string`):

URL to send notifications to

## `webhookSecret` (type: `string`):

Secret for webhook authentication

## `webhookBatchSize` (type: `integer`):

Number of deals per webhook batch

## `useProxy` (type: `boolean`):

Use proxy for requests (recommended for some sources)

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

Maximum number of concurrent requests

## `requestRetries` (type: `integer`):

Number of times to retry failed requests

## `timeoutSecs` (type: `integer`):

Timeout for individual requests

## `minDelayMs` (type: `integer`):

Minimum delay between requests

## `maxDelayMs` (type: `integer`):

Maximum delay between requests

## Actor input object example

```json
{
  "sources": [
    "appsumo",
    "dealmirror",
    "stacksocial"
  ],
  "mode": "live_now",
  "publishedLastNDays": 30,
  "keywords": "",
  "excludeKeywords": "",
  "categories": [],
  "minDiscountPercent": 0,
  "minPrice": 0,
  "maxPrice": 10000,
  "pricingType": "lifetime",
  "includeDetails": true,
  "maxItems": 300,
  "maxPages": 20,
  "incremental": true,
  "notifyOnlyNew": true,
  "webhookUrl": "",
  "webhookSecret": "",
  "webhookBatchSize": 50,
  "useProxy": false,
  "maxConcurrency": 10,
  "requestRetries": 4,
  "timeoutSecs": 30,
  "minDelayMs": 1000,
  "maxDelayMs": 3000
}
```

# 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 = {
    "sources": [
        "appsumo",
        "dealmirror",
        "stacksocial"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("happitap/life-time-deal-aggregator").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 = { "sources": [
        "appsumo",
        "dealmirror",
        "stacksocial",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("happitap/life-time-deal-aggregator").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 '{
  "sources": [
    "appsumo",
    "dealmirror",
    "stacksocial"
  ]
}' |
apify call happitap/life-time-deal-aggregator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=happitap/life-time-deal-aggregator",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Life Time Deal Aggregator",
        "description": "This Apify actor scrapes lifetime deal listings from multiple sources including AppSumo, DealMirror, and StackSocial. It normalizes the data into a consistent format, supports incremental runs, and can send webhook notifications for new deals.",
        "version": "0.0",
        "x-build-id": "zwmn1YX9RsgCsyqbg"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/happitap~life-time-deal-aggregator/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-happitap-life-time-deal-aggregator",
                "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/happitap~life-time-deal-aggregator/runs": {
            "post": {
                "operationId": "runs-sync-happitap-life-time-deal-aggregator",
                "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/happitap~life-time-deal-aggregator/run-sync": {
            "post": {
                "operationId": "run-sync-happitap-life-time-deal-aggregator",
                "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": [
                    "sources"
                ],
                "properties": {
                    "sources": {
                        "title": "Sources to scrape",
                        "type": "array",
                        "description": "Select which marketplaces to scrape",
                        "items": {
                            "type": "string",
                            "enum": [
                                "appsumo",
                                "dealmirror",
                                "stacksocial",
                                "pitchground"
                            ]
                        },
                        "default": [
                            "appsumo",
                            "dealmirror",
                            "stacksocial"
                        ]
                    },
                    "mode": {
                        "title": "Deal mode",
                        "enum": [
                            "live_now",
                            "new_arrivals",
                            "ended_recently"
                        ],
                        "type": "string",
                        "description": "Filter deals by status",
                        "default": "live_now"
                    },
                    "publishedLastNDays": {
                        "title": "Published last N days",
                        "minimum": 1,
                        "maximum": 365,
                        "type": "integer",
                        "description": "Only include deals published in the last N days",
                        "default": 30
                    },
                    "keywords": {
                        "title": "Keywords to search for",
                        "type": "string",
                        "description": "Include deals containing these keywords (comma-separated)",
                        "default": ""
                    },
                    "excludeKeywords": {
                        "title": "Keywords to exclude",
                        "type": "string",
                        "description": "Exclude deals containing these keywords (comma-separated)",
                        "default": ""
                    },
                    "categories": {
                        "title": "Categories",
                        "type": "array",
                        "description": "Filter by categories (if available)",
                        "items": {
                            "type": "string",
                            "enum": [
                                "AI",
                                "SaaS",
                                "DevTools",
                                "Marketing",
                                "Productivity",
                                "Design",
                                "Analytics",
                                "Sales",
                                "Customer Service",
                                "HR",
                                "Finance",
                                "Education",
                                "Health",
                                "Other"
                            ]
                        },
                        "default": []
                    },
                    "minDiscountPercent": {
                        "title": "Minimum discount %",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Only include deals with at least this discount percentage",
                        "default": 0
                    },
                    "minPrice": {
                        "title": "Minimum price",
                        "minimum": 0,
                        "type": "number",
                        "description": "Only include deals with price at least this amount",
                        "default": 0
                    },
                    "maxPrice": {
                        "title": "Maximum price",
                        "minimum": 0,
                        "type": "number",
                        "description": "Only include deals with price at most this amount",
                        "default": 10000
                    },
                    "pricingType": {
                        "title": "Pricing type",
                        "enum": [
                            "lifetime",
                            "annual",
                            "subscription",
                            "any"
                        ],
                        "type": "string",
                        "description": "Filter by pricing type",
                        "default": "lifetime"
                    },
                    "includeDetails": {
                        "title": "Include detailed data",
                        "type": "boolean",
                        "description": "Scrape individual deal pages for detailed information",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Maximum items",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of deals to collect",
                        "default": 300
                    },
                    "maxPages": {
                        "title": "Maximum pages per source",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of pages to crawl per source",
                        "default": 20
                    },
                    "incremental": {
                        "title": "Incremental mode",
                        "type": "boolean",
                        "description": "Only return new deals since last run",
                        "default": true
                    },
                    "notifyOnlyNew": {
                        "title": "Notify only new deals",
                        "type": "boolean",
                        "description": "Send webhook notifications only for new deals",
                        "default": true
                    },
                    "webhookUrl": {
                        "title": "Webhook URL",
                        "type": "string",
                        "description": "URL to send notifications to",
                        "default": ""
                    },
                    "webhookSecret": {
                        "title": "Webhook secret",
                        "type": "string",
                        "description": "Secret for webhook authentication",
                        "default": ""
                    },
                    "webhookBatchSize": {
                        "title": "Webhook batch size",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Number of deals per webhook batch",
                        "default": 50
                    },
                    "useProxy": {
                        "title": "Use proxy",
                        "type": "boolean",
                        "description": "Use proxy for requests (recommended for some sources)",
                        "default": false
                    },
                    "maxConcurrency": {
                        "title": "Maximum concurrency",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of concurrent requests",
                        "default": 10
                    },
                    "requestRetries": {
                        "title": "Request retries",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of times to retry failed requests",
                        "default": 4
                    },
                    "timeoutSecs": {
                        "title": "Request timeout (seconds)",
                        "minimum": 5,
                        "maximum": 300,
                        "type": "integer",
                        "description": "Timeout for individual requests",
                        "default": 30
                    },
                    "minDelayMs": {
                        "title": "Minimum delay (ms)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum delay between requests",
                        "default": 1000
                    },
                    "maxDelayMs": {
                        "title": "Maximum delay (ms)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum delay between requests",
                        "default": 3000
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
