Rumah123 Scraper With Agents | Fast & Reliable avatar

Rumah123 Scraper With Agents | Fast & Reliable

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Rumah123 Scraper With Agents | Fast & Reliable

Rumah123 Scraper With Agents | Fast & Reliable

Extract structured Indonesian property listings from Rumah123 with agent data, pricing, locations, and property details. Built for enterprise-grade real estate intelligence, lead generation, and automated CRM or analytics pipelines across Indonesia markets.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Fatih Tahta

Fatih Tahta

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Rumah123 Scraper

Slug: fatihtahta/rumah123-scraper

Overview

Rumah123 Scraper collects structured property listing data from Rumah123, including titles, prices, property types, listing status, locations, room counts, sizes, facilities, media, and agent or agency details when available. It is designed for teams that need consistent listing data from search pages or specific listing URLs without manual copy-paste. Rumah123 is one of Indonesia's major real estate marketplaces, making it a useful source for property market analysis, inventory tracking, lead enrichment, and localized research. The actor automates repetitive collection workflows and returns standardized JSON records you can use directly in reports, pipelines, and operational systems. This helps reduce manual effort, improve consistency across runs, and save time when working at scale.

Why Use This Actor

  • Market researchers and analysts: Track listing supply, pricing, property mix, and geographic trends across cities, districts, and listing types.
  • Product and content teams: Build property directories, landing pages, market snapshots, and neighborhood content with structured listing data.
  • Developers and data engineers: Feed ETL jobs, dashboards, warehouses, and APIs with JSON records that are easy to store, transform, and join.
  • Lead generation and enrichment teams: Identify listings, agents, agencies, and location-level inventory for outreach, enrichment, or qualification workflows.
  • Monitoring and competitive tracking: Watch changes in price ranges, promotions, furnishing mix, and available inventory for selected markets or URL sets.

Input Parameters

Provide any combination of URLs, queries, and filters to define the listings you want to collect.

ParameterTypeDescriptionDefault
listingTypestringListing category to collect. Allowed values: sale (for sale), rent (for rent).sale
sortOrderstringSort order for results. Allowed values: recommended, price-asc, price-desc, posted-desc, posted-asc, land-size-desc, building-size-desc.recommended
locationstringLocation keyword such as a city, district, neighborhood, street, or landmark. Example: Jakarta Selatan, Bandung, Nusa Dua.
promotionsstring[]Promotional filters to include. Allowed values: promotion, price-reduced, free-fees, zero-dp, bank-owned, njop.[]
property-typestring[]Property categories to include. Allowed values: house, apartment, land, shophouse, factory, office, commercial-space, warehouse, villa, boarding-house, hotel.[]
min_priceintegerMinimum listing price in IDR. Leave empty to avoid a lower price bound.
max_priceintegerMaximum listing price in IDR. Leave empty to avoid an upper price bound.
min_bedroomsstringMinimum bedroom count. Allowed values: 1, 2, 3, 4.
min_bathroomsstringMinimum bathroom count. Allowed values: 1, 2, 3, 4.
min_floorsstringMinimum number of floors. Allowed values: 1, 2, 3, 4.
furninshing_conditionstring[]Furnishing preferences to include. Allowed values: fully-furnished, partially-furnished, unfurnished.[]
property_facilitiesstring[]Facilities the listing should mention. Allowed values: air-conditioning, parking, cctv, security, wifi.[]
min_land_sizeintegerMinimum land size in square meters.
max_land_sizeintegerMaximum land size in square meters.
min_building_sizeintegerMinimum building size in square meters.
max_building_sizeintegerMaximum building size in square meters.
startUrlsstring[]One or more direct Rumah123 URLs. You can provide search result pages or individual listing URLs. When present, these URLs are used instead of the search filters above.
limitintegerMaximum number of listings to collect per search or start URL. Leave empty to collect all available results.

Example Inputs

Scenario: Search by location and price band

{
"listingType": "sale",
"sortOrder": "price-desc",
"location": "Jakarta Selatan",
"property-type": ["house"],
"min_price": 1500000000,
"max_price": 5000000000,
"min_bedrooms": "3",
"limit": 150
}

