# DMARC Report Analyzer — Email Security & SPF/DKIM (`perryay/dmarc-report-analyzer`) Actor

Parse and analyze DMARC forensic and aggregate reports. Get SPF/DKIM alignment, identify spoofing attempts, and monitor email authentication health.

- **URL**: https://apify.com/perryay/dmarc-report-analyzer.md
- **Developed by:** [Perry AY](https://apify.com/perryay) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / actor start

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

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

## What's an Apify Actor?

Actors are 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

## DMARC Report Analyzer 🔐 — Parse XML Reports & Score Email Security Posture

**Parse DMARC aggregate and forensic XML reports into structured JSON. Score domain email security posture (SPF, DKIM, DMARC alignment), detect unauthorized senders, and export actionable dashboards. No external API needed.**

---

### What does it do?

DMARC Report Analyzer ingests **DMARC aggregate reports** (generated by mailbox providers like Google, Microsoft, Yahoo) and **forensic failure reports**, and converts them into clean, structured JSON. It also provides a **domain security scoring engine** that evaluates SPF alignment, DKIM alignment, DMARC compliance, and policy strictness to produce a 0-100 security score with actionable recommendations.

#### Who is it for?

| Persona | Use Case |
|---|---|
| **Security Engineer** | Monitor email authentication health across multiple domains, detect unauthorized senders |
| **DevOps/SRE** | Automate DMARC report parsing in CI/CD pipelines, integrate with security dashboards |
| **Compliance Officer** | Generate evidence of DMARC enforcement for regulatory audits (GDPR, PCI DSS, HIPAA) |
| **Email Deliverability Consultant** | Analyze client DMARC reports, identify SPF/DKIM alignment issues, recommend fixes |
| **Penetration Tester** | Assess domain email security posture, identify spoofing vulnerabilities |

---

### ✨ Features

- **Parse single DMARC aggregate report** — Extract metadata, published policy, and all record rows with authentication results
- **Parse DMARC forensic reports** — Extract failure details: auth failure type, DKIM/SPF specifics, identity alignment
- **Auto-detect report type** — Automatically distinguishes aggregate vs. forensic XML without user input
- **Batch parsing** — Process up to 50 reports in a single run from URLs or inline XML, with concurrent fetching
- **Domain security score** — 0-100 scoring based on SPF alignment (25%), DKIM alignment (25%), DMARC compliance (30%), and policy strictness (20%)
- **Security rating system** — Critical (0-29), Weak (30-49), Moderate (50-69), Strong (70-100)
- **Unauthorized sender detection** — Lists all unique sending IPs that failed authentication
- **Actionable recommendations** — Generates tailored advice to improve email security posture
- **Gzip decompression** — Automatically handles gzip-encoded XML reports fetched from URLs
- **Namespace-agnostic parsing** — Handles both namespaced and bare XML tags from different reporters
- **Structured JSON output** — Clean, schema-validated results ready for pipeline consumption

---

### 🚀 Quick Start

#### Parse a single report from a URL

```json
{
  "mode": "parse",
  "xmlUrl": "https://example.com/dmarc-report.xml"
}
````

#### Parse inline XML

```json
{
  "mode": "parse",
  "xmlInput": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><feedback>...</feedback>"
}
```

#### Batch parse multiple reports

```json
{
  "mode": "batch",
  "batchUrls": [
    "https://reports.google.com/dmarc/example.com/1.xml",
    "https://reports.google.com/dmarc/example.com/2.xml"
  ]
}
```

#### Analyze domain security

```json
{
  "mode": "analyze",
  "domain": "example.com",
  "batchUrls": [
    "https://reports.google.com/dmarc/example.com/recent.xml"
  ]
}
```

***

### 📋 Input Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `"parse"` | Operation mode: `parse`, `batch`, or `analyze` |
| `xmlInput` | string | `""` | Raw DMARC XML report to parse (inline) |
| `xmlUrl` | string | `""` | URL to a DMARC XML report to fetch and parse |
| `forceType` | string | `""` | Force report type: `"aggregate"` or `"forensic"` (empty = auto-detect) |
| `batchUrls` | array | `[]` | List of URLs to DMARC XML reports for batch processing |
| `batchXmls` | array | `[]` | List of inline DMARC XML reports for batch processing |
| `domain` | string | `""` | Target domain for security analysis (inferred from reports if omitted) |
| `parsedData` | array | `[]` | Pre-parsed DMARC record objects (bypasses XML parsing) |

***

### 📤 Output Format

#### Parse mode (single report)

```json
{
  "mode": "parse",
  "success": true,
  "report_type": "aggregate",
  "metadata": {
    "org": { "name": "google.com", "email": "noreply@dmarc.google.com" },
    "report_id": "12345",
    "date_range_begin": "2025-01-01T00:00:00+00:00",
    "date_range_end": "2025-01-02T00:00:00+00:00"
  },
  "policy_published": {
    "domain": "example.com",
    "p": "none",
    "sp": "none",
    "pct": 100
  },
  "records": [
    {
      "row": {
        "source_ip": "203.0.113.5",
        "count": 150,
        "disposition": "none",
        "dkim_aligned": true,
        "spf_aligned": true
      }
    }
  ],
  "record_count": 1
}
```

#### Analyze mode

```json
{
  "mode": "analyze",
  "success": true,
  "domain": "example.com",
  "security_score": 72,
  "security_rating": "Strong",
  "spf_alignment_rate": 85.5,
  "dkim_alignment_rate": 92.3,
  "dmarc_compliance_rate": 88.0,
  "total_messages": 1500,
  "unauthorized_senders": ["198.51.100.7", "192.0.2.99"],
  "recommendations": [
    "Improve SPF alignment: ensure all sending sources are listed in your SPF record..."
  ]
}
```

***

### 🎯 Use Cases

- **Email security monitoring** — Regularly fetch DMARC reports from mailbox providers and track authentication metrics over time
- **Domain takeover detection** — Identify unauthorized senders attempting to spoof your domain
- **Compliance automation** — Generate DMARC compliance reports for auditors without manual XML processing
- **Security consulting** — Analyze client domains, produce professional security posture reports with recommendations
- **CI/CD integration** — Include DMARC report parsing in your deployment pipeline to catch misconfigurations before they affect deliverability

***

### 💎 Premium Features

This actor includes premium charge events:

| Event | Description |
|---|---|
| `apify-actor-start` | Charged on every run |
| `batch-processing` | Charged when using batch mode |
| `security-score-analysis` | Charged when using analyze mode |
| `forensic-parsing` | Charged when forensic reports are detected |

***

### 🧪 Local Testing

You can test this actor locally without an Apify account using the `apify` SDK in local mode:

```python
import asyncio
from apify import Actor

async def test():
    async with Actor:
        from main import parse_dmarc_report
        with open("sample_dmarc.xml") as f:
            result = parse_dmarc_report(f.read())
        print(f"Parsed {result['record_count']} records")

asyncio.run(test())
```

Or set the `APIFY_LOCAL_STORAGE_DIR` environment variable to use local storage:

```bash
export APIFY_LOCAL_STORAGE_DIR=./apify_local
python3 main.py
```

***

### 🛡️ Security Considerations

- The actor only makes outbound HTTP requests to URLs you explicitly provide
- No API keys or external services are required
- All XML parsing happens locally in-process
- Reports are processed in memory and are not stored on any external server

***

### 📜 Changelog

#### 1.0.0

- Initial release
- Parse single DMARC aggregate report XML into structured JSON
- Parse single DMARC forensic (failure) report XML
- Auto-detect aggregate vs. forensic report type
- Batch parsing of multiple reports from URLs or inline XML
- Domain security score analysis with SPF, DKIM, DMARC alignment rates
- Unauthorized sender detection and IP enumeration
- Security rating engine (Critical / Weak / Moderate / Strong)
- Actionable security recommendations generation
- Gzip decompression support for fetched reports
- Comprehensive XML validation with detailed error reporting
- Namespace-agnostic XML parsing (handles both prefixed and bare tags)
- Structured dataclass models for all DMARC report components

***

### ❓ FAQ

#### What is a DMARC report?

DMARC reports are XML files generated by mailbox providers (Google, Microsoft, Yahoo, etc.) that show how email receivers evaluated messages claiming to be from your domain. Aggregate reports summarize authentication results over a period, while forensic reports contain details about individual failed messages.

#### Does this actor require any API keys?

No. The DMARC Report Analyzer is fully self-contained. It does not call any external APIs beyond fetching XML reports from URLs you explicitly provide.

#### How is the security score calculated?

The security score (0–100) is a weighted composite:

- **SPF alignment rate** (25%)
- **DKIM alignment rate** (25%)
- **DMARC compliance rate** (30%)
- **Policy strictness** (20%)

The score maps to ratings: **Critical** (0–29), **Weak** (30–49), **Moderate** (50–69), **Strong** (70–100).

#### What is the maximum XML file size?

The actor accepts DMARC XML reports up to 10 MB in size. Larger files will be rejected with a clear error message.

#### Can I process multiple domains at once?

Yes. Use `mode: "batch"` with a list of `batchUrls`. The actor will parse all reports concurrently and return individual results for each.

#### What happens if the XML is malformed?

The actor performs a well-formedness check before parsing. If the XML is invalid, it returns a detailed error message describing the parse failure.

### 🔌 MCP Integration

The DMARC Report Analyzer can be integrated with the Model Context Protocol (MCP) for AI-assisted security analysis workflows:

#### MCP Server Setup

```json
{
  "mcpServers": {
    "dmarc-analyzer": {
      "command": "apify",
      "args": ["run", "-a", "dmarc-report-analyzer"],
      "env": {
        "APIFY_TOKEN": "${APIFY_TOKEN}"
      }
    }
  }
}
```

#### Example MCP Tool Call

```json
{
  "mode": "analyze",
  "domain": "example.com",
  "batchUrls": ["https://reports.google.com/dmarc/example.com/recent.xml"]
}
```

The actor returns structured JSON that an AI agent can consume to generate natural-language security assessments, track trends over time, or integrate into automated incident response pipelines.

### 🔑 SEO Keywords

`DMARC report parser`, `DMARC XML parser`, `email security analyzer`, `SPF DKIM DMARC alignment`, `domain security score`, `DMARC aggregate report`, `DMARC forensic report`, `email authentication analysis`, `DMARC compliance tool`, `unauthorized sender detection`, `DMARC XML to JSON`, `email spoofing detection`, `DMARC batch parser`, `DMARC security analysis`, `DMARC report analyzer Apify`

### 🧰 Related Tools

- **[Email Security Analyzer](https://apify.com/perryay/email-security-analyzer)** — Comprehensive email authentication and security analysis
- **[DNS Records Inspector](https://apify.com/perryay/dns-records-inspector-a-aaaa-mx-txt-ns-cname)** — Inspect A, AAAA, MX, TXT, NS, CNAME records for any domain
- **[Domain Intel](https://apify.com/perryay/domain-intel)** — Domain intelligence gathering and reconnaissance
- **[SSL Certificate Checker](https://apify.com/perryay/ssl-cert-inspector)** — Inspect and validate SSL/TLS certificates
- **[All perryay actors](https://apify.com/perryay)** — Browse the full collection

# Actor input Schema

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

Actor operation mode: parse (single report), batch (multiple reports), analyze (domain security score)

## `xmlInput` (type: `string`):

Raw DMARC aggregate or forensic XML report to parse (used in parse mode)

## `xmlUrl` (type: `string`):

URL to a DMARC XML report to fetch and parse (used in parse and analyze modes)

## `forceType` (type: `string`):

Override auto-detection: force 'aggregate' or 'forensic' parsing

## `batchUrls` (type: `array`):

List of URLs to DMARC XML reports for batch processing (up to 50 items)

## `batchXmls` (type: `array`):

List of inline DMARC XML reports for batch processing (up to 50 items)

## `domain` (type: `string`):

Domain to analyze for security score (optional, inferred from reports if omitted)

## `parsedData` (type: `array`):

Pre-parsed DMARC record objects for security analysis (bypasses XML parsing)

## Actor input object example

```json
{
  "mode": "parse",
  "forceType": "",
  "batchUrls": [
    "https://example.com/report1.xml",
    "https://example.com/report2.xml"
  ],
  "batchXmls": [
    "<?xml version=\"1.0\"?>...",
    "<?xml version=\"1.0\"?>..."
  ],
  "parsedData": []
}
```

# Actor output Schema

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

All parsed DMARC reports and security analysis results in the default dataset

# 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 = {
    "mode": "parse",
    "xmlInput": "",
    "xmlUrl": "",
    "forceType": "",
    "batchUrls": [
        "https://example.com/report1.xml",
        "https://example.com/report2.xml"
    ],
    "batchXmls": [
        "<?xml version=\"1.0\"?>...",
        "<?xml version=\"1.0\"?>..."
    ],
    "domain": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("perryay/dmarc-report-analyzer").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 = {
    "mode": "parse",
    "xmlInput": "",
    "xmlUrl": "",
    "forceType": "",
    "batchUrls": [
        "https://example.com/report1.xml",
        "https://example.com/report2.xml",
    ],
    "batchXmls": [
        "<?xml version=\"1.0\"?>...",
        "<?xml version=\"1.0\"?>...",
    ],
    "domain": "",
}

# Run the Actor and wait for it to finish
run = client.actor("perryay/dmarc-report-analyzer").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 '{
  "mode": "parse",
  "xmlInput": "",
  "xmlUrl": "",
  "forceType": "",
  "batchUrls": [
    "https://example.com/report1.xml",
    "https://example.com/report2.xml"
  ],
  "batchXmls": [
    "<?xml version=\\"1.0\\"?>...",
    "<?xml version=\\"1.0\\"?>..."
  ],
  "domain": ""
}' |
apify call perryay/dmarc-report-analyzer --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "DMARC Report Analyzer — Email Security & SPF/DKIM",
        "description": "Parse and analyze DMARC forensic and aggregate reports. Get SPF/DKIM alignment, identify spoofing attempts, and monitor email authentication health.",
        "version": "1.0",
        "x-build-id": "XmtKK8eagY6knoGd9"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/perryay~dmarc-report-analyzer/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-perryay-dmarc-report-analyzer",
                "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/perryay~dmarc-report-analyzer/runs": {
            "post": {
                "operationId": "runs-sync-perryay-dmarc-report-analyzer",
                "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/perryay~dmarc-report-analyzer/run-sync": {
            "post": {
                "operationId": "run-sync-perryay-dmarc-report-analyzer",
                "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": {
                    "mode": {
                        "title": "Operation Mode",
                        "enum": [
                            "parse",
                            "batch",
                            "analyze"
                        ],
                        "type": "string",
                        "description": "Actor operation mode: parse (single report), batch (multiple reports), analyze (domain security score)",
                        "default": "parse"
                    },
                    "xmlInput": {
                        "title": "XML Input (inline)",
                        "type": "string",
                        "description": "Raw DMARC aggregate or forensic XML report to parse (used in parse mode)"
                    },
                    "xmlUrl": {
                        "title": "XML Report URL",
                        "type": "string",
                        "description": "URL to a DMARC XML report to fetch and parse (used in parse and analyze modes)"
                    },
                    "forceType": {
                        "title": "Force Report Type",
                        "enum": [
                            "",
                            "aggregate",
                            "forensic"
                        ],
                        "type": "string",
                        "description": "Override auto-detection: force 'aggregate' or 'forensic' parsing",
                        "default": ""
                    },
                    "batchUrls": {
                        "title": "Batch URLs",
                        "type": "array",
                        "description": "List of URLs to DMARC XML reports for batch processing (up to 50 items)",
                        "default": []
                    },
                    "batchXmls": {
                        "title": "Batch XML (inline)",
                        "type": "array",
                        "description": "List of inline DMARC XML reports for batch processing (up to 50 items)",
                        "default": []
                    },
                    "domain": {
                        "title": "Target Domain",
                        "type": "string",
                        "description": "Domain to analyze for security score (optional, inferred from reports if omitted)"
                    },
                    "parsedData": {
                        "title": "Pre-parsed Record Data",
                        "type": "array",
                        "description": "Pre-parsed DMARC record objects for security analysis (bypasses XML parsing)",
                        "default": []
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
