Chotot.com Scraper | Vietnam Classifieds & Property
Pricing
from $2.50 / 1,000 results
Chotot.com Scraper | Vietnam Classifieds & Property
Scrape Chotot.com (Chợ Tốt) — Vietnam's largest classifieds platform. Property, cars, motorbikes, electronics & furniture in HCMC & Hanoi. Direct API, no browser needed, fast & reliable.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
9
Total users
4
Monthly active users
16 days ago
Last modified
Categories
Share
Chotot.com Scraper — Vietnam Classifieds, Property, Cars, Motorbikes & Electronics Data Extractor
The most complete Chotot.com (Chợ Tốt) data extraction tool on Apify. Pull structured listings from Vietnam's largest classifieds and real estate marketplace — properties for sale and rent, used cars, motorbikes, electronics, furniture and fashion across Ho Chi Minh City, Hanoi, Da Nang, Hai Phong and the rest of Vietnam — straight from Chotot's official public API, no browser, no login, no CAPTCHAs.
What This Actor Does
The Chotot.com Scraper is a production-ready Apify Actor that extracts structured listing data from Chotot.com (Chợ Tốt) — by far the largest peer-to-peer classifieds and real estate platform in Vietnam, with tens of millions of monthly visitors and active listings across every major city from Ho Chi Minh City and Hanoi to Da Nang, Hai Phong, Can Tho and Bien Hoa.
Instead of rendering pages in a headless browser, this actor talks directly to Chotot's public gateway API (gateway.chotot.com/v1/public/ad-listing and /ad-detail/{id}). That makes runs fast, cheap and resilient — typical pages return in 200-400 ms, a 1,000-listing pull finishes in a couple of minutes, and the data ships pre-normalized in a flat JSON shape that any database, CRM or BI tool can ingest without per-page parsing.
In a single run the actor returns clean records covering:
- Property for sale (Bán nhà đất) — houses, apartments, land, villas with bedrooms, bathrooms, area, legal document status, house direction, furniture
- Property for rent (Cho thuê nhà đất) — long-term and short-term rentals with monthly price and furnishing details
- Cars (Ô tô) — used and new vehicles with make, model, year, mileage, transmission, fuel type, colour
- Motorbikes (Xe máy) — Vietnam's defining vehicle category, scooters and motorbikes with full spec data
- Electronics (Điện tử) — phones, laptops, cameras, TVs and home appliances
- Furniture (Nội thất) — household furniture, decor and appliances
- Fashion (Thời trang) — clothing, shoes, bags, accessories
Each record includes title, normalized VND price, human-readable price display (tỷ/triệu), category, type (Bán/Cho thuê), region, district and ward, verification badge, seller name, listing URL, image gallery and a timestamp. Enable the optional detail-API enrichment and you also get phone numbers, full descriptions, complete image arrays and extra property/vehicle attributes.
Why scrape Chotot yourself when this exists?
Chotot looks scrape-friendly until you actually try it at scale. Then you discover:
- Chotot's frontend is a heavy React app — pure HTML scraping returns near-empty pages without JS execution
- The official gateway API has undocumented category codes (
2010,4020,5000…) and Vietnamese region codes (12000,13000…) — there is no public reference for these - Pagination is offset-based via the
oparameter, not page numbers — get it wrong and you silently skip listings or fetch duplicates - Many enum fields (transmission, fuel, colour, district) are returned as numeric codes that mean nothing without translation tables
- Prices come as raw VND integers — 850000000 means 850 million VND, 1500000000 means 1.5 tỷ — your downstream consumer expects a clean display string
- Detail data (phone, full description, all photos) lives behind a second API call per listing — bolting that onto a scraper, with retries and back-off, is half a day of work
- Chotot rate-limits aggressive callers with HTTP 429 — you need exponential back-off and session rotation
- Vietnamese diacritics (
Hồ Chí Minh,Đà Nẵng,Bất động sản) need UTF-8 discipline end-to-end or your dataset turns into mojibake - Vehicle vs property fields overlap (
area,model,year) — naive scrapers conflate them; this actor branches on category to keep each record clean - Chotot occasionally returns ads with no
list_id— without dedup logic you end up double-counting
This actor solves all of the above. You point it at a category and a city, set a record cap, and get back clean JSON with bilingual labels, normalized prices, image URLs, and a deterministic schema ready for Postgres, BigQuery, Snowflake, Sheets or any prop-tech pipeline.
Quick Start
One-Click Run
- Click "Try for free" on the Apify Store page for haketa/chotot-scraper
- Choose a Category (default: Property for Sale
2010) and Region (default: HCMC12000) - Optionally tick Scrape Detail API to get phones and full descriptions, set Max Records (e.g.
50for a sample) - Hit Start — your dataset is ready in seconds; download as JSON, CSV, Excel, HTML or XML
API Run (Python)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("haketa/chotot-scraper").call(run_input={"category": "2010", # Property for Sale"region": "12000", # Ho Chi Minh City"scrapeDetails": True,"maxRecords": 200,"requestDelay": 600})for record in client.dataset(run["defaultDatasetId"]).iterate_items():print(record["subject"], "-", record["priceDisplay"], "-", record["district"])
API Run (Node.js / TypeScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/chotot-scraper').call({category: '4010', // Motorbikesregion: '13000', // HanoiscrapeDetails: false,maxRecords: 500});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} motorbike listings from Hanoi`);items.slice(0, 5).forEach(i => console.log(i.subject, '|', i.priceDisplay, '|', i.make, i.model));
API Run (cURL)
curl -X POST "https://api.apify.com/v2/acts/haketa~chotot-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"category": "4020","region": "12000","scrapeDetails": true,"maxRecords": 100}'
How It Works
Chotot exposes a public JSON gateway used by its own React frontend at gateway.chotot.com/v1/public/. This actor calls that gateway directly using got-scraping — no Playwright, no Chrome, no DOM parsing. Two endpoints power everything:
| Endpoint | Purpose | Returns |
|---|---|---|
GET /v1/public/ad-listing?region_v2={region}&cg={category}&limit=20&o={offset}&w=1&st=s,k | Paginated listing index | Array of ads, plus total count |
GET /v1/public/ad-detail/{listingId} | Full ad detail | Phone, full description, image gallery, extra specs |
Pagination strategy
Chotot uses offset-based pagination via the o parameter (not page=N). The actor walks pages of 20 records at a time, multiplying page number by 20 to compute the offset, until either maxRecords, maxPages, or an empty ads array is hit.
Engineering details
- Pure HTTP via
got-scraping— no Chromium overhead, no Puppeteer, no Playwright. Roughly 10x lower CU cost than a browser-based competitor - Automatic 429 back-off — when Chotot returns rate-limit responses the actor sleeps
5s × attemptand retries up to 3 times per request - Optional residential proxy — proxy configuration is off by default (Chotot's public API tolerates moderate volume from datacenter IPs) and rotates a session ID per request when enabled, recommended for runs above ~1,000 records
- Numeric-code translation — built-in maps convert Chotot's internal codes for transmission (
1=Tự động,2=Số sàn), fuel (1=Xăng,2=Dầu diesel,3=Điện,4=Hybrid) and colour (10 colours) into the human-readable Vietnamese labels you actually want - Price normalization — raw VND integers are kept in the
pricefield and a display string (850 triệu VND,1.5 tỷ VND,12K VND) is added inpriceDisplayso dashboards don't need formatting logic - Category branching — the mapper detects whether a listing is a vehicle (
carbrandpresent) or property and routes fields accordingly soareais never confused with engine size - Image URL stitching — list endpoints return just an image path; the actor wraps it with Chotot's
cdn.chotot.com/unsafe/640x0/CDN prefix so URLs are immediately usable. Detail-mode replaces this with the full image array from/ad-detail/ - In-memory dedup — every record is keyed by
listingId(falling back tosubject) so the same ad never appears twice in your dataset - Configurable request delay — default 500 ms between calls, tunable from 200 ms to 5,000 ms
- Deterministic flat schema — every record has the same keys regardless of category; vehicle-only fields are
nullon property records and vice versa
Input Parameters
{"category": "2010","region": "12000","scrapeDetails": false,"maxRecords": 50,"maxPages": 0,"requestDelay": 500,"proxyConfiguration": { "useApifyProxy": true }}
Parameter reference
| Parameter | Type | Default | Description |
|---|---|---|---|
category | string enum | "2010" | Chotot category code. 2010 = Property for Sale, 2020 = Property for Rent, 4020 = Cars, 4010 = Motorbikes, 5000 = Electronics, 7000 = Furniture, 9000 = Fashion, all = walks through the main six categories sequentially. |
region | string enum | "12000" | Region/city code. 0 = All Vietnam, 12000 = Hồ Chí Minh, 13000 = Hà Nội, 15000 = Đà Nẵng, 17000 = Hải Phòng. |
scrapeDetails | boolean | false | When true, the actor calls /ad-detail/{id} for every listing to enrich it with seller phone, full description, complete image gallery and extra property/vehicle attributes. Roughly 2x slower but the data is dramatically richer. |
maxRecords | integer | 0 | Maximum total listings to save. 0 = unlimited. Useful for testing (50) or capped scheduled runs (5000). |
maxPages | integer | 0 | Maximum API pages to walk. Each page is up to 20 listings. 0 = unlimited. Use this when you want depth control independent of record count. |
requestDelay | integer | 500 | Milliseconds between API calls. Range 200–5,000. 500–1,000 is recommended; lower may trigger 429s on long runs. |
proxyConfiguration | object | none | Apify proxy block. Off by default. Tick useApifyProxy: true and pick the RESIDENTIAL group for large pulls (1,000+ records) or if you start seeing rate-limit warnings. |
Tip: to crawl every category in HCMC, set
categoryto"all"andmaxRecordsto a sensible cap (e.g.2000). The actor walks six categories sequentially and short-circuits as soon as the cap is met.
Output Schema
Every record uses the same flat JSON shape regardless of category. Property records have area, bedroomCount, bathroomCount populated; vehicle records have make, model, year, mileage, transmission, fuelType, color; electronics/furniture/fashion records use just the common fields. Unused fields are explicitly null.
Common fields (all categories)
| Field | Type | Description |
|---|---|---|
listingId | string | Chotot's internal ad ID (use this to deduplicate or to construct detail URLs) |
subject | string | Listing title as posted by the seller, in Vietnamese |
category | string | Human-readable category label (Bán nhà đất, Xe máy, Ô tô…) |
type | string | Bán (sale) or Cho thuê (rent) for property; brand/model context for vehicles |
price | number | Raw price in Vietnamese đồng (VND) — e.g. 850000000 for 850 million |
priceDisplay | string | Formatted price string (850 triệu VND, 1.5 tỷ VND, 12K VND) |
ward | string | Sub-district / phường name (when reported) |
district | string | District name (e.g. Quận 1, Quận 7, Thủ Đức, Ba Đình) |
region | string | City / province name (Hồ Chí Minh, Hà Nội, Đà Nẵng…) |
isVerified | boolean | true if Chotot has verified the seller's phone / identity badge |
sellerName | string | Seller display name |
sellerPhone | string | Seller phone — only populated when scrapeDetails: true |
description | string | Listing body text — short in list mode, full in detail mode |
images | array<string> | Array of image URLs hosted on cdn.chotot.com |
listingUrl | string | Canonical page URL on chotot.com |
date | string | Listing post date in YYYY-MM-DD |
scrapedAt | string | ISO-8601 timestamp of extraction |
Property-only fields (categories 2010, 2020)
| Field | Type | Description |
|---|---|---|
area | number | Floor or land area in square metres (m²) |
bedroomCount | integer | Number of bedrooms (phòng ngủ) |
bathroomCount | integer | Number of bathrooms / toilets (phòng tắm) |
houseDirection | string | Compass direction the front of the house faces (Đông, Tây, Nam, Bắc and mixed) — important in Vietnamese property culture |
legalDocument | string | Legal document status — Sổ đỏ (red book / land use right), Sổ hồng (pink book / ownership), Giấy tờ khác, etc. |
furniture | string | Furnishing status (Đầy đủ, Một phần, Không có) |
Vehicle-only fields (categories 4010, 4020)
| Field | Type | Description |
|---|---|---|
make | string | Brand — e.g. Honda, Yamaha, Toyota, Hyundai, Mercedes-Benz, VinFast |
model | string | Model — e.g. Wave Alpha, Vision, Vios, Fortuner, Lux A2.0 |
year | integer | Manufacture year (regdate) |
mileage | number | Mileage in km (used cars and motorbikes only) |
transmission | string | Tự động (automatic) or Số sàn (manual) — translated from numeric codes |
fuelType | string | Xăng (petrol), Dầu diesel, Điện (electric), Hybrid |
color | string | Vehicle colour in Vietnamese (Trắng, Đen, Bạc, Đỏ, Xanh, etc.) |
Example: Property for sale in HCMC
{"listingId": "118456732","subject": "Bán nhà mặt tiền Nguyễn Huệ Quận 1, 4 tầng, sổ hồng","category": "Bán nhà đất","type": "Bán","price": 25000000000,"priceDisplay": "25 tỷ VND","area": 85,"ward": "Bến Nghé","district": "Quận 1","region": "Hồ Chí Minh","bedroomCount": 4,"bathroomCount": 4,"houseDirection": "Đông Nam","legalDocument": "Sổ hồng","furniture": "Đầy đủ","make": null,"model": null,"year": null,"mileage": null,"transmission": null,"fuelType": null,"color": null,"isVerified": true,"sellerName": "Nguyễn Văn Minh","sellerPhone": "090*****34","description": "Nhà mới xây 2024, mặt tiền 5m, gần Phố đi bộ Nguyễn Huệ, tiện kinh doanh...","images": ["https://cdn.chotot.com/unsafe/640x0/abc123.jpg","https://cdn.chotot.com/unsafe/640x0/def456.jpg"],"listingUrl": "https://www.chotot.com/118456732.htm","date": "2026-05-12","scrapedAt": "2026-05-16T09:14:22.000Z"}
Example: Used motorbike in Hanoi
{"listingId": "117992841","subject": "Honda Wave Alpha 2022 màu đen, biển HN, chính chủ","category": "Xe máy","type": "Bán","price": 18500000,"priceDisplay": "19 triệu VND","area": null,"ward": "Trung Hòa","district": "Cầu Giấy","region": "Hà Nội","bedroomCount": null,"bathroomCount": null,"houseDirection": null,"legalDocument": null,"furniture": null,"make": "Honda","model": "Wave Alpha","year": 2022,"mileage": 8500,"transmission": "Số sàn","fuelType": "Xăng","color": "Đen","isVerified": true,"sellerName": "Trần Quốc Anh","sellerPhone": null,"description": "Xe đi giữ gìn, máy zin 100%, bảo dưỡng định kỳ Honda...","images": ["https://cdn.chotot.com/unsafe/640x0/wave001.jpg"],"listingUrl": "https://www.chotot.com/117992841.htm","date": "2026-05-15","scrapedAt": "2026-05-16T09:15:01.000Z"}
Category Reference
Chotot uses numeric category codes internally. The actor exposes these as the category input enum.
| Code | Vietnamese | English | Notes |
|---|---|---|---|
2010 | Bán nhà đất | Property for Sale | Houses, apartments, land, villas, shophouses |
2020 | Cho thuê nhà đất | Property for Rent | Long-term and short-term rentals |
4020 | Ô tô | Cars | New and used cars |
4010 | Xe máy | Motorbikes | Scooters, motorbikes, electric bikes — Vietnam's dominant vehicle category |
5000 | Điện tử | Electronics | Phones, laptops, cameras, TVs, audio, appliances |
7000 | Nội thất | Furniture | Furniture, home decor, kitchen appliances |
9000 | Thời trang | Fashion | Clothing, shoes, bags, watches, accessories |
all | — | All Categories | Sequentially walks the main six categories |
Region Reference
| Code | Vietnamese | English | Population |
|---|---|---|---|
0 | Toàn quốc | All Vietnam | ~99M |
12000 | Hồ Chí Minh | Ho Chi Minh City (HCMC / Saigon) | ~9.3M metro |
13000 | Hà Nội | Hanoi | ~8.5M metro |
15000 | Đà Nẵng | Da Nang | ~1.2M |
17000 | Hải Phòng | Hai Phong | ~2.1M |
Use Cases
Real estate & property analytics
Vietnamese prop-tech firms, foreign investors, brokerages and PropTech SaaS startups use Chotot data to:
- Track HCMC and Hanoi listing prices by district week-over-week
- Build heat maps of supply by ward across Quận 7, Thủ Đức, Cầu Giấy and other prime areas
- Benchmark
Sổ đỏvsSổ hồngprice premiums — properties with full legal documents typically transact 8-15% higher - Compute price-per-m² by district to validate developer pricing strategies
- Feed automated valuation models (AVMs) with thousands of fresh comparables
Used motorbike & car market intelligence
Vietnam has ~70 million motorbikes — the largest fleet of any country relative to population. Auto-trade companies, OEM marketing teams, lenders and classified competitors use Chotot to:
- Track residual values for Honda Wave, Vision, SH and Yamaha Exciter by year and mileage
- Benchmark VinFast vs Toyota vs Hyundai used pricing across HCMC, Hanoi and Da Nang
- Source dealer inventory by filtering verified sellers with multiple active listings
- Power trade-in pricing engines with live comp data
Expat & relocation research
Relocation services, international assignment consultancies and expats moving to Vietnam use Chotot listings to:
- Pre-shop apartments in District 1, 2, 7 and Thảo Điền before flying in
- Compare furnished vs unfurnished rental pricing by ward
- Benchmark Hanoi (Ba Đình, Hoàn Kiếm) vs HCMC living costs
- Build a relocation cost spreadsheet with property + motorbike + furniture data in one extract
Second-hand arbitrage & ecommerce intelligence
Arbitrage shops, social-commerce sellers, Shopee/Lazada power-sellers and marketplace analysts use Chotot to:
- Spot underpriced electronics (iPhones, MacBooks, consoles) and flip them
- Source pre-owned designer fashion for resale on TikTok Shop or Instagram
- Benchmark Chotot vs Shopee/Lazada/Tiki on second-hand electronics pricing
- Map regional category preferences — HCMC over-indexes on apartments, Hanoi on houses, Da Nang on coastal villas
- Track verified-seller price premiums vs unverified sellers as a trust signal
Prop-tech & FinTech app development
Mobile-first Vietnamese startups feed Chotot data into:
- Mortgage affordability calculators seeded with real district-level prices
- Auto-loan origination flows that price residual values from live used-car comps
- Insurance underwriting for motorbike and car policies, calibrated against current market values
- Aggregator apps that combine Chotot + Mudah + Lamudi listings for cross-border SEA buyers
Academic, journalism & competitive intelligence
Universities, ADB/World Bank country teams, journalists and rival platforms (Batdongsan, Nha Tot, Muaban, Bonbanh) use Chotot listings to:
- Run urban affordability studies and price-to-income analyses across Tier-1 vs Tier-2 cities
- Measure EV motorbike adoption empirically by counting
fuelType: "Điện"listings month-over-month - Back district-level price escalation features with hard comp data
- Spot anomalies in
legalDocumentfields for investigative reporting - Benchmark category fill, seller migration and pricing edges across competing platforms
Sample Queries & Recipes
Recipe 1: District 1 luxury apartments in HCMC
{"category": "2010","region": "12000","scrapeDetails": true,"maxRecords": 200}
Then filter downstream for district == "Quận 1" and price >= 5000000000.
Recipe 2: All Hanoi motorbikes under 30 million VND
{"category": "4010","region": "13000","scrapeDetails": false,"maxRecords": 1000,"requestDelay": 700}
Filter results where price <= 30000000.
Recipe 3: Used Honda cars in HCMC with verified sellers and phones
{"category": "4020","region": "12000","scrapeDetails": true,"maxRecords": 300}
Filter where make == "Honda" and isVerified == true.
Recipe 4: Da Nang vacation rentals
{"category": "2020","region": "15000","scrapeDetails": true,"maxRecords": 500}
Recipe 5: Sample 50 listings from every major category in HCMC
{"category": "all","region": "12000","scrapeDetails": false,"maxRecords": 300}
Recipe 6: Nationwide iPhone listings (electronics)
{"category": "5000","region": "0","scrapeDetails": false,"maxRecords": 2000,"requestDelay": 800,"proxyConfiguration": { "useApifyProxy": true }}
Filter downstream where subject contains "iPhone".
Recipe 7: Quick sanity check (10 records, fastest run)
{"category": "2010","region": "12000","maxRecords": 10,"requestDelay": 300}
Integration Examples
Google Sheets (via Apify Integration)
- Schedule the actor to run every morning at 07:00 ICT for your target category/city
- Add the Apify → Google Sheets integration to the schedule
- Receive a fresh
chotot_hcmc_property_sale_YYYY-MM-DDtab each day, ready for pivot tables and conditional formatting
Make.com / Zapier / n8n
Hook into the Apify Run module on any of the major automation platforms to:
- Push new listings into Slack/Telegram for buyer's-agent watchlists (price ≤ X, area ≥ Y, district = Z)
- Email expat clients when matching rentals appear in District 2, 7 or Thảo Điền
- Trigger Airtable inserts for prop-tech CRMs
- Open Jira tickets for analyst follow-up on suspicious legal-document mismatches
Power BI / Tableau / Looker Studio
Add Apify's REST endpoint as a JSON data source, refresh on the Apify schedule, and build:
- District-level price-per-m² heat maps for HCMC and Hanoi
- Motorbike residual-value curves by brand and year
- Verified-vs-unverified seller price-delta dashboards
- Listing-velocity (new ads per day) trend charts
Postgres / Snowflake / BigQuery
Use the Apify webhook to POST each completed run to your warehouse ingestion endpoint. Recommended PK is listing_id; convert VND to USD on read using a daily FX table.
Salesforce / HubSpot CRM enrichment
Push verified-seller listings as leads, deduplicated by sellerPhone (when scrapeDetails: true). Use region/district to auto-route to geographic territory owners.
Webhooks & Slackbots
Subscribe to Apify "run succeeded" webhooks to relay each run into a Slack channel — perfect for buyer's agents, sourcing teams or expat house-hunting groups.
Major Vietnam Markets Covered
| City / Province | Region Code | Population | Why it matters |
|---|---|---|---|
| Ho Chi Minh City (HCMC / Saigon) | 12000 | ~9.3M metro | Commercial capital — Quận 1, 2, 7, Thủ Đức, Bình Thạnh dominate volume |
| Hanoi (Hà Nội) | 13000 | ~8.5M metro | Political capital — Ba Đình, Hoàn Kiếm, Cầu Giấy, Đống Đa, Tây Hồ |
| Da Nang (Đà Nẵng) | 15000 | ~1.2M | Coastal tourism hub, beach property and Airbnb-style rentals |
| Hai Phong (Hải Phòng) | 17000 | ~2.1M | Northern port city, industrial and logistics centre |
| Can Tho (Cần Thơ) | nationwide | ~1.6M | Mekong Delta hub — agricultural and SME economy |
| Bien Hoa (Biên Hòa) | nationwide | ~1.2M | Industrial city east of HCMC, factory-worker housing demand |
| Nha Trang & Hue | nationwide | ~0.6M each | Coastal resort and central cultural hubs |
Set
region: "0"(All Vietnam) to pull across every province in a single run.
Cost & Performance
| Metric | Value |
|---|---|
| Engine | Pure HTTP via got-scraping — no browser |
| Memory footprint | 128–512 MB (default 256 MB sufficient) |
| Runtime (50 listings, no details) | 10–20 seconds |
| Runtime (500 listings, no details) | 1–3 minutes |
| Runtime (500 listings, with details) | 4–8 minutes |
| Cost per run | Pay-per-event — typically pennies for hundreds of records |
| Pricing model | Pay-per-event (transparent per-record charging) |
| Data freshness | Live at run time — Chotot's gateway returns current state on every call |
| Auth required | None |
| Proxy required | No (recommended for 1,000+ records or sustained scheduling) |
| Concurrency | Safe to run multiple parallel category/region combos |
| Rate-limit handling | Built-in 429 detection with exponential back-off |
Compliance, Privacy & Legal Notes
- Public data only — every field returned is publicly visible on
chotot.comlisting pages, accessible without login - No PII enrichment beyond what the seller chose to post — Chotot already publishes seller names and partial phone numbers on the public page
- No bypass of paywalls or member-only content — the actor only hits Chotot's documented public gateway endpoints used by the website itself
- Respect Chotot's Terms of Service — use this actor for analytics, market research and lead-gen workflows that comply with Chotot's ToS and Vietnamese consumer-protection law (Decree 13/2023/NĐ-CP on personal data protection)
- GDPR / Vietnamese PDPD compliance is the consumer's responsibility — if you store, process or contact sellers, ensure you have a lawful basis and honour opt-out requests
- No anti-bot bypass beyond standard headers and back-off — the actor uses a normal Chrome user-agent and respects 429 responses
- Rate-limit politeness built-in — default 500 ms request delay; please don't lower below 200 ms
Important: This actor is provided for legitimate market research, real estate analytics, vehicle valuation, ecommerce intelligence and B2B lead-generation use cases. Spam, harassment, scraping for resale of personal data, or any use that violates Vietnamese law or Chotot's ToS is prohibited and outside the scope of this tool.
Frequently Asked Questions
How fresh is the data?
Live at run time. Chotot's gateway API returns the current state of every listing on every request, so your dataset reflects Chotot's site at the moment of extraction. Schedule the actor daily (or hourly) to maintain a near-real-time mirror.
How many records can I get per run?
Practically unlimited within Chotot's catalogue. Set maxRecords: 0 to disable the cap. A single category in a single city typically returns 5,000–50,000 active listings; nationwide categories return many more. Use requestDelay: 700 and a residential proxy when pulling 5,000+ records.
Does this scraper require a Chotot login or API key?
No. Chotot's gateway API at gateway.chotot.com/v1/public/ is open to anonymous clients — the same endpoints power Chotot's own React frontend. You only need an Apify account to run the actor.
Are there CAPTCHAs?
No. The gateway API does not serve CAPTCHAs. Aggressive rate limits return HTTP 429, which the actor automatically retries with exponential back-off.
Why do some records have null sellerPhone?
Phone numbers are only returned by the /ad-detail/{id} endpoint, not by the listing index. Set scrapeDetails: true to fetch them. Phones on Chotot are typically partially masked (e.g. 090*****34) until the buyer clicks "Show number" in-app — the actor returns the same form Chotot serves anonymously.
Can I filter by price range, area, or bedroom count?
The actor returns these as structured fields — apply filters downstream in SQL (WHERE price BETWEEN 1000000000 AND 5000000000), Python ([r for r in records if r["bedroomCount"] >= 3]) or Sheets. This keeps the actor universal across categories.
Does it scrape every district of HCMC and Hanoi?
Yes — the region parameter operates at city/province level, and the API returns listings from every district within. Filter by district downstream to slice by Quận 1, Quận 7, Thủ Đức, Ba Đình, Cầu Giấy, etc.
What's the difference between Sổ đỏ and Sổ hồng?
Sổ đỏ (red book) is the Land Use Right Certificate; Sổ hồng (pink book) is the Ownership Certificate for House and Land. Both are highly valued by buyers — properties without either typically trade at a 10–25% discount. The legalDocument field surfaces this directly.
Can it scrape every Vietnamese city, not just HCMC and Hanoi?
Set region: "0" (All Vietnam) and the API returns listings nationwide — including Can Tho, Bien Hoa, Nha Trang, Hue, and every other province. Use district and region in the output to slice by city downstream.
Does it handle Vietnamese characters correctly?
Yes — the actor preserves full UTF-8 throughout. Hồ Chí Minh, Đà Nẵng, Bất động sản, Phường Bến Nghé, Quận 1 and all Vietnamese diacritics round-trip cleanly into JSON.
What formats can I export?
JSON, CSV, Excel (XLSX), HTML, XML, RSS and JSON Lines — directly from the Apify dataset view or via the API.
Can it be scheduled?
Yes — Apify's built-in Scheduler supports any cron expression. Common patterns: daily at 07:00 ICT for next-morning market reports; hourly for high-velocity lead pipelines; weekly for analytics rollups.
Does this work on the Apify Free Plan?
Yes. Small runs (50–500 records, no detail enrichment) complete well within free-tier limits. Larger ongoing pipelines benefit from a paid plan for compute and storage headroom.
Does it scrape other Vietnamese marketplaces (Batdongsan, Muaban, Nha Tot)?
No — this actor is Chotot-specific. For a broader Vietnam dataset, combine it with separate scrapers for those platforms.
Can I get historical prices?
Not from a single run — Chotot only returns currently-active listings. Schedule the actor daily and archive each dataset to build your own time-series. Apify stores all run datasets indefinitely on most plans.
Is proxy needed?
Not for small runs (under ~1,000 records). For larger pulls or sustained scheduling, enable proxyConfiguration.useApifyProxy and pick the RESIDENTIAL group. The actor rotates session IDs automatically.
How do I report a bug or request a feature?
Open an issue on the Apify Store actor page or contact the developer through the Apify Console. Common requests (new categories, additional cities, extra fields) are usually shipped within a few days.
Related Apify Actors by Haketa
If you're building Southeast Asia or global marketplace pipelines, pair this Chotot actor with:
Southeast Asia & marketplaces
- Lelong.my Scraper (Malaysia) — Malaysia's veteran online marketplace (e-commerce, auto parts, antiques)
- Lamudi Philippines Real Estate Scraper — PH property listings (Manila, Cebu, Davao)
- Realestate.com.kh Scraper — Cambodia property (Phnom Penh, Siem Reap)
- Mourjan Scraper — MENA classifieds across UAE, Saudi, Kuwait
Global classifieds
- Kleinanzeigen.de Scraper — Germany's largest classifieds platform
- Marktplaats.nl Scraper — Netherlands' #1 classifieds (eBay Classifieds family)
- Kijiji.ca Scraper — Canada's largest classifieds platform
- OfferUp Scraper — US peer-to-peer marketplace
- TradeMe Scraper — New Zealand's dominant marketplace
Real estate cross-border
- Domain.com.au Property Scraper — Australia
- Zameen.com Scraper — Pakistan
- Immoweb.be Scraper — Belgium
- VivaReal Brazil Scraper — Brazil
Automotive
- YallaMotor Scraper — GCC new and used vehicles
Comparison vs. Alternatives
| Approach | Setup time | Maintenance | Cost (1K records) | Schema normalization | Vietnamese label translation | Detail enrichment |
|---|---|---|---|---|---|---|
| This actor | < 1 minute | Zero | Pennies | Built-in flat schema | Built-in (transmission, fuel, colour) | One-flag toggle |
| Manual Chotot browsing | Hours | Constant | "Free" (but human time) | None | None | Manual |
Custom got/requests script | 1–2 days | Ongoing schema babysitting | Free + infra | DIY | DIY | DIY |
| Headless Chrome scraper | 2–4 days | High — Chotot React rewrites break it | High CU cost | DIY | DIY | Painful |
| Paid Vietnamese data brokers | Weeks | Vendor-dependent | $500–$5,000+/mo | Variable | Variable | Variable |
Why Pay-Per-Event Pricing?
Other Vietnam-scraping tools either charge a flat monthly subscription (you pay even when idle) or per-Compute-Unit (unpredictable). This actor uses pay-per-event pricing:
- You only pay when the actor runs — no idle subscription burn
- Charges scale with the data you actually consume
- Transparent line-item billing inside the Apify console
- No monthly minimums or seat fees
- Free to evaluate — run with
maxRecords: 10and pay pennies
Changelog
| Version | Date | Notes |
|---|---|---|
| 1.0.0 | 2026-05 | Initial public release — direct gateway API, 7 categories, 4 major cities + nationwide, detail-API enrichment, code-to-label translation maps, 429 back-off, residential proxy support |
Keywords
Chotot scraper · Chotot.com data · Chợ Tốt scraper · Vietnam classifieds API · Vietnam real estate data · HCMC property scraper · Hanoi property scraper · Ho Chi Minh City real estate data · Da Nang property scraper · Vietnam motorbike data · Chotot price scraper · Chotot listings extractor · Vietnamese property listings · Sổ đỏ Sổ hồng property data · District 1 District 7 Thủ Đức apartments · Ba Đình Hoàn Kiếm Cầu Giấy real estate · Vietnam used car data · Vietnam motorbike marketplace · Honda Wave Vision SH listings · Yamaha Exciter listings · VinFast used car data · Vietnam ecommerce intelligence · Vietnam C2C marketplace · Southeast Asia classifieds scraper · Vietnam prop-tech API · Vietnam relocation data · expat Vietnam apartment search · Vietnam BĐS scraper · bất động sản API · Chợ Tốt API extractor · Vietnam furniture electronics fashion data · Apify Vietnam actor · Hai Phong Can Tho Bien Hoa listings · Vietnam rental data · Chotot lead generation · Vietnam classifieds JSON · Vietnam marketplace web scraping
Support
- Bug reports: Use the Issues tab on the Apify Store page
- Feature requests: Same place — please describe the use case (new category, extra city, extra field)
- Direct contact: Through the Apify developer profile haketa
If this actor saves you time, a 5-star rating on the Apify Store helps other Vietnam-focused operators, prop-tech teams and analysts discover it. Cảm ơn bạn!