# Etsy Shop Details Scraper 🏪 Sales, Star-Seller & Emails (`memo23/etsy-shop-scraper`) Actor

Paste Etsy shop URLs, get one clean row per shop: lifetime sales, rating + reviews, total listings, Star-Seller, slogan and logo — plus optional seller contact emails, payment-stack qualification, and the shop's products. Managed unblocker, zero config. JSON/CSV/Excel out.

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

## Pricing

from $8.00 / 1,000 result (shop or product row)s

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

## Etsy Shop Details Scraper — Sales, Rating, Star-Seller & Seller Leads

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/etsy-shop-logo.png" alt="Etsy Shop Details Scraper" width="180" />
</p>

**One clean row per Etsy shop.** Paste any list of `etsy.com/shop/{name}` URLs and get each shop's **lifetime sales count, rating + review count, total listings, Star-Seller status, slogan, description, and logo** — with optional **contact-email discovery** and **payment-stack qualification** to turn shop profiles into contactable, monetization-qualified seller leads. JSON, CSV, or Excel out.

### Why Use This Scraper?

- ✅ **True shop-level data** — not a list of the shop's products relabeled as "shop details". One `rowType: "shop"` row per shop with the numbers that matter: lifetime sales, rating, review count, listing count, Star-Seller badge.
- ✅ **Seller lead-gen built in** — opt-in contact email per shop (billed only when found) and payment-stack qualification (Stripe, Shopify, PayPal, …) so you know which sellers are real, paying businesses.
- ✅ **Products too, if you want them** — the same run can crawl each shop's listings into full product rows (~40 fields each: prices + ranges, variations, reviews, materials, shipping, returns policy).
- ✅ **Managed unblocker, zero config** — Etsy's bot wall is handled for you. No proxies, cookies, or CAPTCHAs to set up.
- ✅ **Flat rows** ready for CSV / spreadsheet / CRM import.

### How It Works

<p align="center">
  <img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-etsy-shop.png" alt="How the Etsy Shop Details Scraper works" width="820" />
</p>

1. **Input** — paste shop URLs (product / search / category URLs also accepted).
2. **Fetch & parse** — each shop page is fetched once through the managed unblocker and parsed from Etsy's own embedded structured data.
3. **Shop row out** — one `rowType: "shop"` row per shop, before any products are crawled.
4. **Optional** — crawl the shop's listings into product rows; discover a contact email; qualify the seller's payment stack.

### Input Configuration

| Field | Type | Default | Notes |
|---|---|---|---|
| `startUrls` | array | – | `etsy.com/shop/{name}` URLs, one per shop. |
| `maxItems` | integer | `10` | Cap on total rows (shop + product). Set to the number of shops for a pure shop-details run. |
| `shopDetails` | boolean | `true` | One dedicated shop row per shop URL — the core of this actor. |
| `enrichEmails` | boolean | `false` | Best-effort contact email per shop. **Billed per email found — never on a miss.** |
| `qualifyByPayment` | boolean | `false` | Requires `enrichEmails`. Flags payment processors / e-commerce stack at no extra charge. |
| `includeReviews` | boolean | `true` | Sample reviews on product rows (when products are crawled). |
| `enrichSeller` | boolean | `false` | Copy shop stats onto each product row too. |

**Pure shop-details run** — one row per shop, nothing else:

