# Wayfair Furniture & Home Goods Scraper (`parseforge/wayfair-scraper`) Actor

Scrape Wayfair furniture and home goods listings: prices, ratings, reviews, brand, stock status, and images. For resellers, retailers, and procurement teams. Search by keyword or category URL.

- **URL**: https://apify.com/parseforge/wayfair-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)

## 🛋️ Wayfair Product Pricing Scraper

> 🚀 **Pull live Wayfair furniture and home goods listings in seconds.** Search by keyword or paste any category, search, or brand URL. Get prices, list prices, discounts, ratings, reviews, brand, stock status, fast-ship flags, and product images. No API key, no registration, no manual CSV wrangling.

> 🕒 **Last updated:** 2026-05-17 · **📊 18 fields** per record · **Wayfair US catalog** · **Search and category URLs** · **Residential proxy ready**

Wayfair publishes one of the largest public catalogs of furniture, home decor, kitchen goods, and home improvement products on the internet, with millions of SKUs spanning sectionals, dining sets, bedding, lighting, rugs, outdoor pieces, and storage. The site uses heavy anti-bot protection that breaks naive scripts, so most teams either give up or rebuild their own browser-based crawler every six months. This Actor handles that piece for you. Point it at search keywords or paste category URLs, and it returns clean, structured product records that drop straight into a spreadsheet, BI tool, or pricing pipeline.

The output is built for downstream work rather than dashboard show-and-tell. Each record carries the SKU, the brand, the current sale price, the previous list price, the calculated discount percent, the average rating, the total review count, the in-stock flag, and a fast-ship flag when Wayfair surfaces one. Image URLs link directly to the Wayfair CDN, and product URLs preserve query strings so you can rebuild click-throughs or affiliate links. Results stay consistent across runs because the parser leans on Wayfair's own tracking metadata first and falls back to the product card DOM only when the metadata is missing.

| 👥 Target audience | 🎯 Primary use cases |
|---|---|
| Interior designers and furniture resellers | Live price monitoring across sectionals, dining sets, and bedroom collections |
| E-commerce and pricing analysts | Competitive pricing intelligence against Amazon, IKEA, Target, and Walmart |
| Home staging and short-term-rental operators | Bulk inventory sourcing for staging contracts and turnkey rental setups |
| Affiliate publishers and content sites | Refreshing deal pages, gift guides, and round-up articles with current prices |
| Data teams and ML researchers | Training catalog enrichment, pricing models, and computer-vision pipelines on real product images |

---

### 📋 What the Wayfair Scraper does

- 🔍 **Search by keyword.** Pass a list of keywords like `sectional sofa`, `office desk`, or `outdoor dining set`. Each keyword runs as its own Wayfair search.
- 🔗 **Crawl any Wayfair URL.** Paste category browse pages, search result pages, or brand pages. Pagination is followed automatically up to your item cap.
- 💰 **Filter by price range.** Set a minimum price, a maximum price, or both, and the Actor pushes those filters into the Wayfair query.
- 🔢 **Sort the results.** Choose between Wayfair's relevance, price low to high, price high to low, top rated, or newest.
- 🛡️ **Pass through anti-bot challenges.** Each session warms up on the Wayfair homepage, rotates through residential proxies, and clears PerimeterX press-and-hold prompts before hitting the target URL.
- ⚡ **Stop at the right number.** The `maxItems` cap is enforced across all queries and URLs, so a 50-item budget is split intelligently rather than blown on page one.

Each product record returned includes the image URL, product title, full product URL with tracking params, Wayfair SKU (`W#########`), brand name, current price, previous list price (when on sale), the calculated discount percent, currency, average rating, review count, in-stock flag, on-sale flag, fast-ship flag, the source search query, the source URL, and the scrape timestamp.

> 💡 **Why it matters:** Wayfair sits on top of furniture and home goods data that's hard to get from Amazon or general marketplace scrapers. Stock, sale prices, and brand names move every few hours, so a refresh that takes one click beats a quarterly manual export every time.

---

### 🎬 Full Demo

🚧 Coming soon: a 3-minute walkthrough showing how to pick a Wayfair category, configure the input, run the Actor, and pull the resulting dataset into a spreadsheet or BI tool.

---

### ⚙️ Input

