Gazelle APIgazelle.com ↗
Access Gazelle product listings, variant details, and ecoATM trade-in price estimates for phones and tablets via 9 structured API endpoints.
What is the Gazelle API?
The Gazelle API exposes 9 endpoints covering used electronics listings and device trade-in valuations. You can retrieve full phone and tablet catalogs via get_all_phones and get_all_tablets, search by keyword with search_products, inspect per-variant pricing and condition data with get_product_detail, and request trade-in payout estimates through the buyback endpoints backed by ecoATM data. Each product object includes variant-level pricing, condition, color, availability, and image arrays.
curl -X GET 'https://api.parse.bot/scraper/5c029db1-9ed8-4ea6-bf07-32750109c2da/get_all_phones?page=1' \ -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 gazelle-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.
"""Gazelle API — browse products, search, and get trade-in estimates."""
from parse_apis.gazelle_api import Gazelle, Query, Handle, ProductNotFound
client = Gazelle()
# Browse best-selling phones — limit caps total items fetched.
for phone in client.phones.best_sellers(limit=3):
print(phone.title, phone.handle, phone.product_type)
# Search for a specific product and drill into the detail.
result = client.products.search(query=Query.IPHONE_14, limit=1).first()
if result:
print(result.title, result.price, result.available)
detail = result.details()
print(detail.title, detail.vendor, len(detail.variants), "variants")
# Typed error handling: catch a missing product.
try:
client.products.get(handle=Handle.IPHONE_14_128GB_UNLOCKED_1)
except ProductNotFound as exc:
print(f"Not found: {exc.handle}")
# Trade-in workflow: list brands -> list series -> estimate.
brand = client.brands.list(limit=3).first()
if brand:
print(brand.name, brand.id)
category = client.categories.list(limit=1).first()
if category:
for series in client.serieses.list(brand_id=brand.id, category_id=category.id, limit=5):
print(series.name, series.id)
estimate = client.priceestimates.estimate(
brand_name="Apple",
model_name="iPhone 14",
series_name="iPhone 14",
carrier_name="Unlocked",
storage_option="128GB",
category_id="8fbcad05-0bbf-4ba7-ba0c-1d4f36bc1022",
)
print(estimate.device_id, estimate.offer_state)
for offer in estimate.offers:
print(offer.channel, offer.amount)
print("exercised: phones.best_sellers / products.search / products.get / brands.list / categories.list / serieses.list / priceestimates.estimate")
Retrieve paginated phone products from the Gazelle store. Each page returns up to 30 products with full variant, pricing, and image data. The collection includes all phones currently listed for sale.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for results. |
{
"type": "object",
"fields": {
"products": "array of phone product objects with id, title, handle, variants, tags, price, and images"
},
"sample": {
"data": {
"products": [
{
"id": 7102608572469,
"tags": [
"5G",
"bestsellers-resort",
"Carrier:Unlocked"
],
"title": "iPhone 14 128GB (Unlocked)",
"handle": "iphone-14-128gb-unlocked-1",
"images": [
{
"src": "https://cdn.shopify.com/s/files/1/0008/9296/0821/files/iPhone_14_-_Black_-_Overlap_Trans-cropped_a3afa9da-f115-4a37-9ebc-6df335ac686f.jpg?v=1757425855"
}
],
"vendor": "iPhone 14",
"variants": [
{
"id": 41937841455157,
"price": "274.99",
"title": "Midnight / Fair",
"option1": "Midnight",
"option2": "Fair",
"available": true
}
],
"product_type": "Cell Phones"
}
]
},
"status": "success"
}
}About the Gazelle API
Product Catalog Endpoints
get_all_phones and get_all_tablets return paginated collections of Gazelle's listed devices. Each product object includes id, title, handle, price, tags, images, and a variants array. The handle field is used as the slug input for get_product_detail. get_best_sellers returns a flat (non-paginated) list of currently featured devices with the same core fields. Gazelle's inventory skews heavily toward Apple hardware; expect broader coverage for iPhone and iPad models than for Android devices.
Product Detail and Search
get_product_detail accepts a handle string and returns the full product record: all variants (each with id, title, price, sku, available, plus option1 for color and option2 for condition), body_html description, vendor, product_type, and an images array. search_products accepts a query string and returns lighter objects — id, title, handle, price, image, url, and available — suited for discovery before fetching full detail. Note that searches for non-Apple brands frequently return empty results.
Buyback and Trade-In Pricing
Four endpoints cover the trade-in flow. get_buyback_brands and get_buyback_categories return UUID-keyed lists of accepted brands and device categories (e.g., Cell Phone, Tablet, MP3 Player). get_buyback_series takes a brand_id and category_id and returns matching device series names and IDs. get_buyback_price_estimate is a POST endpoint that accepts brand_name, model_name, series_name, carrier_name, category_id, and three condition booleans (cracks, lcd_ok, power_up). It returns a payout object containing deviceId, offerId, offerState, recyclable, and an offerV3 array of channel/amount pairs showing payout values by trade-in channel.
The Gazelle API is a managed, monitored endpoint for gazelle.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when gazelle.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 gazelle.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 used iPhone price tracker comparing Gazelle listing prices across conditions and storage tiers using variant data from
get_product_detail. - Estimate trade-in value for a cracked device by passing condition flags to
get_buyback_price_estimateand reading theofferV3channel payouts. - Populate a device resale comparison tool with current best-seller listings from
get_best_sellers. - Aggregate tablet buyback offers by brand and category using
get_buyback_brands,get_buyback_categories, andget_buyback_seriesin sequence. - Index Gazelle's full phone catalog for search or alerting by iterating
get_all_phoneswith thepageparameter. - Check real-time availability of a specific iPhone SKU by querying
get_product_detailand inspecting theavailablefield on each variant.
| 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.
Does Gazelle have an official developer API?+
What condition and variant details does `get_product_detail` expose?+
get_product_detail returns a variants array where each entry includes option1 (color), option2 (condition such as Good, Excellent, or Flawless), price, sku, and an available boolean. This lets you distinguish pricing across both color and condition grades for the same device model.Does the API cover Android devices or only Apple products?+
search_products frequently return empty results, and the phones and tablets collections reflect the same inventory bias. The buyback endpoints via ecoATM do accept some non-Apple brands through get_buyback_brands. You can fork this API on Parse and revise it to filter or annotate results by brand where coverage exists.Does the API return seller reviews or device ratings?+
Are trade-in payout amounts broken down by channel?+
get_buyback_price_estimate returns an offerV3 array inside the payout object, where each entry represents a distinct trade-in channel with its associated offer amount. The response also includes offerState and a recyclable flag indicating whether the device qualifies for recycling rather than resale.