DDProperty Scraper avatar

DDProperty Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
DDProperty Scraper

DDProperty Scraper

Scrape property listings from DD websites with precision. Extracts prices, locations, descriptions & more. Residential proxy compulsory for reliable data collection. Perfect for real estate analytics, market research & investment tracking. High-speed, accurate property data extraction.

Pricing

from $1.00 / 1,000 results

Rating

5.0

(2)

Developer

Shahid Irfan

Shahid Irfan

Maintained by Community

Actor stats

1

Bookmarked

16

Total users

2

Monthly active users

12 days ago

Last modified

Share

What does DDProperty Scraper do?

DDProperty Scraper collects structured property listings for sale and rent from DDProperty, Thailand's leading real estate portal. Paste a DDProperty search page URL, choose sale or rent mode, set a result target, and the Actor returns clean property records with prices, rooms, floor and land area, address, district, region, project and developer names, nearby MRT stations, agent details, verification flags, photo galleries, and posting dates. Export the results as JSON, CSV, Excel, or XML, or feed them into dashboards, alerts, and CRM tools for market research, property monitoring, and lead generation.

DDProperty publishes thousands of active listings across Bangkok and the rest of Thailand but does not offer a bulk export for structured property data. This Actor fills that gap by collecting public listing data from search results and pagination, so you can build your own property datasets without manual copy-paste.

Why use DDProperty Scraper?

  • Structured Thai property dataset - Collect dozens of fields per listing including price, price per area, bedrooms, bathrooms, floor area, land area, property type, address, district, region, project, and developer without manual copy-paste.
  • Duplicate-safe collection - Unique listings only, even when result pages overlap, so exported data stays clean for analysis.
  • Sale and rent coverage - Run the same Actor for for-sale or for-rent inventory by changing one input field.
  • Automation-ready output - Download results as JSON, CSV, Excel, or XML, or connect them to Google Sheets, webhooks, Make, or Zapier.
  • Market and lead research - Compare pricing and property specs by district and region, track listing freshness, and build outreach lists from agent and project metadata.
  • Schedule for monitoring - Use Apify schedules to refresh listing data hourly, daily, or weekly and watch how prices and inventory change over time.

What data can you extract from DDProperty?

FieldDescription
priceNumeric asking price
priceTextFormatted asking price text
currencyCurrency code such as THB
bedroomsNumber of bedrooms
bathroomsNumber of bathrooms
floorAreaSqmFloor area in square meters
landAreaSqmLand area in square meters
propertyTypeProperty type such as Condo, House, or Townhouse
addressFull listing address
districtDistrict name when available
regionRegion or province name
projectNameProject or development name
developerNameDeveloper name when available
agentNameListing agent name
imageUrlMain listing image URL
photoGalleryFull gallery of listing photo URLs
mrtNamesNearby MRT station names
recencyTextHow recently the listing was posted
postedOnUnixPosting date as a Unix timestamp
listingTypeSale or rent label
isVerifiedListing verification flag
urlDirect link to the listing

How to use DDProperty Scraper

  1. Open the Actor on Apify Store.
  2. Keep the default sale search URL or paste your own DDProperty search page URL.
  3. Choose sale or rent for the listing type.
  4. Set the number of results you want and the maximum page depth.
  5. Run the Actor and review the dataset preview.
  6. Download the results or connect them to your workflow.

The Actor stops automatically once it reaches your result target or the end of the available listings for the search. If you request 500 results but only 300 exist, you get 300 with a clear message.

Input Parameters

ParameterTypeRequiredDefaultDescription
startUrlStringNoDefault sale search URLDDProperty search page URL to start from
listingTypeStringNosaleListing mode: sale or rent
isCommercialBooleanNofalseSet true for commercial property searches
results_wantedIntegerNo20Maximum number of listings to save
max_pagesIntegerNo5Safety cap on the number of result pages to visit
proxyConfigurationObjectNoResidential proxy presetProxy settings; residential proxy recommended for larger runs

Output Data

Each record in the dataset contains a subset of these fields, with empty values removed automatically:

FieldTypeDescription
idStringListing ID
externalIdStringExternal listing ID
titleStringListing title
urlStringDirect listing URL
listingTypeStringSale or rent label
propertyTypeStringProperty type such as Condo or House
statusCodeStringListing status code
priceNumberNumeric asking price
priceTextStringFormatted asking price
pricePerAreaStringPrice per area text
currencyStringCurrency code
bedroomsNumberBedroom count
bathroomsNumberBathroom count
floorAreaSqmNumberFloor area in square meters
landAreaSqmNumberLand area in square meters
addressStringFull listing address
districtStringDistrict name
regionStringRegion or province
projectNameStringProject or development name
developerNameStringDeveloper name when available
agentNameStringListing agent name
agentIdNumberAgent ID
agentVerifiedBooleanAgent verification flag
imageUrlStringMain listing image URL
photoGalleryArrayFull-resolution listing photo URLs
availabilityTextStringAvailability label
listedByTextStringListing source label
badgeTextStringListing badge text
viewedLabelStringViewer activity label
mrtNamesArrayNearby MRT station names
featureTextsArrayFeature summary text values
isVerifiedBooleanListing verification flag
isOfficialListingBooleanOfficial listing flag
isDeveloperListingBooleanDeveloper listing flag
isDeveloperUnitListingBooleanDeveloper unit listing flag
isPrioritizedBooleanPrioritized listing flag
isPhoneOtpEnabledBooleanPhone verification flag
accountTypeCodeStringListing account type
recencyTextStringRecency label
postedOnTextStringDisplay posting date
postedOnUnixNumberPosting date as Unix timestamp
sourceUrlStringSearch page URL used for collection
pageNumberSearch result page number
scrapedAtStringISO timestamp when the record was collected

