# Zameen Scraper (Cheap) (`data_api/zameen-scraper-cheap`) Actor

Zameen property scraper that extracts listing prices, coordinates, images, and verified contact numbers, so real estate investors and brokers can track local market trends without getting blocked.

- **URL**: https://apify.com/data\_api/zameen-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 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/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

## Zameen Property Scraper

![Zameen Property Scraper](cover.jpg)

Pulling property data off Zameen.com by hand is slow work: open each listing, copy the price, the area, the agent's number, the location, then do it again for the next one. This scraper skips all of that. Paste a Zameen.com search URL and every listing on it comes back as a tidy row, with the price, size, location, agent contact, and coordinates already split into their own fields and ready for a spreadsheet or a model. It pages through the results for you, it's cheap to run, and you only pay for what you scrape.

### What you get

Each listing turns into one row. Fields Zameen does not publish for a given property come back empty rather than guessed, so your columns stay predictable. Four groups of data per listing:

- **Listing basics** — `listingId`, `listingState`, `dealPurpose`, `priceValue`, `listingTitle`, `listingTitleUrdu`, `referenceId`, `urlSlug`, `listingUrl`
- **Location and size** — `locationParts`, `locationLine`, `categoryLine`, `bedroomCount`, `bathroomCount`, `areaSqFt`, `areaRawValue`, `lat`, `lng`
- **Media and dates** — `coverImage`, `photoTotal`, `videoTotal`, `publishedDate`, `updatedDate`, `descriptionSnippet`
- **Agent and agency** — `contactPhone`, `whatsappContact`, `phoneList`, `advertiserName`, `brokerName`, `brokerLogo`, `brokerUrl`, `verifiedListing`, `collectedAt`

### Quick start

1. Open Zameen.com, set your filters (city, category, price, area), and copy the URL from the address bar.
2. Hit **Try for free** and paste that URL into **Zameen search URLs**.
3. Set a **Results limit** to control how many listings you pull from each URL.
4. Press **Start**, then export the results as JSON, CSV, Excel, or XML.

![How it works](how-it-works.jpg)

### Use cases

