Price Scraper for Any Product URL - Breaks 99% of Blocks
Pricing
$1.00 / 1,000 product delivereds
Price Scraper for Any Product URL - Breaks 99% of Blocks
Scrape the live price from any product URL, on any webshop. One URL in, the price out. Breaks through 99% of blocks. Up to 100 URLs per run: price, EAN/GTIN, brand, images, rating and specs. Blocked or non-product URLs are never charged.
Pricing
$1.00 / 1,000 product delivereds
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Universal Price Scraper - Any Product URL, Any Webshop
Paste product URLs from any online shop. Get the live price back.
One scraper instead of one per retailer. It reads the product data shops already publish in their own page markup, so it works on shops it has never seen before rather than on a hand-maintained list.
Reaches 9 out of 10 shops
Measured, not claimed: 999 of 1,100 retail domains returned a usable product page. It gets there by climbing a ladder of routes and browser identities, stopping at the first one that works, so an easy shop costs a fraction of a second and a hard one still comes back.
You are never charged for a row that is not a product
This is the part most price scrapers get wrong, and it is the reason to pick this one.
A dead product URL rarely returns an error. Shops quietly redirect it to the parent category, which still has a heading and a "from" price on it, and a naive scraper hands you that as your product and bills you for it. Challenge screens return a normal HTTP 200 with a title. Page footers parse as titles.
Every one of those is refused here, reported with the reason, and not charged.
What you get
One row per URL, up to 33 fields:
| Field | What it holds |
|---|---|
price, price_currency | Current price as a number, with its ISO currency |
price_original | The pre-discount price, when the page shows one |
shipping_cost, price_with_shipping | Shipping when the page states it, and the total |
title, brand, identifier | Product name, brand, and the shop's own product code |
gtin, gtin_extra | EAN / GTIN / UPC / ISBN, plus any further codes for variants |
availability, condition | Stock status, and new / refurbished / used |
image, images | Main image and the full gallery, with logos and icons filtered out |
rating, review_count | Average score and number of reviews |
specs | Specification table as name/value pairs |
description, category, categories | Description and the breadcrumb path |
offers | Every merchant offer, on price-comparison pages that list more than one |
seller | Who is selling it, when the page names one |
buybox_* | Amazon buybox fields. Populated only where the page publishes them; null otherwise |
Input
{"urls": ["https://www.mediamarkt.de/de/product/_apple-u4-cel-49-blk-ti-trbl-ob-3071784.html","https://www.gamma.nl/assortiment/ring-battery-video-deurbel-plus/p/B237182"]}
Up to 100 URLs per run. Anything past the hundredth is ignored and listed in the run's OUTPUT so you know exactly what was skipped.
Optionally set country to ask for a price from a particular country. Leave it on Automatic unless a shop changes price, currency or availability by where the visitor is.
When a country is named and the page is clearly priced from a different one, that row is reported free of charge rather than billed. fetch_method on every row shows which route produced the price.
Give it the actual product page URL. A category, search or listing page has no single product on it and will be reported as such.
A bare EAN or GTIN code is not a URL and has no page to read, so codes are skipped free of charge and listed in OUTPUT.failed rather than attempted. Use an EAN-to-offers scraper for code lookups.
Output
{"url": "https://www.gamma.nl/assortiment/ring-battery-video-deurbel-plus/p/B237182","domain": "gamma.nl","title": "Ring Battery Video Deurbel Plus","brand": "Ring","gtin": "0840268915315","price": 149.99,"price_currency": "EUR","availability": "InStock","rating": 4.6,"review_count": 50,"images": ["https://..."],"specs": [{ "name": "Kleur", "value": "Zwart" }]}
You are not charged for rows you did not get
This is the part most price scrapers get wrong. A dead product URL rarely returns an error. Shops quietly redirect it to the parent category, which still has a heading and a "from" price on it, and a naive scraper hands you that as your product.
Three checks run before anything is delivered or billed:
- The row has to carry a price or a product identifier. A title on its own comes from category headings and page footers, and is not a result. This is what catches a dead URL that has been redirected to a category page: the page is real and has a heading, but it is not a product.
- The page has to be a real page. Interstitials and challenge screens return a normal HTTP 200 with a title on them. Those are reported as blocked, not as "this product has no price".
- The page has to be the product you asked for. If the URL redirected to a category page, a home page or a login screen, the row is rejected rather than returned as a different product.
Anything rejected appears in OUTPUT.failed with the reason, free of charge. A hundred URLs in can mean ninety rows out, and the run tells you which ten dropped and why.
Coverage, measured
Across 41 live product URLs on 41 different shops in 12 countries: 31 rows delivered, 30 with a price. A hundred URLs finish well inside the run timeout.
Of the ten that returned nothing, four were not our failure to report: three URLs had gone dead and now redirect to a category page, and one carried no price or product code at all. All four were rejected rather than guessed at, and none were billed. On URLs that were still live products, 31 of 37 came back.
Coverage is best on shops that publish structured product data, which is most of retail. A small number running the heaviest bot protection will not return data here.
Good for
- Competitor price monitoring across a list of product pages
- Repricing feeds and margin checks
- Catalogue enrichment: turning a URL into an EAN, images and specs
- MAP and minimum-advertised-price compliance checks
- Filling gaps where a marketplace API gives you no price
Notes
- Give it product URLs, not search or category URLs.
gtinis only set when the shop publishes it unambiguously. A null means it could not be determined, never that a wrong code was returned.offersis populated on price-comparison pages that list several merchants. On an ordinary shop page there is one price, and it is inprice.