# Gumroad Scraper (`solidcode/gumroad-scraper`) Actor

\[💰 $4.00 / 1K] Extract Gumroad digital products by search term, category, product URL, or creator store — names, prices, ratings, sales signals, tags, creator info, and optional reviews.

- **URL**: https://apify.com/solidcode/gumroad-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** E-commerce, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Gumroad Scraper

Pull digital products from Gumroad at scale — names, prices, currencies, star ratings, rating counts, real sales counts, pay-what-you-want flags, creator details, thumbnails, and full written reviews with seller replies. Mix free-text searches, Discover categories, single product links, and entire creator stores in one run, with every row tagged by type so products and reviews stay cleanly separated. Built for digital-product creators, niche researchers, and competitor analysts who need product, pricing, and demand signals from Gumroad without combing the Discover feed by hand.

### Why This Scraper?

- **Four ways to pull data in one input** — free-text search, 18 Discover categories, a direct product link, or a full creator store, all mixed in the same run and auto-routed to the right extractor. The competing actor only browses Discover categories.
- **Real sales counts (`salesCount`) — the demand signal most scrapers miss** — every product fetched by link or store is enriched with Gumroad's own lifetime sales number, returned honestly as `null` when Gumroad hides it instead of a fake `0`.
- **18 Discover categories** — from 3D, Design, and Software Development to Business & Money, Fitness & Health, and Self Improvement, each browsable on its own or combined with a search term to focus the feed.
- **Full review text with seller responses** — flip on reviews to collect each review's `rating`, `text`, reviewer name and avatar, plus the seller's public reply (`sellerResponse`) — not just the rating count competitors stop at.
- **Pay-what-you-want detection** — every product carries an `isPayWhatYouWant` flag and an `isFree` flag, so you can separate truly free downloads from name-your-price listings at a glance.
- **Per-product star ratings and counts** — `ratingAverage` and `ratingCount` on every row, with a `minRating` filter (1–4 stars and up) to drop low-quality listings before they hit your dataset.
- **Two sort orders plus price filters** — order by Best selling or Newest, and bound results with `minPrice` / `maxPrice` in USD (the minimum is enforced precisely on our side, not loosely by the site).
- **Per-entry result cap** — `maxResults` bounds every search term, category, and creator store independently, so one giant store can't swallow the whole run, with automatic deduplication on product ID across pages and store sections.
- **Undercuts the category-only competitor** — broader inputs, reviews, and real sales data at **$4.00 per 1,000 products** versus the competitor's $5.00 per 1,000 and its opaque proprietary "interest score".

### Use Cases

**Market & Niche Research**
- Map an entire niche by browsing a Discover category sorted by Best selling
- Size demand across categories using real `salesCount` numbers
- Track newest entrants in a niche by sorting on Newest
- Compare pay-what-you-want vs. fixed-price strategies across a category

**Competitor & Pricing Intelligence**
- Audit a rival creator's full catalogue by pasting their store URL
- Benchmark your prices against the top sellers in your category
- Watch how competitors price bundles, courses, and templates over time
- Find the price sweet spot in a niche using price filters and sales counts

**Lead Generation**
- Build lists of active creators in a category with store URLs and display names
- Identify high-volume sellers worth partnering with by sales count
- Surface creators publishing in adjacent niches for outreach

**Content & Affiliate Curation**
- Assemble best-selling product round-ups for a niche newsletter or blog
- Curate top-rated products (`minRating` 4+) for an affiliate site
- Track newly launched products to feature them before competitors do

**Demand Validation**
- Validate a product idea by measuring sales and ratings of similar listings
- Mine review text to surface buyer objections and feature requests
- Gauge whether a niche tolerates premium pricing before you build

### Getting Started

#### Simple Search

The simplest run — one search term, 50 products:

