# OneRoof.co.nz Property Scraper (`shahidirfan/oneroof-co-nz-property-scraper`) Actor

Scrape live property listings from New Zealand's largest real estate portal. Extract prices, addresses, property details, agent info & photos. Ideal for real estate analytics, investment research, market intelligence, competitive monitoring & proptech datasets. Production-ready data.

- **URL**: https://apify.com/shahidirfan/oneroof-co-nz-property-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Real estate, Developer tools, Automation
- **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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## OneRoof Property Scraper

Extract property listings from OneRoof.co.nz, New Zealand's leading real estate portal. Collect detailed property data including price, bedrooms, bathrooms, address, agent information, images, and valuation estimates at scale. Ideal for market research, investment analysis, and property intelligence.

### Features

- **Complete Property Data** - Extract price, beds, baths, parking, land/floor area, property type, and listing reference for every property
- **High-Resolution Images** - Collect all property photos with full-resolution CDN URLs, organized for each listing
- **Location Intelligence** - Get structured address components (street, suburb, district, region) plus GPS coordinates
- **Agent and Agency Details** - Capture listing agent name, phone, photo, and real estate agency information
- **Pagination Support** - Automatically navigate through search results to reach your desired data volume
- **Auction and Open Home Times** - Extract auction dates and open home schedules when available
- **Automated Valuation Model (AVM)** - Collect OneRoof's estimated value range, RV (rateable value), and confidence scores

### Use Cases

#### Market Research

Track property prices and trends across New Zealand regions. Analyze pricing by suburb, property type, or size to understand market conditions and identify opportunities.

#### Investment Analysis

Build comprehensive datasets for property investment decisions. Compare valuations across different areas, track auction activity, and monitor listing volumes to find the best opportunities.

#### Competitor Monitoring

Real estate agencies and developers can monitor competitor listings, track agent activity, and analyze market positioning across different New Zealand regions and property categories.

#### Academic Research

Researchers studying housing markets, urban development, or regional economics can collect structured property data for statistical analysis and modeling.

---

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `startUrl` | String | No | NZ-wide search | Full OneRoof search URL to scrape. Supports any region, suburb, or listing type |
| `results_wanted` | Integer | No | `20` | Maximum number of property listings to collect |
| `max_pages` | Integer | No | `10` | Safety cap on the number of search result pages to visit |
| `proxyConfiguration` | Object | No | - | Apify Proxy settings. Residential proxies recommended for NZ sites |

---

### Output Data

Each item in the dataset contains the following fields:

| Field | Type | Description |
|-------|------|-------------|
| `id` | Number | OneRoof property ID |
| `uid` | String | Unique property slug identifier |
| `url` | String | Direct link to the property page |
| `address` | String | Full formatted address |
| `street` | String | Street address |
| `suburb` | String | Suburb name |
| `district` | String | City or district name |
| `region` | String | Region (e.g. Auckland, Waikato) |
| `price_display` | String | Price or auction/Deadline text |
| `price_detail` | String | Additional price information |
| `bedrooms` | Number | Number of bedrooms |
| `bathrooms` | Number | Number of bathrooms |
| `carspaces` | Number | Number of parking spaces |
| `land_area_sqm` | Number | Land area in square metres |
| `floor_area_sqm` | Number | Floor area in square metres |
| `property_type` | String | Type (e.g. House, Townhouse, Apartment) |
| `listing_type` | String | Listing category (e.g. Residential for sale) |
| `listing_ref` | String | Agent listing reference code |
| `latitude` | Number | GPS latitude coordinate |
| `longitude` | Number | GPS longitude coordinate |
| `main_image` | String | Primary property photo URL |
| `images_count` | Number | Total number of images available |
| `images` | Array | Array of all property image URLs |
| `agent_name` | String | Listing agent name |
| `agent_phone` | String | Listing agent phone number |
| `agent_image` | String | Agent profile photo URL |
| `office_name` | String | Real estate agency name |
| `office_logo` | String | Agency logo URL |
| `open_homes` | Array | Open home schedule times |
| `auction_start` | String | Auction start timestamp |
| `auction_end` | String | Auction end timestamp |
| `auction_address` | String | Auction venue address |
| `rv` | String | Rateable value (CV) |
| `building_age` | String | Year built |
| `status` | Number | Listing status code |
| `listing_date` | String | Date the property was listed |
| `teaser` | String | Brief agent description or headline |
| `brief` | String | Extended property description |
| `avm_value` | String | Automated valuation amount |
| `avm_low` | String | AVM low estimate |
| `avm_high` | String | AVM high estimate |
| `avm_confidence` | String | AVM confidence level |