Scenario: Direct URL collection

{
"startUrls": [
"https://www.rumah123.com/jual/cari/?location=bali",
"https://www.rumah123.com/properti/badung/hos40272095/"
],
"limit": 100
}
{
"listingType": "rent",
"location": "Bandung",
"property-type": ["apartment"],
"max_price": 120000000,
"min_bathrooms": "1",
"furninshing_condition": ["fully-furnished"],
"property_facilities": ["parking", "security", "wifi"],
"limit": 80
}

Output

6.1 Output destination

The actor writes results to an Apify dataset as JSON records. And the dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs without post-processing.

6.2 Record envelope (all items)

Every dataset item includes a stable record envelope:

  • type (string, required): Record category. Current value: listing.
  • id (string, required): Stable Rumah123 listing identifier.
  • url (string, required): Canonical listing URL.

Recommended idempotency key: type + ":" + id

If the same listing appears across multiple inputs or runs, use this key for deduplication and upserts in downstream systems.

6.3 Examples

Example: listing (type = "listing")

{
"type": "listing",
"id": "hos40272095",
"url": "https://www.rumah123.com/properti/badung/hos40272095/",
"sourceUrl": "https://www.rumah123.com/jual/cari/?location=bali",
"title": "Hunia Cluster Semi Villa Nusa Dua",
"seedId": "73c8567a31bc",
"seedType": "url",
"seedValue": "https://www.rumah123.com/jual/cari/?location=bali",
"pageIndex": 1,
"slug": "/properti/badung-nusa-dua/hunia-cluster-semi-villa-nusa-dua-hos40272095/",
"description": "Hunian Cluster Semi Villa Nusa Dua Landsize 112 m2 Building Size 120 m2 3 KT/3 KM Swimming Pool 1.750.000.xxx M Lokasi dekat ITDC nusa Dua 25...",
"shortDescription": "Hunian Cluster Semi Villa Nusa Dua Landsize 112 m2 Building Size 120 m2 3 KT/3 KM Swimming Pool 1.750.000.xxx M Lokasi dekat ITDC nusa Dua 25...",
"price": "Rp 1,95 Miliar",
"priceNumeric": 1950000000,
"currency": "IDR",
"priceMin": 1950000000,
"priceMax": 1950000000,
"pricePerLandMeterNumeric": 0,
"propertyType": "Rumah",
"propertyTypeCode": "0",
"listingType": "Dijual",
"listingTypeCode": "0",
"overview": [
"Cash Keras/KPR/Cash Bertahap"
],
"location": "Nusa Dua, Badung",
"province": "Bali",
"city": "Badung",
"district": "Nusa Dua",
"latitude": -8.8,
"longitude": 115.23333,
"bedrooms": 3,
"bathrooms": 3,
"carports": 1,
"garages": 1,
"floors": 2,
"landSize": 112,
"buildingSize": 120,
"furnishing": "Unfurnished",
"condition": "Baru",
"certificate": "SHM",
"electricity": "4400 Watt",
"paymentMethod": "Cash Keras, KPR, Cash Bertahap",
"advertisedInstallment": "Cicilan : Rp 8 Jutaan/bulan",
"isStudioType": "Tidak",
"facilities": [
"Tempat Jemuran",
"Telepon",
"Kolam Renang",
"Taman",
"Akses Parkir"
],
"mediaUrls": [
"https://picture.rumah123.com/r123-images/1080x720-fit/customer/1377727/f5b785a2c391f6c4e34a32d2c436c786.jpg",
"https://picture.rumah123.com/r123-images/1080x720-fit/customer/1377727/016d968e33a308e4c1e2536a72414fe2.jpg"
],
"additionalFlags": [
{
"label": "Dekat Pantai Samuh",
"active": true,
"sequence": 0,
"category": "POI Nearby"
}
],
"specialFlag": {
"isUnderNjop": false,
"isFavorite": false,
"isNpl": false,
"isPrimaryProject": false,
"isHavePromo": false,
"isNoDownPayment": false,
"hasNoFee": false,
"isSubunit": false
},
"agentName": "Budi Santoso",
"agentId": "1234567",
"agentUuid": "11111111-2222-4333-8444-555555555555",
"agentPhone": "+6281234567890",
"agentWhatsapp": "+6281234567890",
"agentEmail": "budi.santoso@contohproperti.co.id",
"agentUrl": "https://www.rumah123.com/agen-properti/contoh-properti-jakarta/budi-santoso-1234567/",
"agentPhotoUrl": "https://example.com/images/agent-budi-santoso.jpg",
"agentIsHomeOwner": false,
"agencyName": "Contoh Properti Nusantara",
"agencyLogoUrl": "https://example.com/images/agency-logo-contoh-properti-nusantara.jpg",
"marketerType": "Official Developer",
"subscriptionTierId": 8,
"projectPromotions": [],
"projectPropertyTypes": [],
"installments": [
{
"amount": 9580997,
"tenor": 20,
"formattedAmount": "Rp 9 Jutaan",
"formattedTenor": "Tenor 20 Tahun"
}
],
"rentType": -1,
"rentPrices": [],
"publishedAt": "2026-03-31T07:32:03+00:00",
"createdAt": "2026-03-26T04:28:09+00:00",
"updatedAt": "2026-03-26T04:28:10+00:00",
"isPrimaryProject": false,
"detail": {
"attributes": {
"bedrooms": {
"name": "bedrooms",
"label": "Kamar",
"value": "3",
"formattedValue": "3"
}
},
"mediaByType": {
"REGULAR": [
{
"formatUrl": "https://picture.rumah123.com/r123-images/{width}x{height}-{scale}/customer/1377727/f5b785a2c391f6c4e34a32d2c436c786.jpg",
"mediaUrl": "https://picture.rumah123.com/r123-images/1080x720-fit/customer/1377727/f5b785a2c391f6c4e34a32d2c436c786.jpg"
}
]
},
"agent": {
"id": "1234567",
"uuid": "11111111-2222-4333-8444-555555555555",
"url": "https://www.rumah123.com/agen-properti/contoh-properti-jakarta/budi-santoso-1234567/",
"name": "Budi Santoso",
"agencyName": "Contoh Properti Nusantara",
"marketerType": "Official Developer",
"contact": [
{
"contactType": 1,
"type": "EMAIL",
"value": "budi.santoso@contohproperti.co.id"
}
]
},
"organization": {
"name": "Contoh Properti Nusantara",
"logoUrl": "https://example.com/images/agency-logo-contoh-properti-nusantara.jpg"
},
"searchMeta": {
"uuid": "70b8fa60-88aa-4727-b23e-09d9d13c4458",
"subscriptionTierId": 8,
"rentType": -1
}
},
"domain": "rumah123.com",
"fingerprint": "33a5e2cb04b02b0420cb"
}

