Dot Property Scraper | TH PH MY VN Listings avatar

Dot Property Scraper | TH PH MY VN Listings

Pricing

from $2.20 / 1,000 results

Go to Apify Store
Dot Property Scraper | TH PH MY VN Listings

Dot Property Scraper | TH PH MY VN Listings

Scrape Dot Property Thailand, Philippines, Malaysia & Vietnam — condos, houses, land, offices for sale or rent. Extract prices, beds, area, features & images. Dot Property API alternative.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

3

Total users

1

Monthly active users

15 hours ago

Last modified

Share

Dot Property Scraper — Thailand, Philippines, Malaysia & Vietnam

Scrape Dot Property sale and rent listings across Southeast Asia — then download structured real estate data as Excel, CSV, or JSON.

This Actor is a practical Dot Property API alternative for market research, investor screening, rental comps, and lead lists. Choose a market (TH / PH / MY / VN), pick property types (condos, houses, land, offices, and more), or paste Dot Property search/listing URLs — and get listing rows with prices, beds, baths, area, features, images, and canonical URLs.

  • Pull homes for sale and properties for rent from Dot Property Thailand, Philippines, Malaysia, and Vietnam
  • Cover residential + commercial categories (condos, houses, villas, land, offices, shophouse, warehouses, hotels, retail)
  • Enrich search cards with detail-page fields when scrapeDetails is on
  • Export to Excel / CSV / JSON, or connect Make, n8n, Zapier, Python, or MCP
  • Pay per event — Actor start + each Dataset listing; no subscription

Need a dedicated scraper for one website?

This Actor is the general tool for protected public pages. If you already have one specific site and a field list, a dedicated scraper is faster and more stable: listing + detail, your export format, delivered to your Apify account or as a standalone runnable client.

I confirm the tier before you pay. The clock starts after that confirmation.

Start here: Submit a custom scraper request

Starter $50Dedicated $100Hard target $200–999
Site1 simple anti-bot public site1 medium anti-bot public siteCloudflare / aggressive anti-bot / custom parser
ScopeFull listing + detail fieldsListing + detail + pagination, your field listAgreed fields, repeatable runs
DeliveryCSV/JSON · Apify Actor or standalone runnable client (script/CLI)Same, plus a sample run and short instructionsFeasibility first, then build
Time24 hours after we confirm the URL is in scope48 hours after confirmationQuoted after feasibility
Fixes30 days for small public-layout changes30 daysScoped in the quote

Hard-target sites are not a 100% uptime promise. You get a dedicated parser that can be re-run on the agreed fields. If the URL is not feasible, you get a refund or pay an assessment fee only — you will know before the build starts.

Not in Starter/Dedicated: login-walled data, native APK / Windows installer / full web apps, or two-year maintenance. Those are a separate quote.


What does the Dot Property Scraper do?

It turns a Dot Property city or category search into a clean Apify Dataset of property listings.

Under the hood, the Actor:

  1. Builds Dot Property search URLs for your market, channel (BUY / RENT), location, and category — or uses your startUrls
  2. Collects listing cards from the search results page (Next.js RSC Flight on Thailand; DOM cards on PH / MY / VN)
  3. Optionally opens detail pages to enrich each row with description, features, and gallery images
  4. Writes normalized records you can download or push into automations

Residential proxy is required (prefilled by market country). Fetching uses curl_cffi TLS impersonation — no full browser needed for these hosts.


What data can you extract from Dot Property?

Data pointThailand (TH)PH / MY / VN
Listing ID & URL
Title / project
List price or rent
Currency (THB / PHP / MYR / VND)
Beds / baths / indoor area✅ when shown
Property type & category
Location / address
GPS coordinates✅ (RSC)
Features & amenities✅ with details✅ with details
Photo gallery
Channel (BUY / RENT)

Every Dataset row also includes scrapedAt and source = dotproperty. A RUN_SUMMARY / OUTPUT record in the key-value store reports counts and warnings.


Lead & contact fields

Every detail-enriched item includes outreach-ready lead keys. Null values are always accompanied by a leadAbsences reason — the key is never silently omitted.

