# Zameen.com Scraper — Pakistan Property Listings & Prices (`yugenox/zameen-scraper`) Actor

Scrape Zameen.com (Pakistan) listings by city, area, property type, bedrooms, price and size in marla/kanal, or from pasted links: price in PKR and lakh/crore, area in marla, kanal, sqft and sqm, beds, baths, location, coordinates, agency, photos. Never outputs private owners' contacts. No login.

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

## Pricing

from $1.00 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Zameen.com Scraper: Pakistan property listings, prices and agencies

Scrape **Zameen.com**, Pakistan's largest property portal. Search by **city, area or society, property type, bedrooms, price and size in marla or kanal**, or paste links you opened on the site. Each listing comes back with its **price in PKR and in lakh/crore words**, **size in marla, kanal, sq ft and sq m**, bedrooms and bathrooms, the full **location (city → society → phase → block) with coordinates**, the verified flag, the **agency's business details** and photos. Turn on property details for the full description, features (built year, parking, servant quarters…) and every photo. No login, no cookies, no account.

### What you get

| | |
|---|---|
| **Listing** | ID, URL, title, buy or rent, property type (House, Flat, Upper Portion, Residential Plot, Office…), listing tier, posted and updated dates |
| **Price** | Price in PKR and as Zameen writes it ("PKR 7.3 Crore", "PKR 1.2 Lakh") |
| **Size & rooms** | Marla, kanal, sq ft and sq m (Zameen's 225 sq ft marla), bedrooms, bathrooms |
| **Location** | City, area/society (DHA Defence, Bahria Town…), phase/block, province, full location path with IDs, latitude and longitude |
| **Agency** | Agency name, Zameen profile link, logo, tier, the agent's published contact name, phone and WhatsApp |
| **Photos** | Main photo, photo and video counts (every photo with property details) |
| **Property details** (optional) | Full description, features and amenities with values, all photos, verification, completion, occupancy and ownership status |

### How to use it

1. Choose **Buy** or **Rent** and type a **city** (Lahore, Karachi, Islamabad, Rawalpindi… all 228 Zameen cities).
2. Optionally add **areas**: DHA Defence, Bahria Town, Johar Town, Gulberg… For a phase or block, write the path, e.g. `DHA Defence > DHA Phase 6`.
3. Pick a **property type**, **bedrooms**, a **price** range in rupees, a **size** range in marla/kanal/sq ft, and set **Max listings**.

Or paste **Zameen.com links**: any search page (the filters in the link are kept) or single property pages.

#### Input examples

5-bedroom houses for sale in DHA Defence, Lahore, newest first:

```json
{
  "purpose": "buy",
  "city": "Lahore",
  "locations": ["DHA Defence"],
  "propertyType": "houses",
  "bedrooms": ["5"],
  "sort": "newest",
  "maxItems": 100
}
```

5 to 10 marla residential plots in Bahria Town Lahore under 1 crore:

```json
{
  "purpose": "buy",
  "city": "Lahore",
  "locations": ["Bahria Town"],
  "propertyType": "residential-plots",
  "minArea": 5,
  "maxArea": 10,
  "areaUnit": "marla",
  "maxPrice": 10000000,
  "maxItems": 200
}
```

Flats for rent in Karachi with full details:

```json
{
  "purpose": "rent",
  "city": "Karachi",
  "propertyType": "flats",
  "maxPrice": 150000,
  "includeDetails": true,
  "maxItems": 50
}
```

### Output example

```json
{
  "id": "54029153",
  "url": "https://www.zameen.com/Property/dha_phase_8_dha_phase_8_-_ex_air_avenue_1_kanal_full_basement_used_house_for_sale_in_air_avenue_phase-8_dha-54029153-407-1.html",
  "title": "1 KANAL FULL BASEMENT USED HOUSE FOR SALE IN AIR AVENUE PHASE-8 DHA",
  "purpose": "buy",
  "propertyType": "House",
  "categoryGroup": "Homes",
  "price": 73000000,
  "priceText": "PKR 7.3 Crore",
  "currency": "PKR",
  "bedrooms": 5,
  "bathrooms": 6,
  "areaMarla": 20,
  "areaKanal": 1,
  "areaSqft": 4500,
  "areaSqm": 418.06,
  "city": "Lahore",
  "area": "DHA Defence",
  "subArea": "DHA Phase 8, DHA Phase 8 - Ex Air Avenue",
  "province": "Punjab",
  "latitude": 31.506264,
  "longitude": 74.441271,
  "isVerified": false,
  "product": "premium",
  "sellerType": "agency",
  "agency": {
    "id": "170221",
    "name": "Property Point Estate & Builders",
    "profileUrl": "https://www.zameen.com/Profile/Lahore-Property_Point_Estate_&_Builders-170221-1.html",
    "tier": "premium"
  },
  "contactName": "…",
  "phone": "+92301…",
  "imageUrl": "https://media.zameen.com/thumbnails/301387924-800x600.jpeg",
  "photoCount": 27,
  "createdAt": "2026-10-01T20:01:41.000Z",
  "page": 1,
  "position": 1,
  "scrapedAt": "2026-10-01T20:12:12.651Z"
}
```

With **Include property details** turned on, rows also have `description`, `amenities` (e.g. `{"group": "Rooms", "name": "Servant Quarters", "value": "2"}`), every photo in `images`, `verificationStatus`, `completionStatus`, `occupancyStatus` and `ownershipStatus`.

### Use cases

- **Price research**: price per marla by society, phase and block; rent vs sale in the same area.
- **Lead generation for service businesses**: the agencies active in each society, with their published business contacts.
- **Investment screening**: new plots and houses as they are posted (sort by newest and schedule the run daily).
- **Market monitoring**: track listing counts and asking prices over time for DHA, Bahria Town and other societies.

### FAQ

**Do I need a Zameen account, cookies or an API key?** No. The scraper reads the same public pages any visitor sees without logging in. There is nothing to set up.

**How many listings can I get?** Each result page has 25 listings and the scraper can read every page of a search. Set **Max listings** to 0 for no limit. Max listings counts all your searches together.

**My area wasn't found.** The status message lists the areas that have listings in that city. For a phase or block, write the path (`DHA Defence > DHA Phase 6`), or open the area on Zameen and paste the link.

**What about listings by private owners?** They are included, but the owner's name, phone and WhatsApp are left out, phone numbers and e-mails in their text are hidden, and the map position is rounded to about 1 km. Agency listings keep the agency's published business contacts.

**Which marla does it use?** The same as Zameen: 1 marla = 225 sq ft and 1 kanal = 20 marla. Every row has marla, kanal, sq ft and sq m, so you can convert to your local marla if you need to.

**Which proxy should I use?** Keep the default (Apify datacenter proxy). If Zameen starts refusing datacenter connections, the run switches to residential proxies by itself when your account has them.

**Is it legal to scrape Zameen.com?** This Actor only collects publicly available data: property listings that anyone can view on Zameen.com without an account. Collecting publicly available data is generally legal, but you're responsible for how you use it. Results can include agency agents' names and business contact details, and that counts as personal data. You must follow privacy laws such as GDPR, PIPEDA and CCPA (and Pakistan's own data protection rules), as well as Zameen's terms. If you're unsure, check with a lawyer. More on this: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?** No. Everything comes from pages Zameen shows to any visitor without logging in. It never uses a login, never touches private accounts, and never reaches password-protected areas.

# Actor input Schema

## `purpose` (type: `string`):

Properties for sale or for rent.

## `city` (type: `string`):

City in Pakistan, e.g. Lahore, Karachi, Islamabad, Rawalpindi, Faisalabad, Multan, Peshawar (all 228 Zameen cities work).

## `locations` (type: `array`):

Areas or societies in that city, e.g. DHA Defence, Bahria Town, Johar Town, Gulberg. Each area is a separate search. For a phase or block, write the path: "DHA Defence > DHA Phase 6". Leave empty for the whole city.

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

Type of property.

## `bedrooms` (type: `array`):

Only these bedroom counts (each is a separate search). Leave empty for any.

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

In rupees. 1 lakh = 100000, 1 crore = 10000000. Rent prices are monthly.

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

In rupees. 1 lakh = 100000, 1 crore = 10000000.

## `minArea` (type: `number`):

Property size in the unit below (e.g. 5 marla).

## `maxArea` (type: `number`):

Property size in the unit below (e.g. 1 kanal).

## `areaUnit` (type: `string`):

Unit for Min/Max size. Zameen's conversion: 1 marla = 225 sq ft, 1 kanal = 20 marla. Every row has marla, kanal, sq ft and sq m.

## `sort` (type: `string`):

Order of results.

## `verifiedOnly` (type: `boolean`):

Keep only listings Zameen marks as verified.

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

Search pages you opened on zameen.com (e.g. https://www.zameen.com/Homes/Lahore_DHA_Defence-9-1.html — filters in the link are kept, and the number before .html is the page to start from) or property pages (https://www.zameen.com/Property/….html).

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

Stop after this many listings in total (all searches together). 0 = no limit.

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

Each result page has 25 listings.

## `includeDetails` (type: `boolean`):

Also open each property page: full description, features and amenities (built year, parking, servant quarters, flooring…), every photo, verification, completion and occupancy status. One extra page per listing.

## `proxyConfiguration` (type: `object`):

Apify datacenter proxy is the default. If Zameen starts refusing datacenter IPs, the run switches to residential proxies automatically when your account has them.

## `maxConcurrency` (type: `integer`):

Pages loaded in parallel.

## Actor input object example

```json
{
  "purpose": "buy",
  "city": "Lahore",
  "locations": [
    "DHA Defence"
  ],
  "propertyType": "houses",
  "areaUnit": "marla",
  "sort": "relevance",
  "verifiedOnly": false,
  "maxItems": 50,
  "maxPagesPerSearch": 40,
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 4
}
```

# Actor output Schema

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

All scraped listings.

## `report` (type: `string`):

What each search found, pages read, and why the run stopped (RUN_REPORT).

## `run` (type: `string`):

Status and statistics for this run.

# 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 = {
    "purpose": "buy",
    "city": "Lahore",
    "locations": [
        "DHA Defence"
    ],
    "propertyType": "houses",
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/zameen-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 = {
    "purpose": "buy",
    "city": "Lahore",
    "locations": ["DHA Defence"],
    "propertyType": "houses",
    "maxItems": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/zameen-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 '{
  "purpose": "buy",
  "city": "Lahore",
  "locations": [
    "DHA Defence"
  ],
  "propertyType": "houses",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call yugenox/zameen-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yugenox/zameen-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/xmJg3FPRrEXNYjl1W/builds/6GX1TzbWLnhEfmfRd/openapi.json
