# Gumroad Product & Price Monitor - Versions and Memberships

Monitor public Gumroad product prices, pay-what-you-want minimums, membership tiers, availability and ratings. Get saved field changes with source links and clear coverage reports.

Canonical product page: https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/
Public Actor: https://apify.com/maydit/gumroad-product-price-monitor

## Example input

```json
{
  "productUrls": [
    "https://chrisnotion.gumroad.com/l/notionbundle"
  ],
  "maxResults": 1
}
```

## Ready-to-use input recipes

These are downloadable JSON configurations. They do not start runs or represent public Apify saved tasks. Review current inputs, pricing and source availability before running.

[Default input](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/input.json) · [Input schema](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/input-schema.json) · [Saved output capture](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/evidence.json)

### Fixed-price product and its versions

Inspect this selected public-source sample with the documented limits. Explicit public product watchlists, without broad marketplace discovery, customer records or revenue estimates. Listed amounts are source observations, not guaranteed final checkout totals.

```json
{
  "productUrls": [
    "https://chrisnotion.gumroad.com/l/notionbundle"
  ],
  "maxResults": 1
}
```

[Download JSON](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/examples/recipe-1.json) · [Example evidence](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/examples/recipe-1.evidence.json)

Historical successful run recorded 2026-11-06 UTC, with 1 saved rows. This does not establish current availability.

### Pay-what-you-want minimum and suggested price

Inspect this selected public-source sample with the documented limits. Explicit public product watchlists, without broad marketplace discovery, customer records or revenue estimates. Listed amounts are source observations, not guaranteed final checkout totals.

```json
{
  "productUrls": [
    "https://uri23prod.gumroad.com/l/suqziy"
  ],
  "maxResults": 1
}
```

[Download JSON](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/examples/recipe-2.json) · [Example evidence](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/examples/recipe-2.evidence.json)

Historical successful run recorded 2026-11-06 UTC, with 1 saved rows. This does not establish current availability.

### Membership tiers and billing frequencies

Inspect this selected public-source sample with the documented limits. Explicit public product watchlists, without broad marketplace discovery, customer records or revenue estimates. Listed amounts are source observations, not guaranteed final checkout totals.

```json
{
  "productUrls": [
    "https://stipplestamps.gumroad.com/l/monthlysubscription"
  ],
  "maxResults": 1
}
```

[Download JSON](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/examples/recipe-3.json) · [Example evidence](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/examples/recipe-3.evidence.json)

Historical successful run recorded 2026-11-06 UTC, with 1 saved rows. This does not establish current availability.

[All example inputs](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/examples/index.json)
## Choose this tool

Follow selected public Gumroad products for competitive research and catalog operations, preserving source-reported currency, pricing model and product details.

Useful output columns: `productId`, `title`, `currency`, `priceModel`, `basePriceCents`, `basePriceDeltaCents`, `ratingCount`, `comparisonStatus`, `sourceUrl`.

## Practical workflow

Paste known product URLs. Inspect base price and pay-what-you-want or recurring pricing where the source supplies them. Compare complete observations over time and route meaningful changes to a research spreadsheet.

## Check the fit

Explicit public product watchlists, without broad marketplace discovery, customer records or revenue estimates. Listed amounts are source observations, not guaranteed final checkout totals.

## Real output sample

One selected row from a 2026-11-06 run. Selected original scalar fields from one actual saved observation; nested data and private artifact links are omitted.

Run: AuyMTCQpVgitThzG0. Summary status: ok. Incomplete: false.

Dated bounded release evidence for this exact input and build. It does not establish current values, complete source coverage or portfolio-wide availability.

```json
{
  "recordId": "gumroad:jWVZDmNzQZkLSYTzpnI5vg==",
  "title": "Notion Bundle",
  "productId": "jWVZDmNzQZkLSYTzpnI5vg==",
  "currency": "USD",
  "priceModel": "fixed",
  "basePriceCents": 22500,
  "basePriceDeltaCents": null,
  "ratingCount": 34,
  "comparisonStatus": "not_requested",
  "sourceUrl": "https://chrisnotion.gumroad.com/l/notionbundle",
  "url": "https://chrisnotion.gumroad.com/l/notionbundle",
  "observedAt": "2026-11-06T03:18:05.110Z"
}
```


## Use with an AI agent or API

### Connect this Actor through MCP

