# Zolo Search API Documentation

<p><strong>Zolo Search API</strong> returns about 33 listings per page for sale or rent in a Canadian city or neighbourhood. Filter by price, minimum bedrooms and bathrooms and condo type, and sort by price, date or bedrooms. Every item satisfies the filters you sent. Items that do not match, such as sale promotions on a rent page, are removed and counted in <code>excluded_by_filters</code>. The page you ask for is the page you get, and a page past the end returns an empty list. <code>bedrooms</code> is the first number of a value like 2+1, the full text is in <code>bedrooms_text</code>. Rent searches support filters and sorting on page 1 only. Failed requests are not billed.</p>

- **Documentation:** [https://scrappa.co/docs/zolo-api/zolo_search](https://scrappa.co/docs/zolo-api/zolo_search)
- **API group:** Zolo API
- **Endpoint:** `GET https://scrappa.co/api/zolo/search`

## Authentication

Send your Scrappa API key in the `X-API-KEY` request header. Paid endpoints also support accountless x402 payments when called without an API key.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `location` | string | Yes | Required. A city or neighbourhood name. Use the search_area value from the autocomplete route. Example: Toronto. |
| `mode` | string | No | sale (default) or rent. |
| `min_price` | integer | No | Minimum price in CAD. For rent this is the monthly rent. |
| `max_price` | integer | No | Maximum price in CAD. Must be at least min_price. |
| `min_beds` | integer | No | Minimum number of bedrooms. A listing shown as 2+1 bedrooms counts as 2. |
| `min_baths` | integer | No | Minimum number of bathrooms. |
| `property_type` | string | No | condo. Sale searches only. |
| `sort` | string | No | recommended (default), price_desc, price_asc, newest, oldest or most_beds. |
| `page` | integer | No | One-based page number, 1 to 100 (default 1). Rent searches with filters or a sort work on page 1 only: a higher page answers 422. |

## Example response

```json
{
    "data": {
        "mode": "sale",
        "items": [
            {
                "id": "A1914043",
                "price": 500000,
                "status": "For Sale",
                "address": {
                    "city": "Toronto",
                    "region": "ON",
                    "street": "411-3845 Lake Shore Boulevard W",
                    "neighbourhood": "Long Branch"
                },
                "bedrooms": 3,
                "latitude": 43.590672,
                "bathrooms": 2,
                "brokerage": "Century 21 Miller Real Estate Ltd.",
                "longitude": -79.544205,
                "thumbnail": "https://photos.zolo.ca/411-3845-lake-shore-boulevard-west-toronto-W13748688-1-p.jpg?2026-09-05+10%3A57%3A08",
                "mls_number": "W13748688",
                "price_text": "$500,000",
                "size_range": "1000-1199",
                "listed_text": "50 days",
                "listing_url": "https://www.zolo.ca/toronto-real-estate/3845-lake-shore-boulevard-west/411",
                "photo_count": 33,
                "listing_path": "/toronto-real-estate/3845-lake-shore-boulevard-west/411",
                "bedrooms_text": "3",
                "price_reduced": false,
                "property_type": "Condo",
                "bathrooms_text": "2",
                "days_on_market": 50
            }
        ],
        "location": "Toronto",
        "pagination": {
            "page": 1,
            "per_page": 33,
            "total_items": 345,
            "total_pages": 11
        },
        "applied_filters": {
            "sort": "price_asc",
            "min_beds": 3,
            "max_price": 700000,
            "min_price": 500000
        },
        "excluded_by_filters": 0
    },
    "meta": {
        "billable": true,
        "endpoint_family": "search"
    },
    "success": true
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 422 | Validation Error | A parameter is missing or invalid. This response is not billable. |
| 422 | Rent filters past page 1 | Rent filters and sorting cannot be applied past page 1. Remove the filters to page through rent results. This response is not billable. |
| 503 | Upstream Unavailable | Zolo could not be reached, or returned data that does not match the request. This response is not billable and is retryable. |

## More Scrappa resources

- [API documentation](https://scrappa.co/docs)
- [Full LLM-readable API reference](https://scrappa.co/llms-full.txt)
- [OpenAPI specification](https://scrappa.co/docs/api.json)
- [Pricing](https://scrappa.co/pricing)