```json
{
  "startUrls": [
    "https://www.etsy.com/shop/PetiteFraise",
    "https://www.etsy.com/shop/CaitlynMinimalist"
  ],
  "shopDetails": true,
  "maxItems": 2
}
````

**Shop profiles + contactable leads:**

```json
{
  "startUrls": ["https://www.etsy.com/shop/PetiteFraise"],
  "shopDetails": true,
  "enrichEmails": true,
  "qualifyByPayment": true,
  "maxItems": 5
}
```

### Output Sample

```json
{
  "rowType": "shop",
  "shopName": "PetiteFraise",
  "shopDescription": "Shop magical meaningful jewelry for gypsy souls & dreamers by PetiteFraise located in London, United Kingdom.",
  "shopSlogan": "Magical meaningful jewelry gypsy souls & dreamers",
  "shopLogoUrl": "https://i.etsystatic.com/isla/…",
  "shopRating": 4.97,
  "shopReviewCount": 214,
  "shopSales": 658,
  "shopNumberOfListings": 9,
  "shopIsStarSeller": false,
  "shopUrl": "https://www.etsy.com/shop/PetiteFraise"
}
```

Product rows (when crawled) carry ~40 fields: title, description, price + `priceMax` range, currency, availability, quantity, rating, review count, sample reviews, images, category path, materials, SKU, variations, shipping origin/price, processing days, returns/exchanges policy, favorites, and the shop identity — plus `contactEmail` / `takesPayments` when enrichment is on.

### Use Cases

| Audience | Use case |
|---|---|
| **Print-on-demand / suppliers** | Qualify sellers by lifetime sales before B2B outreach, then reach them by email |
| **Agencies & lead-gen** | Build shop lists with sales volume, Star-Seller status, and payment qualification |
| **Market researchers** | Benchmark shops in a niche: sales, ratings, listing counts side by side |
| **Competitor analysts** | Track competitor shops' sales trajectory and catalogue size over time |

### FAQ

**How is this different from Etsy product scrapers that accept shop URLs?**
Those return the shop's *products*. This actor returns the *shop itself* as a structured row — sales, rating, listings, Star-Seller — and can add products on top.

**Where does the data come from?**
Etsy's own embedded structured data on public shop pages. No login, no private data.

**What does it cost?**
$8 per 1,000 rows, plus $0.025 only when a contact email is actually found. A 100-shop profiling run is well under $1.

**Can I monitor shops over time?**
Yes — schedule the actor on Apify and diff `shopSales` / `shopNumberOfListings` between runs.

### 🤖 For AI Agents & LLM Apps

**Purpose:** profile Etsy shops — one structured row per shop URL with sales, rating, listings, and Star-Seller status; optionally discover a seller contact email.

**Minimal tested input:**

```json
{
  "startUrls": ["https://www.etsy.com/shop/PetiteFraise"],
  "shopDetails": true,
  "maxItems": 1
}
```

**Shop-row output fields (flat):** `rowType` (`"shop"`), `shopName`, `shopDescription`, `shopSlogan`, `shopLogoUrl`, `shopRating`, `shopReviewCount`, `shopSales`, `shopNumberOfListings`, `shopIsStarSeller`, `shopUrl`.

**Behaviors an agent should know:**

- One shop URL + `maxItems: N` → 1 shop row, then up to N−1 product rows from that shop. Set `maxItems` = number of shop URLs for shop rows only.
- `enrichEmails: true` adds `contactEmail` / `contactWebsite` when found; a run never fails because an email wasn't found.
- Billing: $0.008 per dataset row + $0.025 per contact email found + $0.005/GB actor start. A 10-shop profile run ≈ $0.09.
- Invalid or non-Etsy URLs are skipped with a log warning, not an error; an empty `startUrls` ends the run with zero rows.

### Support

Open an issue on the actor's Apify page — issues are answered quickly and drive the roadmap.

### ⚠️ Disclaimer

This Actor is an independent tool, **not affiliated with, endorsed by, or sponsored by Etsy, Inc.** All trademarks belong to their respective owners. It extracts only publicly visible shop and product information from etsy.com — no buyer data, private messages, or anything behind a login. Users are responsible for complying with Etsy's Terms of Service and applicable data-protection laws (GDPR/CCPA) when storing or processing scraped data, and for obtaining consent before contacting any seller.

### SEO Keywords

etsy shop scraper, etsy shop details scraper, etsy shop details, etsy store scraper, etsy shop info, etsy shop analytics, etsy shop sales count, etsy seller scraper, etsy seller leads, etsy star seller scraper, etsy shop rating scraper, etsy seller emails, etsy shop data export, etsy shop profile scraper, etsy store details, scrape etsy shops, etsy seller research, etsy shop monitoring

# Actor input Schema

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

Etsy shop URLs — <code>https://www.etsy.com/shop/{name}</code>, one per shop. Each shop emits one dedicated shop row (name, lifetime sales, rating + review count, total listings, Star-Seller status, slogan, description, logo). Product / search / category URLs are also accepted and produce product rows.

## `searchQuery` (type: `string`):

Optional: a keyword to search Etsy for, e.g. "ceramic mug" — its matching products are scraped as product rows (useful for discovering shops in a niche before profiling them).

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

Hard cap on rows collected across all start URLs (shop rows + product rows). Set it to the number of shop URLs you pasted for a pure shop-details run.

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

Pages fetched in parallel through the managed unblocker. Keep moderate (3–8); each page is one unblocker request.

## `shopDetails` (type: `boolean`):

Emit one dedicated shop row (rowType: "shop") per shop URL — the core of this actor. Leave on.

## `includeReviews` (type: `boolean`):

When product rows are collected, include the recent customer reviews carried in each listing's structured data (author, rating, text, date).

## `enrichSeller` (type: `boolean`):

When product rows are collected, add the shop's lifetime sales, Star-Seller status, total listings, rating, and slogan/description onto each product row (one cached fetch per shop).

## `enrichEmails` (type: `boolean`):

Best-effort: discover each shop's own website (from its name + country) and harvest a contact email. Adds contactEmail, contactWebsite and a detailed emailEnrichment object. Billed per email found — never charged for misses.

## `qualifyByPayment` (type: `boolean`):

Requires "Enrich with contact emails". Scans each business's website — reusing the pages already fetched for email discovery, so no extra cost or time — for payment processors and e-commerce platforms (Stripe, Shopify, PayPal, Paddle, Lemon Squeezy, WooCommerce, Square, Chargebee and more). Adds takesPayments, paymentProcessors, stripeLiveKey and paymentConfidence. No extra charge — included with each enriched company.

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

Proxy used for the direct enrichment fetches (e.g. seller email discovery). Etsy shop/product pages are fetched through a built-in managed unblocker, so this setting does not affect them. Paying users are routed through a premium residential pool automatically.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.etsy.com/shop/PetiteFraise",
    "https://www.etsy.com/shop/CaitlynMinimalist",
    "https://www.etsy.com/shop/ModParty"
  ],
  "maxItems": 10,
  "maxConcurrency": 5,
  "shopDetails": true,
  "includeReviews": true,
  "enrichSeller": false,
  "enrichEmails": false,
  "qualifyByPayment": false,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "startUrls": [
        "https://www.etsy.com/shop/PetiteFraise",
        "https://www.etsy.com/shop/CaitlynMinimalist",
        "https://www.etsy.com/shop/ModParty"
    ],
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/etsy-shop-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [
        "https://www.etsy.com/shop/PetiteFraise",
        "https://www.etsy.com/shop/CaitlynMinimalist",
        "https://www.etsy.com/shop/ModParty",
    ],
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/etsy-shop-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.etsy.com/shop/PetiteFraise",
    "https://www.etsy.com/shop/CaitlynMinimalist",
    "https://www.etsy.com/shop/ModParty"
  ],
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call memo23/etsy-shop-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Etsy Shop Details Scraper 🏪 Sales, Star-Seller & Emails",
        "description": "Paste Etsy shop URLs, get one clean row per shop: lifetime sales, rating + reviews, total listings, Star-Seller, slogan and logo — plus optional seller contact emails, payment-stack qualification, and the shop's products. Managed unblocker, zero config. JSON/CSV/Excel out.",
        "version": "0.0",
        "x-build-id": "C5c63PkJe5aNDz1Ia"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~etsy-shop-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-etsy-shop-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~etsy-shop-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-etsy-shop-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~etsy-shop-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-etsy-shop-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Etsy shop URLs",
                        "type": "array",
                        "description": "Etsy shop URLs — <code>https://www.etsy.com/shop/{name}</code>, one per shop. Each shop emits one dedicated shop row (name, lifetime sales, rating + review count, total listings, Star-Seller status, slogan, description, logo). Product / search / category URLs are also accepted and produce product rows.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQuery": {
                        "title": "Search keyword (optional)",
                        "type": "string",
                        "description": "Optional: a keyword to search Etsy for, e.g. \"ceramic mug\" — its matching products are scraped as product rows (useful for discovering shops in a niche before profiling them)."
                    },
                    "maxItems": {
                        "title": "Maximum rows",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on rows collected across all start URLs (shop rows + product rows). Set it to the number of shop URLs you pasted for a pure shop-details run.",
                        "default": 10
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Pages fetched in parallel through the managed unblocker. Keep moderate (3–8); each page is one unblocker request.",
                        "default": 5
                    },
                    "shopDetails": {
                        "title": "Shop details row (one row per shop URL)",
                        "type": "boolean",
                        "description": "Emit one dedicated shop row (rowType: \"shop\") per shop URL — the core of this actor. Leave on.",
                        "default": true
                    },
                    "includeReviews": {
                        "title": "Include sample reviews on product rows",
                        "type": "boolean",
                        "description": "When product rows are collected, include the recent customer reviews carried in each listing's structured data (author, rating, text, date).",
                        "default": true
                    },
                    "enrichSeller": {
                        "title": "Also enrich product rows with shop/seller data",
                        "type": "boolean",
                        "description": "When product rows are collected, add the shop's lifetime sales, Star-Seller status, total listings, rating, and slogan/description onto each product row (one cached fetch per shop).",
                        "default": false
                    },
                    "enrichEmails": {
                        "title": "Enrich with seller contact emails (billed per email)",
                        "type": "boolean",
                        "description": "Best-effort: discover each shop's own website (from its name + country) and harvest a contact email. Adds contactEmail, contactWebsite and a detailed emailEnrichment object. Billed per email found — never charged for misses.",
                        "default": false
                    },
                    "qualifyByPayment": {
                        "title": "💳 Qualify by payment (flag businesses that take money online)",
                        "type": "boolean",
                        "description": "Requires \"Enrich with contact emails\". Scans each business's website — reusing the pages already fetched for email discovery, so no extra cost or time — for payment processors and e-commerce platforms (Stripe, Shopify, PayPal, Paddle, Lemon Squeezy, WooCommerce, Square, Chargebee and more). Adds takesPayments, paymentProcessors, stripeLiveKey and paymentConfidence. No extra charge — included with each enriched company.",
                        "default": false
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy used for the direct enrichment fetches (e.g. seller email discovery). Etsy shop/product pages are fetched through a built-in managed unblocker, so this setting does not affect them. Paying users are routed through a premium residential pool automatically.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
