# Wayfair Product Scraper - Prices, Deals & Ratings (`scrapers_lat/wayfair-scraper`) Actor

Scrape Wayfair US products by search, category or URL. Get SKU, name, brand, price, list price, sale savings, availability, rating, material, images and product URL. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/wayfair-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $18.91 / 1,000 product results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![Wayfair Product Scraper - Prices, Deals & Ratings](https://scrapers.lat/banners/wayfair-scraper.png)](https://console.apify.com/actors/Ro7qdJC7D3eY6eyVf/input)

## Wayfair Product Scraper - Prices, Deals & Ratings

Here is one real result, with every field the actor returns:

```json
{
  "sku": "W009142327",
  "name": "Wade Logan Azriah Charles Of London Sofa",
  "brand": "Wade Logan®",
  "price": 419.99,
  "listPrice": 590,
  "priceCurrency": "USD",
  "onSale": true,
  "savings": 170.01,
  "savingsPercent": 29,
  "availability": "In Stock",
  "inStock": true,
  "freeShipping": null,
  "customerRating": 4.46,
  "ratingCount": 1512,
  "category": "sofa",
  "primaryMaterial": null,
  "keyAttributes": null,
  "description": null,
  "dimensions": null,
  "images": null,
  "imageCount": null,
  "aiOneLiner": null,
  "aiProsCons": null,
  "aiBestFor": null,
  "aiValueAssessment": null,
  "imageUrl": "https://assets.wfcdn.com/im/06558996/resize-h600-w600%5Ecompr-r85/4590/459008649/82%22+Upholstered+Convertible+Sleeper+Sofa.jpg",
  "productUrl": "https://www.wayfair.com/furniture/pdp/wade-logan-azriah-charles-of-london-sofa-w009142327.html",
  "searchQuery": "sofa",
  "source": "wayfair.com",
  "observedAt": "2026-08-20T19:41:00.783Z"
}
```

The most complete Wayfair product scraper available. It returns the price, list price, on-sale flag, dollar and percent savings, customer rating, review count, availability and image for every product a search, category or product URL returns, plus opt-in full details (description, all images, key attributes, primary material and dimensions) and an optional AI product summary, and gives you five filters to target exactly the products you need.

**📥 [Input](https://apify.com/scrapers_lat/wayfair-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/wayfair-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/wayfair-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/wayfair-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-United%20States-blue)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)
![Billing](https://img.shields.io/badge/Billing-Pay%20per%20result-brightgreen)

### Table of contents

- [What it does](#what-it-does)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing and limits](#billing-and-limits)
- [FAQ and troubleshooting](#faq-and-troubleshooting)

### What it does

The actor searches Wayfair US by keyword, category or a list of product URLs, paginates through the matching products, and writes one normalized record per product to the run's dataset. For each product it captures the current price, the list (was) price, the on-sale flag with dollar and percent savings, availability and in-stock flag, the average customer rating and review count, the brand, the category and the product image and URL. Prices are numeric USD, missing source values are returned as `null`, and anti-bot handling is done internally so you never configure a proxy.

Two optional add-ons enrich each record when you turn them on: full product details fetches the product page to add the full description, all images, key attributes, primary material and dimensions, and an AI product summary adds a one-line description, pros and cons, an ideal-buyer phrase and a value assessment.

### Quickstart

Open the actor, paste this into the input, and press Run. It returns the 10 best-match sofas priced between $300 and $900.

```json
{
  "searchQuery": "sofa",
  "minPrice": 300,
  "maxPrice": 900,
  "maxResults": 10
}
```

Leave the price fields empty for no price filter. Every input field is optional as long as you provide one of `searchQuery`, `category` or `productUrls`.

### Input reference

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `searchQuery` | string | no | `sofa` | What to search for on Wayfair US, for example `office chair`, `coffee table`, `area rug`. Leave empty if you use a category or product URLs. |
| `category` | string | no | (empty) | A Wayfair category keyword (`accent chairs`, `dining tables`) or a full Wayfair category page URL to scrape directly. |
| `minPrice` | integer | no | (none) | Only keep products priced at or above this amount (USD). |
| `maxPrice` | integer | no | (none) | Only keep products priced at or below this amount (USD). |
| `productUrls` | string\[] | no | `[]` | One or more Wayfair product page URLs to scrape directly instead of, or in addition to, a search. |
| `sortBy` | enum | no | `Best Match` | Result order: `Best Match`, `Price Low to High`, `Price High to Low`, `Top Rated`, `Most Reviews`. |
| `maxResults` | integer | no | `10` | Maximum number of products to collect across the whole run. Free Apify plans are capped at 10 per run. |
| `fullDetails` | boolean | no | `false` | Paid add-on, off by default. Fetch each product page to add the full description, all images, key attributes, primary material and dimensions. Charged only when real extra data is returned. Disabled on free plans. |
| `aiProductSummary` | boolean | no | `false` | Paid add-on, off by default. Use AI to add a one-line summary, pros and cons, ideal buyer and value assessment. Charged only when a usable summary is returned. Disabled on free plans. |

Filters combine with logical AND. Price filters apply to the current price.

### Output reference

One dataset item per product. Types: `string`, `number`, `integer`, `boolean`, `string[]`, or `null` when the source value is absent.

| Field | Type | Description |
|---|---|---|
| `sku` | string | Wayfair SKU id (unique per product), for example `W009142327`. |
| `name` | string | Product name. |
| `brand` | string | Brand or manufacturer, or `null`. |
| `price` | number | Current price in USD. |
| `listPrice` | number | List (was) price in USD, or `null` when not discounted. |
| `priceCurrency` | string | Currency code. Always `USD`. |
| `onSale` | boolean | `true` when the product is currently discounted. |
| `savings` | number | Dollar amount saved versus list price, or `null`. |
| `savingsPercent` | integer | Percent saved versus list price, or `null`. |
| `availability` | string | Availability status: `In Stock` or `Out of Stock`. |
| `inStock` | boolean | Whether the product is in stock. |
| `freeShipping` | boolean | `true` when free shipping is advertised, else `null`. |
| `customerRating` | number | Average customer rating from 1 to 5, or `null`. |
| `ratingCount` | integer | Number of customer ratings, or `null`. |
| `category` | string | Category or search context that produced this product. |
| `primaryMaterial` | string | Primary material (full details add-on), or `null`. |
| `keyAttributes` | string\[] | Key attributes and specifications (full details add-on), or `null`. |
| `description` | string | Full product description (full details add-on), or `null`. |
| `dimensions` | string | Overall dimensions (full details add-on), or `null`. |
| `images` | string\[] | All product image URLs (full details add-on), or `null`. |
| `imageCount` | integer | Number of images captured (full details add-on), or `null`. |
| `aiOneLiner` | string | AI one-line summary (AI add-on), or `null`. |
| `aiProsCons` | string\[] | AI pros and cons (AI add-on), or `null`. |
| `aiBestFor` | string | AI ideal buyer or use case (AI add-on), or `null`. |
| `aiValueAssessment` | string | AI value assessment (AI add-on), or `null`. |
| `imageUrl` | string | Primary product image URL. |
| `productUrl` | string | Wayfair product page URL. |
| `searchQuery` | string | Search query that produced this product. |
| `source` | string | Data source. Always `wayfair.com`. |
| `observedAt` | string | ISO 8601 timestamp of when the record was collected. |
| `error` | string | `null` on success. On a failed run, a single item with a populated `error` field is written instead. |

### Example output record

Real record from a live run (input `{"productUrls": ["https://www.wayfair.com/furniture/pdp/latitude-run-caynemore-85-w-faux-leather-square-arm-sofa-w100694092.html"], "fullDetails": true, "aiProductSummary": true}`). Images are trimmed to two here; a real run returns all of them.

```json
{
  "sku": "W100694092",
  "name": "Latitude Run Caynemore 85 W Faux Leather Square Arm Sofa",
  "brand": "Latitude Run®",
  "price": 570,
  "listPrice": 698.2,
  "priceCurrency": "USD",
  "onSale": true,
  "savings": 128.2,
  "savingsPercent": 18,
  "availability": "In Stock",
  "inStock": true,
  "freeShipping": null,
  "customerRating": 4.65,
  "ratingCount": 171,
  "category": null,
  "primaryMaterial": null,
  "keyAttributes": null,
  "description": "This sofa brings a clean silhouette and cozy seating capacity for three directly into your home. It's crafted with a solid wood frame that supports fiber-wrapped foam cushions, providing a reliable place to unwind. Sinuous springs and web suspension work together underneath to create a stable foundation that holds up to daily use. The faux leather upholstery offers a smooth texture that's easy to clean, making maintenance simple.",
  "dimensions": null,
  "images": [
    "https://assets.wfcdn.com/im/77645905/resize-h800-w800%5Ecompr-r85/3382/338242703/default_name.jpg",
    "https://assets.wfcdn.com/im/52466148/resize-h800-w800%5Ecompr-r85/3675/367574113/default_name.jpg"
  ],
  "imageCount": 23,
  "aiOneLiner": "The Latitude Run Caynemore is an 85-inch faux leather square arm sofa designed for comfort and style.",
  "aiProsCons": [
    "Pro: Stylish and modern design fits well in various decors.",
    "Pro: Easy to clean faux leather upholstery.",
    "Pro: Comfortable seating for three with sturdy construction.",
    "Con: Faux leather may not appeal to everyone.",
    "Con: Limited color options available."
  ],
  "aiBestFor": "Ideal for modern living rooms or family spaces.",
  "aiValueAssessment": "Good value with a significant discount and high rating.",
  "imageUrl": "https://assets.wfcdn.com/im/77645905/resize-h800-w800%5Ecompr-r85/3382/338242703/default_name.jpg",
  "productUrl": "https://www.wayfair.com/furniture/pdp/latitude-run-caynemore-85-w-faux-leather-square-arm-sofa-w100694092.html",
  "searchQuery": null,
  "source": "wayfair.com",
  "observedAt": "2026-08-20T20:01:36.492Z"
}
```

### Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace `<TOKEN>` with your Apify API token.

Run synchronously and get dataset items in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~wayfair-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searchQuery":"sofa","minPrice":300,"maxPrice":900,"maxResults":25,"sortBy":"Top Rated"}'
```

Start a run asynchronously:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~wayfair-scraper/runs?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searchQuery":"office chair","maxResults":100}'
```

Apify CLI:

```bash
apify call scrapers_lat/wayfair-scraper \
  --input '{"productUrls":["https://www.wayfair.com/furniture/pdp/wade-logan-azriah-charles-of-london-sofa-w009142327.html"],"fullDetails":true}'
```

### Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing `format`:

```bash
## JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"

## CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"

## Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
```

`<DATASET_ID>` is returned as `defaultDatasetId` in the run object. Use `offset` and `limit` to page through large result sets. `clean=true` drops empty and internal fields.

### Billing and limits

- **Pay per result.** You are charged per product returned (`result` event). See the [pricing tab](https://apify.com/scrapers_lat/wayfair-scraper/pricing) for the current per-result price.
- **Optional add-on events.** `fullDetails` and `aiProductSummary` are off by default and are charged only when they genuinely return extra data or a usable summary. Turn them off to pay only the base per-result price.
- **No charge on failure.** If a run errors, the actor writes a single item with a populated `error` field and does not charge for it. Empty runs cost nothing.
- **Spend cap respected.** Set `maxTotalChargeUsd` on the run; once reached, the actor stops emitting and charging further billable results.
- **Free Apify plans** are capped at 10 products per run, and the paid add-ons are disabled. Upgrade for higher `maxResults` and add-ons.

### FAQ and troubleshooting

**A run returned fewer products than `maxResults`. Why?**
The search or category had fewer matching products, or your `minPrice` / `maxPrice` filter removed some. Loosen the filters or raise `maxResults`.

**Some products have a `null` price. Why?**
A few marketplace listings do not publish a price in the search grid until options are selected. Turn on `fullDetails` and the actor backfills the price from the product page. Missing values are returned as `null`, never invented.

**How do I get the full description, images and material?**
Turn on `fullDetails`. The actor fetches each product page and adds the description, all images, key attributes, primary material and dimensions, and charges only when real extra data is returned.

**Can I scrape specific products directly?**
Yes. Pass their Wayfair product page URLs in `productUrls`. You can combine this with a search in the same run.

**Do I need to configure a proxy or anti-bot settings?**
No. Anti-bot handling is done internally. There is no proxy input.

**Is this an official Wayfair tool?**
No. This actor is independent and has no affiliation with Wayfair. It reads only data that is publicly visible on Wayfair product and search pages.

### Related scrapers

- [Best Buy Product Scraper](https://apify.com/scrapers_lat/bestbuy-scraper): Best Buy US products, prices, deals, ratings and specs.
- [Target Product Scraper](https://apify.com/scrapers_lat/target-scraper): Target US products, prices, promotions, ratings and store availability.

### More scrapers at scrapers.lat

Built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at [scrapers.lat](https://scrapers.lat).

***

> Independent tool, not affiliated with Wayfair. Accesses only publicly available product data.

# Actor input Schema

## `searchQuery` (type: `string`):

What to search for on Wayfair US, for example a product type (sofa, office chair, coffee table, area rug). Leave empty if you use a category or product URLs.

## `category` (type: `string`):

Optional. A Wayfair category keyword (accent chairs, dining tables) or a full Wayfair category page URL to scrape directly.

## `minPrice` (type: `integer`):

Only keep products priced at or above this amount. Leave empty for no minimum.

## `maxPrice` (type: `integer`):

Only keep products priced at or below this amount. Leave empty for no maximum.

## `productUrls` (type: `array`):

Optional. One or more Wayfair product page URLs to scrape directly instead of, or in addition to, a search.

## `sortBy` (type: `string`):

Order in which Wayfair returns search results.

## `maxResults` (type: `integer`):

Maximum number of products to collect across the whole run. Free Apify plans are capped at 10 per run.

## `fullDetails` (type: `boolean`):

Fetch each product page to add the full description, all images, key attributes, primary material and dimensions. Charged only when real extra data is returned. Disabled on free plans.

## `aiProductSummary` (type: `boolean`):

Use AI to add a one-line summary, pros and cons, ideal buyer and a value assessment for each product. Charged only when a usable summary is returned. Disabled on free plans.

## Actor input object example

```json
{
  "searchQuery": "sofa",
  "productUrls": [],
  "sortBy": "Best Match",
  "maxResults": 10,
  "fullDetails": false,
  "aiProductSummary": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQuery": "sofa",
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/wayfair-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQuery": "sofa",
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/wayfair-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": "sofa",
  "maxResults": 10
}' |
apify call scrapers_lat/wayfair-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/wayfair-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Ro7qdJC7D3eY6eyVf/builds/XInEnu0VgQkPPIbUI/openapi.json
