Rozetka Products Scraper
Pricing
from $0.56 / 1,000 results
Rozetka Products Scraper
Product listings from Rozetka, Ukraine's largest online retailer: title, brand, price in UAH with its validity date, stock status, rating and review count. Reads the category page's own structured data, so recommendation rails are excluded rather than scraped as results.
Pricing
from $0.56 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Rozetka Products Scraper (Ukraine)
Product listings from Rozetka, Ukraine's largest online retailer — as structured rows: title, brand, price in UAH with its validity date, stock status, rating and review count.
The two things that quietly break a Rozetka crawl
Past page 100 it re-serves, it does not stop. Measured by comparing each page's product ids against the page before it:
| Page | Result |
|---|---|
| 98, 99, 100 | 60 products, all new |
| 101, 105, 120, 200 | 60 products, identical to page 100 |
No 404, no empty page, no flag. A crawler that treats "a full page means there
is more" will run to whatever maxPages it was given, collect the same 60
products over and over, and report a large successful run. This Actor caps at
page 100 and deduplicates by product id, so a page that adds nothing new ends
the run with stoppedReason: no_new_products.
The page links to more products than it lists. A category page carries 60
structured ItemList entries but 73–95 distinct /p<id>/ links, and the
surplus changes from page to page. Those extras are cross-sell and
recommendation rails carrying products from other categories entirely.
Sweeping links would contaminate a category dataset by a varying amount per
page. Rows come from the structured list only.
What you get
One CATEGORY_SUMMARY row per category, then one PRODUCT row per item.
| Group | Fields |
|---|---|
| Identity | productId, productUrl, title, description, brand |
| Price | price, currency, priceValidUntil |
| Availability | availability, inStock |
| Reception | ratingValue, reviewCount |
| Media | imageUrls |
| Provenance | _input, _source, _scrapedAt, pageFound, positionInPage, raw |
priceValidUntil is Rozetka's own published price-validity date, which is
genuinely useful when comparing one run against a later one.
The summary row reports upstreamCategoryTotal beside
reachableCeiling. The notebooks category announces 211,766 products;
paging reaches 6,000 of them. The count is not a lie about the catalogue — it
is a lie about what you can retrieve, by a factor of about 35. To get more,
narrow to a sub-category or a producer rather than paging deeper.
Example input
{"categoryUrls": ["https://rozetka.com.ua/notebooks/c80004/","https://rozetka.com.ua/mobile-phones/c80003/"],"maxPages": 50}
Paste category URLs straight from the site. Producer-filtered category URLs work too, because Rozetka expresses those as path segments.
Why there is no keyword search or sort input
That is a policy decision, not an omission. Rozetka's robots.txt says:
Disallow: /*?* any URL with a query stringDisallow: */search/ keyword searchDisallow: /*sort=* re-sortingAllow: /api/*/*
So keyword search and sorting are closed, and nothing may carry a query
string. Category browsing works because Rozetka paginates and filters through
path segments (/notebooks/c80004/page=2/, /producer=asus/), which are
allowed. Any URL you pass carrying a query string, a /search/ path or a
sort= segment is refused before a request is made rather than sent and
regretted.
How it works
HTTP-only. No browser, no login, no API key.
Category pages are server-rendered with their results published as schema.org JSON-LD, which is where every field above comes from.
The TLS profile pool is an allowlist, not a preference: on the same URL in
the same minute, five fingerprints receive a 1.45 MB page and edge101
receives a 5 KB 403. Only verified-passing profiles are in the rotation, so a
retry can never rotate into a guaranteed block.