# 401 Games Scraper - TCG Singles & Sealed (CAD) (`lulzasaur/games401-scraper`) Actor

Scrape 401 Games (401games.ca), a major Canadian TCG & board game retailer. Search Pokemon, Magic, Yu-Gi-Oh, One Piece & Lorcana singles plus sealed products. Get name, game, category, set, rarity, finish, condition (NM/SP/MP), price in CAD, stock, image and URL from Shopify search.

- **URL**: https://apify.com/lulzasaur/games401-scraper.md
- **Developed by:** [lulz bot](https://apify.com/lulzasaur) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.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.

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

## 401 Games Scraper — TCG Singles & Sealed Prices (CAD)

Scrape [401 Games](https://store.401games.ca) — one of Canada's largest trading card game and board game retailers — for **product/card search results** with **prices in CAD**, per-condition pricing, stock, set and more.

Great for Canadian-market price tracking, cross-border arbitrage (compare against USD retailers), collection valuation, and TCG deal-finder tooling. Covers Pokémon, Magic: The Gathering, Yu-Gi-Oh!, One Piece, Disney Lorcana singles plus sealed products and board games.

### What you get

Per product:

- `name`, `game` (Pokemon / Magic / Yu-Gi-Oh! / …), `category` (e.g. "Pokemon Singles"), `set`
- `rarity`, `finish`, `series` (from product tags where available)
- `conditions[]` — for each variant: `condition` (NM / SP / MP / …), `price` (CAD), `available`, `stock` quantity
- `priceMin`, `priceMax` (CAD), `currency`, `inStock`, `totalStock`
- `imageUrl`, `url`, `handle`, `productId`
- `searchQuery`, `source`, `scrapedAt`

### Input

```json
{
    "searchQueries": ["charizard", "black lotus", "blue-eyes white dragon"],
    "maxListings": 100,
    "fetchVariants": true,
    "proxyConfiguration": { "useApifyProxy": false }
}
```

| Field | Type | Description |
|-------|------|-------------|
| `searchQueries` | array | Product/card names to search (required) |
| `maxListings` | integer | Max products per query (default 100) |
| `fetchVariants` | boolean | Fetch per-condition price + stock from each product (default true) |
| `proxyConfiguration` | object | Optional Apify Proxy config |

### Example output

```json
{
    "name": "Radiant Charizard - 020/159 - Radiant Rare",
    "game": "Pokemon",
    "category": "Pokemon Singles",
    "set": "Sword & Shield: Crown Zenith",
    "rarity": "Radiant Rare",
    "finish": "Holofoil",
    "currency": "CAD",
    "priceMin": 13.0,
    "priceMax": 20.0,
    "inStock": true,
    "totalStock": 4,
    "conditions": [
        { "condition": "NM", "price": 20.0, "available": true, "stock": 3 },
        { "condition": "SP", "price": 16.0, "available": true, "stock": 1 },
        { "condition": "MP", "price": 13.0, "available": false, "stock": 0 }
    ],
    "url": "https://store.401games.ca/products/radiant-charizard-020-159-radiant-rare"
}
```

### Notes

- Data comes from 401 Games' Shopify search pages plus each product's public JSON (fast, no browser needed).
- Prices are in Canadian dollars (CAD) and reflect live 401 Games inventory at scrape time.
- Set `fetchVariants` to `false` for a faster listing-only scrape (skips per-condition price/stock).
- Respect 401 Games' Terms of Service and use reasonable request volumes.

# Actor input Schema

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

Product or card names to search on 401 Games (e.g. 'charizard', 'black lotus', 'blue-eyes white dragon', 'catan'). Each query returns matching TCG singles, sealed products and games.

## `maxListings` (type: `integer`):

Maximum number of products to return per search query. 401 Games returns roughly 50 products per search page.

## `fetchVariants` (type: `boolean`):

Fetch per-condition variants (NM/SP/MP/etc.) with price and stock quantity from each product page. Adds one extra request per product but gives condition-level pricing and inventory. Disable for a faster listing-only scrape.

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

Proxy settings. 401 Games is a Shopify store served through Cloudflare and works without a proxy in most cases; enable Apify Proxy only if you hit rate limits.

## Actor input object example

```json
{
  "searchQueries": [
    "charizard"
  ],
  "maxListings": 100,
  "fetchVariants": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "searchQueries": [
        "charizard"
    ]
};

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=lulzasaur/games401-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/To56xqSAUEscCRN1m/builds/7foSKluBS60DUwEMe/openapi.json
