Liga Pokemon Card Prices Scraper avatar

Liga Pokemon Card Prices Scraper

Pricing

from $1.50 / 1,000 card price returneds

Go to Apify Store
Liga Pokemon Card Prices Scraper

Liga Pokemon Card Prices Scraper

Pokemon TCG card prices from Brazil's Liga Pokemon marketplace. Get a card's low, average and high price in BRL alongside its set and collector number, or pull one seller's whole shelf with condition, language, stock and price. No account needed.

Pricing

from $1.50 / 1,000 card price returneds

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 hours ago

Last modified

Share

Pulls Pokemon TCG card prices off Liga Pokemon (ligapokemon.com.br), the Brazilian marketplace where most Pokemon singles in Brazil actually change hands. Two things come back: the price band a card is trading at across the whole marketplace, and, if you ask for a shop, every single listing that seller has on their shelf, with its condition, language, stock and price.

Everything is in Brazilian reais, because that is the currency the marketplace quotes.

No account, no cookies, no API key. You give it card names or a shop id and it gives you rows.


What you get

Card rows: what a card is worth right now

One row per card, carrying the identity and the price band:

{
"rowType": "card",
"cardId": "796",
"cardName": "Charizard ex",
"collectorNumber": "006",
"setSize": "165",
"collectorCode": "006/165",
"editionId": "411",
"editionName": "151",
"priceMinBrl": 79.9,
"priceAvgBrl": 106.5,
"priceMaxBrl": 195,
"priceChangeTodayBrl": -0.99,
"currency": "BRL",
"identityMatch": "exact",
"searchTerm": "Charizard ex (006/165)",
"imageUrl": "https://repositorio.sbrauble.com/arquivos/in/pokemon_bkp/cd/411/796s_006.jpg",
"url": "https://www.ligapokemon.com.br/?view=cards/card&card=Charizard+ex%20(006/165)&num=006",
"scrapedAt": "2026-09-20T01:29:35.947Z"
}

priceMinBrl is the cheapest copy anyone is selling, priceMaxBrl the dearest, priceAvgBrl the marketplace's own average, and priceChangeTodayBrl how much that average moved today. All four are the marketplace's numbers, not ours.

Listing rows: one seller's whole shelf

Put a shop id in sellerStores and you get a row per listing instead:

{
"rowType": "listing",
"listingId": "30468606",
"cardId": "7492",
"cardName": "Billy & O'Nare",
"cardNamePt": "Abílio e Onara",
"collectorNumber": "142",
"setSize": "159",
"setName": "Journey Together",
"setNamePt": "Amigos de Jornada",
"setCode": "JTG",
"rarity": "Comum",
"rarityCode": "C",
"conditionCode": "SP",
"condition": "Slightly Played",
"languageCode": "EN",
"language": "English",
"extrasCode": "3",
"isGraded": false,
"grading": null,
"stock": 7,
"priceBrl": 0.49,
"discountPct": 0,
"currency": "BRL",
"sellerStoreId": "97457",
"sellerName": "Admir das Garde",
"sellerRating": 5,
"sellerRatingCountAtLeast": 250,
"sellerVerified": true,
"url": "https://www.ligapokemon.com.br/?view=cards/card&card=Billy%20%26%20O'Nare%20(142%2F159)&num=142"
}

Conditions come back as the trade's own codes (M, NM, SP, MP, HP, D) with the plain English label beside them. Languages the same way: PT, EN, ES, JP and the rest, each with its name spelled out.


Input

{
"searchTerms": [
"Charizard ex (006/165)",
"Pikachu ex (057/191)",
"Gardevoir ex"
],
"maxItems": 100,
"strictMatch": true
}
FieldWhat it does
searchTermsOne card per line. With a collector number you get that exact printing; without one you get every printing the marketplace lists under that name.
startUrlsPaste card pages or a shop link straight from the site.
sellerStoresA shop id, or the shop link it came from. Returns that seller's entire Pokemon shelf.
includeSellerDetailsAdds shop name, rating and verified badge to listing rows. One extra request per shop.
maxItemsHard cap on rows. You are charged per row, so this is your spend control.
strictMatchLeave this on. See below: it is the difference between a price for your card and a price for somebody else's.

A run takes up to 400 card lookups and 50 shops. Past that it tells you what it skipped instead of quietly doing less.


The thing worth knowing before you use this

Liga's search will sometimes answer with the wrong card, and it looks completely normal when it does.

Ask it for Chien-Pao ex (061/195) and it comes back with Hypno 061/195, from a different set. Same collector number, entirely different card, real price attached. Nothing about the response looks broken. If you took that number as the price of a Chien-Pao ex you would be wrong by a wide margin, and you would never know.

