{
  "openapi": "3.0.1",
  "info": {
    "title": "French Property Scraper for SeLoger - Listings & Agency Leads",
    "description": "Scrape French property listings from SeLoger by town, postcode, departement or region: price, price per m2 vs the area market, rooms, size, energy class, year built, photos and the agency with phone, SIRET and address. Independent tool, not affiliated with SeLoger.",
    "version": "0.1",
    "x-build-id": "HF2i18XtVig6O9hVQ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~seloger-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-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/scrapesage~seloger-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-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/scrapesage~seloger-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-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": {
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Where to search. Type a town (<code>Lyon</code>, <code>Saint-Étienne</code>), a SeLoger town slug (<code>paris-75</code>, <code>lyon-69</code>, <code>paris-11eme-75</code>), a postcode (<code>33000</code>, <code>75011</code>), a departement (<code>Gironde</code> or <code>33</code>), a region (<code>Bretagne</code>) or <code>france</code>. Each location is combined with every property type below. Narrower places return a much larger share of their market - see the README.",
            "items": {
              "type": "string"
            }
          },
          "dealType": {
            "title": "Deal type",
            "enum": [
              "achat",
              "locations"
            ],
            "type": "string",
            "description": "Buy or rent. Chateaux, whole buildings, mansions, villas, senior residences and businesses are published for sale only; those combinations are skipped before any request and no listing is charged for them."
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Which kinds of property to search for. Every value was checked live against SeLoger. Leave empty to search all types at once.",
            "items": {
              "type": "string",
              "enum": [
                "appartement",
                "maison",
                "terrain",
                "parking",
                "loft",
                "chateau",
                "immeuble",
                "hotel-particulier",
                "duplex",
                "villa",
                "residence-senior",
                "fonds-de-commerce"
              ],
              "enumTitles": [
                "Apartment (appartement)",
                "House (maison)",
                "Land / plot (terrain)",
                "Parking / garage (parking)",
                "Loft (loft)",
                "Chateau (chateau) - sale only",
                "Whole building (immeuble) - sale only",
                "Mansion / hotel particulier (hotel-particulier) - sale only",
                "Duplex (duplex)",
                "Villa (villa) - sale only",
                "Senior residence (residence-senior) - sale only",
                "Business / shop for sale (fonds-de-commerce) - sale only"
              ]
            }
          },
          "propertyFeature": {
            "title": "Only listings with this feature",
            "enum": [
              "neuf",
              "viager",
              "a-renover",
              "prestige",
              "investissement",
              "meuble",
              "balcon-terrasse",
              "jardin",
              "piscine",
              "parking-garage",
              "ascenseur",
              "cave",
              "dernier-etage",
              "rdc",
              "bord-de-mer",
              "acces-handicape"
            ],
            "type": "string",
            "description": "Optional. Searches SeLoger's own page for listings with this feature, so every listing returned has it (for example new builds, properties to renovate, furnished rentals or a garden). A feature SeLoger does not publish for a property type is named in the run's status message and no listing is charged for that search."
          },
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "SeLoger search pages to scrape, instead of (or as well as) the Locations above: open a search on seloger.com and copy the address (<code>https://www.seloger.com/recherche/...</code>; older <code>/immobilier/...</code> links work too). Paste them, link a text file, or upload one. Single-listing pages and URLs that SeLoger's robots.txt disallows are skipped and named in the run's status message.",
            "items": {
              "type": "object"
            }
          },
          "urlsFromFile": {
            "title": "Search URLs from a file or pasted list",
            "type": "string",
            "description": "Paste a block of SeLoger search URLs (one per line), or give ONE link to a .txt/.csv file, a Google Sheet, a Drive file or an Apify key-value-store record holding them."
          },
          "expandSeoLinks": {
            "title": "Go deeper with SeLoger's narrower searches",
            "type": "boolean",
            "description": "Each SeLoger results page links narrower searches inside the same place: arrondissements and neighbourhoods, room and bedroom counts, sub-types and features. Turn this on to follow them, which is how you get well beyond one page of results for a city. Listings found twice are returned and charged once. Bounded by \"Max search pages\".",
            "default": false
          },
          "includeNearbyTowns": {
            "title": "Also follow nearby towns",
            "type": "boolean",
            "description": "With \"Go deeper\" on, also follow the nearby towns SeLoger suggests (outside the place you asked for).",
            "default": false
          },
          "maxListingsPerSearch": {
            "title": "Max listings per search",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Cap on how many listings to take from each search page. SeLoger serves 30 listings per search page, plus one promoted listing on busy searches; see the README for how to go deeper.",
            "default": 40
          },
          "maxResults": {
            "title": "Max listings in total",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Overall cap across every search. 0 means no cap - the run stops when the searches are exhausted or the run time budget is reached.",
            "default": 0
          },
          "maxSearchPages": {
            "title": "Max search pages",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Hard ceiling on how many search pages one run may request, including the narrower searches followed with \"Go deeper\".",
            "default": 25
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings at or above this price, in EUR (monthly rent for rentals). Filtered listings are not charged."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings at or below this price, in EUR (monthly rent for rentals). Filtered listings are not charged."
          },
          "minRooms": {
            "title": "Min rooms",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings with at least this many rooms (pieces). Set Min and Max to the same number (1 to 4) and SeLoger's own page for that room count is searched, so every listing on the page matches. Filtered listings are not charged."
          },
          "maxRooms": {
            "title": "Max rooms",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings with at most this many rooms (pieces). Filtered listings are not charged."
          },
          "minLivingSpaceSqm": {
            "title": "Min living space (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings with at least this much living space. Filtered listings are not charged."
          },
          "maxLivingSpaceSqm": {
            "title": "Max living space (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings with at most this much living space. Filtered listings are not charged."
          },
          "onlyPrivateOwners": {
            "title": "Only private owners",
            "type": "boolean",
            "description": "Keep only listings published by a private owner rather than an estate agency. For apartments, houses and parking SeLoger's own private-sellers page is searched, so the whole page matches. Filtered listings are not charged.",
            "default": false
          },
          "onlyWith3DTour": {
            "title": "Only listings with a 3D tour",
            "type": "boolean",
            "description": "Keep only listings that offer a virtual 3D visit. Filtered listings are not charged.",
            "default": false
          },
          "outputFields": {
            "title": "Output fields",
            "type": "array",
            "description": "Pick exactly the columns you want. Leave empty for every field. The list is generated from the Actor's own record builder, so it can never drift from what the run emits.",
            "items": {
              "type": "string",
              "enum": [
                "type",
                "classifiedId",
                "legacyId",
                "url",
                "status",
                "title",
                "headline",
                "description",
                "dealType",
                "propertyType",
                "listedBy",
                "priceText",
                "price",
                "pricePerSqmText",
                "pricePerSqm",
                "currency",
                "rooms",
                "bedrooms",
                "livingSpaceSqm",
                "plotAreaSqm",
                "floor",
                "keyfacts",
                "energyClass",
                "city",
                "zipCode",
                "district",
                "region",
                "country",
                "isAddressPublished",
                "transportLines",
                "agencyName",
                "contactName",
                "agencyLogoUrl",
                "website",
                "profileUrl",
                "imprintUrl",
                "feeUrl",
                "isPrivateOwner",
                "agencyClientId",
                "phone",
                "phoneNumbers",
                "agencyAddress",
                "agencyRating",
                "agencyReviewCount",
                "agencyReviewsUrl",
                "publisherType",
                "agencyLegalInfo",
                "agencySiret",
                "agencyRcs",
                "images",
                "imageCount",
                "imageScenes",
                "isNew",
                "isExclusive",
                "hasBrokerageFee",
                "has3DVisit",
                "hasAIEnrichment",
                "createdAt",
                "updatedAt",
                "searchUrl",
                "scrapedAt",
                "searchRank",
                "isTopPosition",
                "searchTotalResults",
                "propertySubType",
                "isNewBuild",
                "newBuildProgram",
                "newBuildProgramUrl",
                "yearBuilt",
                "buildingCondition",
                "floorNumber",
                "totalFloors",
                "availableFrom",
                "availableNow",
                "chargesIncluded",
                "previousPrice",
                "priceDropPercent",
                "hasFloorPlan",
                "floorPlanUrls",
                "addressPrecision",
                "department",
                "departmentCode",
                "transportText",
                "phoneInternational",
                "agencyReference",
                "agencyCity",
                "agencyZipCode",
                "agencyLegalEntity",
                "agencyHeadOffice",
                "sourceSite",
                "descriptionIsPreview",
                "marketPricePerSqm",
                "marketPricePerSqmLow",
                "marketPricePerSqmHigh",
                "marketPriceChange1YearPercent",
                "marketPriceArea",
                "marketPriceDate",
                "monthlyAnnuity",
                "priceVsMarketPercent"
              ],
              "enumTitles": [
                "Record type (type)",
                "SeLoger classified ID (classifiedId)",
                "Legacy listing ID (legacyId)",
                "Listing URL (url)",
                "Status (status)",
                "Title (title)",
                "Headline (headline)",
                "Description (description)",
                "Deal type (BUY/RENT) (dealType)",
                "Property type (propertyType)",
                "Listed by (pro/private) (listedBy)",
                "Price (as shown) (priceText)",
                "Price (number) (price)",
                "Price per m2 (as shown) (pricePerSqmText)",
                "Price per m2 (number) (pricePerSqm)",
                "Currency (currency)",
                "Rooms (pieces) (rooms)",
                "Bedrooms (bedrooms)",
                "Living space m2 (livingSpaceSqm)",
                "Plot area m2 (plotAreaSqm)",
                "Floor (floor)",
                "Key facts (keyfacts)",
                "Energy class (energyClass)",
                "City (city)",
                "Postcode (zipCode)",
                "District (district)",
                "Region (region)",
                "Country (country)",
                "Address published (isAddressPublished)",
                "Nearest transport lines (transportLines)",
                "Agency name (agencyName)",
                "Contact name (contactName)",
                "Agency logo URL (agencyLogoUrl)",
                "Website (website)",
                "Agency profile URL (profileUrl)",
                "Imprint URL (imprintUrl)",
                "Agency fees URL (feeUrl)",
                "Private owner (isPrivateOwner)",
                "Agency client ID (agencyClientId)",
                "Phone (phone)",
                "All phone numbers (phoneNumbers)",
                "Agency address (agencyAddress)",
                "Agency rating (agencyRating)",
                "Agency review count (agencyReviewCount)",
                "Agency reviews URL (agencyReviewsUrl)",
                "Publisher type (publisherType)",
                "Agency legal information (agencyLegalInfo)",
                "Agency SIRET (agencySiret)",
                "Agency RCS (agencyRcs)",
                "Photos (images)",
                "Photo count (imageCount)",
                "Photo scene tags (imageScenes)",
                "Newly listed (isNew)",
                "Exclusive (isExclusive)",
                "Has brokerage fee (hasBrokerageFee)",
                "Has 3D tour (has3DVisit)",
                "AI-enriched by SeLoger (hasAIEnrichment)",
                "Listed at (createdAt)",
                "Updated at (updatedAt)",
                "Source search URL (searchUrl)",
                "Scraped at (scrapedAt)",
                "Position on the results page (searchRank)",
                "Promoted listing (top position) (isTopPosition)",
                "Results SeLoger counts for the search (searchTotalResults)",
                "Property sub-type (propertySubType)",
                "New build (isNewBuild)",
                "New-build programme (newBuildProgram)",
                "New-build programme URL (newBuildProgramUrl)",
                "Year built (yearBuilt)",
                "Building condition (buildingCondition)",
                "Floor number (0 = ground floor) (floorNumber)",
                "Floors in the building (totalFloors)",
                "Available from (rentals) (availableFrom)",
                "Available now (rentals) (availableNow)",
                "Rent includes charges (chargesIncluded)",
                "Previous price (previousPrice)",
                "Price drop % (priceDropPercent)",
                "Has a floor plan (hasFloorPlan)",
                "Floor plan images (floorPlanUrls)",
                "Address precision (addressPrecision)",
                "Departement (department)",
                "Departement code (departmentCode)",
                "Nearest transport (text) (transportText)",
                "Phone (international format) (phoneInternational)",
                "Agency listing reference (agencyReference)",
                "Agency city (agencyCity)",
                "Agency postcode (agencyZipCode)",
                "Agency legal entity (agencyLegalEntity)",
                "Agency head office (agencyHeadOffice)",
                "Source site (sourceSite)",
                "Description is a preview (descriptionIsPreview)",
                "Area market price per m2 (marketPricePerSqm)",
                "Area market price per m2, low (marketPricePerSqmLow)",
                "Area market price per m2, high (marketPricePerSqmHigh)",
                "Area market price change over 1 year % (marketPriceChange1YearPercent)",
                "Market price area (marketPriceArea)",
                "Market price date (marketPriceDate)",
                "Monthly life annuity (viager sales) (monthlyAnnuity)",
                "Price per m2 vs area market % (priceVsMarketPercent)"
              ]
            }
          },
          "monitorMode": {
            "title": "Monitor mode - only new listings",
            "type": "boolean",
            "description": "Remember which listings this Actor has already returned and emit only listings it has not delivered before. Ideal on a schedule for new-listing alerts. Already-delivered listings are skipped and never charged.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named key-value store that holds the monitor's memory. Use different names to track different searches independently.",
            "default": "seloger-monitor"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}