<table>
<tr><th>Field</th><th>Type</th><th>Required</th><th>Description</th></tr>
<tr><td><code>searchQueries</code></td><td>string[]</td><td>One of search or URL</td><td>Keywords to search on Wayfair. Each entry becomes its own search run.</td></tr>
<tr><td><code>startUrls</code></td><td>string[]</td><td>One of search or URL</td><td>Direct Wayfair URLs: category browse pages, search result pages, or brand pages. Pagination is followed automatically.</td></tr>
<tr><td><code>maxItems</code></td><td>integer</td><td>No</td><td>Total items returned across all queries and URLs. Free plan caps at 10. Paid plans go up to 1,000,000.</td></tr>
<tr><td><code>sortBy</code></td><td>enum</td><td>No</td><td><code>relevance</code> (default), <code>price_lowest</code>, <code>price_highest</code>, <code>top_rated</code>, <code>newest</code>.</td></tr>
<tr><td><code>minPrice</code></td><td>integer (USD)</td><td>No</td><td>Lower price bound. Pushed into the Wayfair query as <code>min_price</code>.</td></tr>
<tr><td><code>maxPrice</code></td><td>integer (USD)</td><td>No</td><td>Upper price bound. Pushed into the Wayfair query as <code>max_price</code>.</td></tr>
<tr><td><code>proxyConfiguration</code></td><td>object</td><td>No</td><td>Proxy settings. Residential proxies are strongly recommended and used by default.</td></tr>
</table>

Example: scrape sectional sofas under $1,500, top rated first.

