OLX Search API — Find Ads by Keyword, Category, Price & Location
Send a keyword and this source searches live OLX ads and returns the matches as data: title, price, location, seller, attributes and photos for each ad.
{
"session_id": "11111111-1111-1111-1111-111111111111",
"kind": "olx_offers_search",
"domain": "olx.pl",
"max_items": 2,
"start_page": 1,
"partial": false,
"human": "# OLX offers search\n\n- **Domain:** olx.pl\n- **Max items:** 2\n- **Starting page:** 1\n- **Records returned:** 2\n- **Proxy traffic:** 70.8 KB",
"machine": {
"total_items": 2,
"total_available": null,
"first_item": {
"id": "1101702811",
"url": "https://www.olx.pl/d/oferta/lozko-jednoosobowe-z-drewna-afrykanskiego-90x200-CID628-ID1cyDeb.html",
"offer_title": "łóżko jednoosobowe z drewna afrykańskiego 90x200",
"description": "witam, mam na sprzedaż łóżko jednoosobowe, robione na zamówienie z drewna afrykańskiego.\n\nPosiada drobne ślady użytkowania, jest wytrzymałe dzięki deskom pod materacem.\n\nŁóżko zostało odkurzone oraz p",
"status": "active",
"offer_type": "offer",
"is_business": false,
"price": 900,
"previous_price": null,
"currency": "PLN",
"price_label": "900 zł",
"is_negotiable": true,
"is_price_arranged": true,
"salary_from": null,
"salary_to": null,
"salary_currency": null,
"salary_period": null,
"is_salary_gross": null,
"created_at": 1790779889,
"refreshed_at": 1790780328,
"pushed_at": null,
"omnibus_pushed_at": null,
"expires_at": 1793372198,
"category_id": "1920",
"category_type": "house_and_garden",
"location": {
"city_id": "72583",
"city": "Sanok",
"city_alias": "sanok",
"district_id": null,
"district": null,
"region_id": "17",
"region": "Podkarpackie",
"region_alias": "podkarpackie",
"latitude": 49.55815,
"longitude": 22.20117,
"radius": 4,
"zoom": 12,
"is_detailed": false
},
"seller": {
"id": "2361055558",
"uuid": "5ffe6c78-223e-481b-b603-0e1f44929d95",
"name": "rotting_vamp",
"company_name": null,
"about": null,
"image": null,
"alias": null,
"has_business_page": false,
"is_online": false,
"created_at": 1720711109,
"last_seen_at": 1790779889,
"social_network_account_type": null,
"has_other_offers": true
},
"contact_name": "rotting_vamp",
"attributes": [
{
"key": "state",
"name": "Stan",
"type": "select",
"values": [
"used"
],
"label": "Używane"
},
{
"key": "furniturebrand",
"name": "Marka",
"type": "select",
"values": [
"other"
],
"label": "Pozostałe"
}
],
"key_attributes": [],
"images": [
"https://ireland.apollo.olxcdn.com:443/v1/files/lfrbr1vynnbe3-PL/image;s=4032x3024",
"https://ireland.apollo.olxcdn.com:443/v1/files/59cnd2kr0wfu-PL/image;s=4032x3024"
],
"is_highlighted": false,
"is_top_ad": false,
"is_promoted": false,
"is_b2c_ad": false,
"promotion_options": [],
"has_phone": false,
"has_chat": true,
"has_negotiation": true,
"has_delivery": false,
"delivery_mode": "NotEligible",
"has_gpsr_info": true,
"is_phone_protected": true,
"external_url": null,
"partner_code": null,
"shop_alias": null
},
"items": [
{
"id": "1101702811",
"url": "https://www.olx.pl/d/oferta/lozko-jednoosobowe-z-drewna-afrykanskiego-90x200-CID628-ID1cyDeb.html",
"offer_title": "łóżko jednoosobowe z drewna afrykańskiego 90x200",
"description": "witam, mam na sprzedaż łóżko jednoosobowe, robione na zamówienie z drewna afrykańskiego.\n\nPosiada drobne ślady użytkowania, jest wytrzymałe dzięki deskom pod materacem.\n\nŁóżko zostało odkurzone oraz p",
"status": "active",
"offer_type": "offer",
"is_business": false,
"price": 900,
"previous_price": null,
"currency": "PLN",
"price_label": "900 zł",
"is_negotiable": true,
"is_price_arranged": true,
"salary_from": null,
"salary_to": null,
"salary_currency": null,
"salary_period": null,
"is_salary_gross": null,
"created_at": 1790779889,
"refreshed_at": 1790780328,
"pushed_at": null,
"omnibus_pushed_at": null,
"expires_at": 1793372198,
"category_id": "1920",
"category_type": "house_and_garden",
"location": {
"city_id": "72583",
"city": "Sanok",
"city_alias": "sanok",
"district_id": null,
"district": null,
"region_id": "17",
"region": "Podkarpackie",
"region_alias": "podkarpackie",
"latitude": 49.55815,
"longitude": 22.20117,
"radius": 4,
"zoom": 12,
"is_detailed": false
},
"seller": {
"id": "2361055558",
"uuid": "5ffe6c78-223e-481b-b603-0e1f44929d95",
"name": "rotting_vamp",
"company_name": null,
"about": null,
"image": null,
"alias": null,
"has_business_page": false,
"is_online": false,
"created_at": 1720711109,
"last_seen_at": 1790779889,
"social_network_account_type": null,
"has_other_offers": true
},
"contact_name": "rotting_vamp",
"attributes": [
{
"key": "state",
"name": "Stan",
"type": "select",
"values": [
"used"
],
"label": "Używane"
},
{
"key": "furniturebrand",
"name": "Marka",
"type": "select",
"values": [
"other"
],
"label": "Pozostałe"
}
],
"key_attributes": [],
"images": [
"https://ireland.apollo.olxcdn.com:443/v1/files/lfrbr1vynnbe3-PL/image;s=4032x3024",
"https://ireland.apollo.olxcdn.com:443/v1/files/59cnd2kr0wfu-PL/image;s=4032x3024"
],
"is_highlighted": false,
"is_top_ad": false,
"is_promoted": false,
"is_b2c_ad": false,
"promotion_options": [],
"has_phone": false,
"has_chat": true,
"has_negotiation": true,
"has_delivery": false,
"delivery_mode": "NotEligible",
"has_gpsr_info": true,
"is_phone_protected": true,
"external_url": null,
"partner_code": null,
"shop_alias": null
},
{
"id": "1101703881",
"url": "https://www.olx.pl/d/oferta/iphone-15-pro-max-256gb-granatowy-bateria-100-w-pelni-sprawny-CID99-ID1cyDwr.html",
"offer_title": "IPhone 15 Pro Max 256gb Granatowy - BATERIA 100% - W PEŁNI SPRAWNY",
"description": "Używany iPhone 15 Pro Max 256gb w kolorze granatowym. Bateria w stanie 100%. Telefon w pełni sprawny.",
"status": "active",
"offer_type": "offer",
"is_business": false,
"price": 2199,
"previous_price": null,
"currency": "PLN",
"price_label": "2 199 zł",
"is_negotiable": false,
"is_price_arranged": false,
"salary_from": null,
"salary_to": null,
"salary_currency": null,
"salary_period": null,
"is_salary_gross": null,
"created_at": 1790780184,
"refreshed_at": 1790780327,
"pushed_at": null,
"omnibus_pushed_at": null,
"expires_at": 1793372184,
"category_id": "2298",
"category_type": "electronics",
"location": {
"city_id": "17871",
"city": "Warszawa",
"city_alias": "warszawa",
"district_id": "353",
"district": "Mokotów",
"region_id": "2",
"region": "Mazowieckie",
"region_alias": "mazowieckie",
"latitude": 52.19282,
"longitude": 21.03232,
"radius": 7,
"zoom": 13,
"is_detailed": false
},
"seller": {
"id": "74324234",
"uuid": "3595a316-132c-49d6-895b-e795a43bdf05",
"name": "Jarek",
"company_name": null,
"about": null,
"image": null,
"alias": null,
"has_business_page": false,
"is_online": false,
"created_at": 1504969056,
"last_seen_at": 1790780096,
"social_network_account_type": "facebook",
"has_other_offers": true
},
"contact_name": "Jarek",
"attributes": [
{
"key": "state",
"name": "Stan",
"type": "select",
"values": [
"used"
],
"label": "Używane"
},
{
"key": "phonemodel",
"name": "Model telefonu",
"type": "select",
"values": [
"iphone-15-pro-max"
],
"label": "iPhone 15 Pro Max"
}
],
"key_attributes": [],
"images": [
"https://ireland.apollo.olxcdn.com:443/v1/files/lbtwtgoj9afx-PL/image;s=1000x1000",
"https://ireland.apollo.olxcdn.com:443/v1/files/t1wyxf0tvjnq-PL/image;s=1000x1000"
],
"is_highlighted": false,
"is_top_ad": false,
"is_promoted": false,
"is_b2c_ad": false,
"promotion_options": [],
"has_phone": false,
"has_chat": true,
"has_negotiation": false,
"has_delivery": true,
"delivery_mode": "BuyWithDelivery",
"has_gpsr_info": true,
"is_phone_protected": false,
"external_url": null,
"partner_code": null,
"shop_alias": null
}
],
"proxy_traffic_bytes": 72549
},
"total_points": 2
}- You send
- A keyword, with optional category, price, condition, seller type, location, delivery and sort filters
- You get back
- Matching ads with title, price, location, seller, attributes and photos
- Coverage
- Live public ads on the OLX marketplaces for Poland, Ukraine, Romania, Bulgaria, Portugal, Kazakhstan and Uzbekistan.
- Price
- 1 point per returned result, up to 500 per request — $1 per 1,000
- Billed per record actually returned, capped by max_items. A request that returns nothing costs nothing.
Ways to get this data
Three approaches teams use today, and where each one runs into trouble.
| Approach | What it takes | Cost | Trade-off |
|---|---|---|---|
| Browsing OLX by hand | Set filters in the browser, scroll, copy | Free, and slow beyond a quick check | Nobody keeps a list current this way |
| Building a scraper | Write it, host it, and repair it when OLX changes its pages | Engineering time | A maintenance commitment for something that isn't your product |
| NeuralVerge | One request, keyword and filters as parameters | $1 per 1,000 returned results | A broad keyword with no filters returns a lot of ads you may not want, and you pay per ad returned |
What you get back
Every field in the response shown above.
| Field | Type | Description |
|---|---|---|
total_items | number | How many ads were returned in this batch (capped by max_items). |
total_available | number | Total matching ads. null in the sample, so don't rely on it. |
first_item | object | The first ad, repeated from items. |
items | array | The returned ads. Each has the keys below. |
id | string | OLX offer ID. |
url | string | Direct link to the ad. |
offer_title | string | Ad title, in the language of the marketplace. |
description | string | Ad description text. In the sample it is cut off after a few hundred characters. |
status | string | Ad status, e.g. active. |
offer_type | string | Ad type, e.g. offer. |
is_business | boolean | Whether the ad was posted by a business account. |
price | number | Listed price. |
previous_price | number | Earlier price, when the ad carries one. null in the sample. |
currency | string | ISO currency code, e.g. PLN. |
price_label | string | Price as displayed on the ad. |
is_negotiable | boolean | Whether the ad is marked negotiable. |
is_price_arranged | boolean | Whether the ad carries the price-arranged flag. |
salary_from | number | Salary fields (salary_from, salary_to, salary_currency, salary_period, is_salary_gross). All null on the non-job ad in the sample. |
created_at | number | Unix timestamp the ad was created. |
refreshed_at | number | Unix timestamp the ad was last refreshed. |
pushed_at | number | Unix timestamp of the last push, when there is one. null in the sample. |
expires_at | number | Unix timestamp the ad expires. |
category_id | string | OLX category ID the ad is filed under. |
category_type | string | Category type, e.g. house_and_garden. |
location | object | city_id, city, district, region_id, region, latitude, longitude and the map radius and zoom OLX shows for the ad. |
seller | object | id, uuid, name, company_name, about, image, alias, has_business_page, is_online, created_at, last_seen_at and has_other_offers. |
contact_name | string | Contact name shown on the ad. |
attributes | array | Category-specific attributes, each with key, name, type, values and label (e.g. condition, brand). |
images | array | Photo URLs. |
is_highlighted | boolean | Promotion flags (is_highlighted, is_top_ad, is_promoted, is_b2c_ad), with any promotion_options listed in an array. |
has_phone | boolean | Contact flags (has_phone, has_chat, has_negotiation, is_phone_protected). Whether the ad offers each. |
has_delivery | boolean | Whether the ad offers OLX delivery. |
delivery_mode | string | Delivery eligibility, e.g. NotEligible. |
external_url | string | Link to an external page, when the ad has one. null in the sample. |
How to run it
The same lookup works from the app, the API, or as a tool an agent can call mid-task.
All parameters are optional. max_items caps the result count (up to 500, defaults to 25) and sets what you are billed for. Each page holds 50 ads and start_page can go up to 20. category_id, region_id and city_id come from the OLX categories and OLX regions sources.
curl -X POST https://api.neuralverge.ai/functions/v1/run-olx-offers-search \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "keyword": "iphone", "max_items": 25, "sort": "newest", "condition": "used", "min_price": 500 }'What teams use it for
Where this field shows up in an actual workflow.
Track asking prices for a product type, sorted by price or newest first.
Combine region or city with a distance to see what is listed near a place.
Filter by seller type to separate shops from individuals.
Collect IDs to feed into OLX offer, or seller IDs for OLX user.
Coverage, freshness and limits
What this source covers, how fresh it is, and where it stops.
Live public ads on the OLX marketplaces for Poland, Ukraine, Romania, Bulgaria, Portugal, Kazakhstan and Uzbekistan.
Searched at request time.
This source returns publicly visible search results, stamped with the keyword and domain it was read from and a session id you can trace. Ads can name private individuals, so keep seller details under your own data-protection rules.
- —Promoted ads can affect result order the way they do on the site.
- —Descriptions in results are previews, and attribute sets vary by category.
- —total_available is not always populated, so you can't count on it to size a result set.
Questions, answered
Yes. Use category_id, region_id, city_id, district_id and distance. Get the IDs from the OLX categories and OLX regions sources.
Related sources
Try olx offers search on your own data
One request format across every source in the catalog.