Universal price scraper
Pricing
from $45.00 / 1,000 result scrapeds
Universal price scraper
Universal competitor-price scraper. Extracts prices with currency from any product page - auto-detects argep.hu and arukereso.hu offer lists. Highly customizable
Pricing
from $45.00 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Gergő Gyulai
Actor stats
0
Bookmarked
3
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
🛒 Universal Product Price Scraper
One actor. Any shop. Real prices, real currencies.
Drop in a product URL — from a comparison site like ÁrGép, from a generic Shopify store, or from that weirdly-built niche shop nobody's ever scraped before — and get back the price and currency. No per-site integration work. No maintenance of a hundred CSS selectors.
Why this actor?
⚡️ Two-pass fetching cuts your bill
We try every unknown shop without a proxy first. Most sites just serve HTML — no bot wall, no retry needed. Only the stubborn pages escalate to residential-proxy mode. You pay the same flat rate either way, but the actor uses proxy bandwidth only when it has to.
🌍 Works on sites we've never seen
A 5-tier extraction cascade handles the long tail:
- JSON-LD structured data (
Product/Offer/AggregateOffer) — the gold standard, used by most modern e-commerce platforms - OpenGraph / product meta tags (
og:price:amount,product:price:amount,twitter:data1) - Schema.org microdata (
[itemprop="price"],[itemprop="priceCurrency"]) - CSS heuristics — common price classes (
.price,.product-price,.sale-price,[data-price], …) or your own selector if you pass one - Regex scan of visible text — as a last resort, picks the most-repeated amount+currency pair on the page
Higher tiers are used first. If JSON-LD is there, we don't guess from CSS.
💱 Currency detected automatically
Returns ISO 4217 codes — HUF, EUR, USD, GBP, PLN, CZK, RON, SEK, DKK, NOK, CHF, JPY, BGN, HRK, UAH, RUB, TRY, INR, and more — parsed from structured data, meta tags, or inline symbols (€, $, £, ¥, Ft, zł, Kč, лв, ₴, ₽, ₺, ₹).
🔢 Locale-aware number parsing
No more hand-written regex per country:
| Input | Parsed |
|---|---|
12 990 Ft | 12990 HUF |
12.990,50 € | 12990.50 EUR |
12,990.50 USD | 12990.50 USD |
$1,299 | 1299 USD |
52900.00 | 52900 + currency inferred from page |
🥷 Camoufox stealth
The actor ships with Camoufox — a hardened Firefox that defeats the bot walls on argep.hu, arukereso.hu, and most major anti-scraping setups. Combined with Apify's residential proxy pool, it gets through where generic headless browsers get blocked.
🚀 Fast by default
Images, videos, and fonts are aborted before they load on every page — we only care about the price markup, not the hero banner. Typical pages finish in 3–8 seconds.
💶 Competition-site support out of the box
Ready-made extractors for the two largest Hungarian price-comparison sites:
argep.hu— extracts the full seller list from.offerListHoverContainerblocks with prices + shippingarukereso.hu— extracts all offers from.optofferblocks via Schema.org microdata
One run can mix comparison-site URLs and any-site URLs freely.
Input
{"startUrls": [{ "url": "https://www.argep.hu/product/example-p12345/" },{ "url": "https://www.arukereso.hu/..." },{ "url": "https://shop.example.com/p/widget-42" },{"url": "https://stubborn-site.example/product/xyz","userData": { "cssSelector": ".product__price--sale" }}],"maxRequestsPerCrawl": 100,"excludeShops": ["myshop.hu"],"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
| Field | Description |
|---|---|
startUrls[].url | Any product URL. The actor auto-detects the host and picks the right strategy. |
startUrls[].userData.cssSelector | (optional) Pin a specific CSS selector for the price element when defaults aren't enough. Applied at step 4 of the cascade. |
maxRequestsPerCrawl | Safety cap on pages per run. Default: 100. |
excludeShops | Hide your own shop (or any shop) from the returned offer list. |
proxyConfiguration | Residential proxy is strongly recommended for pass 2 and for comparison sites. |
Output
Successful comparison-site scrape (all sellers):
{"url": "https://www.argep.hu/product/example-p12345/","source": "argep","offers": [{ "seller": "ShopA", "price": 184900, "currency": "HUF" },{ "seller": "ShopB", "price": 189000, "currency": "HUF", "shipping": 1990, "shippingCurrency": "HUF" }],"fetchedAt": "2026-04-17T12:00:00.000Z"}
Successful universal scrape (single offer, seller = hostname):
{"url": "https://shop.example.com/p/widget-42","source": "universal","offers": [{ "seller": "shop.example.com", "price": 49.99, "currency": "EUR" }],"fetchedAt": "2026-04-17T12:00:00.000Z"}
No price found:
{"url": "...","source": "universal","offers": [],"error": "No offers found","fetchedAt": "2026-04-17T12:00:00.000Z"}
| Field | Description |
|---|---|
source | 'argep', 'arukereso', or 'universal' — which strategy handled the URL. |
offers | Up to 20 offers, sorted by price ascending, deduplicated by (seller, price). |
offers[].price | Number. Decimals preserved (49.99 EUR); integer for whole-unit currencies (12990 HUF). |
offers[].currency | ISO 4217 code, or null if it couldn't be detected. |
offers[].shipping | 0 for free shipping; number otherwise. |
fetchedAt | ISO-8601 timestamp. |
Pricing
$0.015 per successfully scraped page — pay-per-event.
You're charged only when the actor actually extracts at least one price from a URL. Failed scrapes, blocked pages, and empty results are free.
Real use cases
- Competitive price monitoring — track what every competitor charges across comparison sites and their own stores in one run
- Price-drop alerts — schedule daily/hourly runs, diff against the previous dataset, alert on change
- Marketplace research — feed hundreds of URLs from mixed sources into one job
- Product catalog hydration — enrich your own SKU database with live market prices and currencies
- MAP (Minimum Advertised Price) enforcement — catch resellers listing below your floor
FAQ
Can I use it on sites outside Hungary? Yes — the universal extractor is language- and currency-agnostic. We've tested against EUR, USD, GBP, PLN, CZK, and more.
What happens on JavaScript-rendered SPAs? The actor is a full browser (Camoufox), so JS executes before extraction. If the price is rendered client-side, we'll still see it.
What if the default CSS heuristics pick the wrong price (e.g., crossed-out old price)?
Pass userData.cssSelector on that URL. The override is used at step 4 in place of the generic class list, so you pin the exact element you want.
What data does it return for universal URLs that I can't get elsewhere? Price, currency, and the seller hostname. Comparison-site scrapes return full seller lists — that's where the multi-offer shape shines.
How does the two-pass strategy save me money? Pass 1 runs without a proxy. For easy pages, that's all it takes — no residential-proxy bandwidth, no retries, same billing rate. Proxy-gated sites still work, they just take the scenic route.
Can I throttle or limit the run?
Set maxRequestsPerCrawl to cap the number of pages. Apify's per-actor spending limits also apply automatically.
Is it legal / ethical to scrape these sites? That's on you, the person running the actor. This tool gives you the technical capability to fetch publicly visible prices — it doesn't grant you permission to do so. You are solely responsible for:
- Complying with each target site's Terms of Service and
robots.txt - Respecting rate limits and not overloading any server
- Complying with GDPR, CCPA, local data-protection law, and applicable competition law in your jurisdiction
- Making sure you have a lawful basis to collect, store, and use the data you fetch
- Honoring any cease-and-desist or opt-out request you receive from a target site
The author(s) and Apify provide this actor as-is, with no warranty, and accept no liability for how it's used, what it's pointed at, or any consequences downstream. If you're unsure whether a specific use case is permissible, consult a lawyer before running it at scale.
Let's go
Run this actor on Apify with a sample URL and see what comes back. Feedback, feature requests, and weird edge-case URLs all welcome.