# Hobbylobby Product Search Scraper (`stealth_mode/hobbylobby-product-search-scraper`) Actor

Scrape product listings from Hobby Lobby's extensive catalog with advanced filtering. Extract prices, availability, images, ratings, and 60+ data fields for search results or specific category pages — perfect for price monitoring, trend analysis, and e-commerce research.

- **URL**: https://apify.com/stealth\_mode/hobbylobby-product-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 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?

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

## Hobby Lobby Product Search Scraper: Extract Craft & Decor Data at Scale

***

### What Is Hobby Lobby?

Hobby Lobby is one of North America's largest arts, crafts, and home décor retailers, offering hundreds of thousands of products across furniture, seasonal decorations, fabrics, jewelry, and hobby supplies. Its website handles millions of search queries monthly, making it a valuable source for market research, price benchmarking, and competitive analysis. The challenge is extracting structured data from their dynamic product listings — the **Hobby Lobby Product Search Scraper** automates this entirely.

***

### Overview

The **Hobby Lobby Product Search Scraper** extracts detailed product information from Hobby Lobby's search results and category pages, converting unstructured listings into clean, machine-readable records. It supports two distinct scraping modes:

- **URL-based scraping:** Directly scrape specific search result pages or category URLs
- **Search-based scraping:** Query products using keywords with optional filters (price, material, color, department, category, stock status)

Key capabilities include advanced filtering (sale items, in-stock only), flexible sorting options, pagination support, and bulk data collection with configurable item limits. It's designed for:

- **Price monitoring tools** tracking Hobby Lobby's competitive positioning
- **E-commerce aggregators** feeding craft and home décor product data
- **Market researchers** analyzing seasonal trends in the craft retail space
- **Trend scouts** identifying emerging home décor styles and materials
- **Inventory analysts** monitoring stock status across product categories

***

### Input Format

The scraper accepts configuration in two formats, depending on your scraping strategy:

#### Mode 1: URL-Based Scraping

```json
{
    "urls": [
        "https://www.hobbylobby.com/search?query=bed",
        "https://www.hobbylobby.com/home-decor-frames/furniture/c/3-115"
    ],
    "max_items_per_url": 200,
    "ignore_url_failures": true
}
```

| Field | Description |
|---|---|
| `urls` | Array of Hobby Lobby search or category page URLs to scrape |
| `max_items_per_url` | Maximum products extracted per URL (e.g., `200` for bulk collection) |
| `ignore_url_failures` | If `true`, continues scraping even if some URLs fail — useful for large runs |

#### Mode 2: Search-Based Scraping

```json
{
    "keyword": "bed",
    "sort_by": "HLNextGenEcommIndex_prd_variantPrice_asc",
    "on_sale": true,
    "in_stock": true,
    "department": "Home Decor & Frames",
    "category": "Bedding",
    "color": "White",
    "material": "Fabric",
    "page": 2,
    "max_items_per_url": 200
}
```

| Field | Description |
|---|---|
| `keyword` | Search term (e.g., `"bed"`, `"wooden frame"`) |
| `sort_by` | Sorting method: `"HLNextGenEcommIndex_prd_variantPrice_asc"` (low-to-high), `"prd_variantPrice_desc"` (high-to-low), or `"prd_new"` (new arrivals) |
| `on_sale` | If `true`, returns only discounted items |
| `in_stock` | If `true`, returns only in-stock products |
| `department` | Optional filter by department (e.g., `"Home Decor & Frames"`, `"Art Supplies"`, `"Christmas Decorations"`) |
| `category` | Optional filter by category (e.g., `"Bedding"`, `"Lighting"`, `"Mirrors & Wall Decor"`) |
| `color` | Optional color filter (e.g., `"White"`, `"Gray"`, `"Black & White"`) |
| `material` | Optional material filter (e.g., `"Fabric"`, `"Wood & Manufactured Wood"`, `"Metal"`) |
| `page` | Starting page number for pagination (useful for collecting large datasets across multiple runs) |
| `max_items_per_url` | Maximum products per page (default: `20`; max: `200`) |

