Gumroad Product Scraper avatar

Gumroad Product Scraper

Pricing

from $2.67 / 1,000 results

Go to Apify Store
Gumroad Product Scraper

Gumroad Product Scraper

Find public Gumroad products using keywords, top-level categories, and optional tag filters. The dataset includes product names, seller details, ratings, URLs, thumbnails, and description previews. Duplicate products found across searches are removed using their public permalink identifiers.

Pricing

from $2.67 / 1,000 results

Rating

0.0

(0)

Developer

Axiom Works

Axiom Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Gumroad Products Scraper

Returns: one row per Gumroad product with name, creatorName, priceCents, currency, ratingCount, type, and sourceUrl. Input: {"searchQueries":["notion template"],"sort":"most_reviewed","maxItems":20} Best for: digital product research, creator discovery, and rating-based product shortlists.

{"id":"tkfmcx","name":"Notion Student Dashboard","creatorName":"Easlo Academy","priceCents":0,"currency":"usd","ratingCount":4880,"sourceUrl":"https://easloacademy.gumroad.com/l/tkfmcx"}

What does Gumroad Products Scraper do?

Gumroad Products Scraper gathers public product discovery results from Gumroad. Give it one or more keywords, one or more top-level category slugs, tag filters, or a combination. The Actor sends a search request for each combination of supplied keyword, category, tag, and file extension. It moves through the result pages until it reaches maxItems, finds no more matching products, or reaches the total reported by Gumroad. Repeated products appear once in the dataset, identified by their stable public permalink identifier.

Each record has the public product URL and discovery fields. Descriptions are Gumroad search previews and may end with an ellipsis. Prices use each product's currency in integer cents, without conversion. Missing optional values are null.

Use payWhatYouWantOnly to select products whose flexible pricing flag is true, or sellerVerifiedOnly to select sellers with a true verification flag. Both are optional and default to false. They combine with the existing type, rating-count and zero-price filters before deduplication and the shared item limit. A product that is pay what you want does not necessarily have a zero minimum price. freeOnly keeps its existing meaning: the listed price must be zero.

originalPriceCents copies the optional original price from the search response in the product currency. Compare it with priceCents when both are present; the Actor does not infer a discount percentage or invent an original price when Gumroad omits one. No detail-page requests are needed for this field. Selective filters may need several pages to find enough qualifying products. Pages with no qualifying matches do not end pagination; repeated source pages and empty responses still stop it.

Listings and ratings may change. The dataset captures Gumroad search results at run time. File-extension filtering helps you find downloadable formats such as PDF books, ZIP asset packs, and Blender files. Supply fileTypes with one or more extensions; Gumroad applies each extension filter on the search endpoint. Multiple extensions mean any of the supplied formats, with repeated products saved once. The Actor normalizes uppercase extensions and a leading dot. This filter does not add a per-product file inventory to the output: the discovery response does not provide one.

Tags also work as standalone targets. For example, {"tags":["notion"],"maxItems":20} browses that tag without requiring a keyword or category. Combine tags with keywords to narrow discovery, or supply several tags to collect their combined results under one shared limit.

What data can you get?

FieldMeaning
idStable public permalink identifier used for deduplication.
sourceUrlCanonical public product page URL from the search item.
nameProduct name in the search result.
creatorNamePublic seller display name.
creatorUrlPublic seller profile URL when supplied.
priceCentsListed price in the product's currency, in cents.
currencyProduct currency code.
originalPriceCentsOriginal price in product currency when the search response supplies it; otherwise null.
payWhatYouWantWhether the listing has flexible pricing.
ratingAverageAverage public rating when supplied.
ratingCountNumber of public ratings when supplied.
thumbnailUrlPublic product thumbnail URL when supplied.
typeGumroad's native product type, such as digital or bundle.
descriptionSearch result description preview.
recurrenceSubscription recurrence when supplied.
quantityRemainingRemaining quantity when Gumroad supplies it.
sellerIdPublic seller identifier from the search result.
sellerVerifiedWhether Gumroad marks the seller as verified.
sellerAvatarUrlPublic seller avatar URL when supplied.

Search results do not supply reliable per-product tags, sales totals, or categories. Zero and null are distinct: zero is a reported value, while null indicates unavailable data.

How to use

Open the Actor on Apify and enter a keyword in Search queries, or enter a top-level Gumroad taxonomy slug in Categories. Set the sort and item limit, then run. The default example searches for notion template, orders by most reviewed, and returns up to 20 unique products. To browse a category, clear the keyword list and enter a slug such as design. You may supply several keywords and several categories; the Actor searches their combinations and removes duplicate products across them.

