Gumroad APIgumroad.com ↗
Access Gumroad marketplace data via API. Search products by keyword, category, price, and rating. Fetch product details, seller profiles, and category taxonomy.
What is the Gumroad API?
The Gumroad API exposes 4 endpoints covering product search, full product details, seller profiles, and the complete category taxonomy from the Gumroad digital marketplace. With search_products alone you can filter by keyword, category slug, price range, minimum rating, and sort order, getting back up to 36 products per page including ratings, pricing, seller metadata, and aggregated file-type and tag facets.
curl -X GET 'https://api.parse.bot/scraper/1db76dd0-6bba-4f3d-9aa6-3f0665c3d24b/search_products?page=1&sort=best_sellers&query=Python&rating=4&category=drawing-and-painting&price_range=0-100' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace gumroad-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.gumroad_marketplace_api import Gumroad, Sort, Product, Category, SellerProfile
gumroad = Gumroad()
# Browse categories
for category in gumroad.categories.list(limit=5):
print(category.label, category.slug, category.parent_key)
# Search for best-selling Python products
for product in gumroad.products.search(query="Python", sort=Sort.BEST_SELLERS, limit=3):
print(product.name, product.price, product.currency, product.rating_average)
# Get full details for the product
detail = product.details()
print(detail.description, detail.seller.name, detail.seller.is_verified, detail.ratings.average)
# Fetch a seller profile directly
profile = gumroad.sellerprofiles.get(username="twostraws")
print(profile.name, profile.bio, profile.subdomain)
for seller_product in profile.products:
print(seller_product.name, seller_product.price, seller_product.rating_average)
Search and browse the Gumroad marketplace. Supports query keywords, category filtering, sort order, price range, and minimum rating. Returns paginated results with up to 36 products per page. When no query or category is provided, returns a general browse of all products in the given sort order.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). |
| sort | string | Sort order for results. |
| query | string | Search keyword (e.g. 'Python', 'Blender addon'). |
| rating | integer | Minimum rating score (1-5). |
| category | string | Category slug from get_discover_categories (e.g. 'software-development', '3d', 'design'). |
| price_range | string | Price range filter as 'min-max' in dollars (e.g. '0-50', '10-100'). |
{
"type": "object",
"fields": {
"page": "integer current page number",
"tags": "array of tag objects with key and doc_count",
"total": "integer total number of matching products",
"products": "array of product objects with id, name, permalink, url, price, currency, rating_average, rating_count, seller_name, seller_url, thumbnail_url, type, and description_preview",
"file_types": "array of file type objects with key and doc_count"
},
"sample": {
"data": {
"page": 1,
"tags": [
{
"key": "python",
"doc_count": 647
}
],
"total": 2976,
"products": [
{
"id": "2o_ZYZmirlKtnGe54bm4Ng==",
"url": "https://amuletteam.gumroad.com/l/amulet?layout=discover&recommended_by=search",
"name": "Amulet Editor",
"type": "membership",
"price": 10,
"currency": "usd",
"permalink": "qmwjk",
"seller_url": "https://amuletteam.gumroad.com?recommended_by=search",
"seller_name": "Amulet Team",
"rating_count": 51,
"thumbnail_url": "https://public-files.gumroad.com/uwti31zk04hx1tpvkk754xqx9kx3",
"rating_average": 4.4,
"description_preview": "Amulet is a Minecraft world editor..."
}
],
"file_types": [
{
"key": "zip",
"doc_count": 1164
}
]
},
"status": "success"
}
}About the Gumroad API
Product Search and Browsing
The search_products endpoint accepts a query string, a category slug (sourced from get_discover_categories), a price_range filter in 'min-max' dollar format, a rating floor from 1–5, and a sort parameter. Results are paginated at up to 36 products per page and each product object includes id, name, permalink, url, price, currency, rating_average, rating_count, seller_name, and seller_url. The response also surfaces facet arrays — tags and file_types — each with a key and doc_count, which are useful for building filter UIs or analyzing the shape of a category. Omitting query and category returns a general browse across all Gumroad listings.
Product and Seller Detail
get_product_details takes a full Gumroad product page URL and returns the product's name, HTML description, price, currency, type (e.g. 'digital' or 'membership'), recurrence for subscription products, variants, and file_info. The seller field includes id, name, avatar_url, profile_url, and is_verified. The ratings object breaks down the count, average, and per-star percentages. get_seller_profile takes a username and returns the seller's name, bio, avatar_url, subdomain, and a products array with per-product pricing and rating fields.
Category Taxonomy
get_discover_categories requires no inputs and returns the full category hierarchy Gumroad uses on its Discover page. Each category object has a key, label, slug, and parent_key. Top-level categories have parent_key set to null; subcategories reference their parent's key. The slugs returned here are what search_products accepts as the category parameter, so calling this endpoint first is the correct way to enumerate valid filter values.
The Gumroad API is a managed, monitored endpoint for gumroad.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when gumroad.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official gumroad.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a Gumroad product comparison tool using price, rating_average, and rating_count from search_products.
- Aggregate seller portfolios by fetching multiple usernames through get_seller_profile and comparing product counts and ratings.
- Construct a category-browsing directory by combining get_discover_categories with paginated search_products calls per slug.
- Monitor new or top-rated digital products in a niche category by polling search_products with a fixed category and sort order.
- Enrich a digital-product database with full HTML descriptions, variant lists, and file metadata via get_product_details.
- Identify popular file types and tags within a category using the file_types and tags facet arrays in search_products responses.
- Verify seller credentials and profile completeness using the is_verified flag and bio fields from get_seller_profile.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.