> **Tip:** When using search mode, leave the `urls` field empty. All URL mode options will be disabled.

***

### Output Format

**Sample output**

```json
{
  "sku": "2588390",
  "images": [
    {
      "url": "https://cdn.media.amplience.net/s/hobbylobby/2588390-81249716-09232025-IMGSET"
    }
  ],
  "variant_url": "/scrapbook-paper-crafts/machines-vinyl-accessories/vinyl-specialty-sheets/cricut-white-printable-vinyl-sheets---8-5-x-11/p/81249716",
  "days_online": null,
  "variant_price": 9.99,
  "sku_discounted_price": null,
  "sku_discount_name": null,
  "always_discounted": null,
  "is_new": false,
  "is_in_stock": true,
  "style": null,
  "assorted": false,
  "color": null,
  "product_unit": "each",
  "room": null,
  "product_hazards": null,
  "online_status": "ACTIVE",
  "name": "Cricut White Printable Vinyl Sheets - 8.5\" x 11\"",
  "ormd": null,
  "details": "<ul style=\"list-style-type: circle;\">\n<li>Dimensions: 11\" x 8.5\"</li>\n<li>Material: Vinyl</li>\n<li>Color: White</li>\n<li>UPC: 093573967207</li>\n<li>Quantity: 12</li>\n</ul>",
  "exclude_free_shipping": false,
  "product_online_date": null,
  "availability": "BOTH",
  "color_family": "white",
  "vendor_sku": "2010356",
  "back_in_stock_eligible": true,
  "material": null,
  "approval_status": true,
  "theme": null,
  "your_price": false,
  "product_id": "1bef80d8-86f8-479c-8ebd-8054036995d0",
  "product_key": "P81249716",
  "last_modified_at": "2026-04-13T14:51:58.858Z",
  "product_name": "Cricut White Printable Vinyl Sheets - 8.5\" x 11\"",
  "pdp_url": "/scrapbook-paper-crafts/machines-vinyl-accessories/vinyl-specialty-sheets/cricut-white-printable-vinyl-sheets---8-5-x-11/p/p81249716",
  "active_variant_count": 1,
  "product_is_new": false,
  "product_is_in_stock": true,
  "product_discount_names": null,
  "product_description": "<p>Make your own cool and colorful stickers with these Cricut White Printable Vinyl Sheets. These white vinyl sheets are compatible with different Cricut machines and inkjet printers. They are perfect for creating thin and durable full-color stickers, labels, and decorative accents. Use these sheets to make stickers for friends and family for any occasion.</p>",
  "product_days_online": null,
  "categories": {
    "lvl0": [
      "Scrapbook & Paper Crafts"
    ],
    "lvl1": [
      "Scrapbook & Paper Crafts > Machines, Vinyl, & Accessories"
    ],
    "lvl2": [
      "Scrapbook & Paper Crafts > Machines, Vinyl, & Accessories > Vinyl & Specialty Sheets"
    ]
  },
  "department": "Scrapbook & Paper Crafts",
  "category": "Machines, Vinyl, & Accessories",
  "subcategory": "Vinyl & Specialty Sheets",
  "category_keys": [
    "7",
    "7-148",
    "7-148-1283"
  ],
  "category_names": [
    "Scrapbook & Paper Crafts",
    "Machines, Vinyl, & Accessories",
    "Vinyl & Specialty Sheets"
  ],
  "product_lowest_original_price": 9.99,
  "product_highest_original_price": 9.99,
  "product_lowest_price": 9.99,
  "product_highest_price": 9.99,
  "product_lowest_discounted_price": null,
  "product_highest_discounted_price": null,
  "ratings_count": 27,
  "ratings_average": 5,
  "object_id": "81249716",
  "gtin": "093573564895",
  "theme_family": null,
  "attribute_tag": null,
  "sale_type": null,
  "brand": "Cricut",
  "from_url": "https://www.hobbylobby.com/search?query=bed"
}
```

Each product record contains 60+ detailed fields capturing pricing, inventory, categorization, and media:

#### Product Identification

