Universal price scraper avatar

Universal price scraper

Pricing

from $45.00 / 1,000 result scrapeds

Go to Apify Store
Universal price scraper

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

Gergő Gyulai

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

5 days ago

Last modified

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:

  1. JSON-LD structured data (Product / Offer / AggregateOffer) — the gold standard, used by most modern e-commerce platforms
  2. OpenGraph / product meta tags (og:price:amount, product:price:amount, twitter:data1)
  3. Schema.org microdata ([itemprop="price"], [itemprop="priceCurrency"])
  4. CSS heuristics — common price classes (.price, .product-price, .sale-price, [data-price], …) or your own selector if you pass one
  5. 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 codesHUF, 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, , , лв, , , , ).

🔢 Locale-aware number parsing

No more hand-written regex per country:

InputParsed
12 990 Ft12990 HUF
12.990,50 €12990.50 EUR
12,990.50 USD12990.50 USD
$1,2991299 USD
52900.0052900 + 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 .offerListHoverContainer blocks with prices + shipping
  • arukereso.hu — extracts all offers from .optoffer blocks 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"]
}
}
FieldDescription
startUrls[].urlAny 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.
maxRequestsPerCrawlSafety cap on pages per run. Default: 100.
excludeShopsHide your own shop (or any shop) from the returned offer list.
proxyConfigurationResidential 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"
}
FieldDescription
source'argep', 'arukereso', or 'universal' — which strategy handled the URL.
offersUp to 20 offers, sorted by price ascending, deduplicated by (seller, price).
offers[].priceNumber. Decimals preserved (49.99 EUR); integer for whole-unit currencies (12990 HUF).
offers[].currencyISO 4217 code, or null if it couldn't be detected.
offers[].shipping0 for free shipping; number otherwise.
fetchedAtISO-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.