Refurbed APIrefurbed.com ↗
Search refurbed.ie's refurbished catalogue and fetch full product details: SKU, condition grade, price, seller options, and variant configuration via 2 endpoints.
What is the Refurbed API?
The Refurbed API exposes 2 endpoints covering the refurbed.ie catalogue of refurbished consumer electronics. Use search_products to retrieve paginated result tiles — including slug, instance_id, price, and product name — then pass those identifiers directly to get_product to get full variant detail: condition grade, brand, colour, images, aggregate rating, configuration options, and sibling variant links.
curl -X GET 'https://api.parse.bot/scraper/08ebecd1-eed7-440a-8751-71051fb738e7/search_products?query=iPhone+15' \ -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 refurbed-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: refurbed SDK — search refurbished products, drill into details."""
from parse_apis.refurbed_com_api import Refurbed, SortBy, ProductNotFound
client = Refurbed()
# Search for iPhones sorted by price, cap at 5 results.
for item in client.product_summaries.search(query="iPhone 15", sort_by=SortBy.PRICE_ASC, limit=5):
print(f"{item.name} — €{item.price} (was €{item.price_new}) [{item.badge}]")
# Drill into the cheapest hit's full detail page.
hit = client.product_summaries.search(query="Samsung Galaxy S24", limit=1).first()
if hit is not None:
try:
product = hit.details()
except ProductNotFound:
print(f"Product {hit.slug} no longer available")
else:
print(f"{product.name} | {product.grade} | {product.memory_size}")
print(f" €{product.price} from {product.merchant_name} ({product.ships_from})")
print(f" Rating: {product.rating}/5 ({product.review_count} reviews)")
print(f" Warranty: {product.warranty_months}mo", end="")
if product.warranty_extensions:
ext = product.warranty_extensions[0]
print(f" (+{ext.months_added}mo for €{ext.price})", end="")
print()
# Show available colour/storage variants at the same grade.
for v in product.variants[:3]:
print(f" Variant: {v.name} — €{v.price} ({v.availability})")
# Show configurable options (appearance, storage, battery, etc.).
for opt in product.options[:2]:
labels = [c.label for c in opt.choices[:3]]
print(f" {opt.name}: {', '.join(labels)}")
print("exercised: product_summaries.search / details / variants / options")
Searches the refurbed.ie catalogue by free text and returns one page of product tiles (16 per page) in the site's ranking. Each tile is one product variant (the site's representative offer for that product) and carries the slug and instance_id that get_product accepts unchanged, plus product_id (the catalogue SKU), current price and the original 'new' price in EUR, rating, availability badge and the variant label. Paging is via the page input (omitted = page 1); total is the site's reported result count and has_more tells whether a further page exists. Note: when nothing matches the query the site itself returns a relaxed set of loosely related products rather than an empty list, so an unmatched query still yields items. sort_by changes the order (site popularity, or price ascending/descending).
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based result page; 16 items per page. A page past the end returns an empty items list with has_more false. |
| queryrequired | string | Free-text search term, e.g. a model name. |
| sort_by | string | Result ordering. |
{
"type": "object",
"fields": {
"page": "integer page returned",
"items": "array of product tiles: name, slug, instance_id (variant id incl. optional grade suffix, e.g. 98177 or 98057b), url, price (EUR number), price_new (original new price, EUR), currency, rating (0-5 or null), badge (e.g. Bestseller / Just a few left, or null), image, product_id (catalogue SKU), brand, category, variant (label: storage | SIM | colour | grade)",
"query": "echo of the search term",
"total": "integer total result count reported by the site for this query",
"sort_by": "ordering applied",
"has_more": "boolean, true when a further page exists"
},
"sample": {
"data": {
"page": 1,
"items": [
{
"url": "https://www.refurbed.ie/p/iphone-15/98177/",
"name": "iPhone 15",
"slug": "iphone-15",
"badge": "Bestseller",
"brand": "Apple",
"image": "https://files.refurbed.com/pi/iphone-15-1786447039.jpg",
"price": 424.99,
"rating": 4.86,
"variant": "128 GB | Dual-SIM (eSIM, Nano-SIM) | blue | Grade A (98177)",
"category": "iPhones",
"currency": "EUR",
"price_new": 849,
"product_id": "14106",
"instance_id": "98177"
},
{
"url": "https://www.refurbed.ie/p/iphone-15-pro-max/98057b/",
"name": "iPhone 15 Pro Max",
"slug": "iphone-15-pro-max",
"badge": null,
"brand": "Apple",
"image": "https://files.refurbed.com/pi/iphone-15-pro-max-1694581198.jpg",
"price": 694.99,
"rating": 4.81,
"variant": "256 GB | Dual-SIM (eSIM, Nano-SIM) | Natural Titanium | Grade B (98057)",
"category": "iPhones",
"currency": "EUR",
"price_new": 1449,
"product_id": "14109",
"instance_id": "98057b"
}
],
"query": "iPhone 15",
"total": 193,
"sort_by": "popular",
"has_more": true
},
"status": "success"
}
}About the Refurbed API
Search the Refurbed Catalogue
The search_products endpoint accepts a query string (e.g. "iPhone 15") and returns up to 16 product tiles per page. Each tile includes name, slug, instance_id, url, and a price in EUR. The instance_id field identifies a specific variant, including an optional grade suffix — for example 98177 for a grade-A variant or 98057b for another condition tier. Use the page parameter (1-based) to walk through results; has_more tells you whether another page exists, and total gives the full result count for the query. An optional sort_by parameter controls result ordering.
Fetch Full Product Variant Detail
The get_product endpoint takes a slug and instance_id — exactly as returned by search_products — and returns the complete detail view for that variant page. The response includes sku (the catalogue product ID), brand, name, color, condition grade (A, AA, B, or C), current price in EUR, an array of images, and an options array. Each option object contains a name (such as storage or colour) and a choices list. Each choice carries a label, a selected boolean, a price_difference (EUR delta relative to the current variant), and its own instance_id — so you can navigate to sibling variants without an additional search.
Data Scope and Coverage
All data is scoped to the refurbed.ie regional storefront and prices are returned in EUR. The grade field maps to refurbed's own condition tiers (A, AA, B, C). The options array reflects variant dimensions the site exposes — typically storage capacity, colour, and grade — and each choice includes the price delta needed to compare configurations without fetching every sibling individually.
The Refurbed API is a managed, monitored endpoint for refurbed.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when refurbed.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 refurbed.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?+
- Track EUR price movements for specific refurbished device variants by polling
get_producton a schedule. - Build a grade-aware price comparison tool using the
gradefield andprice_differencefrom theoptionsarray. - Aggregate availability and pricing across storage configurations by following
instance_idvalues in theoptions.choiceslist. - Index refurbed.ie catalogue pages for a refurbished electronics search engine using
search_productspagination andtotal. - Feed product
images,name,brand, andpriceinto an affiliate product card or price widget. - Monitor
ratingchanges on high-volume product listings to surface quality signals for buyers. - Compare refurbed condition grades (A, AA, B, C) against price to calculate cost-per-grade-tier for a given model.
| 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 refurbed have an official public developer API?+
What does `get_product` return for variant configuration?+
options array contains dimension selectors (e.g. storage, colour, grade). Each selector's choices list includes a label, a selected flag, a price_difference in EUR relative to the currently fetched variant, and an instance_id you can pass back to get_product to load that sibling variant — no new search required.How does `instance_id` differ from `sku`?+
sku (identical to product_id) is the catalogue-level identifier shared across all variants of a product. instance_id is variant-specific and includes an optional grade suffix — for example 98177 vs 98057b — so two instance IDs can share the same sku but represent different condition grades or configurations.Does the API cover seller identity, individual seller ratings, or per-seller pricing breakdowns?+
rating, product-level price, and condition grade, but does not expose individual seller names, per-seller offers, or seller-level ratings. You can fork this API on Parse and revise it to add an endpoint targeting the seller detail surface.