For a narrow search, start with one keyword and a small maxItems. If the first results do not match your aim, refine the phrase or add a relevant category or tag. Tags are search filters and are not copied into product records as if Gumroad had supplied per-product tag metadata. Categories should use top-level slugs. Unknown or nested taxonomy slugs may be ignored by Gumroad and can produce broad results; inspect the returned products before assuming the category restricted them.

The Actor requests at most one search page per second. It follows Gumroad's page offsets of 1, 10, 19, and so on when each response contains nine products. It stops early on an empty result page. If all searches have no results, the run finishes with an empty dataset and a status message suggesting broader keywords, a top-level category slug, or fewer filters. If the server blocks or throttles a request, the Actor waits and retries; users who enable Apify Proxy get a fresh proxy session on each retry. A persistent request failure is caught for that search, logged, and included in the final status when no results are available. The run succeeds with zero rows if every valid target remains blocked; other targets continue.

A run can return fewer than maxItems if fewer matching products exist, filters remove them, or entries lack required fields. A value of 7 yields exactly 7 items when enough qualifying products exist. Each pushed item has one result event. Missing optional fields are null.

Input

InputPurposeDefault
searchQueriesKeyword phrases; supply keywords, categories or tags.Example prefill: notion template
categoriesTop-level category slugs; optional when keywords or tags are supplied.Empty list
tagsTag filters; may be supplied alone or combined with keywords and categories.Empty list
sortOne of featured, most_reviewed, highest_rated, newest, hot_and_new, price_asc, price_desc.featured
minPriceOptional lower search price filter in Gumroad search units.Omitted
maxPriceOptional upper search price filter in Gumroad search units.Omitted
minRatingOptional minimum rating filter, from 1 to 4.Omitted
maxItemsMaximum unique records to emit, from 1 to 10000.50
nativeTypesKeep matching Gumroad native product types.Empty list
fileTypesDownload extensions, such as pdf, zip or blend; any supplied extension may match.Empty list
minRatingCountKeep products with at least this many public ratings.Omitted
payWhatYouWantOnlyKeep only listings marked pay what you want; combine with freeOnly to require zero listed price.false
sellerVerifiedOnlyKeep only sellers marked verified by Gumroad.false
freeOnlyKeep products with a listed price of zero in their own currency.false
proxyConfigurationApify Proxy configuration.Disabled

Here is a keyword search input:

{
"searchQueries": ["notion template"],
"sort": "most_reviewed",
"maxItems": 20,
"proxyConfiguration": {"useApifyProxy": false}
}

For a category search, use {"categories":["design"],"sort":"highest_rated","maxItems":30}. You can pass keyword and category lists together to compare a phrase within categories. Empty keyword, category and tag lists are invalid, and the Actor exits with a clear error. Do not use product page URLs as search terms; this Actor searches Gumroad discovery listings.

For a rated course shortlist, add "nativeTypes":["course"] and "minRatingCount":20. Set "freeOnly":true to keep zero-price listings. These three filters are checked against each search result before it is saved; products without the requested type or rating count are excluded. The Actor continues paging until it fills the item limit or exhausts the result set. A zero listed price can also be a pay-what-you-want listing, so inspect payWhatYouWant when that distinction matters.

maxItems is shared across all combinations. Overlapping products appear once. Searches follow input order, so put priority targets first. Product URLs omit layout and recommendation parameters.

A file-filtered discovery input is {"searchQueries":["blender"],"fileTypes":["pdf","blend"],"maxItems":20}. Each extension is searched separately through the same Gumroad discovery endpoint; the Actor deduplicates products across those searches. A PDF result may also include other download formats. An unknown extension can return no products. Start with a small limit to check the result set before collecting a larger catalog.

Output

The following is one real item from a local run using the keyword example above. Current search results can differ as Gumroad changes its index.

{
"id": "tkfmcx",
"sourceUrl": "https://easloacademy.gumroad.com/l/tkfmcx",
"name": "Notion Student Dashboard",
"creatorName": "Easlo Academy",
"creatorUrl": "https://easloacademy.gumroad.com/",
"priceCents": 0,
"currency": "usd",
"payWhatYouWant": true,
"ratingAverage": 5,
"ratingCount": 4880,
"thumbnailUrl": "https://public-files.gumroad.com/jvqdiiolbolhlduclvktr5wj6h7o",
"type": "digital",
"description": "Transform Your Student Life with an Organized Notion Dashboard Introducing a pre-built template c...",
"recurrence": null,
"quantityRemaining": null,
"sellerId": "3345958371424",
"sellerVerified": false,
"sellerAvatarUrl": "https://public-files.gumroad.com/4k7ue4pbjerm3o4y3tnuo9m1oave"
}

