Chotot.com Scraper | Vietnam Classifieds & Property avatar

Chotot.com Scraper | Vietnam Classifieds & Property

Pricing

from $2.50 / 1,000 results

Go to Apify Store
Chotot.com Scraper | Vietnam Classifieds & Property

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

Haketa

Maintained by Community

Actor stats

0

Bookmarked

9

Total users

4

Monthly active users

16 days ago

Last modified

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.

Apify Actor


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 o parameter, 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

  1. Click "Try for free" on the Apify Store page for haketa/chotot-scraper
  2. Choose a Category (default: Property for Sale 2010) and Region (default: HCMC 12000)
  3. Optionally tick Scrape Detail API to get phones and full descriptions, set Max Records (e.g. 50 for a sample)
  4. Hit Start — your dataset is ready in seconds; download as JSON, CSV, Excel, HTML or XML

API Run (Python)

from apify_client import ApifyClient
client = 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', // Motorbikes
region: '13000', // Hanoi
scrapeDetails: 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:

EndpointPurposeReturns
GET /v1/public/ad-listing?region_v2={region}&cg={category}&limit=20&o={offset}&w=1&st=s,kPaginated listing indexArray of ads, plus total count
GET /v1/public/ad-detail/{listingId}Full ad detailPhone, 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 × attempt and 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 price field and a display string (850 triệu VND, 1.5 tỷ VND, 12K VND) is added in priceDisplay so dashboards don't need formatting logic
  • Category branching — the mapper detects whether a listing is a vehicle (carbrand present) or property and routes fields accordingly so area is 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 to subject) 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 null on property records and vice versa

Input Parameters

{
"category": "2010",
"region": "12000",
"scrapeDetails": false,
"maxRecords": 50,
"maxPages": 0,
"requestDelay": 500,
"proxyConfiguration": { "useApifyProxy": true }
}

Parameter reference

ParameterTypeDefaultDescription
categorystring 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.
regionstring enum"12000"Region/city code. 0 = All Vietnam, 12000 = Hồ Chí Minh, 13000 = Hà Nội, 15000 = Đà Nẵng, 17000 = Hải Phòng.
scrapeDetailsbooleanfalseWhen 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.
maxRecordsinteger0Maximum total listings to save. 0 = unlimited. Useful for testing (50) or capped scheduled runs (5000).
maxPagesinteger0Maximum API pages to walk. Each page is up to 20 listings. 0 = unlimited. Use this when you want depth control independent of record count.
requestDelayinteger500Milliseconds between API calls. Range 200–5,000. 500–1,000 is recommended; lower may trigger 429s on long runs.
proxyConfigurationobjectnoneApify 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 category to "all" and maxRecords to 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)

FieldTypeDescription
listingIdstringChotot's internal ad ID (use this to deduplicate or to construct detail URLs)
subjectstringListing title as posted by the seller, in Vietnamese
categorystringHuman-readable category label (Bán nhà đất, Xe máy, Ô tô…)
typestringBán (sale) or Cho thuê (rent) for property; brand/model context for vehicles
pricenumberRaw price in Vietnamese đồng (VND) — e.g. 850000000 for 850 million
priceDisplaystringFormatted price string (850 triệu VND, 1.5 tỷ VND, 12K VND)
wardstringSub-district / phường name (when reported)
districtstringDistrict name (e.g. Quận 1, Quận 7, Thủ Đức, Ba Đình)
regionstringCity / province name (Hồ Chí Minh, Hà Nội, Đà Nẵng…)
isVerifiedbooleantrue if Chotot has verified the seller's phone / identity badge
sellerNamestringSeller display name
sellerPhonestringSeller phone — only populated when scrapeDetails: true
descriptionstringListing body text — short in list mode, full in detail mode
imagesarray<string>Array of image URLs hosted on cdn.chotot.com
listingUrlstringCanonical page URL on chotot.com
datestringListing post date in YYYY-MM-DD
scrapedAtstringISO-8601 timestamp of extraction

Property-only fields (categories 2010, 2020)

FieldTypeDescription
areanumberFloor or land area in square metres ()
bedroomCountintegerNumber of bedrooms (phòng ngủ)
bathroomCountintegerNumber of bathrooms / toilets (phòng tắm)
houseDirectionstringCompass direction the front of the house faces (Đông, Tây, Nam, Bắc and mixed) — important in Vietnamese property culture
legalDocumentstringLegal document status — Sổ đỏ (red book / land use right), Sổ hồng (pink book / ownership), Giấy tờ khác, etc.
furniturestringFurnishing status (Đầy đủ, Một phần, Không có)

