OLX.bg Scraper

OLX.bg listings are now priced in euros since Bulgaria's currency switch, a redenomination that breaks any pipeline inferring currency from country.

OLX.bg listings are now priced in euros since Bulgaria's currency switch, a redenomination that breaks any pipeline inferring currency from country. Rows carry the currency per listing and amounts as integer cents, plus description, category attributes, city, region and a business-or-private flag.

$3.00 / 1,000 · 94.7% success over 38 public runs in the last 30 days.

Run it on Apify → Free to try - runs bill per result on your own account.

What you give it

Every field is optional unless marked; sensible defaults do the rest.

FieldTypeWhat it doesDefault
searchQuery string What to search for on OLX.bg, exactly as you would type it in the site's search box, e.g. "колело" or "iphone 15". Leave it out when you only re-check offers through listingIds. колело
listingIds array Re-check offers you already know instead of searching: one offer ID per line (the listingId of every dataset item), the offer's full address (its ID… code is that number in base 62), or the code alone. Each one comes back in exactly the shape a search result has, plus the site's own status. An offer that is gone from the site (sold, expired, removed) is skipped, named in the log and not billed. When given, the search fields of this form are ignored and the run status says which. Up to 50. []
categoryId integer Numeric OLX category id to limit the search to. Find it in the category page URL or in a previous run's categoryId output field. Empty = all categories. -
priceMin integer Only include listings costing at least this many euros. -
priceMax integer Only include listings costing at most this many euros. -
sortBy string Order of results: date (newest first, best for monitoring), price_asc, price_desc, or relevance. date
postedAfter string Only include listings posted on or after this date. With newest-first sorting the run stops early once older listings are reached. Format: YYYY-MM-DD (for example 2026-09-08) or a full ISO timestamp such as 2026-09-08T14:30:00Z. Slash dates like 08/09/2026 are refused on purpose: they are read as September in Europe and August in the United States, and this actor will not guess which you meant. -
postedBefore string Only include listings posted on or before this date. Format: YYYY-MM-DD (for example 2026-09-08) or a full ISO timestamp such as 2026-09-08T14:30:00Z. Slash dates like 08/09/2026 are refused on purpose: they are read as September in Europe and August in the United States, and this actor will not guess which you meant. -
maxItems integer Stop after this many listings. Free-plan runs are capped at 5 items. The form starts at 25 for a cheap first run - that is the form's prefill, not a cap on your plan; clear it to use the default of 1000. 1000
reportFailures boolean When a run fails, send the developer the actor name and build, an error category, the error message (truncated) and a one-way hash of your input - so a bug can be fixed without anyone asking you to reproduce it. Your input itself, your results and your identity are never sent, and successful runs send nothing at all. Switch this off and the actor behaves exactly the same. True

What you get back

One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.

A real result row from a recent run:

{
  "attributes": {
    "state": "ново",
    "type": "Планински"
  },
  "categoryId": 628,
  "city": "гр. София",
  "currency": "EUR",
  "deliveryAvailable": false,
  "description": "www.BIGEARLBIKES.COM\n\nЛЕСНО И УДОБНО РАЗГЛЕДАЙТЕ ТУК!\n\n‣ ‣ НОВИ цяло колело DRAG C1 TEAM ROCKSHOX Dirt Jump 26 Ц1 велосипед ‣ ‣\n\n•• СПЕЦИФИК...",
  "imageUrls": [
    "https://frankfurt.apollo.olxcdn.com:443/v1/files/ulcly3yc0usn2-BG/image;s=1800x1350",
    "https://frankfurt.apollo.olxcdn.com:443/v1/files/508mos7oq81q-BG/image;s=1800x1350",
    "https://frankfurt.apollo.olxcdn.com:443/v1/files/ksdjy5saxwth2-BG/image;s=1679x1800",
    "https://frankfurt.apollo.olxcdn.com:443/v1/files/okk0y08q0n0u1-BG/image;s=1510x1800",
    "https://frankfurt.apollo.olxcdn.com:443/v1/files/muvszw5oflxs1-BG/image;s=1800x1350",
    "https://frankfurt.apollo.olxcdn.com:443/v1/files/s3qzky6ub9dg1-BG/image;s=1800x1350",
    "https://frankfurt.apollo.olxcdn.com:443/v1/files/gie99xj1408k-BG/image;s=1350x1800",
    "https://frankfurt.apollo.olxcdn.com:443/v1/files/w9x81j7r6h9y2-BG/image;s=1350x1800"
  ],
  "listingId": "139803760",
  "negotiable": false,
  "postedAt": "2024-04-26T22:06:06+03:00",
  "priceCents": 81999,
  "refreshedAt": "2026-10-15T09:28:44+03:00",
  "region": "Област София-град",
  "sellerType": "business",
  "title": "НОВИ цяло колело DRAG C1 TEAM ROCKSHOX Dirt Jump 26 Ц1 велосипед",
  "url": "https://www.olx.bg/d/ad/novi-tsyalo-kolelo-drag-c1-team-rockshox-dirt-jump-26-ts1-velosiped-CID618-ID9sBlm.html"
}
FieldTypeMeaning
listingId string OLX listing ID.
url string Direct link to the listing.
title string Listing title as posted.
description string Full listing description as posted by the seller.
priceCents integer Asking price in euro cents. Absent when the listing has no fixed price.
currency string Always EUR when a price is present.
negotiable boolean Whether the seller marked the price as negotiable .
postedAt string When the listing was created (ISO timestamp with timezone).
refreshedAt string When the seller last refreshed/bumped the listing.
city string Listing municipality. City-level only - exact coordinates are never collected.
region string Region of the listing.
categoryId integer Numeric OLX category ID. Reusable as the categoryId input.
attributes object Whitelisted, non-personal listing attributes that vary by category - e.g. state (condition), brand, model, year and mileage for cars, area and rooms for property. Present when the listing has them.
sellerType string Whether the listing comes from a business or a private seller. The only seller-related field in the output.
deliveryAvailable boolean Whether OLX courier delivery (Przesyłka OLX) is enabled for the listing.
imageUrls array Listing photo URLs (up to 8).
status string The site's own word for the offer's state (active, ...). Present on offers read through listingIds; a search only ever returns active offers.

Health

94.7% success over 38 public runs in the last 30 days. Live record, failures included: status page.

Full documentation, examples and the AI-assistant prompt live on the store page.