Dot Property Scraper | TH PH MY VN Listings
Pricing
from $2.20 / 1,000 results
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
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
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
scrapeDetailsis 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 $50 | Dedicated $100 | Hard target $200–999 | |
|---|---|---|---|
| Site | 1 simple anti-bot public site | 1 medium anti-bot public site | Cloudflare / aggressive anti-bot / custom parser |
| Scope | Full listing + detail fields | Listing + detail + pagination, your field list | Agreed fields, repeatable runs |
| Delivery | CSV/JSON · Apify Actor or standalone runnable client (script/CLI) | Same, plus a sample run and short instructions | Feasibility first, then build |
| Time | 24 hours after we confirm the URL is in scope | 48 hours after confirmation | Quoted after feasibility |
| Fixes | 30 days for small public-layout changes | 30 days | Scoped 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:
- Builds Dot Property search URLs for your market, channel (
BUY/RENT), location, and category — or uses yourstartUrls - Collects listing cards from the search results page (Next.js RSC Flight on Thailand; DOM cards on PH / MY / VN)
- Optionally opens detail pages to enrich each row with description, features, and gallery images
- 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 point | Thailand (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.
| Field | Type | Meaning |
|---|---|---|
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. |
leadSource | enum | detail — all lead data is extracted from the listing detail page (LDP). |
leadReveal | enum | visible (TH — phone already in RSC JSON, no click needed) or gated (PH/MY/VN — phone behind login wall). |
leadAbsences | object | Per-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-inforeturns 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 markedleadAbsences.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 inemails[]. - Phones (PH/MY/VN): Login-gated. The
POST /get-agent-infoendpoint 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 markedleadAbsences.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. MarkedleadAbsences.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 bothperson.nameandorg.nameon 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)
- Click Try for free
- Choose a market (
TH/PH/MY/VN) - Set channel to For sale (
BUY) or For rent (RENT) - Pick a property type (or paste Start URLs)
- Optionally set location slug, max listings, and detail enrichment
- Keep Apify RESIDENTIAL proxy enabled (country matched to market)
- 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)
| Limit | Free Apify plan | Paid Apify plan |
|---|---|---|
| Runs of this Actor | 10 runs total | Unlimited |
| Results per run | Up to 1,000 | Up 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_URLfrom Actor environment variables (plus optional per-runworkerBaseUrl). If you migrate the worker to a new host, updateWORKER_BASE_URL(andWORKER_AUTHif the API key changes) in Apify Console — no Actor code change required. SetWORKER_PROVIDES_PROXY=1when the worker supplies its ownPROXY_URLinstead of Apify RESIDENTIAL.
Markets covered
| Code | Site | Parse | Typical proxy |
|---|---|---|---|
TH | dotproperty.co.th | Next.js RSC Flight | RESIDENTIAL + TH |
PH | dotproperty.com.ph | DOM listing cards | RESIDENTIAL + PH |
MY | dotproperty.com.my | DOM listing cards | RESIDENTIAL + MY |
VN | dotproperty.com.vn | DOM listing cards | RESIDENTIAL + VN |
Not scraped this release (suspended / blocked / unresolved): Singapore, Hong Kong, Laos, Indonesia, Cambodia, Myanmar country hosts.
Property categories
| Category slug | Sale | Rent |
|---|---|---|
properties (all types) | ✅ | ✅ |
condos | ✅ | ✅ |
houses | ✅ | ✅ |
apartments | ✅ | ✅ |
townhouses | ✅ | ✅ |
villas | ✅ | ✅ |
land | ✅ | — |
serviced-apartments | — | ✅ |
commercial-property | ✅ | ✅ |
offices | ✅ | ✅ |
shophouse | ✅ | ✅ |
warehouses | ✅ | ✅ |
hotels | ✅ | ✅ |
retail-spaces | ✅ | ✅ |
propertyType— single categorypropertyTypes— multi-select; overridespropertyTypewhen non-emptyallexpands 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=2on all markets
Pricing — how much does it cost to scrape Dot Property?
Pay per event. No subscription.
| Event | Price | When charged |
|---|---|---|
apify-actor-start | $0.005 | When 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):
| Scenario | Approx. 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
| Field | Description |
|---|---|
startUrls | Dot Property TH / PH / MY / VN search or listing URLs |
market / markets | TH, PH, MY, VN, or all |
location | Place slug (optional; market default when empty) |
channel | BUY or RENT |
propertyType / propertyTypes | Category or multi-select (all expands primary cats) |
maxItems / maxPages | Caps (fair-shared across markets/categories) |
scrapeDetails | Enrich each card from the listing detail page |
useBrowserFallback | On CF blocks, retry with enhanced HTTP (+ Camoufox if installed) |
locale | TH path prefix en / th (optional) |
requestDelayMillis | Delay between HTTP requests |
proxyConfiguration | Apify 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:
| Endpoint | Purpose |
|---|---|
GET / | Readiness / service info |
GET /health | Health check |
GET /input-example | Low-cost example input |
GET /openapi.json | Deployed 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 ApifyClientclient = 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.
Is it legal to scrape Dot Property?
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.
Related Actors
- Realtor.com Scraper — US homes for sale & rent
- 99.co Scraper — Singapore / Indonesia property listings
- PropertyGuru Scraper — Singapore / Malaysia real estate
- Daft.ie Scraper — Ireland sale & rent listings
Browse all Actors: apify.com/lentic_clockss