{
  "openapi": "3.0.1",
  "info": {
    "title": "DuProprio Property Scraper",
    "description": "[💰 $5.0 / 1K] Extract for-sale-by-owner listings from DuProprio, Canada's largest FSBO real estate platform. Get price, exact address and geo, property type, beds/baths, area, per-room dimensions, taxes, condo fees, construction year, mortgage estimate, and photos. Search by region or paste URLs.",
    "version": "1.0",
    "x-build-id": "gLrcIusxlTiSOBWO2"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~duproprio-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-duproprio-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/solidcode~duproprio-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-duproprio-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/solidcode~duproprio-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-duproprio-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": {
          "startUrls": {
            "title": "DuProprio URLs",
            "type": "array",
            "description": "Paste one or more DuProprio URLs — either search-result pages (copy the URL from your browser after applying filters on duproprio.com) or individual property detail pages. The scraper reads every filter straight from each search URL, so the Search Filters below are ignored for these. Use this when you already built a search on the site.",
            "items": {
              "type": "string"
            }
          },
          "transactionType": {
            "title": "Transaction Type",
            "enum": [
              "sale",
              "rent"
            ],
            "type": "string",
            "description": "Whether to find properties for sale or for rent. Only applies when you build a search below (not when pasting URLs).",
            "default": "sale"
          },
          "region": {
            "title": "Region",
            "enum": [
              "",
              "montreal",
              "monteregie",
              "monteregie-ouest",
              "laurentides",
              "lanaudiere",
              "laval",
              "estrie",
              "outaouais",
              "capitale-nationale",
              "quebec-rive-sud",
              "mauricie",
              "centre-du-quebec",
              "chaudiere-appalaches",
              "saguenay-lac-saint-jean",
              "bas-saint-laurent",
              "abitibi-temiscamingue",
              "cote-nord",
              "gaspesie-iles-de-la-madeleine",
              "nord-du-quebec"
            ],
            "type": "string",
            "description": "Quebec region / area to search. Leave as 'Any region' to search the whole province, or narrow to a specific region. For a specific city or neighbourhood, use the Location field below.",
            "default": ""
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Optional city or neighbourhood name to refine the search (for example 'Montreal', 'Sherbrooke', or 'Laval'). Leave empty to search the whole region selected above. Only applies when building a search (ignored when URLs are provided)."
          },
          "propertyTypes": {
            "title": "Property Types",
            "uniqueItems": true,
            "type": "array",
            "description": "Limit results to these property types. Leave empty to include all types.",
            "items": {
              "type": "string",
              "enum": [
                "house",
                "condo",
                "plex",
                "cottage",
                "mobile-home",
                "farm",
                "land",
                "commercial"
              ],
              "enumTitles": [
                "House",
                "Condo / Apartment",
                "Plex (duplex, triplex, etc.)",
                "Cottage / Country home",
                "Mobile home",
                "Farm / Acreage",
                "Residential lot / Land",
                "Commercial"
              ]
            },
            "default": []
          },
          "minPrice": {
            "title": "Minimum Price (CAD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only include listings at or above this price, in Canadian dollars. For rentals this is the monthly rent. Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Maximum Price (CAD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only include listings at or below this price, in Canadian dollars. For rentals this is the monthly rent. Leave empty for no maximum."
          },
          "minBedrooms": {
            "title": "Minimum Bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Only include properties with at least this many bedrooms. Leave empty for any."
          },
          "minBathrooms": {
            "title": "Minimum Bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Only include properties with at least this many bathrooms. Leave empty for any."
          },
          "scrapeDetails": {
            "title": "Scrape Full Details",
            "type": "boolean",
            "description": "Follow each listing to its page to collect full data: room dimensions, feature groups (heating, services), living space and lot area, construction year, annual taxes, annual condo fees, and municipal assessment. Turn off for a faster, lighter run that returns only the summary fields shown in search results.",
            "default": true
          },
          "language": {
            "title": "Language",
            "enum": [
              "en",
              "fr"
            ],
            "type": "string",
            "description": "Language for listing text (titles, descriptions, feature labels). DuProprio serves both English and French.",
            "default": "en"
          },
          "maxResults": {
            "title": "Max Results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of listings to collect across all URLs and searches. Set to 0 for as many as available (up to a built-in safety cap). Tip: start with 10-50 to test, then increase.",
            "default": 100
          },
          "maxResultsPerUrl": {
            "title": "Max Results Per URL",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum listings to collect from each individual URL or search. Set to 0 for no per-URL limit (the overall Max Results still applies).",
            "default": 0
          },
          "ignoreUrlFailures": {
            "title": "Continue If a URL Fails",
            "type": "boolean",
            "description": "When enabled, the scraper skips any URL or search that fails and continues with the rest. When disabled, the run stops on the first failure.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}