# West Marine Product Scraper (`axlymxp/westmarine-product-scraper`) Actor

Scrape West Marine products by keyword, category, product URL or the full catalog: variant prices, online stock, specs, UPC, manufacturer SKU, store coverage and ratings. Pay only for results.

- **URL**: https://apify.com/axlymxp/westmarine-product-scraper.md
- **Developed by:** [axly](https://apify.com/axlymxp) (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 $3.00 / 1,000 dataset items

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

## West Marine Product Scraper

Extract **West Marine** products (boat parts, marine electronics, anchoring, safety gear,
fishing and more) as clean, structured JSON. Each product includes **every variant's price and
online stock**, specifications, UPC, manufacturer part number, the number of stores carrying
it, and a rating summary.

Search by keyword, scrape whole categories, look up specific products, or pull the **entire
catalog** (~39,000 products). No browser, CAPTCHA or proxy setup needed.

### Who uses this

- **Marine retailers and distributors:** track West Marine's prices and assortment against
  your own catalog.
- **Brands and manufacturers:** check MAP compliance, spot stock-outs, and see how many
  stores carry each SKU.
- **Resellers:** find clearance and on-sale items with live online stock counts.
- **Analysts and researchers:** build category-level price and assortment datasets for the
  US boating market.

### What you get

| Field | Description |
|---|---|
| `product_id`, `name`, `brand`, `url` | Identity and product page link |
| `price`, `price_min`, `price_max` | Current lowest price and the variant price range (USD) |
| `variants[]` | Per variant: `variant_id`, `name`, `price`, `in_stock`, `online_stock_quantity`, `manufacturer_sku`, `on_sale`, `clearance`, `store_count`, `image` |
| `in_stock`, `online_stock_quantity` | Online availability and units available to ship |
| `store_count`, `store_ids` | How many West Marine stores carry the product, and which ones |
| `upc`, `manufacturer`, `manufacturer_sku` | Identifiers for matching against your own catalog |
| `specifications` | Spec table as key/value pairs (material, dimensions, compatibility, warranty…) |
| `short_description`, `description`, `images` | Content |
| `category`, `parent_category` | Merchandising categories |
| `rating`, `review_count`, `rating_histogram`, `recommended_ratio` | Review summary |
| `on_sale`, `clearance`, `is_new` | Merchandising flags |
| `recent_units_sold` | Recent sales volume reported by West Marine's search index |
| `hazardous_material`, `dropship`, `west_advisor_url` | Shipping flags and the related buying guide |
| `source`, `source_value`, `position`, `scraped_at` | Where the row came from, and when |

The full field list is in the **Output** tab / dataset schema.

### Use cases

1. **Daily price monitoring.** Schedule a run on the categories you compete in and diff
   `variants[].price` over time.
2. **MAP / catalog compliance.** Feed brand names into `brands` and check every listed price
   and part number.
3. **Stock-out alerts.** Watch `online_stock_quantity` and `store_count` for your key SKUs.
4. **Clearance sourcing.** Filter rows where `clearance` is true and stock is available.
5. **Market research.** Pull the whole catalog once for a full snapshot of West Marine's
   assortment and price points.

### Input

| Parameter | Description | Default |
|---|---|---|
| `searchQueries` | Keywords, e.g. `anchor`, `bilge pump`, `life jacket` | — |
| `categories` | Category URLs (`https://www.westmarine.com/anchors/`), ids (`TXN_128`) or names (`Anchors`) | — |
| `products` | Product URLs or product / variant ids | — |
| `scrapeAllProducts` | Scrape the entire catalog | `false` |
| `sort` | Best match, best sellers, price ↑/↓, top rated, most reviewed, new | Best match |
| `brands` | Only these brands | — |
| `minPrice` / `maxPrice` | Price range in USD | — |
| `includeDetails` | Variants, specs, images, short description | `true` |
| `includeReviewSummary` | Rating, review count, histogram | `true` |
| `maxItems` | Total result cap | `100` |
| `maxItemsPerQuery` | Cap per keyword / category | `1000` |

#### Example input

```json
{
    "searchQueries": ["anchor"],
    "categories": ["https://www.westmarine.com/life-jackets-pfds/"],
    "sort": "top-sellers",
    "maxItems": 50
}
```

#### Example output (trimmed)

```json
{
    "product_id": "P005_159_001_006",
    "name": "Traditional Anchor & Rode Packages",
    "brand": "WEST MARINE",
    "url": "https://www.westmarine.com/P005_159_001_006.html",
    "price": 149.99,
    "price_min": 149.99,
    "price_max": 269.99,
    "currency": "USD",
    "in_stock": true,
    "online_stock_quantity": 3373,
    "store_count": 102,
    "category": "Anchors",
    "parent_category": "Anchoring",
    "manufacturer_sku": "VM-TA-2666428",
    "specifications": {
        "Best Use": "Sand,Mud",
        "Compatibility": "Boats 16 to 24 Feet",
        "Material": "Galvanized Steel",
        "Warranty": "Five Years",
        "Weight": "8 Pounds"
    },
    "variants": [
        {"variant_id": "11610540", "name": "8 lb. Anchor and Rode Package", "price": 199.99,
         "in_stock": true, "online_stock_quantity": 720, "manufacturer_sku": "VM-TA-2666428", "store_count": 95},
        {"variant_id": "12116331", "name": "4lb. Anchor and Rode Package", "price": 149.99,
         "in_stock": true, "online_stock_quantity": 668, "manufacturer_sku": "VM-TA-04P", "store_count": 99}
    ],
    "rating": 4.79,
    "review_count": 96,
    "recommended_ratio": 0.98,
    "source": "search",
    "source_value": "anchor",
    "scraped_at": "2026-09-29T11:30:00Z"
}
```

### Scheduling and integrations

Use Apify **Schedules** to run daily or hourly, and **webhooks** or integrations (Google
Sheets, Make, Zapier, Slack, S3, BigQuery) to deliver results automatically. Every run's
dataset can be downloaded as JSON, CSV, Excel or XML, or read through the Apify API.

### Use with AI assistants (MCP)

This actor can be called as a tool from AI agents through the Apify MCP server, for example
"get West Marine's current prices for Mantus anchors". Point your MCP client at
`https://mcp.apify.com` and add this actor.

### FAQ

**How many products can I get?**
The full catalog is ~39,000 products. A single keyword or category returns up to 10,000
results. Use `scrapeAllProducts` for everything; it splits the work by department
automatically and removes duplicates.

**How fresh is the data?**
Live. Prices, stock and store counts are read at run time.

**Do I need proxies?**
No. The actor works without a proxy. The proxy setting exists only if you want a specific
egress.

**Are these retail or Pro (trade) prices?**
Retail prices, as shown to any visitor. Trade pricing requires a West Marine Pro account and
is not included.

**Does it include individual review texts?**
It includes the rating summary (average, count, star histogram, recommend ratio), not the
review texts.

**Is this legal?**
The actor collects publicly available product information. You're responsible for using the
data in line with applicable laws and West Marine's terms.

**Something broke?**
Open an issue on the actor's **Issues** tab. Failures are reported to the maintainer
automatically.

# Actor input Schema

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

Keywords to search on West Marine, e.g. "anchor", "life jacket", "bilge pump". Each keyword is scraped separately (up to 10,000 results each).

## `categories` (type: `array`):

Category page URLs (e.g. https://www.westmarine.com/anchors/), category ids (e.g. TXN\_128) or exact category names (e.g. "Anchors").

## `products` (type: `array`):

West Marine product page URLs or product / variant ids (e.g. P005\_159\_001\_006 or 11610540). Each becomes one product row.

## `scrapeAllProducts` (type: `boolean`):

Walk every top-level department and return every product (~39,000). Combine with Max results to control cost.

## `sort` (type: `string`):

Order of search / category results.

## `brands` (type: `array`):

Only return products from these brands, e.g. "MANTUS", "GARMIN". Case-insensitive.

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

Only products priced at or above this value.

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

Only products priced at or below this value.

## `includeDetails` (type: `boolean`):

Add every variant's name, price, online stock and manufacturer SKU, plus specifications, all images and the short description. Recommended.

## `includeReviewSummary` (type: `boolean`):

Add average rating, review count, star histogram and recommend ratio.

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

Stop after this many product rows in total.

## `maxItemsPerQuery` (type: `integer`):

Cap for each individual keyword or category (ignored when scraping the entire catalog).

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

Not required — the data sources answer datacenter IPs. Leave empty unless you need a specific egress.

## Actor input object example

```json
{
  "searchQueries": [
    "anchor"
  ],
  "scrapeAllProducts": false,
  "sort": "relevance",
  "includeDetails": true,
  "includeReviewSummary": true,
  "maxItems": 100,
  "maxItemsPerQuery": 1000,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `products` (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 = {
    "searchQueries": [
        "anchor"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("axlymxp/westmarine-product-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": ["anchor"] }

# Run the Actor and wait for it to finish
run = client.actor("axlymxp/westmarine-product-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 '{
  "searchQueries": [
    "anchor"
  ]
}' |
apify call axlymxp/westmarine-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,axlymxp/westmarine-product-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/T1uJm8NHWC0k8TuXW/builds/2MiWz0e7laoDtLHKu/openapi.json