---

### Usage Examples

#### Basic NZ-Wide Extraction

Extract the latest properties from across all of New Zealand:

```json
{
    "startUrl": "https://www.oneroof.co.nz/search/houses-for-sale/region_all-new-zealand-1_page_1",
    "results_wanted": 50
}
````

#### Auckland Region Search

Target a specific region with full property details:

```json
{
    "startUrl": "https://www.oneroof.co.nz/search/houses-for-sale/region_auckland-35_page_1",
    "results_wanted": 100,
    "max_pages": 5
}
```

#### Rentals in Wellington

Extract rental properties from the Wellington region:

```json
{
    "startUrl": "https://www.oneroof.co.nz/search/rentals/region_wellington-42_page_1",
    "results_wanted": 30,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

***

### Sample Output

```json
{
    "id": 2486812,
    "uid": "fQPV8",
    "url": "https://www.oneroof.co.nz/property/auckland/new-lynn/7-1-ambrico-place/fQPV8",
    "address": "7/1 Ambrico Place, New Lynn, Waitakere City, Auckland",
    "street": "7/1 Ambrico Place",
    "suburb": "New Lynn",
    "district": "Waitakere City",
    "region": "Auckland",
    "price_display": "Deadline sale closes 29 Jul 2026 16:00",
    "bedrooms": 3,
    "bathrooms": 1,
    "carspaces": 2,
    "property_type": "Townhouse",
    "listing_type": "Residential for sale",
    "latitude": -36.911911,
    "longitude": 174.681915,
    "main_image": "https://s.oneroof.co.nz/image/58/f8/58f82162de13f4634f8d4ee0d42fe635.jpg?x-oss-process=image/quality,q_80",
    "images_count": 9,
    "images": [
        "https://s.oneroof.co.nz/image/58/f8/58f82162de13f4634f8d4ee0d42fe635.jpg?x-oss-process=image/quality,q_80",
        "https://s.oneroof.co.nz/image/05/25/05253f78a3af1219abf63dc5d142d1c4.jpg?x-oss-process=image/quality,q_80"
    ],
    "rv": "$710,000",
    "building_age": "1997",
    "teaser": "So Close to LynnMall! Keen Vendor!"
}
```

***

### Tips for Best Results

#### Choose the Right Search URL

Start with a broad NZ-wide search to see available properties, then narrow down by region, suburb, or listing type. OneRoof search URLs follow a predictable pattern that you can modify in your browser before copying.

#### Set Realistic Result Limits

Start with 20-50 results for testing purposes. When you are confident the configuration works, increase to your desired volume. The actor handles pagination automatically.

#### Use Residential Proxies

For large-scale extractions or repeated runs, enable residential proxies through the proxy configuration. This helps maintain reliable access to OneRoof's search results.

#### Check Your URLs

Make sure your OneRoof search URL is valid and returns results in a regular browser before running the actor. Invalid or empty search pages will produce no output.

***

### Integrations

Connect your property data with:

- **Google Sheets** - Export listings for collaborative analysis
- **Airtable** - Build searchable property databases
- **Slack** - Get alerts for new listings matching your criteria
- **Webhooks** - Send property data to custom endpoints
- **Make** - Create automated data workflows
- **Zapier** - Trigger actions when new data arrives

#### Export Formats

- **JSON** - For developers and API integration
- **CSV** - For spreadsheet analysis and reporting
- **Excel** - For business reporting and charts
- **XML** - For system integration

***

### Frequently Asked Questions

#### How many properties can I collect?

You can collect as many properties as are available through OneRoof's search results. The practical limit depends on the search scope and your usage level. Start with smaller result sets and increase as needed.

#### Can I scrape specific suburbs or regions?

Yes. Use the OneRoof search page to navigate to your target area, then copy the resulting URL into the `startUrl` parameter. The actor will follow the same pagination pattern.

#### Does this extract rental listings too?

Yes. Use a rental search URL from OneRoof (e.g., `/search/rentals/region_auckland-35_page_1`) and the actor will extract all available rental property data.

#### What if some fields are missing?

Some fields such as agent details, auction information, or AVM data may be empty if the source listing does not provide them. The actor only includes fields that have values.

#### How long does a run take?

A typical run collecting 100 properties takes 1-3 minutes depending on network speed and OneRoof's response times. The actor includes delays between page requests to be respectful to the website.

#### Can I schedule regular runs?

Yes. Use Apify's built-in scheduler to run this actor daily, weekly, or at any custom interval. Great for monitoring new listings or tracking price changes over time.

***

### Support

For issues or feature requests, contact support through the Apify Console.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [API Reference](https://docs.apify.com/api/v2)
- [Scheduling Runs](https://docs.apify.com/schedules)

***

### Legal Notice

This actor is designed for legitimate data collection purposes. Users are responsible for ensuring compliance with OneRoof's terms of service and applicable New Zealand laws. Use data responsibly and respect rate limits.

# Actor input Schema

## `startUrl` (type: `string`):

Full OneRoof search URL to scrape. Example: https://www.oneroof.co.nz/search/houses-for-sale/auckland-35\_page\_1

## `results_wanted` (type: `integer`):

Maximum number of property listings to collect.

## `max_pages` (type: `integer`):

Safety cap on the number of search result pages to visit.

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

Use Apify Proxy (residential recommended for NZ sites).

## Actor input object example

```json
{
  "startUrl": "https://www.oneroof.co.nz/search/houses-for-sale/region_all-new-zealand-1_page_1",
  "results_wanted": 20,
  "max_pages": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrl": "https://www.oneroof.co.nz/search/houses-for-sale/region_all-new-zealand-1_page_1",
    "results_wanted": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/oneroof-co-nz-property-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 = {
    "startUrl": "https://www.oneroof.co.nz/search/houses-for-sale/region_all-new-zealand-1_page_1",
    "results_wanted": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/oneroof-co-nz-property-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 '{
  "startUrl": "https://www.oneroof.co.nz/search/houses-for-sale/region_all-new-zealand-1_page_1",
  "results_wanted": 20
}' |
apify call shahidirfan/oneroof-co-nz-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=shahidirfan/oneroof-co-nz-property-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "OneRoof.co.nz Property Scraper",
        "description": "Scrape live property listings from New Zealand's largest real estate portal. Extract prices, addresses, property details, agent info & photos. Ideal for real estate analytics, investment research, market intelligence, competitive monitoring & proptech datasets. Production-ready data.",
        "version": "0.0",
        "x-build-id": "TKKgq6IXnwtltcILN"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~oneroof-co-nz-property-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-oneroof-co-nz-property-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/shahidirfan~oneroof-co-nz-property-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-oneroof-co-nz-property-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/shahidirfan~oneroof-co-nz-property-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-oneroof-co-nz-property-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrl": {
                        "title": "OneRoof Search URL",
                        "type": "string",
                        "description": "Full OneRoof search URL to scrape. Example: https://www.oneroof.co.nz/search/houses-for-sale/auckland-35_page_1"
                    },
                    "results_wanted": {
                        "title": "Maximum properties",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of property listings to collect.",
                        "default": 20
                    },
                    "max_pages": {
                        "title": "Maximum pages",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Safety cap on the number of search result pages to visit.",
                        "default": 10
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Use Apify Proxy (residential recommended for NZ sites).",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
