{
  "openapi": "3.0.1",
  "info": {
    "title": "SeLoger Scraper — France Property for Sale & Rent",
    "description": "Scrape SeLoger.com listings for sale or rent from search URLs or city/postcode + filters: price, €/m², surface, rooms, floor, DPE/GES, features, photos, agency, coordinates.",
    "version": "0.1",
    "x-build-id": "cpBtgOTrGZuDwaQ5B"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/tortuga~seloger-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-tortuga-seloger-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/tortuga~seloger-scraper/runs": {
      "post": {
        "operationId": "runs-sync-tortuga-seloger-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/tortuga~seloger-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-tortuga-seloger-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": "Start URLs",
            "type": "array",
            "description": "SeLoger search URLs with any filters set on the site (run the search on seloger.com and copy the address bar, e.g. https://www.seloger.com/classified-search?distributionTypes=Rent&estateTypes=Apartment&locations=AD08FR28808&priceMax=1200), SEO search pages (https://www.seloger.com/recherche/...), or single listing URLs (https://www.seloger.com/annonce/...). Leave empty if you use Locations below.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities, postcodes, Paris/Lyon/Marseille arrondissements, neighbourhoods, departments or regions, one per line, e.g. 'Bordeaux', '75011', 'Paris 11e', 'Montmartre', 'Gironde', 'Bretagne'. Each is looked up with SeLoger's own place search; all places go into one combined search (like picking several places on the site).",
            "items": {
              "type": "string"
            }
          },
          "transactionType": {
            "title": "Buy or rent",
            "enum": [
              "buy",
              "rent"
            ],
            "type": "string",
            "description": "Listings for sale (achat) or for rent (location). Applies to Locations searches; start URLs keep their own.",
            "default": "buy"
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Only these property types. Leave empty for apartments and houses (the site's default).",
            "items": {
              "type": "string",
              "enum": [
                "apartment",
                "house",
                "land",
                "parking",
                "building",
                "other"
              ],
              "enumTitles": [
                "Apartment (appartement)",
                "House (maison)",
                "Land (terrain)",
                "Parking / garage",
                "Whole building (immeuble)",
                "Other (divers)"
              ]
            }
          },
          "minPrice": {
            "title": "Min price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum sale price, or minimum monthly rent for rentals, in euros."
          },
          "maxPrice": {
            "title": "Max price (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum sale price, or maximum monthly rent for rentals, in euros."
          },
          "minSurface": {
            "title": "Min surface (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum living surface in square metres."
          },
          "maxSurface": {
            "title": "Max surface (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum living surface in square metres."
          },
          "minRooms": {
            "title": "Min rooms (pièces)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of rooms (pièces, as counted in France: living room + bedrooms)."
          },
          "maxRooms": {
            "title": "Max rooms (pièces)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of rooms (pièces)."
          },
          "minBedrooms": {
            "title": "Min bedrooms (chambres)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bedrooms."
          },
          "maxBedrooms": {
            "title": "Max bedrooms (chambres)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of bedrooms."
          },
          "minLandSurface": {
            "title": "Min land surface (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum plot (terrain) size in square metres, for houses and land."
          },
          "newBuild": {
            "title": "New build (neuf)",
            "enum": [
              "any",
              "only",
              "exclude"
            ],
            "type": "string",
            "description": "Only new-build listings (programmes neufs), exclude them, or both. 'Only' works for purchases.",
            "default": "any"
          },
          "features": {
            "title": "Must have",
            "type": "array",
            "description": "Only listings that have all of these (SeLoger's own filters).",
            "items": {
              "type": "string",
              "enum": [
                "balcony_terrace",
                "garden",
                "parking",
                "elevator",
                "swimming_pool",
                "cellar",
                "fitted_kitchen",
                "bathtub",
                "pets_allowed",
                "step_free_access",
                "exclusive_mandate",
                "vacant"
              ],
              "enumTitles": [
                "Balcony or terrace",
                "Garden",
                "Parking / garage",
                "Lift (ascenseur)",
                "Swimming pool",
                "Cellar (cave)",
                "Fitted kitchen",
                "Bathtub",
                "Pets allowed",
                "Step-free access",
                "Exclusive mandate",
                "Vacant (libre)"
              ]
            }
          },
          "sellerType": {
            "title": "Seller",
            "enum": [
              "any",
              "private",
              "professional"
            ],
            "type": "string",
            "description": "Private sellers (particuliers), professionals (agencies, developers), or both.",
            "default": "any"
          },
          "sort": {
            "title": "Sort",
            "enum": [
              "newest",
              "relevance",
              "price_asc",
              "price_desc",
              "price_per_sqm_asc",
              "price_per_sqm_desc",
              "surface_asc",
              "surface_desc",
              "rooms_asc",
              "rooms_desc"
            ],
            "type": "string",
            "description": "Order of the results. Applies to Locations searches and to start URLs that have no order of their own. 'Newest first' is best for monitoring; 'Relevance' is SeLoger's default order.",
            "default": "newest"
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many listings in total (across all searches). Keeps cost predictable. SeLoger serves at most 10,000 listings per search; larger searches are split into price bands automatically (see below).",
            "default": 100
          },
          "maxItemsPerSearch": {
            "title": "Max items per search",
            "minimum": 1,
            "type": "integer",
            "description": "Optional cap per start URL / location search, so one big search does not use up Max items before the others run."
          },
          "includeDetails": {
            "title": "Include full details",
            "type": "boolean",
            "description": "Also load each listing's own record: full description, map coordinates, all features (lift, balcony, terrace, garden, parking, cellar, pool, furnished...), DPE and GES classes with their kWh / CO₂ values and energy-bill estimate, rent breakdown (rent without charges, charges, deposit, tenant fees), notary-fee estimate and co-ownership details. One small extra request per listing; charged as an extra 'detail' event (see pricing).",
            "default": false
          },
          "splitLargeSearches": {
            "title": "Split searches over 10,000 results",
            "type": "boolean",
            "description": "SeLoger serves at most 10,000 listings per search. When a search has more and Max items asks for more, cut it into price bands of up to 10,000 listings (a few tiny count requests) so you can get every listing. Results then come band by band, cheapest band first; listings without a price are not in any band.",
            "default": true
          },
          "onlyNewOrChanged": {
            "title": "Only new or changed items",
            "type": "boolean",
            "description": "Remember what earlier runs of this search returned and output only new items or items whose price/status changed. Use with a Schedule; unchanged items are not charged. With this on, Max items is the number of listings checked per run (e.g. the newest 200).",
            "default": false
          },
          "monitoringKey": {
            "title": "Monitoring key",
            "type": "string",
            "description": "Name for this watch, so several schedules on the same search stay separate; defaults to a key derived from the search input"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "SeLoger is protected by DataDome, which refuses datacenter IPs. Apify RESIDENTIAL proxy (France) is the default and worked in every test run (refused requests are retried on a new IP). Residential traffic is billed by Apify per GB: this actor uses about 1.5 MB per 1,000 listings, and about 23 MB per 1,000 listings with full details.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "FR"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}