letgo API & Scraper
letgo is Turkey's general second-hand classifieds app, and this API reads it as JSON.
🤖 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.
`search` takes free text in Turkish plus letgo's own filters: category, province, district, a price range in Turkish lira, posting date (24 hours to 15 days), minimum seller rating and free shipping, sorted by relevance, newest or price, with a cursor for the next page. `item` returns one listing in full: title, description, price, condition, every structured field the seller filled (for a car: make, model, year, kilometres, fuel, gearbox, plate, damage record and the state of each body panel), category path, province and district, all photos, posting and expiry dates and the seller. `seller` returns a member's profile with verification and counters, `seller_listings` pages through everything one seller offers, and `categories` and `locations` give the ids the filters take. On 2026-10-07 letgo listed 398,283 cars and 82,381 results for iphone alone.
What a letgo field actually contains
Fields that read differently from how they look. Every row was measured against live letgo responses on 2026-10-07.
| Field | What it holds |
|---|---|
| price_try and price_display | price_try is the number, price_display the exact string letgo prints ("1.325.000 TL", dot = thousands). They agreed on 126 of 126 search rows, and price_try matched the listing page's own published price on 8 of 8 items across six categories. |
| is_promoted | True for paid "vitamin" listings. letgo places them first on every sort order, so on a price sort they appear before the cheapest organic listing. The organic rows after them were strictly in price order in every run. |
| title on car and motorbike rows | On vehicle results the card heading is make and model ("Fiat DOBLO") and subtitle is year and kilometres ("2012 - 209.000 KM"), exactly as letgo prints the card. The seller's own title is in item. |
| parameters and attributes | Every structured field of the listing: key, the Turkish label, the value and the display form letgo prints (km 411000 is shown as "411.000"). attributes is the same as a flat key → value map. Cars carry about 30 of them, phones brand, model, memory and colour, clothing size and colour. |
| condition | The seller's "Durum" choice (Yeni Gibi, Az Kullanılmış…) with condition_display, the short label letgo shows next to it ("2. El"). Cars have no condition field: null on vehicles. |
| city, district | Province and district as letgo prints them. letgo does not publish the exact map point of a listing, so we return none. |
| seller | Name, about text, member since, verification status, rating, review count and avatar, as on the listing page. has_phone says the seller registered a phone; the number itself is shown only to logged-in members and is not returned. |
| next_cursor, has_more, duplicates_dropped | letgo pages with a cursor. Its consecutive pages can repeat one listing at the boundary; we drop the repeat and count it in duplicates_dropped. has_more turns false on the last page. |
| total | letgo's own count for the request. Under relevance sort it can change on later pages; on price or date sorts it stays put. |
Without a city, letgo's relevance order puts listings near İstanbul first. Pass city_id, or sort by newest or price, for a nationwide view.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/letgo/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "koltuk",
"min_price": 1000,
"max_price": 5000,
"sort": "price_asc"
}
}{
"ok": true,
"meta": {
"api": "letgo",
"endpoint": "search",
"mode": "live",
"latency_ms": 944.8,
"record_count": 24,
"bytes": 49194,
"cache_hit": false,
"upstream_requests": 1,
"warnings": [
"promoted (paid) listings are placed first and are not in price order; is_promoted marks them"
],
"charged_credits": 2,
"version": "1.0.0",
"request_id": "43a01b2bf33f4440",
"queue_ms": 1.4,
"fetched_at": "2026-10-07T15:52:09.472Z"
},
"data": {
"query": "koltuk",
"total": 29029,
"rows_on_page": 24,
"duplicates_dropped": 0,
"has_more": true,
"next_cursor": "eyJzYSI6ImZyZWVfMTAwMCwxNzM0Nzc5NDc0fGZlZF8xNTAwLDE3MzQyODEzODUiLCJwIjpbIjE3MzI3NjcwOTUiLCIxNjgwMTU0ODUwIiwiMTczNDUzNzIzOCIsIjE3MzQ3NzQ3NDgiLCI5OTEzMjk2MDAiLCIxNzMyODA3MjQxIiwiOTg2ODMxMDUwIiwiOTg2MDU5MTQ1IiwiMTczNDc2Mjc5NCIsIjk4MjM3ODI1OCIsIjE3Mjk4OTYzNTUiLCI5ODAzMDE4MjMiLCI5NzMyNzk5MjUiLCIxNzM0NzczMDQ0IiwiOTY5ODY4ODY4IiwiMTczNDYwNzEyMyIsIjk0OTM2NjExNSIsIjkzOTEyMDAxMCIsIjE3MzQzOTE4MjYiLCI4Nzk2NjYyOTciLCI4NjE4NTU3ODIiLCIxNzM0MjgxMzg1IiwiNzg0OTk5MTA5IiwiMTczNDc3OTQ3NCJdLCJxIjoiZTA1Y2JlYmIxNyJ9",
"sort": "price_asc",
"filters_applied": {
"min_price": 1000,
"max_price": 5000
},
"listings": [
{
"id": "1732767095",
"url": "https://www.letgo.com/item/koltuk-ve-masa-iid-1732767095",
"title": "koltuk ve masa",
"subtitle": null,
"price_try": 1000,
"price_display": "1.000 TL",
"currency": "TRY",
"is_promoted": true,
"promotions": [
"vitamin-highlight",
"vitamin-massive"
],
"city": "Manisa",
"district": "Yunusemre",
"category_id": 15137,
"image": "https://imvm.letgo.com/v1/files/b800538d32f14-OLXAUTOTR/image;s=1024x1024",
"has_video": false,
"max_installment_count": 6,
"seller_id": 508522445,
"seller_name": "letgo Kullanıcısı",
"seller_rating": 0,
"is_successful_seller": false
},
{
"id": "1680154850",
"url": "https://www.letgo.com/item/cafe-koltuk-sandalye-iid-1680154850",
"title": "Cafe Koltuk Sandalye",
"subtitle": null,
"price_try": 1200,
"price_display": "1.200 TL",
"currency": "TRY",
"is_promoted": true,
"promotions": [
"vitamin-highlight",
"vitamin-massive"
],
"city": "İzmir",
"district": "Karaburun",
"category_id": 15150,
"image": "https://imvm.letgo.com/v1/files/e0c89d637dc14-OLXAUTOTR/image;s=1024x1024",
"has_video": false,
"max_installment_count": 6,
"seller_id": 164711420,
"seller_name": "snn clnk",
"seller_rating": 0,
"is_successful_seller": false
},
{
"id": "1734537238",
"url": "https://www.letgo.com/item/l-koltuk-iid-1734537238",
"title": "L Koltuk",
"subtitle": null,
"price_try": 1250,
"price_display": "1.250 TL",
"currency": "TRY",
"is_promoted": true,
"promotions": [
"vitamin-highlight",
"vitamin-massive",
"vitamin-peak"
],
"city": "İstanbul",
"district": "Ümraniye",
"category_id": 15137,
"image": "https://imvm.letgo.com/v1/files/80ee3a5413594-OLXAUTOTR/image;s=1024x1024",
"has_video": false,
"max_installment_count": 6,
"seller_id": 519009686,
"seller_name": "letgo Kullanıcısı",
"seller_rating": 0,
"is_successful_seller": false
}
]
}
}What the letgo API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search letgo, Turkey's general second-hand classifieds app: phones, electronics, furniture and home, cars and motorbikes, clothing, kids, hobby, pets. Free text plus the site's own filters (category, province, district, price range, posting date, seller rating, free shipping) and its four sort orders, with cursor paging. Nothing is required: no parameters browses the newest-ranked live listings. | Price-intelligence teams call search to search letgo, Turkey's general second-hand classifieds app. | query, category_id, city_id, district_id, min_price, ... |
| item | One letgo listing in full: title, description, price, condition, every structured attribute the seller filled (for cars: make, model, year, km, fuel, gearbox, body, colour, plate, damage record and the paint/replacement state of each panel), category path, province and district, all photos and videos, posting and expiry dates, offer and payment options, and the seller — name, member since, verification, rating, review count. | Classifieds aggregators call item to get one letgo listing in full. | id, url, include_pii |
| seller | A letgo seller's public profile: name, about text, member since, business or private, verification status and what they verified with (phone, e-mail, Facebook…), avatar, and the profile counters — listings published, followers, following, items bought. | Resale and arbitrage tools call seller to get a letgo seller's public profile. | seller_id, seller_id, include_pii |
| seller_listings | Every live listing of one letgo seller, newest first or by price, with cursor paging. The seller id is on every search row and listing. | Lead-generation teams call seller_listings to get every live listing of one letgo seller, newest first or by price, with cursor paging. | seller_id, seller_id, sort, cursor, include_pii |
| categories | letgo's full category tree (15 top-level sections, 846 categories), flattened with ids, parent ids, the readable path and the category page URL. Use the ids as `category_id` in search. | Price-intelligence teams call categories to get letgo's full category tree (15 top-level sections, 846 categories), flattened with ids, paren…. | parent_id, include_pii |
| locations | The place ids search filters on: without a city, Turkey's 81 provinces; with a city_id (or name), that province's districts with the live number of listings in each. | Classifieds aggregators call locations to get the place ids search filters on. | city_id, include_pii |
Call search from your stack
curl -X POST https://api.reefapi.com/letgo/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"koltuk","min_price":1000,"max_price":5000,"sort":"price_asc"}'import requests
r = requests.post(
"https://api.reefapi.com/letgo/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "koltuk",
"min_price": 1000,
"max_price": 5000,
"sort": "price_asc"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/letgo/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "koltuk",
"min_price": 1000,
"max_price": 5000,
"sort": "price_asc"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.letgo.search with {"query":"koltuk","min_price":1000,"max_price":5000,"sort":"price_asc"}.Who uses this API and why
- Track second-hand prices in Turkey for phones, cars or furniture by province, with the date each listing went up.
- Build a used-car dataset with year, kilometres, damage record and panel-by-panel paint state for every listing in a category.
- Alert on new listings under a price in one district, using posted_within=24h and newest-first sort.
- Find active sellers worth contacting: profile, verification, rating and their full list of live listings.
- Compare letgo asking prices with new retail prices or with other Turkish marketplaces for the same model.
Questions developers ask before integrating
Do I need a letgo account?
No. Everything is read logged out, and you call reefapi.com from anywhere.
How do I search one city or district?
Pass city_id as the province id or its name (İzmir, Ankara). locations lists all 81 provinces, and locations with a city_id lists its districts with live listing counts. For bisiklet, İzmir narrowed 84,404 listings to 6,999 and its Bayraklı district to 805.
Which filters can I combine?
query, category_id, city_id, district_id, min_price and max_price, posted_within (24h, 3d, 7d, 15d), min_seller_rating (3, 3.5, 4, 4.5) and free_shipping. Each one was checked against the unfiltered count in the same minute: iphone 82,381 → 8,031 in Ankara, 5,799 posted in the last 24 hours, 9,935 from sellers rated 4.5 or more, 4,407 with free shipping.
Can I get a car's mileage, year and damage record?
Yes. item returns every field the seller filled: make, model, version, year, kilometres, fuel, gearbox, body type, colour, plate type, plate, the last six characters of the chassis number, the damage and insurance record, lien status, and the original, painted or replaced state of each body panel.
How do I page through all results?
Every page returns next_cursor; pass it back with the same filters. Pages hold 24 to 29 listings. A search for gramofon in Ankara returned all 84 listings over four pages with no repeats.
Can I get everything one seller is selling?
Yes. Every row carries seller_id. seller_listings pages through that seller's live listings (newest first or by price), and seller returns the profile with listings published, followers and following.
What does letgo not publish?
Phone numbers (members only), the exact map point of a listing, and a view counter (letgo returns 0 for every listing). Removed or sold listings return NOT_FOUND.
What is the letgo API?
letgo API is a ReefAPI endpoint group for turkey's second-hand classifieds: phones, cars, furniture and more with tl price, district, full specs and the seller. It returns live JSON through POST requests under /letgo/v1.
Is the letgo API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. letgo calls use the same shared credit balance as every other ReefAPI engine.
Do I need a letgo login or account?
No login to letgo 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 letgo 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 letgo API use?
letgo actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call letgo from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call letgo actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the letgo API a letgo scraper?
It is the managed alternative to a DIY letgo 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 turkey's second-hand classifieds: phones, cars, furniture and more with tl price, district, full specs and the seller back as clean JSON.