Hipflat Thailand Scraper icon

Hipflat Thailand Scraper

Scrape Hipflat (hipflat.co.th) properties for sale and rent across Thailand. Extract prices, price per m², beds, baths, area, floor, GPS, amenities,…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Hipflat Thailand Scraper at a glance

Hipflat Thailand Scraper is a ready-to-run Apify actor from abotapi for collecting real estate data. Its documented output includes type, listing id, project, title and deal, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $0.80 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Real Estate
Pricing
$1.80 per 1,000 results (Free plan), from $0.80 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
29 options

Scrape Hipflat (hipflat.co.th) properties for sale and rent across Thailand. Extract prices, price per m², beds, baths, area, floor, GPS, amenities, photos and descriptions. Includes new-project details and available units, with search, URL, filters and sorting.

What Hipflat Thailand Scraper can do

  • 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.

Choose what to collect

These inputs let you configure Hipflat Thailand Scraper - Properties, Prices & Projects. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredsearch = build searches from a location + filters. url = paste hipflat listing searches, single listing pages, project directories or project pages.

Choices: search, url

locationsarrayLocations to search, e.g. Bangkok, Pattaya, Phuket, Chiang Mai, Chonburi. English names for major provinces are mapped automatically; a Thai province name also works. Leave empty to search all of Thailand. Only applies when mode = search.
dealTypestringBuy or rent. Only applies when mode = search.

Choices: buy, rent

propertyTypestringProperty category to search. Only applies when mode = search.

Choices: condo, house, villa, townhouse, apartment, land, office, commercial, hotel

propertyTypesarraySeveral property types in one run; overrides the single Property type when set. Only applies when mode = search.
sortBystringResult ordering. Only applies when mode = search.

Choices: relevance, price_asc, price_desc, bedrooms_asc, bedrooms_desc, area_asc, area_desc, newest

urlsarrayPaste one or more hipflat URLs. Supported: listing searches (e.g. /ขายคอนโด/กรุงเทพฯ), single listing pages (/ads/...), project directories (/thailand-projects/...) and project pages (/projects/...). Location, deal type, property type and sort order above are ignored in this mode (a pasted URL carries its own); Filters fields below still apply. Left unedited, URL mode scrapes one example of each supported shape.
Show 22 more inputs
More input fields
InputWhat it controls
minPriceintegerMinimum price in Thai baht (for-sale total, or monthly rent). Applies in Search mode and URL mode, including a pasted URL.
maxPriceintegerMaximum price in Thai baht (for-sale total, or monthly rent). Applies in Search mode and URL mode, including a pasted URL.
bedroomsintegerNumber of bedrooms (0 = studio, 4 = 4 or more). Applies in Search mode and URL mode, including a pasted URL.
minBathroomsintegerMinimum number of bathrooms. Applies in Search mode and URL mode, including a pasted URL.
minAreaintegerMinimum usable area in square metres. Applies in Search mode and URL mode, including a pasted URL.
maxAreaintegerMaximum usable area in square metres. Applies in Search mode and URL mode, including a pasted URL.
publicationDatestringOnly listings published within this window. Applies in Search mode and to pasted listing-search URLs (/ขายคอนโด/..., /en/condo-for-sale/...); not to single listing or project URLs. Empty = any time.

Choices: 24-hours, 7-days, 30-days

bedroomCountsarrayKeep listings with any of these bedroom counts (0 = studio, 4 = 4 or more). Applied in addition to the single Bedrooms field.
bathroomCountsarrayKeep listings with any of these bathroom counts (5 = 5 or more).
includeProjectDetailsbooleanWhen scraping a project directory URL, also fetch each project page to add its available units, facilities, developer, GPS and full description. Adds one request per project and is billed one detail-enrichment event per enriched project.
fetchDetailsbooleanFetch each listing page to add floor, price per m², GPS, the full amenity list, the full untruncated description and the parent-project facts. The search results already include title, price, bedrooms, bathrooms, area, property type, description and photos, so leave this off for the leanest, cheapest run. Adds one request per listing.
maxPagesintegerOptional safety stop on how many result pages to read per location/URL (about 30 records per page). This does NOT cap the run: leave it empty (or 0) for unlimited pages and the run is bounded solely by Max items. Set a value only if you also want a per-search page ceiling.
maxItemsintegerThe run's single hard cap: maximum total records across all searches. Defaults to 20. Set 0 for unlimited. This is the only default limit; Max pages is unlimited by default and defers to this.
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large crawl without returning or charging for records already collected there. Use this after an interrupted run. For recurring monitoring of the same search, use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns all matching records as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED records. Turn on "Emit unchanged" or "Emit expired" only when you also want those records returned (and billed). State is kept separately for each search/URL and detail-mode setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the search/URL and detail settings, different searches then never mix state with each other.
emitUnchangedbooleanOff by default. Turn on to also return records that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return records that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max items capped it or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking.
ignoreFieldsForChangesarrayOptional, incremental mode only. Output field names that must not count as a change: a record whose only differences are in these fields stays UNCHANGED, and they are left out of changedFields. Use a top-level name (for example priceText) or a dotted path to one nested field (for example marketStats.priceTrendText or marketStats.avgPricePerSqm); naming a whole object such as marketStats ignores all of it. The fields are still returned in the output. scrapedAt is always ignored. Changing this list never re-bills existing records as UPDATED.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

recordTypeType (text)
listingIdListing ID (text)
projectSlugProject (text)
titleTitle (text)
dealTypeDeal (text)
propertyTypeProperty (text)
pricePrice (number)
currencyCur (text)
pricePerAreaPrice/m2 (number)
bedroomsBeds (number)
bathroomsBaths (number)
areaArea m2 (number)
Show 26 more fields
floorFloor (number)
addressAddress (text)
latitudeLat (number)
longitudeLng (number)
projectNameProject name (text)
urlURL (link)
changeTypeChange type (incremental mode) (text)
changedFieldsChanged fields (incremental mode) (array)
firstSeenAtFirst seen (incremental mode) (date)
lastSeenAtLast seen (incremental mode) (date)
saleFromPriceSale from (number)
rentFromPriceRent from (number)
availableUnitsCountAvail units (number)
unitCountUnits listed (number)
descriptionDescription (text)
amenitiesAmenities (array)
agencyNameAgency (text)
agencyAgency details (object)
mainImageMain image (image)
imagesImages (array)
developerDeveloper (text)
facilitiesFacilities (array)
unitsUnits (array)
marketStatsMarket stats (object)
projectDetailsProject details (object)
nearbyNearby (array)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "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"
}

Ways to use this data

  • 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.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Hipflat Thailand Scraper return?

The documented output for Hipflat Thailand Scraper includes type, listing id, project, title, deal, property, price and cur. Availability of each field depends on the source page and the selected mode.

How much does Hipflat Thailand Scraper cost?

It costs $1.80 per 1,000 results on the Apify Free plan and from $0.80 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

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.

What does URL mode do if I leave the URLs field unedited?

The Hipflat URLs field is pre-filled with one real example of every supported shape (buy and rent searches in Thai and English, paginated, sorted, price-filtered and district searches, listing pages, project directories and project pages). Selecting URL mode and running without editing it scrapes all of those examples, so replace or clear the list to scrape only your own links. A bare /thailand-projects/ address is not a page on the site (it returns not found), so paste a full project directory address such as the one in the prefill.

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.

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.

Ready to collect with Hipflat Thailand Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.