Hipflat Scraper [$0.80/1k💰] Thailand Property & Projects
Pricing
from $0.80 / 1,000 property or project results
Hipflat Scraper [$0.80/1k💰] Thailand Property & Projects
Scrape hipflat.co.th property listings and new-project data across Thailand: price, price per m², beds, baths, area, floor, type, address, GPS, amenities, photos, full description and project facts. Buy and rent; search and URL modes; project records with available units; sorts and filters.
Pricing
from $0.80 / 1,000 property or project results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
3
Monthly active users
17 days ago
Last modified
Categories
Share
Hipflat Scraper: Thailand Property Listings & Project Data
Hipflat Scraper turns hipflat.co.th into a clean property data feed for Thailand. Get condos, houses, villas, townhouses, apartments, land, offices, commercial space and hotels, for sale or for rent, plus new-project directories with available units, facilities and pricing. Build a search from a location and filters, or paste hipflat links directly, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.
Why This Scraper?
- Two ways to find data. Build a search from a location, deal type, property type and filters, or paste hipflat links: a listing search, a single listing, a project directory or a single project page. The actor detects the shape automatically.
- Two record kinds, one dataset. Property listings and project records come out as flat objects with rich, named fields, so you can filter and join on them directly.
- Optional detail fetch, on demand. Turn on Fetch details (listings) or Fetch full project record (project directories) to add floor, price per square metre, GPS, the full amenity list, the untruncated description and the parent-project or developer facts, and pay only for the records you enrich.
- Filters that follow you into URL mode. Price, bedroom, bathroom and area filters narrow listings in both search mode and a pasted listing URL, so a saved link still respects the limits you set; they don't apply to project directory or project page records.
- Competitor-compatible aliases. Common rival field names (
record_type,record_id,price_min,image_urls,coordinates) are mirrored onto every record, so pipelines built against other Thailand property scrapers keep working; listing-specific aliases (property_types,deal_type,property_type) only appear on listing records. - Built for schedules. Incremental mode remembers its own baseline for a search and returns only new and changed records on recurring runs, so you do not pay twice for a listing you already have.
- Resume without re-paying. Point Resume at an interrupted run or dataset id and this run skips every record it already collected there.
Use Cases
- Property portals and lead-gen tools: mirror hipflat listings into your own search or CRM using the competitor-aliased fields.
- Market research and appraisal: track price per square metre, available project units and price trend signals across cities and property types.
- Agency and investment monitoring: schedule incremental runs to catch new listings, price changes and re-listed properties without re-downloading everything each time.
- Project and developer tracking: pull full project directories with available units, facilities and developer details for a market segment.
- Data science and comparables: build a historical dataset of listings and projects for pricing or valuation models.
Data You Get
Sample shape: values are illustrative placeholders, not from a live record.
| Field | Example |
|---|---|
recordType | "property_listing" (also "project" on project records) |
listingId | "a1b2c3d4e5f6example0000000000000" |
url | link to the listing on hipflat.co.th |
title | "Condo for sale in Sukhumvit" |
dealType | "buy" (also "rent") |
propertyType | "Condo" |
price | 4200000 |
priceText | "฿ 4,200,000" |
currency | "THB" |
address | "Sukhumvit, Khlong Toei, Bangkok" |
bedrooms | 2 |
bathrooms | 2 |
area | 65 |
description | listing summary text from the search-result card |
images | array of photo URLs |
mainImage | the first photo URL |
imageCount | 6 |
scrapedAt | ISO timestamp of the fetch |
floor | 8 (with Fetch details on) |
pricePerArea | 64615 (with Fetch details on) |
amenities | ["Swimming Pool", "Fitness Center", "Parking"] (with Fetch details on) |
latitude / longitude | 13.7234 / 100.5701 (with Fetch details on) |
agencyName | "Example Realty Co." (with Fetch details on) |
Project directory and project-page records use a different shape: projectSlug, projectName, address, saleFromPrice, rentFromPrice on the base card, plus (with the project detail fetch on, or from a pasted project page) latitude/longitude, availableUnitsCount, units, facilities, nearby, marketStats, developer and a full description. Incremental mode adds changeType, changedFields, firstSeenAt and lastSeenAt to every record. Every record also carries a set of competitor-compatible aliases (record_type, record_id, price_min/price_max, image_urls, coordinates) that mirror the primary field values under common rival key names; listing records additionally carry property_types, deal_type and property_type aliases.
How to Use
- Pick a mode:
search(build from a location, deal type, property type and filters) orurl(paste hipflat listing search, single listing, project directory or project page links). - Narrow results with the optional price, bedroom, bathroom and area filters, and turn on Fetch details (listings) or Fetch full project record (project directories) if you want the deeper fields.
- Set Max items, and optionally Max pages, to control run size and cost, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it through the API.
Search for condos to buy in Bangkok, filtered:
{"mode": "search","locations": ["Bangkok"],"dealType": "buy","propertyType": "condo","bedrooms": 2,"minPrice": 2000000,"maxPrice": 6000000,"maxItems": 20}
Rent villas in Phuket, sorted and enriched:
{"mode": "search","locations": ["Phuket"],"dealType": "rent","propertyType": "villa","sortBy": "price_asc","fetchDetails": true,"maxItems": 15}
Paste a project directory link and fetch full project records:
{"mode": "url","urls": ["https://www.hipflat.co.th/thailand-projects/condo/bangkok-bm"],"includeProjectDetails": true,"maxItems": 10}
Monitor a search for new and expired houses in Chiang Mai:
{"mode": "search","locations": ["Chiang Mai"],"propertyType": "house","incrementalMode": true,"emitExpired": true,"maxItems": 0}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/hipflat-scraper").call(run_input={"mode": "search", "locations": ["Bangkok"], "propertyType": "condo", "maxItems": 20})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["title"], item["price"], item["bedrooms"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/hipflat-scraper').call({mode: 'search', locations: ['Bangkok'], propertyType: 'condo', maxItems: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Max items and Max pages
Max items is the single hard cap across every location or URL in the run (default 20; set 0 for unlimited). Max pages is an optional per-search, per-URL page ceiling (about 30 records a page); it is unlimited by default and only matters if you want to shortcut one very large source before Max items would.
Resume and incremental mode
- Resume (
resumeFromRunId) continues one specific interrupted run: paste its run or dataset id and this run skips every record already collected there, so you do not pay twice. If Incremental mode is also on and this is the first run for that State key, the resumed ids seed its baseline too. - Incremental mode (
incrementalMode) is for scheduling the same search or URL set again and again. State is kept per search/URL and detail-fetch combination, named bystateKeyor an automatic key derived from your settings. Every record is classifiedNEW,UPDATED(withchangedFields), orUNCHANGED(suppressed, and not billed, unlessemitUnchangedis on).REAPPEAREDandEXPIREDare produced only after a run that scanned its full tracked search end to end, with Max items not capping it and Resume not used; turn onemitExpiredto receive those rows on such a complete run. A record can only come back asREAPPEAREDonce it has actually been markedEXPIREDby an earlier complete run, so a search that has never produced anEXPIREDrecord cannot produce aREAPPEAREDone either. Turning on Incremental mode together with Resume against a State key that already has saved state fails the run; drop Resume or use a fresh State key instead.
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.
What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify, Settings, Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you have not authorized a connector yet.)
- 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.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search (build from filters) or url (paste hipflat links). |
locations | array | no default (prefill: ["Bangkok"]) | Locations to search. Only applies when mode = search. |
dealType | string | buy | Buy or rent. Only applies when mode = search. |
propertyType | string | condo | Property category to search. Only applies when mode = search. |
minPrice | integer | no default | Minimum price in THB. Applies in search mode and URL mode. |
maxPrice | integer | no default | Maximum price in THB. Applies in search mode and URL mode. |
bedrooms | integer | no default | Number of bedrooms (0 = studio, 4 = 4 or more). Applies in search mode and URL mode. |
minBathrooms | integer | no default | Minimum number of bathrooms. Applies in search mode and URL mode. |
minArea | integer | no default | Minimum usable area in square metres. Applies in search mode and URL mode. |
maxArea | integer | no default | Maximum usable area in square metres. Applies in search mode and URL mode. |
sortBy | string | relevance | Result ordering. Only applies when mode = search. |
urls | array | no default (prefill: ["https://www.hipflat.co.th/ขายคอนโด/กรุงเทพฯ"]) | hipflat links to scrape. Only applies when mode = url. |
includeProjectDetails | boolean | false | On a project directory URL, also fetch each project page for units, facilities, developer, GPS and full description. |
fetchDetails | boolean | false | Fetch each listing page for floor, price per m², GPS, the full amenity list, the full description and parent-project facts. |
maxPages | integer | no default (unlimited) | Optional per-search page ceiling. Does not cap the run; Max items does. |
maxItems | integer | 20 | The run's single hard cap across every location or URL. Set 0 for unlimited. |
resumeFromRunId | string | no default | Continue one specific interrupted run: paste its run id or dataset id. |
incrementalMode | boolean | false | Turn on for daily or recurring monitoring of the same search/URL. |
stateKey | string | no default | Name or share an incremental-mode monitoring campaign. |
emitUnchanged | boolean | false | Also return (and bill) UNCHANGED records in incremental mode. |
emitExpired | boolean | false | Also return (and bill) EXPIRED records after a complete incremental scan. |
proxy | object | no default (prefill: Apify Proxy, group RESIDENTIAL, country TH) | Connection settings. hipflat serves results only to a Thailand residential connection. |
mcpConnectors | array | no default (none) | Optional: send a summary of each record to apps you authorized under Integrations. |
notionParentPageUrl | string | no default (none) | Notion connector only: page under which records are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. |
Output Example
Sample shape: values are illustrative placeholders, not from a live record.
{"recordType": "property_listing","listingId": "a1b2c3d4e5f6example0000000000000","url": "https://www.hipflat.co.th/ads/a1b2c3d4e5f6example0000000000000","title": "Condo for sale in Sukhumvit","dealType": "buy","propertyType": "Condo","priceText": "฿ 4,200,000","price": 4200000,"pricePerAreaText": "฿ 64,615/sqm","pricePerArea": 64615,"currency": "THB","address": "Sukhumvit, Khlong Toei, Bangkok","addressFull": "1 Example Road, Khlong Toei, Bangkok, TH","bedrooms": 2,"bathrooms": 2,"floor": 8,"areaText": "65 sqm","area": 65,"areaUnit": "m²","description": "Spacious two-bedroom condo close to the BTS with full facilities.","images": ["https://l.hipcdn.com/img1.jpg", "https://l.hipcdn.com/img2.jpg"],"mainImage": "https://l.hipcdn.com/img1.jpg","imageCount": 2,"isPremium": false,"amenities": ["Swimming Pool", "Fitness Center", "Parking"],"agencyName": "Example Realty Co.","agencyLogo": "https://l.hipcdn.com/logo.jpg","isPremiumAgency": true,"projectName": "Example Tower","latitude": 13.7234,"longitude": 100.5701,"sourceUrl": "https://www.hipflat.co.th/ขายคอนโด/กรุงเทพฯ","scrapedAt": "2026-09-29T09:00:00Z"}
Plan Requirement
hipflat serves results only to a Thailand residential connection, so the input defaults the connection to Apify's residential proxy group with country Thailand; keep that default for reliable results, and the actor automatically retries with a different connection when one is refused. The actor manages its own retries and connection handling internally: the only limits you set are Max items and Max pages above.
FAQ
How much does it cost?
Pay per event: one charge when the run starts, one per property or project record returned, and one detail-enrichment charge for a record whose full page was fetched, whether that's because Fetch details or Fetch full project record is on, or because it came from a pasted single listing or single project URL, which is always fetched in full regardless of those toggles. Runs with both detail toggles off, using search mode or a pasted results/directory URL, are billed only for the records they return. The Pricing tab shows the current rates. Use Max items to cap the cost of any run.
Is it legal to scrape hipflat?
This actor collects only publicly available property listing and project data. You are responsible for how you use it: follow hipflat's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution.
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 classifies every record against the previous run's state: NEW, UPDATED, or UNCHANGED (suppressed and not billed unless you turn on Emit unchanged). EXPIRED only appears on a run that has scanned its tracked search completely, with no Max items cap and no Resume, and only when Emit expired is on; REAPPEARED only appears on a later run, for a record that an earlier run like that had already marked EXPIRED.
Why does URL mode ignore my deal type and location settings?
A pasted hipflat URL already carries its own deal type, property type, location and sort order, so those settings are ignored in URL mode. Price, bedroom, bathroom and area filters still narrow a pasted listing URL's results, the same as in Search mode; they don't apply to a pasted project directory or project page URL.
Why did my run fail instead of returning an empty dataset?
The run fails outright when URL mode is selected with no usable URLs, when a pasted Resume run or dataset id cannot be read, or when Incremental mode is turned on with a State key that already has saved state while Resume is also set. Search mode with an empty Locations searches all of Thailand rather than failing. If the site itself refuses every request, the run completes with an empty dataset and a status message telling you to check your proxy setting, rather than failing; check the run log for that message.
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.
🔗 Want more travel data?
Pair this actor with these related scrapers from the same team:
| 🏨 LoopNet From $1.2/1K. Scrape LoopNet across the US including office, retail, industrial... | 🏨 Traveloka Hotel Scraper Scrape Traveloka hotels across Singapore, Malaysia, Indonesia, Thailand, Vietnam and the... |
| 🏨 Booking.com Hotels, Prices and Reviews Scraper Scrape booking.com hotels, apartments, villas and hostels. Search any destination with... | 🏨 Rakuten Travel Scraper Scrape Rakuten Travel, Japan's largest domestic hotel-booking site, by prefecture... |
| 🏨 Vrbo Scraper Extract vacation rental data from Vrbo.com by location, region, coordinates, property... | 🏨 Airbnb Scraper Scrape Airbnb stays by destination or link: nightly and total price, rating breakdown... |
💬 Support & custom scrapers
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email abotapi@proton.me or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.