Prom.ua Product Search Scraper
Pricing
$2.00 / 1,000 prom.ua products
Prom.ua Product Search Scraper
Scrape Prom.ua search results without a browser or proxy. Each product returns URL, title, regular and discounted price in UAH, image, seller name, seller store URL, stock status and search rank. Sort by price, filter by price range or review quality. $2.00 per 1,000 products.
Pricing
$2.00 / 1,000 prom.ua products
Rating
0.0
(0)
Developer
Yevhenii Molodtsov
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Prom.ua Product Search Scraper (Pay Per Result)
Search Prom.ua — Ukraine's largest e-commerce marketplace, 100M+ product listings — and get every result back as a clean row: product URL, title, regular and discounted price in UAH, image, seller name, seller store URL, stock status and search position. No browser, no proxy, no login. You pay only per product returned.
100 products in 31 seconds, $2.00 per 1,000 products.
Built for Ukraine e-commerce data work: competitor price tracking, product price monitoring across Ukrainian sellers, assortment and catalogue research, and marketplace stock checks.
Why this scraper
| This scraper | Other prom.ua actors on Apify Store | |
|---|---|---|
| Price per 1,000 products | $2.00 | $2.00 – $15.00 |
| Input | Any keyword — no URLs needed | Category or product URLs you must already have |
| Search rank per product | Yes (position field) | No — they don't run searches |
- 💸 $2.00 per 1,000 products, no monthly fee. You pay for results, not for a subscription or for runtime.
- 🪶 Plain HTTP, no browser. The actor reads the search page's Apollo GraphQL cache instead of rendering it, which is why a 100-product run costs about $0.004 of Apify platform usage at the default 1 GB memory.
- 🔍 29 products per search page come out of the Apollo cache — roughly 3x what the page renders in the DOM — so fewer requests are needed per 1,000 products.
- 🌐 No proxy required. Verified working straight from Apify datacenter IPs with
use_apify_proxyoff. No login and no cookies either. - 🇺🇦 Ukrainian and English keywords both work (
ноутбуки,жіночі сумки,smartphone). - ↕️ Server-side sorting and price filters —
price_asc,price_desc,min_price,max_priceare applied by Prom.ua across the whole result set, not sorted client-side after the fact. - 🚨 Fails loudly instead of returning nothing. An unfiltered search that extracts 0 products FAILS the run — a green run with an empty dataset can never quietly poison your pipeline.
Quickstart
- Open the actor in Apify Console and type your keyword into Search term (Ukrainian/Cyrillic or English).
- Set Maximum items — how many products to collect (1–1000).
- Click Start, then export the dataset as JSON, CSV, Excel, XML or JSONL.
{"search_term": "ноутбуки","max_items": 100}
A price-tracking run — cheapest offers in a band, sorted by price:
{"search_term": "ноутбуки","max_items": 200,"sort_option": "price_asc","min_price": 10000,"max_price": 50000}
Input parameters
| Parameter | Type | Default | Notes |
|---|---|---|---|
search_term | string | required | The keyword to search on Prom.ua. Ukrainian/Cyrillic or English, e.g. ноутбуки, жіночі сумки, smartphone. One search term per run. |
max_items | integer | 10 | How many products to collect, 1–1000. Pagination is automatic; 1000 is the per-run maximum. |
sort_option | string | "default" | default, price_asc (cheapest first), price_desc (most expensive first), or relevance. Applied server-side by Prom.ua. |
min_price | integer | — | Minimum price in UAH. Server-side filter. |
max_price | integer | — | Maximum price in UAH. Server-side filter. |
use_apify_proxy | boolean | false | Optional and normally unnecessary — scraping is verified working with no proxy. |
media_only | boolean | false | Only products whose customer reviews include photos or videos. Narrow filter — can legitimately return few or zero products. |
good_ratings_only | boolean | false | Only products rated 4★ and above. If media_only is also on, media_only wins. |
debug_mode | boolean | false | Verbose logging for troubleshooting. Leave off for normal runs. |
Output
One dataset item per product, with exactly these 10 fields — all of them always present:
{"url": "https://prom.ua/ua/p3117734131-noutbuk-acer-nitro.html","title": "Ноутбук Б/В Acer Nitro AN515-51:15.6 Full HD, Core i5-7300HQ,16GB DDR4,GTX 1050 2Gb,SSD 512Gb","regular_price_uah": 14200.0,"discounted_price_uah": 13490.0,"currency": "UAH","image_url": "https://images.prom.ua/7546062934_w400_h400_noutbuk-bv-acer.jpg","seller_name": "IT Teh\"Nika\"","seller_url": "https://prom.ua/ua/c3831977-tehnika.html","in_stock": true,"position": 1}
| Field | Type | Description |
|---|---|---|
url | string | Working product page URL (https://prom.ua/ua/p{id}-{slug}.html). |
title | string | Product title as listed, in its original language. |
regular_price_uah | float | List price in Ukrainian hryvnia. |
discounted_price_uah | float | null | Sale price in UAH, or null when the product is not discounted. |
currency | string | Always "UAH". |
image_url | string | Product image on the Prom.ua CDN (400x400). |
seller_name | string | Seller / company name. |
seller_url | string | Working seller store page URL. |
in_stock | boolean | Availability as shown in the search results. |
position | integer | 1-based rank in the search results — the field to diff between runs for ranking and share-of-shelf tracking. |
A product whose URL cannot be built is dropped from the dataset rather than emitted with an
empty url, so every row you are billed for links to a real page.
What this scraper does not return
This is a search-results scraper. It reads what the Prom.ua search page carries and does not open individual product pages, so:
- ❌ No product descriptions and no specifications — those live on the product page.
- ❌ No review texts or review counts.
media_onlyandgood_ratings_onlyfilter by review properties, but review content itself is not returned. - ❌ No seller phone numbers or contact details.
- ❌ One
search_termper run. For several keywords, start several runs (that also keeps each dataset cleanly scoped to one term). - ❌ Maximum 1,000 products per search term per run.
- ℹ️ Prices are exactly what the search page shows, in UAH.
Use url and seller_url from the output as input to a product-page scraper if you need the
deeper fields.
Pricing: what counts as a result
$0.002 per dataset item — $2.00 per 1,000 products. Every product pushed to the dataset is one paid result. No monthly fee.
| Run | Actor cost | Apify platform usage | Total |
|---|---|---|---|
| 100 products | $0.20 | ~$0.01 | ~$0.21 |
| 1,000 products | $2.00 | ~$0.02 | ~$2.02 |
Apify platform usage (compute, storage, transfer) is billed separately by Apify at their standard rates. This actor is very light on it — a measured 100-product run used $0.004 and finished in 31 seconds at the default 1 GB memory.
Run status contract
- SUCCEEDED — items were delivered. With
media_only,good_ratings_onlyor price bounds set, 0 results is a legitimate SUCCEEDED outcome: the filter simply matched nothing. - FAILED, with
0 products extractedin the log — an unfiltered search returned nothing, which means Prom.ua changed its markup or blocked the request. The run never goes green with an empty dataset. Report it and we fix it fast.
Automated callers can treat SUCCEEDED as "the dataset is authoritative" and retry or alert on FAILED.
Integrations
Run via API with curl:
curl -X POST "https://api.apify.com/v2/acts/xmolodtsov~prom-ua/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"search_term": "ноутбуки", "max_items": 100, "sort_option": "price_asc"}'
With the Apify JavaScript client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('xmolodtsov/prom-ua').call({search_term: 'ноутбуки',max_items: 100,sort_option: 'price_asc',min_price: 10000,max_price: 50000,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
With the Apify Python client:
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("xmolodtsov/prom-ua").call(run_input={"search_term": "жіночі сумки","max_items": 200,"sort_option": "price_desc",})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["position"], item["title"], item["regular_price_uah"])
Datasets export to JSON, CSV, Excel, XML, JSONL, RSS and HTML from Console or API. Use Apify Schedules to re-run the same keyword daily for price monitoring, and webhooks to push each finished run into your own pipeline.
FAQ
Do I need a proxy?
No. Runs are verified working from Apify datacenter IPs with use_apify_proxy off. The
option exists if you want it, but leaving it off is normal and cheaper.
Can I scrape several keywords in one run?
No — one search_term per run. Start one run per keyword (schedules and the API make this
trivial), which also keeps each dataset scoped to a single term.
How do I track prices over time?
Schedule the same input daily and diff on url: regular_price_uah, discounted_price_uah
and in_stock give you price and stock history, and position gives you ranking history for
competitor price tracking.
Why did my run return 0 products and still succeed?
You used a filter — media_only, good_ratings_only, min_price or max_price. Those can
legitimately match nothing, especially media_only, which requires customer reviews with
photos or videos. An unfiltered search that returns 0 products fails the run instead.
Does sorting really sort the whole result set?
Yes — sorting is applied server-side by Prom.ua. Verified: price_asc returned products
ascending from 4.65 UAH, price_desc descending from 20,746 UAH.
Where are product descriptions and specs? Not included — this scraper reads search results only. See What this scraper does not return.
Is this legal? The actor collects only publicly available marketplace listings — no login, no private data. You are responsible for using the data in compliance with Prom.ua's terms and applicable law.