| Field | Meaning |
|---|---|
| `SKU` | Stock Keeping Unit — unique identifier for each product variant |
| `Product ID` | Internal Hobby Lobby product ID |
| `Product Key` | Unique key for database reference |
| `Product Name` | Full product name displayed on listings |
| `Name` | Variant-level product name |
| `Vendor SKU` | Supplier or manufacturer SKU |
| `GTIN` | Global Trade Item Number (barcode) |
| `Object ID` | Search engine object identifier |

#### Pricing & Discounts

| Field | Meaning |
|---|---|
| `Variant Price` | Current price for this product variant |
| `Your Price` | Personalized customer price (if applicable) |
| `SKU Discounted Price` | Price after discount applied to this variant |
| `SKU Discount Name` | Name/description of the active discount (e.g., "Weekly Sale") |
| `Always Discounted` | Boolean indicating if item has permanent discount |
| `Product Lowest Original Price` | Lowest regular (undiscounted) price across all variants |
| `Product Highest Original Price` | Highest regular price across variants |
| `Product Lowest Price` | Lowest current price across variants |
| `Product Highest Price` | Highest current price across variants |
| `Product Lowest Discounted Price` | Lowest discounted price across variants |
| `Product Highest Discounted Price` | Highest discounted price across variants |
| `Sale Type` | Classification of sale (e.g., seasonal, clearance, promotional) |

#### Inventory & Availability

| Field | Meaning |
|---|---|
| `Is In Stock` | Boolean: variant is in stock |
| `Product Is In Stock` | Boolean: at least one variant is in stock |
| `Availability` | Detailed stock status (in stock, out of stock, back-order eligible) |
| `Back in Stock Eligible` | Whether product can be back-ordered |
| `Exclude Free Shipping` | Shipping eligibility flag |

#### Attributes & Classifications

| Field | Meaning |
|---|---|
| `Color` | Variant color |
| `Color Family` | Broader color grouping (e.g., blues, neutrals) |
| `Material` | Product material (e.g., `"Fabric"`, `"Wood & Manufactured Wood"`, `"Metal"`, `"Ceramic"`) |
| `Style` | Design style classification |
| `Theme` | Thematic category (e.g., rustic, modern, seasonal) |
| `Theme Family` | Parent theme grouping |
| `Assorted` | Whether the product is a multi-item assorted pack |
| `Product Unit` | Unit of measurement or quantity per package |
| `Room` | Target room/space (e.g., bedroom, living room) |

#### Categorization

| Field | Meaning |
|---|---|
| `Department` | Top-level department (e.g., `"Home Decor & Frames"`) |
| `Category` | Primary product category (e.g., `"Bedding"`, `"Lighting"`) |
| `Subcategory` | Detailed subcategory |
| `Categories` | Full category hierarchy |
| `Category Keys` | Technical keys for each category level |
| `Category Names` | Human-readable category names |

#### Media & URLs

| Field | Meaning |
|---|---|
| `Images` | Array of product image URLs |
| `Variant URL` | Direct link to this product variant on Hobby Lobby |
| `PDP URL` | Product detail page URL |

#### Content & Description

| Field | Meaning |
|---|---|
| `Product Description` | Full HTML product description |
| `Details` | Additional product details |
| `Product Hazards` | Safety warnings or hazard classifications |

#### Metadata & Lifecycle

| Field | Meaning |
|---|---|
| `Is New` | Boolean: variant is newly added |
| `Product Is New` | Boolean: product line is recently launched |
| `Days Online` | Number of days the variant has been listed |
| `Product Days Online` | Number of days the product has been listed |
| `Product Online Date` | Date the product first went live |
| `Last Modified At` | Timestamp of last data update |
| `Online Status` | Listing status (active, inactive, seasonal) |
| `Approval Status` | Moderation/approval status |
| `ORMD` | Operational readiness marker |

#### Engagement & Ratings

| Field | Meaning |
|---|---|
| `Ratings Count` | Number of customer reviews received |
| `Ratings Average` | Average star rating (1-5 scale) |

