# LigaPokemon Scraper: Batch Search for Pokémon TCG Prices in BRL (`getascraper/ligapokemon-scraper`) Actor

Scrape Pokemon TCG card and sealed-product prices from LigaPokemon, Brazil's largest marketplace. Batch up to 20 searches per run for aggregated BRL pricing, last-sale history, and per-seller offers, the only LigaPokemon scraper with batch search. Export via API or Sheets. From $0.005/result.

- **URL**: https://apify.com/getascraper/ligapokemon-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 3 total users, 0 monthly users, 45.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.75 / 1,000 result items

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

## 🔴 LigaPokemon Scraper: Preços de Cards Pokémon TCG

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#FDECEC;border:1px solid #F0BFBF;border-top:4px solid #CC0000;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Track Pokemon card prices on Brazil's biggest TCG marketplace</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Search several cards or sealed products in one run and get back BRL pricing plus a free last-sale snapshot that LigaPokemon's other Apify scraper doesn't offer at all. No login required.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F0BFBF;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#CC0000">📦 Batch search</span><br>
<span style="font-size:12px;color:#57534E">Add every card or product you need to one run instead of starting a new run for each lookup.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F0BFBF;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#CC0000">📈 Last-sale snapshot</span><br>
<span style="font-size:12px;color:#57534E">Date, quantity, and price band from the most recent completed sale, pulled straight from the marketplace.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F0BFBF;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#CC0000">🏪 Seller offer breakdown</span><br>
<span style="font-size:12px;color:#57534E">Seller, city, state, verification seal, condition, and language for every individual listing.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #F0BFBF;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#CC0000">💵 Reliable BRL pricing</span><br>
<span style="font-size:12px;color:#57534E">Minimum, average, and maximum marketplace price for every matched card or product.</span>
</td>
</tr>
</table>

