# Zealty Property Search Scraper (`alexist/zealty-property-search-scraper`) Actor

Scrape comprehensive property listings from Zealty.ca with pricing, agent info, MLS numbers, and 35+ fields. Perfect for real estate investors, brokers, market analysts, and property researchers building datasets.

- **URL**: https://apify.com/alexist/zealty-property-search-scraper.md
- **Developed by:** [Alex](https://apify.com/alexist) (community)
- **Categories:** Automation, Developer tools, Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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

## Zealty Property Scraper: Extract Canadian Real Estate Data Fast

***

### What Is Zealty.ca?

Zealty.ca is a leading Canadian real estate search platform featuring property listings across provinces and metropolitan areas. It aggregates MLS data, pricing information, and property details for residential and commercial properties throughout Canada. For real estate professionals and market researchers, manually collecting this data is inefficient — the **Zealty Property Scraper** automates extraction, delivering structured datasets in minutes.

***

### Overview

The **Zealty Property Scraper** extracts detailed property listings from Zealty.ca search pages, converting real estate data into machine-readable records. It is ideal for:

- **Real estate investors** tracking market trends and comparable properties
- **Brokers and agents** building prospect lists and competitive intelligence
- **Market researchers** analyzing price movements and inventory by region
- **Property data platforms** aggregating Canadian listings at scale
- **Financial analysts** studying real estate investment patterns

Key features include flexible URL targeting, configurable item limits, and error resilience through `ignore_url_failures`.

***

### Input Format

The scraper accepts a JSON configuration for targeted property collection:

```json
{
    "urls": [
        "https://www.zealty.ca/region/bc/metro/page/2"
    ],
    "max_items_per_url": 200,
    "ignore_url_failures": true
}
```

| Field | Description |
|---|---|
| `urls` | Array of Zealty property list page URLs (pagination supported) |
| `max_items_per_url` | Maximum properties to extract per URL (e.g., `200`) |
| `ignore_url_failures` | If `true`, continues scraping if some URLs fail instead of halting |

> **Best Practice:** Use full pagination URLs (e.g., `/page/2`, `/page/3`) to control data volume and avoid timeouts on large result sets.

***

### Output Format

**Sample output**

```json
{
  "listing_price": 1390000,
  "listing_price_prev": null,
  "listing_price_orig": 1390000,
  "street_address": "27810 110 Avenue",
  "city": "Maple Ridge",
  "area_name": "Whonnock",
  "listing_agent": "Amir Miri PREC*",
  "listing_brokerage": "Royal Pacific Realty Corp.",
  "listing_date": "$D2026-07-21T07:00:00.000Z",
  "province": "BC",
  "postal_code": "V2W 1P6",
  "bedroom_count": 4,
  "bathroom_count": 3,
  "house_size": 2196,
  "lot_size": 87120,
  "type": "House",
  "property_class_code": 0,
  "mls_number": "R3149236",
  "status": "A",
  "sold_price": 1282500,
  "sold_date": "$D2021-08-02T07:00:00.000Z",
  "entry_date": "$D2026-07-22T07:00:00.000Z",
  "latitude": 49.20077,
  "longitude": -122.45156,
  "access": "2026-07-22T23:38:03.900Z",
  "open_house": "",
  "lot_boundary": "49.20121,-122.45212,49.20121,-122.45099,49.20033,-122.451,49.20033,-122.45152,49.20033,-122.45213,49.20121,-122.45212",
  "popularity": 0,
  "additional_rent": 0,
  "basic_rent": 0,
  "sale_type": "",
  "image_date": "2026-07-22T23:42:19.933Z",
  "images": [
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/83dcefb7.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/1ad5be0d.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/6dd28e9b.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/f3b61b38.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/84b12bae.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/1db87a14.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/6abf4a82.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/fa005713.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/8d076785.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/a15d25e1.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/d65a1577.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/4f5344cd.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/3854745b.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/a630e1f8.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/d137d16e.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/483e80d4.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/3f39b042.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/af86add3.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/d8819d45.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/8a707622.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/fd7746b4.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/647e170e.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/13792798.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/8d1db23b.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/fa1a82ad.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/6313d317.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/1414e381.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/84abfe10.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/f3acce86.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/936b4763.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/e46c77f5.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/7d65264f.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/a6216d9.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/9406837a.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/e301b3ec.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/7a08e256.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/d0fd2c0.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/9db0cf51.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/eab7ffc7.jpeg?v=2026-07-22T23%3A42%3A19.933Z",
    "https://dvvjkgh94f2v6.cloudfront.net/8ab08887/263170863/dc2ad1a4.jpeg?v=2026-07-22T23%3A42%3A19.933Z"
  ],
  "sort_value": 0,
  "house_age": 51,
  "description": "THE ACREAGE LIFESTYLE YOU'VE BEEN WAITING FOR. Nestled on 2 flat, usable acres on a quiet no-thru street, this private property offers the perfect blend of country living & convenience, just minutes from town. Extensive improvements have already been completed, including land clearing, an extended driveway & boulevard enhancements. The updated home features a self-contained suite, ideal for extended family, guests, or mortgage helper income. Enjoy the large partially covered deck overlooking the sun-filled south-facing yard, with ample space for entertaining, gardening, recreation, or simply relaxing outdoors. The impressive barn provides exceptional flexibility for parking, workshop space, storage, hobbies, equipment, or small-scale farming. Whether you envision a hobby farm, chickens,",
  "from_url": "https://www.zealty.ca/region/bc/metro/page/2"
}
```

Each scraped property returns a rich dataset with 35+ fields covering pricing, location, property details, and transaction history:

#### Pricing & Financial Data

| Field | Meaning |
|---|---|
| `Listing Price` | Current asking price listed on Zealty |
| `Previous Listing Price` | Prior asking price if re-listed |
| `Original Listing Price` | Initial asking price when first posted |
| `Sold Price` | Final sale price (for sold properties) |
| `Basic Rent` | Base rent (for rental properties) |
| `Additional Rent` | Extra monthly fees or utilities |
| `Sale Type` | Type of sale (e.g., resale, new, foreclosure) |

#### Location & Address

| Field | Meaning |
|---|---|
| `Street Address` | Full street address of the property |
| `City` | City or municipality |
| `Area Name` | Neighborhood or district name |
| `Province` | Canadian province (e.g., BC, ON, AB) |
| `Postal Code` | Canadian postal code |
| `Latitude` | Geographic latitude coordinate |
| `Longitude` | Geographic longitude coordinate |

#### Property Characteristics

| Field | Meaning |
|---|---|
| `Bedroom Count` | Number of bedrooms |
| `Bathroom Count` | Number of bathrooms |
| `House Size` | Living area in square feet or meters |
| `Lot Size` | Total land size of the property |
| `House Age` | Year built or age of the structure |
| `Type` | Property type (e.g., house, condo, townhouse, commercial) |
| `Property Class Code` | MLS property classification code |
| `Lot Boundary` | Description of lot boundaries or shape |

#### Listing & Transaction Details

| Field | Meaning |
|---|---|
| `MLS Number` | Multiple Listing Service identification number |
| `Listing Agent` | Name of the agent listing the property |
| `Listing Brokerage` | Brokerage firm representing the property |
| `Listing Date` | When the property was listed |
| `Entry Date` | Date entered into the MLS system |
| `Sold Date` | Date the property closed (if sold) |
| `Status` | Current status (active, sold, expired, withdrawn) |
| `Open House` | Scheduled open house dates and times |

#### Media & Additional Info

| Field | Meaning |
|---|---|
| `Images` | Array of property photo URLs |
| `Image Date` | Date photos were taken |
| `Description` | Full property description and features |
| `Popularity` | Popularity metric or view count |
| `Access` | Type of property access or entry |
| `Sort Value` | Internal sorting value for results ranking |

***

### How to Use

1. **Navigate Zealty.ca** — Visit zealty.ca, select your region (e.g., BC Metro), and navigate to search results pages.
2. **Copy page URLs** — Copy the full URL including pagination (e.g., `/page/2`).
3. **Paste into input** — Add URLs to the `urls` array in your scraper configuration.
4. **Set item limit** — Adjust `max_items_per_url` (e.g., 50–200 depending on data needs).
5. **Enable resilience** — Set `ignore_url_failures: true` for bulk runs.
6. **Execute & export** — Run the scraper and download results as JSON, CSV, or Excel.

**Troubleshooting:**

- If no data is extracted, verify the URL points to a listings page, not a single property detail page.
- Use pagination URLs (`/page/1`, `/page/2`, etc.) rather than dynamic filters for consistent results.
- High `max_items_per_url` values may slow runs; start with 100–150 and adjust.

***

### Use Cases & Business Value

- **Investment analysis:** Build datasets of comparable properties and price trends by region
- **Market intelligence:** Track sold properties, listing times, and price reductions
- **Broker operations:** Auto-generate prospect lists and competitive market analyses
- **Data enrichment:** Feed property data into CRM, BI platforms, or custom dashboards
- **Academic research:** Study Canadian real estate market dynamics and affordability

The Zealty Property Scraper eliminates weeks of manual data entry, delivering verified, structured property records ready for analysis, visualization, and integration.

***

### Conclusion

The **Zealty Property Scraper** is an essential tool for anyone serious about Canadian real estate data. With 35+ output fields covering pricing, location, agents, and transaction details, it transforms search pages into actionable intelligence. Whether you're an investor, broker, or analyst, this scraper accelerates your workflow and unlocks insights impossible to gather manually.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the property list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.zealty.ca/region/bc/metro/page/2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 100
}
```

# 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 = {
    "urls": [
        "https://www.zealty.ca/region/bc/metro/page/2"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("alexist/zealty-property-search-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 = {
    "urls": ["https://www.zealty.ca/region/bc/metro/page/2"],
    "ignore_url_failures": True,
    "max_items_per_url": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("alexist/zealty-property-search-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 '{
  "urls": [
    "https://www.zealty.ca/region/bc/metro/page/2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 100
}' |
apify call alexist/zealty-property-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,alexist/zealty-property-search-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/drIEPzWfBUXgGRYyc/builds/ZWqP0s2VcpatIo6i6/openapi.json
