Batdongsan.com.vn icon

Batdongsan.com.vn

From $1/1K. Scrape Batdongsan.com.vn property listings into clean JSON. Search by listing type, property category, city, or search URL. Automatically…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Batdongsan.com.vn at a glance

Batdongsan.com.vn is a ready-to-run Apify actor from abotapi for collecting real estate data. Its documented output includes id, change type (incremental mode), url, type and property, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Real Estate, Automation, Developer Tools
Region
Asia
Pricing
$2.00 per 1,000 results (Free plan), from $1.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
26 options

From $1/1K. Scrape Batdongsan.com.vn property listings into clean JSON. Search by listing type, property category, city, or search URL. Automatically paginate results and extract prices, GPS coordinates, property specs, agent details, listing dates, and high-resolution photos.

What Batdongsan.com.vn can do

  • Two input modes, real filters. Search mode takes a listing type, property type and city plus min/max price, min/max area, bedrooms, house-facing direction, a keyword and a sort order, all applied by batdongsan.com.vn itself so only matching listings are fetched and billed. URL mode takes any batdongsan.com.vn link you already refined in your browser.
  • Buy and rent in one run, 16 property types. Including mini apartments, shophouses, condotels, farms and resorts, rooms for rent and shops or kiosks.
  • Detail enrichment on demand. Turn it on for GPS coordinates, the agent's name and profile, the full Vietnamese specification table, posted and expiry dates and the description, or off for a faster run with just the listing-card fields.
  • Vietnamese price parsing. "2 tỷ", "1,5 tỷ" and "25 triệu/tháng" are parsed into numeric VND alongside the original text, plus a derived price per square meter.
  • Automatic pagination and deduplication. Give it a city and a page budget and it walks page by page, de-duplicating listings by id across pages and across multiple cities or URLs in one run.
  • Built for schedules. Incremental mode tracks one search across scheduled runs and returns only new and changed listings, and unchanged ones are not billed. A separate resume feature continues one interrupted run without paying twice for the same walk.

Choose what to collect

These inputs let you configure Batdongsan.com.vn - Property Listings, Prices & Agents. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestringSearch mode = pick listing type (buy/rent) + property type + city below, plus optional price/area/bedroom/direction/keyword filters and a sort order. URL mode = paste any batdongsan.com.vn URL already refined in a browser (a search page, a project page or a single listing).

Choices: search, url

listingTypestringBán (Buy), Cho thuê (Rent), or both in one run (one Buy and one Rent search per city; each record is labelled with its own Buy/Rent). Search mode only.

Choices: Buy, Rent, BuyAndRent

propertyTypestringWhat kind of property to search for. Maps to a batdongsan.com.vn category. Search mode only. Some categories exist in only one direction on batdongsan: Land, Project land, Condotel and Farm/resort are buy-only; Office, Room for rent and Shop/kiosk are rent-only. Picking a direction the site doesn't have fails the run with a clear message (with "Buy and rent", the missing side is skipped).

Choices: All, Apartment, MiniApartment, PrivateHouse, TownHouse, Villa, Shophouse, Land, ProjectLand, Condotel, FarmResort, Office, Warehouse, Room, ShopKiosk, Other

locationsarrayOne or more of Vietnam's 63 provinces/cities. Type the batdongsan slug (tp-hcm, ha-noi, da-nang, ba-ria-vung-tau...), the Vietnamese name with or without diacritics ("Hồ Chí Minh" or "Ho Chi Minh"), a common alias ("Saigon", "HCM", "Hanoi", "Huế"), the site's province code ("SG", "HN"), or the name with "Thành phố"/"Tỉnh"/"City"/"Province" around it, matched against the site's own province list, not guessed. An unrecognized name fails the run with a clear error instead of silently returning zero results. For a district or ward, use URL mode with the search URL from the site. Leave empty for a nationwide search. Search mode only.
minPriceintegerLowest total price in Vietnamese dong, e.g. 1000000000 for 1 tỷ. For Rent searches this is the monthly rent, e.g. 10000000 for 10 triệu/month. Listings with a negotiable price (Thỏa thuận) are excluded by the site when a price filter is set.
maxPriceintegerHighest total price in Vietnamese dong, e.g. 3000000000 for 3 tỷ (monthly rent for Rent searches).
negotiablePriceOnlybooleanReturn only listings whose price is "Giá thỏa thuận" (negotiable, no published price). Cannot be combined with Min/Max price. Search mode only.
Show 19 more inputs
More input fields
InputWhat it controls
minAreaintegerSmallest floor/land area in square metres.
maxAreaintegerLargest floor/land area in square metres.
bedroomsarrayOnly listings with one of these bedroom counts. Pick several to combine them. "5+" is the site's own five-or-more bucket. Leave empty for any.
directionsarrayOnly listings whose house faces one of these directions (Hướng nhà). Many listings don't state a direction, so this narrows results a lot. Leave empty for any.
keywordstringFree-text keyword matched by the site's own search, e.g. a project or street name ("vinhomes", "Nguyễn Hữu Cảnh"). Leave empty for none.
sortBystringOrder of results, applied by the site. Default keeps the site's own ranking.

