Liga Pokemon Card Prices Scraper
Scrape Pokemon card prices from Liga Pokemon in BRL: set, collector number, condition, language, stock and seller rating. No account or API key.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
searchTerms,startUrls,sellerStores(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0015 per card price = $1.5 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Card price returned | One priced card listing returned in the dataset. Mismatched cards, diagnostics and the labelled sample row are not charged. | $0.0015 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-20, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
searchTerms | One card per line. Add the collector number to pin a single printing - "Charizard ex (006/165)" - or give the name on its own, "Charizard", to get every printing the marketplace lists under it. Liga is a Brazilian site and lists a lot of cards under their Portuguese names, so if an English name plus a number finds nothing, try the name by itself. | array |
startUrls | Optional. Paste card pages (https://www.ligapokemon.com.br/?view=cards/card&card=Charizard+ex%20(006/165)) or a seller's shop link, the one carrying &store=. Works alongside the fields above. | array |
sellerStores | Optional. A shop id, or the shop link it came from, returns that seller's whole Pokemon shelf: every listing with its condition, language, stock and price in BRL. The id is the number after "store=" in a shop's address. | array |
includeSellerDetails | Adds the shop's name, star rating and verified badge to every listing row. One extra request per shop. Turn it off if you only care about prices. | boolean |
maxItems | Hard cap on the rows this run returns, across every search and shop. You are charged per row returned. | integer |
strictMatch | On by default, and worth leaving on. When you pin a collector number, the marketplace's search sometimes answers with a different card that happens to share that number - a search for "Chien-Pao ex (061/195)" comes back with Hypno 061/195 from another set. With this on, those are reported as an uncharged note instead of being returned and billed as a price for your card. | boolean |
What you get
A structured dataset — each result includes fields like:
rowTypecardNamecollectorCodecollectorNumbersetSizeeditionNamesetNamesetCodeconditionlanguagestockpriceBrlpriceMinBrlpriceAvgBrlpriceMaxBrlpriceChangeTodayBrlsellerNamesellerRatingidentityMatchurlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
Liga Pokemon Card Prices Scraper: Pokemon TCG prices in reais from Brazil's Liga Pokemon
Give it card names, with a collector number to pin one printing, or a seller's shop id. A card comes back with the marketplace's low, average and high price in BRL and today's move; a shop comes back as every listing on its shelf with condition, language, stock and price. There is no sold-price history, only today's asking prices, and many cards are listed under their Portuguese names, so an English name plus a number can miss.
| Input | Card names, optionally with a collector number, card or shop links, or shop ids |
| Output | One row per card with its price band, or one row per listing on a shop's shelf |
| Ceiling | 5,000 rows, 400 card lookups and 50 shops per run |
| Account needed | None |
| Price | $1.50 per 1,000 rows, flat on every plan |
🔍 What Liga Pokemon Card Prices Scraper does
Two kinds of row come back. A card row is the price band a card trades at across the whole marketplace: the cheapest copy for sale, the dearest, the marketplace's own average and how much that average moved today. Those are Liga's numbers, passed through untouched. A listing row is one copy on one seller's shelf, with its condition, language, stock and price.
Liga's search sometimes answers with the wrong card, and nothing about the answer looks wrong. Ask for Chien-Pao ex (061/195) and it returns Hypno 061/195 from another set, same number, real price. So when you pin a collector number, the name and the number that came back are checked against what you asked for. A mismatch becomes a free note naming the card Liga offered instead, not a charged price for somebody else's card. That is what strictMatch does, and it is on unless you turn it off.
The name has to match as well as the number. Capitals, accents and punctuation are ignored, but a name with a word more or less is another card: ask for Mewtwo ex (150/165) and Liga's Mewtwo at that number comes back as a free note, not as your card.
Portuguese names are the other thing to know. Rare Candy is listed as Doce Raro, Boss's Orders as Ordem da Chefia. If an English name plus a number finds nothing, search the name on its own. The one spelling handled for you is VSTAR, which Liga writes as V-ASTRO.
Promo printings keep their odd numbers, like TG01/TG30, 065C/151 or an infinity sign where the set size would be. They are not errors.
Twelve pinned card lookups took 18 seconds on a test run, and a 200-listing shop shelf took 12.
📥 What you give it
{
"searchTerms": ["Charizard ex (006/165)", "Pikachu ex (057/191)", "Mew ex (151/165)"],
"sellerStores": ["97457"],
"maxItems": 100
}
| Field | If you leave it out | What it is |
|---|---|---|
searchTerms | none | One card per line. Charizard ex (006/165) pins one printing; Charizard on its own returns every printing listed under that name. |
startUrls | none | Card pages or shop links copied from the site. A shop link is the one carrying &store=. |
sellerStores | none | A shop id, or the shop link it came from. Returns that seller's whole Pokemon shelf. The id is the number after store= in the shop's address. |
includeSellerDetails | on | Adds the shop's name, star rating and verified badge to every listing row. Turn it off if you only want prices. |
maxItems | 100 | 1 to 5,000 rows, across every search and shop in the run. |
strictMatch | on | Leave it on. With it off, a pinned search returns whatever Liga answered, each row tagged with how well it matched. |
proxyConfiguration | not used | Only for your own servers. Addresses you list here are used as given. Leave it alone otherwise. |
With no card names, links or shops at all, the run returns one free sample row. The form opens with Charizard ex (006/165) filled in as an example.
📤 What you get back
A real card row from a real run:
{
"rowType": "card",
"cardId": "6509",
"editionId": "639",
"cardName": "Pikachu ex",
"collectorNumber": "057",
"setSize": "191",
"collectorCode": "057/191",
"editionName": "Surging Sparks",
"priceMinBrl": 28.5,
"priceAvgBrl": 47.25,
"priceMaxBrl": 99.9,
"priceChangeTodayBrl": -0.2,
"imageUrl": "https://repositorio.sbrauble.com/arquivos/in/pokemon_bkp/cd/639/67350d1d1652a-bxc8f-1jrpq-82ffda375fa28fa9a70a0bb6b0e2b3d6.jpg",
"url": "https://www.ligapokemon.com.br/?view=cards/card&card=Pikachu+ex%20(057/191)&num=057",
"currency": "BRL",
"identityMatch": "exact",
"searchTerm": "Pikachu ex (057/191)",
"scrapedAt": "2026-09-20T01:39:02.714Z"
}
And a real listing row from a shop's shelf:
{
"rowType": "listing",
"listingId": "30468606",
"cardId": "7492",
"cardName": "Billy & O'Nare",
"cardNamePt": "Abílio e Onara",
"collectorNumber": "142",
"setSize": "159",
"editionId": "654",
"setName": "Journey Together",
"setNamePt": "Amigos de Jornada",
"setCode": "JTG",
"rarity": "Comum",
"rarityCode": "C",
"conditionId": 3,
"conditionCode": "SP",
"condition": "Slightly Played",
"languageId": 2,
"languageCode": "EN",
"language": "English",
"extrasCode": "3",
"grading": null,
"isGraded": false,
"stock": 7,
"priceBrl": 0.49,
"discountPct": 0,
"currency": "BRL",
"sellerStoreId": "97457",
"sellerName": "Admir das Garde",
"sellerRating": 5,
"sellerRatingCountAtLeast": 250,
"sellerVerified": true,
"sellerCity": null,
"imageUrl": "https://repositorio.sbrauble.com/arquivos/in/pokemon_bkp/cd/654/67e5a9a0a383a-ur8ax-h2p7r-040edb458cc4e3c466bcacfea9a6defb.jpg",
"url": "https://www.ligapokemon.com.br/?view=cards/card&card=Billy%20%26%20O'Nare%20(142%2F159)&num=142",
"scrapedAt": "2026-09-20T01:39:19.647Z"
}
| Field | What it is |
|---|---|
priceMinBrl, priceAvgBrl, priceMaxBrl | The cheapest copy for sale, the marketplace's average and the dearest copy, in reais. |
priceChangeTodayBrl | How far the average moved today. Null when Liga shows no figure for the day. |
collectorCode, collectorNumber, setSize, editionName, setName, setCode | Which printing it is. |
identityMatch | exact when the name and number you pinned came back. With strictMatch off you may also see number-only, name-only or none, and a name-only search gives search-result. |
cardNamePt, setNamePt | The Portuguese names Liga lists the card and set under. |
conditionCode, condition | M, NM, SP, MP, HP or D, with the English label beside it. |
languageCode, language | The card's language, such as PT, EN, ES or JP. |
stock, priceBrl, discountPct | Copies on the shelf, the price per copy and any discount. |
extrasCode, isGraded, grading | Liga's raw variant code for foils, promos and the like, and grading if there is any. |
sellerName, sellerRating, sellerRatingCountAtLeast, sellerVerified | The shop, when includeSellerDetails is on. sellerCity is usually null. |
🧾 Reading the output
Real rows have no charged field. The free ones carry charged: false, so dropping those leaves only cards and listings.
| Row | How to spot it | Charged |
|---|---|---|
| A card price | rowType: "card" | yes |
| A shop listing | rowType: "listing" | yes |
| The sample | _sample: true | no |
| A note | _diagnostic: true, with an errorCode, an error and usually a hint | no |
The sample row also carries rowType: "card", so filter on _sample or charged, not on rowType alone.
errorCode | What it means |
|---|---|
NO_EXACT_MATCH | Liga answered a pinned search with a different card. returnedInstead names it. Search the name alone, or turn strictMatch off. |
NO_RESULTS | Nothing found. Try the name on its own, or its Portuguese name. |
STORE_NOT_FOUND | No shop with that id. |
UNRECOGNISED_URL | Not a Liga Pokemon card or shop link. |
INCOMPLETE_IDENTITY | A card or listing came back without a readable name, set or id, so it was left out. |
INPUT_TRUNCATED | More than 400 cards or 50 shops. The rest were not looked up; split them into another run. |
TIME_LIMIT | The run reached its 45-minute working limit. What was returned before it stays. |
NO_ROUTE, RATE_LIMITED, CHALLENGED, ADDRESS_REFUSED, UPSTREAM_ERROR, NETWORK_ERROR | The marketplace stopped answering this run, at the start or part way. Rows already returned are kept. Running it again usually gets through. |
NO_PROXY | The run could not open the connection it needs on the Apify account it ran on. Your input did not cause it. Run it again later, and open an issue if it keeps happening. |
▶️ How to run it
1. Open Liga Pokemon Card Prices Scraper and click Try for free. 2. Put card names in Cards to look up, one per line, or a shop id in Seller shop ids. 3. Set Maximum rows. 4. Leave Only return the exact printing asked for ticked. 5. Click Start, then download the dataset as JSON, CSV or Excel.
💰 How much does it cost?
$1.50 per 1,000 rows, flat on every Apify plan. A card row and a listing row cost the same.
Not charged: the sample row, every note above, wrong-card answers caught by strictMatch, rows without a readable identity, duplicates, and anything a run did not reach. If you set a maximum cost for the run, it stops there and says so in its status.
💡 What people use it for
- Pricing a binder in reais against the marketplace's low, average and high for each card.
- Watching a few chase cards every day.
priceChangeTodayBrlgives the day's move, and a schedule
builds the history you keep.
- Reading one shop's shelf card by card: what it stocks, in which condition and language, at what
price.
- Checking your own shop's prices against the market band before you reprice.
🚧 What it does not do
- No sold prices. Liga shows past sales to signed-in members only, so you get today's asking
prices and today's move.
- No list of every seller offering one card. You get the price band for any card, and every
listing from a shop you name.
extrasCodeis a raw code. It marks foils, promos and similar, but Liga publishes no table for
it, so no label is invented.
- No sealed product or accessories. Singles only.
- Prices are in BRL only. No conversion.
🧭 Which trading card or collectibles scraper do you need?
| If you want | Use |
|---|---|
| Pokemon card prices and shop shelves on Liga Pokemon | This one |
| What items actually sold for on eBay | eBay Sold Listings Scraper |
| Listings, live shows and sellers on Whatnot | Whatnot Scraper |
| Second-hand classified listings across Brazil | OLX Brazil Scraper |
❓ Questions people ask
Do I need a Liga account, cookies or an API key? No. It reads current asking prices, which Liga shows to anyone.
How do I find a seller's shop id? Open the shop on Liga and take the number after store= in the address bar, or paste the whole link into Seller shop ids.
What do NM, SP and MP mean? Card condition, from mint down to damaged: M mint, NM near mint, SP slightly played, MP moderately played, HP heavily played, D damaged.
Why did my search return nothing? Usually the Portuguese name. Drop the collector number and search the name on its own first.
Can I track a card's price over time? Run it on a schedule and keep the rows. Each carries scrapedAt and priceChangeTodayBrl, so a daily run builds the history.
Is this legal? It reads public prices and public shop listings. Apify's write-up on the legality of web scraping is a good starting point. We are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page and send the input you used and the run ID. The note rows in the dataset usually name the reason already.