FieldTypeMeaning
phones[{value, type}]Agent/owner phone numbers. TH: already visible in RSC JSON (enquirySettings.contactPhoneNumber, e.g. +6625088490). PH/MY/VN: login-gated — POST /get-agent-info returns a 401 login modal, not a phone; worker does not attempt login.
emails[{value, type}]Agent contact emails. All markets: 闸门锁 (enquiry form only; no agent personal email is exposed). Platform email info@dotproperty.{tld} appears in the footer but is not agent-specific.
address{full, country}Structured address object. full = area-level location string (e.g. "Bang Kapi, Huai Khwang, Bangkok"). country = market code (TH/PH/MY/VN). Addresses are area-level only — no street number or unit (门牌) is available on any Dot Property market.
geo{lat, lng}GPS coordinates from the listing detail page (TH: unitDetail.coordinates; PH/MY/VN: JSON-LD latitude/longitude).
person{name}Agent/owner/seller name (TH: listedBy.value; PH/MY/VN: JSON-LD Product.brand.name, e.g. "Bailey Tan", "Katie Nguyen - Preferred Partner").
org{name}Agency/company name. On Dot Property this is typically the same value as person.name (e.g. "Private Owner" for TH direct sellers, or the agent name doubles as org on PH/MY/VN).
web{website, socials[]}Official website and social links. TH: WhatsApp/Messenger/LINE contact IDs in TP_ContactFormCta (e.g. +66632103401, @fazwaz). PH/MY/VN: 未验证 — no social links found on listing detail pages.
leadSourceenumdetail — all lead data is extracted from the listing detail page (LDP).
leadRevealenumvisible (TH — phone already in RSC JSON, no click needed) or gated (PH/MY/VN — phone behind login wall).
leadAbsencesobjectPer-subfield reason when null. Common entries: emails = 闸门锁, address.unit = 本站无, phones = 闸门锁 (PH/MY/VN), social = 未验证 (PH/MY/VN).

⚠️ address type change (backward compatibility)

In build 0.4.7 the address field was changed from a flat string to a structured object {full, country, …}. The full sub-field preserves the original string value exactly — consumers that previously read address as a string should switch to address.full for the same data. The new country sub-field adds the market code (TH/PH/MY/VN). No data is lost; existing string consumers can migrate by reading address.full instead of address.

Reveal cost

  • Thailand (TH): No click-reveal needed. Phone numbers, WhatsApp/Messenger/LINE contact IDs are already visible in the RSC JSON payload on the detail page. The only cost is the detail-page HTTP fetch itself — no extra requests, no proxy overhead beyond the standard residential proxy.
  • Philippines / Malaysia / Vietnam (PH/MY/VN): Phone numbers are behind a login wall. The worker does not attempt the login-gated XHR (POST /get-agent-info returns a 401 login/signup modal, not a phone). This means no extra HTTP requests or proxy overhead are spent on phone reveal — the phone is simply marked leadAbsences.phones = 闸门锁. Address, geo, person, and org are all available from the detail page JSON-LD without any click-reveal interaction.
  • Run-time impact: Detail enrichment (scrapeDetails: true, default on) adds one HTTP fetch per listing. For TH this is a single RSC page (~336 KB); for PH/MY/VN a single DOM page (~200–230 KB). No multi-step reveal flows, no browser automation, no CAPTCHA solving — keeping run duration and proxy usage predictable.

