# Lamudi Real Estate Scraper (`crawlerbros/lamudi-real-estate-scraper`) Actor

Scrape real estate listings from lamudi.com.ph - condos, houses, apartments, land and commercial property for sale or rent across the Philippines. Filter by region, price and bedrooms, or fetch exact listing URLs.

- **URL**: https://apify.com/crawlerbros/lamudi-real-estate-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Automation, Lead generation, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

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

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Lamudi Real Estate Scraper

Scrape real estate listings from [lamudi.com.ph](https://www.lamudi.com.ph/) — the Philippines' leading property portal. Search condos, houses, apartments, land and commercial property for sale or for rent, filtered by region, city/area, price and bedroom count — or fetch exact listing/search URLs directly. Returns price, bedrooms/bathrooms, floor size, exact location with coordinates, amenities and images.

### What this actor does

- **Two modes:** `search` (filtered browse) and `byUrls` (exact listing/search URL lookup)
- **Full transaction coverage:** for sale (`buy`) and for rent (`rent`)
- **Full property-type coverage:** condo, house, apartment, land, commercial, foreclosures (sale), short-term rentals
- **49 regions/provinces** plus an optional free-text city/area refinement
- **Filters:** min/max price, min/max bedrooms, min/max bathrooms, min/max floor size (sqm), free-text keyword
- **Sort order:** popularity (default), newest, price low-to-high, price high-to-low
- **Empty fields are omitted** — no null/blank/sentinel values in the output

### Output per listing

- `listingId`, `title`, `propertyUrl`, `sourceUrl`
- `description`
- `transactionType` — `buy` or `rent`
- `price`, `currency`, `priceUnit` (rent listings only, e.g. `month`), `availability`
- `bedrooms`, `bathrooms`, `floorSizeSqm`
- `region`, `city`, `streetAddress`, `country`
- `neighborhood` — barangay/district name (present on detail-page fetches only, `mode=byUrls` with an exact listing URL)
- `latitude`, `longitude`
- `imageUrl` — cover photo
- `imageUrls[]` — full photo gallery (present on detail-page fetches, `mode=byUrls` with an exact listing URL)
- `amenities[]` — building/unit amenities (present on detail-page fetches)
- `agencyName`, `agencyUrl`, `agencyVerification` (e.g. `Fully verified`), `agencyPhone` — publisher identity/contact, present on detail-page fetches only (`mode=byUrls` with an exact listing URL)
- `recordType: "listing"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `search` | `search` / `byUrls` |
| `transactionType` | string | `buy` | `buy` (for sale) / `rent` (for rent) |
| `propertyType` | string | `condo` | `condo` / `house` / `apartment` / `land` / `commercial` / `foreclosures` / `short-term`. `foreclosures` only exists under For Sale on Lamudi and `short-term` only under For Rent — if `transactionType` doesn't match, the actor auto-corrects it to the only valid combination rather than returning unrelated listings. |
| `region` | string | `metro-manila` | One of 49 regions/provinces, or blank for nationwide |
| `location` | string | – | Optional city/area slug appended after region, e.g. `quezon-city` |
| `keyword` | string | – | Optional free-text keyword matched against each listing's title/description/address (building/subdivision name). Applied client-side while paginating results. |
| `propertyUrls` | array | – | Exact listing or search-result URLs (mode=byUrls) |
| `minPrice` / `maxPrice` | int | – | Price range in local currency (PHP) |
| `minBedrooms` / `maxBedrooms` | int | – | Bedroom count range |
| `minBathrooms` / `maxBathrooms` | int | – | Bathroom count range |
| `minFloorSize` / `maxFloorSize` | int | – | Floor area range in square meters |
| `sortBy` | string | `popularity` | `popularity` / `newest` / `price-low` / `price-high` (mode=search) |
| `maxItems` | int | `30` | Hard cap (1–1000) |

#### Example: condos for sale in Quezon City under ₱10M

```json
{
  "mode": "search",
  "transactionType": "buy",
  "propertyType": "condo",
  "region": "metro-manila",
  "location": "quezon-city",
  "maxPrice": 10000000,
  "maxItems": 50
}
```

#### Example: 2+ bedroom houses for rent in Cebu

```json
{
  "mode": "search",
  "transactionType": "rent",
  "propertyType": "house",
  "region": "cebu",
  "minBedrooms": 2,
  "maxItems": 30
}
```

#### Example: look up specific listings

```json
{
  "mode": "byUrls",
  "propertyUrls": ["https://www.lamudi.com.ph/property/41032-73-a7e7750450ef-ea74-5bd7ca66-bf19-48cc"]
}
```

### Use cases

- **PropTech aggregators** — feed Philippine listing data into a cross-portal property search app
- **Real estate agencies** — monitor competitor listings and pricing in target regions
- **Market research** — track price-per-sqm trends across Metro Manila and provincial markets
- **Investment analysis** — filter for-rent yields vs for-sale prices in a specific city/area
- **Relocation services** — build curated shortlists of condos/houses matching a client's budget and bedroom needs
- **Lead generation** — identify verified agencies and their active listing inventory

### FAQ

**Do I need a proxy or login?** No. The actor reads lamudi.com.ph's public listing pages directly — no cookies, no API key, no residential proxy.

**How current is the data?** Every run fetches live data at request time; nothing is cached. Sold/rented or removed listings simply won't appear.

**Why do some listings have fewer fields than others?** Not every listing includes every optional field (e.g. `amenities` is more commonly populated on individual listing pages than on search-result cards). Missing fields are omitted rather than shown as empty.

**Can I get amenities for every listing?** Amenities appear most reliably when fetching individual listing pages directly via `mode=byUrls`; search-result cards sometimes omit them.

**Can I see who's listing the property?** `mode=byUrls` with an exact listing URL also returns the publisher/agency name, its Lamudi profile URL, and its verification badge (e.g. `Fully verified`).

**Can I get every photo, not just the cover image?** Yes — `mode=byUrls` with an exact listing URL returns `imageUrls[]`, the full photo gallery from the listing page (in addition to `imageUrl`, the single cover photo also available on search results).

### Limitations

- Coverage is the Philippines site (`lamudi.com.ph`) only; Lamudi's Indonesia and Mexico sites use different platforms and are not covered by this actor.
- `region`/`location` map to Lamudi's own URL taxonomy; an unrecognized city/area slug simply returns 0 results (no crash).
- Personal agent contact details (phone/email) are not part of the public listing data and are not included; only the publicly displayed agency/publisher name, profile URL and verification badge are.
- `propertyUrl`/`sourceUrl` open normally in a real browser, but lamudi.com.ph's CloudFront WAF returns 401/403 to bare `curl` or non-browser HTTP clients without a full browser TLS/JS fingerprint — this is expected and does not indicate a broken link.

# Actor input Schema

## `mode` (type: `string`):

What to fetch.

## `transactionType` (type: `string`):

Whether to fetch listings for sale or for rent.

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

Type of property to search.

## `region` (type: `string`):

Restrict to one region or province. Leave blank for nationwide results.

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

Optional city or area slug appended after the region, e.g. `quezon-city` or `quezon-city/loyola-heights-1`. Find exact slugs by browsing lamudi.com.ph.

## `keyword` (type: `string`):

Optional free-text keyword to match against each listing's title, description, and address (e.g. a building or subdivision name). Applied client-side across the region/type results — Lamudi has no server-side keyword search on category pages, so pages are scanned until enough matches are found or the catalog is exhausted.

## `propertyUrls` (type: `array`):

Exact lamudi.com.ph property URLs or search-result page URLs to fetch directly.

## `minPrice` (type: `integer`):

Drop listings priced below this.

## `maxPrice` (type: `integer`):

Drop listings priced above this.

## `minBedrooms` (type: `integer`):

Drop listings with fewer bedrooms than this.

## `maxBedrooms` (type: `integer`):

Drop listings with more bedrooms than this.

## `minBathrooms` (type: `integer`):

Drop listings with fewer bathrooms than this.

## `maxBathrooms` (type: `integer`):

Drop listings with more bathrooms than this.

## `minFloorSize` (type: `integer`):

Drop listings with a smaller floor area than this, in square meters.

## `maxFloorSize` (type: `integer`):

Drop listings with a larger floor area than this, in square meters.

## `sortBy` (type: `string`):

Order in which listings are returned. Only applies to mode=search.

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

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "search",
  "transactionType": "buy",
  "propertyType": "condo",
  "region": "metro-manila",
  "propertyUrls": [],
  "sortBy": "popularity",
  "maxItems": 30
}
```

# Actor output Schema

## `listings` (type: `string`):

Dataset containing all scraped Lamudi listings.

# 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 = {
    "mode": "search",
    "transactionType": "buy",
    "propertyType": "condo",
    "region": "metro-manila",
    "propertyUrls": [],
    "sortBy": "popularity",
    "maxItems": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/lamudi-real-estate-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 = {
    "mode": "search",
    "transactionType": "buy",
    "propertyType": "condo",
    "region": "metro-manila",
    "propertyUrls": [],
    "sortBy": "popularity",
    "maxItems": 30,
}

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

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

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

```

## CLI example

```bash
echo '{
  "mode": "search",
  "transactionType": "buy",
  "propertyType": "condo",
  "region": "metro-manila",
  "propertyUrls": [],
  "sortBy": "popularity",
  "maxItems": 30
}' |
apify call crawlerbros/lamudi-real-estate-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/lamudi-real-estate-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/a9aYvX6lpxE0trv1v/builds/KvCbms2ORvzkYaBTe/openapi.json