Usage Examples

Basic Sale Listings

Collect the default sale search results with the built-in presets:

{
"startUrl": "https://www.ddproperty.com/en/property-for-sale?listingType=sale&isCommercial=false",
"listingType": "sale",
"isCommercial": false,
"results_wanted": 20,
"max_pages": 3
}

Rent Listings

Switch to rental inventory by changing the search URL and listing type:

{
"startUrl": "https://www.ddproperty.com/en/property-for-rent?listingType=rent&isCommercial=false",
"listingType": "rent",
"isCommercial": false,
"results_wanted": 30,
"max_pages": 4
}

Larger Collection with Proxies

Collect 200 sale listings with residential proxies for smoother large-scale runs:

{
"startUrl": "https://www.ddproperty.com/en/property-for-sale?listingType=sale&isCommercial=false",
"listingType": "sale",
"isCommercial": false,
"results_wanted": 200,
"max_pages": 10,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Collect commercial property listings with a commercial search URL:

{
"startUrl": "https://www.ddproperty.com/en/property-for-sale?listingType=sale&isCommercial=true",
"listingType": "sale",
"isCommercial": true,
"results_wanted": 20,
"max_pages": 5
}

Sample Output

{
"id": "60125081",
"externalId": "60125081",
"title": "3 Bedroom Condo for sale at Example Residence",
"url": "https://www.ddproperty.com/en/property/project/example-residence-bangkok-for-sale-60125081#3856",
"listingType": "For Sale",
"propertyType": "Condo",
"price": 8500000,
"priceText": "฿8,500,000",
"pricePerArea": "฿94,444 / sqm",
"currency": "THB",
"bedrooms": 3,
"bathrooms": 2,
"floorAreaSqm": 95,
"address": "Bang Na, Bang Na, Bangkok",
"district": "Bang Na",
"region": "Bangkok",
"projectName": "Example Residence",
"developerName": "Example Developer",
"agentName": "Example Agent",
"agentVerified": true,
"availabilityText": "Available now",
"listedByText": "Listed by agent",
"badgeText": "Verified",
"viewedLabel": "Viewed 120 times",
"mrtNames": ["Bang Na"],
"featureTexts": ["3 Beds", "2 Baths", "95 sqm"],
"imageUrl": "https://th1-cdn.pgimgs.com/project-listing-project/60248606/PLPHO.134568456.V550/example.jpg",
"photoGallery": [
"https://th1-cdn.pgimgs.com/project-listing-project/60248606/PLPHO.134568456.V800/example.jpg",
"https://th1-cdn.pgimgs.com/project-listing-project/60248606/PLPHO.134568457.V800/example-2.jpg"
],
"isVerified": true,
"isOfficialListing": false,
"isDeveloperListing": false,
"isPrioritized": true,
"accountTypeCode": "agent",
"recencyText": "2 days ago",
"postedOnText": "2 days ago",
"postedOnUnix": 1772755200,
"sourceUrl": "https://www.ddproperty.com/en/property-for-sale?listingType=sale&isCommercial=false",
"page": 1,
"scrapedAt": "2026-08-09T12:00:00.000Z"
}

Tips for Best Results

  • Start small - Use results_wanted: 20 for quick validation runs, then raise the limit for larger jobs.
  • Use stable search URLs - Keep the listing type in the URL aligned with the listingType input field.
  • Increase page depth gradually - Raise max_pages only as needed, because each page adds more listings to collect.
  • Use residential proxies for larger runs - Enable Apify Proxy with the RESIDENTIAL group when collecting more than a few pages to improve continuity.
  • Expect source-dependent fields - Not every listing publishes every field. Empty values are removed automatically so the dataset stays clean.
  • Report page changes - Public websites change over time. If a run stops unexpectedly, use the Issues tab on the Actor page.

Integrations

  • Google Sheets - Send property data to spreadsheets for team review.
  • Airtable - Build searchable property databases.
  • Slack - Get notified when new collection runs complete.
  • Webhooks - Trigger downstream workflows after each run.
  • Make - Automate reporting and data processing flows.
  • Zapier - Connect property data to hundreds of apps.

Export Formats

  • JSON - For applications, APIs, and data pipelines.
  • CSV - For spreadsheet analysis.
  • Excel - For business reporting.
  • XML - For system integrations.

Frequently Asked Questions

Can I scrape both sale and rental listings?

Yes. Set listingType to sale for for-sale properties or rent for rental listings, and provide a matching DDProperty search URL.

How many listings can I collect?

Set results_wanted to your target number and increase max_pages for deeper pagination. The Actor collects up to your target or until it reaches the total available listings for the search.

Why are some fields empty?

Some listings do not publish every data point. Empty values are removed automatically so the exported dataset remains clean and analysis-ready.

Should I use a proxy?

Residential proxies are recommended for larger or repeated runs. They improve continuity and reduce the chance of access interruptions.

Can I export the data to CSV or Excel?

Yes. Apify datasets support export to JSON, CSV, Excel, XML, and HTML. Download results directly from the Apify Console or using the API.

What happens if a page fails to load?

The Actor retries failed pages automatically and uses alternative request patterns before reporting an error. If no data can be collected at all, the run stops with a clear error message instead of returning fake success records.

Scraping public web data can be legal, but you are responsible for complying with applicable laws, DDProperty's terms of service, and privacy rules. Use data responsibly and respect rate limits.

Support

For issues, feature requests, or custom Actor work, use the Issues tab on the Actor page or contact the developer through Apify.

This Actor is intended for legitimate collection of publicly available DDProperty property information. Users are responsible for complying with applicable laws, DDProperty's terms of service, and privacy rules. Use data responsibly and respect rate limits.