# Gumroad Leads & Market Insights Scraper (Cheapest) (`ahmed_jasarevic/gumroad-deep-scraper`) Actor

High-performance scraper for Gumroad that extracts deep metadata (licensing options, attributes, full covers, and sales counts) by unpacking Inertia.js data states. Supports search discovery and direct URLs

- **URL**: https://apify.com/ahmed\_jasarevic/gumroad-deep-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Categories:** E-commerce, Developer tools, Automation
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, NaN 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.

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

This README is designed to look professional on the Apify Store or GitHub. It highlights the "Inertia.js Unpacker" technology, which is your unique selling point for getting data that other scrapers miss.

---

## Gumroad Deep Metadata Scraper 🚀

A high-performance, professional-grade web scraper designed to extract comprehensive data from **Gumroad**. Unlike basic scrapers that only capture search results, this tool uses **Inertia.js State Unpacking** to retrieve deep metadata, including licensing options, exact sales counts, full resolution covers, and product attributes.

### 🌟 Key Features

* **Deep Extraction:** Unpacks the hidden `#app` data state to get 1:1 data parity with the browser.
* **Licensing & Variants:** Capture all product options (e.g., Basic vs. Commercial licenses) with calculated total prices.
* **Sales & Ratings:** Access `sales_count` (when public) and detailed star-rating breakdowns.
* **SEO Optimized:** Extracts tags, categories, and full HTML descriptions for market research.
* **High Speed:** Built with `got-scraping` and asynchronous "chunk-based" parallelism for maximum throughput without IP bans.
* **Flexible Input:** Supports both keyword-based discovery and direct URL lists.

---

### 📥 Input Parameters

The actor accepts the following configuration via a user-friendly UI or JSON:

| Field | Type | Description | Default |
| :--- | :--- | :--- | :--- |
| **Search Query** | `String` | Keyword to discover products (e.g., "SaaS Template") | `software` |
| **Category** | `Enum` | Filters search by Gumroad's official categories | `all_products` |
| **Direct URLs** | `Array` | List of specific product URLs to scrape directly | `[]` |
| **Deep Scrape** | `Boolean` | If enabled, visits individual pages for full metadata | `true` |
| **Max Pages** | `Integer` | Number of search result pages to process | `3` |

---


To complete your professional documentation, here are two specific JSON input examples formatted for your README. These show how the scraper behaves in "Search Mode" versus "Direct Product Mode."

---

#### 📂 Input Examples

##### 1. Discovery Mode (Category & Keyword Search)
Use this configuration to find new trending products within a specific niche. This will crawl the discovery pages and perform a deep dive into each result found.