- **Price research** — track asking prices per square foot across Lahore, Karachi, or Islamabad and spot where value sits
- **Lead lists for brokers** — build a contact sheet of active agents and agencies, WhatsApp numbers included
- **Listing sync** — feed fresh Zameen listings into your own portal or CRM instead of copying them across
- **Investment screening** — gather for-sale or rental stock for a neighbourhood and score it against your own criteria
- **Agency benchmarking** — see which agencies list what, where, and at what price
- **Market and policy research** — assemble a structured dataset on Pakistan's housing market for analysis or reporting

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchUrls` | array of strings | Yes | Zameen.com search or category URLs to scrape. Each one is crawled independently and paginated automatically. Prefilled with a Karachi houses search. |
| `resultsLimit` | integer | No | How many listings to pull from each search URL. Default `50`; accepts `1` to `1000`. |
| `timeoutSeconds` | integer | No | Seconds to wait on each request before it times out. Default `45`; raise it on a slow connection. |

#### Example input

```json
{
    "searchUrls": [
        "https://www.zameen.com/Houses/Karachi-2-1.html"
    ],
    "resultsLimit": 50,
    "timeoutSeconds": 45
}
```

### Output

Every listing on the search results becomes one row, paginated automatically up to your limit. Values Zameen does not expose for a property come back empty rather than invented, so the dataset stays rectangular.

#### Example output

```json
{
    "listingId": 115919709,
    "listingState": "active",
    "dealPurpose": "for-sale",
    "priceValue": 80000000,
    "listingTitle": "32 Marla Prime Location House For Sale in AWT Phase 1",
    "listingTitleUrdu": "اے ڈبلیو ٹی فیز 1 میں 7 کمروں کا مکان برائے فروخت۔",
    "referenceId": "54204044",
    "urlSlug": "awt_army_welfare_trust_awt_phase_1_32_marla_prime_location_house_for_sale_in_awt_phase_1-54204044-3580-1",
    "listingUrl": "https://www.zameen.com/Property/awt_army_welfare_trust_awt_phase_1_32_marla_prime_location_house_for_sale_in_awt_phase_1-54204044-3580-1.html",
    "locationParts": [
        "Pakistan",
        "Punjab",
        "Lahore",
        "Raiwind Road",
        "AWT Army Welfare Trust",
        "AWT Phase 1"
    ],
    "locationLine": "Pakistan, Punjab, Lahore, Raiwind Road, AWT Army Welfare Trust, AWT Phase 1",
    "categoryLine": "Homes > Houses",
    "publishedDate": "2026-06-11",
    "updatedDate": "2026-06-11",
    "bedroomCount": 7,
    "bathroomCount": 7,
    "areaSqFt": 7200.0,
    "areaRawValue": 668.90,
    "coverImage": "https://cdn.zameen.com/image/297757206/561caa6589e84fad8162903742f0f83f",
    "photoTotal": 17,
    "videoTotal": 0,
    "contactPhone": "+923244844786",
    "whatsappContact": "+923225555835",
    "phoneList": ["+923244844786"],
    "advertiserName": "Muhammad Athar",
    "brokerName": "Bin Noor Associates & Builders",
    "brokerLogo": "https://cdn.zameen.com/image/20475110/aba27478ffff4a658e7964757d0da7ff",
    "brokerUrl": "https://www.zameen.com/Agency/Lahore-Bin_Noor_Associates_&_Builders-153671-1.html",
    "verifiedListing": false,
    "descriptionSnippet": "32 Marla prime location house for sale in AWT Phase 1. 7 master bedrooms, 7+ washrooms.",
    "lat": 31.404858,
    "lng": 74.204063,
    "collectedAt": "2026-06-29T12:00:00.000000+00:00"
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | integer | Zameen's own numeric identifier for the listing |
| `listingState` | string | Current state of the listing, such as active |
| `dealPurpose` | string | for-sale or for-rent |
| `priceValue` | integer | Asking price in Pakistani Rupees (PKR) |
| `listingTitle` | string | Headline of the listing in English |
| `listingTitleUrdu` | string | Headline of the listing in Urdu script |
| `referenceId` | string | Alphanumeric reference code shown to sellers |
| `urlSlug` | string | Slug Zameen uses in the listing page address |
| `listingUrl` | string | Direct link to the full listing page |
| `locationParts` | array | Location as an ordered list, country down to sub-locality |
| `locationLine` | string | Location pieces joined into one readable string |
| `categoryLine` | string | Category breadcrumb, e.g. Homes > Houses |
| `publishedDate` | string | Date the listing first went live |
| `updatedDate` | string | Date the listing was last refreshed |
| `bedroomCount` | integer | Number of bedrooms (empty for plots and commercial) |
| `bathroomCount` | integer | Number of bathrooms (empty for plots and commercial) |
| `areaSqFt` | number | Floor area converted to square feet |
| `areaRawValue` | number | Area figure exactly as Zameen stores it |
| `coverImage` | string | Link to the main listing photo |
| `photoTotal` | integer | Number of photos attached to the listing |
| `videoTotal` | integer | Number of videos attached to the listing |
| `contactPhone` | string | Main phone number for the advertiser |
| `whatsappContact` | string | Advertiser's WhatsApp number, when published |
| `phoneList` | array | Every contact number tied to the listing |
| `advertiserName` | string | Name of the agent or person posting the listing |
| `brokerName` | string | Name of the agency behind the listing |
| `brokerLogo` | string | Link to the agency's logo image |
| `brokerUrl` | string | Link to the agency's page on Zameen |
| `verifiedListing` | boolean | True when Zameen has verified the property |
| `descriptionSnippet` | string | Opening portion of the listing's description |
| `lat` | number | Latitude of the property |
| `lng` | number | Longitude of the property |
| `collectedAt` | string | ISO 8601 timestamp of when the row was captured |

### Tips for best results

- **Filter on Zameen.com first.** A tighter search URL (city, category, price band) gives you a cleaner, more relevant dataset and fewer rows to sift through.
- **Use `resultsLimit` for test runs.** Start with 20 to 50 to confirm the output fits your pipeline, then raise it for the full pull.
- **Each URL has its own limit.** `resultsLimit` applies per search URL, not across the whole run, so two URLs at a limit of 50 can return up to 100 rows.
- **Some fields are sparse.** Sellers can hide phone numbers, and plots carry no bedroom or bathroom counts, so those fields come back empty on certain listings while the rest stay filled.
- **Raise `timeoutSeconds`** if you see timeouts on large result sets or a slow connection.

### How can I use Zameen property data?

**How can I use the Zameen Property Scraper to research house prices in Pakistan?**
Paste a Zameen.com search URL for your target city and run it. Each row carries `priceValue`, `areaSqFt`, `locationLine`, and `publishedDate`, so you can work out price per square foot, compare areas, and watch how asking prices move over time.

**How can I pull agent and agency contact details from Zameen?**
Every listing row includes `contactPhone`, `whatsappContact`, `phoneList`, `advertiserName`, and `brokerName`. Scrape a category you care about, then filter by `verifiedListing` or `brokerName` to build a focused outreach list of active agents and agencies.

**How can I build a Pakistan real estate dataset for investment screening?**
Add one or more Zameen.com search URLs, set `resultsLimit` to the volume you need, and export to CSV or Excel. You get a structured property database (price, area, location, coordinates, agent) you can score against your own buy or rent criteria.

**How can I scrape rental listings from Zameen instead of sales?**
Apply the "For Rent" filter on Zameen.com before copying the URL. The scraper follows whatever the URL targets, and `dealPurpose` on each row tells for-rent and for-sale listings apart.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `searchUrls` (type: `array`):

Paste one or more Zameen.com search or category URLs, for example https://www.zameen.com/Houses/Karachi-2-1.html. Each URL is crawled on its own and paginated automatically.

## `resultsLimit` (type: `integer`):

How many listings to pull from each search URL before moving on. Keep it low for quick test runs or raise it for a full sweep.

## `timeoutSeconds` (type: `integer`):

Seconds to wait on each request before it gives up. Bump this up if you hit timeouts on a slow connection.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.zameen.com/Houses/Karachi-2-1.html"
  ],
  "resultsLimit": 25,
  "timeoutSeconds": 45
}
```

# 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 = {
    "searchUrls": [
        "https://www.zameen.com/Houses/Karachi-2-1.html"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/zameen-scraper-cheap").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 = { "searchUrls": ["https://www.zameen.com/Houses/Karachi-2-1.html"] }

# Run the Actor and wait for it to finish
run = client.actor("data_api/zameen-scraper-cheap").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 '{
  "searchUrls": [
    "https://www.zameen.com/Houses/Karachi-2-1.html"
  ]
}' |
apify call data_api/zameen-scraper-cheap --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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