MTG Argentina — Playwright Full-Catalog Scraper
When to use
- User asks "what deals are at store X?" or "survey all stores"
- Comparing prices for a specific product across all Argentine retailers
- Looking for SLDs / bundles / commander collections / sealed
- Verifying stock + pricing for a planned purchase
CRITICAL — Walk ALL pages, not just page 1
Most stores paginate with 12 products per page. A category claiming "Secret Lairs" or "Booster Boxes" typically has 3-5 pages. Always check for pagination and walk every page.
Required tools
mcp__plugin_playwright_playwright__browser_navigate — load page
mcp__plugin_playwright_playwright__browser_evaluate — extract products via JS
mcp__plugin_playwright_playwright__browser_wait_for — handle Cloudflare delays
mcp__plugin_playwright_playwright__browser_close — cleanup
Standard scraping flow
1. Navigate to category page 1
browser_navigate(url=STORE_CATEGORY_URL)
2. Wait if needed
Phoenix Reborn has Cloudflare → wait 8 seconds:
browser_wait_for(time=8)
3. Extract products + detect pagination
() => {
const products = [];
document.querySelectorAll('li.product, .product, .item-product, .js-item-product').forEach(card => {
const name = card.querySelector('.woocommerce-loop-product__title, h2, h3, .name, .js-item-name')?.textContent?.trim();
const price = card.querySelector('.price, .woocommerce-Price-amount, .js-price-display, .item-price')?.textContent?.trim();
const stock = card.classList.contains('outofstock') ? 'OOS' : 'in stock';
if (name) products.push({ name, price, stock });
});
const pages = [...document.querySelectorAll('.page-numbers, .pagination a')]
.map(a => a.textContent.trim())
.filter(t => /^\d+$/.test(t));
return { products, maxPage: pages.length ? Math.max(...pages.map(Number)) : 1 };
}
4. Walk pagination — URL pattern per store
| Store |
Pagination URL pattern |
| Bazaar |
https://bazaarmtg.com/categoria-producto/magic-the-gathering/<category>/page/N/ |
| Rancho |
https://ranchostoretcg.com.ar/categoria-producto/magic/page/N/ |
| Phoenix Reborn |
https://phoenixreborn.com.ar/inicio/mtg/page/N/ |
| Labatikueva |
https://www.labatikuevastore.com/magic-the-gathering/?mpage=N (Tiendanube) |
| Al Battle |
https://albattletcg.com/magic/<category>/?mpage=N (Tiendanube) |
5. Loop until last page
# Pseudocode
page = 1
all_products = []
while True:
navigate(category_url + f"/page/{page}/")
result = evaluate(scrape_js)
if not result.products:
break
all_products.extend(result.products)
if page >= result.maxPage:
break
page += 1
6. Close browser
browser_close()
Store-specific notes
Bazaar of Baghdad (bazaarmtg.com)
- WooCommerce-based, 12 products/page
- Cash discount: not explicit on site
- Bank transfer discount: assume 5% (verify if needed)
- Categories:
/categoria-producto/magic-the-gathering/<slug>/
secret-lair (5 pages, 60 SLDs)
booster-box (5 pages, 60 boxes)
bundle (2 pages, 14 bundles)
spellbook (1 page)
decks-mazos (1 page)
commander-collection (1 page)
pre-release (1 page)
Rancho Store TCG (ranchostoretcg.com.ar)
- WooCommerce-based, 12 products/page
- Cash discount: 10% (efectivo)
- Bank transfer discount: 5%
- Best for: Marvel preorders, Hobbit/RF preorders, Lorwyn Collector
- Category:
/categoria-producto/magic/page/N/
- 10+ pages of total Magic catalog
Labatikueva (labatikuevastore.com)
- Tiendanube platform — DIFFERENT pagination
- URL:
/magic-the-gathering/?mpage=N
- Need to scroll to load products (JS lazy-loading)
- Products: scroll 5-8 times before scraping
- Cash discount: ~5%
- Selector:
.js-item-product, .item-card, [data-product-id]
Al Battle TCG (albattletcg.com)
- Tiendanube — same as Labatikueva
- Cash/transfer discount: 10% (best!)
- Often deep markdowns on Play Boxes (15-25% off)
- Categories:
/magic/<sub>/?mpage=N
booster-box1 = play boxes
collector-booster-box = collectors
Phoenix Reborn (phoenixreborn.com.ar)
- WooCommerce + Cloudflare protection
- Must wait 5-8 seconds for Cloudflare to clear
- Discount: variable
- Best for: Hobbit Collector (specialty)
- URL:
/inicio/mtg/page/N/
Price interpretation
Argentine prices use periods as thousand separators:
$ 800.000,00 = 800,000 ARS
$ 1.740.000,00 = 1,740,000 ARS
Always convert to USD using the CURRENT exchange rate (ask the user — never assume from memory). Argentine peso moves weekly.
Apply discount AFTER conversion:
- Cash: -10% (Rancho, Al Battle)
- Transfer: -5% (most stores)
Common pitfalls
- Don't trust page 1 only — most categories have 3-5 pages
- Don't skip pagination detection — walk every page
- Don't forget Cloudflare wait for Phoenix Reborn (5-8s)
- Don't ignore Tiendanube scroll for Labatikueva/Al Battle (lazy-loaded)
- Don't conflate ARS thousand-separator periods with decimal points
- Don't apply cash discount twice if site already shows discounted price
- Don't assume exchange rate — always confirm with the user
Output format
Always produce:
- Total product count across all pages
- Best deals ranked by % below market
- Cross-store comparison for same product when available
- TCG market verification for suspected deals via Scryfall/MTGStocks
Example workflow
User: "Survey Bazaar Secret Lairs"
- Navigate page 1 → extract 12 products + detect 5 total pages
- Navigate page 2 → extract 12 products
- Navigate page 3 → extract 12 products
- Navigate page 4 → extract 12 products
- Navigate page 5 → extract 12 products
- Close browser
- Verify top candidates via TCGPlayer/MTGStocks
- Report ranked deals
1---2name: mtg-argentina-playwright3description: Scrape full catalogs of Argentine MTG stores using Playwright MCP. Walks pagination correctly across Bazaar of Baghdad, Rancho Store TCG, Labatikueva, Al Battle TCG, Phoenix Reborn. Use when surveying stores for deals across product categories (Collector Boxes, Bundles, Secret Lairs, Commander Decks, etc).4---56# MTG Argentina — Playwright Full-Catalog Scraper78## When to use9- User asks "what deals are at store X?" or "survey all stores"10- Comparing prices for a specific product across all Argentine retailers11- Looking for SLDs / bundles / commander collections / sealed12- Verifying stock + pricing for a planned purchase1314## CRITICAL — Walk ALL pages, not just page 11516Most stores paginate with **12 products per page**. A category claiming "Secret Lairs" or "Booster Boxes" typically has 3-5 pages. **Always check for pagination and walk every page.**1718## Required tools19- `mcp__plugin_playwright_playwright__browser_navigate` — load page20- `mcp__plugin_playwright_playwright__browser_evaluate` — extract products via JS21- `mcp__plugin_playwright_playwright__browser_wait_for` — handle Cloudflare delays22- `mcp__plugin_playwright_playwright__browser_close` — cleanup2324## Standard scraping flow2526### 1. Navigate to category page 127```28browser_navigate(url=STORE_CATEGORY_URL)29```3031### 2. Wait if needed32Phoenix Reborn has Cloudflare → wait 8 seconds:33```34browser_wait_for(time=8)35```3637### 3. Extract products + detect pagination38```js39() => {40 const products = [];41 document.querySelectorAll('li.product, .product, .item-product, .js-item-product').forEach(card => {42 const name = card.querySelector('.woocommerce-loop-product__title, h2, h3, .name, .js-item-name')?.textContent?.trim();43 const price = card.querySelector('.price, .woocommerce-Price-amount, .js-price-display, .item-price')?.textContent?.trim();44 const stock = card.classList.contains('outofstock') ? 'OOS' : 'in stock';45 if (name) products.push({ name, price, stock });46 });47 const pages = [...document.querySelectorAll('.page-numbers, .pagination a')]48 .map(a => a.textContent.trim())49 .filter(t => /^\d+$/.test(t));50 return { products, maxPage: pages.length ? Math.max(...pages.map(Number)) : 1 };51}52```5354### 4. Walk pagination — URL pattern per store5556| Store | Pagination URL pattern |57|-------|------------------------|58| **Bazaar** | `https://bazaarmtg.com/categoria-producto/magic-the-gathering/<category>/page/N/` |59| **Rancho** | `https://ranchostoretcg.com.ar/categoria-producto/magic/page/N/` |60| **Phoenix Reborn** | `https://phoenixreborn.com.ar/inicio/mtg/page/N/` |61| **Labatikueva** | `https://www.labatikuevastore.com/magic-the-gathering/?mpage=N` (Tiendanube) |62| **Al Battle** | `https://albattletcg.com/magic/<category>/?mpage=N` (Tiendanube) |6364### 5. Loop until last page6566```python67# Pseudocode68page = 169all_products = []70while True:71 navigate(category_url + f"/page/{page}/")72 result = evaluate(scrape_js)73 if not result.products:74 break75 all_products.extend(result.products)76 if page >= result.maxPage:77 break78 page += 179```8081### 6. Close browser82```83browser_close()84```8586## Store-specific notes8788### Bazaar of Baghdad (bazaarmtg.com)89- WooCommerce-based, 12 products/page90- Cash discount: not explicit on site91- Bank transfer discount: assume 5% (verify if needed)92- Categories: `/categoria-producto/magic-the-gathering/<slug>/`93 - `secret-lair` (5 pages, 60 SLDs)94 - `booster-box` (5 pages, 60 boxes)95 - `bundle` (2 pages, 14 bundles)96 - `spellbook` (1 page)97 - `decks-mazos` (1 page)98 - `commander-collection` (1 page)99 - `pre-release` (1 page)100101### Rancho Store TCG (ranchostoretcg.com.ar)102- WooCommerce-based, 12 products/page103- Cash discount: 10% (efectivo)104- Bank transfer discount: 5%105- Best for: Marvel preorders, Hobbit/RF preorders, Lorwyn Collector106- Category: `/categoria-producto/magic/page/N/`107- 10+ pages of total Magic catalog108109### Labatikueva (labatikuevastore.com)110- Tiendanube platform — DIFFERENT pagination111- URL: `/magic-the-gathering/?mpage=N`112- Need to scroll to load products (JS lazy-loading)113- Products: scroll 5-8 times before scraping114- Cash discount: ~5%115- Selector: `.js-item-product, .item-card, [data-product-id]`116117### Al Battle TCG (albattletcg.com)118- Tiendanube — same as Labatikueva119- Cash/transfer discount: **10%** (best!)120- Often deep markdowns on Play Boxes (15-25% off)121- Categories: `/magic/<sub>/?mpage=N`122 - `booster-box1` = play boxes123 - `collector-booster-box` = collectors124125### Phoenix Reborn (phoenixreborn.com.ar)126- WooCommerce + Cloudflare protection127- **Must wait 5-8 seconds** for Cloudflare to clear128- Discount: variable129- Best for: Hobbit Collector (specialty)130- URL: `/inicio/mtg/page/N/`131132## Price interpretation133134Argentine prices use **periods as thousand separators**:135- `$ 800.000,00` = 800,000 ARS136- `$ 1.740.000,00` = 1,740,000 ARS137138**Always convert to USD using the CURRENT exchange rate (ask the user — never assume from memory).** Argentine peso moves weekly.139140Apply discount AFTER conversion:141- Cash: -10% (Rancho, Al Battle)142- Transfer: -5% (most stores)143144## Common pitfalls145146- **Don't trust page 1 only** — most categories have 3-5 pages147- **Don't skip pagination detection** — walk every page148- **Don't forget Cloudflare wait** for Phoenix Reborn (5-8s)149- **Don't ignore Tiendanube scroll** for Labatikueva/Al Battle (lazy-loaded)150- **Don't conflate ARS thousand-separator periods with decimal points**151- **Don't apply cash discount twice** if site already shows discounted price152- **Don't assume exchange rate** — always confirm with the user153154## Output format155156Always produce:1571. **Total product count** across all pages1582. **Best deals** ranked by % below market1593. **Cross-store comparison** for same product when available1604. **TCG market verification** for suspected deals via Scryfall/MTGStocks161162## Example workflow163164User: "Survey Bazaar Secret Lairs"1651661. Navigate page 1 → extract 12 products + detect 5 total pages1672. Navigate page 2 → extract 12 products1683. Navigate page 3 → extract 12 products1694. Navigate page 4 → extract 12 products1705. Navigate page 5 → extract 12 products1716. Close browser1727. Verify top candidates via TCGPlayer/MTGStocks1738. Report ranked deals