{
  "openapi": "3.0.1",
  "info": {
    "title": "PAP.fr Scraper - France Owner-Direct Property Listings",
    "description": "Scrape pap.fr owner-to-owner property adverts, for sale and to rent: price in euros, m², rooms, € per m², DPE, city and photos. Open any advert for the street, GES, map position and the owner's published phone.",
    "version": "1.0",
    "x-build-id": "N9BGIMnWwCBlRv9QV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~pap-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-pap-property-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/sian.agency~pap-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-pap-property-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/sian.agency~pap-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-pap-property-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": {
          "operation": {
            "title": "🎯 What do you want to scrape?",
            "enum": [
              "search",
              "detail"
            ],
            "type": "string",
            "description": "Pick one per run. **Property Search** returns the adverts for a city, sale or rent, apartments or houses. **Property Detail** opens pap.fr advert addresses you paste and returns the street, DPE, GES, the owner's phone and every photo.",
            "default": "search"
          },
          "listingType": {
            "title": "🤝 Sale or rent",
            "enum": [
              "sale",
              "rent"
            ],
            "type": "string",
            "description": "Which side of pap.fr to read. Sale is the larger pool (about 13,000 adverts nationwide); rentals are about 3,400. Prices for rentals are the monthly rent.",
            "default": "sale"
          },
          "propertyType": {
            "title": "🏠 Property type",
            "enum": [
              "appartement",
              "maison",
              "all"
            ],
            "type": "string",
            "description": "Apartments, houses, or both. 'Apartments and houses' runs the two searches one after the other and counts toward the same Max adverts.",
            "default": "appartement"
          },
          "location": {
            "title": "🗺️ City",
            "enum": [
              "france",
              "paris",
              "lyon",
              "marseille",
              "toulouse",
              "nice",
              "nantes",
              "montpellier",
              "strasbourg",
              "bordeaux",
              "lille",
              "rennes",
              "grenoble",
              "toulon",
              "cannes",
              "aix-en-provence",
              "angers",
              "clermont-ferrand",
              "amiens",
              "avignon",
              "antibes"
            ],
            "type": "string",
            "description": "A French city, or all of France. Paris apartments for sale are about 1,000 adverts. All of France returns the first 350 or so that pap.fr lists; paste department pages below to go further. Ignored when you paste search page URLs."
          },
          "maxResults": {
            "title": "🔢 Max adverts",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "How many adverts to return. Free accounts stop at 20 per run. pap.fr shows about 350 adverts per search at most, so runs above 300 in Paris are split across the 20 arrondissements automatically. For more of France, paste department or town search pages below.",
            "default": 25
          },
          "minPrice": {
            "title": "💰 Min price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only adverts at or above this price, in euros (monthly rent for rentals). Adverts without a price are left out when a band is set. Leave empty for no floor."
          },
          "maxPrice": {
            "title": "💰 Max price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only adverts at or below this price, in euros. Leave empty for no ceiling."
          },
          "includeDetails": {
            "title": "📄 Open each advert in full",
            "type": "boolean",
            "description": "Opens every advert the search returns and adds the street, GES, lift, map position, publish date, the owner's phone, the full description and the full-size photos. Billed as one Property Detail on top of each search row. Off by default: the search row already has price, rooms, area, city, DPE and photos.",
            "default": false
          },
          "searchUrls": {
            "title": "🔗 Search page URLs",
            "type": "array",
            "description": "Paste pap.fr search pages instead of using the dropdowns, for example https://www.pap.fr/annonce/vente-appartements-paris-75-g439. Any town pap.fr covers works this way. Filters after a '?' in the address cannot be read, so use the price fields above for a price band. Used by Property Search only.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "listingUrls": {
            "title": "🔗 Advert URLs",
            "type": "array",
            "description": "The pap.fr advert addresses to open in Property Detail mode, one per line, for example https://www.pap.fr/annonces/appartement-paris-10e-75010-r458003076. Used by Property Detail only.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}