Dot Property + Lamudi PH Scraper | Philippines Property
Pricing
from $1.00 / 1,000 listing results
Dot Property + Lamudi PH Scraper | Philippines Property
Scrape Philippines property listings from dotproperty.com.ph and lamudi.com.ph with exact map-pin coordinates, price, beds, baths, areas, facilities, full photo galleries, and agent contact details. Covers houses, condos, apartments, townhouses, villas, land, offices and commercial units, for.
Pricing
from $1.00 / 1,000 listing results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Dot Property + Lamudi Philippines Scraper
Scrape Philippines property listings from dotproperty.com.ph and lamudi.com.ph (the country's two largest property portals) in one actor, with the exact map-pin latitude/longitude for every listing, price, beds, baths, usable and land areas, facilities, full photo galleries, and agent contact details. Houses, condos, apartments, townhouses, villas, land, offices, for rent or for sale. Every row carries a source field so you can tell the two portals apart.
Key Features
| Feature | Description |
|---|---|
| Two portals, one dataset | Dot Property and Lamudi in the same run; every row carries a source field |
| Exact map-pin coordinates | latitude / longitude for every listing: the exact pin the portal shows on its map, not a vague "Makati" label |
| Complete listing data | Price with currency and rent period, property type, bedrooms, bathrooms, usable + land area, floor, facilities, full description, complete photo gallery |
| Agent contact details | Agent/publisher name, phone number, profile URL, listing count, verified status |
| Nearby amenities | Points of interest with coordinates around Lamudi listings |
| Three ways to start | Search builder (location + rent/sale + property types + price/beds/area filters), pasted search URLs, or direct listing URLs, all auto-classified |
| Incremental monitoring | Run on a schedule, receive only what changed (NEW / UPDATED / REAPPEARED / EXPIRED) |
| Resume support | Continue one interrupted run from a pasted run/dataset ID |
| Fast | Lightweight and fast; covers every listing in the results |
Quick Start
Search for condos for sale in Makati, Metro Manila:
{"mode": "search","sites": ["dotproperty", "lamudi"],"operation": "sale","propertyTypes": ["condos"],"locations": ["Metro Manila"],"maxItems": 20}
How to Use
Step 1: Search by location
{"mode": "search","sites": ["dotproperty", "lamudi"],"operation": "rent","propertyTypes": ["houses"],"locations": ["Metro Manila", "Cebu"],"maxItems": 100}
Locations are slugified automatically: "Metro Manila", "Makati", "Cebu", or "metro-manila/makati" all work. A city name is matched against the portal's own location list first, so "Makati" is expanded to its region (metro-manila/makati) before the first page is requested, so you never pay for a wrong-shaped search URL. One search is built per (portal × property type × location).
Step 2: Filter by price, beds and area
{"mode": "search","sites": ["dotproperty"],"operation": "sale","propertyTypes": ["condos", "townhouses"],"locations": ["Metro Manila"],"minPrice": 5000000,"maxPrice": 15000000,"minBedrooms": 2,"minSqm": 60,"maxItems": 100}
Step 3: Scrape specific URLs
{"mode": "url","urls": ["https://www.dotproperty.com.ph/properties-for-sale/metro-manila/makati","https://www.lamudi.com.ph/rent/metro-manila/makati/house/","https://www.dotproperty.com.ph/ads/1-bedroom-condo-for-sale-in-the-linear-san-antonio-metro-manila_5971c811f880-1371-3792-81d0-a8181089"],"maxItems": 100}
Search URLs and direct listing URLs from both portals can be mixed in the same array; they are auto-classified. For search URLs the scraper continues through all available results pages (starting from any ?page=N you provide); a direct listing URL is collected once.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (build URLs from filters) or url (use pasted URLs) |
sites | array | ["dotproperty","lamudi"] | Portals to search |
operation | string | sale | sale or rent |
propertyTypes | array | ["properties"] | properties, houses, condos, apartments, townhouses, villas, land, offices |
locations | array | [] | Location names or slugs (search mode) |
minPrice | integer | - | Minimum price in PHP |
maxPrice | integer | - | Maximum price in PHP |
minBedrooms | integer | - | Minimum bedrooms |
minSqm | integer | - | Minimum usable floor area (sqm) |
sort | string | newest | Dot Property sort: newest, min_price, max_price, relevance |
urls | array | [] | dotproperty.com.ph / lamudi.com.ph URLs (url mode) |
maxItems | integer | 20 | The run's volume limit. Hard cap on listings collected |
maxPages | integer | - | Optional per-search page cap. Leave empty for no page limit; the run stops at Max listings |
fetchDetails | boolean | true | Enrich results with exact coordinates, facilities, full gallery, description, and agent contacts. Adds a per-listing detail-enrichment charge |
resumeFromRunId | string | - | Resume one interrupted run (skips already-collected listings) |
incrementalMode | boolean | false | Recurring monitoring: remembers the previous run of this search and returns only what changed |
stateKey | string | - | Optional manual key to control which runs share incremental state |
emitUnchanged | boolean | false | Incremental mode: also return listings with no detected change |
emitExpired | boolean | false | Incremental mode: also return listings no longer found (after a complete scan) |
proxy | object | - | Proxy configuration. Works on every Apify plan. If a run gets blocked, select RESIDENTIAL proxies with a PH country pin |
mcpConnectors | array | [] | MCP connectors to also deliver results into (Notion, Linear, Airtable, Apify). Leave empty to skip; see Send results into your apps |
notionParentPageUrl | string | - | Notion connector only: URL or id of the page under which item pages are created. Required to enable the Notion export; ignored by other connectors |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. Does not affect the dataset |
Resume an interrupted run
Paste a previous run ID or dataset ID into resumeFromRunId to continue that ONE crawl; listings it already collected are skipped instead of re-scraped. This is a one-off continuation, unrelated to Incremental mode below.
Incremental mode (recurring monitoring)
Turn on incrementalMode to schedule this actor against the same search repeatedly and get only what changed. The actor remembers the previous run of this search itself (a saved state, keyed on your filters or on stateKey) and tags every listing returned with a changeType:
changeType | Meaning |
|---|---|
NEW | First time this listing has ever been tracked under this state key |
UPDATED | Tracked before; at least one comparable field changed (see changedFields) |
UNCHANGED | Tracked before, nothing changed; suppressed (not returned) unless emitUnchanged is ON |
REAPPEARED | Was previously marked EXPIRED, now back |
EXPIRED | Was tracked and present before, no longer found; only emitted when emitExpired is ON, and only after a run that scanned its search to a genuine natural end (no maxItems cap hit, no Resume) |
Additional fields in incremental mode: changedFields (which field names differ from the last tracked scrape), firstSeenAt, lastSeenAt (UTC timestamps).
stateKey is optional: leave it blank to auto-derive the tracked scope from your search filters (portals, operation, property types, locations, price/bedroom/area filters, sort, URLs, and whether detail pages are enabled). Two different filter setups never share a baseline unless you set the same stateKey on both.
emitUnchanged and emitExpired default OFF. Turning either on returns (and bills, at the standard per-result rate) extra rows beyond what actually changed.
Output
Each listing is returned as a JSON object. Field availability varies slightly by portal (source distinguishes them):
| Field group | Fields |
|---|---|
| Identity | id, listing_id, source, url, title, operation, property_type, listing_id_text |
| Price | price, currency, price_period, price_per_sqm |
| Location | latitude, longitude, location_source, region, city, area, address, breadcrumbs |
| Specs | bedrooms, bathrooms, usable_area_sqm, land_area_sqm, floor, car_parks, contract_duration |
| Facilities | facilities[] (swimming pool, gym, security, …) |
| Nearby | nearby_pois[] (points of interest with coordinates, Lamudi) |
| Content | description, images[], image_count, og_image |
| Agent | agent_name, agent_phone, agent_url, agent_listing_count, agent_verified |
| Dates | posted_ago (relative posting age) |
| Incremental | changeType, changedFields, firstSeenAt, lastSeenAt |
Connection & reliability
Both portals are scraped over your Apify proxy connection and work on every Apify plan. If a run gets blocked, switch to RESIDENTIAL proxies with a PH country pin for the most consistent results.
If a portal stops serving detail pages part-way through a run, the actor stops asking for them instead of retrying every remaining listing. You still get every listing with its search-result fields (price, beds, baths, area, URL), and the listings that were not enriched are not charged the detail-enrichment fee.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape; the Apify dataset is never changed.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field.
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.