lalafo API & Scraper
lalafo is a general classifieds platform that runs lalafo.kg in Kyrgyzstan, lalafo.az in Azerbaijan, lalafo.rs in Serbia and a small lalafo.pl in Poland.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
This API reads any of them as JSON with one `country` parameter. `search` takes a keyword, a category id, a city id or a seller id, plus a price band and the category's own attribute filters (make, model, year, mileage, gearbox, fuel, rooms, condition and so on, listed by the `filters` action), in four orders, up to 50 ads per page. Each ad carries its id, URL, title, full description, the price in the currency the seller chose (KGS or USD on lalafo.kg, AZN or USD on lalafo.az, RSD or EUR on lalafo.rs, PLN on lalafo.pl), the national-currency figure lalafo itself shows for foreign-currency ads in Kyrgyzstan, the crossed-out old price when there is one, city with coordinates, posting, update and bump times, how many times the ad was shown in the feed and how many people saved, called or messaged about it, whether it is a paid promoted ad, the contact phone exactly as the public ad page publishes it, photos and the seller (private or business, response rate). `listing` returns one ad in full with its attribute table, `seller` a seller's public profile, `count` the exact number of ads behind any filter set, and `categories`, `cities`, `filters` and `suggest` give the ids the search takes.
What a lalafo field actually contains
Fields that read differently from how they look. Measured on live responses on 2026-10-15.
| Field | What it holds |
|---|---|
| price, currency | The price in the currency the seller picked. On lalafo.kg a car can be priced in USD and the next one in KGS on the same page. price is null when the seller marked the price negotiable (price_kind = negotiable). |
| national_price, national_currency | lalafo's own conversion of a foreign-currency ad into the national currency, the figure the ad page prints first (lalafo.kg: 12,500 USD shown as 1,093,125 KGS). Filled on lalafo.kg ads priced in USD; null when the ad is already in the national currency. |
| prices_converted_to, price_converted | Only when you pass currency: lalafo then converts every price into that currency, so the seller's original currency is not in the row. Leave currency empty to get each ad as the seller priced it. |
| promoted | Paid promoted ads. lalafo puts 4 to 17 of them at the top of every page, on top of per_page and outside the order you asked for. |
| impressions, favorite_count, callers_count, writers_count | How many times the ad was shown in lists, saved, called and messaged, as lalafo counts them. lalafo's own views counter reads 0 on every ad, so it is not returned. |
| total_results, total_capped, total_available | lalafo's own figure stops at 10,000; when it does, total_available holds the exact count (cars on lalafo.kg: 54,525). |
| match_mode | On lalafo.rs and lalafo.pl a keyword with the default order is ranked by similarity, so almost every ad matches and the total is not exact (match_mode = semantic). Any explicit sort returns real keyword matches with an exact total: bicikl 6,132, rower 283. |
| phone | The contact number exactly as the public ad page publishes it, null when the seller chose to hide it. |
The price block of the public ad page was compared with listing for 9 ads in Kyrgyzstan, Azerbaijan and Serbia (USD and local-currency ads, a crossed-out price, two negotiable ads): 9 of 9 matched, national-currency figure included.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/lalafo/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"country": "kg",
"category_id": 1502,
"sort": "newest"
}
}{
"ok": true,
"meta": {
"api": "lalafo",
"endpoint": "search",
"mode": "live",
"latency_ms": 3249.5,
"record_count": 24,
"bytes": 161247,
"cache_hit": false,
"upstream_requests": 3,
"charged_credits": 3,
"version": "1.0.0",
"request_id": "dae642f5f37446b9",
"queue_ms": 1.5,
"fetched_at": "2026-10-15T17:02:57.807Z"
},
"data": {
"country": "kg",
"total_results": 10000,
"total_capped": true,
"total_is_exact": false,
"match_mode": "keyword_or_filter",
"total_available": 54451,
"page": 1,
"page_count": 500,
"per_page": 20,
"returned": 24,
"promoted_count": 10,
"page_clamped": false,
"has_more": true,
"prices_converted_to": null,
"listings": [
{
"listing_id": 117313505,
"country": "kg",
"url": "https://lalafo.kg/bishkek/ads/daihatsu-sirion-1999-g-1-l-mehanika-benzin-hetcbek-id-117313505",
"title": "Daihatsu Sirion: 1999 г., 1 л, Механика, Бензин, Хэтчбэк",
"description": "Продаю дайхатсу сирион машина нахаду документы чистые техническое хорошая",
"price": 110000,
"currency": "KGS",
"price_kind": "fixed",
"is_negotiable": false,
"price_converted": false,
"old_price": 150000,
"national_price": null,
"national_currency": null,
"national_old_price": null,
"category_id": 1564,
"city": "Бишкек",
"city_id": 103184,
"city_alias": "bishkek",
"lat": 42.87,
"lng": 74.57,
"created_at": "2026-10-15T04:58:23Z",
"updated_at": "2026-10-15T05:02:09Z",
"bumped_at": "2026-10-15T05:01:37Z",
"impressions": 5262,
"favorite_count": 5,
"callers_count": 2,
"writers_count": 3,
"promoted": true,
"is_premium": false,
"label": "Продаю автомобиль",
"phone": "[redacted-phone]",
"phone_hidden": false,
"chat_disabled": false,
"image": "https://img5.lalafo.com/i/posters/original/49/e8/70/5678d459daf1b247837fb6eb62.jpeg",
"image_count": 8,
"seller": {
"seller_id": 17192666,
"name": "авто",
"company_name": null,
"is_pro": false,
"seller_type": "private",
"avatar": null,
"response_rate_pct": 57,
"response_time_s": 32541,
"response_info": "Отвечает на 57% сообщений Обычно в течение дня",
"is_banned": false
}
},
{
"listing_id": 115276675,
"country": "kg",
"url": "https://lalafo.kg/bishkek/ads/kia-k3-2018-g-16-l-avtomat-benzin-sedan-id-115276675",
"title": "Kia K3: 2018 г., 1.6 л, Автомат, Бензин, Седан",
"description": "Kia K3 (седан), темно‑серый металлик.\n\nКузов и экстерьер:\n- Современный дизайн с узкой решеткой радиатора и светодиодной оптикой.\n- 17-дюймовые легкосплавные диски, низкопрофильные шины.\n- Задние светодиодные фонари с соединяющей полосой.\n- Хромированные окантовки стекол, антенна «плавник».\n- Задний парктроник, камера/датчики в бампере, одинарный выхлоп.\n\nСалон и удобства:\n- Просторный черный интерьер с комбинированной отделкой сидений (ткань/эко‑кожа).\n- Мультифункциональный руль с кожаной отделкой.\n- Центральный сенсорный дисплей мультимедийной системы, поддержка смартфонов.\n- Климат‑контрол",
"price": 12000,
"currency": "USD",
"price_kind": "fixed",
"is_negotiable": false,
"price_converted": false,
"old_price": null,
"national_price": 1049400,
"national_currency": "KGS",
"national_old_price": null,
"category_id": 1576,
"city": "Бишкек",
"city_id": 103184,
"city_alias": "bishkek",
"lat": 42.87,
"lng": 74.57,
"created_at": "2026-10-08T09:40:33Z",
"updated_at": "2026-10-09T09:53:26Z",
"bumped_at": "2026-10-08T09:43:28Z",
"impressions": 26915,
"favorite_count": 11,
"callers_count": 6,
"writers_count": 6,
"promoted": true,
"is_premium": false,
"label": "Продаю автомобиль",
"phone": "[redacted-phone]",
"phone_hidden": false,
"chat_disabled": false,
"image": "https://img5.lalafo.com/i/posters/original/87/c8/eb/50ec89cd4aef42aa30cf633fa1.jpeg",
"image_count": 9,
"seller": {
"seller_id": 18096657,
"name": "Akyl.live",
"company_name": null,
"is_pro": false,
"seller_type": "private",
"avatar": null,
"response_rate_pct": 39,
"response_time_s": 128881,
"response_info": "Отвечает на 39% сообщений Обычно в течение нескольких дней",
"is_banned": false
}
},
{
"listing_id": 116512865,
"country": "kg",
"url": "https://lalafo.kg/bishkek/ads/toyota-camry-2002-g-3-l-avtomat-benzin-sedan-id-116512865",
"title": "Toyota Camry: 2002 г., 3 л, Автомат, Бензин, Седан",
"description": "Toyota Camry V6 (XV30), черный седан.\nВ Кыргызстане с 2014 года (старый завоз )без гнили!!!\n\nКлючевые особенности:\n- Мощный бензиновый V6 — плавная динамика и уверенный разгон\n- Кузов седан, классический дизайн, черный цвет\n- Литые диски, шины универсального типа\n- Противотуманные фары, галогенные основные фары\n- Тонированные стекла\n- Задний парктроник (датчики видны на бампере)\n- Хромированная решетка радиатора, повторители указателей поворота на крыльях\n- Две выхлопные трубы (V6)\n- Просторный салон на 5 мест, большой багажник\n- Зеркала и стеклоподъемники с электроприводом\n- Климат-комфорт и ",
"price": 8500,
"currency": "USD",
"price_kind": "fixed",
"is_negotiable": false,
"price_converted": false,
"old_price": null,
"national_price": 743325,
"national_currency": "KGS",
"national_old_price": null,
"category_id": 1608,
"city": "Бишкек",
"city_id": 103184,
"city_alias": "bishkek",
"lat": 42.88,
"lng": 74.57,
"created_at": "2026-09-20T05:03:57Z",
"updated_at": "2026-09-30T05:49:22Z",
"bumped_at": "2026-09-20T05:05:45Z",
"impressions": 152835,
"favorite_count": 44,
"callers_count": 17,
"writers_count": 25,
"promoted": true,
"is_premium": false,
"label": "Продаю автомобиль",
"phone": "[redacted-phone]",
"phone_hidden": false,
"chat_disabled": false,
"image": "https://img5.lalafo.com/i/posters/original/db/fb/80/51120616cb072a7422e40a9788.jpeg",
"image_count": 9,
"seller": {
"seller_id": 6592086,
"name": "Edil",
"company_name": null,
"is_pro": false,
"seller_type": "private",
"avatar": null,
"response_rate_pct": 95,
"response_time_s": 9649,
"response_info": "Отвечает на 95% сообщений Обычно в течение 3 ч.",
"is_banned": false
}
}
],
"query": null,
"sort": "newest",
"filters_sent": "category_id=1502&sort_by=newest"
}
}What the lalafo API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search one lalafo site. Needs `query`, `category_id` or `user_id` (any one); the rest narrow it. Promoted rows are flagged and come first on every page. | Price-intelligence teams call search to search one lalafo site. | country, query, category_id, city_id, user_id, ... |
| listing | Full detail of one ad by `listing_id` (+ `country`) or by its lalafo URL (the country is read off the domain). A removed ad, or an id asked under the wrong country, returns NOT_FOUND. | Classifieds aggregators call listing to get full detail of one ad by `listing_id` (+ `country`) or by its lalafo URL (the country is read…. | listing_id, url, country, language |
| seller | A seller's public profile by `user_id` (from a row's `seller.seller_id`). Use `search` with `user_id` for their ads. | Resale and arbitrage tools call seller to get a seller's public profile by `user_id` (from a row's `seller.seller_id`). | user_id, country, language |
| count | How many live ads match a filter set, without downloading them — the source's UNCAPPED number (cars on lalafo.kg: 54 537, where search stops at 10 000). Same filters as `search`. | Lead-generation teams call count to get how many live ads match a filter set, without downloading them. | country, query, category_id, city_id, user_id, ... |
| categories | The site's category tree with live ad counts — the ids `search` takes. Default: the top two levels; `parent_id` returns one branch, `max_depth` goes deeper. | Price-intelligence teams call categories to get the site's category tree with live ad counts. | country, parent_id, max_depth, language |
| cities | Every city/town of one lalafo site with its region — the ids `city_id` takes. | Classifieds aggregators call cities to get every city/town of one lalafo site with its region. | country, language |
| filters | The attribute filters one category offers (make, model, year, mileage, gearbox, rooms, condition...) with their ids and value ids — what `search` `filters` takes. | Resale and arbitrage tools call filters to get the attribute filters one category offers (make, model, year, mileage, gearbox, rooms, condit…. | category_id, country, language |
| suggest | The site's own search suggestions for a partial query, each pointing at the category it belongs to. | Lead-generation teams call suggest to get the site's own search suggestions for a partial query, each pointing at the category it belon…. | query, country, language |
Call search from your stack
curl -X POST https://api.reefapi.com/lalafo/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"country":"kg","category_id":1502,"sort":"newest"}'import requests
r = requests.post(
"https://api.reefapi.com/lalafo/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"country": "kg",
"category_id": 1502,
"sort": "newest"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/lalafo/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"country": "kg",
"category_id": 1502,
"sort": "newest"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.lalafo.search with {"country":"kg","category_id":1502,"sort":"newest"}.Who uses this API and why
- Track used-car asking prices in Kyrgyzstan and Azerbaijan by make, year and mileage.
- Follow rents and flat prices in Bishkek or Baku by district city id and rooms.
- Collect job vacancies posted on lalafo.kg with salary and city.
- Monitor a dealer's live ads and how often they are shown, saved and called.
- Compare USD and local-currency asking prices with lalafo's own conversion.
Questions developers ask before integrating
Which countries are covered?
Kyrgyzstan (country=kg, lalafo.kg), Azerbaijan (az, lalafo.az), Serbia (rs, lalafo.rs) and Poland (pl, lalafo.pl). lalafo.kg is the largest: 1,197,201 live ads on 2026-10-15. lalafo.pl is small; every ad sampled was second-hand clothing in Poznań.
What currency are prices in?
In the currency the seller chose: KGS or USD in Kyrgyzstan, AZN or USD in Azerbaijan, RSD or EUR in Serbia, PLN in Poland. Kyrgyz ads in USD also carry lalafo's own KGS figure. Pass currency to get every price converted by lalafo into one currency instead.
Do the filters really filter?
Each one was checked against the unfiltered count in the same run. Laptops on lalafo.kg 6,912 → Bishkek 5,701, from 50,000 KGS 716, up to 10,000 KGS 4,198. Cars 54,537 → automatic gearbox 29,268, year 2024 560, mileage 10,000 to 20,000 km 535. Unknown category, city, attribute or currency values are refused instead of silently returning everything.
How do I filter cars by make, year or mileage?
Call filters with the category id (cars on lalafo.kg: 1502). It lists every attribute with its id and value ids. Pass them to search as filters, for example 64:2780 for an automatic gearbox, or 62:2018-2022 for a year range (ranges take plain values).
How deep can I page?
lalafo serves the first 10,000 ads of a query, up to 50 per page. count returns the exact number beyond that, for any filter set.
Are the promoted ads mixed into the results?
Yes, lalafo places its paid ads at the top of every page. Each row says promoted, so you can drop them or keep them.
Can I get one seller's ads?
Yes: search with user_id (the seller_id of any row). seller returns the public profile: name, member since, business or private, verified, response rate.
What is the lalafo API?
lalafo API is a ReefAPI endpoint group for classified ads in kyrgyzstan, azerbaijan, serbia and poland: price in the seller's currency plus the national-currency figure, city, attributes, posting time, counters and seller. It returns live JSON through POST requests under /lalafo/v1.
Is the lalafo API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. lalafo calls use the same shared credit balance as every other ReefAPI engine.
Do I need a lalafo login or account?
No login to lalafo is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the lalafo data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the lalafo API use?
lalafo actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call lalafo from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call lalafo actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the lalafo API a lalafo scraper?
It is the managed alternative to a DIY lalafo scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same classified ads in kyrgyzstan, azerbaijan, serbia and poland: price in the seller's currency plus the national-currency figure, city, attributes, posting time, counters and seller back as clean JSON.