{
  "openapi": "3.0.1",
  "info": {
    "title": "Realtor.ca API Canada | Search | Page Details | Agents Scraper",
    "description": "Canadian real estate agents and Realtor.ca listings in one actor. Get 89,000+ agents by province, city or brokerage with phone, brokerage and website, and email on 10,800+ when you turn emails on. Or pull sale, sold and rental listings from any Realtor.ca search link. JSON or CSV.",
    "version": "0.0",
    "x-build-id": "BzXc0ReWnwjp2gdPl"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~realtor-canada-search-cheerio/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-realtor-canada-search-cheerio",
        "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/memo23~realtor-canada-search-cheerio/runs": {
      "post": {
        "operationId": "runs-sync-memo23-realtor-canada-search-cheerio",
        "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/memo23~realtor-canada-search-cheerio/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-realtor-canada-search-cheerio",
        "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": {
          "dbProvince": {
            "title": "Province (2-letter code, e.g. ON, BC, AB)",
            "type": "string",
            "description": "Return agents in this province. E.g. ON, BC, AB, QC. This turns on Instant Agents mode."
          },
          "dbCity": {
            "title": "City (optional)",
            "type": "string",
            "description": "Narrow the results to agents whose brokerage office is in this city, e.g. Toronto, Vancouver, Montreal. Capitals, accents, dots and hyphens don't matter, and St and Saint are the same (St Catharines finds St. Catharines). Montreal covers the whole island, Westmount, Pointe-Claire and the other island towns included. This is the office location, which may differ from where an agent works."
          },
          "dbBrokerage": {
            "title": "Brokerage contains (optional)",
            "type": "string",
            "description": "Narrow the results to a brokerage name substring, e.g. RE/MAX, Royal LePage, Sutton."
          },
          "dbHasPhone": {
            "title": "Only agents with a phone",
            "type": "boolean",
            "description": "Return only agents that have a phone number (nearly all do).",
            "default": false
          },
          "dbHasEmail": {
            "title": "Only agents with an email",
            "type": "boolean",
            "description": "Return only agents with an email, and deliver it. Each delivered email costs $0.052.",
            "default": false
          },
          "dbHasWebsite": {
            "title": "Only agents with a website",
            "type": "boolean",
            "description": "Return only agents that have a personal website.",
            "default": false
          },
          "instantDatabase": {
            "title": "Use Instant Agents (results in seconds)",
            "type": "boolean",
            "description": "Force Instant Agents mode. Turns on by itself when you set a Province / City / Brokerage above.",
            "default": false
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Realtor.ca map/search URLs to live-scrape. Leave empty to use Instant Agents mode above.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "includeListingDetails": {
            "title": "Include Listing Details",
            "type": "boolean",
            "description": "Fetch each listing's full detail page. Required for annual property taxes, maintenance/condo fees, fee inclusions and the management company — the search results alone do not carry these. Adds one request per listing, so runs take longer and cost more.",
            "default": false
          },
          "monitoringMode": {
            "title": "Monitoring mode (only new listings)",
            "type": "boolean",
            "description": "Only return listings that have not been delivered by a previous run. The Actor remembers every listing it has already sent you and stops paginating once it reaches ones it has seen before, so a scheduled search with nothing new finishes in seconds instead of re-scraping the whole area. Listings recognised and skipped are billed at $0.20 / 1,000 — a fifth of the $1.00 / 1,000 charged for a delivered listing record. Ideal for a daily or hourly search that should only surface fresh inventory.",
            "default": false
          },
          "monitoringStoreName": {
            "title": "Monitoring store name",
            "type": "string",
            "description": "Named key-value store holding the listings already delivered. Use a different name per saved search to keep their histories separate, or clear this store to force a full re-pull. Only used when monitoring mode is on.",
            "default": "realtor-ca-seen-listings"
          },
          "maxItems": {
            "title": "Max Listings/Items to scrape per crawl",
            "type": "integer",
            "description": "Maximum number of Listings/Items to scrape per crawl. If not defined, all items will be scraped.",
            "default": 100
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "type": "integer",
            "description": "Maximum number of pages that can be processed at the same time.",
            "default": 10
          },
          "minConcurrency": {
            "title": "Min Concurrency",
            "type": "integer",
            "description": "Minimum number of pages that will be processed at the same time.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "type": "integer",
            "description": "Number of times the crawler will retry a failed request before giving up.",
            "default": 100
          },
          "enrichEmails": {
            "title": "Deliver contact emails",
            "type": "boolean",
            "description": "Adds the email to agent rows where one exists, and looks up a contact email for live-scraped listings. Each delivered email costs $0.052, never charged on a miss.",
            "default": false
          },
          "proxy": {
            "title": "Proxy configuration (optional override)",
            "type": "object",
            "description": "Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}