# Rockler (`maximedupre/rockler`) Actor

Collect public Rockler woodworking products in a structured dataset. Get product IDs, names, brands, categories, prices, availability, specifications, ratings, and direct links.

- **URL**: https://apify.com/maximedupre/rockler.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** E-commerce, Developer tools
- **Stats:** 2 total users, 1 monthly users, 83.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.90 / 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/platform/actors/running/actors-in-store#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

### 🪵 Rockler woodworking product catalog

For woodworking stores, buyers, catalog researchers, and product teams, this Actor collects public Rockler product pages and saves structured rows. Get product IDs, names, brands, categories, prices, availability, product descriptions, dimensions, materials, weights, specifications, ratings, review counts, and direct product and image links. Use the data to compare products, check visible price and stock signals, and build a product catalog without copying pages by hand.

**Use it to**

- Build a woodworking product list with **[Woodworking Supplies](https://apify.com/maximedupre/rockler/examples/woodworking-supplies)**.
- Find tool catalog data for **[Woodworking Tools](https://apify.com/maximedupre/rockler/examples/woodworking-tools)**.
- Collect names, prices, and links for **[Rockler Products](https://apify.com/maximedupre/rockler/examples/rockler-products)**.
- Review product details for **[Woodworking Hand Tools](https://apify.com/maximedupre/rockler/examples/woodworking-hand-tools)**.
- Search a related catalog with **[Woodcraft](https://apify.com/maximedupre/rockler/examples/woodcraft)**.

#### 📦 Rockler product rows

The dataset has one product-row shape. Each row is saved when the first eligible Rockler product match is found. If the same product appears again during discovery, later matches are ignored. The row keeps the first saved match and is not rewritten by later matches. Optional values appear only when Rockler publishes them.

#### ▶️ Run a Rockler catalog check

**How to run**

1. Open the input form and set Maximum products, or leave it empty for all available products.
2. Start the Actor.
3. Open the default dataset to review and export the saved rows.

**Run decisions**

Use a small limit when you want a shorter run. Leave Maximum products empty to return all available products until the Rockler catalog is exhausted. The Actor reads public catalog data. It does not need Rockler credentials, access private data, place orders, or track historical changes between runs.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
|---|---|---|
| `maxItems` | integer | Stops after this many products. Leave it empty to return all available products until the Rockler catalog is exhausted. |

Leave Maximum products empty to return all available products until the Rockler catalog is exhausted. Set it to a positive integer when you want a smaller run.

**Successful default-input example**

This is the public input from the successful current-beta run.

```json
{
  "maxItems": 1
}
```

#### 🧾 Output

**Run output**

| Field | Type | What it does |
|---|---|---|
| `dataset` | string (URL) | Links to the default dataset that contains the saved product rows. |

**Product row fields**

| Field | Type | What it does |
|---|---|---|
| `productId` | string | Rockler's product ID. |
| `name` | string | The product name shown by Rockler. |
| `brand` | string | The brand shown for the product. |
| `category` | string | The product category shown by Rockler. |
| `productUrl` | string (URL) | The direct Rockler product page. |
| `imageUrl` | string (URL) | The direct product image link. |
| `pricing` | object | Holds the regular price, sale price, and currency. |
| `pricing.regular` | number | The regular price shown by Rockler, when available. |
| `pricing.sale` | number | The sale price shown by Rockler, when available. |
| `pricing.currency` | string | The currency used for the prices. |
| `availability` | string | The availability text shown by Rockler. |
| `description` | string | The product description published by Rockler. |
| `dimensions` | string | The product dimensions and their units, when published. |
| `materials` | array of strings | The materials listed for the product, when published. |
| `weight` | string | The product weight and unit, when published. |
| `specifications` | object of strings | Other product specifications published by Rockler. |
| `rating` | number | The product rating shown by Rockler, when available. |
| `reviewCount` | integer | The number of product reviews shown by Rockler, when available. |

**Genuine current-beta row**

This complete row comes from the successful current-beta run.

```json
{
  "productId": "30247",
  "name": "5'' Surface Mounted Bed Rail Brackets",
  "brand": "Rockler",
  "category": "Rockler Bed Hardware",
  "productUrl": "https://www.rockler.com/5-surface-mounted-bed-rail-brackets",
  "imageUrl": "https://www.rockler.com/media/catalog/product/3/0/30247-02-1000.jpg",
  "pricing": {
    "currency": "USD",
    "regular": 15.99
  },
  "availability": "in stock",
  "description": "No need to mortise into rails and posts.",
  "weight": "0.550000 lb",
  "specifications": {
    "Brand": "Rockler",
    "Weight": "0.55",
    "Important Message": "Notice: Not recommended for bunk or loft beds.",
    "Unit of Measure": "pk"
  },
  "rating": 4.5,
  "reviewCount": 291
}
```

**Output notes**

The run output links to the default dataset. Each saved dataset row follows the product-row table above. Fields that Rockler does not publish can be absent from a row.

#### 💳 Pricing

**Product**

Each saved product costs $0.001. The event is charged when a product is saved, so a smaller Maximum products limit can reduce the number of product charges. If you leave the limit empty, the number of saved products and charges depends on the products available in the Rockler catalog.

#### 🔌 Integrations

**Video walkthrough**

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

Use the default Apify dataset to export product rows or read them through the Apify API.

#### ❓ FAQ

##### Can I check a Rockler store near Pooler, Georgia?

No. This Actor collects public product catalog data. It does not provide store locations or local inventory checks.

##### What happens when the same product appears more than once?

The first eligible match is saved. Later matches are ignored, so the row keeps the first saved match.

##### Are sale prices always present?

No. `pricing.regular` and `pricing.sale` appear when Rockler shows those prices. `pricing.currency` is required in the pricing object.

##### Does it collect Woodcraft products?

No. The Actor focuses on public Rockler catalog pages.

##### Can I use it for historical price tracking?

No. It returns data available during the run and does not provide historical change tracking between runs. Save separate datasets and compare them if you need that view.

##### Does it need a Rockler login or API key?

No. It collects publicly available catalog data without customer-supplied source credentials.

##### Can I collect the full Rockler catalog?

Yes. Leave Maximum products empty. The Actor returns available products until the Rockler catalog is exhausted.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~rockler/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Uline Scraper](https://apify.com/maximedupre/uline-scraper) - Collect Uline catalog rows with SKUs, prices, availability, dimensions, and specifications for procurement research.
- [Toolstation Scraper](https://apify.com/maximedupre/toolstation-scraper) - Collect UK trade and DIY product rows with prices, stock, ratings, and specifications.
- [John Lewis Product Scraper](https://apify.com/maximedupre/john-lewis-product-scraper) - Collect UK retail products and variants with prices, availability, ratings, and specifications.
- [Allegro Scraper](https://apify.com/maximedupre/allegro-scraper) - Collect marketplace listings with prices, sellers, ratings, images, delivery data, and parameters.
- [Amazon Price Tracker](https://apify.com/maximedupre/amazon-price-tracker) - Collect current product snapshots with prices, discounts, ratings, sellers, availability, and source links.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

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

Stop after this many products. Leave it empty to return all available products until the Rockler catalog is exhausted.

## Actor input object example

```json
{
  "maxItems": 1
}
```

# Actor output Schema

## `dataset` (type: `string`):

A link to the dataset with the Rockler products found by this Actor.

# 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 = {
    "maxItems": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/rockler").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 = { "maxItems": 1 }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/rockler").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 '{
  "maxItems": 1
}' |
apify call maximedupre/rockler --silent --output-dataset

```

## MCP server setup

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

```

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/aqxxBMyUkMbXbDOMN/builds/Jxx1LIsyYDZdg8UTe/openapi.json
