# Domain Extractor Grouper (`junipr/domain-extractor-grouper`) Actor

Extract, normalize, and group root domains from URLs, emails, and mixed text. Export account-level domain groups, counts, source traces, and reports.

- **URL**: https://apify.com/junipr/domain-extractor-grouper.md
- **Developed by:** [junipr](https://apify.com/junipr) (community)
- **Categories:** SEO tools, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.95 / 1,000 domain extracteds

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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

## Domain Extractor Grouper

### Store Positioning

**Store title:** Domain Extractor Grouper

**Short description:** Extract, normalize, and group root domains from URLs, emails, and mixed text. Export account-level domain groups, counts, source traces, and reports.

**SEO title:** Domain Extractor Grouper — fast deterministic data utility

**SEO description:** Extract, normalize, and group root domains from URLs, emails, and mixed text. Export account-level domain groups, counts, source traces, and reports. Use it for fast, low-cost normalization or validation at scale with predictable pay-per-event pricing.

**Categories:** SEO_TOOLS, DEVELOPER_TOOLS

**Keywords:** domain, extractor, grouper, tiny deterministic utility

### Pay-Per-Event Pricing

This actor uses pay-per-event pricing. Event prices include Apify platform usage; users are not expected to pay a separate platform-usage pass-through charge for the configured pricing model.

- Primary event: `domain-extracted` at $0.00195 base

Event set:

- `actor-start`: $0.00176 when run setup is accepted.
- `domain-extracted`: $0.00195 for each root-domain group emitted to the dataset.
- `report-generated`: $0.02000 when grouped JSON, summary, and Markdown files are created.

### Public Task Concepts

- Normalize Domain Extractor Grouper records
- Validate Domain Extractor Grouper values in bulk
- Generate a small utility report for Domain Extractor Grouper
- Group lead records by root domain
- Map subdomains to parent domains

### What does Domain Extractor Grouper do?

Domain Extractor Grouper turns messy URLs, email addresses, and free-text notes into clean root-domain groups. It is built for lead lists, CRM exports, enrichment queues, partner inventories, SEO research, and any workflow where `sales@sub.example.com`, `https://www.example.com/path`, and `docs.example.com` should roll up to `example.com`.

Key features:

- Extract domains from URL fields, email fields, and mixed text fields in the same run.
- Normalize hosts by removing protocol, path, port, query, common `www` prefixes, and casing differences.
- Group by root domain with support for common multi-part suffixes such as `co.uk`, `com.au`, and `co.jp`.
- Return source IDs, subdomains, counts by source type, and source match examples for traceability.
- Run deterministically with no network calls, no scraping, and no external paid APIs.

### Why Use This Actor

Most domain cleanup starts as a brittle spreadsheet formula or one-off script. This actor packages the repeatable parts into an Apify-ready utility that can run from the Console, API, schedules, or webhooks.

| Capability | Domain Extractor Grouper | Spreadsheet regex formulas | Ad hoc parsing scripts |
| --- | --- | --- | --- |
| URL, email, and free text in one run | Yes | Usually manual | Depends on script |
| Root-domain grouping | Built in | Hard to maintain | Requires custom code |
| Multi-part suffix handling | Common suffixes included, user-extensible | Rare | Depends on library |
| Source traceability | Source IDs and match examples | Manual columns | Depends on script |
| Deterministic offline execution | Yes, no network calls | Yes | Usually yes |
| Apify dataset and KVS artifacts | Included | No | Requires custom integration |
| Cost per 1,000 groups | $1.95 | Tool-dependent | Maintenance time |

Use it when the output needs to be consumed by another actor, API job, CRM import, enrichment process, or QA checklist. It is intentionally narrow: it does not enrich companies, call WHOIS, resolve DNS, or score domains. It extracts and groups what is already present in your data.

### How to Use

Start with the default input or paste a small list of records:

```json
{
  "inputItems": [
    {
      "sourceId": "lead-001",
      "website": "https://www.Example.com/pricing",
      "email": "Sales@Example.com",
      "notes": "Docs are at docs.example.com"
    }
  ],
  "maxItems": 100,
  "includeReport": true
}
````

1. Open the actor and paste records into `inputItems`, or provide a single free-text block in `text`.
2. Confirm the URL, email, and mixed-text field names match your input.
3. Run the actor from the Console, API, schedule, or webhook.
4. Read domain groups from the default dataset.
5. Download `DOMAIN_SUMMARY.json`, `DOMAIN_GROUPS.json`, or `DOMAIN_REPORT.md` from the key-value store when report generation is enabled.

#### CRM account grouping

Map `website`, `email`, and `notes` from exported lead records. Use `rootDomain` as the account key and `sourceIds` to trace grouped contacts back to their source rows.

#### Research note cleanup

Paste a notes block into `text` or pass string `inputItems`. The actor extracts URLs, emails, and bare domains from the text without calling external services.

#### Custom suffix handling

If your data uses a private or uncommon suffix, add it to `knownMultiPartSuffixes`. The actor appends your suffixes to its built-in deterministic suffix list.

### Input Configuration

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `inputItems` | array | Included fixture rows | Strings or row objects to scan. |
| `text` | string | Empty | Fallback free text used when `inputItems` is empty. |
| `urlFields` | string array | `url`, `website`, `site`, `homepage`, `sourceUrl`, `profileUrl` | Fields parsed as URLs or website/domain values. |
| `emailFields` | string array | `email`, `emails`, `contactEmail`, `ownerEmail`, `supportEmail` | Fields parsed as email addresses or email lists. |
| `textFields` | string array | `text`, `notes`, `description`, `body`, `content`, `message` | Fields scanned for URLs, emails, and bare domains. |
| `extractFromAllStringFields` | boolean | `false` | Scan unmapped string fields as mixed text. |
| `includeSubdomains` | boolean | `true` | Include normalized subdomains seen for each root domain. |
| `includeSamples` | boolean | `true` | Include source match examples in dataset rows. |
| `maxSamplesPerDomain` | integer | `5` | Caps source match examples stored per root-domain group. |
| `knownMultiPartSuffixes` | string array | `[]` | Extra suffixes used for root-domain reduction. |
| `maxItems` | integer | `100` | Maximum input items to scan, capped at 50,000. |
| `includeReport` | boolean | `true` | Write JSON and Markdown report artifacts to KVS. |
| `debug` | boolean | `false` | Enable verbose logs. |

### Output Format

Each dataset row is one root-domain group:

```json
{
  "groupId": "c984d06aafbecf6b",
  "rootDomain": "example.com",
  "status": "grouped",
  "totalMatches": 4,
  "uniqueNormalizedHosts": 3,
  "urlMatches": 2,
  "emailMatches": 1,
  "textMatches": 1,
  "sourceItemCount": 2,
  "sourceIds": ["lead-001", "item-2"],
  "firstSeenItemIndex": 0,
  "lastSeenItemIndex": 2,
  "subdomains": ["docs.example.com", "sub.example.com"],
  "sampleMatches": [
    {
      "sourceType": "url",
      "field": "website",
      "sourceItemIndex": 0,
      "sourceId": "lead-001",
      "originalValue": "https://www.Example.com/pricing",
      "normalizedHost": "example.com",
      "rootDomain": "example.com"
    }
  ],
  "issueCount": 0,
  "issues": [],
  "processedAt": "2026-07-02T00:00:00.000Z",
  "recommendation": "Use this root domain as an account-level key across email and website records."
}
```

Report artifacts:

- `DOMAIN_GROUPS.json`: full grouped output.
- `DOMAIN_SUMMARY.json`: run-level counts and top root domains.
- `DOMAIN_REPORT.md`: compact Markdown summary for QA or delivery notes.

### Integration Examples

#### Node.js

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('junipr/domain-extractor-grouper').call({
  inputItems: [
    { sourceId: 'lead-1', website: 'https://www.example.com', email: 'sales@example.com' }
  ]
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
const accountDomains = items.map((group) => group.rootDomain);
console.log(accountDomains);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("junipr/domain-extractor-grouper").call(run_input={
    "inputItems": [
        {"sourceId": "lead-1", "website": "https://www.example.com", "email": "sales@example.com"}
    ]
})

groups = client.dataset(run["defaultDatasetId"]).list_items().items
print([group["rootDomain"] for group in groups])
```

### Tips and Advanced Usage

#### Keep field mappings explicit

For the cleanest output, map only the fields that are supposed to contain URLs, emails, or notes. Use `extractFromAllStringFields` only for exploratory cleanup runs where extra false positives are acceptable.

#### Use source IDs

If your rows include stable IDs, put them in `sourceId` or `id`. The actor preserves those values in `sourceIds` and `sampleMatches`, which makes it easier to merge grouped results back into your source table.

#### Understand root-domain limits

Root-domain parsing uses a deterministic built-in suffix list plus your optional `knownMultiPartSuffixes`. It does not call the public suffix list at runtime. That keeps runs fast and offline, but highly unusual suffixes should be supplied explicitly.

### Limitations

- The actor normalizes and groups domains from supplied rows only; it does not fetch websites, resolve DNS, enrich contacts, or call WHOIS APIs.
- Root-domain handling uses deterministic suffix rules plus optional `knownMultiPartSuffixes`, not a live public suffix list lookup.
- Invalid hosts, private network names, and ambiguous free-text fragments are skipped rather than guessed.
- Use downstream validation if decisions depend on domain ownership, deliverability, or current DNS state.

### FAQ

#### Does this actor make network calls?

No. It does not fetch websites, resolve DNS, call WHOIS, enrich companies, or use paid APIs.

#### What is a root domain?

A root domain is the account-level domain used for grouping, such as `example.com` from `www.example.com` or `vendor.co.uk` from `blog.vendor.co.uk`.

#### Can it parse domains from notes?

Yes. Fields listed in `textFields` are scanned for URLs, email addresses, and bare domains inside mixed text.

#### How are invalid values handled?

Invalid hosts, IP addresses, localhost values, and strings without a valid dotted domain are ignored rather than emitted as groups.

#### Can I add more suffix rules?

Yes. Add suffixes to `knownMultiPartSuffixes`, for example `["co.example"]`, when your data needs custom root-domain reduction.

#### Why does it emit one row per domain group?

The grouped row is the useful unit for downstream deduplication, enrichment, routing, and reporting. Match examples preserve the source-level trace.

### Related Actors

- CSV Deduper Normalizer
- Domain WHOIS Lookup
- MX Lookup
- Email Validator
- Dataset QA Auditor

# Actor input Schema

## `inputItems` (type: `array`):

Strings or row objects to scan. Objects are read using URL, email, and text field mappings.

## `text` (type: `string`):

Optional free text to scan when Input Items is empty.

## `urlFields` (type: `array`):

Object fields treated as URLs, websites, or domain-like web properties.

## `emailFields` (type: `array`):

Object fields treated as email addresses or email lists.

## `textFields` (type: `array`):

Object fields scanned for URLs, emails, and bare domains inside mixed text.

## `extractFromAllStringFields` (type: `boolean`):

When enabled, every unmapped string field is scanned as mixed text.

## `includeSubdomains` (type: `boolean`):

Include normalized subdomains observed for each root domain group.

## `includeSamples` (type: `boolean`):

Include traceable sample matches in each dataset row.

## `maxSamplesPerDomain` (type: `integer`):

Maximum sample matches stored in each domain group row.

## `knownMultiPartSuffixes` (type: `array`):

Optional extra suffixes such as co.uk or com.au used when reducing hosts to root domains.

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

Maximum input strings or rows to scan. Defaults low and is capped for predictable local utility runs.

## `includeReport` (type: `boolean`):

Store domain groups, summary JSON, and a Markdown report in the default key-value store.

## `dryRun` (type: `boolean`):

Validate input and write a dry-run summary without PPE charges or dataset output.

## `debug` (type: `boolean`):

Enable additional logs for troubleshooting field mapping and extraction decisions.

## Actor input object example

```json
{
  "inputItems": [
    {
      "sourceId": "lead-001",
      "website": "https://www.Example.com/pricing?utm_source=list",
      "email": "Sales@Example.com",
      "notes": "Parent brand example.com also owns help@support.example.com"
    },
    {
      "sourceId": "lead-002",
      "website": "https://blog.vendor.co.uk/post",
      "email": "hello@Vendor.co.uk",
      "notes": "Partner portal: portal.partner.io"
    },
    "Email ops@sub.example.com or visit https://docs.example.com/start."
  ],
  "text": "",
  "urlFields": [
    "url",
    "website",
    "site",
    "homepage",
    "sourceUrl",
    "profileUrl"
  ],
  "emailFields": [
    "email",
    "emails",
    "contactEmail",
    "ownerEmail",
    "supportEmail"
  ],
  "textFields": [
    "text",
    "notes",
    "description",
    "body",
    "content",
    "message"
  ],
  "extractFromAllStringFields": false,
  "includeSubdomains": true,
  "includeSamples": true,
  "maxSamplesPerDomain": 5,
  "knownMultiPartSuffixes": [],
  "maxItems": 100,
  "includeReport": true,
  "dryRun": false,
  "debug": false
}
```

# Actor output Schema

## `results` (type: `string`):

Each dataset row is one root-domain group with counts, source traceability, and sample matches.

## `domainGroupsJson` (type: `string`):

Full JSON array of root-domain groups.

## `summaryJson` (type: `string`):

Run-level counts and top root domains.

## `summaryReport` (type: `string`):

Markdown report describing the domain grouping results.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("junipr/domain-extractor-grouper").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("junipr/domain-extractor-grouper").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 '{}' |
apify call junipr/domain-extractor-grouper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Domain Extractor Grouper",
        "description": "Extract, normalize, and group root domains from URLs, emails, and mixed text. Export account-level domain groups, counts, source traces, and reports.",
        "version": "1.0",
        "x-build-id": "p2PnbTkVk9hB3LOGB"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/junipr~domain-extractor-grouper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-junipr-domain-extractor-grouper",
                "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/junipr~domain-extractor-grouper/runs": {
            "post": {
                "operationId": "runs-sync-junipr-domain-extractor-grouper",
                "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/junipr~domain-extractor-grouper/run-sync": {
            "post": {
                "operationId": "run-sync-junipr-domain-extractor-grouper",
                "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": {
                    "inputItems": {
                        "title": "Input Items",
                        "type": "array",
                        "description": "Strings or row objects to scan. Objects are read using URL, email, and text field mappings.",
                        "default": [
                            {
                                "sourceId": "lead-001",
                                "website": "https://www.Example.com/pricing?utm_source=list",
                                "email": "Sales@Example.com",
                                "notes": "Parent brand example.com also owns help@support.example.com"
                            },
                            {
                                "sourceId": "lead-002",
                                "website": "https://blog.vendor.co.uk/post",
                                "email": "hello@Vendor.co.uk",
                                "notes": "Partner portal: portal.partner.io"
                            },
                            "Email ops@sub.example.com or visit https://docs.example.com/start."
                        ]
                    },
                    "text": {
                        "title": "Fallback Text",
                        "type": "string",
                        "description": "Optional free text to scan when Input Items is empty.",
                        "default": ""
                    },
                    "urlFields": {
                        "title": "URL Fields",
                        "type": "array",
                        "description": "Object fields treated as URLs, websites, or domain-like web properties.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "url",
                            "website",
                            "site",
                            "homepage",
                            "sourceUrl",
                            "profileUrl"
                        ]
                    },
                    "emailFields": {
                        "title": "Email Fields",
                        "type": "array",
                        "description": "Object fields treated as email addresses or email lists.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "email",
                            "emails",
                            "contactEmail",
                            "ownerEmail",
                            "supportEmail"
                        ]
                    },
                    "textFields": {
                        "title": "Mixed Text Fields",
                        "type": "array",
                        "description": "Object fields scanned for URLs, emails, and bare domains inside mixed text.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "text",
                            "notes",
                            "description",
                            "body",
                            "content",
                            "message"
                        ]
                    },
                    "extractFromAllStringFields": {
                        "title": "Scan All String Fields",
                        "type": "boolean",
                        "description": "When enabled, every unmapped string field is scanned as mixed text.",
                        "default": false
                    },
                    "includeSubdomains": {
                        "title": "Include Subdomains",
                        "type": "boolean",
                        "description": "Include normalized subdomains observed for each root domain group.",
                        "default": true
                    },
                    "includeSamples": {
                        "title": "Include Sample Matches",
                        "type": "boolean",
                        "description": "Include traceable sample matches in each dataset row.",
                        "default": true
                    },
                    "maxSamplesPerDomain": {
                        "title": "Maximum Samples Per Domain",
                        "minimum": 0,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum sample matches stored in each domain group row.",
                        "default": 5
                    },
                    "knownMultiPartSuffixes": {
                        "title": "Known Multi-Part Suffixes",
                        "type": "array",
                        "description": "Optional extra suffixes such as co.uk or com.au used when reducing hosts to root domains.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "maxItems": {
                        "title": "Maximum Items",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum input strings or rows to scan. Defaults low and is capped for predictable local utility runs.",
                        "default": 100
                    },
                    "includeReport": {
                        "title": "Generate Summary Report",
                        "type": "boolean",
                        "description": "Store domain groups, summary JSON, and a Markdown report in the default key-value store.",
                        "default": true
                    },
                    "dryRun": {
                        "title": "Dry Run",
                        "type": "boolean",
                        "description": "Validate input and write a dry-run summary without PPE charges or dataset output.",
                        "default": false
                    },
                    "debug": {
                        "title": "Debug Logging",
                        "type": "boolean",
                        "description": "Enable additional logs for troubleshooting field mapping and extraction decisions.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