Vehicle-only fields (categories 4010, 4020)

FieldTypeDescription
makestringBrand — e.g. Honda, Yamaha, Toyota, Hyundai, Mercedes-Benz, VinFast
modelstringModel — e.g. Wave Alpha, Vision, Vios, Fortuner, Lux A2.0
yearintegerManufacture year (regdate)
mileagenumberMileage in km (used cars and motorbikes only)
transmissionstringTự động (automatic) or Số sàn (manual) — translated from numeric codes
fuelTypestringXăng (petrol), Dầu diesel, Điện (electric), Hybrid
colorstringVehicle 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.

CodeVietnameseEnglishNotes
2010Bán nhà đấtProperty for SaleHouses, apartments, land, villas, shophouses
2020Cho thuê nhà đấtProperty for RentLong-term and short-term rentals
4020Ô tôCarsNew and used cars
4010Xe máyMotorbikesScooters, motorbikes, electric bikes — Vietnam's dominant vehicle category
5000Điện tửElectronicsPhones, laptops, cameras, TVs, audio, appliances
7000Nội thấtFurnitureFurniture, home decor, kitchen appliances
9000Thời trangFashionClothing, shoes, bags, watches, accessories
allAll CategoriesSequentially walks the main six categories

Region Reference

CodeVietnameseEnglishPopulation
0Toàn quốcAll Vietnam~99M
12000Hồ Chí MinhHo Chi Minh City (HCMC / Saigon)~9.3M metro
13000Hà NộiHanoi~8.5M metro
15000Đà NẵngDa Nang~1.2M
17000Hải PhòngHai 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ổ đỏ vs Sổ hồng price 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 legalDocument fields 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)

  1. Schedule the actor to run every morning at 07:00 ICT for your target category/city
  2. Add the Apify → Google Sheets integration to the schedule
  3. Receive a fresh chotot_hcmc_property_sale_YYYY-MM-DD tab 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 / ProvinceRegion CodePopulationWhy it matters
Ho Chi Minh City (HCMC / Saigon)12000~9.3M metroCommercial capital — Quận 1, 2, 7, Thủ Đức, Bình Thạnh dominate volume
Hanoi (Hà Nội)13000~8.5M metroPolitical capital — Ba Đình, Hoàn Kiếm, Cầu Giấy, Đống Đa, Tây Hồ
Da Nang (Đà Nẵng)15000~1.2MCoastal tourism hub, beach property and Airbnb-style rentals
Hai Phong (Hải Phòng)17000~2.1MNorthern port city, industrial and logistics centre
Can Tho (Cần Thơ)nationwide~1.6MMekong Delta hub — agricultural and SME economy
Bien Hoa (Biên Hòa)nationwide~1.2MIndustrial city east of HCMC, factory-worker housing demand
Nha Trang & Huenationwide~0.6M eachCoastal resort and central cultural hubs

Set region: "0" (All Vietnam) to pull across every province in a single run.


Cost & Performance

MetricValue
EnginePure HTTP via got-scraping — no browser
Memory footprint128–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 runPay-per-event — typically pennies for hundreds of records
Pricing modelPay-per-event (transparent per-record charging)
Data freshnessLive at run time — Chotot's gateway returns current state on every call
Auth requiredNone
Proxy requiredNo (recommended for 1,000+ records or sustained scheduling)
ConcurrencySafe to run multiple parallel category/region combos
Rate-limit handlingBuilt-in 429 detection with exponential back-off

  • Public data only — every field returned is publicly visible on chotot.com listing 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.


If you're building Southeast Asia or global marketplace pipelines, pair this Chotot actor with:

Southeast Asia & marketplaces

Global classifieds

Real estate cross-border

Automotive


Comparison vs. Alternatives

ApproachSetup timeMaintenanceCost (1K records)Schema normalizationVietnamese label translationDetail enrichment
This actor< 1 minuteZeroPenniesBuilt-in flat schemaBuilt-in (transmission, fuel, colour)One-flag toggle
Manual Chotot browsingHoursConstant"Free" (but human time)NoneNoneManual
Custom got/requests script1–2 daysOngoing schema babysittingFree + infraDIYDIYDIY
Headless Chrome scraper2–4 daysHigh — Chotot React rewrites break itHigh CU costDIYDIYPainful
Paid Vietnamese data brokersWeeksVendor-dependent$500–$5,000+/moVariableVariableVariable

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: 10 and pay pennies

Changelog

VersionDateNotes
1.0.02026-05Initial 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!