Field reference

Listing fields (type = "listing")

  • type (string, required): Record category. Current value: listing.
  • id (string, required): Stable Rumah123 listing identifier.
  • url (string, required): Canonical listing URL.
  • sourceUrl (string, optional): Search or listing URL that produced the record.
  • title (string, optional): Listing title.
  • seedId (string, required): Stable identifier for the input seed used in the run.
  • seedType (string, required): Seed category, such as url.
  • seedValue (string, required): Original seed value supplied to the run.
  • pageIndex (integer, required): Page number within the originating search path.
  • slug (string, optional): Relative listing path.
  • description (string, optional): Full listing description.
  • shortDescription (string, optional): Shorter summary text.
  • price (string, optional): Human-readable price as displayed.
  • priceNumeric (number, optional): Normalized numeric price value.
  • currency (string, optional): Currency code, typically IDR.
  • priceMin (number, optional): Lower bound of the displayed price range.
  • priceMax (number, optional): Upper bound of the displayed price range.
  • priceTotal (string, optional): Total price text when separately provided.
  • pricePerLandMeterNumeric (number, optional): Numeric land price per square meter when available.
  • priceTag (string, optional): Price label or price-related tag.
  • priceDrop (object, optional): Price reduction metadata when available.
  • propertyType (string, optional): Property category label.
  • propertyTypeCode (string, optional): Property category code.
  • listingType (string, optional): Listing status label, such as sale or rent.
  • listingTypeCode (string, optional): Listing status code.
  • overview (array[string], optional): Short listing highlights.
  • location (string, optional): Display location string.
  • province (string, optional): Province name.
  • city (string, optional): City or regency name.
  • district (string, optional): District or neighborhood name.
  • latitude (number, optional): Latitude coordinate.
  • longitude (number, optional): Longitude coordinate.
  • fullAddress (string, optional): Full address text when available.
  • postalCode (string, optional): Postal code.
  • addressCountry (string, optional): Country name or code.
  • bedrooms (number, optional): Number of bedrooms.
  • bathrooms (number, optional): Number of bathrooms.
  • carports (number, optional): Number of carports.
  • garages (number, optional): Number of garages.
  • floors (number, optional): Number of floors.
  • landSize (number, optional): Land size in square meters.
  • buildingSize (number, optional): Building size in square meters.
  • maidBedrooms (number, optional): Number of maid bedrooms.
  • maidBathrooms (number, optional): Number of maid bathrooms.
  • phoneLines (number, optional): Number of phone lines.
  • furnishing (string, optional): Furnishing condition.
  • condition (string, optional): Property condition.
  • certificate (string, optional): Certificate or title type.
  • electricity (string, optional): Electricity capacity text.
  • paymentMethod (string, optional): Supported payment methods.
  • advertisedInstallment (string, optional): Installment text shown on the listing.
  • isStudioType (string, optional): Studio-type indicator.
  • facilities (array[string], optional): Listing facilities and amenities.
  • mediaUrls (array[string], optional): Media URLs associated with the listing.
  • additionalFlags (array[object], optional): Additional tags or badges shown on the listing.
  • additionalFlags.label (string, optional): Flag label.
  • additionalFlags.active (boolean, optional): Whether the flag is active.
  • additionalFlags.sequence (integer, optional): Display order for the flag.
  • additionalFlags.category (string, optional): Flag category.
  • specialFlag (object, optional): Boolean feature flags for special listing conditions.
  • specialFlag.isUnderNjop (boolean, optional): Indicates under-NJOP pricing.
  • specialFlag.isFavorite (boolean, optional): Indicates favorite status.
  • specialFlag.isNpl (boolean, optional): Indicates bank-owned or NPL status.
  • specialFlag.isPrimaryProject (boolean, optional): Indicates primary project status.
  • specialFlag.isHavePromo (boolean, optional): Indicates promotion availability.
  • specialFlag.isNoDownPayment (boolean, optional): Indicates no down payment.
  • specialFlag.hasNoFee (boolean, optional): Indicates no-fee status.
  • specialFlag.isSubunit (boolean, optional): Indicates subunit status.
  • coBroke (object, optional): Co-broking metadata when present.
  • gtsLabel (object, optional): Supplemental listing label metadata when present.
  • agentName (string, optional): Agent display name.
  • agentId (string, optional): Agent identifier.
  • agentUuid (string, optional): Agent UUID.
  • agentPhone (string, optional): Agent phone number.
  • agentWhatsapp (string, optional): Agent WhatsApp number.
  • agentEmail (string, optional): Agent email address.
  • agentUrl (string, optional): Public agent profile URL.
  • agentPhotoUrl (string, optional): Agent photo URL.
  • agentIsHomeOwner (boolean, optional): Whether the advertiser is the homeowner.
  • agencyName (string, optional): Agency or organization name.
  • agencyUrl (string, optional): Agency URL when available.
  • agencyLogoUrl (string, optional): Agency logo URL.
  • marketerType (string, optional): Marketer category.
  • subscriptionTierId (integer, optional): Listing subscription tier identifier.
  • projectName (string, optional): Related project name.
  • projectUrl (string, optional): Related project URL.
  • parentProject (string, optional): Parent project name.
  • projectDeveloperName (string, optional): Developer name.
  • projectPromotions (array[string], optional): Project-level promotions.
  • projectPropertyTypes (array[string], optional): Project property categories.
  • projectSubunitName (string, optional): Project subunit name.
  • installments (array[object], optional): Installment options.
  • installments.amount (number, optional): Installment amount.
  • installments.tenor (integer, optional): Installment tenor in years.
  • installments.formattedAmount (string, optional): Formatted installment amount.
  • installments.formattedTenor (string, optional): Formatted tenor text.
  • rentType (integer, optional): Rent model identifier.
  • rentPrices (array[object], optional): Rent pricing variants when available.
  • auction (object, optional): Auction-related metadata when available.
  • repost (object, optional): Repost metadata when available.
  • propertyPartner (object, optional): Partner-related metadata when available.
  • publishedAt (string, optional): Listing publish timestamp in ISO 8601 format.
  • createdAt (string, optional): Listing creation timestamp in ISO 8601 format.
  • updatedAt (string, optional): Listing update timestamp in ISO 8601 format.
  • isPrimaryProject (boolean, optional): Whether the listing belongs to a primary project.
  • detail (object, optional): Extended structured detail block.
  • detail.attributes (object, optional): Attribute map keyed by attribute name.
  • detail.attributes. (string, optional): Internal attribute key.
  • detail.attributes. (string, optional): Display label for the attribute.
  • detail.attributes. (string, optional): Raw attribute value.
  • detail.attributes. (string, optional): Formatted attribute value.
  • detail.mediaByType (object, optional): Media grouped by media type.
  • detail.mediaByType. (string, optional): Templated media URL.
  • detail.mediaByType. (string, optional): Media asset URL.
  • detail.agent (object, optional): Extended agent profile block.
  • detail.agent.id (string, optional): Agent identifier.
  • detail.agent.uuid (string, optional): Agent UUID.
  • detail.agent.url (string, optional): Public agent URL.
  • detail.agent.name (string, optional): Agent name.
  • detail.agent.photoUrl (string, optional): Agent photo URL.
  • detail.agent.agencyName (string, optional): Agent agency name.
  • detail.agent.agencyPhotoUrl (string, optional): Agent agency logo URL.
  • detail.agent.contact (array[object], optional): Agent contact methods.
  • detail.agent.contact[].contactType (integer, optional): Contact type code.
  • detail.agent.contact[].type (string, optional): Contact channel type.
  • detail.agent.contact[].value (string, optional): Contact value.
  • detail.agent.marketerType (string, optional): Agent marketer category.
  • detail.agent.subscription (object, optional): Agent subscription metadata.
  • detail.agent.subscription.subscriptionTierId (integer, optional): Subscription tier identifier.
  • detail.agent.subscription.status (integer, optional): Subscription status code.
  • detail.agent.subscription.time.created (integer, optional): Subscription creation timestamp.
  • detail.agent.subscription.time.posted (integer, optional): Posted timestamp.
  • detail.agent.subscription.time.published (integer, optional): Published timestamp.
  • detail.agent.subscription.time.removed (integer, optional): Removed timestamp.
  • detail.agent.subscription.time.updated (integer, optional): Updated timestamp.
  • detail.agent.subscription.time.expire (integer, optional): Expiration timestamp.
  • detail.agent.subscription.type.name (string, optional): Subscription plan name.
  • detail.agent.subscription.type.value (integer, optional): Subscription plan code.
  • detail.agent.isHomeOwner (boolean, optional): Whether the agent is also the homeowner.
  • detail.agent.medias (object, optional): Agent media grouped by type.
  • detail.organization (object, optional): Organization or agency detail block.
  • detail.organization.name (string, optional): Organization name.
  • detail.organization.logoUrl (string, optional): Organization logo URL.
  • detail.organization.medias (object, optional): Organization media grouped by type.
  • detail.searchMeta (object, optional): Search and listing metadata block.
  • detail.searchMeta.uuid (string, optional): Search metadata UUID.
  • detail.searchMeta.originId.formattedValue (string, optional): Formatted origin identifier.
  • detail.searchMeta.instanceInfo.status (integer, optional): Listing instance status.
  • detail.searchMeta.price.display (string, optional): Display price string.
  • detail.searchMeta.price.offer (number, optional): Offer price value.
  • detail.searchMeta.price.minValue (number, optional): Minimum price value.
  • detail.searchMeta.price.maxValue (number, optional): Maximum price value.
  • detail.searchMeta.price.offerLandPerMeter (number, optional): Land price per meter.
  • detail.searchMeta.time.posted (integer, optional): Posted timestamp.
  • detail.searchMeta.time.created (integer, optional): Created timestamp.
  • detail.searchMeta.time.expire (integer, optional): Expiration timestamp.
  • detail.searchMeta.time.updated (integer, optional): Updated timestamp.
  • detail.searchMeta.specialFlag.isUnderNjop (boolean, optional): Under-NJOP flag.
  • detail.searchMeta.specialFlag.isFavorite (boolean, optional): Favorite flag.
  • detail.searchMeta.specialFlag.isNpl (boolean, optional): NPL flag.
  • detail.searchMeta.specialFlag.isPrimaryProject (boolean, optional): Primary project flag.
  • detail.searchMeta.specialFlag.isHavePromo (boolean, optional): Promotion flag.
  • detail.searchMeta.specialFlag.isNoDownPayment (boolean, optional): No-down-payment flag.
  • detail.searchMeta.specialFlag.hasNoFee (boolean, optional): No-fee flag.
  • detail.searchMeta.specialFlag.isSubunit (boolean, optional): Subunit flag.
  • detail.searchMeta.subscriptionTierId (integer, optional): Search metadata subscription tier.
  • detail.searchMeta.rentType (integer, optional): Search metadata rent type.
  • domain (string, optional): Source domain.
  • fingerprint (string, required): Stable content fingerprint for record-level traceability.