```json
{
  "searchQueries": ["sectional sofa"],
  "maxItems": 50,
  "sortBy": "top_rated",
  "maxPrice": 1500,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
````

Example: crawl a category URL and pull the first 100 items at lowest price first.

```json
{
  "startUrls": [
    "https://www.wayfair.com/furniture/cat/dining-chairs-c46090.html"
  ],
  "maxItems": 100,
  "sortBy": "price_lowest",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

> ⚠️ **Good to Know:** Wayfair aggressively blocks datacenter IPs and bare HTTP requests, so the default proxy choice is residential. You can swap in your own proxy provider through the proxy configuration if you prefer.

***

### 📊 Output

Each product is one JSON record. Pull the dataset as JSON, CSV, Excel, or HTML, or fetch it through the Apify API.

#### 🧾 Schema

| Field | Type | Example |
|---|---|---|
| 🖼️ `imageUrl` | string | `https://assets.wfcdn.com/im/.../sectional.jpg` |
| 📝 `title` | string | `Heffernan Oversized Composable Modular Sofa` |
| 🔗 `url` | string | `https://www.wayfair.com/furniture/pdp/.../w110562044.html` |
| 🆔 `sku` | string | `W110562044` |
| 🏷️ `brand` | string | null | `Hokku Designs` |
| 💵 `price` | number | `1780` |
| 💲 `originalPrice` | number | null | `3257` |
| 🔻 `discountPercent` | integer | null | `45` |
| 💱 `currency` | string | `USD` |
| ⭐ `rating` | number | null | `4.28` |
| 🗳️ `reviewCount` | integer | null | `338` |
| 📦 `inStock` | boolean | null | `true` |
| 🔖 `isOnSale` | boolean | `true` |
| ⚡ `fastShip` | boolean | null | `true` |
| 🔎 `searchQuery` | string | null | `sectional sofa` |
| 📡 `sourceUrl` | string | `https://www.wayfair.com/keyword.php?keyword=sectional+sofa` |
| 🕒 `scrapedAt` | string (ISO) | `2026-05-17T00:08:14.740Z` |
| ❗ `error` | string | null | `null` |

#### 📦 Sample records

<details>
<summary>Typical record - mid-range sectional with brand, sale price, ratings, and fast ship</summary>

```json
{
  "imageUrl": "https://assets.wfcdn.com/im/15545644/resize-h400-w400%5Ecompr-r85/3070/307007374/3+-+Piece+Upholstered+Beige+Corduroy+Modular+Sectional+Sofa+with+Pillow+Back+and+Solid+Wood+Legs.jpg",
  "title": "3 - Piece Upholstered Beige Corduroy Modular Sectional Sofa with Pillow Back and Solid Wood Legs",
  "url": "https://www.wayfair.com/furniture/pdp/ebern-designs-milbrey-2-piece-corduroy-modular-sectional-with-loose-back-w112174189.html?piid=640565355,640565357",
  "sku": "W112174189",
  "brand": "Ebern Designs",
  "price": 680,
  "originalPrice": 800,
  "discountPercent": 15,
  "currency": "USD",
  "rating": 4.47,
  "reviewCount": 702,
  "inStock": true,
  "isOnSale": true,
  "fastShip": true,
  "searchQuery": "sectional sofa",
  "sourceUrl": "https://www.wayfair.com/keyword.php?keyword=sectional+sofa",
  "scrapedAt": "2026-05-17T00:08:14.744Z"
}
```

</details>

<details>
<summary>Edge case - deep clearance throw pillow with a 55% markdown</summary>

```json
{
  "imageUrl": "https://assets.wfcdn.com/im/31393233/resize-h400-w400%5Ecompr-r85/8996/89967647/Demariae+Square+Pillow.jpg",
  "title": "Demariae Square Pillow",
  "url": "https://www.wayfair.com/home/pdp/alcott-hill-demariae-square-pillow-w001184340.html?piid=1027567986,1025434850",
  "sku": "W001184340",
  "brand": "Alcott Hill",
  "price": 17.99,
  "originalPrice": 40,
  "discountPercent": 55,
  "currency": "USD",
  "rating": 4.72,
  "reviewCount": 669,
  "inStock": true,
  "isOnSale": true,
  "fastShip": null,
  "searchQuery": "throw pillow",
  "sourceUrl": "https://www.wayfair.com/keyword.php?keyword=throw+pillow&sort=Price_lowest",
  "scrapedAt": "2026-05-17T00:18:10.577Z"
}
```

</details>

<details>
<summary>Sparse record - new listing with no reviews yet and no fast-ship badge</summary>

```json
{
  "imageUrl": "https://assets.wfcdn.com/im/11559638/resize-h400-w400%5Ecompr-r85/3701/370164268/88.5%27%27+W+Corduroy+Comfy+L+Shaped+Sectional+Storage+Sofa+Modular+Cloud+Sofa+.jpg",
  "title": "88.5'' W Corduroy Comfy L Shaped Sectional Storage Sofa Modular Cloud Sofa",
  "url": "https://www.wayfair.com/furniture/pdp/mercer41-885-w-corduroy-comfy-l-shaped-sectional-storage-sofa-modular-cloud-sofa-w119766434.html?piid=872476545",
  "sku": "W119766434",
  "brand": "Mercer41",
  "price": 509.99,
  "originalPrice": 1229.99,
  "discountPercent": 59,
  "currency": "USD",
  "rating": null,
  "reviewCount": null,
  "inStock": true,
  "isOnSale": true,
  "fastShip": true,
  "searchQuery": "sectional sofa",
  "sourceUrl": "https://www.wayfair.com/keyword.php?keyword=sectional+sofa",
  "scrapedAt": "2026-05-17T00:08:14.743Z"
}
```

</details>

***

### ✨ Why choose this Actor

| ✨ | Capability |
|---|---|
| 🛡️ | **Anti-bot handled.** Camoufox stealth, residential proxies, homepage warm-up, and PerimeterX press-and-hold are all built in. |
| 📊 | **18 structured fields.** Sale price, list price, discount percent, brand, rating, review count, stock, fast ship, and more on every record. |
| 🔢 | **Search and URL inputs.** Mix keywords and direct category or brand URLs in the same run. |
| 💰 | **Real discount math.** Returns both the current price and the original list price so you can verify the markdown rather than trust the badge. |
| 🔄 | **Pagination follows on its own.** No need to script page indexes; the crawler walks pages until the cap is hit or results dry up. |
| 🆓 | **Free tier preview.** Run up to 10 items at no cost to validate the output before scaling up. |
| 🧾 | **Predictable schema.** Output schema is locked, so downstream code, BI tools, and ETL pipelines do not break run-to-run. |

> 📊 Each record carries 18 fields, including a calculated discount percent so you can sort or filter by markdown depth without post-processing.

***

### 📈 How it compares to alternatives

| Approach | Cost | Coverage | Refresh | Filters | Setup |
|---|---|---|---|---|---|
| **⭐ Wayfair Product Pricing Scraper** *(this Actor)* | Pay per use, free preview | Wayfair US catalog | On demand or scheduled | Keyword, URL, price range, sort | One click |
| Manual CSV exports | Free (your time) | Whatever you click through | Stale within hours | Manual filtering | Hours per run |
| Generic e-commerce scrapers | Subscription | Patchy on Wayfair (often blocked) | Variable | Limited | Days of integration |
| Affiliate feeds and APIs | Approval gated | Catalog subset, no real-time stock | Daily at best | Predefined buckets | Application process |
| Build your own browser crawler | Engineering time | Whatever you maintain | Breaks at every layout change | Whatever you build | Weeks plus ongoing maintenance |

If you need fresh, filterable Wayfair product data without paying a developer to babysit a stealth browser, this Actor is the shortest path.

***

### 🚀 How to use

1. 🆕 **Sign up.** Create a free Apify account at the [Apify console](https://console.apify.com/sign-up?fpr=vmoqkp). Free plan includes a monthly compute credit, no card needed.
2. 🛋️ **Open the Actor.** Visit the Wayfair Product Pricing Scraper page on Apify and click **Try for free**.
3. ⚙️ **Configure the input.** Paste your search keywords or Wayfair URLs, set `maxItems`, optionally add price filters or a sort.
4. ▶️ **Run it.** Click **Start**. The first run will spin up a fresh container and warm up a Wayfair session; subsequent runs are faster.
5. 📥 **Export the dataset.** Download as JSON, CSV, Excel, or HTML, or pull via the Apify API to push into your own pipeline.

> ⏱️ Total time from sign-up to first export is usually under five minutes.

***

### 💼 Business use cases

<table>
<tr>
<td width="50%">

#### 🎨 Interior designers

- Build mood boards with current Wayfair prices, not stale screenshots
- Track price drops on hero pieces during client projects
- Bulk source SKUs for staging packages and full-room refreshes
- Compare sectional, table, and lighting options side by side

</td>
<td width="50%">

#### 🏠 Home staging and short-term rentals

- Pull turnkey furniture lists for new listing setups
- Monitor in-stock status before placing bulk orders
- Track fast-ship availability for last-minute swaps
- Maintain SKU catalogs across multiple staged properties

</td>
</tr>
<tr>
<td width="50%">

#### 📈 E-commerce and pricing analysts

- Benchmark furniture pricing against Amazon, IKEA, Target, and Walmart
- Detect category-wide markdown waves and clearance cycles
- Feed pricing models with current sale prices and list prices
- Watch competitor brands across rugs, lighting, and outdoor

</td>
<td width="50%">

#### ✍️ Affiliate and content publishers

- Refresh deal pages, gift guides, and seasonal round-ups
- Validate affiliate links and live prices before publishing
- Track best-rated picks across furniture categories
- Spot trending categories by review velocity

</td>
</tr>
</table>

***

### 🌟 Beyond business use cases

Data like this powers more than commercial workflows. The same structured records support research, education, civic projects, and personal initiatives.

<table>
<tr>
<td width="50%">

#### 🎓 Research and academia

- Empirical datasets for papers, thesis work, and coursework
- Longitudinal studies tracking changes across snapshots
- Reproducible research with cited, versioned data pulls
- Classroom exercises on data analysis and ethical scraping

</td>
<td width="50%">

#### 🎨 Personal and creative

- Side projects, portfolio demos, and indie app launches
- Data visualizations, dashboards, and infographics
- Content research for bloggers, YouTubers, and podcasters
- Hobbyist collections and personal trackers

</td>
</tr>
<tr>
<td width="50%">

#### 🤝 Non-profit and civic

- Transparency reporting and accountability projects
- Advocacy campaigns backed by public-interest data
- Community-run databases for local issues
- Investigative journalism on public records

</td>
<td width="50%">

#### 🧪 Experimentation

- Prototype AI and machine-learning pipelines with real data
- Validate product-market hypotheses before engineering spend
- Train small domain-specific models on niche corpora
- Test dashboard concepts with live input

</td>
</tr>
</table>

***

### 🔌 Automating Wayfair Product Pricing Scraper

Once the Actor is dialed in, fold it into your stack and let it run on a schedule.

- 🟢 Call it from Node.js with the [Apify JavaScript client](https://docs.apify.com/api/client/js) to drop records into your own database.
- 🐍 Call it from Python with the [Apify Python client](https://docs.apify.com/api/client/python) for pandas, BigQuery, or notebook workflows.
- 📚 Read the [Apify Actor API docs](https://docs.apify.com/api/v2) for run triggers, dataset exports, and webhook responses.

Use Apify Schedules to run the Actor every morning, every hour, or any cron you like. Hook a webhook to the run so a fresh CSV lands in S3, a Google Sheet, or a Slack message the moment the run finishes.

***

### ❓ Frequently Asked Questions

<details>
<summary>🛡️ <strong>How does this handle Wayfair's anti-bot protection?</strong></summary>

The Actor runs Camoufox (a stealth Firefox build) on residential proxies. Each session warms up on the Wayfair homepage to collect cookies, rotates if challenged, and clears PerimeterX press-and-hold prompts before hitting the target URL. If a page is still blocked after retries, the session rotates and tries again.

</details>

<details>
<summary>🔢 <strong>What is the maximum number of items I can scrape?</strong></summary>

Free plan runs are capped at 10 items for preview. Paid plans go up to 1,000,000 items per run, controlled by the `maxItems` field.

</details>

<details>
<summary>💵 <strong>Can I use this for commercial use?</strong></summary>

Yes. The Actor returns publicly available product information that businesses commonly use for pricing, sourcing, and content workflows. You are responsible for ensuring your specific use complies with applicable laws and Wayfair's terms of service.

</details>

<details>
<summary>💎 <strong>Do I need a paid Apify plan?</strong></summary>

No. The free plan lets you preview the Actor with up to 10 items per run, which is enough to validate the schema and integrate it into your workflow before scaling up.

</details>

<details>
<summary>⚠️ <strong>What happens if a run fails or returns no items?</strong></summary>

The Actor never charges for empty runs in pay-per-result mode. Most failures trace back to a particularly aggressive block window; rerunning a few minutes later with a fresh session usually clears it. Check the run log for the exact reason.

</details>

<details>
<summary>⚖️ <strong>Is this legal?</strong></summary>

The Actor only retrieves publicly available product listings that Wayfair itself shows in search results and category pages. The legal landscape for web scraping continues to evolve; consult your own counsel for guidance specific to your jurisdiction and use case.

</details>

<details>
<summary>🔄 <strong>How fresh is the data?</strong></summary>

Every run scrapes live from Wayfair, so prices, stock, and ratings reflect the moment of the run. Schedule the Actor as often as your use case needs - hourly for fast-moving pricing work, daily for general catalog refreshes.

</details>

<details>
<summary>📂 <strong>What export formats are supported?</strong></summary>

JSON, CSV, Excel (XLSX), HTML, RSS, and JSONL. You can also pull the dataset directly through the Apify API or push it to webhooks, S3, or Google Sheets.

</details>

<details>
<summary>🌍 <strong>Does it support Wayfair regions other than US?</strong></summary>

The Actor targets `wayfair.com` (US) by default. You can paste regional URLs (`wayfair.co.uk`, `wayfair.ca`) into `startUrls`, but the residential proxy will need a matching country. Get in touch if you need first-class regional support.

</details>

<details>
<summary>🔍 <strong>Can I scrape by category URL instead of keyword?</strong></summary>

Yes. Paste any category URL (e.g. `https://www.wayfair.com/furniture/cat/dining-chairs-c46090.html`) into `startUrls`. Pagination is followed automatically.

</details>

<details>
<summary>💳 <strong>What about dimensions, materials, or full product specs?</strong></summary>

This release focuses on the listing-level fields that appear on search and category pages. Detail-page fields like dimensions and materials are on the roadmap; reach out through the contact form if you need them sooner.

</details>

<details>
<summary>🆘 <strong>I have a different question.</strong></summary>

Open the [contact form](https://tally.so/r/BzdKgA) and a human will get back to you.

</details>

***

### 🔌 Integrate with any app

Send Wayfair product data straight into the tools your team already uses:

- [**Google Sheets**](https://apify.com/integrations) - automatic sheet updates after each run
- [**Slack**](https://apify.com/integrations) - notifications when new SKUs or price drops land
- [**Zapier**](https://apify.com/integrations) - no-code automations across hundreds of apps
- [**Make**](https://apify.com/integrations) - visual workflows on Wayfair data
- [**Airbyte**](https://apify.com/integrations) - pipe datasets into your warehouse
- [**Webhooks**](https://docs.apify.com/platform/integrations/webhooks) - custom delivery to any HTTP endpoint

***

### 🔗 Recommended Actors

- [**🏬 Costco Product Scraper**](https://apify.com/parseforge/costco-scraper) - real Costco pricing across warehouse, online, and member-only deals
- [**🛒 eBay Scraper**](https://apify.com/parseforge/ebay-scraper) - eBay product listings with prices, bids, and condition
- [**🎨 Etsy Scraper**](https://apify.com/parseforge/etsy-scraper) - handmade furniture, decor, and home goods at Etsy scale
- [**🏭 Made In China Scraper**](https://apify.com/parseforge/made-in-china-scraper) - upstream B2B suppliers for furniture and home goods
- [**👜 Vestiaire Collective Scraper**](https://apify.com/parseforge/vestiairecollective-scraper) - secondary-market resale prices for design pieces

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more scrapers covering e-commerce, real estate, jobs, and public data.

***

**🆘 Need Help?** [**Open our contact form**](https://tally.so/r/BzdKgA) and a human will get back to you.

***

> ⚖️ **Disclaimer:** This Actor is an independent product and is not affiliated with, endorsed by, or sponsored by Wayfair LLC. It retrieves only publicly accessible information that Wayfair displays on its public search and category pages. Use of the data must comply with Wayfair's Terms of Service and any applicable laws in your jurisdiction. You are responsible for ensuring your specific use case is lawful.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search on Wayfair (e.g. "sectional sofa", "office desk"). Each keyword is run as its own search.

## `startUrls` (type: `array`):

Direct Wayfair URLs to scrape (category browse pages, search result pages, or brand pages). Pagination is followed automatically.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000.

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

Sort order applied to search and category result pages.

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

Minimum product price filter in USD. Leave empty for no lower bound.

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

Maximum product price filter in USD. Leave empty for no upper bound.

## `proxyConfiguration` (type: `object`):

Proxy settings. Residential proxies are strongly recommended for Wayfair to avoid blocks.

## Actor input object example

```json
{
  "searchQueries": [
    "sectional sofa",
    "office desk",
    "dining table"
  ],
  "startUrls": [],
  "maxItems": 10,
  "sortBy": "relevance",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Dataset with all scraped items

# 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 = {
    "searchQueries": [
        "sectional sofa",
        "office desk",
        "dining table"
    ],
    "startUrls": [],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/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 = {
    "searchQueries": [
        "sectional sofa",
        "office desk",
        "dining table",
    ],
    "startUrls": [],
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "sectional sofa",
    "office desk",
    "dining table"
  ],
  "startUrls": [],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call parseforge/wayfair-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parseforge/wayfair-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Wayfair Furniture & Home Goods Scraper",
        "description": "Scrape Wayfair furniture and home goods listings: prices, ratings, reviews, brand, stock status, and images. For resellers, retailers, and procurement teams. Search by keyword or category URL.",
        "version": "0.0",
        "x-build-id": "Oo0IPw1gamauwdkrh"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~wayfair-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-wayfair-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/parseforge~wayfair-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-wayfair-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/parseforge~wayfair-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-wayfair-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQueries": {
                        "title": "Search Keywords",
                        "type": "array",
                        "description": "Keywords to search on Wayfair (e.g. \"sectional sofa\", \"office desk\"). Each keyword is run as its own search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Wayfair URLs",
                        "type": "array",
                        "description": "Direct Wayfair URLs to scrape (category browse pages, search result pages, or brand pages). Pagination is followed automatically.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000."
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "relevance",
                            "price_lowest",
                            "price_highest",
                            "top_rated",
                            "newest"
                        ],
                        "type": "string",
                        "description": "Sort order applied to search and category result pages.",
                        "default": "relevance"
                    },
                    "minPrice": {
                        "title": "Min price (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum product price filter in USD. Leave empty for no lower bound."
                    },
                    "maxPrice": {
                        "title": "Max price (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum product price filter in USD. Leave empty for no upper bound."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Residential proxies are strongly recommended for Wayfair to avoid blocks.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
