Wayfair
Search Wayfair by keyword: sku, name, brand, price, list price, rating, review count, stock, link and image, about 600,000 results per credit. Sort by price or rating and filter to sale items. There is no product lookup by sku.
Search Wayfair by keyword: sku, name, brand, price, list price, rating, review count, stock, link and image, about 600,000 results per credit. Sort by price or rating and filter to sale items. There is no product lookup by sku.
At a glance
Property | Value |
|---|---|
|
|
Marketplaces | Live: |
Search |
|
Typical call | 2–8 s for a page of 48 |
Product lookup | Not available. |
Results are always returned
A keyword that matches nothing is not answered with an empty list: Wayfair returns its popular products instead, so you cannot tell "no match" from a match by the count. total_results is always null because the total Wayfair gives changes from one request to the next and is not a match count. Judge relevance from the titles. Only the first 1,920 results of a query can be reached (page × size at most 1,920).
Sponsored results move
Sponsored products are included and flagged sponsored: true. Wayfair places them per request, so a sponsored product can appear on two pages, or move. Everything else keeps its place.
A busy moment can fail a call
Wayfair turns away about one request in four. We retry on other connections inside the call; when every try is turned away you get a 502 TARGET_FAILED, which is not charged: ask again.
Example
- cURL
- Python
- Node.js
curl -G "https://api.scrapelyserp.com/v1/structured/wayfair/search" \
-H "Authorization: Bearer $SCRAPELY_API_KEY" \
--data-urlencode "query=standing desk lamp" \
-d sort=price_low \
-d sale=true \
-d size=24import os
import requests
HEADERS = {"Authorization": f"Bearer {os.environ['SCRAPELY_API_KEY']}"}
r = requests.get(
"https://api.scrapelyserp.com/v1/structured/wayfair/search",
headers=HEADERS,
params={
"query": "standing desk lamp",
"sort": "price_low",
"sale": "true",
"size": "24",
},
timeout=30,
)
r.raise_for_status()
data = r.json()
for r in data["data"]["results"]:
print(r["position"], r["id"], (r["price"] or {}).get("amount"), r["in_stock"], r["title"])const res = await fetch(`https://api.scrapelyserp.com/v1/structured/wayfair/search?${new URLSearchParams({
query: 'standing desk lamp',
sort: 'price_low',
sale: 'true',
size: '24',
})}`, {
headers: { Authorization: `Bearer ${process.env.SCRAPELY_API_KEY}` },
signal: AbortSignal.timeout(30_000),
});
if (!res.ok) throw new Error((await res.json()).error.code);
const data = await res.json();
for (const r of data.data.results) console.log(r.position, r.id, r.price?.amount, r.in_stock, r.title);Wayfair fields
Each result has the common search fields and a wayfair object.
Field | Description |
|---|---|
| The sku ( |
| The price on the card, and the struck-through price ( |
| Wayfair's own average and number of reviews. |
|
|
|
|
| The card's own text: |
|
|
| The manufacturer's name as Wayfair shows it, |
| The product page, and a picture of the product. |
Not given | Descriptions, dimensions, options, shipping costs and delivery dates, and a category parameter (search is by keyword). |
Sort order
price_low and price_high order by price per item, so a listing sold as a set can sit slightly out of order against its shown price. top_rated orders by review rating. sale=true keeps products that are marked down.