# Etsy Listing Scraper – Real Product Data, Reviews & Carts (`yumitori/etsy-listing-inspector`) Actor

Etsy listing scraper: x-rays one listing into ~70 fields a search scraper never returns — live carts, every review (sub-ratings + photos), per-variation pricing, true competitors, seller trust, AI alt-text. Read live, never estimated — a full teardown of any listing, yours or a rival's.

- **URL**: https://apify.com/yumitori/etsy-listing-inspector.md
- **Developed by:** [Yakugusa Yumitori](https://apify.com/yumitori) (community)
- **Categories:** AI, E-commerce, SEO tools
- **Stats:** 2 total users, 1 monthly users, 80.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 results

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

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

## Etsy Listing Scraper — Real Product Data: Reviews, Carts & Competitors

Point it at **one Etsy listing — yours or a competitor's —** and get back everything the product page holds that a *search* scraper can't — **~70 fields** in one clean record: full copy, **per-variation pricing**, the **exact promo schedule**, **every real review** (sub-ratings + photos), the listing's own **star histogram**, buyer **"would-recommend %"**, **seller trust signals**, Etsy's **AI alt-text in 10 languages**, a **photo-darkness audit**, and the shop's **other listings + true competitors**.

**Every figure is Etsy's own** — real prices, reviews, ratings, and live cart counts pulled straight from the listing, **never estimated, modeled, or guessed** (unlike search-volume tools). **No login, no proxies, no setup** — just paste a listing and run.

> Don't have the listing URL? Pass a **shop name** instead — it returns that shop's listings (id + title) to pick from.

### Quick start

Inspect listings (paste **URLs or IDs**):
```json
{ "listings": ["https://www.etsy.com/listing/1853337433/...", "4418320341"] }
````

Or deep-dive a whole shop — its top listings, ranked by live demand:

```json
{ "shopName": ["MyhandcraftGoods"], "maxShopListings": 10 }
```

**Want more than one shop at once? No problem** — pass a list, and you get each shop's best in a single run:

```json
{ "shopName": ["MyhandcraftGoods", "AnotherShop"], "maxShopListings": 10 }
```

*(The limit applies **per shop**. Turn on `listTitlesOnly` to just get each shop's listing menu to pick from — no deep fetch.)*

### How many listings you get — and how they're picked

- **Paste listings** → you get **exactly those**, one deep record each.
- **Give a shop** → it scans the shop's catalog and deep-dives the **top listings by demand** — **10 by default, up to 25 per shop** (`maxShopListings`). Pass several shops and you get that many from **each**.
- **How "top" is decided** → listings are ranked by **real demand, not catalog order**: **bestsellers first, then live cart counts, then most-recently-sold.** So you always get a shop's highest-impact listings — never a random slice. (A volatile signal like live carts is blended with bestseller status and recent sales, so one quiet day doesn't bury a strong listing.)

So a 2-shop run at the default returns up to **20 deep records** (10 per shop); bump `maxShopListings` to widen each shop's cut.

### What makes it different

Most of the ~70 fields are self-explanatory in the sample below. These are the ones **no search scraper gives you** — with a real snippet of each:

**💲 Per-variation price ladder** — the real buyer price for *each* option, not a vague "from" price

```json
"price_ladder": [
  { "option": "10 cards", "price": 3.02 },
  { "option": "50 cards", "price": 5.33 },
  { "option": "100 cards", "price": 8.77 }
]
```

**👍 Buyer "would-recommend %"** — Etsy's post-purchase survey, *separate from stars* (a 4.9★ listing can hide unhappy buyers); auto-flagged when it dips below ~90%

```json
"would_recommend_pct": 98.9,
"would_recommend_count": 3946,
"would_recommend_flag": "ok"
```

**⭐ Every real review** — full text, per-review sub-ratings, photos, seller replies — plus Etsy's own **review themes**

```json
"reviews": [
  { "rating": 5, "text": "Such a cool necklace!", "item_quality": 5, "shipping": 5, "photo": "https://…", "seller_response": null }
],
"review_themes": [ { "theme": "Appearance", "count": 4082 }, { "theme": "Quality", "count": 2925 } ]
```

**🥊 True competitors** — the visually-similar listings from *other* shops, live carts, sorted by demand (same-shop items filtered out)

```json
"competitors": [
  { "shop_name": "Goldmira", "in_cart_count": 59, "is_bestseller": true, "title": "14K Gold Custom Name Chain…" }
],
"top_competitor": "Goldmira (59 carts)"
```

**📸 Photo-darkness audit** — per-image brightness from the blurhash (Etsy's *PhotoTooDark* signal) — no image download

```json
"photo_audit": {
  "avg_brightness": 0.59, "primary_brightness": 0.163, "dark_image_indexes": [0],
  "flags": ["primary photo is dark (weakest thumbnail in search)"]
}
```

**🔑 Seller trust + AI SEO** — years on Etsy, on-time %, category bestseller rank; Etsy's AI alt-text in 10 languages

```json
"trust_signals": ["8 years on Etsy", "95%+ orders shipped on time"],
"ai_alt_text": "Gold necklace with a geometric pendant that spells out the name…",
"ai_alt_text_language_count": 10
```

Plus the basics: copy, tags, materials, taxonomy, promotions, star histogram, logistics, and the shop's own catalog.

### Real data, not estimates — an EverBee / eRank alternative

Most Etsy research tools — **EverBee, eRank, Marmalead** — run on **estimates and periodic data**:

- **EverBee** gives *estimated* sales and revenue — modeled numbers, not the live figures from the listing itself.
- **eRank** and **Marmalead** are keyword-*research* tools — their numbers aren't pulled live from Etsy at the moment you look, and refresh on a schedule.

This is an **Etsy listing scraper that returns real data, not estimates.** Every figure — live cart counts, every real review with sub-ratings and photos, per-variation pricing, true competitor demand — is read **straight from the live Etsy listing at the moment of the scan.** Nothing is modeled, graded, or guessed.

| | Estimate tools (EverBee, eRank, Marmalead) | This scraper |
|---|---|---|
| **Demand / sales** | Estimated (~80% accuracy) | Real, live cart counts |
| **Reviews** | Star rating + count | Every review + sub-ratings + photos |
| **Freshness** | Monthly (Google data) or cached | Live, at scan time |
| **Source** | Google Keyword Planner / models | Etsy's own listing data |
| **Access** | Monthly subscription, paywalled tiers | Run on demand, no lock-in |

If you've searched for an **EverBee alternative** or an **eRank alternative** with data you can actually trust, this is the real-data option.

### Sample output

One listing → one record (~70 fields). Arrays trimmed to `[…]`; full set shown:

```json
{
  "type": "listing",
  "listing_id": 1097017861,
  "title": "Personalized Name Necklace, Name Logo Necklace, Personalized necklace for mom",
  "listing_url": "https://www.etsy.com/listing/1097017861/personalized-name-necklace-name-logo",
  "shop_name": "RobertoGoldDiamond",
  "shop_url": "https://www.etsy.com/shop/RobertoGoldDiamond",
  "listed_on": "2026-06-11",

  "description": "This necklace brings you a chance to carry your name …",
  "tags": ["gold name necklace", "personalized gift", "…"],
  "tags_joined": "gold name necklace, personalized gift, necklace with name, …",
  "materials": ["Rose gold", "White gold", "Brass", "Yellow gold"],
  "materials_joined": "Rose gold, White gold, Brass, Yellow gold",
  "when_made": "made_to_order",
  "taxonomy_path": "jewelry.necklaces.monogram_and_name_necklaces",
  "taxonomy_leaf": "Monogram & Name Necklaces",
  "category_attribute_menus": { "Occasion": ["Anniversary", "…"], "Holiday": ["Lunar New Year", "…"], "Chain style": ["Ball", "…"], "Recipient": ["Women", "…"], "Material": ["…"], "Style": ["…"], "Sustainable features": ["Upcycled", "…"] },

  "price_min": 120.0,
  "price_max": 120.0,
  "variations": [{ "name": "Primary color", "options": [{ "option": "White", "price": null, "available": true }, "…"] }, "…"],
  "price_ladder": [{ "option": "White", "price": null }, "…"],
  "promotions": [{ "percent_off": 60, "min_items": 0, "starts": "2026-06-11", "ends": "2026-06-12", "is_shop_wide": true }],

  "listing_avg_rating": 4.92,
  "listing_reviews_count": 11420,
  "star_histogram": { "1_star": 36, "2_star": 31, "3_star": 93, "4_star": 416, "5_star": 10844 },
  "star_percents": { "5_star_pct": 94, "4_star_pct": 3, "3_star_pct": 1, "2_star_pct": 1, "1_star_pct": 1 },
  "photo_review_count": 1258,
  "video_review_count": 10,
  "would_recommend_pct": 98.9,
  "would_recommend_count": 3946,
  "would_recommend_flag": "ok",

  "reviews": [{ "rating": 5, "text": "Such a cool necklace! …", "date": "2026-06-11", "buyer": "Sara", "item_quality": 5, "shipping": 5, "service": null, "photo": null, "seller_response": null }, "…"],
  "reviews_fetched": 2,
  "review_themes": [{ "theme": "Appearance", "count": 4082 }, "…"],
  "review_themes_summary": "Appearance 4082 · Quality 2925 · Shipping & Packaging 1493 · Seller service 1…",
  "review_avg_subratings": { "item_quality": 5.0, "shipping": 5.0, "seller_customer_service": 5.0 },

  "seller_response_rate": "Typically responds within a few hours",
  "trust_signals": ["8 years on Etsy", "95%+ orders shipped on time", "…"],
  "star_seller_highlights": ["Smooth shipping: Has a history of shipping on time with tracking.", "…"],
  "shop_highlight": "Buyers are raving! This shop got multiple 5-star reviews in the past 7 days.",
  "follower_count": 19493,

  "demand_nudge": "",
  "last_sale_date": "2026-06-11",
  "signal_pecking_order": ["promotion", "free_shipping"],
  "is_surfaceable": true,

  "ai_alt_text": "May include: Gold necklace with a geometric design pendant that spells out the name …",
  "ai_alt_text_all_languages": { "en-US": "…", "en-GB": "…", "fr": "…", "de": "…", "nl": "…", "es": "…", "it": "…", "pl": "…", "pt": "…", "ja": "…" },
  "ai_alt_text_language_count": 10,
  "available_languages": ["en-US", "…"],
  "image_count": 10,
  "images": ["https://i.etsystatic.com/14647199/r/il/…/il_fullxfull.6602175450.jpg", "…"],
  "image_quality": [{ "hue": 60, "saturation": 3, "blur_hash": "L04.9+xZ04-:s=tQkCt4D,%M~pt6", "w": 2000, "h": 2000 }, "…"],

  "photo_audit": { "image_count": 10, "avg_brightness": 0.59, "primary_brightness": 0.163, "darkest_brightness": 0.163, "dark_image_indexes": [0, "…"], "flags": ["primary photo is dark (weakest thumbnail in search)", "…"] },
  "photo_avg_brightness": 0.59,
  "photo_primary_brightness": 0.163,
  "photo_dark_count": 2,
  "photo_flags": "primary photo is dark (weakest thumbnail in search); 2 dark photo(s) may trip Etsy's PhotoTooDark filter",

  "quantity_available": 2762,
  "processing_time": "1-3 business days",
  "ships_from": "Stafford, TX, United States",
  "ships_to": ["United States", "…"],
  "free_shipping_threshold": "",
  "returns_accepted": true,
  "return_window_days": 30,
  "return_terms": "Buyers are responsible for return shipping costs. …",

  "same_shop_catalog": [{ "listing_id": 1070218458, "title": "Unique Womens Style Gift Name Logo Necklace …", "url": "https://www.etsy.com/listing/1070218458/…", "in_cart_count": 5, "is_bestseller": false, "last_sale_date": "2026-06-10" }, "…"],

  "competitors": [{ "listing_id": 1620394821, "title": "14K Gold Custom Name Chain, Gold Name Necklace …", "shop_name": "Goldmira", "in_cart_count": 59, "is_bestseller": true, "url": "https://www.etsy.com/listing/1620394821/…" }, "…"],
  "competitor_count": 27,
  "competitor_avg_carts": 6.1,
  "top_competitor": "Goldmira (59 carts)"
}
```

***

### Exporting — JSON, not CSV ⚠️

The record is deep (nested arrays: every review, all competitors, the price ladder, per-image data), so **export JSON / JSONL for everything.**

Need a spreadsheet? Pick the **"Spreadsheet (CSV-safe)"** view in the Export dialog — flat scalar columns that fold the nested intel into clean summary cells (`review_themes_summary`, `top_competitor`, `photo_flags`, `tags_joined`). Exporting CSV on *"All fields"* explodes the arrays into hundreds of columns — that's tabular formats, not a bug.

***

### Best for

**🛍️ Audit your own shop** — point it at your shop name and it deep-dives your top listings: catch your **dark-photo flags**, a **would-recommend %** that's slipped, weak titles, and which of your own listings Etsy actually favors. The diagnostics speak straight to the owner — it's a self-audit in one run.

**🥊 Research competitors & the market** — tear down a rival listing or shop: their **per-variation pricing**, **live competitor carts**, **review themes**, and exactly what's working for them.

One listing (or shop) in, the whole page out — for **sellers** sharpening their own listings *and* researchers sizing up the field.

***

> ⚠️ **Unofficial.** Not affiliated with, endorsed by, or sponsored by Etsy, Inc. "Etsy" is a trademark of Etsy, Inc., used here for descriptive purposes only.

# Actor input Schema

## `listings` (type: `array`):

Etsy listing URLs or numeric listing IDs to deep-dive. e.g. "https://www.etsy.com/listing/1853337433/..." or "1853337433".

## `shopName` (type: `array`):

One or more shop names, @handles, or shop URLs. Each shop's top listings (ranked by live demand) are deep-dived — full intel per listing. Add several to compare shops in one run; the limit below applies PER shop. To instead just list a shop's titles so you can pick, turn on "List titles only".

## `maxShopListings` (type: `integer`):

When a shop name is given, how many of its listings to deep-dive (default 10, max 25). Each listing is a deep multi-call fetch, so keep it modest — runs stay fast (10 ≈ ~20s; 25 ≈ ~50s). Each listing is a billed event.

## `listTitlesOnly` (type: `boolean`):

For a shop name: emit only the lightweight list of its listings (id + title) so you can pick which to inspect — no per-listing detail. View it on the "Shop listing menu" tab. Leave off to get full per-listing intel.

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

Pull the listing's full review set (up to the limit below) with Etsy's own review themes, star %, and averaged sub-ratings. Off = just the ~4 featured reviews from the listing page (one fewer request).

## `reviewLimit` (type: `integer`):

Upper bound on reviews fetched when "Deep reviews" is on.

## `includeCompetitors` (type: `boolean`):

Add the listings Etsy treats as visually similar (other shops you compete with), sorted by live cart demand. Off = one fewer request per listing.

## Actor input object example

```json
{
  "listings": [
    "https://www.etsy.com/listing/1853337433/50pcs-aesthetic-cottagecore-stickers"
  ],
  "shopName": [
    "MyhandcraftGoods"
  ],
  "maxShopListings": 10,
  "listTitlesOnly": false,
  "includeReviews": true,
  "reviewLimit": 50,
  "includeCompetitors": 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 = {
    "listings": [
        "https://www.etsy.com/listing/1853337433/50pcs-aesthetic-cottagecore-stickers"
    ],
    "shopName": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("yumitori/etsy-listing-inspector").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 = {
    "listings": ["https://www.etsy.com/listing/1853337433/50pcs-aesthetic-cottagecore-stickers"],
    "shopName": [],
}

# Run the Actor and wait for it to finish
run = client.actor("yumitori/etsy-listing-inspector").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 '{
  "listings": [
    "https://www.etsy.com/listing/1853337433/50pcs-aesthetic-cottagecore-stickers"
  ],
  "shopName": []
}' |
apify call yumitori/etsy-listing-inspector --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Etsy Listing Scraper – Real Product Data, Reviews & Carts",
        "description": "Etsy listing scraper: x-rays one listing into ~70 fields a search scraper never returns — live carts, every review (sub-ratings + photos), per-variation pricing, true competitors, seller trust, AI alt-text. Read live, never estimated — a full teardown of any listing, yours or a rival's.",
        "version": "0.1",
        "x-build-id": "39D5E0s8HMBEeFyVx"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/yumitori~etsy-listing-inspector/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-yumitori-etsy-listing-inspector",
                "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/yumitori~etsy-listing-inspector/runs": {
            "post": {
                "operationId": "runs-sync-yumitori-etsy-listing-inspector",
                "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/yumitori~etsy-listing-inspector/run-sync": {
            "post": {
                "operationId": "run-sync-yumitori-etsy-listing-inspector",
                "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": {
                    "listings": {
                        "title": "Listing URLs or IDs",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Etsy listing URLs or numeric listing IDs to deep-dive. e.g. \"https://www.etsy.com/listing/1853337433/...\" or \"1853337433\".",
                        "items": {
                            "type": "string"
                        }
                    },
                    "shopName": {
                        "title": "Shop name(s) — deep-dive whole shops",
                        "type": "array",
                        "description": "One or more shop names, @handles, or shop URLs. Each shop's top listings (ranked by live demand) are deep-dived — full intel per listing. Add several to compare shops in one run; the limit below applies PER shop. To instead just list a shop's titles so you can pick, turn on \"List titles only\".",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxShopListings": {
                        "title": "Max shop listings to deep-dive",
                        "minimum": 3,
                        "maximum": 25,
                        "type": "integer",
                        "description": "When a shop name is given, how many of its listings to deep-dive (default 10, max 25). Each listing is a deep multi-call fetch, so keep it modest — runs stay fast (10 ≈ ~20s; 25 ≈ ~50s). Each listing is a billed event.",
                        "default": 10
                    },
                    "listTitlesOnly": {
                        "title": "List titles only (don't deep-dive)",
                        "type": "boolean",
                        "description": "For a shop name: emit only the lightweight list of its listings (id + title) so you can pick which to inspect — no per-listing detail. View it on the \"Shop listing menu\" tab. Leave off to get full per-listing intel.",
                        "default": false
                    },
                    "includeReviews": {
                        "title": "Deep reviews + themes",
                        "type": "boolean",
                        "description": "Pull the listing's full review set (up to the limit below) with Etsy's own review themes, star %, and averaged sub-ratings. Off = just the ~4 featured reviews from the listing page (one fewer request).",
                        "default": true
                    },
                    "reviewLimit": {
                        "title": "Max reviews per listing",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Upper bound on reviews fetched when \"Deep reviews\" is on.",
                        "default": 50
                    },
                    "includeCompetitors": {
                        "title": "Competitor discovery",
                        "type": "boolean",
                        "description": "Add the listings Etsy treats as visually similar (other shops you compete with), sorted by live cart demand. Off = one fewer request per listing.",
                        "default": 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
