{
  "openapi": "3.0.1",
  "info": {
    "title": "RealestateCo NZ $1💰 Powerful Filters + Deep Search",
    "description": "From $1/1K. Search and extract all real estate properties for sale, rent, and sold across New Zealand from realestate.co.nz.",
    "version": "1.0",
    "x-build-id": "nfA1KEg2y51ir2mhN"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~realestate-co-nz-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-realestate-co-nz-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/abotapi~realestate-co-nz-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-realestate-co-nz-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/abotapi~realestate-co-nz-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-realestate-co-nz-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "1. Search mode",
            "enum": [
              "location",
              "url"
            ],
            "type": "string",
            "description": "Location mode = build URLs from region/district/suburb + filters below. URL mode = paste realestate.co.nz search result page URLs directly.",
            "default": "location"
          },
          "locations": {
            "title": "Locations to search",
            "type": "array",
            "description": "Locations to search. Region, district, and suburb are all optional - provide whichever you have. Empty entries are dropped at runtime.",
            "items": {
              "type": "object",
              "properties": {
                "region": {
                  "title": "Region",
                  "type": "string",
                  "description": "New Zealand region",
                  "enum": [
                    "Auckland",
                    "Bay of Plenty",
                    "Canterbury",
                    "Central North Island",
                    "Central Otago / Lakes District",
                    "Coromandel",
                    "Gisborne",
                    "Hawkes Bay",
                    "Manawatu / Whanganui",
                    "Marlborough",
                    "Nelson & Bays",
                    "Northland",
                    "Otago",
                    "Pacific Islands",
                    "Southland",
                    "Taranaki",
                    "Waikato",
                    "Wairarapa",
                    "Wellington",
                    "West Coast"
                  ],
                  "editor": "select"
                },
                "district": {
                  "title": "District (Optional)",
                  "type": "string",
                  "description": "District name, e.g. Auckland City, Manukau City, Wellington City. Leave empty for region-wide search.",
                  "editor": "textfield"
                },
                "suburb": {
                  "title": "Suburb (Optional)",
                  "type": "string",
                  "description": "Suburb name, e.g. Ponsonby, Papatoetoe, Thorndon. Leave empty for wider search.",
                  "editor": "textfield"
                }
              }
            }
          },
          "listingType": {
            "title": "Listing Type",
            "enum": [
              "buy",
              "rent",
              "sold",
              "new_builds"
            ],
            "type": "string",
            "description": "Type of property listings to scrape. In URL mode this is auto-detected from the URL. Sold returns historical sales data (sale prices, council valuations, estimated values). New Builds filters for new construction only.",
            "default": "buy"
          },
          "propertyTypes": {
            "title": "Property Types (Optional)",
            "type": "array",
            "description": "Filter by property type. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "house",
                "apartment",
                "townhouse",
                "unit",
                "section",
                "lifestyle_property",
                "lifestyle_section",
                "home_and_income",
                "studio",
                "retirement_living",
                "multiple_properties",
                "boat_shed",
                "carpark",
                "other"
              ],
              "enumTitles": [
                "House",
                "Apartment",
                "Townhouse",
                "Unit",
                "Section",
                "Lifestyle Property",
                "Lifestyle Section",
                "Home & Income",
                "Studio",
                "Retirement Living",
                "Multiple Properties",
                "Boat Shed",
                "Carpark",
                "Other"
              ]
            }
          },
          "priceMin": {
            "title": "Minimum Price (Optional)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum property price in NZD."
          },
          "priceMax": {
            "title": "Maximum Price (Optional)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum property price in NZD."
          },
          "bedroomsMin": {
            "title": "Minimum Bedrooms (Optional)",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Minimum number of bedrooms."
          },
          "bathroomsMin": {
            "title": "Minimum Bathrooms (Optional)",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Minimum number of bathrooms."
          },
          "includeNeighbouringSuburbs": {
            "title": "Include Neighbouring Suburbs",
            "type": "boolean",
            "description": "Include properties from neighbouring suburbs in results. When unchecked, only the exact suburb is searched. Most useful when searching at suburb level.",
            "default": false
          },
          "sort": {
            "title": "Sort Order",
            "enum": [
              "latest",
              "price-asc",
              "price-desc",
              "default"
            ],
            "type": "string",
            "description": "Sort order for search results. For Sold listings, 'latest' uses 'latest-sale' ordering automatically.",
            "default": "latest"
          },
          "maxPages": {
            "title": "Maximum Pages per Location",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum search result pages per location. Each page has ~20 results. When left empty, a built-in limit of 100 pages per location applies."
          },
          "urls": {
            "title": "Search List URLs",
            "type": "array",
            "description": "Paste realestate.co.nz search result page URLs (sale, rental or sold; region, district, suburb, property-type, paginated, filtered, map-view, legacy lct= and non-www forms all work). Each URL is read as a single page - no pagination. Single-property detail pages and the /agents directory are not scraped: they are skipped with a warning in the run log. Left untouched, this field scrapes one example of each supported shape.",
            "default": [
              "https://www.realestate.co.nz/residential/sale/auckland?by=latest",
              "https://www.realestate.co.nz/residential/rental/wellington",
              "https://www.realestate.co.nz/residential/sold/auckland",
              "https://www.realestate.co.nz/residential/sale/auckland?page=2",
              "https://www.realestate.co.nz/residential/sale",
              "https://www.realestate.co.nz/residential/sale/auckland/apartment",
              "https://www.realestate.co.nz/residential/rental/auckland/auckland-city/ponsonby",
              "https://www.realestate.co.nz/residential/sale/auckland?by=latest&view=map",
              "https://www.realestate.co.nz/residential/sale/auckland?by=price-asc&maxp=900000&minb=2",
              "https://www.realestate.co.nz/43147757/residential/sale/20a-gibson-road-tuakau",
              "https://www.realestate.co.nz/residential/sale/auckland/auckland-city?lct=r35%2Cd225",
              "https://realestate.co.nz/residential/sale/auckland",
              "https://www.realestate.co.nz/agents"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxListings": {
            "title": "Maximum Listings",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after scraping this many listings. Leave empty for no limit.",
            "default": 25
          },
          "outputFormat": {
            "title": "Output Formats",
            "type": "array",
            "description": "Export data in these formats",
            "items": {
              "type": "string",
              "enum": [
                "json",
                "csv"
              ],
              "enumTitles": [
                "JSON",
                "CSV"
              ]
            },
            "default": [
              "json"
            ]
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Configure proxy for the run. NZ residential proxies recommended."
          },
          "resumeFromCheckpoint": {
            "title": "Resume from checkpoint",
            "type": "boolean",
            "description": "Continue from the last saved checkpoint within the SAME run if it was interrupted (platform migration or a manual Resurrect). Distinct from resumeFromRunId (continues a specific PREVIOUS run by id) and incrementalMode (remembers this search across scheduled runs) below.",
            "default": true
          },
          "resumeFromRunId": {
            "title": "Resume from run ID (Optional)",
            "type": "string",
            "description": "Paste a previous run ID (or its dataset ID) to continue ONE interrupted crawl — listing ids already collected in that run are skipped so this run only adds new ones. For a same-run interruption use resumeFromCheckpoint instead; for ongoing scheduled monitoring of this search use incrementalMode below."
          },
          "incrementalMode": {
            "title": "Incremental mode (recurring monitoring)",
            "type": "boolean",
            "description": "Turn on when you run this same search on a schedule (e.g. daily) and only want to know what's new or changed since last time. The actor remembers this search's listings itself — no need to paste a run ID. Adds changeType (NEW/UPDATED/UNCHANGED/REAPPEARED/EXPIRED), changedFields, firstSeenAt, and lastSeenAt to every row. A listing is UPDATED when any output field differs from the stored copy (price, status, address, features, description, photos, agents, open homes, and so on); these never count as a change: the scrape timestamp (source), the featured/showcased placement flags (isFeatured, isShowcased), each agent's listingCount, and the ORDER of openHomes. Those fields are still in every row. You can exclude more with Ignore fields when detecting changes below. Off by default so existing scheduled runs are unaffected. See stateKey, emitUnchanged, and emitExpired below.",
            "default": false
          },
          "stateKey": {
            "title": "State key for incremental mode (Optional)",
            "type": "string",
            "description": "Optional label for the incrementalMode baseline. Leave empty to auto-derive one from your search settings (mode/locations/listingType/property types/price/bedrooms/bathrooms/neighbouring suburbs/sort/urls) — a different filter setup automatically gets its own baseline, never sharing one by accident. Set this only if you want multiple differently-configured runs to intentionally share one baseline."
          },
          "emitUnchanged": {
            "title": "Emit unchanged listings (incremental mode)",
            "type": "boolean",
            "description": "When incrementalMode is on, also output listings that are UNCHANGED since the last run (changeType=UNCHANGED, changedFields=[]). Off by default: unchanged listings are silently skipped, so you only see and pay for what's new or different. Turning this on bills extra dataset-item rows for listings that haven't changed.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired listings (incremental mode)",
            "type": "boolean",
            "description": "When incrementalMode is on, also output a row for previously-tracked listings that are no longer found (changeType=EXPIRED), so you can detect delistings. Only emitted after a run that scans the full tracked search with no cap hit and no resumeFromRunId — a partial run never marks a still-live listing as expired. Off by default. Turning this on bills extra dataset-item rows.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Incremental mode only. Field names that must NOT make a listing count as UPDATED, one per entry, e.g. photos or agents.phone. Use a dot for a nested field (price.display) and [] to reach every element of a list (agents[].email). The fields stay in the output rows; they are only left out of the comparison and out of changedFields. Already ignored by default: source, isFeatured, isShowcased, agents[].listingCount, and the order of openHomes. Changing this list does not cause a one-time wave of UPDATED rows.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. Notion gets a page per item; other connectors receive a best-effort write/digest. Leave empty to skip — this never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}