Point this scraper at [LigaPokemon](https://www.ligapokemon.com.br/) and pull structured Pokemon TCG card and sealed-product prices in Brazilian reais (BRL), across as many searches as you need in a single run.

### 🔍 What does this actor do?

LigaPokemon is Brazil's largest Pokemon Trading Card Game marketplace, listing thousands of individual card printings and sealed products from hundreds of independent sellers. This scraper searches it for you and returns clean, structured pricing data instead of you clicking through result pages by hand.

Give it a list of card or product names and it returns each match's minimum, average, and maximum price in BRL. Turn on detail fetching and it also pulls the most recent completed sale for that item, something the other LigaPokemon scraper on Apify does not document at all, plus an optional row-per-seller breakdown so you can compare condition, language, and seller reputation across every listing.

### 💡 Who uses this?

- **I am a reseller buying low on LigaPokemon to resell elsewhere.** I don't want to run one card at a time. I load my whole want list and get every price back from a single run.
- **I am a collector who wants to know what my binder is worth.** I search my key cards together and see the going rate in reais, plus what the last one actually sold for.
- **I am building my own price-tracking tool or spreadsheet.** I need consistent, structured BRL pricing I can refresh on a schedule, in JSON, CSV, or Excel.

### 🚀 How to use

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#FDECEC;border:1px solid #F0BFBF;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#CC0000;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Add your card or product names</span><br>
<span style="font-size:12px;color:#57534E">List every card and product you want priced, one run covers all of them.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FDECEC;border:1px solid #F0BFBF;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#CC0000;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Choose your depth</span><br>
<span style="font-size:12px;color:#57534E">Keep it to the fast aggregated summary, or turn on detail fetching for last-sale data and seller offers.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FDECEC;border:1px solid #F0BFBF;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#CC0000;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Get your dataset</span><br>
<span style="font-size:12px;color:#57534E">BRL pricing, last-sale history, and seller offers land in your dataset, ready to export.</span>
</td>
</tr>
</table>

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `queries` | array of strings | Yes | Card or product names to search for, for example "Charizard ex". Add as many as you need, this is what lets you batch several lookups into one run. |
| `maxProductsPerQuery` | integer | No | How many matched items to return per search term, from LigaPokemon's own best-match order. Default: 10. |
| `condition` | enum | No | Only keep seller offers in this condition (Mint, Near Mint, Slightly Played, Moderately Played, Heavily Played, Damaged). Only affects seller offer rows. Default: any. |
| `language` | enum | No | Only keep seller offers with the card printed in this language. Only affects seller offer rows. Default: any. |
| `fetchDetails` | boolean | No | Open each matched item's own page for last-sale history and seller offers. One extra request per item, so it defaults off to keep runs fast. Default: false. |
| `includeLastSale` | boolean | No | Include the most recent completed sale (date, quantity, price band). Has no effect unless `fetchDetails` is on. Default: true. |
| `includeOffers` | boolean | No | Return one row per individual seller listing instead of just the aggregated summary. Has no effect unless `fetchDetails` is on. Default: false. |
| `proxyConfiguration` | proxy | No | Keep the default. LigaPokemon requires a Brazilian residential proxy to load at all. |

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| `recordType` | string | `aggregate` for a summary row, `offer` for an individual seller listing. |
| `query` | string | The search term that produced this row. |
| `type` | string | `card` for an individual card printing, `product` for a sealed product. |
| `name` | string | Card or product name. |
| `edition` | string | null | Set or edition name, cards only. |
| `editionCode` | string | null | Set or edition code, cards only. |
| `cardNumber` | string | null | Collector number within its set, cards only. |
| `priceMin` | number | null | Current minimum marketplace price in BRL. |
| `priceAvg` | number | null | Current average marketplace price in BRL. |
| `priceMax` | number | null | Current maximum marketplace price in BRL. |
| `currency` | string | Always `BRL`. |
| `source` | string | Always `ligapokemon`. |
| `url` | string | Direct link to the card or product page. |
| `imageUrl` | string | null | Card or product image URL. |
| `lastSaleDate` | string | null | Date of the most recently completed sale, when available. |
| `lastSaleQuantity` | number | null | Quantity sold in that last sale. |
| `lastSalePriceMin` | number | null | Lowest price in that last sale. |
| `lastSalePriceMid` | number | null | Average price in that last sale. |
| `lastSalePriceMax` | number | null | Highest price in that last sale. |
| `offerSeller` | string | null | Seller name, offer rows only. |
| `offerSellerCity` | string | null | Seller city, offer rows only. |
| `offerSellerState` | string | null | Seller state, offer rows only. |
| `offerSellerVerified` | boolean | null | Whether the seller carries LigaPokemon's verification seal, offer rows only. |
| `offerSellerPhysicalStore` | boolean | null | Whether the seller also has a physical store, offer rows only. |
| `offerShippingTracking` | boolean | null | Whether the seller offers tracked shipping, offer rows only. |
| `offerCondition` | string | null | Listing condition code, offer rows only. |
| `offerLanguage` | string | null | Listing printed language, offer rows only. |
| `offerFinish` | string | null | Card finish or variant (foil, reverse foil, and similar), when applicable, offer rows only. |
| `offerPrice` | null | Always null. LigaPokemon does not expose an individual listing's exact price in a form this actor can read reliably; use `priceMin`/`priceAvg`/`priceMax` for pricing. |
| `offerQuantity` | null | Always null, for the same reason as `offerPrice`. |
| `scrapedAt` | string | When this row was scraped. |

You can download the dataset in JSON, HTML, CSV, or Excel from the Output tab of any run.

### 📤 Sample output

```json
{
    "recordType": "offer",
    "query": "Ash's Pikachu",
    "type": "card",
    "name": "Ash's Pikachu",
    "edition": "Sun & Moon Promos",
    "editionCode": "SMP",
    "cardNumber": "SM108",
    "priceMin": 89.9,
    "priceAvg": 238.93,
    "priceMax": 399.9,
    "currency": "BRL",
    "source": "ligapokemon",
    "url": "https://www.ligapokemon.com.br/?view=cards/card&card=Ash%27s+Pikachu+(SM108/250)&ed=SMP&num=SM108",
    "imageUrl": "https://repositorio.sbrauble.com/arquivos/in/pokemon_bkp/cd/101/4453_SM108.jpg",
    "lastSaleQuantity": 2,
    "lastSalePriceMin": 70,
    "lastSalePriceMid": 138.14,
    "lastSalePriceMax": 249.9,
    "offerSeller": "Cidadela Card Games",
    "offerSellerCity": "Curitiba",
    "offerSellerState": "PR",
    "offerSellerVerified": true,
    "offerSellerPhysicalStore": true,
    "offerShippingTracking": true,
    "offerCondition": "NM",
    "offerLanguage": "PT",
    "scrapedAt": "2026-09-17T16:50:53.960Z"
}
```

### 💰 Pricing

Pricing is pay per event. You are charged only for what your run actually produces. Empty runs cost nothing. There are no monthly subscriptions or minimum commitments.

Free plan runs are limited in items per run, runs per day, and a short wait between runs. These limits do not apply to paid plans.

### ⭐ Enjoying LigaPokemon Scraper?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#FDECEC;border:1px solid #F0BFBF;border-left:5px solid #CC0000;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">One run just batched your whole card list into BRL pricing plus last-sale data.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other collectors and resellers find this actor. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#CC0000;border:1px solid #F0BFBF;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/ligapokemon-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ✨ Tips

- **Batch your whole want list.** Add every card and product you're tracking to `queries` in one run instead of scheduling a run per card.
- **Keep `fetchDetails` off for a quick price check.** The aggregated minimum, average, and maximum price come free with every search, no extra request needed.
- **Turn on `includeLastSale` when you need a reality check.** Current asking prices can run ahead of what buyers are actually paying; the last-sale snapshot shows the most recent real transaction.
- **Use `includeOffers` to find a specific seller.** Filter by `condition` and `language` to see exactly who has the copy you want, in the state you want it.
- **Price off the aggregate, not a single offer.** `offerPrice` is intentionally null on every offer row (LigaPokemon does not expose it reliably); `priceMin`/`priceAvg`/`priceMax` are the numbers to build decisions on.

### ❓ FAQ

##### Why is `offerPrice` always null?

LigaPokemon does not publish an individual seller listing's exact price in a form this actor can read reliably. The aggregated `priceMin`, `priceAvg`, and `priceMax` fields are accurate and come from the marketplace's own published summary for that card or product; use those for pricing.

##### Does this actor need a LigaPokemon account or login?

No. It reads publicly available marketplace pages, the same pages any visitor can view without signing in.

##### How many cards can I search in one run?

Add up to 20 search terms to `queries` per run, with `maxProductsPerQuery` controlling how many matched printings or products each search returns.

##### How fresh is the pricing data?

Every run fetches live data directly from LigaPokemon at the moment it executes.

##### Is scraping LigaPokemon legal?

This actor reads publicly available marketplace pages. You are responsible for complying with LigaPokemon's terms of service and applicable laws. For questions or custom fields, contact the author at <devanshtiwari365@gmail.com>.

### 🔗 Other actors

- [MySlabs Graded Card Scraper: Sold Comps & Listings](https://apify.com/getascraper/myslabs-graded-cards-scraper) ↗ - graded slab listings and sold comps from MySlabs, the peer-to-peer graded-card marketplace.
- [Fanatics Collect Card Auction Scraper: Prices, Sellers & Alerts](https://apify.com/getascraper/fanaticscollect-scraper) ↗ - auction and marketplace card listings with seller identity from Fanatics Collect.
- [Goldin Auctions Scraper: Sports Cards & Sold Comps](https://apify.com/getascraper/goldin-auctions-scraper) ↗ - live lots and a large historical sold-price archive from Goldin Auctions.
- [GoCollect Scraper: CGC/CBCS/PSA/BGS Census, Sold Prices & More](https://apify.com/getascraper/gocollect-scraper) ↗ - grading population census and sold-price data for cross-checking graded card values.
- [Whatnot Scraper: Live Shows, Products & Sellers](https://apify.com/getascraper/whatnot-scraper) ↗ - live show, product, and seller data from Whatnot's live-commerce card marketplace.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/ligapokemon-scraper/changelog.md

# Actor input Schema

## `queries` (type: `array`):

One or more card or product names to search for on LigaPokemon (e.g. "Charizard ex", "Booster Box Escarlate e Purpura"). The best-known LigaPokemon scraper on the Store only accepts a single query per run, which is why its own usage shows around 180 runs per user per month, one run per card looked up. Add every card you need here instead and get them all back from one run.

## `maxProductsPerQuery` (type: `integer`):

How many matched card printings or products to return for each search term, counting from LigaPokemon's own best-match order. Kept low by default so a run with several queries still finishes quickly; raise it if a search term is ambiguous and you want more of its variants.

## `condition` (type: `string`):

Only keep seller offers in this condition. Only applies when "Include individual seller offers" below is turned on; it has no effect on the aggregated price summary. Uses LigaPokemon's own condition codes.

## `language` (type: `string`):

Only keep seller offers whose card is printed in this language. Only applies when "Include individual seller offers" below is turned on.

## `fetchDetails` (type: `boolean`):

Opens each matched card or product's own detail page to collect the last-sale snapshot and individual seller offers below. This is one extra request per matched item on top of the free search-results summary, so it defaults off to keep runs fast. Turn it on to get either of the two options below.

## `includeLastSale` (type: `boolean`):

Adds the most recently completed sale for each item (date, quantity, and price band) straight from LigaPokemon's own product page data. No login is required to read it, and it costs nothing extra once "Fetch item detail pages" is on, since it comes from the same page fetch. This is data the best-known competing LigaPokemon scraper does not document at all. Has no effect unless "Fetch item detail pages" is enabled.

## `includeOffers` (type: `boolean`):

Emits one row per individual seller listing (seller name, city, state, verification and shipping-tracking flags, condition, language) instead of just the aggregated summary row. Has no effect unless "Fetch item detail pages" is enabled. Note: LigaPokemon renders each individual listing's exact price and exact quantity through CSS position codes that are reshuffled on every page load, so both fields are returned as null on offer rows rather than a guessed number; use the aggregated priceMin/priceAvg/priceMax fields for pricing, and use offer rows to see who sells the item and in what condition or language.

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

LigaPokemon blocks non-Brazilian IP addresses behind a Cloudflare managed challenge (confirmed with live requests: any non-Brazilian IP gets a 403 challenge page, while a Brazilian residential IP reaches real content). Brazilian residential proxy is required, not optional; leave the default as is.

## Actor input object example

```json
{
  "queries": [
    "Charizard"
  ],
  "maxProductsPerQuery": 10,
  "condition": "any",
  "language": "any",
  "fetchDetails": false,
  "includeLastSale": true,
  "includeOffers": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}
```

# Actor output Schema

## `dataset` (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 = {
    "queries": [
        "Charizard"
    ],
    "maxProductsPerQuery": 10,
    "condition": "any",
    "language": "any",
    "fetchDetails": false,
    "includeLastSale": true,
    "includeOffers": false,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "BR"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/ligapokemon-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 = {
    "queries": ["Charizard"],
    "maxProductsPerQuery": 10,
    "condition": "any",
    "language": "any",
    "fetchDetails": False,
    "includeLastSale": True,
    "includeOffers": False,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "BR",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/ligapokemon-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 '{
  "queries": [
    "Charizard"
  ],
  "maxProductsPerQuery": 10,
  "condition": "any",
  "language": "any",
  "fetchDetails": false,
  "includeLastSale": true,
  "includeOffers": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BR"
  }
}' |
apify call getascraper/ligapokemon-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/ligapokemon-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/tu6TWuVbUK8DziqHg/builds/3FA8C9mT4vjod1jRb/openapi.json