Data guarantees & handling

  • Best-effort extraction: fields may vary by region, session, listing availability, or UI experiments on the source site.
  • Optional fields: null-check in downstream code.
  • Deduplication: recommend type + ":" + id.

How to Run on Apify

  1. Open the actor in Apify Console.
  2. Configure your search parameters, such as listing type, location, property type, price range, and optional filters.
  3. Set the maximum number of outputs to collect.
  4. Click Start and wait for the run to finish.
  5. Download results in JSON, CSV, Excel, or other supported formats.

Scheduling & Automation

Scheduling

Automated Data Collection

You can schedule recurring runs to keep your property dataset fresh without starting each run manually. This is useful for tracking inventory, price changes, and market activity over time.

  • Navigate to Schedules in Apify Console
  • Create a new schedule (daily, weekly, or custom cron)
  • Configure input parameters
  • Enable notifications for run completion
  • Optional: add webhooks for automated processing

Integration Options

  • Webhooks: Trigger downstream actions when a run completes
  • Zapier: Connect to 5,000+ apps without coding
  • Make (Integromat): Build multi-step automation workflows
  • Google Sheets: Export results to a spreadsheet
  • Slack/Discord: Receive notifications and summaries
  • Email: Send automated reports via email

Performance

Estimated run times:

  • Small runs (< 1,000 outputs): ~2–3 minutes
  • Medium runs (1,000–5,000 outputs): ~5–15 minutes
  • Large runs (5,000+ outputs): ~15–30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record.

Compliance & Ethics

Responsible Data Collection

This actor collects publicly available property listing information from https://www.rumah123.com for legitimate business purposes, including:

  • Real estate research and market analysis
  • Lead enrichment and inventory monitoring
  • Competitive benchmarking and reporting

Users are responsible for ensuring their use of collected data complies with applicable laws, regulations, and the source website's terms. This section is informational and not legal advice.

Best Practices

  • Use collected data in accordance with applicable laws, regulations, and the target site's terms
  • Respect individual privacy and personal information
  • Use data responsibly and avoid disruptive or excessive collection
  • Do not use this actor for spamming, harassment, or other harmful purposes
  • Follow relevant data protection requirements where applicable (e.g., GDPR, CCPA)

Support

For help, use the actor page discussion area or open an issue with the run details. Include the input used with sensitive values redacted, the run ID, the expected versus actual behavior, and, if helpful, a small output sample.