res-price-compare
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 runuv 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} gwarancjaorsite:{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.mdat 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 checklistreferences/export-formats.md— TXT/XLSX/HTML templates with generation instructions
More from molechowski/claude-skills
doc-vault-project
Manage multi-note research projects in Obsidian vault with phased subdirectory structure (concept, research, design, implementation). Scaffold new projects, add component notes, track status, link existing research, promote topics to projects. Use when: creating a project, adding to a project, checking project status, linking research to a project, promoting a research topic to a full project. Triggers: project init, project add, project status, project link, project promote, create project, new project.
35res-deep
Iterative multi-round deep research with structured analysis frameworks. Use for: deep research on a topic, compare X vs Y, landscape analysis, evaluate options for a decision, deep dive into a technology, comprehensive research with cross-referencing. Triggers: deep research, compare, landscape, evaluate, deep dive, comprehensive research, which is better, should we use.
35doc-daily-digest
Process Obsidian daily notes: classify raw URLs and loose ideas, fetch content (X tweets, GitHub repos, web pages), run deep research on ideas, create structured vault notes, replace raw items with wikilinks. Orchestrates doc-obsidian, res-x, and res-deep skills. Use when: processing daily note links, digesting saved URLs into notes, turning ideas into research, daily note cleanup. Triggers: daily digest, process daily, daily links, triage daily, digest daily note.
35res-x
Fetch X/Twitter tweet content by URL and search X posts. Resolves tweet links that WebFetch cannot scrape. Use for: reading saved X/Twitter links, fetching tweet content from URLs, searching X for posts on a topic, batch-processing X links from notes. Triggers: x.com link, twitter.com link, fetch tweet, read tweet, what does this tweet say, X search, twitter search.
34doc-project
Update all project documentation in one pass: CLAUDE.md, AGENTS.md, README.md, SKILLS.md, CHANGELOG.md. Orchestrates doc-claude-md, doc-readme, doc-skills-md, and doc-changelog skills sequentially. Use when: project docs are stale, after major changes, initial project setup, sync all docs. Triggers: update all docs, update project docs, sync documentation, refresh docs, doc-project.
34doc-obsidian
Obsidian vault management combining qmd (search) and notesmd-cli (CRUD). No Obsidian app needed. Use for: (1) searching notes with keyword, semantic, or hybrid search, (2) creating/editing/moving/deleting notes, (3) daily journaling, (4) frontmatter management, (5) backlink discovery, (6) AI agent memory workflows, (7) vault automation and scripting. Triggers: obsidian vault, obsidian notes, vault search, note management, daily notes, agent memory, knowledge base, markdown vault.
34