Price Comparison — Polish Market
Iterative 5-round product price research on the Polish e-commerce market with warranty verification, shipping costs, and B2B analysis.
IMPORTANT: Load references/polish-market.md at startup — it contains the shop database, price comparators, and search patterns.
Architecture
Tool Purpose Cost
WebSearch
Search for shops, prices, offers Free
WebFetch
Verify prices on shop pages (primary) Free
scrapling
Fallback for sites that block WebFetch Free
No xAI — price comparison doesn't need X/Twitter.
Requirements
No external dependencies required. Skill runs on built-in Claude Code tools.
Optional dependencies:
-
scrapling — fallback for sites that block WebFetch (403, CAPTCHA, empty responses). Install: uv tool install 'scrapling[all]'
-
uv — to run uv run --with openpyxl python3 -c "..." for XLSX export
Workflow Overview
Step Action Purpose
1 Parse query PRODUCT, BUYER_TYPE, CATEGORY
2 Round 1: Discovery Ceneo, Allegro, Amazon.pl, general and specialist shops
3 Gap analysis Missing shops, unverified prices, missing data
4 Round 2: WebFetch shops Confirm prices, stock levels, shipping
5 Round 3: Warranty and shipping Verify warranty type, delivery costs
6 Round 4: B2B and distributors B2B portals, official distributors, statutory warranty
7 Round 5: Final verification Re-check cheapest, stock, coupons
8 Synthesis Comparison table, recommendation, summary
9 Export TXT, XLSX, HTML on request
10 Expert mode Answers from cache, no new searches
WebFetch with Scrapling Fallback
Every WebFetch call in this skill follows a two-tier pattern:
Try WebFetch first (fast, no file I/O):
WebFetch(url, prompt)
If WebFetch fails (403, empty content, CAPTCHA page, or blocked response), retry using the auto-escalation protocol from cli-web-scrape:
-
scrapling extract get "URL" /tmp/scrapling-fallback.md → Read → validate content
-
If content is thin (JS-only shell, no data, mostly nav links) → scrapling extract fetch "URL" /tmp/scrapling-fallback.md --network-idle --disable-resources → Read → validate
-
If still blocked → scrapling extract stealthy-fetch "URL" /tmp/scrapling-fallback.md --solve-cloudflare
-
All tiers fail → skip shop and label "scrapling blocked"
Detection heuristics for blocked/thin responses:
-
HTTP 403 or "access denied" in response
-
Response body is empty or contains only navigation/cookie banners
-
Response contains CAPTCHA challenge (reCAPTCHA, hCaptcha, Cloudflare challenge page)
-
Response is a "please enable JavaScript" page or JS-disabled warning
-
HTTP 200 but no prices, specs, or product names — only nav links and footer (JS-rendered SPA)
If scrapling is not installed, fall back to the original behavior: skip the shop and label "WebFetch blocked".
Step 1: Parse Query
Extract from user query:
1a. PRODUCT
Product name to search. Include model, variant, part number.
1b. BUYER_TYPE
Type Detection Consequences
B2C "for home", "personal", no indication Statutory warranty 24 mo. + voluntary warranty
B2B "for company", "VAT invoice", "business", "B2B" Statutory warranty may be excluded, manufacturer warranty is critical
Default: B2B (safer assumption — triggers more analysis)
1c. CATEGORY
Auto-detect based on product name. Load the appropriate specialist shop list from references/polish-market.md :
Category Detection Patterns Examples
VoIP/Telephony Yealink, Grandstream, Fanvil, SIP, DECT, VoIP Yealink W76P
IT/Networking MikroTik, Ubiquiti, switch, router, AP, firewall MikroTik hAP ax3
Electronics monitor, laptop, computer, printer, tablet Dell U2723QE
Office chair, desk, shredder, projector Ergohuman Elite
General (no match) Nespresso Vertuo
Step 2: Round 1 — Discovery
Query Generation
Generate 6-8 parallel queries:
-
Ceneo: site:ceneo.pl "{PRODUCT}"
-
Allegro: site:allegro.pl "{PRODUCT}"
-
Amazon.pl: site:amazon.pl "{PRODUCT}"
-
General prices: "{PRODUCT}" cena kupić
-
Specialist shops: "{PRODUCT}" sklep (from category list)
-
Price comparator: "{PRODUCT}" porównanie cen
-
Reviews: "{PRODUCT}" opinie recenzje
-
B2B: "{PRODUCT}" dystrybutor hurtownia (if BUYER_TYPE = B2B)
Parallel Execution
Run all WebSearch queries simultaneously (parallel tool calls).
Internal Notes After Round 1
Record (internally, NOT in output):
SHOPS_FOUND: [list of shops with prices] SHOPS_MISSING: [from references/polish-market.md, not found] PRICES_TO_VERIFY: [prices from snippets — need WebFetch] WARRANTY_TO_CHECK: [shops without warranty type info] LEADS: [URLs worth checking via WebFetch in Round 2]
Step 3: Gap Analysis
After Round 1, perform gap analysis:
Gap Check Action
No comparator data Do we have Ceneo data? If not → WebFetch ceneo.pl
No specialist shops How many shops from category in polish-market.md? Search for missing ones
Prices from snippets only Any price confirmed via WebFetch? Plan WebFetch for top 10
No warranty data How many shops have warranty type info? Plan verification
No shipping data How many shops have delivery costs? Plan WebFetch of shipping pages
No marketplace data Were Allegro / Amazon checked? Additional queries
Plan Round 2
Select top 8-12 URLs for WebFetch verification. Priority:
-
Cheapest offers (price verification)
-
Ceneo (lists many shops at once)
-
Specialist shops without price
-
Pages with warranty information
Step 4: Round 2 — WebFetch Shops
Rules
-
Never repeat queries from Round 1
-
WebFetch specific product pages — not homepages
-
In parallel — run 4-6 WebFetch simultaneously
-
Maximum 8-12 WebFetch in this round
Execution
For each URL from the list, apply the WebFetch with Scrapling Fallback pattern:
WebFetch(url, "Podaj: 1) dokładną cenę brutto, 2) dostępność/stan magazynowy, 3) koszty wysyłki, 4) informacje o gwarancji (producenta czy sprzedawcy)")
If WebFetch returns 403, empty content, CAPTCHA, or a blocked response, follow the auto-escalation protocol (HTTP → validate content → Dynamic → Stealthy). Extract the same data points from the scrapling output.
If Ceneo is available, WebFetch the Ceneo page first — it provides a list of many shops at once.
Confidence Update
Source Price Confidence
WebSearch snippet LOW — price may be outdated
Ceneo listing MEDIUM — aggregator, but delays
WebFetch of shop page HIGH — directly confirmed
Scrapling fallback of shop page HIGH — directly confirmed (same as WebFetch)
Step 5: Round 3 — Warranty and Shipping
Goal
For each shop, establish:
-
Warranty type: manufacturer / distributor / seller / unknown
-
Shipping costs: courier, Paczkomat, free shipping (threshold)
-
Delivery time: 24h, 48h, on order
Where to Look for Warranty
-
Product page — "Gwarancja" (Warranty) or "Informacje dodatkowe" (Additional info) section
-
Shop terms of service — search for "gwarancja", "gwarant", "rękojmia"
-
Warranty card — PDF or description in specs
-
WebSearch: site:{shop} gwarancja or site:{shop} regulamin
Warranty Classification
Indicator Type
"gwarancja producenta", "producent: [brand]" MANUFACTURER
"gwarancja dystrybutora", distributor name as guarantor DISTRIBUTOR
"gwarantem jest [shop name]", "gwarancja [shop]" SELLER
No information UNKNOWN
Load references/warranty-guide.md if deeper B2B or statutory warranty analysis is needed.
Shipping Costs
WebFetch the "Dostawa" (Delivery) or "Wysyłka" (Shipping) page for top 10 shops, using the WebFetch with Scrapling Fallback pattern:
WebFetch(shipping_url, "Podaj wszystkie opcje dostawy z cenami: kurier, Paczkomat, Poczta Polska, odbiór osobisty, darmowa wysyłka (od jakiej kwoty)")
On blocked response, follow the auto-escalation protocol (HTTP → validate content → Dynamic → Stealthy) and extract delivery options from the scrapling output.
Step 6: Round 4 — B2B and Distributors
Goal
-
Identify official distributors of the brand in Poland
-
B2B portals — wholesale prices, business terms
-
B2B statutory warranty — do shops exclude statutory warranty for businesses
Queries
WebSearch: "{BRAND} dystrybutor Polska" WebSearch: "{BRAND} importer Polska" WebSearch: "{BRAND} autoryzowany sprzedawca" WebSearch: "{PRODUCT}" site:ab.pl OR site:action.pl OR site:also.pl
B2B Statutory Warranty Verification
For top 5 cheapest shops, apply the WebFetch with Scrapling Fallback pattern:
WebFetch(terms_url, "Czy regulamin wyłącza rękojmię dla przedsiębiorców? Szukaj: Art. 558 KC, wyłączenie rękojmi, przedsiębiorca, firma")
On blocked response, follow the auto-escalation protocol (HTTP → validate content → Dynamic → Stealthy) and search the scrapling output for statutory warranty exclusion clauses.
Distribution Chain
Establish the chain: Manufacturer → PL Importer → Distributor → Reseller → Customer
For each distributor record:
-
Company name
-
Role (importer / distributor / authorized reseller)
-
Website
-
Service contact details (if available)
Step 7: Round 5 — Final Verification
Goal
Final verification before synthesis. Verification only, no discovering new shops.
Checklist
-
Re-check top 3 cheapest — WebFetch again, price may have changed
-
Stock — is the product in stock (not "on order")
-
Coupons/promotions — "{PRODUCT}" kupon zniżka promocja
-
Alternative offers on Allegro — check 2-3 offers from different sellers
-
Compare Allegro vs direct shop — price, warranty, safety
Budget
Maximum 6-8 WebFetch in this round.
Step 8: Synthesis
Main Table
Sort by total price (price + cheapest shipping):
| Shop | Gross Price | Shipping (cheapest) | Price+Shipping | Mfr. Warranty | Availability
--+--------------------+-------------+---------------------+----------------+-------------------+------------------ 1 | shop.pl | 489.00 PLN | InPost courier 12 | 501.00 PLN | YES — service.pl | Yes (1987 pcs) 2 | morele.net | 496.30 PLN | FREE from 399 PLN | 496.30 PLN | YES — "Manufacturer" | Yes (11 pcs)
Warranty Legend
YES = confirmed manufacturer warranty (verification source) NO = seller's own warranty (not manufacturer) ? = not verified at source n/a = no data
Report Sections
TOP 3 — with confirmed manufacturer warranty
-
Table: Shop, Price incl. shipping, Warranty, Notes
Full comparison table
-
All found shops, sorted by price+shipping
Allegro — offers
-
Seller, Price, Manufacturer warranty, Link
Warranty — key findings
-
Manufacturer policy (global)
-
PL Distributor (extended warranty?)
-
Service center in Poland
-
Manufacturer vs seller warranty (shop list)
-
B2B: statutory warranty and its exclusion
Official distributors in Poland
-
Table: Company, Role, Website
Product specifications
-
Key technical parameters
Purchase recommendation
-
For B2C: top 3 with price, warranty, reasoning
-
For B2B: top 3 considering statutory warranty and manufacturer warranty
-
What to avoid and why
Confidence Indicators
Label each piece of information:
Confidence When
[HIGH] Confirmed via WebFetch or scrapling from shop page
[MEDIUM] From Ceneo/comparator or single source
[LOW] From WebSearch snippets only
Step 9: Export
Generate files on user request:
TXT
Fixed-width column file, same format as synthesis tables.
XLSX
Load references/export-formats.md and generate an Excel spreadsheet with:
-
Conditional coloring (green=manufacturer warranty, red=seller)
-
Filters and frozen headers
-
Multiple sheets (comparison, warranty, distributors, specifications)
HTML
Load references/export-formats.md and generate standalone HTML with:
-
Dark theme, embedded CSS
-
Tabs for report sections
-
Colored badges for warranty types
-
Responsive layout
Step 10: Expert Mode
After delivering the report, switch to Expert Mode:
-
Answer questions from collected data
-
No new searches unless user requests
-
Compare offers, advise
New search triggers (exit Expert Mode):
-
"Search again..."
-
"Find more about..."
-
"Update the data..."
-
"Check also..."
Parameters
Always deep mode — 5 rounds, 25-40 shops, 20-30 WebFetch.
Parameter Value
Rounds 5
Shops 25-40
WebFetch 20-30
Constraints (DO/DON'T)
DO:
-
Always start from Ceneo.pl — best price comparator in PL
-
WebFetch to verify prices — search snippets are unreliable
-
Distinguish manufacturer warranty from seller warranty — this is critical
-
Include shipping costs in ranking — price without shipping is incomplete
-
Search for official brand distributors in Poland
-
For B2B: check statutory warranty exclusion in terms of service
-
Run WebSearch in parallel (parallel tool calls)
-
Cite the source of each piece of information (shop URL)
-
Load references/polish-market.md at startup
DON'T:
-
Don't trust snippet prices without WebFetch verification
-
Don't skip shipping costs in comparison
-
Don't assume "24 months warranty" = manufacturer warranty
-
Don't repeat queries from previous rounds
-
Don't discover new shops in Round 5 — verification only
-
Don't quote more than 125 characters from a single source
-
Don't run queries sequentially when they can be parallel
Error Handling
Error Resolution
WebFetch 403/CAPTCHA/empty Follow auto-escalation protocol from cli-web-scrape: HTTP tier → validate content → Dynamic tier → Stealthy tier. If scrapling unavailable or all tiers fail, skip shop and label "blocked"
Ceneo returns no results Search directly in shops from polish-market.md
Allegro blocks scraping Use WebSearch site:allegro.pl , not WebFetch
No price on page Label "n/a", skip in ranking
Conflicting prices (snippet vs WebFetch) Always trust WebFetch (or scrapling if WebFetch was blocked)
References
-
references/polish-market.md — Shop and comparator database (loaded ALWAYS)
-
references/warranty-guide.md — Statutory vs voluntary warranty, Polish law, B2B checklist
-
references/export-formats.md — TXT/XLSX/HTML templates with generation instructions