Honest limitations

  • Emails (all markets): Agent personal emails are never exposed. The only way to contact an agent is through the Dot Property enquiry form, which requires a user account. Platform emails (info@dotproperty.{tld}) are not agent-specific and are not included in emails[].
  • Phones (PH/MY/VN): Login-gated. The POST /get-agent-info endpoint requires Facebook/Google login or email registration + reCAPTCHA. The worker does not submit login or registration forms (mission Chrome discipline: no login/Apply/RFQ form submission). Phones are marked leadAbsences.phones = 闸门锁.
  • Address unit / 门牌 (all markets): Dot Property listings use area-level locations only (district, city, region). No street number or unit number is available on any market. Marked leadAbsences.address.unit = 本站无.
  • Social links (PH/MY/VN): No social media profile links found on listing detail pages. TH has WhatsApp/Messenger/LINE as contact channels (in web.socials[]) but no traditional social media profiles. Marked leadAbsences.social = 未验证 for PH/MY/VN.
  • Person vs Org: On Dot Property, the listing agent name and organization name are often identical (e.g. "Private Owner" for TH direct sellers, or the agent's display name serves as both person.name and org.name on PH/MY/VN). Separate agent/agency distinction is not available.
  • TH agent profile pages: The URL pattern /en/real-estate-agents/{slug}_{uuid} returns 404 — agent directory data is supplementary and not used as a lead source for items.

What you can do with it

1. Scrape Bangkok condos for sale

Set market to TH, channel to BUY, propertyType to condos, and location to bangkok. Get structured rows with price, beds, area, project name, and a direct listing URL — ready for comps or investor shortlists.

2. Scrape Metro Manila houses for rent

Set market to PH, channel to RENT, propertyType to houses, and location to metro-manila. Rows include rent amount, property type, and detail enrichment when scrapeDetails is enabled.

3. Cover Malaysia and Vietnam markets

Use market: "MY" with kuala-lumpur, or market: "VN" with an empty location for national search. Match residential proxy country to MY or VN.

4. Scrape offices and commercial inventory

Set propertyType to offices, commercial-property, shophouse, warehouses, hotels, or retail-spaces across active markets.

5. Enrich known Dot Property listing URLs

Paste search or detail URLs into Start URLs to drive the run from specific pages instead of building the query from market/location fields.

6. Feed real estate data into automations

Schedule the Actor and send the Dataset to Sheets, Slack, CRM, Make, n8n, Zapier, or an AI agent via Apify MCP / API.


How to scrape Dot Property (no code required)

  1. Click Try for free
  2. Choose a market (TH / PH / MY / VN)
  3. Set channel to For sale (BUY) or For rent (RENT)
  4. Pick a property type (or paste Start URLs)
  5. Optionally set location slug, max listings, and detail enrichment
  6. Keep Apify RESIDENTIAL proxy enabled (country matched to market)
  7. Click Start — open the Dataset tab when the run finishes

Start with maxItems: 5–10 to verify the market, then scale up.

Free Apify plan limits (set by this Actor's developer)

LimitFree Apify planPaid Apify plan
Runs of this Actor10 runs totalUnlimited
Results per runUp to 1,000Up to schema max (2,000)

When the run cap is hit, the run finishes with a clear status message — not an Apify platform error.

Worker URL is config, not code: the Actor reads WORKER_BASE_URL from Actor environment variables (plus optional per-run workerBaseUrl). If you migrate the worker to a new host, update WORKER_BASE_URL (and WORKER_AUTH if the API key changes) in Apify Console — no Actor code change required. Set WORKER_PROVIDES_PROXY=1 when the worker supplies its own PROXY_URL instead of Apify RESIDENTIAL.

Markets covered

CodeSiteParseTypical proxy
THdotproperty.co.thNext.js RSC FlightRESIDENTIAL + TH
PHdotproperty.com.phDOM listing cardsRESIDENTIAL + PH
MYdotproperty.com.myDOM listing cardsRESIDENTIAL + MY
VNdotproperty.com.vnDOM listing cardsRESIDENTIAL + VN

Not scraped this release (suspended / blocked / unresolved): Singapore, Hong Kong, Laos, Indonesia, Cambodia, Myanmar country hosts.

Property categories

Category slugSaleRent
properties (all types)
condos
houses
apartments
townhouses
villas
land
serviced-apartments
commercial-property
offices
shophouse
warehouses
hotels
retail-spaces
  • propertyType — single category
  • propertyTypes — multi-select; overrides propertyType when non-empty
  • all expands primary categories available for the selected channel

Supported URL patterns

  • Thailand SRP: /en/{category}-for-{sale|rent}/{location} e.g. /en/condos-for-sale/bangkok
  • Thailand LDP: /en/ads/<slug>_<uuid>
  • PH / MY / VN SRP: /{category}-for-{sale|rent}/{location?}
  • PH / MY / VN LDP: /ads/<slug>_<id> or /<slug>_<numericId>
  • Pagination: ?page=2 on all markets

Pricing — how much does it cost to scrape Dot Property?

Pay per event. No subscription.

EventPriceWhen charged
apify-actor-start$0.005When a normal run starts (scaled by allocated memory GB)
apify-default-dataset-item (result)$2.50 / 1,000 ($0.0025 each)Each listing written to the default Dataset

User pays platform usage costs: Yes — compute, residential proxy, and other platform usage are billed to the user in addition to event charges.

Example product charges (events only):

ScenarioApprox. event charge
Canary: 10 listings$0.005 + 10 × $0.0025 = $0.030
City scan: 100 listings$0.005 + $0.25 = $0.255
1,000 listings$0.005 + $2.50 = $2.505

Platform usage (especially residential proxy) is separate and depends on run duration and memory.

You are only charged result events for rows successfully written to the Dataset. Failed runs that emit zero listings do not incur result charges (Actor Start may still apply).

Standby / Live View: readiness endpoints do not scrape Dot Property. Keeping Standby enabled may incur platform compute while the standby container is warm — separate from PPE event charges.


Input

FieldDescription
startUrlsDot Property TH / PH / MY / VN search or listing URLs
market / marketsTH, PH, MY, VN, or all
locationPlace slug (optional; market default when empty)
channelBUY or RENT
propertyType / propertyTypesCategory or multi-select (all expands primary cats)
maxItems / maxPagesCaps (fair-shared across markets/categories)
scrapeDetailsEnrich each card from the listing detail page
useBrowserFallbackOn CF blocks, retry with enhanced HTTP (+ Camoufox if installed)
localeTH path prefix en / th (optional)
requestDelayMillisDelay between HTTP requests
proxyConfigurationApify RESIDENTIAL recommended; country matched to market

Open the Input tab in Console for the full form and tooltips.


Output example

You can download the Dataset as JSON, CSV, Excel, or HTML.

{
"id": 5782686,
"uuid": "173a55538680-4930-8382-0b50-88be0089",
"url": "https://www.dotproperty.co.th/en/ads/1-bedroom-condo-for-sale-in-modiz-sukhumvit-50-phra-khanong-bangkok_173a55538680-4930-8382-0b50-88be0089",
"source": "dotproperty",
"market": "TH",
"category": "condos",
"channel": "BUY",
"title": "1 Bedroom Condo for sale at Modiz Sukhumvit 50",
"price": "฿2,700,000",
"priceAmount": 2700000,
"currency": "THB",
"numBedrooms": "1",
"propertyType": "Condo",
"indoorArea": "24 SqM",
"sourceLayer": "rsc_srp+ldp",
"phones": [{"value": "+6625088490", "type": "agent"}],
"emails": [],
"address": {"full": "Bang Kapi, Huai Khwang, Bangkok", "country": "TH"},
"geo": {"lat": 13.748502, "lng": 100.565959},
"person": {"name": "Private Owner"},
"org": {"name": "Private Owner"},
"web": {"website": null, "socials": []},
"leadSource": "detail",
"leadReveal": "visible",
"leadAbsences": {
"emails": "闸门锁 (enquiry form only; no agent personal email)",
"address.unit": "本站无 (area-level, no street number)"
},
"scrapedAt": "2026-07-19T00:29:20.000000+00:00"
}

Core fields include id, url, market, channel, category, title, price / priceAmount / currency, size and rooms when shown, plus detail extras such as features, description, and image galleries when scrapeDetails is on. Lead & contact fields (phones, emails, address, geo, person, org, web, leadSource, leadReveal, leadAbsences) are populated on detail-enriched items — see the Lead & contact fields table above for per-market availability and honest limitations.


Live View endpoints

When Standby / Live View is enabled, the Actor exposes a small OpenAPI surface for readiness and discovery:

EndpointPurpose
GET /Readiness / service info
GET /healthHealth check
GET /input-exampleLow-cost example input
GET /openapi.jsonDeployed OpenAPI document

Scraping still runs through a normal Actor run — Live View does not scrape Dot Property by itself.


Connect from code

Actor ID: lentic_clockss/dot-property-th-scraper

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("lentic_clockss/dot-property-th-scraper").call(
run_input={
"market": "TH",
"location": "bangkok",
"channel": "BUY",
"propertyType": "condos",
"maxItems": 10,
"proxyConfiguration": {
"useApifyProxy": True,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "TH",
},
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("title"), item.get("priceAmount"), item.get("url"))

Use the same Actor ID in Make, n8n, Zapier, or Apify MCP for AI-agent workflows.


FAQ

Why did my free-plan run stop with a limit message?

Free Apify plan users can run this Actor up to 10 times, with up to 1,000 results per run. These caps are set by the Actor developer, not Apify. Upgrade to a paid Apify plan for unlimited runs (schema maxItems still applies, up to 2,000).

Is there a free Dot Property API?

Dot Property does not offer a simple public listing API for bulk export. This Actor gives you structured sale and rent data through Apify runs, Dataset exports, and integrations.

Can I scrape multiple Southeast Asia markets?

Yes. Set market to all, or pass markets: ["TH", "PH", "MY", "VN"]. Caps are fair-shared across markets and categories.

How do I scrape Dot Property Thailand condos for sale?

Set market to TH, channel to BUY, propertyType to condos, and location to bangkok (or another Thai city slug). Keep RESIDENTIAL + TH proxy enabled.

How do I scrape Philippines, Malaysia, or Vietnam?

Use PH + metro-manila, MY + kuala-lumpur, or VN with empty location for national search. Match apifyProxyCountry to the market.

Why is a residential proxy required?

Dot Property sits behind Cloudflare. Apify RESIDENTIAL with a country matched to the market is required for reliable runs. For multi-market runs, omit apifyProxyCountry so each market gets its own exit (TH/PH/MY/VN).

What is the Actor ID / slug?

The Apify Actor name remains lentic_clockss/dot-property-th-scraper for continuity (original Thailand release). The product scrapes TH / PH / MY / VN.

Can I schedule daily Dot Property scrapes?

Yes. Create an Apify schedule with the same input and send the Dataset to Sheets, Slack, a CRM, or your pipeline.

Use this Actor for legitimate research and analysis only. Respect Dot Property terms of use and applicable law in Thailand, Philippines, Malaysia, Vietnam, and your jurisdiction. Results may include publicly displayed listing information; do not use personal data without a lawful basis. Favorite / enquiry / phone controls are not clicked.


Browse all Actors: apify.com/lentic_clockss