Choices: Default, VerifiedFirst, PriceLowToHigh, PriceHighToLow, PricePerM2LowToHigh, PricePerM2HighToLow, AreaSmallToLarge, AreaLargeToSmall

urlsarrayOne or more batdongsan.com.vn URLs, a search/category page (city, district, ward, price/area/bedroom-filtered, or 'All property types'), a project page, or a single listing's detail page (-prNNNNNN). Tip: open batdongsan.com.vn in your browser, pick listing type + property type + city + any price/area/bedroom filters, then paste the resulting URL here. Multi-URL supported, mixing shapes freely. If a search/category URL ends with /pN, scraping starts at page N and walks forward. A detail URL is fetched directly as one record, no pagination, no wasted retries. A /tags/ topic page (batdongsan.com.vn/tags/ban/...) and the map view (?tpl=map) are walked like a search. A broker/developer/company profile page or a project directory (/du-an-can-ho-chung-cu, which lists projects rather than listings) is skipped with a warning, not silently scraped as empty. See the README's URL shapes table for the full list with examples.
maxPagesintegerHow many result pages to walk per city / URL. Batdongsan returns roughly 20 to 30 listings per page. 0 (default) means unlimited: the walk stops naturally once a page comes back empty or repeats listings already collected, or sooner once Max total listings is reached. Set a number only for an explicit page cap below that natural stop.
maxListingsintegerThe sole soft cap on the run: stop after this many listings across all cities/URLs. Defaults to 20 so a run stays small unless you raise it. 0 = unlimited (bounded only by the natural stop on Max pages).
fetchDetailsbooleanAdds GPS latitude/longitude, full description, agent name + phone + profile link, the full specification table (legal status, frontage, access-road width, floors), listing videos, project id, posted date, expiry date, and listing code. Turn off for a faster, cheaper run with just the SERP-level fields (title, price, area, bedrooms, location, photos, verified / pro-agent badges).
resumeFromRunIdstringOptional. Paste a previous run ID or dataset ID to continue a large walk-all pull: listings already saved by that run are loaded before scraping starts and skipped, so this run only appends new listings (rows marked EXPIRED there are not skipped, so a listing that came back is collected again). Leave empty for a normal fresh run. For recurring daily/weekly monitoring of the same search, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns all matching listings as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED listings. Turn on "Emit unchanged" or "Emit expired" only when you also want those listings returned (and billed). State is kept separately for each mode/listing type/property type/location(s)/URL(s)/filters and detail-fetch setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a prior run above.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the mode/listing type/property type/location(s)/URL(s)/filters and detail-fetch setting, different searches then never mix state with each other.
emitUnchangedbooleanOff by default. Turn on to also return listings that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return listings that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max total listings capped it, Resume was used, or a pasted URL started mid-catalogue (a /pN page with N>1). This returns, and bills, extra synthetic rows, which count toward Max total listings (gone listings past that limit stay tracked and are reported on a later run), so leave it off unless you need expiry tracking.
ignoreFieldsForChangesarrayOptional. Fields to exclude when deciding UPDATED vs UNCHANGED in incremental mode, on top of the ones always excluded by default: scrapedAt; agentPhoneToken (a KYC-gated contact token re-minted on every page render, so it differs on every scrape of the same unchanged listing); searchUrl, pageNumber and position (where the listing happened to sit in this run's results); and postedLabel (the site's relative "posted N days ago" text, which changes daily). Add a top-level field name (e.g. "agentAvatar") or a dotted path into a nested field (e.g. "specs.Ngày đăng") for any other field that rotates/reorders without a real content change on your use case. Listed fields are still returned in the output, only excluded from change detection and from changedFields.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

