Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the lalafo API page →
Classifieds & Second-hand

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.

8 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 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.

Reference

What a lalafo field actually contains

Fields that read differently from how they look. Measured on live responses on 2026-10-15.

FieldWhat it holds
price, currencyThe 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_currencylalafo'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_convertedOnly 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.
promotedPaid 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_countHow 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_availablelalafo's own figure stops at 10,000; when it does, total_available holds the exact count (cars on lalafo.kg: 54,525).
match_modeOn 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.
phoneThe 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.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "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"
  }
}
Captured response
{
  "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"
  }
}
Actions

What the lalafo API does

ActionDescriptionConcrete use caseKey params
searchSearch 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, ...
listingFull 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
sellerA 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
countHow 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, ...
categoriesThe 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
citiesEvery 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
filtersThe 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
suggestThe 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
Code samples

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"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.lalafo.search with {"country":"kg","category_id":1502,"sort":"newest"}.
Use cases

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.
FAQ

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.

docs / lalafo

lalafo

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.

base /lalafo/v18 endpoints
post/lalafo/v1/listing1 credit

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.

ParameterAllowed / rangeDescription
listing_idoptional—Ad id (`listing_id` of a search row).
urloptional—A lalafo ad URL; its domain sets the country.
country = kgoptionalkg · az · rs · plWhich lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.
languageoptionalru · ky · az · sr · en · pl · ukLanguage of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.
Try in playground →
post/lalafo/v1/seller1 credit

A seller's public profile by `user_id` (from a row's `seller.seller_id`). Use `search` with `user_id` for their ads.

ParameterAllowed / rangeDescription
user_idrequired—Seller id.
country = kgoptionalkg · az · rs · plWhich lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.
languageoptionalru · ky · az · sr · en · pl · ukLanguage of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.
Try in playground →
post/lalafo/v1/count1 credit

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`.

ParameterAllowed / rangeDescription
country = kgoptionalkg · az · rs · plWhich lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.
queryoptional—Keywords, matched by the source's own search. Needs `query`, `category_id` or `user_id` (any one is enough).
category_idoptional—Numeric category id from the `categories` action (e.g. kg 1502 = cars for sale, 1343 = laptops). Checked against the source — an unknown id is rejected (the source would silently return the whole site).
city_idoptional—Numeric city id from the `cities` action (kg 103184 = Bishkek). Checked against the site's city list.
user_idoptional—Only this seller's live ads (the `seller.seller_id` of a row).
price_minoptional0–Lowest price, read in `currency` when given, otherwise in the site's national currency (KGS/AZN/RSD/PLN) — ads priced in USD/EUR are compared after the source's own conversion.
price_maxoptional0–Highest price, same currency rule as `price_min`.
currencyoptionalKGS · USD · AZN · RSD · EUR · PLNReturn every price CONVERTED by the source into this currency (and read price_min/price_max in it). Leave empty to get each ad in the currency its seller chose. kg: KGS, USD · az: AZN, USD · rs: RSD, EUR · pl: PLN.
filtersoptional—Attribute filters of the category, from the `filters` action: '<param_id>:<value_id>' for a list attribute (repeat or use '|' for several values, e.g. '64:2780|2779'), '<param_id>:<from>-<to>' for a range attribute with plain VALUES (e.g. year '62:2018-2022', mileage '56:0-100000'). Needs `category_id`; every id is validated against the category's own definitions.
languageoptionalru · ky · az · sr · en · pl · ukLanguage of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.
Try in playground →
post/lalafo/v1/categories3 credits

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.

ParameterAllowed / rangeDescription
country = kgoptionalkg · az · rs · plWhich lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.
parent_idoptional—Only this category's subtree.
max_depth = 2optional1–6Levels below the start (1-6).
languageoptionalru · ky · az · sr · en · pl · ukLanguage of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.
Try in playground →
post/lalafo/v1/cities2 credits

Every city/town of one lalafo site with its region — the ids `city_id` takes.

ParameterAllowed / rangeDescription
country = kgoptionalkg · az · rs · plWhich lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.
languageoptionalru · ky · az · sr · en · pl · ukLanguage of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.
Try in playground →
post/lalafo/v1/filters2 credits

The attribute filters one category offers (make, model, year, mileage, gearbox, rooms, condition...) with their ids and value ids — what `search` `filters` takes.

ParameterAllowed / rangeDescription
category_idrequired—Category id.
country = kgoptionalkg · az · rs · plWhich lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.
languageoptionalru · ky · az · sr · en · pl · ukLanguage of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.
Try in playground →
post/lalafo/v1/suggest1 credit

The site's own search suggestions for a partial query, each pointing at the category it belongs to.

ParameterAllowed / rangeDescription
queryrequired—Partial text.
country = kgoptionalkg · az · rs · plWhich lalafo site: kg (lalafo.kg, default), az (lalafo.az), rs (lalafo.rs) or pl (lalafo.pl). Ids (listings, sellers, categories, cities) belong to one site.
languageoptionalru · ky · az · sr · en · pl · ukLanguage of category, city and attribute names (ads themselves stay as the seller wrote them). kg: ru (default), ky · az: az (default), ru · rs: sr (default), en · pl: pl (default), uk, en.
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.