Rumah123 Scraper $1đź’° Listings, Prices & Agent Data avatar

Rumah123 Scraper $1đź’° Listings, Prices & Agent Data

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Rumah123 Scraper $1đź’° Listings, Prices & Agent Data

Rumah123 Scraper $1đź’° Listings, Prices & Agent Data

Pull structured property listings from Rumah123.com, Indonesia’s largest property portal. Search by location with advanced filters or paste Rumah123 URLs directly. Returns pricing, specs, GPS, agent contacts, galleries, instalment estimates, and 50+ fields, plus full upstream data objects.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

17

Total users

5

Monthly active users

11 hours

Issues response

a day ago

Last modified

Share

Rumah123 Indonesia Property Scraper

Pull structured property listings from rumah123.com, Indonesia's largest property portal, with one fast actor. Search by location with rich filters or paste any rumah123 search/listing URL. Every record carries price, full specifications, GPS coordinates, agent phone, WhatsApp, and email, photo galleries, installment estimates, and 50+ more fields, plus the complete upstream objects so nothing is ever dropped.

Why this scraper

  • 70+ fields per listing, including agent phone, WhatsApp, and email on every record (even without detail mode).
  • Two modes: search by location with filters, or paste search/listing URLs directly (multiple URLs supported).
  • Deep pagination: walks far past the first page, so large queries are not capped at a handful of results.
  • Lean and detail modes: the fast lean mode already includes agent contacts, price, specs, and photos; turn on detail mode for the full description, exact address, full photo gallery, and schema.org data.
  • Verified filters: price, bedrooms, bathrooms, land size, building size, property type, sort, and furnishing.
  • Complete data: a raw field carries the full agent, price, location, attributes, and media objects with every source field, so future fields and every contact detail come through automatically.
  • GPS on every listing: latitude and longitude for mapping and territory analysis.
  • Resume & recurring updates: continue one interrupted crawl with resumeFromRunId, or turn on incrementalMode to schedule this same search daily/weekly and get back only what's NEW, UPDATED, or REAPPEARED.

Data you get

FieldExample
idhos41652809
urlhttps://www.rumah123.com/properti/jakarta-utara-kelapa-gading/jual-rumah-3-lantai-janur-elok-kelapa-gading-jakarta-utara-hos41652809/
titleJual Rumah 3 Lantai Janur Elok Kelapa Gading Jakarta Utara
listingTypesale
propertyTypeRumah
priceDisplayRp 5,7 Miliar
price5700000000
pricePerMeterDisplayRp 37,2 Juta
bedrooms8
bathrooms4
carports3
floors3
landSize153
buildingSize459
certificateSHM
electricity6600 Watt
furnishingFurnished
provinceDKI Jakarta
cityJakarta Utara
districtKelapa Gading
latitude-6.16076844
longitude106.9035302
fullAddressPerumahan Janur Elok, Jl. Raya Janur Elok, Kelapa Gading Barat, Kelapa Gading, Kota Jakarta Utara, DKI Jakarta, Indonesia, 14240
agentNameDaniel Suwanto
agentPhone+6282333312972
agentWhatsapp+6282333312972
agentEmaildanielsuwantodansu@gmail.com
agentUrlhttps://www.rumah123.com/agen-properti/era-star-cempaka-mas/daniel-suwanto--4458192/
marketerTypeOfficial Developer
coverImagehttps://picture.rumah123.com/r123-images/1080x720-fit/customer/4458192/listing/hos41652809/enhanced/86a0e3960733859233b00f14b10cc28c.jpg
imagesCount9
installmentMonthlyCicilan : Rp 25 Jutaan/bulan
quickLabels["Dekat Pusat Perbelanjaan", "Siap Huni"]
postedAt2026-05-21T13:09:24+00:00
descriptionDIJUAL CEPAT RUMAH 3 LANTAI JANUR ELOK KELAPA GADING (full text in detail mode)

Plus flat project and deal fields (projectName, coBroke, auction, repost, propertyPartner, rentType) and a complete raw field that includes every source field of the listing (and detailRaw in detail mode), so nothing, current or future, is ever dropped. jsonLd carries the schema.org block in detail mode.

