price-comparison
Shopping price comparison using Bright Data's web scraping infrastructure. Finds where a product is sold, for how much, and whether it's in stock — across Amazon, Walmart, eBay, Best Buy, Google Shopping, and any retailer URL — then ranks the offers into a single buy-recommendation table. Use this skill when the user wants to compare prices, find the cheapest place to buy something, do a price check, see "how much does X cost on Amazon vs Walmart", track an item's price, or decide where to buy a product. Handles product names, ASINs, and direct URLs, and is region-aware (country affects price, availability, and which retailers apply). This is consumer purchase-decision research — for analyzing a competitor's pricing *strategy*, use competitive-intel instead.
NPX Install
npx skill4agent add brightdata/skills price-comparisonTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Price Comparison
bdataPrerequisites
- Bright Data CLI installed:
bash
curl -fsSL https://cli.brightdata.com/install.sh | bash - One-time login completed:
bash
bdata login # or: bdata login --device (SSH / headless)
if ! command -v bdata >/dev/null 2>&1; then
echo "bdata CLI not installed — see skills/bright-data-best-practices/references/cli-setup.md"
elif ! bdata zones >/dev/null 2>&1; then
echo "bdata not authenticated — run: bdata login"
fiCore Workflow
- Clarify scope — What product (name, ASIN, or URL)? Which retailers (default: Amazon + Google Shopping)? Which country/region (default: US — it changes price, currency, availability, and which retailers apply)? What matters beyond price (reviews, shipping/Prime, new vs refurbished)?
- Resolve, then collect — If you only have a product name, use
and
amazon_product_searchto resolve it to concrete product URLs/offers, then pull each retailer's structured data. Parallelize independent calls.bdata search --type shopping - Normalize — Collapse every result into the single offer schema in references/output-and-pricing.md before comparing. Convert all prices to one currency and note the rate + date used.
- Rank & flag — Sort by total landed cost (price + shipping). Flag out-of-stock, refurbished/used, and third-party-seller offers — a lower price that's unavailable or used is not the winner by default.
- Deliver — Produce the comparison table (Output A), then the explicit "Best buy" recommendation. Every report names the cheapest in-stock option and any meaningful trade-offs.
Data Collection Rules
- Resolve names to URLs first. You rarely have clean URLs up front. Use
and
amazon_product_search "<query>" "https://www.amazon.com"to find the exact items, then feed those URLs to product pipelines.bdata search "<product>" --type shopping --json - Prefer pipelines over scraping for supported retailers. Amazon, Walmart,
eBay, Best Buy, Google Shopping all have structured pipelines that return
clean price/availability/rating JSON. Never — Amazon blocks scrapers; the pipeline bypasses that reliably.
bdata scrape amazon.com - Always pass when you need to parse or compare output.
--json - Be cost-efficient — a standard comparison is ~3–8 calls, not 50. Pull the offers the user asked about, not every seller on the page.
bdata - Parallelize independent calls across multiple Bash tool calls in one response — don't wait for Amazon before starting Walmart.
- Every price needs a source URL and a collection timestamp. No unattributed or undated prices, ever.
- Never fabricate a price or fill gaps. If a retailer returns nothing, report it in "Gaps & caveats".
Retailer Modules
Amazon — by URL or ASIN
bdata pipelines amazon_product "https://www.amazon.com/dp/<ASIN>" --json -o amazon.jsonfinal_priceamazon.comamazon.deamazon.co.ukAmazon — discover by keyword (when you only have a name)
bdata pipelines amazon_product_search "iPhone 17 Pro 256GB" "https://www.amazon.com" --json -o amzn_search.jsonamazon_productWalmart / eBay / Best Buy — by product URL
bdata pipelines walmart_product "https://www.walmart.com/ip/<ID>" --json -o walmart.json
bdata pipelines ebay_product "https://www.ebay.com/itm/<ID>" --json -o ebay.json
bdata pipelines bestbuy_products "https://www.bestbuy.com/site/<ID>.p" --json -o bestbuy.jsonGoogle Shopping — cross-retailer overview
bdata pipelines google_shopping "<google-shopping-product-url>" --json -o gshopping.jsonbdata search "iPhone 17 Pro 256GB" --type shopping --country us --jsonUnknown / local retailer — scrape the page
bdata scrape "https://retailer.example/product-page"Pipeline names are inconsistent (singular,amazon_productplural,bestbuy_products). Confirm with the type list before hardcoding — thewalmart_productskill has the verified list, and keyword/multi-arg pipelines (data-feeds) takeamazon_product_search, not a single URL.<keyword> <domain_url>
Region Handling
- Country changes everything — price, currency, stock, and which retailers exist. Always confirm the region before running; default US only if the user doesn't say.
- Pass to
--country <code>for localized SERP/shopping results (e.g.bdata searchfor Israel,--country il,de).uk - Use the local Amazon domain in product URLs. Many regions (e.g. Israel)
buy via with international shipping and via local chains — cover both and label shipping/import implications.
amazon.com - Normalize currencies to one display currency, state the rate and the date you used, and keep each offer's original-currency price in the dataset.
Output
- The normalized offer record schema (row shape for both the table and the dataset output).
- Total-cost ranking rules (price + shipping + import/tax where known; in-stock and condition gates before declaring a winner).
- Currency normalization conventions.
- Output templates — A (comparison table + recommendation), B (structured dataset), C (both).
Output Quality Standards
- Every price has a source URL and a timestamp — no undated, unattributed prices.
- Always show availability next to price — a cheaper out-of-stock offer is not the winner. Flag refurbished/used/third-party explicitly.
- Name one "Best buy" — the cheapest in-stock, comparable-condition option, with the runner-up and why someone might pick it instead.
- Be honest about gaps — list retailers that returned nothing or were gated this run. Note when a price looks stale or is a "from" range.
- State currency and region — "$ USD · region: US" or the rate used for conversions.
- Never estimate a missing price. Report the gap; don't fill it.