# Lamudi Scraper \[$1.2/1k💰] | ID/PH/MX Leads | Property Data (`ahmed_jasarevic/lamudi-scraper`) Actor

Scrape Lamudi real estate listings from Indonesia, Philippines and Mexico: price, bedrooms, size, coordinates, amenities, photos and agent data for property market research and real estate lead generation.

- **URL**: https://apify.com/ahmed\_jasarevic/lamudi-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Lamudi Property Scraper

Scrape **real estate listings from Lamudi Indonesia, Philippines and Mexico** — price, bedrooms, floor size, coordinates, amenities, photos and agency details — for **property market research and real estate lead generation**. Select a country, operation (buy/rent), location and property type, or paste listing URLs directly.

### Main Use Cases

- **Property market research** — Indonesian, Philippine and Mexican listing prices, sizes and locations in one structured dataset.
- **Real estate lead generation** — agency names, contact data and listing URLs for proptech sales and market-mapping.
- **Rental & sales price monitoring** — track asking prices per city over time for investment and underwriting analysis.
- **Proptech & investment analysis** — amenity data, geo-coordinates and property-type mix for portfolio and market-entry research.
- **Competitive listing intelligence** — monitor how agents and developers price comparable properties across markets.

### How It Works

The actor queries Lamudi's internal listing API (`/api/lamudi/listings`) directly — the same JSON endpoint the public site uses — returning listing cards (title, price, location, sizes, amenities, images) with **full detail automatically fetched** for every listing (detail is the only source of the real value/address fields). Lamudi's WAF (CloudFront) is handled with a real browser and residential proxies. Prices are parsed natively with locale-aware formatting (`Rp`, `₱`, `Mex$` → numeric values + currency), including JSON-LD price extraction when present, and geo-coordinates are pulled from the map integration.

### Build Indonesian, Philippine & Mexican Property Databases Without an Official API

Lamudi offers no public listings API. This single actor covers all three Lamudi marketplaces — `id` (lamudi.co.id), `ph` (lamudi.com.ph), `mx` (lamudi.com.mx) — via one `country` selector, and returns normalized listing rows: price, currency, property type, bedrooms/bathrooms, floor size, address, coordinates, amenities, description, photos and agent contact. Perfect for building a Southeast-Asian + Mexican property dataset.

### Monitor Asking Prices & Listing Volumes Across Cities

Run per city/location with `operation: "buy"/"rent"`, `propertyType`, and `maxPagesPerSearch` to compare price levels (per m², per bed) across Jakarta, Manila, Mexico City and beyond. Each run appends to your dataset so you can track price movement and market supply over time.

### Input

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `country` | enum | No | `id` | `id` (Indonesia), `ph` (Philippines), `mx` (Mexico). |
| `operation` | enum | No | `buy` | `buy` or `rent`. |
| `location` | string | No | — | Location slug, e.g. `bali`, `jakarta`, `makati` (append to the base URL as supported by the marketplace). |
| `propertyType` | string | No | — | Property-type slug, e.g. `rumah`, `apartemen`, `condominium`, `casa`, `departamento`. |
| `startUrls` | array | No | — | Direct Lamudi listing/category URLs, e.g. `https://www.lamudi.co.id/jual/bali/rumah/vila/`. Overrides `country`/`operation`/`location` for the listed URLs. |
| `maxItems` | integer | No | `50` | Hard cap on listing rows (max 5000). |
| `useDetail` | boolean | No | `false` | Fetch the full detail page per listing (larger datasets; detail is still always fetched for core fields). |
| `maxPagesPerSearch` | integer | No | `5` | Page cap per search/location sweep. |
| `proxy` | object | No | — | Recommend `{{ RESIDENTIAL_PROXY_PASS }}` (Lamudi uses CloudFront WAF). |

### Example Input

```json
{
  "country": "id",
  "operation": "buy",
  "location": "bali",
  "propertyType": "rumah",
  "maxItems": 100,
  "maxPagesPerSearch": 5
}
```

### Output

A single **listings** dataset. Example row:

