{
  "openapi": "3.0.1",
  "info": {
    "title": "France Property Sales | Official DVF Prices & EUR per m2",
    "description": "Real French property sale prices from the official DVF open dataset. Correctly deduplicated to one row per transaction, with price per square metre, surface, rooms and coordinates. Search any department or commune, or get median EUR/m2 by commune and quarter.",
    "version": "1.0",
    "x-build-id": "oq1mREHvn70wWOO0I"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/alinz~france-property-prices/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-alinz-france-property-prices",
        "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/alinz~france-property-prices/runs": {
      "post": {
        "operationId": "runs-sync-alinz-france-property-prices",
        "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/alinz~france-property-prices/run-sync": {
      "post": {
        "operationId": "run-sync-alinz-france-property-prices",
        "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": [
          "departments",
          "years"
        ],
        "properties": {
          "departments": {
            "title": "Department codes",
            "type": "array",
            "description": "French department codes: 01-95, plus 2A / 2B for Corsica and 971-974 overseas. 75 = Paris, 06 = Alpes-Maritimes (Nice, Cannes), 13 = Bouches-du-Rhône (Marseille), 69 = Rhône (Lyon), 33 = Gironde (Bordeaux), 92 = Hauts-de-Seine.",
            "items": {
              "type": "string"
            }
          },
          "years": {
            "title": "Years",
            "type": "array",
            "description": "Published years: 2021 to 2025. Each department-year is one file, so more years means proportionally more work.",
            "items": {
              "type": "string"
            }
          },
          "communeCodes": {
            "title": "Commune INSEE codes",
            "type": "array",
            "description": "Optional. Narrow to specific communes by INSEE code, e.g. 75118 is the 18th arrondissement of Paris. Leave empty for the whole department.",
            "items": {
              "type": "string"
            }
          },
          "postcodePrefix": {
            "title": "Postcode prefix",
            "type": "string",
            "description": "Optional. Matches the start of the postcode, so '750' covers Paris and '75018' one arrondissement."
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Leave empty for all. 'Dépendance' means a garage, cellar or parking space sold on its own.",
            "items": {
              "type": "string",
              "enum": [
                "Appartement",
                "Maison",
                "Dépendance",
                "Local industriel. commercial ou assimilé",
                "Terrain / autre"
              ],
              "enumTitles": [
                "Apartment",
                "House",
                "Outbuilding / parking",
                "Commercial or industrial",
                "Land / other"
              ]
            }
          },
          "saleTypes": {
            "title": "Sale types",
            "type": "array",
            "description": "'Vente' is an ordinary sale and is the sensible default. The others are off-plan sales, auctions, exchanges and building-land sales, which price differently.",
            "items": {
              "type": "string",
              "enum": [
                "Vente",
                "Vente en l'état futur d'achèvement",
                "Adjudication",
                "Echange",
                "Vente terrain à bâtir"
              ],
              "enumTitles": [
                "Ordinary sale",
                "Off-plan (VEFA)",
                "Auction",
                "Exchange",
                "Building land"
              ]
            },
            "default": [
              "Vente"
            ]
          },
          "excludeMultiLot": {
            "title": "Exclude multi-lot sales",
            "type": "boolean",
            "description": "A transaction covering many lots is usually a whole building or a portfolio, not a comparable home. Keep this on for market analysis; turn it off to see every transfer.",
            "default": true
          },
          "minPrice": {
            "title": "Minimum price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Filters on the total transaction value, not the price per square metre."
          },
          "maxPrice": {
            "title": "Maximum price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Filters on the total transaction value, not the price per square metre."
          },
          "minSurface": {
            "title": "Minimum habitable surface (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Excludes outbuildings and parking spaces from the count, since only living space is measured."
          },
          "outputFormat": {
            "title": "Output",
            "enum": [
              "transactions",
              "stats"
            ],
            "type": "string",
            "description": "'Transactions' returns one row per sale. 'Market statistics' returns median and quartile €/m² per commune, quarter and property type — the figures the French market actually quotes.",
            "default": "transactions"
          },
          "minSalesPerGroup": {
            "title": "Minimum sales per statistic",
            "minimum": 1,
            "type": "integer",
            "description": "Statistics mode only. Groups with fewer sales than this are dropped, because a median over two sales is noise.",
            "default": 5
          },
          "maxResults": {
            "title": "Max rows",
            "minimum": 1,
            "type": "integer",
            "description": "Optional cap. Useful for a cheap trial run before a large pull."
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "Parallel department-year downloads. 4 is a good default.",
            "default": 4
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}