#### Business & Fulfillment

| Field | Meaning |
|---|---|
| `Active Variant Count` | Number of active variants for this product |
| `Brand` | Manufacturer or brand name |
| `Product Discount Names` | All active discount names for this product |

***

### How to Use

#### URL-Based Scraping

1. **Collect URLs** — Navigate Hobby Lobby's website and gather search result or category page URLs
2. **Paste URLs** — Add them to the `urls` array in your configuration
3. **Set limits** — Adjust `max_items_per_url` based on expected results per page
4. **Enable resilience** — Set `ignore_url_failures: true` for large jobs to skip problematic URLs
5. **Run and export** — Start the scraper and download results as JSON, CSV, or Excel

#### Search-Based Scraping

1. **Define your search** — Enter a `keyword` and optional filters (department, category, color, material)
2. **Apply sorting** — Choose a sort method (price ascending/descending, new arrivals)
3. **Filter results** — Toggle `on_sale` and `in_stock` to narrow the dataset
4. **Paginate** — Set the `page` parameter to start from a specific page number
5. **Set volume** — Configure `max_items_per_url` (up to 200 per page for large bulk extractions)

**Best practices:**

- Start with smaller `max_items_per_url` values (20–50) to test your configuration
- Use the `page` parameter to split large extractions across multiple runs
- Combine filters (material + color) to isolate niche product segments
- Enable `ignore_url_failures` when scraping 100+ URLs to prevent interruptions

***

### Use Cases & Business Value

- **Price monitoring:** Track Hobby Lobby's pricing against competitor offerings (Michaels, Joann)
- **Trend analysis:** Identify emerging home décor colors, materials, and styles by analyzing seasonal sales data
- **Inventory insights:** Monitor stock levels across departments to predict seasonal demand
- **Product aggregation:** Feed Hobby Lobby data into multi-source product comparison platforms
- **Market research:** Analyze product availability and pricing trends in the craft retail sector
- **Supplier analysis:** Track brand presence and competitive positioning within specific categories

The Hobby Lobby Product Search Scraper transforms hours of manual browsing into structured datasets, enabling data-driven decisions in retail, e-commerce, and market research.

***

### Conclusion

The **Hobby Lobby Product Search Scraper** provides reliable, large-scale access to one of North America's most comprehensive craft and home décor catalogs. With dual scraping modes, advanced filtering, and 60+ output fields, it's an essential tool for price monitoring, trend research, and competitive analysis. Start scraping today and unlock actionable insights from Hobby Lobby's dynamic product universe.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the product search list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `keyword` (type: `string`):

Enter the keyword to search for items

## `sort_by` (type: `string`):

Sort items by options

## `on_sale` (type: `boolean`):

If true, the scraper will only scrape items that are on sale.

## `in_stock` (type: `boolean`):

If true, the scraper will only scrape items that are in stock.

## `department` (type: `string`):

Enter the department to search for items

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

Enter the category to search for items

## `color` (type: `string`):

Enter the color to search for items

## `material` (type: `string`):

Enter the material to search for items

## `page` (type: `integer`):

The page number to start scraping from.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.hobbylobby.com/home-decor-frames/furniture/c/3-115"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://www.hobbylobby.com/home-decor-frames/furniture/c/3-115"
    ],
    "ignore_url_failures": true,
    "on_sale": false,
    "in_stock": false,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/hobbylobby-product-search-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 = {
    "urls": ["https://www.hobbylobby.com/home-decor-frames/furniture/c/3-115"],
    "ignore_url_failures": True,
    "on_sale": False,
    "in_stock": False,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/hobbylobby-product-search-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 '{
  "urls": [
    "https://www.hobbylobby.com/home-decor-frames/furniture/c/3-115"
  ],
  "ignore_url_failures": true,
  "on_sale": false,
  "in_stock": false,
  "max_items_per_url": 20
}' |
apify call stealth_mode/hobbylobby-product-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,stealth_mode/hobbylobby-product-search-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/djSlDpUnHBXGmludI/builds/UocKbgHUN9gXeHHJ9/openapi.json
