Zazzle APIzazzle.com ↗
Access Zazzle product listings, pricing, brand info, and category data via 3 endpoints. Search products, get full details, and browse categories.
What is the Zazzle API?
The Zazzle API provides 3 endpoints to search, detail, and browse Zazzle's marketplace of custom and personalized products. The search_products endpoint returns up to 60 products per page with pricing, discount badges, and direct URLs. get_product_details exposes full product data including brand name, breadcrumb navigation, description, and both current and standard (compare-at) prices. get_categories lets you page through category listings and discover subcategories by slug.
curl -X GET 'https://api.parse.bot/scraper/b7659426-ea28-4d98-a2f1-a1e4a4cd22f2/search_products?page=1&sort=popularity&query=coffee+mug' \ -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 zazzle-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.
"""Walkthrough: zazzle SDK — bounded, re-runnable; every call capped."""
from parse_apis.zazzle_com_api import Zazzle, Sort, ProductNotFound
client = Zazzle()
# Search for products with a sort filter, capped at 3 total items.
for product in client.products.search(query="wedding invitation", sort=Sort.POPULARITY, limit=3):
print(product.title, product.price)
# Drill-down: take one item and get its full details.
item = client.products.search(query="coffee mug", limit=1).first()
if item:
try:
detail = client.products.details(product_url=item.url)
print(detail.title, detail.price, detail.brand_name)
except ProductNotFound as e:
print("gone:", e.product_url)
# Browse a category.
cat = client.categories.get(category="home+living")
print(cat.page_title, len(cat.products), "products")
for sub in cat.subcategories[:3]:
print(sub.name, sub.url)
print("exercised: products.search, products.details, categories.get")
Full-text search across Zazzle's marketplace. Returns paginated product listings sorted by the chosen criterion. Each page contains up to 60 products. Results are auto-iterated by the SDK.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). |
| sort | string | Sort order for search results. |
| queryrequired | string | Search terms for products (e.g. 'coffee mug', 'wedding invitation'). |
{
"type": "object",
"fields": {
"page": "current page number",
"sort": "active sort order",
"query": "the search query echoed back",
"products": "array of product summaries with id, title, url, price, original_price, discount_badge",
"total_results": "total matching products across all pages"
},
"sample": {
"data": {
"page": 1,
"sort": "popularity",
"query": "coffee mug",
"products": [
{
"id": "168994347614378967",
"url": "https://www.zazzle.com/modern_fun_trendy_typography_life_happens_saying_two_tone_coffee_mug-168994347614378967",
"price": "$15.13",
"title": "Modern Fun Trendy Typography Life Happens Saying Two-Tone Coffee Mug",
"discount_badge": "Save 15%",
"original_price": "$17.80"
}
],
"total_results": 2921503
},
"status": "success"
}
}About the Zazzle API
Search and Discover Products
The search_products endpoint accepts a required query string (e.g. 'coffee mug', 'wedding invitation') and an optional sort parameter to control result ordering. Each response page contains up to 60 product summaries, each carrying a id, title, url, price, original_price, and a discount_badge field that reflects any active promotion. The total_results field tells you how many matches exist across all pages. The SDK handles auto-iteration across pages using the optional page parameter.
Product Details
get_product_details takes a product_url — typically sourced from search_products results — and returns a full product record. Fields include title, description, price, standard_price (the compare-at figure), currency, image_url, brand_name, brand_url, and a breadcrumbs array of category objects each with a name and url. This is useful for building product comparison tools, monitoring price changes, or surfacing designer/brand attribution.
Category Browsing
get_categories accepts a category slug corresponding to a URL path segment on Zazzle (e.g. 'gifts', 'home+living', 'clothing', 'coffee+mugs'). The response includes a page_title, a paginated products array with the same summary shape as search results, and a subcategories array of related navigation links each with a name and url. This makes it possible to map Zazzle's taxonomy or crawl a specific vertical systematically.
The Zazzle API is a managed, monitored endpoint for zazzle.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when zazzle.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 zazzle.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?+
- Monitor price drops and discount badges on custom product listings using
priceandoriginal_pricefields fromsearch_products. - Build a designer discovery tool by aggregating
brand_nameandbrand_urlfromget_product_detailsacross product categories. - Generate a category sitemap by recursively following
subcategorieslinks returned byget_categories. - Compare custom product offerings across keyword queries by collecting
title,price, andurlfrom paginated search results. - Enrich a gift recommendation engine with product descriptions, images, and breadcrumb data from
get_product_details. - Track which custom product categories surface a specific query term by cross-referencing
search_productsresults withbreadcrumbsdata.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Zazzle have an official developer API?+
What does `get_product_details` return that `search_products` does not?+
search_products returns summary fields: id, title, url, price, original_price, and discount_badge. get_product_details adds description, image_url, brand_name, brand_url, currency, standard_price, and a breadcrumbs array with category path objects. If you need the full product record, you need to call get_product_details with the URL from the search result.Does the API return customer reviews or ratings for products?+
How does pagination work across the search and category endpoints?+
search_products and get_categories accept a 1-based page integer parameter. Each page returns up to 60 products. The search_products response includes a total_results count so you can calculate how many pages exist. The SDK auto-iterates pages when you use it directly.Can I retrieve all product variants or customization options for a product?+
get_product_details returns core product data including pricing and description, but individual customization options and variant configurations are not exposed as structured fields. You can fork this API on Parse and revise it to add variant-level data for products that support multiple configurations.