Gumroad

Search Gumroad products

Search Gumroad products by text, category, tags, price, rating and file type.

GET/v1/gumroad/search
1credit
x-api-keystringheader

API key (`sfk_...`)

Parameters
12
querystringquery

Search text, in any language. Empty or omitted browses every product.

max 200 chars

sortstringquery

How results are ordered. `hot_and_new` narrows the set to recent products with traction; the others only reorder it. Default: Gumroad's default order.

one of: featured, newest, highest_rated, most_reviewed, price_asc, price_desc, curated, hot_and_new

categorystringquery

Category path from the categories endpoint, e.g. `3d/3d-modeling`. An unknown path is not rejected; Gumroad ignores the filter and the results are unfiltered.

max 200 chars · pattern: ^[a-z0-9-]+(?:\/[a-z0-9-]+){0,3}$

tagsarrayquery

Tag names, OR-ed. Up to 10.

fileTypesarrayquery

File types such as `pdf`, OR-ed. Up to 10.

minPriceintegerquery

Minimum price in whole units of the product's own currency, e.g. `5` for $5, not cents. The filter compares a tier or suggested price, so a row's listed price can differ. A EUR product is compared in EUR.

≥ 0 · ≤ 1000000000

maxPriceintegerquery

Maximum price in whole units of the product's own currency, e.g. `10` for $10, not cents. The filter compares a tier or suggested price, so a row's listed price can differ. A EUR product is compared in EUR.

≥ 0 · ≤ 1000000000

minRatingintegerquery

Only products rated at least this many stars, 1 to 5.

≥ 1 · ≤ 5

attributeFiltersarrayquery

Category attribute filters of the form `name:value`, e.g. `product_type:script`. Requires `category`; up to 10.

pageintegerquery

Page number, 1 to 1,000. Default: 1. A search stops at 10,000 results; narrow the query or add filters for deeper pages.

≥ 1 · ≤ 1000

limitintegerquery

Rows per page, 1 to 100. Default: 20.

≥ 1 · ≤ 100

cursorstringquery

Cursor from `page.nextCursor` of the previous response. It only works with the same filters; start again without it.

min 1 chars · max 1024 chars

Response fields
66

Endpoint-specific response payload.

datalookupStatus
string

A search always has an answer.

one of: found

dataquery
stringnullable

The query searched for.

datasort
stringnullable

The sort applied.

datacategory
stringnullable

The category filter applied.

datatotal
integer

How many products match the filters.

≥ 0

datatruncated
boolean

True when Gumroad's 10000-result depth limit stopped the walk. Narrow the query or add filters to go deeper.

Search facets.

Top tags with counts.

datafacetstags[]name
string

Facet name.

datafacetstags[]count
integer

Matching products.

≥ 0

Top file types with counts.

datafacetsfileTypes[]name
string

Facet name.

datafacetsfileTypes[]count
integer

Matching products.

≥ 0

Category attribute facets; empty for categories that have none.

datafacetsattributes[]name
string

Attribute key.

datafacetsattributes[]label
stringnullable

Attribute label.

Values and their counts.

datafacetsattributes[]filters[]key
string

Filter key, e.g. `product_type:script`.

datafacetsattributes[]filters[]label
stringnullable

Filter label.

datafacetsattributes[]filters[]count
integer

Matching products.

≥ 0

The matching products.

dataproducts[]id
stringnullable

Product id; null only on a landing-layout creator, whose products have no id.

dataproducts[]permalink
stringnullable

The product's permalink on this route. A product can carry a short id on one route and the seller's custom permalink on another; either form resolves when you also pass the creator. Null when the route does not send one.

dataproducts[]name
string

Product name.

dataproducts[]type
stringnullable

`digital`, `ebook`, `course`, `membership`, `bundle`, `physical`, `call` or `commission`; unknown values pass through.

dataproducts[]url
stringnullable

Product URL, without tracking parameters.

dataproducts[]thumbnailUrl
stringnullable

Thumbnail URL.

dataproducts[]coverUrl
stringnullable

Cover image URL; null when the row has none.

dataproducts[]summary
stringnullable

Short description as Gumroad's lists show it, cut at about 100 to 164 characters. On the product record `summary` is the seller's own summary field instead.

The creator; null only when Gumroad omits it.

dataproducts[]creatorid
stringnullable

Creator's external id.

dataproducts[]creatorusername
stringnullable

Storefront subdomain label, e.g. `clifhuman`.

dataproducts[]creatorname
stringnullable

Display name.

dataproducts[]creatorurl
stringnullable

Storefront URL.

dataproducts[]creatoravatarUrl
stringnullable

Avatar URL.

dataproducts[]creatorisVerified
booleannullable

Whether Gumroad verified the creator.

Rating summary; null on a landing-layout creator, which has none.

dataproducts[]ratingsaverage
numbernullable

Average rating, 1 to 5; null when there are no ratings.

dataproducts[]ratingscount
integer

Number of ratings.

≥ 0

The product's price in its own currency.

dataproducts[]priceamount
integernullable

Price in the product's own currency, in Gumroad's smallest unit for it: cents for most currencies, whole yen for JPY, and 1/100 for KRW and TWD. 0 means free.

≥ 0

dataproducts[]pricecurrency
stringnullable

ISO 4217 code of the product's own currency, e.g. `usd`.

dataproducts[]priceformatted
stringnullable

Price as Gumroad displays it, e.g. `$0+` or `€150`. A trailing `+` means pay-what-you-want or tiers.

dataproducts[]priceoriginalAmount
integernullable

Price before a sale, in the same unit as `amount`; null when not on sale or on the product record, which does not carry it.

≥ 0

dataproducts[]pricepayWhatYouWant
booleannullable

Whether the buyer may pay another amount.

dataproducts[]pricesuggestedAmount
integernullable

Suggested amount in the same unit as `amount`; null when the product does not set one.

≥ 0

dataproducts[]pricedefaultAmount
integernullable

Default pay-what-you-want amount in the same unit as `amount`; null when the product does not set one.

≥ 0

dataproducts[]saleLabel
stringnullable

Sale label, e.g. `Black Friday`; null when not on sale.

Stock state.

dataproducts[]stockremaining
integernullable

Units left when the creator limits sales.

≥ 0

dataproducts[]stockquantityEnabled
booleannullable

Whether the creator limits the quantity.

dataproducts[]stockisLimited
booleannullable

Whether the creator marked the product as limited.

Subscription fields a search record carries.

dataproducts[]subscriptionrecurrence
stringnullable

Billing period, e.g. `monthly`.

dataproducts[]subscriptiondurationInMonths
integernullable

Membership duration in months.

≥ 0

Pagination state for a search or a creator's products.

datapagefrom
integer

1-based position of the first row in this answer.

≥ 1

datapagesize
integer

Rows requested for this page.

≥ 1

datapagehasMore
boolean

Whether another page is available.

datapagenextCursor
stringnullable

Cursor for the next page; null on the last page.

datapagetruncated
boolean

True when Gumroad's 10,000-result depth limit stopped the list. Narrow the query or add filters to go deeper.

Metadata describing the request and billing outcome.

metarequestId
string

Unique request identifier for tracing this API call.

min 1 chars

metacreditsCharged
integer

Credits charged for this request.

≥ 0

metaversion
string

Public API version that served the response.

one of: v1

Code example

curl "https://api.socialfetch.dev/v1/gumroad/search?query=notion&sort=highest_rated&limit=10" \
  -H "x-api-key: YOUR_API_KEY"

Responses

Gumroad search.