# Funko Pop Product Catalog Scraper (`true.false.maybe/funko-pop-product-scraper`) Actor

Scrape structured product data from Funko’s public storefront, including names, prices, availability, licenses, editions, and more. Designed for research, analytics, and catalog monitoring 📊🧸

- **URL**: https://apify.com/true.false.maybe/funko-pop-product-scraper.md
- **Developed by:** [TrueFalseMaybe](https://apify.com/true.false.maybe) (community)
- **Categories:** E-commerce, Developer tools, Automation
- **Stats:** 23 total users, 0 monthly users, 91.7% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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.
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 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

## 🎯 Funko Pop Product Scraper for Funko.com (Apify Actor)

This Apify Actor scrapes product data from **funko.com**, allowing you to collect structured information about Funko pop products such as pricing, availability, images, licensing, Chase variants, and descriptions.

The Actor supports **search-based scraping** or **featured section scraping**, with optional filters for product type, price range, storefront, and pagination.

***

### 🚀 How It Works

You configure **what to scrape** using **Scraping Options**, and optionally refine the results using **Filters**.

- **Scraping Options** define the source of products
- **Filters** refine results and can be combined freely
- Output data is stored in an **Apify Dataset**, one item per product

***

### 🧠 Use Cases

- Track Funko Pop prices and discounts
- Monitor product availability and restocks
- Analyze Chase variant frequency
- Build Funko product datasets for research or e-commerce analysis
- Compare Funko Shop pricing across regions

***

### 📦 Data You Can Extract

- Funko Pop name and product ID
- Pricing (original and sale price)
- Stock and preorder status
- Chase variant availability
- Product images and galleries
- Licensing and collection information

***

### 🔍 Scraping Options (Mutually Exclusive)

These options define **what content is scraped**.\
They **cannot be combined**.

If both are provided, **`search` takes precedence** and `featured` will be ignored.

***

#### 🔎 `search`

Scrapes products matching a keyword search on the Funko Shop.

- **Type:** `string`

```json
"search": "Harry Potter"
```

#### ⭐ `featured`

Scrapes a predefined Funko storefront section.

- **Type:** `string`

Available values:

| Key | Description |
| --- | --- |
| `newReleases` | 🆕 New Releases  |
| `shopAll`     | 🌍 Shop All      |
| `exclusives`  | 🌟 Exclusives    |
| `bestSelling` | 🎯 Best Selling  |
| `backInStock` | ➕ Back in Stock |
| `comingSoon`  | 🔜 Coming Soon   |
| `sale`        | 📉 Sale          |

```json
"featured": "exclusives"
```

### 🧰 Filters (Composable)

Filters can be combined with either search or featured.

#### 🧸 `productFilter`

Filter products by product type.

- **Type:** `string`

- **Default:** `all`

Available values:

- `all`

- `accessories`

- `adventCalendar`

- `apparel`

- `bags`

- `bittyPop`

- `mysteryMinis`

- `pins`

- `plush`

- `pop`

- `popTee`

- `premiumBlindBox`

- `vinylFigures`

```json
`"productFilter": "pop"`
```

***

#### 💰 `minPrice`

Minimum product price.

- **Type:** `integer`

- **Minimum:** `0`

- Whole numbers only

```json
`"minPrice": 10`
```

***

#### 💸 `maxPrice`

Maximum product price.

- **Type:** `integer`

- **Minimum:** `0`

- Whole numbers only

```json
`"maxPrice": 50`
```

***

#### 🌍 `store`

Select which Funko Shop storefront to scrape.

- **Type:** `string`

- **Default:** `US`

Supported storefronts include (non-exhaustive):

| Code | Country |
| --- | --- |
| `US` | United States |
| `GB` | United Kingdom |
| `DE` | Germany |
| `FR` | France |
| `ES` | Spain |
| `IT` | Italy |
| `CZ` | Czech Republic |
| `PL` | Poland |
| `RO` | Romania |
| `NL` | Netherlands |
| `SE` | Sweden |
| `SK` | Slovakia |
| `SI` | Slovenia |

> The full list of supported countries is available in the Actor input UI.

```json
`"store": "ES"`
```

***

#### 📄 `maxPages`

Maximum number of pages to scrape.

- **Type:** `integer`

- **Minimum:** `1`

- **Maximum:** `1000`

```json
`"maxPages": 100`
```

***

### 📥 Full Input Example

```json
{   
    "search": "Stranger Things",   
    "featured": "shopAll",   
    "productFilter": "pop",   
    "minPrice": 1,   
    "maxPrice": 100,   
    "store": "ES",   
    "maxPages": 100 
}
```

⚠️ **Important**\
If both `search` and `featured` are provided, the Actor will run in **search mode** and ignore `featured`.

***

### 📤 Output Schema

Each dataset item represents **one Funko product**.

#### Output Fields

| Field | Type | Description |
| --- | --- | --- |
| `name` | `string` | Product name |
| `url` | `string` | Product detail page URL |
| `productId` | `string` | Funko Pop product ID |
| `boxNumber` | `string` | Funko Pop box number |
| `license`    | `string` | Primary license shown on the product page |
| `subLicense` | `string` | Sublicense shown on the product page (if available) |
| `category` | `string` | Product category or edition |
| `description` | `string` | Full product description |
| `availability` | `string` | One of: `in_stock`, `sold_out`, `preorder` |
| `preorderAvailable` | `boolean` | Whether preorder is available |
| `originalPrice` | `string` | Non-discounted price |
| `salePrice` | `string` | Discounted price |
| `isDiscounted` | `boolean` | Indicates if product is discounted |
| `chanceOfChase` | `boolean` | Indicates presence of a Chase variant |
| `mainImage` | `string` | Primary product image |
| `allImages` | `string[]` | All available product images |

***

### ⚠️ Legal Disclaimer

This Actor is **not affiliated with, endorsed by, or officially connected to Funko, LLC**.

- All trademarks, product names, and brand references belong to their respective owners

- This scraper is intended for **educational, research, and analytical purposes only**

- Users are responsible for complying with Funko’s terms of service and applicable laws

***

#### Output Example

```json
{   
    "name": "Pop! Severus Snape with Patronus",  
    "url": "https://funko.com/pop-severus-snape-with-patronus/90273.html",
    "chanceOfChase": false,
    "originalPrice": "$14.99",
    "salePrice": null,
    "isDiscounted": false,  
    "mainImage": "https://funko.com/dw/image/v2/BGTS_PRD/on/demandware.static/-/Sites-funko-master-catalog/default/dwe20fec14/images/funko/upload/1/90273_HPS20_SnapeWithPatronus_POP_GLAM-WEB.png",
    "allImages": [     "...additional image URLs..."   ],   
    "availability": "available",
    "preorderAvailable": false,
    "boxNumber": "195",
    "category": "Movies & TV",
    "productId": "90273",
    "license": "Harry Potter",
    "subLicense": null,   
    "description": "Conjure the Patronus Charm™ with POP! Severus Snape™! Expand..." 
    }
```

***

# Actor input Schema

## `search` (type: `string`):

Search term to look for on Funko Shop. Used only when no Start URLs are provided. The filters below (product type, price, and storefront) apply to search results.

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

Funko listing URLs to scrape directly, such as a search results page, a featured page (sale, new releases, exclusives), or a filtered category. Copy the URL from your browser with the filters and sorting already applied. When Start URLs are set, the search term and the filters below are ignored and each URL is scraped as-is. A product URL ending in .html scrapes that single product.

## `productFilter` (type: `string`):

Product type filter for search results. Ignored when Start URLs are used. Defaults to all.

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

Minimum product price for search results, whole numbers only. Ignored when Start URLs are used.

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

Maximum product price for search results, whole numbers only. Ignored when Start URLs are used.

## `store` (type: `string`):

Funko Shop storefront to scrape in search mode. Ignored when Start URLs are used; the storefront is taken from each URL instead.

## `maxPages` (type: `integer`):

Maximum number of listing pages to scrape per start URL.

## Actor input object example

```json
{
  "search": "Harry Potter",
  "productFilter": "all",
  "store": "US"
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `products` (type: `string`):

No description

## `pricing` (type: `string`):

No description

## `availability` (type: `string`):

No description

## `images` (type: `string`):

No description

## `chaseChance` (type: `string`):

No description

## `productUrls` (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 = {
    "search": "Harry Potter",
    "productFilter": "all",
    "store": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("true.false.maybe/funko-pop-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 = {
    "search": "Harry Potter",
    "productFilter": "all",
    "store": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("true.false.maybe/funko-pop-product-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 '{
  "search": "Harry Potter",
  "productFilter": "all",
  "store": "US"
}' |
apify call true.false.maybe/funko-pop-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=true.false.maybe/funko-pop-product-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/Xx5pwihtrJabMh4U1/builds/JvCkbdbG2nNn6TrVZ/openapi.json