```json
{
    "searchQueries": ["notion template"],
    "maxResults": 50
}
````

#### Browse a Category with Filters

Browse the Design category, best sellers first, mid-priced and well-rated only:

```json
{
    "categories": ["design"],
    "sort": "top",
    "minPrice": 10,
    "maxPrice": 100,
    "minRating": "4",
    "maxResults": 100
}
```

#### Scrape a Creator Store with Reviews

Paste a creator-store URL to pull their whole catalogue, and collect up to 30 reviews per product:

```json
{
    "searchQueries": ["https://gumroad.gumroad.com"],
    "includeReviews": true,
    "maxReviewsPerProduct": 30,
    "maxResults": 200
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQueries` | string\[] | — | Free-text search terms (e.g. "notion template") or Gumroad links — a product page (`https://creator.gumroad.com/l/my-product`) or a creator store (`https://creator.gumroad.com`). Each entry is processed on its own: terms return matching products, a product URL returns that product, a store URL returns all of that seller's products. |
| `categories` | select\[] | `[]` | One or more Gumroad Discover categories to browse: 3D, Audio, Business & Money, Comics & Graphic Novels, Design, Drawing & Painting, Education, Fiction Books, Films, Fitness & Health, Gaming, Music & Sound Design, Other, Photography, Recorded Music, Self Improvement, Software Development, Writing & Publishing. Use alone to browse a feed, or with a search term to focus it. |

#### Results

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `sort` | select | `Best selling` | Order for search and category results: Best selling or Newest. Ignored when you paste a direct product or store URL. |
| `maxResults` | integer | `100` | Maximum products per search term, category, or creator store. Set to `0` to collect everything — use with care, large stores and broad categories can hold thousands of products. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `minPrice` | number | null | Only include products priced at or above this amount (USD). Leave empty for no minimum. |
| `maxPrice` | number | null | Only include products priced at or below this amount (USD). Leave empty for no maximum. |
| `minRating` | select | `Any rating` | Only include products with at least this average star rating: Any rating, 1 star & up, 2 stars & up, 3 stars & up, or 4 stars & up. |

#### Reviews

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeReviews` | boolean | `false` | Also collect each product's reviews as separate rows. Adds results and increases cost. On category, search, and store runs, reviews are pulled for every product collected. Off by default. |
| `maxReviewsPerProduct` | integer | `50` | When reviews are on, the maximum reviews collected per product. Set to `0` to collect all reviews. |

### Output

Every row carries a `recordType` field — `product` or `review` — so you can filter cleanly downstream. The Overview tab holds every record; the Products and Reviews tabs are clean, type-filtered subsets of the same run. Each `query` field records the search term, category, or URL that produced the row.

#### Product (`recordType: "product"`)

```json
{
    "recordType": "product",
    "id": "abc123XYZ==",
    "name": "Ultimate Notion Productivity Template",
    "description": "A complete second-brain system for Notion with dashboards, habit trackers, and project boards.",
    "productUrl": "https://creator.gumroad.com/l/notion-pro",
    "permalink": "notion-pro",
    "price": 29.0,
    "currency": "USD",
    "isFree": false,
    "isPayWhatYouWant": false,
    "nativeType": "digital",
    "thumbnailUrl": "https://public-files.gumroad.com/example/thumb.png",
    "category": "design",
    "creator": "Jane Creator",
    "creatorUrl": "https://creator.gumroad.com",
    "creatorHandle": "creator",
    "ratingAverage": 4.8,
    "ratingCount": 364,
    "salesCount": 5210,
    "query": "notion template",
    "scrapedAt": "2026-06-19T14:30:00Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"product"` |
| `id` | string | Gumroad product identifier |
| `name` | string | Product title |
| `description` | string | Product summary or description text |
| `productUrl` | string | Canonical product page URL |
| `permalink` | string | Product slug used in the URL |
| `price` | number | Price in the seller's currency (`0` when free) |
| `currency` | string | Seller's currency code (e.g. `USD`, `EUR`) |
| `isFree` | boolean | True when the product is free |
| `isPayWhatYouWant` | boolean | True when the product uses name-your-price pricing |
| `nativeType` | string | Gumroad product type (e.g. `digital`, `course`, `ebook`) |
| `thumbnailUrl` | string | Cover image URL |
| `category` | string | Category the product was found under (null for plain search or direct URLs) |
| `creator` | string | Seller display name |
| `creatorUrl` | string | Seller's store URL |
| `creatorHandle` | string | Seller's store subdomain handle |
| `ratingAverage` | number | Average star rating |
| `ratingCount` | integer | Number of ratings |
| `salesCount` | integer | Lifetime sales count (only exposed on product-link and store rows; `null` when Gumroad hides it) |
| `query` | string | The search term, category, or URL that produced this row |
| `scrapedAt` | string | ISO timestamp of data collection |

#### Review (`recordType: "review"`)

Emitted only when `includeReviews: true`. Capped at `maxReviewsPerProduct` per product.

```json
{
    "recordType": "review",
    "id": "rev_987654",
    "productId": "abc123XYZ==",
    "productUrl": "https://creator.gumroad.com/l/notion-pro",
    "rating": 5,
    "text": "Saved me hours of setup — the dashboards alone are worth it.",
    "authorName": "Sam B.",
    "authorAvatarUrl": "https://public-files.gumroad.com/example/avatar.png",
    "sellerResponse": "Thanks Sam! Glad it helped.",
    "query": "notion template",
    "scrapedAt": "2026-06-19T14:30:05Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"review"` |
| `id` | string | Review identifier |
| `productId` | string | Parent product identifier |
| `productUrl` | string | Parent product URL |
| `rating` | integer | Star rating given in the review (1–5) |
| `text` | string | Review body |
| `authorName` | string | Reviewer display name |
| `authorAvatarUrl` | string | Reviewer avatar image URL |
| `sellerResponse` | string | The seller's public reply to the review, when present |
| `query` | string | The search term, category, or URL that produced the parent product |
| `scrapedAt` | string | ISO timestamp of data collection |

### Tips for Best Results

- **Start small.** Set `maxResults` to 25–50 on your first run to confirm the data matches your needs, then scale up.
- **Rank niches by `salesCount`.** Sort by Best selling, pull a category, then sort your dataset on `salesCount` to find proven demand — sales numbers tell you far more than ratings about what actually sells.
- **Audit a competitor's whole catalogue with a store URL.** Paste `https://creator.gumroad.com` to pull every product that seller offers, with prices, ratings, and sales — the fastest way to map a rival's full lineup.
- **Mix searches, links, and categories freely.** A single run can hold keywords, a product link, and a store link together, each routed automatically; add categories to focus a search term onto a niche feed.
- **Leave reviews off unless you need them.** Reviews add a row per review and raise cost. On category, search, and store runs they are pulled for every product collected, so total cost scales with products × reviews — `maxResults` caps the products, not the reviews. Keep `maxReviewsPerProduct` modest, and remember `salesCount` and `ratingCount` already give you demand signals without reviews.
- **Mine review text for product ideas.** Buyer reviews surface objections, missing features, and use cases competitors overlook — turn them on when validating a new product, then keep them off for routine catalogue pulls.
- **Note where `salesCount` appears.** Sales counts come from product detail, so they populate on direct product links and creator-store rows; broad search and category rows return `salesCount: null` by design — pull a store or product link when exact sales numbers matter.

### Pricing

**From $4.00 per 1,000 products** — broader inputs, real sales data, and full reviews, undercutting the category-only competitor's $5.00 per 1,000. You're charged per **product** collected, plus a small per-**review** charge only when you turn reviews on. **No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.**

Bronze, Silver, and Gold subscribers pay progressively less; loyalty discounts apply automatically on the Apify Console.

**Products** — the headline result:

| Per 1,000 products | No discount | Bronze | Silver | Gold |
|--------------------|-------------|--------|--------|------|
| Price | $4.80 | $4.50 | $4.30 | $4.00 |

**Reviews** — optional, billed separately at a lower rate:

| Per 1,000 reviews | No discount | Bronze | Silver | Gold |
|-------------------|-------------|--------|--------|------|
| Price | $0.60 | $0.56 | $0.53 | $0.50 |

#### Example costs (Gold tier)

| Run | Products | Reviews | Total |
|-----|----------|---------|-------|
| Search, reviews off | 1,000 | 0 | $4.00 |
| Search + ~10 reviews each | 1,000 | 10,000 | $9.00 |
| Store + ~50 reviews each | 100 | 5,000 | $2.90 |
| Large category, reviews off | 10,000 | 0 | $40.00 |

A "result" is any row in the output dataset — a product or a review. Loyalty tiers reduce these prices on the Apify Console. Platform fees (storage) are additional and depend on your Apify plan.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate market research, competitive analysis, and content curation. Users are responsible for complying with applicable laws and Gumroad's Terms of Service. Do not use extracted data for spam, harassment, or any illegal purpose, and handle any personal data — such as reviewer names — in line with applicable privacy regulations. </content> </invoke>

# Actor input Schema

## `searchQueries` (type: `array`):

Add free-text search terms (e.g. "notion template") or paste Gumroad links — a product page (e.g. https://creator.gumroad.com/l/my-product) or a creator store (e.g. https://creator.gumroad.com). Each entry is processed on its own. Search terms return matching products; a product URL returns that product; a creator URL returns all of that seller's products.

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

Browse one or more Gumroad Discover categories. Use on their own to scrape category feeds, or together with a search term to focus the search. Leave empty to skip category browsing.

## `sort` (type: `string`):

Order for search and category results. Ignored when you paste a direct product or store URL.

## `maxResults` (type: `integer`):

Maximum number of products to collect for each search term, category, or creator store. Set to 0 to collect everything (use with care — large stores and broad categories can hold thousands of products).

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

Only include products priced at or above this amount in US dollars. Leave empty for no minimum.

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

Only include products priced at or below this amount in US dollars. Leave empty for no maximum.

## `minRating` (type: `string`):

Only include products with at least this average star rating.

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

When enabled, each product's reviews are collected as separate rows. This adds results and increases cost. For category, search, and store runs, reviews are pulled for every product collected, so total cost can far exceed Max results (e.g. 100 products with up to 50 reviews each can add up to 5,000 review rows on top of the 100 products). Off by default.

## `maxReviewsPerProduct` (type: `integer`):

When reviews are enabled, the maximum number of reviews to collect per product. Set to 0 to collect all reviews.

## Actor input object example

```json
{
  "searchQueries": [
    "notion template",
    "https://gumroad.gumroad.com"
  ],
  "categories": [],
  "sort": "top",
  "maxResults": 100,
  "minRating": "0",
  "includeReviews": false,
  "maxReviewsPerProduct": 50
}
```

# Actor output Schema

## `overview` (type: `string`):

Every record from the run in one place — products and reviews — distinguished by `recordType`.

## `products` (type: `string`):

Products only, with name, price, currency, ratings, sales, category, and creator info.

## `reviews` (type: `string`):

Written reviews only, linking a review to its product. Present only when 'Also collect reviews' is enabled.

# 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 = {
    "searchQueries": [
        "notion template",
        "https://gumroad.gumroad.com"
    ],
    "categories": [],
    "maxResults": 100,
    "maxReviewsPerProduct": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/gumroad-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 = {
    "searchQueries": [
        "notion template",
        "https://gumroad.gumroad.com",
    ],
    "categories": [],
    "maxResults": 100,
    "maxReviewsPerProduct": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/gumroad-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 '{
  "searchQueries": [
    "notion template",
    "https://gumroad.gumroad.com"
  ],
  "categories": [],
  "maxResults": 100,
  "maxReviewsPerProduct": 50
}' |
apify call solidcode/gumroad-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Gumroad Scraper",
        "description": "[💰 $4.00 / 1K] Extract Gumroad digital products by search term, category, product URL, or creator store — names, prices, ratings, sales signals, tags, creator info, and optional reviews.",
        "version": "1.0",
        "x-build-id": "dwAkkLWSxDX7T08Wf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~gumroad-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-gumroad-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/solidcode~gumroad-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-gumroad-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/solidcode~gumroad-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-gumroad-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": {
                    "searchQueries": {
                        "title": "Search terms or Gumroad URLs",
                        "type": "array",
                        "description": "Add free-text search terms (e.g. \"notion template\") or paste Gumroad links — a product page (e.g. https://creator.gumroad.com/l/my-product) or a creator store (e.g. https://creator.gumroad.com). Each entry is processed on its own. Search terms return matching products; a product URL returns that product; a creator URL returns all of that seller's products.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "categories": {
                        "title": "Categories",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Browse one or more Gumroad Discover categories. Use on their own to scrape category feeds, or together with a search term to focus the search. Leave empty to skip category browsing.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "3d",
                                "audio",
                                "business-and-money",
                                "comics-and-graphic-novels",
                                "design",
                                "drawing-and-painting",
                                "education",
                                "fiction-books",
                                "films",
                                "fitness-and-health",
                                "gaming",
                                "music-and-sound-design",
                                "other",
                                "photography",
                                "recorded-music",
                                "self-improvement",
                                "software-development",
                                "writing-and-publishing"
                            ],
                            "enumTitles": [
                                "3D",
                                "Audio",
                                "Business & Money",
                                "Comics & Graphic Novels",
                                "Design",
                                "Drawing & Painting",
                                "Education",
                                "Fiction Books",
                                "Films",
                                "Fitness & Health",
                                "Gaming",
                                "Music & Sound Design",
                                "Other",
                                "Photography",
                                "Recorded Music",
                                "Self Improvement",
                                "Software Development",
                                "Writing & Publishing"
                            ]
                        },
                        "default": []
                    },
                    "sort": {
                        "title": "Sort results by",
                        "enum": [
                            "top",
                            "newest"
                        ],
                        "type": "string",
                        "description": "Order for search and category results. Ignored when you paste a direct product or store URL.",
                        "default": "top"
                    },
                    "maxResults": {
                        "title": "Max results per entry",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of products to collect for each search term, category, or creator store. Set to 0 to collect everything (use with care — large stores and broad categories can hold thousands of products).",
                        "default": 100
                    },
                    "minPrice": {
                        "title": "Minimum price (USD)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Only include products priced at or above this amount in US dollars. Leave empty for no minimum."
                    },
                    "maxPrice": {
                        "title": "Maximum price (USD)",
                        "minimum": 0,
                        "type": "number",
                        "description": "Only include products priced at or below this amount in US dollars. Leave empty for no maximum."
                    },
                    "minRating": {
                        "title": "Minimum average rating",
                        "enum": [
                            "0",
                            "1",
                            "2",
                            "3",
                            "4"
                        ],
                        "type": "string",
                        "description": "Only include products with at least this average star rating.",
                        "default": "0"
                    },
                    "includeReviews": {
                        "title": "Also collect reviews",
                        "type": "boolean",
                        "description": "When enabled, each product's reviews are collected as separate rows. This adds results and increases cost. For category, search, and store runs, reviews are pulled for every product collected, so total cost can far exceed Max results (e.g. 100 products with up to 50 reviews each can add up to 5,000 review rows on top of the 100 products). Off by default.",
                        "default": false
                    },
                    "maxReviewsPerProduct": {
                        "title": "Max reviews per product",
                        "minimum": 0,
                        "type": "integer",
                        "description": "When reviews are enabled, the maximum number of reviews to collect per product. Set to 0 to collect all reviews.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
