> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/gumroad/search>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/gumroad/search.mdx>

---

# Gumroad Search API

Search Gumroad products with sorts, filters and facet counts, and get a typed page back.

`GET /v1/gumroad/search` takes `query`, `sort`, `category`, `tags`, `fileTypes`, `minPrice`, `maxPrice`, `minRating` and `attributeFilters`, plus `page` or a `cursor`. Prices are in whole units of a product's own currency, so `minPrice=5` means $5, not cents; Gumroad compares the buyer-facing price in that currency, so a EUR product is compared in EUR. The filter can compare a tier or suggested price, so a row's listed price can differ. `category` is a path from the categories endpoint such as `3d/3d-modeling`. Attribute filters look like `product_type:script` and require `category`; without one the marketplace ignores them, so the route refuses them with a 400 instead. A `minPrice` above `maxPrice` is refused with a 400.

The response is `{ data, meta }` with `data.lookupStatus` always `found`, plus `data.query`, `data.sort`, `data.category`, `data.total`, `data.truncated`, `data.facets`, `data.products` and `data.page`. Each product row has `id`, `permalink`, `name`, `type`, `url`, `thumbnailUrl`, `coverUrl`, `summary`, `creator`, `ratings`, `price`, `saleLabel`, `stock` and `subscription`. A row's `summary` is Gumroad's cut snippet, not the seller's summary field on the product route. `data.facets` gives top tags and file types with counts, and the category attribute facets.

The route returns 1 to 100 rows per page and stops at 10,000 results, so a deep walk needs narrower filters. An empty query browses the catalog. `hot_and_new` is the one sort that narrows the set to recent products with traction; the others only reorder it.

## Request

- **Endpoint:** `GET /v1/gumroad/search`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by text, tags, file types, price, rating and category
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/gumroad/search/get)
- **Platform page:** [/platforms/gumroad](https://www.socialfetch.dev/platforms/gumroad)

## FAQ

### What can I filter by?

Free text, sort, category path, tags, file types, a minimum and maximum price in whole currency units (5 means $5, not 500), a minimum rating, and category attribute filters such as product_type:script. The price filter can compare a tier or suggested price, so a row's listed price can differ, and the minimum must not exceed the maximum. Attribute filters need a category. Tags, file types and attribute filters are OR-ed and capped at 10 each.

### What sorts are accepted?

featured, newest, highest_rated, most_reviewed, price_asc, price_desc, curated and hot_and_new. hot_and_new narrows the set to recent products with traction; the rest reorder the matches.

### How deep can I page?

Gumroad stops at 10,000 results. Search returns 1 to 100 rows per page, and a request whose first row would pass the cap is refused before it is sent. At the cap, page.truncated is true and page.hasMore is false. Narrow the query or add filters to go deeper.

### What are facets for?

data.facets.tags and data.facets.fileTypes list the most common values with counts, and data.facets.attributes lists category attributes such as product type with their counts. They let you build filters without guessing valid values.

### Does an empty result mean an error?

No. A search with no matches answers found with total 0 and an empty products array. A malformed filter such as an unknown sort, an attribute filter without a category, or a category path of the wrong shape is a 400 before any lookup. A correctly shaped category path that the marketplace does not know yet is passed through and answered with unfiltered results.

### How many credits does a search page cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth. Each paginated page is a separate billed request.