Incremental mode only. When incrementalMode is on, every returned record also carries:

FieldDescription
changeTypeNEW | UPDATED | UNCHANGED | REAPPEARED | EXPIRED
changedFieldsTop-level fields that changed since last seen; non-empty only for UPDATED
firstSeenAtWhen this listing was first observed by this monitoring campaign
lastSeenAtWhen this listing was last observed

An EXPIRED row is a tombstone (id/title/url/price/specs/agent/location/media - every field this actor normally flattens), not a full record: it never carries raw, detailRaw, or jsonLd.

How to use

Search a city for houses for sale, fast lean mode:

{
"mode": "search",
"locations": ["dki-jakarta"],
"listingType": "sale",
"propertyType": "house",
"maxPages": 5,
"maxListings": 100
}

Search with filters (price, bedrooms, land size, sort):

{
"mode": "search",
"locations": ["bandung", "surabaya"],
"listingType": "sale",
"propertyType": "house",
"minPrice": 1000000000,
"maxPrice": 3000000000,
"minBedrooms": 3,
"minLandSize": 150,
"sortBy": "lowest-price",
"maxListings": 200
}

Rent search with furnishing filter and full details:

{
"mode": "search",
"locations": ["dki-jakarta"],
"listingType": "rent",
"propertyType": "apartment",
"furnishing": "furnished",
"fetchDetails": true,
"maxListings": 50
}

Direct URLs (filters ignored, pagination walks forward):

{
"mode": "url",
"urls": [
"https://www.rumah123.com/jual/bandung/rumah/",
"https://www.rumah123.com/sewa/dki-jakarta/apartemen/"
],
"maxPages": 3
}

Scheduled monitoring (same search every day, only changes returned):

{
"mode": "search",
"locations": ["jakarta-selatan"],
"listingType": "sale",
"propertyType": "house",
"incrementalMode": true
}

Input parameters

ParameterTypeDefaultDescription
modestringsearch"search" (location + filters) or "url" (direct URLs).
locationsarray["dki-jakarta"]Location slugs, e.g. dki-jakarta, jakarta-selatan, bandung, bali. Search mode only.
listingTypestringsale"sale" (jual) or "rent" (sewa). Search mode only.
propertyTypestringresidentialresidential, house, apartment, land, shophouse, warehouse, office, villa, hotel, factory, commercial-space, boarding-house. Search mode only.
sortBystringrecommendedrecommended, latest, lowest-price, highest-price, largest-land, largest-building. Search mode only.
minPrice / maxPriceinteger(none)Price range in IDR. Search mode only.
minBedrooms / minBathroomsinteger(none)Minimum rooms. Search mode only.
minLandSize / maxLandSizeinteger(none)Land area range in square meters. Search mode only.
minBuildingSize / maxBuildingSizeinteger(none)Building area range in square meters. Search mode only.
furnishingstringanyany, furnished, semi-furnished, unfurnished. Search mode only.
urlsarray(none)Direct search/listing URLs. URL mode only.
fetchDetailsbooleanfalseVisit each listing for the full description, address, gallery, and schema.org data.
maxPagesinteger(none)Optional bound on result pages per location/URL (about 24 listings per page). Leave empty to walk every result page.
maxListingsinteger20Maximum total listings across all searches. 0 means no cap (bounded by maxPages).
resumeFromRunIdstring(none)Continue one specific previous run/dataset: listings already collected there are skipped, so this run only returns new ones. For recurring daily monitoring of the same search, use incrementalMode instead - see "Resume & recurring updates" below.
incrementalModebooleanfalseDaily/recurring monitoring of this same search. First run returns everything as NEW; later runs return only NEW/UPDATED/REAPPEARED by default. See "Resume & recurring updates" below.
stateKeystring(none)Optional name for a monitoring campaign, so its incremental state stays stable or is deliberately shared. Auto-derived from your location/URL, listing/property type, and filter settings when left empty.
emitUnchangedbooleanfalseIncremental mode only. Also return listings unchanged since the last run, marked UNCHANGED. Adds and bills extra rows you already have.
emitExpiredbooleanfalseIncremental mode only. Also return listings from a previous run no longer found, marked EXPIRED, once a run has fully scanned the search (not capped, not a resume). Adds and bills extra synthetic rows.
proxyobjectResidential IDProxy settings. Indonesia residential is required.