So the actor checks the name and the number on every row against what you asked for. When they do not line up, you get a free note instead of a price:

{
"_diagnostic": true,
"charged": false,
"errorCode": "NO_EXACT_MATCH",
"searchTerm": "Chien-Pao ex (061/195)",
"error": "The marketplace found cards with that collector number but not that card name.",
"returnedInstead": ["Hypno (061/195) in Silver Tempest"],
"hint": "Liga lists many cards under their Brazilian Portuguese names, so an English name plus a number can miss. Search the name on its own, or turn \"strictMatch\" off to take what the marketplace returned. Nothing was charged."
}

That is strictMatch doing its job. Turn it off and you get whatever the search returned, each row tagged identityMatch: "number-only" so you can still tell the difference.

The flip side: Liga is a Brazilian site and a lot of cards are listed under Portuguese names. Rare Candy is Doce Raro. Boss's Orders is Ordem da Chefia. Roaring Moon ex is Lua Estrondo ex. If you pin an English name plus a number and it does not match, that is usually why. Search the name on its own and you will find it. The one case handled automatically is VSTAR, which Liga writes as V-ASTRO.


What this does not do

Worth reading before you buy, because these are real gaps and not one of them is going to surprise you later.

  • No sold-price history. Liga publishes past sales only to signed-in members, so a signed-out scraper cannot see them and this one does not pretend to. You get today's asking prices and today's movement.
  • No cross-seller listing view for one card. You can get the price band for any card, and you can get every listing from a shop you name, but "show me all 40 sellers offering this one card" sits behind a part of the site a signed-out visitor cannot read.
  • extrasCode is a raw code, not a label. It marks foils, promos and similar variants. The marketplace does not publish the code table for Pokemon anywhere a signed-out visitor can read it, so the number is passed through as-is rather than given a made-up name.
  • sellerCity is usually null. The shop panel does not always carry it.
  • Some runs will not get through. The marketplace admits a minority of network addresses at any moment. The actor tries up to 30 before giving up, and around one run in fifty still finds none. It says so in a free row and charges you nothing for the rows it never got. Re-running usually works; supplying your own Brazilian proxy makes it reliable.
  • Promo printings have odd collector numbers: 021/∞, TG01/TG30, 065C/151. They come through as written. They are not errors.

Billing

You are charged per row returned, and only for rows that carry a complete card identity. The per-row rate is on this page.

Free, always:

  • the sample row you get when you run it with nothing filled in
  • every _diagnostic row: no route, no results, wrong card, unknown shop, time limit
  • rows dropped because the identity could not be read

So a run that finds nothing costs you the run fee and nothing else. maxItems is a hard ceiling, not a target: if the searches return fewer rows than that, you pay for the rows you got.


Speed and scale, from real runs

RunWhat it didRowsTime
12 pinned card lookupsone printing each11 cards + 1 free note15 s
one seller's shelfcondition, language, stock, price120 listings25 s
empty inputnothing to look up1 free sample2 s

Card lookups cost roughly one request each, so they scale with the number of cards you ask for. A seller's shelf comes back in pages of a few dozen, so shops are much faster per row: 120 listings took five requests.

The actor paces itself deliberately. Liga rate-limits hard, and a run that sprints gets cut off part-way with half your rows missing. Slower and complete beats fast and truncated.


FAQ

Is there a Liga Pokemon API? Not a public, documented one. This actor reads the same public marketplace data the site itself serves, and hands it back as clean JSON rows.

Can I scrape Liga Pokemon prices without an account? Yes, for current asking prices, which is what this does. Past sale prices are members-only on Liga and are not available to any signed-out tool, this one included.

What currency are the prices in? Brazilian reais (BRL). The marketplace quotes in BRL and the numbers are passed through untouched.

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 just paste the whole link into sellerStores and it will pull the id out.

What do NM, SP, MP mean? Card condition, near-mint down to damaged: M mint, NM near mint, SP slightly played, MP moderately played, HP heavily played, D damaged. Every listing row carries both the code and the spelled-out label.

Why did my search return nothing? Usually the Portuguese name. Liga lists Rare Candy as Doce Raro. Drop the collector number and search the card name on its own first. That almost always finds it.

Can I track a card's price over time? Run it on a schedule and keep the rows. Each row carries scrapedAt and priceChangeTodayBrl, so a daily run builds the history. The actor cannot hand you history it never saw.

Does it work for sealed product, not just singles? Cards are what it returns today. Sealed boxes and accessories live in a different part of the marketplace and are not covered.