```json
{
    "query": "minimalist dashboard",
    "category": "design",
    "scrapeDetails": true,
    "maxPages": 3,
    "productUrls": []
}
````

##### 2. Target Mode (Direct Product URLs)

Use this when you have a specific list of competitors or products you want to monitor. This bypasses the search engine and goes straight to the source for 1:1 data extraction.

```json
{
    "query": "",
    "category": "all_products",
    "scrapeDetails": true,
    "maxPages": 1,
    "productUrls": [
        "https://aipbi.gumroad.com/l/Cash_Million_Dollar_Playbook",
        "https://levelsio.gumroad.com/l/photo-ai"
    ]
}
```

***

#### 📊 Output Examples

##### 1. Discovery Output (Summary)

When `scrapeDetails` is set to `false`, you get a lightweight dataset optimized for speed:

```json
{
    "id": "4CbXhPK-IvPPhMrUoYapHg==",
    "name": "Cash's Million Dollar Playbook",
    "seller": {
        "name": "AIPBI",
        "profile_url": "https://aipbi.gumroad.com"
    },
    "price": 47.00,
    "currency": "usd",
    "url": "https://gumroad.com/l/xeefz"
}
```

##### 2. Deep Product Output (Full Metadata)

When `scrapeDetails` is `true`, the scraper unpacks the Inertia.js state to provide the "Full Boss" dataset:

```json
{
    "id": "4CbXhPK-IvPPhMrUoYapHg==",
    "name": "Cash's Million Dollar Playbook",
    "description_html": "<p><strong>\"Cash's Million Dollar Playbook\"</strong> is a guide...</p>",
    "seller": {
        "name": "AIPBI",
        "twitter": "sales_guru",
        "profile_url": "https://aipbi.gumroad.com"
    },
    "price": 47.00,
    "currency": "usd",
    "sales_count": 1240,
    "ratings": {
        "average": 5,
        "count": 1,
        "percentages": [0, 0, 0, 0, 100]
    },
    "covers": [
        {
            "url": "https://public-files.gumroad.com/y8ozbd8w3k7myd1e2x37ito6ary0",
            "type": "image",
            "width": 670,
            "height": 373
        }
    ],
    "attributes": [
        { "name": "Size", "value": "103 KB" },
        { "name": "Length", "value": "18 pages" }
    ],
    "options": [
        { "name": "Standard License", "total_price": 47.00 },
        { "name": "Resell Rights", "total_price": 297.00 }
    ],
    "tags": ["sales", "playbook", "automotive"],
    "native_type": "digital",
    "url": "https://gumroad.com/l/xeefz"
}
```

# Actor input Schema

## `section_search` (type: `string`):

Select the category tree where products will be collected

## `category` (type: `string`):

Select the niche for data collection. This list covers Tech, Business, 3D, and Creative assets.

## `query` (type: `string`):

Optional: Filter categories by a specific keyword.

## `section_filters` (type: `string`):

Fine-tune your results

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

Choose the sorting algorithm for search results.

## `minPrice` (type: `integer`):

Minimum price filter in USD.

## `maxPrice` (type: `integer`):

Maximum price filter in USD.

## `minRating` (type: `integer`):

Filter products by minimum average rating (0-5).

## `section_limits` (type: `string`):

Performance and depth settings

## `maxPages` (type: `integer`):

How many pages of results to crawl.

## `scrapeDetails` (type: `boolean`):

If enabled, visits each product page to get full sales counts, ratings, and file sizes.

## `section_direct` (type: `string`):

Enter full URLs below to bypass search and filters.

## `productUrls` (type: `array`):

List of full Gumroad product URLs (one per line).

## Actor input object example

```json
{
  "category": "",
  "sort": "trending",
  "minPrice": 0,
  "minRating": 0,
  "maxPages": 1,
  "scrapeDetails": true,
  "productUrls": []
}
```

# Actor output Schema

## `dataset` (type: `string`):

Link to the default dataset containing the scraped Gumroad products.

# 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 = {
    "productUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/gumroad-deep-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 = { "productUrls": [] }

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/gumroad-deep-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 '{
  "productUrls": []
}' |
apify call ahmed_jasarevic/gumroad-deep-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Gumroad Leads & Market Insights Scraper (Cheapest)",
        "description": "High-performance scraper for Gumroad that extracts deep metadata (licensing options, attributes, full covers, and sales counts) by unpacking Inertia.js data states. Supports search discovery and direct URLs",
        "version": "1.0",
        "x-build-id": "KCNmgrU5bZIjmFG3f"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ahmed_jasarevic~gumroad-deep-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ahmed_jasarevic-gumroad-deep-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/ahmed_jasarevic~gumroad-deep-scraper/runs": {
            "post": {
                "operationId": "runs-sync-ahmed_jasarevic-gumroad-deep-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/ahmed_jasarevic~gumroad-deep-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-ahmed_jasarevic-gumroad-deep-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",
                "required": [
                    "maxPages"
                ],
                "properties": {
                    "section_search": {
                        "title": "Category Configuration",
                        "type": "string",
                        "description": "Select the category tree where products will be collected"
                    },
                    "category": {
                        "title": "Category Hierarchy",
                        "enum": [
                            "",
                            "software_development",
                            "web_design",
                            "mobile_apps",
                            "productivity_tools",
                            "dev_plugin_wp",
                            "business_and_money",
                            "finance_and_resources",
                            "marketing_and_sales",
                            "e_commerce",
                            "real_estate",
                            "music_and_sound_design",
                            "sample_packs",
                            "vst_plugins",
                            "sound_effects",
                            "music_sound_plugin_ableton",
                            "film_main",
                            "film_prod_luts",
                            "film_prod_asset_ae",
                            "film_video",
                            "photography",
                            "photo_preset",
                            "photo_stock",
                            "photo_ref",
                            "education",
                            "non_fiction",
                            "fiction_books",
                            "comics_and_graphic_novels",
                            "drawing_and_painting",
                            "artwork_and_commissions",
                            "digital_illustration",
                            "courses",
                            "brushes",
                            "procreate_brushes",
                            "textures_and_patterns",
                            "design",
                            "architecture",
                            "branding",
                            "logos",
                            "social_media",
                            "fonts",
                            "graphics",
                            "mockups",
                            "canva",
                            "figma",
                            "ui_and_web",
                            "wallpapers",
                            "3d",
                            "3d_assets",
                            "3d_modeling",
                            "3d_animation",
                            "3d_avatar",
                            "vr_chat",
                            "3d_vrchat_avatar",
                            "3d_vrchat_worlds",
                            "3d_assets_unity",
                            "3d_assets_unreal",
                            "3d_assets_blender",
                            "3d_assets_cloth",
                            "3d_assets_acc",
                            "3d_assets_avatar",
                            "3d_assets_props",
                            "3d_assets_foot",
                            "3d_rigging",
                            "3d_texture_pbr",
                            "game_main",
                            "game_stream",
                            "self_improvement",
                            "fitness_and_health",
                            "cooking",
                            "recipes",
                            "wellness",
                            "audio_asmr",
                            "audio_hypno",
                            "crafts_and_diy",
                            "3d_printing",
                            "automotive",
                            "lego",
                            "sewing"
                        ],
                        "type": "string",
                        "description": "Select the niche for data collection. This list covers Tech, Business, 3D, and Creative assets.",
                        "default": ""
                    },
                    "query": {
                        "title": "Search Keyword",
                        "type": "string",
                        "description": "Optional: Filter categories by a specific keyword."
                    },
                    "section_filters": {
                        "title": "Filtering & Sorting",
                        "type": "string",
                        "description": "Fine-tune your results"
                    },
                    "sort": {
                        "title": "Sort By",
                        "enum": [
                            "trending",
                            "hot_and_new",
                            "best_sellers"
                        ],
                        "type": "string",
                        "description": "Choose the sorting algorithm for search results.",
                        "default": "trending"
                    },
                    "minPrice": {
                        "title": "Minimum Price (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum price filter in USD.",
                        "default": 0
                    },
                    "maxPrice": {
                        "title": "Maximum Price (USD)",
                        "type": "integer",
                        "description": "Maximum price filter in USD."
                    },
                    "minRating": {
                        "title": "Minimum Rating",
                        "minimum": 0,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Filter products by minimum average rating (0-5).",
                        "default": 0
                    },
                    "section_limits": {
                        "title": "Limits & Deep Scrape",
                        "type": "string",
                        "description": "Performance and depth settings"
                    },
                    "maxPages": {
                        "title": "Maximum Pages",
                        "type": "integer",
                        "description": "How many pages of results to crawl.",
                        "default": 1
                    },
                    "scrapeDetails": {
                        "title": "Enable Deep Metadata Extraction",
                        "type": "boolean",
                        "description": "If enabled, visits each product page to get full sales counts, ratings, and file sizes.",
                        "default": true
                    },
                    "section_direct": {
                        "title": "Scrape Specific Products by URL",
                        "type": "string",
                        "description": "Enter full URLs below to bypass search and filters."
                    },
                    "productUrls": {
                        "title": "Product URLs",
                        "type": "array",
                        "description": "List of full Gumroad product URLs (one per line).",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
