The problem
Chotot is Vietnam's biggest classifieds marketplace — real estate, vehicles, electronics, jobs and more, listed by individual sellers across the country, entirely in Vietnamese. If you monitor market supply, build a listings catalog, or track pricing by region, you need Chotot data flowing in regularly.
Doing it by hand means browsing chotot.com region by region and category by category, copying each ad's title, price and link. The site offers no public API for this, and a custom scraper has to cope with Vietnamese text, internal region/category codes and rate limits on your own.
What the actor does
The Chotot Vietnam Listings Scraper pulls live ads straight from Chotot's own public listing API — the same keyless JSON feed that powers chotot.com search results. No login, no browser, no proxies: one keyless GET per query. Per the README:
-
Query by region and category using Chotot's own codes, visible in the query string of any chotot.com search URL:
region_v2location codes (13000 = Ho Chi Minh City, 12000 = Hanoi) andcgcategory codes (1000 = real estate, 2000 = vehicles). Omit the category to pull everything in a region. - Built for lists: up to 25 queries per run with configurable parallelism (up to 20 concurrent), so a portfolio of regions and categories is a single run.
-
Budget-aware batching:
maxItemsPerQuerybounds rows per query, and since each row is one charged result event, a small sample (the README's example: 5 rows × 2 queries ≈ $0.025) fits tight budgets. - One structured row per ad: ad title (in Vietnamese, as listed), numeric price plus Chotot's own formatted price string, area/district name, category label, seller display name, posting timestamp, thumbnail image URL, direct listing link, and retrieval timestamps.
The README states the limits plainly: it does not translate Vietnamese text, does not extract seller phone numbers beyond the public display name, and caps at 50 ads per query — a live sample of a region/category, not a full historical archive. A query that returns nothing is logged with found: false and the reason, and is not charged.
Example: input and output
Ho Chi Minh City real estate plus all of Hanoi, five ads per query:
{
"items": ["13000:1000", "12000"],
"maxItemsPerQuery": 5,
"maxConcurrency": 5
}
Building the query list is copy-paste work: the region and category codes are visible in the query string of any chotot.com search-results URL, so no code hunting is required.
A real row from a real run, quoted from the README:
{
"input": "13000:1000",
"found": true,
"adId": 133774586,
"title": "CHÍNH CHỦ BÁN NHÀ GẦN Q1",
"price": 3950000000,
"priceStr": "3,95 tỷ",
"areaName": "Quận Bình Thạnh",
"category": "Nhà ở",
"postedAt": "2026-07-26T13:55:52.000Z",
"image": "https://cdn.chotot.com/__JQpIRzNi-Ql0rrJlvaXEsNoEuUk2u6sGnjkZUWtQQ/preset:listing/plain/10170567e3d06cca404097085c321738-2994852814587351920.jpg",
"seller": "Quỳnh Bùi Thảo",
"url": "https://www.chotot.com/133774586.htm",
"scrapedAt": "2026-07-26T13:56:29.273Z"
}
Pricing and the free limit
Pay-per-event: $0.005 per run start plus $0.002 per ad found. Empty queries are never charged. A run delivering 100 ads costs $0.005 + 100 × $0.002 = $0.205; the README notes 1,000 ads come to about $2.01. Apify's free plan gives $5 of usage credits per month, so $5 covers about 24 hundred-ad runs — roughly 2,400 listings.
Try it
Paste region/category queries one per line and press Start: Chotot Vietnam Listings Scraper
For AI agents and MCP
A standard Apify actor with JSON input and structured JSON rows, callable from the Apify API, the SDKs, or the hosted Apify MCP server documented in the README. An agent can iterate the items query list, branch on found, and join rows on adId or url — with input echoed on every row so each ad stays traceable to the region/category query that produced it.
Top comments (0)