OLX
OLX Search API
Search OLX classifieds on the seven OLX Europe sites (olx.pl, olx.ro, olx.pt, olx.bg, olx.ua, olx.kz, olx.uz) by keyword, category or both: sort by newest or price; filter by price range, condition, private or business seller, OLX delivery, photos, region / city / district with a radius, and the category's own filters (rooms, area, year, mileage, from the filters endpoint). Each ad carries id, title, price (with the site's conversion where it converts), condition, every parameter, category, location, dates, promoted and delivery flags, photos and the seller id (business name for business sellers only). Promoted ads are interleaved and flagged with their slot. Up to 1,000 results per search, as OLX allows. Costs 1 credit per request.
Authorizations
AuthorizationstringheaderrequiredBearer authentication header of the form Bearer <token>, where <token> is your Scavio API key (e.g. Bearer sk_live_your_key).
Body
application/jsonquerystringSearch keywords, 1-200 characters, in any language. query, category_id or both. A query with no exact match returns OLX's closest ads, not an empty list.
Example: iphone
category_idintegerSearch inside one category: categories[].id of the categories endpoint or an item's category_id (84 = cars on olx.pl, 14 = flats for sale). query, category_id or both.
Example: 84
countryenum<string>default:plThe OLX site. Titles, parameters and labels come back in the site's language (Polish on pl; Russian by default on kz and uz), prices in its currency. When you send a url, the market follows the url.
Example: pl
pl— olx.pl, PLN, Polish. The default.ro— olx.ro, RON, Romanian.pt— olx.pt, EUR, Portuguese.bg— olx.bg, EUR, Bulgarian.ua— olx.ua, UAH, Ukrainian.kz— olx.kz, KZT, Russian by default, Kazakh with language kk.uz— olx.uz, UZS, Russian by default, Uzbek with language uz.
languageenum<string>kz and uz only. olx.kz and olx.uz answer in Russian by default; kk returns Kazakh on kz and uz returns Uzbek (Latin) on uz. A 400 on the other five sites, which answer in their own language.
Example: kk
ru— Russian, the default on kz and uz.kk— Kazakh, kz only.uz— Uzbek, uz only.
pageintegerResults page, 1-based. Defaults to 1. OLX serves the first 1,000 results of a search only, so page x page_size may not exceed 1,000 (25 pages at the default page size).
Example: 2
page_sizeintegerdefault:40Ads per page, 1-50. Promoted ads come on top of these: 40 asks return about 52 items.
Example: 40
sortenum<string>default:relevanceThe order of the ads. Promoted ads are not sorted.
relevance— The site's own order. The default.newest— Most recently posted or refreshed first, approximately: neighbouring ads can be a few minutes out of order. Sellers can refresh an ad to the top, so this is last refresh, not first posting.price_low_to_high— Cheapest first.price_high_to_low— Most expensive first.
min_pricenumberLowest price, in the site's currency.
Example: 500
max_pricenumberHighest price, in the site's currency.
Example: 2000
conditionenum<string>Item condition, in categories that have one.
new— New.used— Used.refurbished— Refurbished.damaged— Damaged.
seller_typeenum<string>Private individuals or business sellers.
private— Private sellers.business— Business sellers.
olx_deliverybooleanOnly ads that can be bought with OLX delivery (shipped through OLX). pl, ro, pt, bg and ua; a 400 on kz and uz, which have no OLX delivery.
Example: true
with_photosbooleanOnly ads with photos.
Example: true
region_idintegerOnly ads in this region: region_id of the locations endpoint or of an item's location.
Example: 2
city_idintegerOnly ads in this city: city_id of the locations endpoint or of an item's location.
Example: 17871
district_idintegerOnly ads in this district of a city: district_id of the locations endpoint.
Example: 381
distance_kmintegerWith city_id: include ads within this many km of the city. One of 0, 2, 5, 10, 15, 30, 50, 75, 100.
Example: 30
filtersobjectThe category's own filters, as the filters endpoint lists them (filters[].send_as): a range as filter_float_<name>:from / :to with a number (filter_float_year:from 2018, filter_float_milage:to 100000, filter_float_m:from 40), a choice as filter_enum_<name> with one value id or a list (filter_enum_rooms ["two", "three"]). Up to 20 keys; other keys are a 400.
Example: {"filter_float_m:from": 40, "filter_enum_rooms": ["two"]}
include_promotedbooleandefault:trueKeep the promoted ads the site places on each page. Each is flagged is_promoted with promoted_position, its slot on the page.
Example: false
Request
from scavio import ScavioClient
client = ScavioClient(api_key="sk_live_your_key")
# Used cars on olx.pl, 2018 or newer, under 100,000 km, newest first.
res = client.olx.search(
category_id=84,
sort="newest",
filters={"filter_float_year:from": 2018, "filter_float_milage:to": 100000},
)["data"]
print(res["total"], "ads")
for ad in res["items"]:
if ad["is_promoted"]:
continue # paid slots are not in sort order
print(ad["id"], ad["refreshed_at"], ad["price"] and ad["price"]["value"], ad["title"])Response