# 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:** 25 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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/actors/running/actors-in-store.md#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 **direct Start URL scraping**, with optional filters for product type, price range, and storefront that apply to search mode.

***

### How It Works

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

- **Scraping Options** define the source of products: a keyword search, or a list of Start URLs to scrape directly
- **Filters** narrow down search results and can be combined freely; they're ignored when Start URLs are used
- 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

These options define **what content is scraped**.

If **Start URLs** are provided, they take precedence: `search` and the Filters below are ignored, and each URL is scraped as-is.

***

#### `search`

Scrapes products matching a keyword search on the Funko Shop. Used only when no Start URLs are provided.

- **Type:** `string`

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

#### `startUrls`

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.

- **Type:** `array`
- A URL ending in `.html` is treated as a single product page and scraped directly.
- Any other URL is treated as a listing page and paginated automatically, up to `maxPages`.

```json
"startUrls": [
    { "url": "https://funko.com/exclusives/" }
]
```

### Filters (Composable, search mode only)

Filters can be combined freely with `search`, and are ignored when Start URLs are used.

#### `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. Ignored when Start URLs are used - the storefront is taken from each URL instead.

- **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"`
```

***

### Options

#### `maxPages`

Maximum number of listing pages to scrape per start URL. Applies in both search mode and Start URL mode.

- **Type:** `integer`

- **Minimum:** `1`

- **Maximum:** `1000`

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

***

### Full Input Example

Search mode:

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

Start URL mode (filters and `store` above are ignored):

```json
{
    "startUrls": [
        { "url": "https://funko.com/exclusives/" }
    ],
    "maxPages": 100
}
```

**Important**\
If both `search` and `startUrls` are provided, the Actor runs in **Start URL mode** and ignores `search` and the Filters.

***

### 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: `available`, `coming_soon`, `sold_out` |
| `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 |
| `storefront` | `string` | Storefront the product was scraped from (e.g. `US`, `GB`) |

***

### 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...",
    "storefront": "US"
    }
```

***

# 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(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 '{
  "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": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,true.false.maybe/funko-pop-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/Xx5pwihtrJabMh4U1/builds/Ju5OaeI38zWsRZ1XA/openapi.json