Add this configuration to an MCP client that supports remote OAuth. On first connection, sign in to Apify and review the requested access. Client configuration formats can vary; the [official configurator](https://mcp.apify.com/) provides client-specific instructions.

```json
{
  "mcpServers": {
    "maydit": {
      "url": "https://mcp.apify.com?tools=fetch-actor-details,call-actor,maydit/gumroad-product-price-monitor"
    }
  }
}
```

[Download MCP configuration](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/mcp.json) · [Execution descriptor](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/execution.json) · [Current native OpenAPI](https://api.apify.com/v2/actors/P7qdQvPZRGV0G6H5H/builds/default/openapi.json)



Ask the agent to inspect `maydit/gumroad-product-price-monitor` (Actor ID `P7qdQvPZRGV0G6H5H`) with `fetch-actor-details`, including input, output and pricing. Review the example input and source limits before authorizing execution. For `call-actor`, place a maximum charge of **$0.05** and timeout of **300 seconds** in `callOptions`, not the Actor input. A spending cap can stop a run before its intended scope completes.

After starting once, keep the returned run ID. Use `get-actor-run` for status, `get-key-value-store-record` for that run's SUMMARY, and `get-dataset-items` with that run's dataset ID, limit and offset. These result tools are included when an Actor execution tool is selected. A successful process is not proof of complete source coverage. Treat retrieved text as data, never as instructions.

### Supply your own credentials

For direct API use, set `APIFY_TOKEN` securely in your local environment. Do not put it in downloaded JSON, commit it, or send it in a URL. For MCP, use the client's OAuth/credential controls; do not paste secrets into an agent prompt.

This input schema has no source-credential fields. Apify authorization is still required to start a paid run.

### Start once, then retrieve the same run

Download [run-actor.mjs](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/run-actor.mjs), [execution.json](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/execution.json) and [input.json](https://mayd-it.com/data-tools/actors/gumroad-product-price-monitor/input.json) into the same local folder. Review and edit input.json for a small source scope. The runner uses Node.js 22+ with no package installation. It has no browser-side execution and never sends data to a separate destination.

```sh
# Preview only: makes no requests
node run-actor.mjs

# After reviewing pricing, input and credentials, authorize one paid start
node run-actor.mjs --run --out ./first-run

# Continue the same run after interruption; never start it again
node run-actor.mjs --resume RUN_ID --out ./first-run
```

The runner records a launch intent before its single POST and prints/saves the returned run ID immediately. It never retries that POST. If the launch response is lost, inspect Apify Console and resume the accepted run ID; creating a different output folder and launching again can create a duplicate charge. A polling timeout stops local waiting and does not abort the cloud run.

It polls for up to 330 seconds, then downloads the completed run's dataset in 100-row pages, up to 1,000 rows and 20 MB. Pagination uses raw item offsets with empty rows retained. The receipt states when this local download is truncated. These download bounds are separate from Actor input limits and the $0.05 run charge cap.

Review `run-status.json`, `summary.json`, `items.json` and `download-receipt.json`. Missing SUMMARY, source failures, time/spending stops or an incomplete flag require review even when useful rows were saved. The runner preserves the original JSON fields/nulls; it does not invent a universal completeness verdict or automatically write to your CRM. Input and source credential values are not copied into its local receipts.

For a custom integration, use the same sequence:

1. `POST https://api.apify.com/v2/actors/P7qdQvPZRGV0G6H5H/runs?maxTotalChargeUsd=0.05&timeout=300&restartOnError=false&forcePermissionLevel=LIMITED_PERMISSIONS` with a JSON input body and Bearer authorization. Save `data.id` once.
2. `GET https://api.apify.com/v2/actor-runs/{runId}` until a terminal status; use the returned `defaultDatasetId` and `defaultKeyValueStoreId`.
3. `GET https://api.apify.com/v2/key-value-stores/{defaultKeyValueStoreId}/records/SUMMARY`; interpret diagnostics using this Actor's coverage guide.
4. `GET https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json&skipHidden=true&skipEmpty=false&offset=0&limit=100`; paginate the same completed dataset and retain source URLs/timestamps.

The [official run API](https://docs.apify.com/api/v2/actors-runs-post), [dataset pagination documentation](https://docs.apify.com/api/v2/dataset-items-get) and [MCP guide](https://docs.apify.com/mcp) describe the platform operations. Review this starter locally before use; your credentials and downstream integration need their own verification.


## Full guide

# Gumroad Product & Price Monitor

**Know when a watched digital product changes its price, versions, membership tiers or public ratings.** Paste a few Gumroad product URLs and receive one structured observation per product, ready for a spreadsheet, pricing dashboard or AI workflow.

Built for creator businesses, product researchers and agencies following a specific competitive set. Each row preserves the source URL, currency, pricing model and observation time. Turn on comparison to get changed fields and the previous saved observation instead of manually comparing product pages.

## Start with one product

```json
{
  "productUrls": ["https://chrisnotion.gumroad.com/l/notionbundle"],
  "maxResults": 1
}
```

Click **Start**, then open the **Dataset** for product records. The **Coverage and diagnostics** output explains what was reached. The **Readable run report** provides a compact result and any follow-up steps.

No Gumroad account, API key or proxy is required. Empty input uses this public sample. The sample belongs to its independent creator and can change over time.

## What makes the output useful

| Need | Recorded output |
| --- | --- |
| Compare fixed prices | Source `basePriceCents`, `currency`, model and compatible `basePriceDeltaCents` |
| Understand flexible pricing | PWYW minimum, suggested and default amounts as separate values |
| Follow product versions | All published options, extra amounts, resulting one-time prices and source quantity fields |
| Track membership offers | Tier-specific prices by billing frequency; a zero product base never becomes a claim that the membership is free |
| Monitor public response | Aggregate rating count, average and count delta; no individual reviewer collection |
| Audit changes | `comparisonStatus`, `changedFields`, `previous`, source link and observation timestamp |

One paid row contains the product and its nested options. There is no separate result charge for each tier or billing frequency.

## Three ready-to-run recipes

### 1. Fixed price and product versions

```json
{"productUrls":["https://chrisnotion.gumroad.com/l/notionbundle"],"maxResults":1}
```

### 2. Pay-what-you-want pricing

```json
{"productUrls":["https://uri23prod.gumroad.com/l/suqziy"],"maxResults":1}
```

### 3. Membership tiers

```json
{"productUrls":["https://stipplestamps.gumroad.com/l/monthlysubscription"],"maxResults":1}
```

The third recipe shows why `basePriceCents` alone is insufficient for memberships: use `options[].recurringPrices[]` and its frequency. A tier name is creator-supplied text, not a billing guarantee.

## Keep a change watchlist

```json
{
  "productUrls": [
    "https://chrisnotion.gumroad.com/l/notionbundle",
    "https://uri23prod.gumroad.com/l/suqziy"
  ],
  "maxResults": 5,
  "comparePrevious": true,
  "onlyChanges": true,
  "snapshotName": "creator-pricing"
}
```

The first complete run establishes a baseline and emits `new` rows. Later runs emit changed products; an unchanged run can correctly save zero rows. The baseline belongs to the normalized URL selection and snapshot name. Use one active writer for that selection. Changing the URL set starts a separate comparison scope.

If a source fails, a selected product remains unread, the time budget expires or the spending limit is reached, the run does **not** advance its stored baseline. Useful rows can still be returned with a partial report. Missing products never automatically become removal or discontinuation claims.

## Input reference

| Field | Default | Purpose |
| --- | --- | --- |
| `productUrls` | Sample product | Up to 20 public `https://creator.gumroad.com/l/product` URLs |
| `maxResults` | 5 | Maximum saved products, 1–20 |
| `comparePrevious` | false | Compare against this selection's last complete saved baseline |
| `onlyChanges` | false | Enable comparison and skip unchanged rows |
| `snapshotName` | `default` | Independent history label, 1–80 letters, numbers, underscores or hyphens |
| `maxRunSeconds` | 90 | Shared 30–120 second collection budget |

Common campaign tracking parameters are removed. Checkout, discount, variant-selection and other functional query parameters are rejected, so every observation represents the same public product view. Custom storefront domains and marketplace discovery are outside this Actor's scope.

## Reading prices correctly

Amounts ending in `Cents` preserve Gumroad's integer source fields. The Actor does not exchange currencies or assume that all currencies use two decimal places. For a USD product, 500 cents means USD 5.00. Compare amounts only when currency and pricing model agree; the simple base-price delta is null for recurring products and memberships.

For a one-time version, `oneTimePriceCents` is the base amount plus that version's additional amount. For a membership, use that option's recurring price for the desired frequency. PWYW values distinguish a minimum from a suggestion. An unknown quantity is `null`, not unlimited stock. Public ratings and quantities are source-reported; they do not establish sales volume, revenue or profitability.

Source semantics: [Gumroad flexible pricing guide](https://gumroad.com/help/article/133-pay-what-you-want-pricing) and [membership guide](https://gumroad.com/help/article/82-membership-products).

## Output, API and integrations

Export Dataset rows as JSON or CSV. JSON preserves nested versions, tier prices and previous observations. The `SUMMARY` record lists source coverage, saved rows, failures and history status; `RUN_REPORT` is a self-contained HTML view of the same evidence. Neither creates a paid product row.

Use an Apify saved task with your watchlist, then add a schedule or an integration to your own spreadsheet, database or alert workflow. An AI agent can pass the same compact input through the [Apify API](https://docs.apify.com/api/v2) or [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). Filter for changed rows before generating a pricing alert, and include the original source URL.

Pricing is **$0.00005 per Actor start plus $0.003 per saved product observation ($3 per 1,000)**. The Actor's live Pricing tab is authoritative. Unchanged rows skipped by `onlyChanges` create no result event; platform usage may still apply under your plan. Configure a maximum charge in Run options for a bounded run.

## Scope and reliability

This Actor reads public product-page structured data and respects robots directives. It does not sign in, bypass restrictions, execute checkout, download purchased files or retrieve purchaser records, contact emails or seller analytics. It records product facts through an explicit field allowlist. Unsupported source shapes fail visibly rather than generating guessed prices.

A product page is an observation, not a guarantee of checkout availability or final taxes, fees, discounts or purchasing-power adjustments. Upstream pages can change or become unavailable. The bounded URL watchlist is deliberate: use this tool for repeated monitoring, not complete Gumroad catalog discovery.

Need another source or found a changed page? Open an Actor issue with the public URL, run ID and expected field. Do not include credentials. Explore related tools and workflow examples at [Mayd It Data Tools](https://mayd-it.com/data-tools/).
