{
  "openapi": "3.0.1",
  "info": {
    "title": "DuProprio Quebec FSBO New Listings Alert",
    "description": "Newest for-sale-by-owner homes, condos, lots and farms on DuProprio (Quebec) from a search URL or filters, one flat row each: price in CAD, address, city, bedrooms, bathrooms, living area, lot, tags, open house, photo, coordinates.",
    "version": "0.1",
    "x-build-id": "oAv6dzFDSm9cgUE4h"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/superslowsloth~duproprio-listings/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-superslowsloth-duproprio-listings",
        "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/superslowsloth~duproprio-listings/runs": {
      "post": {
        "operationId": "runs-sync-superslowsloth-duproprio-listings",
        "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/superslowsloth~duproprio-listings/run-sync": {
      "post": {
        "operationId": "run-sync-superslowsloth-duproprio-listings",
        "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": {
          "searchUrls": {
            "title": "DuProprio search URLs",
            "type": "array",
            "description": "Results-page addresses copied from duproprio.com: open the English site, set any filters you like (region, cities, type, price, bedrooms, more criteria), sort by 'New listings first' and copy the address of the results list (https://duproprio.com/en/search/list?...). One URL per line. Each is walked on its own and the filters below are laid over it. Leave empty to build the search from the filters below.",
            "items": {
              "type": "string"
            }
          },
          "regions": {
            "title": "Regions",
            "type": "array",
            "description": "Only properties in these Quebec regions. Leave empty for the whole province. Cannot be combined with City ids, because DuProprio ignores the cities whenever a region is set.",
            "items": {
              "type": "string",
              "enum": [
                "8",
                "1",
                "17",
                "114",
                "12",
                "9",
                "5",
                "11",
                "14",
                "15",
                "13",
                "4",
                "6",
                "16",
                "31",
                "10",
                "7",
                "115",
                "3",
                "257",
                "2"
              ],
              "enumTitles": [
                "Abitibi-Témiscamingue",
                "Bas-Saint-Laurent",
                "Centre-du-Québec",
                "Charlevoix",
                "Chaudière-Appalaches",
                "Côte-Nord",
                "Estrie",
                "Gaspésie-Îles-de-la-Madeleine",
                "Lanaudière",
                "Laurentides",
                "Laval",
                "Mauricie",
                "Montréal / l'Île",
                "Montérégie (Rive-Sud Montréal)",
                "Montérégie Ouest",
                "Nord-du-Québec",
                "Outaouais",
                "Portneuf",
                "Québec Rive-Nord",
                "Québec Rive-Sud (Lévis)",
                "Saguenay-Lac-Saint-Jean"
              ]
            }
          },
          "cityIds": {
            "title": "City ids",
            "type": "array",
            "description": "DuProprio city ids, whole numbers, for a search narrower than a region. Find a city's id in the address of a search you build on duproprio.com: it is the number in cities[]=... (cities%5B%5D=...). One id per line. Cannot be combined with Regions.",
            "items": {
              "type": "string"
            }
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Only these kinds of property. Leave empty for all of them. 'Lot' also includes the site's land categories such as arable land.",
            "items": {
              "type": "string",
              "enum": [
                "house",
                "condo",
                "cottage",
                "multiplex",
                "lot",
                "commercial",
                "farm"
              ],
              "enumTitles": [
                "Single family home",
                "Condo / Loft",
                "Cottage",
                "Multiplex / Income property",
                "Lot",
                "Commercial",
                "Farm"
              ]
            }
          },
          "minPrice": {
            "title": "Minimum price (CAD)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest asking price to return, in Canadian dollars, inclusive. Leave empty for no lower bound."
          },
          "maxPrice": {
            "title": "Maximum price (CAD)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest asking price to return, in Canadian dollars, inclusive. Leave empty for no upper bound."
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Only properties with at least this many bedrooms, 1 to 5 (5 means 5 or more). Leave empty or 0 for no limit."
          },
          "minBathrooms": {
            "title": "Minimum bathrooms",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Only properties with at least this many bathrooms, 1 to 5 (5 means 5 or more). Leave empty or 0 for no limit."
          },
          "listedWithin": {
            "title": "Listed within",
            "enum": [
              "any",
              "2",
              "7",
              "30"
            ],
            "type": "string",
            "description": "Only properties DuProprio shows as online for at most this many days. DuProprio offers 2, 7 and 30 days. Useful with a daily schedule to keep a run's rows to what is new, though the id comparison in your own workflow stays the exact test.",
            "default": "any"
          },
          "openHouseOnly": {
            "title": "Open houses only",
            "type": "boolean",
            "description": "Only properties with an open house scheduled. DuProprio shows the day as text on the card ('Sunday October 11th'), carried in the open_house column.",
            "default": false
          },
          "sort": {
            "title": "Sort order",
            "enum": [
              "newest",
              "oldest",
              "price-asc",
              "price-desc"
            ],
            "type": "string",
            "description": "The order DuProprio lists the results in. 'Newest first' is DuProprio's 'New listings first' and is the one for new-listing alerts. A pasted search URL that already has its own sort keeps it.",
            "default": "newest"
          },
          "maxItems": {
            "title": "Max listings per search",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Read at most this many listings for each search (a search URL, or the filters below when no URL is given). DuProprio shows 11 per page. The whole of Quebec for sale is about 7,900 listings, so values above 10,000 are not accepted.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify proxy (automatic datacenter exits) is the default. A refused request (403, 429, 5xx, or a page that is not a results page) is retried from a fresh address, which is what the proxy is for.",
            "default": {
              "useApifyProxy": 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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}