Resume & recurring updates

There are two different things here - pick the one that matches what you're doing:

NeedUse
A crawl stopped and should continueresumeFromRunId / automatic checkpoint recovery
Run the same search every day and receive only changesincrementalMode
Keep separate daily campaigns for similar searchesdistinct stateKey values
Run a normal full snapshotleave both off

Resume (resumeFromRunId) continues one specific interrupted or previous large crawl: paste a run ID or dataset ID and this run skips listings already collected there, returning only the remaining new listings. An automatic same-run checkpoint also protects against platform migrations/Resurrects without any input needed.

Incremental mode (incrementalMode) is for a schedule (for example, daily): the actor remembers the previous run of the same search by itself, so you never paste a run ID. The first run returns everything as NEW. Later runs return only NEW, UPDATED, and REAPPEARED listings by default - duplicates and unchanged listings are suppressed (and not charged). Turn on emitUnchanged or emitExpired only when you also want those rows returned (and billed for). State is isolated per location/URL, listing/property type, and detail-mode setup automatically; set stateKey to name or deliberately share a monitoring campaign. It reuses the same listing identity (id) that resumeFromRunId dedups on, so the two features never disagree about what "the same listing" means.

Scheduled-run example - same search, run daily:

Day 1 (first run ever for this search):

{ "mode": "search", "locations": ["jakarta-selatan"], "propertyType": "house", "incrementalMode": true }

→ every listing comes back with "changeType": "NEW".

Day 2 (same input, run again the next day):

{ "mode": "search", "locations": ["jakarta-selatan"], "propertyType": "house", "incrementalMode": true }

→ only listings that are new, changed price/specs/agent/etc., or reappeared come back; everything else is skipped and not billed.

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.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to 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.

Output example

{
"id": "hos41652809",
"url": "https://www.rumah123.com/properti/jakarta-utara-kelapa-gading/jual-rumah-3-lantai-janur-elok-kelapa-gading-jakarta-utara-hos41652809/",
"title": "Jual Rumah 3 Lantai Janur Elok Kelapa Gading Jakarta Utara",
"listingType": "sale",
"propertyType": "Rumah",
"price": 5700000000,
"priceDisplay": "Rp 5,7 Miliar",
"pricePerMeterDisplay": "Rp 37,2 Juta",
"currency": "IDR",
"bedrooms": 8,
"bathrooms": 4,
"carports": 3,
"floors": 3,
"landSize": 153,
"buildingSize": 459,
"certificate": "SHM",
"electricity": "6600 Watt",
"furnishing": "Furnished",
"province": "DKI Jakarta",
"city": "Jakarta Utara",
"district": "Kelapa Gading",
"latitude": -6.16076844,
"longitude": 106.9035302,
"fullAddress": "Perumahan Janur Elok, Jl. Raya Janur Elok, Kelapa Gading Barat, Kelapa Gading, Kota Jakarta Utara, DKI Jakarta, Indonesia, 14240",
"agentName": "Daniel Suwanto",
"agentPhone": "+6282333312972",
"agentWhatsapp": "+6282333312972",
"agentEmail": "danielsuwantodansu@gmail.com",
"marketerType": "Official Developer",
"coverImage": "https://picture.rumah123.com/r123-images/1080x720-fit/customer/4458192/listing/hos41652809/enhanced/86a0e3960733859233b00f14b10cc28c.jpg",
"imagesCount": 9,
"installmentMonthly": "Cicilan : Rp 25 Jutaan/bulan",
"quickLabels": ["Dekat Pusat Perbelanjaan", "Siap Huni"],
"postedAt": "2026-05-21T13:09:24+00:00"
}

Plan requirement

rumah123.com only accepts traffic from Indonesia residential connections. Use Apify Residential proxy with country ID (the default). This is available on the Apify Starter plan and above. Free plans without Residential proxy access will return zero results, and the run log will explain how to upgrade.