This record maps a public Gumroad search item. URLs have tracking parameters removed. The description is a search preview, and missing optional data is null.

How much does it cost?

The Actor is charged per result record. One result event is associated with each dataset item that is actually pushed. A query that returns zero items produces no result events. A record already emitted from another search combination is skipped and is not charged again. The run may make several search requests to find the records, depending on the requested item limit and how much overlap exists between queries. See the Actor's Pricing tab for current pricing and charging details.

Set maxItems to the number of records you need; processing stops when that limit is reached.

Use with AI agents (MCP)

An AI agent can discover and run this Actor through Apify's MCP server. Point your MCP client at the server with this tool path:

https://mcp.apify.com/?tools=axiomworks/gumroad-products-scraper

Configure your MCP client's Apify connection and give the agent a target and item limit. Example prompts: “Find ten Gumroad notion templates and show name, creatorName, sourceUrl and currency.” Or: “Browse design, sort by highest_rated, and compare ratingAverage with ratingCount.”

Ask agents to carry sourceUrl for review, keep currencies beside prices, and report null values as unavailable. Descriptions are previews. Rating counts provide context for averages; the Actor does not judge product quality.

Integrations and API

Apify datasets can be connected to other tools after the run. Download JSON or CSV in the Console, use a dataset API endpoint in a workflow, or call the Actor from an application. The following examples show a keyword run and then read its dataset. Supply your own Apify token through your runtime's usual secret mechanism; do not place credentials in a shared script or published document.

Python with the Apify client:

from apify_client import ApifyClient
import os
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("axiomworks/gumroad-products-scraper").call(run_input={
"searchQueries": ["notion template"],
"maxItems": 20,
})
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
for item in items:
print(item["name"], item["sourceUrl"])

JavaScript with the Apify client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('axiomworks/gumroad-products-scraper').call({
categories: ['design'],
sort: 'highest_rated',
maxItems: 30,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) process.stdout.write(`${item.name}\n`);

A cURL request can start a run and return dataset items in one response:

curl -X POST \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQueries":["notion template"],"maxItems":20}' \
'https://api.apify.com/v2/acts/axiomworks~gumroad-products-scraper/run-sync-get-dataset-items'

For large runs, start asynchronously and fetch the dataset after completion. Join catalogs with id, preserve sourceUrl, and compare prices only alongside currency. A product missing from a later search may reflect ranking or filter changes.

FAQ

Do I need a Gumroad account? No. The Actor reads a public search response and does not authenticate to Gumroad. Your Apify account is used to run the Actor on Apify.

Can I search more than one keyword? Yes. Enter several strings in searchQueries. The Actor searches them in order and deduplicates repeated products by permalink ID. The global item limit still applies to the entire run.

Can I browse without a keyword? Yes. Supply a top-level category slug in categories or a tag in tags, and leave searchQueries empty. A target is required so the Actor does not run an unbounded search by accident.

Why are some values null? Search listings do not always include every optional attribute. The Actor keeps the field and returns null when the source did not provide a usable value. It does not replace missing ratings or quantity with a made-up zero.

Does the description include the full product page text? No. It is the preview returned by Gumroad search. Some previews end with an ellipsis. Visit the public sourceUrl if you need to read the current product page.

Why does a category return broad results? Gumroad may not recognize an unknown or nested taxonomy slug as a filter. Use a verified top-level slug and inspect the output. The Actor forwards the slug you provide; it does not invent a category label for each product.

Why did a run return fewer items than requested? There may be fewer matches, the search may have reached an empty page, or some malformed entries may lack required fields. The limit is the maximum number of valid, unique records to return.

Does the Actor access private information? No. The output contains public product and creator details exposed in search results. It does not scrape sales dashboards, customer records, or purchase history.

Public product information can be accessed through Gumroad's public discovery search. Laws and website rules vary by location and use case, so review the requirements that apply to your project before redistributing or republishing data. Respect creators' rights and avoid presenting their listings in a misleading way. This Actor does not log in, access purchase records, or bypass access controls. It makes modestly paced requests and backs off when the service throttles or blocks a request. This Actor is not affiliated with or endorsed by Gumroad.

Feedback

If you see a missing field, an unexpected null, or a search that appears too broad, share the input used, the run ID, and a few public product URLs. Include whether the issue occurs with a keyword or a category, the sort mode, and the approximate time of the run. Do not include private account data or credentials. This context helps distinguish a changed Gumroad search response from an input filter that the site did not apply.