idID
changeTypeChange type (incremental mode)
urlURL (link)
listingTypeType
propertyTypeProperty
titleTitle
priceTextPrice
priceValuePrice (VND)
priceUnitUnit
pricePerM2Price/m² (VND)
areaArea m²
bedroomsBeds
Show 57 more fields
bathroomsBaths
directionDirection
balconyDirectionBalcony direction
furnitureFurniture
locationTextLocation
cityCity
districtDistrict
wardWard
latitudeLat
longitudeLng
cityCodeCity code
districtIdDistrict ID
projectProject
listingTierTier
postedDatePosted
expiryDateExpires
listingCodeCode
agentNameAgent
agentIdAgent ID
agentPhonePhone
agentPhoneTokenPhone token (encrypted)
agentProfileUrlAgent profile (link)
agentAvatarAgent avatar (link)
descriptionDescription
specsSpecifications
imagesImages
imageCountImage count
areaTextArea (as shown)
currencyCurrency
isNegotiableNegotiable price
rentPeriodRent period
legalStatusLegal status
frontageWidthFrontage (m)
roadWidthAccess road (m)
floorsFloors
projectIdProject ID
projectUrlProject page (link)
isVerifiedVerified listing
isProAgentPro agent
hasVideoHas video
videosVideos
thumbnailUrlThumbnail (image)
postedLabelPosted (relative)
searchUrlSearch page (link)
pageNumberPage
positionPosition on page
newProvinceProvince (post-2025 merger)
addressAddress
pricePerM2TextPrice/m² (as shown)
developerDeveloper
postedAtPosted at (ISO)
listingTierCodeTier code
isVipVIP listing
scrapedAtScraped
changedFieldsChanged fields (incremental mode)
firstSeenAtFirst seen (incremental mode)
lastSeenAtLast seen (incremental mode)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "id": "45763512",
  "url": "https://batdongsan.com.vn/ban-can-ho-chung-cu-tp-hcm/sample-listing-pr45763512",
  "listingType": "Buy",
  "propertyType": "Apartment",
  "title": "Sample listing title, 2 bedroom apartment near the river",
  "priceText": "3 tỷ",
  "priceValue": 3000000000,
  "priceUnit": "tỷ",
  "pricePerM2": 88235294,
  "area": 34,
  "bedrooms": 2,
  "bathrooms": 2,
  "direction": "Đông - Nam",
  "balconyDirection": null,
  "furniture": "Không nội thất",
  "locationText": "Sample Ward, Sample District, Hồ Chí Minh",
  "city": "Hồ Chí Minh",
  "district": "Sample District",
  "ward": "Sample Ward",
  "latitude": 10.77,
  "longitude": 106.7,
  "cityCode": "SG",
  "districtId": "1000",
  "project": "Sample Project",
  "listingTier": "Tin VIP Kim Cương",
  "postedDate": "20/05/2026",
  "expiryDate": "04/06/2026",
  "listingCode": "45763512",
  "agentName": "Sample Agent",
  "agentId": "0000000",
  "agentPhone": null,
  "agentProfileUrl": "https://guru.batdongsan.com.vn/pa/sampleagent",
  "description": "Sample description text describing the property.",
  "specs": {
    "Diện tích": "34 m²",
    "Số phòng ngủ": "2 phòng",
    "Số phòng tắm, vệ sinh": "2 phòng",
    "Hướng nhà": "Đông - Nam"
  },
  "imageCount": 24,
  "images": [
    "https://file4.batdongsan.com.vn/resize/1275x717/sample.jpg"
  ],
  "areaText": "34 m²",
  "currency": "VND",
  "isNegotiable": false,
  "rentPeriod": null,
  "legalStatus": "Sổ đỏ/ Sổ hồng",
  "frontageWidth": null,
  "roadWidth": null,
  "floors": null,
  "projectId": "0000",
  "projectUrl": "https://batdongsan.com.vn/du-an-can-ho-chung-cu-sample/sample-project-pj0000",
  "isVerified": false,
  "isProAgent": true,
  "hasVideo": false,
  "videos": [],
  "thumbnailUrl": "https://file4.batdongsan.com.vn/crop/200x140/sample.jpg",
  "postedLabel": "Đăng 3 ngày trước",
  "searchUrl": "https://batdongsan.com.vn/ban-can-ho-chung-cu-tp-hcm",
  "pageNumber": 1,
  "position": 1,
  "scrapedAt": "2026-05-26T00:00:00.000Z"
}

Ways to use this data

  • Real estate agencies and investors: track new listings, price changes and inventory across cities to spot opportunities early.
  • Market researchers and analysts: build historical pricing datasets by city, district and property type for trend analysis.
  • Proptech builders and listing aggregators: feed a property search app or comparison tool with structured Vietnamese listing data.
  • Lead generation teams: monitor new listings together with agent contact details for outreach.
  • Academic and journalism research: study housing supply, pricing and market segmentation across Vietnam's provinces.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Batdongsan.com.vn return?

The documented output for Batdongsan.com.vn includes id, change type (incremental mode), url, type, property, title, price and price (vnd). Availability of each field depends on the source page and the selected mode.

How much does Batdongsan.com.vn cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new or changed listings on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated listings for that search, and unchanged ones are not billed. Only turn on Emit expired if you also want gone-missing listings reported, and only then can a later reappearance ever come back as REAPPEARED; with it off for the whole life of that tracked search (and Emit unchanged off), you will only ever see NEW and UPDATED.

Why is agentPhone often null?

The agent's phone number is revealed on the site only after a click, not printed directly in the page, so it is frequently null. agentName, agentId and agentProfileUrl are still captured whenever the site shows them, and the profile URL page lists the agent's other contact details.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

Ready to collect with Batdongsan.com.vn?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.