# Chewy.com Scraper (`arcana/chewy-com-scraper`) Actor

Search Chewy.com by name and scrape full product pages (metadata, rating, reviews, categories, variant links, images).

- **URL**: https://apify.com/arcana/chewy-com-scraper.md
- **Developed by:** [Arcana](https://apify.com/arcana) (community)
- **Categories:** E-commerce, Automation
- **Features:** Limited permissions
- **Stats:** 37 total users, 7 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$5.00 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Chewy.com Scraper 🐾

Scrape [Chewy.com](https://www.chewy.com) by **product name** or **URL** and get the
**full product page** — not just a search listing. Titles, both prices (one-time +
Autoship), deal flags, ratings, reviews count, every package **variant** (size &
color, with links), the complete **image gallery**, specifications, dimensions,
GTIN/barcode, the full description and the "About This Item" blocks (care
**Instructions** and **Size** charts).

No proxy, anti-bot, or captcha setup — it's all handled for you. Just send queries.

### Features

- 🔎 **Search by name** — pass product names and get the matching products.
- 📄 **Full product detail** — scrapes the actual product page, not only the search card.
- 💰 **Both prices** — one-time ("buy once") **and** Autoship (subscription), with
  discount %, list/strike price and price-per-unit.
- 🎁 **Deal & status flags** — `isDeal` plus `prescription`, `giftCard`, `bundle`,
  `new`, `discontinued`, `chewyExclusive`.
- 🧩 **All variants** — every size/color pack with its own `productId` + URL; optionally
  scrape each variant in full.
- 🖼️ **Full image gallery**, ⭐ **rating + review count**, 🏷️ **GTIN/barcode**.
- 📋 **Specifications, dimensions & "About This Item"** — including care
  **Instructions** and **Size**-chart tables (as markdown).
- 🧱 **Breadcrumb categories**, 📝 **full description** (the "See more" Details text).
- 🚫 **Exclusions** — skip products by id or by keyword.
- 🔗 **Direct URLs** — feed product (`/dp/...`), search (`/s?query=...`), category
  (`/b/...`) or brand (`/brands/...`) URLs.

### Input

| Field | Type | Description |
| --- | --- | --- |
| `queries` | string\[] | Product names to search for. Each becomes a Chewy search. |
| `productIds` | string\[] | Scrape specific products by id (e.g. `141437`) — no URL needed. |
| `startUrls` | object\[] | Direct Chewy URLs. `/dp/` → product; `/s?query=`, `/b/...`, `/brands/...` → listing. |
| `maxItems` | integer | Maximum number of products to scrape (0 = no limit). |
| `excludeProductIds` | string\[] | Skip these products, by id (e.g. `141437`) or `/dp/` URL. |
| `excludeKeywords` | string\[] | Skip products whose name contains any of these (case-insensitive). |
| `scrapeVariants` | boolean | Also scrape every package variant of each product as its own item. |
| `includeSearchResults` | boolean | Also save the lighter search-result cards (off by default). |
| `maxConcurrency` | integer | Parallel requests (default 5). |

#### Example input

```json
{
  "queries": ["Pedigree Complete Nutrition Roasted"],
  "productIds": ["141437", "371139"],
  "maxItems": 20,
  "excludeKeywords": ["Puppy", "Wet Food"]
}
```

### Output

By default the dataset holds **one full record per product** (`type: "product"`):

| Field | Description |
| --- | --- |
| `productId`, `url`, `title`, `brand` | Identity |
| `price`, `autoshipPrice`, `autoshipDiscountPct`, `listPrice`, `perUnitPrice`, `currency` | Pricing (one-time + subscription) |
| `isDeal`, `isNew` | Headline flags (also mirrored inside `flags`) |
| `flags` | All boolean flags in one object: `{deal, new, ad, prescription, giftCard, bundle, discontinued, chewyExclusive, rx}` |
| `rating`, `reviewCount`, `inStock` | Popularity & availability |
| `gtin` | Barcode (UPC/EAN) |
| `categories[]` | Breadcrumbs `{name, url}` |
| `images[]` | Full image gallery |
| `variants[]` | Package variants `{label, productId, url}` |
| `specifications{}` | Name/value specs (Made In, Lifestage, …) |
| `dimensions` | Physical size string |
| `aboutThisItem[]` | "About This Item" blocks `{name, content}` — e.g. **Instructions** and **Size**; `content` is **HTML** (lists as `<ul>`, the size chart as a `<table>`) |
| `description` | Full product description |

Enable `includeSearchResults` to also save search cards (`type: "search_result"`):
`productId, url, brand, name, price, autoshipPrice, autoshipDiscountPct, listPrice,
listDiscountPct, pricePerUnit, currency, rating, reviewCount, image, inStock, isDeal,
isNew, isAd, flags`.

#### Example product record

```json
{
  "type": "product",
  "productId": "371139",
  "url": "https://www.chewy.com/green-lifestyle-printed-reusable-cat/dp/371139",
  "title": "Green Lifestyle Printed Reusable Cat & Dog Pee Pads, Blue & White, 30 x 34-in, 2 count",
  "brand": "Green Lifestyle",
  "price": 20.49,
  "autoshipPrice": 19.47,
  "autoshipDiscountPct": 5,
  "listPrice": null,
  "perUnitPrice": "$10.25",
  "currency": "USD",
  "isDeal": true,
  "isNew": false,
  "flags": { "deal": true, "new": false, "ad": false, "prescription": false, "giftCard": false, "bundle": false, "discontinued": false, "chewyExclusive": false, "rx": false },
  "gtin": "672288001279",
  "rating": 4.65,
  "reviewCount": 973,
  "inStock": true,
  "categories": [{ "name": "Dog Supplies", "url": "https://www.chewy.com/b/dog-288" }],
  "images": ["https://image.chewy.com/.../068cd739._AC_SS600_V1_.jpg"],
  "variants": [
    { "label": "...34 x 36-in, 2 count", "productId": "371143", "url": "https://www.chewy.com/.../dp/371143" }
  ],
  "specifications": { "Made In": "China", "Potty Feature": "Washable" },
  "dimensions": "30 x 34 x 0.3 inches",
  "aboutThisItem": [
    { "name": "Instructions", "content": "<ul>\n<li>Washing instructions: Machine wash, rinse well. Tumble dry, remove promptly.</li>\n<li>Do not use fabric softener.</li>\n</ul>" },
    { "name": "Size", "content": "<table>\n<thead><tr><th>Size</th><th>Length</th><th>Width</th></tr></thead>\n<tbody><tr><td>30 x 34-in</td><td>30 inches</td><td>34 inches</td></tr></tbody>\n</table>" }
  ],
  "description": "Protect your home from a variety of pet messes…"
}
```

The dataset has ready-made **Products** and **Search results** views in the Console.

### Use cases

- **Price & deal monitoring** — track one-time vs. Autoship prices, discounts and deals.
- **Catalog & MAP compliance** — full specs, variants, GTINs and images per product.
- **Market research** — ratings, review counts and category coverage by brand.
- **Content & feeds** — ready product data (description, images, size charts) for listings.

### FAQ

**Do I need proxies or an anti-bot solution?** No — you only provide queries/URLs.

**Does it scrape full product pages or just search listings?** Full product pages,
including variants, specifications, images and the "About This Item" sections — not
only the search card.

**Can it get every pack size / color?** Yes — all variants are listed with links, and
`scrapeVariants` will scrape each one as a full product.

**How many products can I scrape?** Use `maxItems` to cap a run; 0 means no limit.

**Is a product on sale?** The `isDeal` flag and the discount-percentage fields tell you.

**How do I exclude products?** Use `excludeProductIds` (by id/URL) or `excludeKeywords`
(by name).

# Changelog

This Actor's version history is a separate document: https://apify.com/arcana/chewy-com-scraper/changelog.md

# Actor input Schema

## `queries` (type: `array`):

Product names to search for on Chewy. Broad terms (e.g. "dog food") follow Chewy's redirect to the matching category or brand.

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

Direct Chewy URLs: product pages (/dp/), search (/s?query=), category (/b/...) or brand (/brands/...) pages. Other URLs are skipped with a warning.

## `productIds` (type: `array`):

Scrape specific products by Chewy product id (e.g. 141437) — no URL needed. A /dp/ URL is also accepted. Each is scraped as a full product.

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

Maximum number of products to scrape (0 = no limit).

## `excludeProductIds` (type: `array`):

Products to skip, by Chewy product id (e.g. 141437) or full /dp/ URL. Skipped in both search results and product scraping.

## `excludeKeywords` (type: `array`):

Skip any product whose name contains one of these (case-insensitive substring), e.g. "Puppy" or "Wet Food".

## `scrapeVariants` (type: `boolean`):

If enabled, each package variant (size/flavor) of a product is also scraped as a full product.

## `includeSearchResults` (type: `boolean`):

By default only full product pages are saved. Enable to also save the lighter search-result cards (type=search_result) in the dataset.

## `maxConcurrency` (type: `integer`):

Parallel requests. Higher = faster but more load on Chewy.

## Actor input object example

```json
{
  "queries": [
    "Pedigree Complete Nutrition Roasted"
  ],
  "startUrls": [
    {
      "url": "https://www.chewy.com/pedigree-complete-nutrition-grilled/dp/141437"
    }
  ],
  "productIds": [],
  "maxItems": 0,
  "excludeProductIds": [],
  "excludeKeywords": [],
  "scrapeVariants": false,
  "includeSearchResults": false,
  "maxConcurrency": 5
}
```

# 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 = {
    "queries": [
        "Pedigree Complete Nutrition Roasted"
    ],
    "startUrls": [
        {
            "url": "https://www.chewy.com/pedigree-complete-nutrition-grilled/dp/141437"
        }
    ],
    "productIds": [],
    "excludeProductIds": [],
    "excludeKeywords": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("arcana/chewy-com-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 = {
    "queries": ["Pedigree Complete Nutrition Roasted"],
    "startUrls": [{ "url": "https://www.chewy.com/pedigree-complete-nutrition-grilled/dp/141437" }],
    "productIds": [],
    "excludeProductIds": [],
    "excludeKeywords": [],
}

# Run the Actor and wait for it to finish
run = client.actor("arcana/chewy-com-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 '{
  "queries": [
    "Pedigree Complete Nutrition Roasted"
  ],
  "startUrls": [
    {
      "url": "https://www.chewy.com/pedigree-complete-nutrition-grilled/dp/141437"
    }
  ],
  "productIds": [],
  "excludeProductIds": [],
  "excludeKeywords": []
}' |
apify call arcana/chewy-com-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,arcana/chewy-com-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/Q8MIvZHCq8KDwF8Z1/builds/4BRt3CamaPGntpqIp/openapi.json