```json
{
  "title": "Rumah Dijual di Malang 2 Lantai LT 79 LB 84 Harga 498 jt",
  "price": 498000000,
  "currency": "IDR",
  "priceLocale": "Rp498.000.000",
  "propertyType": "rumah",
  "operation": "buy",
  "bedrooms": 2,
  "bathrooms": 1,
  "floorSizeM2": 84,
  "landSizeM2": 79,
  "location": "Malang",
  "address": "Jl. ..., Malang, Jawa Timur",
  "coordinates": { "latitude": -7.98, "longitude": 112.63 },
  "amenities": ["carport", "AC", "2 lantai"],
  "description": "Rumah 2 lantai di Malang...",
  "photos": ["https://img.rnudah.com/..."],
  "agent": { "name": "X", "agency": "Y", "phone": "+62..." },
  "url": "https://www.lamudi.co.id/jual/rumah-dijual-di-malang-...",
  "scrapedAt": "2026-09-21T10:00:00.000Z"
}
```

#### Dataset schema (default dataset — `overview` view)

`title`, `price`, `currency`, `propertyType`, `operation`, `bedrooms`, `bathrooms`, `floorSizeM2`, `landSizeM2`, `location`, `address`, `coordinates`, `amenities`, `description`, `photos`, `agent`, `url`, `scrapedAt` (schema-backed fields; the actor's dataset schema is being completed by the developer).

### Property Price Monitoring Across Indonesia, Philippines & Mexico

The normalized price (`numeric + currency`) and per-listing geo + size fields make cross-city price-per-m² analysis straightforward. Schedule weekly runs per location to track rental and sales asking prices in Jakarta, Makati, Tijuana, etc.

### Integrations & Automation

- **Apify API** — feed listing rows into a proptech CRM or analysis pipeline.
- **Webhooks** — be notified when new listings match your saved sweep.
- **Scheduling** — weekly price monitoring, monthly market research.
- **Export** — JSON, CSV, HTML, Excel.

*Recommended schedule:* weekly for price/listing monitoring; monthly for full market research sweeps.

### Related Actors

- [Lamudi PH Property Scraper](https://apify.com/shahidirfan/lamudi-ph-property-scraper) — Philippines-focused Lamudi actor (most-used Lamudi actor).
- [Lamudi Indonesia Property Scraper](https://apify.com/shahidirfan/Lamudi-Indoneshia-Property-Scraper) — Indonesia-focused Lamudi alternative.
- [Lamudi Philippines Scraper - Property Listings](https://apify.com/memo23/lamudi-scraper) — per-country Lamudi scraper by memo23.
- [Dot Property & Lamudi Scraper - PH Real Estate](https://apify.com/memo23/dotproperty-scraper) — Philippines real-estate data across two platforms.
- [Lamudi Indonesia Scraper - Listings & Prices](https://apify.com/solidcode/lamudi-co-id-scraper) — Indonesia listing data alternative.

### FAQ

#### Why use this actor instead of the official Lamudi API?

Lamudi does not expose a public listings API. This actor reads the internal JSON endpoint (`/api/lamudi/listings`) the site itself uses, returning the same listing data as structured rows with no browser needed for the bulk of the work.

#### What are alternatives to this actor / SEA & LatAm property data?

- [shahidirfan/lamudi-ph-property-scraper](https://apify.com/shahidirfan/lamudi-ph-property-scraper) — Philippines only.
- [memo23/lamudi-scraper](https://apify.com/memo23/lamudi-scraper) and [memo23/dotproperty-scraper](https://apify.com/memo23/dotproperty-scraper) — PH-focused, per-country.
- [shahidirfan/Lamudi-Indoneshia-Property-Scraper](https://apify.com/shahidirfan/Lamudi-Indoneshia-Property-Scraper) and [solidcode/lamudi-co-id-scraper](https://apify.com/solidcode/lamudi-co-id-scraper) — Indonesia-focused.
- [scrapers\_lat/lamudi-scraper](https://apify.com/scrapers_lat/lamudi-scraper) — Mexico only.
- Ours is the **only actor covering id + ph + mx in one run**.

#### How can I get every house for sale in a city?

Set `country`, `operation: "buy"`, `propertyType: "rumah"` (or `casa`), the city as `location`, and raise `maxItems` up to 5000 with `maxPagesPerSearch` tuned up. The actor paginates automatically through the listing API.

#### What is the best way to track rental prices in a market?

Run weekly per city with `operation: "rent"` and the target `propertyType`/`location`, appending runs to one dataset. Normalized numeric prices + size fields let you compute price-per-m² trends.

#### Why use residential proxies?

Lamudi's WAF (CloudFront) rate-limits and blocks datacenter traffic. Residential IPs keep the listing-API requests stable, especially for large city sweeps.

### For AI Agents & LLM Apps

- **Purpose:** given a Lamudi country (id/ph/mx), operation, location and property type (or direct listing URLs), returns one structured real-estate listing record per property (title, price+currency, type, beds/baths, floor/land size, address, coordinates, amenities, description, photos, agent, URL).
- **Minimal input:**

```json
{ "country": "id", "operation": "buy", "location": "bali", "propertyType": "rumah", "maxItems": 50 }
```

- **Variant — direct URLs, more pages:**

```json
{
  "startUrls": [{ "url": "https://www.lamudi.co.id/jual/bali/rumah/vila/" }],
  "maxItems": 200,
  "useDetail": true,
  "maxPagesPerSearch": 10
}
```

- **Output field list (listings dataset):** `title`, `price`, `currency`, `priceLocale`, `propertyType`, `operation`, `bedrooms`, `bathrooms`, `floorSizeM2`, `landSizeM2`, `location`, `address`, `coordinates` ({latitude, longitude}), `amenities`, `description`, `photos`, `agent` ({name, agency, phone}), `url`, `scrapedAt`.

Behaviors an agent should know:

- **Detail is always fetched** for core fields (detail is the only source of numeric price and address) — `useDetail` only adds the fuller detail payload, not the base data.
- `country`/`operation`/`location`/`propertyType` build the search URL; `startUrls` overrides them for the URLs you list.
- `maxPagesPerSearch` bounds pages per sweep; `maxItems` bounds total rows (max 5000).
- Prices come normalized (`price` numeric + `currency`) — `priceLocale` preserves the locale-formatted original.
- Some agents return no phone (phone optional on the marketplace) — `agent.phone` may be null.
- **Billing:** pay-per-event — `result` $0.0012/listing row, `details` $0.0009/row when detail pages are fetched.

### Legal & Compliance Disclaimer

This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Lamudi (DCG / LIFULL) or any of its national brands (lamudi.co.id, lamudi.com.ph, lamudi.com.mx). It reads only publicly available property listing data — no login bypass. Users are responsible for complying with Lamudi's Terms of Service and applicable data-protection law (GDPR/CCPA for any personal data; agent contact data should be handled with care). Agent contact details should not be used for unsolicited commercial outreach in violation of applicable laws (CAN-SPAM, TCPA).

### SEO Keywords

lamudi scraper, philippines property data, indonesia real estate data, mexico property listings, lamudi indonesia, lamudi philippines, lamudi mexico, property market research, real estate lead generation, rental price monitoring, asking price data, property api alternative, proptech data, jakarta property prices, manila real estate, mexico city listings, property price per m2, lamudi listings export, sea real estate data, latin america property data

# Actor input Schema

## `country` (type: `string`):

Lamudi country site to scrape.

## `operation` (type: `string`):

Whether to scrape listings for sale or for rent.

## `location` (type: `string`):

City or region slug to filter by, e.g. 'jakarta', 'bali', 'makati', 'cebu', 'tijuana', 'guadalajara'. Leave empty for all listings in the country.

## `propertyType` (type: `string`):

Property type slug to filter by, e.g. 'rumah', 'apartemen', 'house', 'condominium', 'casa', 'departamento'. Leave empty for all types.

## `startUrls` (type: `array`):

Custom Lamudi search URLs to scrape. If provided, these override country/operation/location. Example: https://www.lamudi.co.id/jual/jakarta/

## `maxItems` (type: `integer`):

Maximum number of listings to output (capped at 5000).

## `useDetail` (type: `boolean`):

When ON, each listing's full detail page is scraped for richer data (full description, full image gallery, agent/agency contact) and is billed as a pay-per-event charge ('lamudi-detail'). When OFF (default), only the fast, reliable internal JSON listings API is used - the run stops at exactly maxItems with no WAF-blocked detail losses.

## `maxPagesPerSearch` (type: `integer`):

Maximum number of search result pages to crawl per search URL (30 listings per page).

## `proxy` (type: `object`):

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "country": "id",
  "operation": "buy",
  "location": "",
  "propertyType": "",
  "startUrls": [],
  "maxItems": 50,
  "useDetail": false,
  "maxPagesPerSearch": 5,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "country": "id",
    "operation": "buy",
    "startUrls": [],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/lamudi-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "country": "id",
    "operation": "buy",
    "startUrls": [],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/lamudi-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "country": "id",
  "operation": "buy",
  "startUrls": [],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/lamudi-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/lamudi-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/9TqjuzpGEIYtvzSAb/builds/RV3WPfCEOSJDDHSam/openapi.json
