{
  "openapi": "3.0.1",
  "info": {
    "title": "Seloger Scraper - France Real Estate & Agency Leads",
    "description": "Scrape SeLoger.com property listings: sale and rental price, price per m2, rooms, living space, energy class, address and photos, plus each listing agency with its phone, address, SIRET and RCS. Independent tool, not affiliated with SeLoger.",
    "version": "0.1",
    "x-build-id": "EK91RR1PTQWmm18Ys"
  },
  "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": "French place slugs as Seloger writes them - <code>paris-75</code>, <code>lyon-69</code>, <code>marseille-13</code>, <code>bordeaux-33</code>. Each location is combined with every property type below. Narrower places return a much larger share of that market - see the README.",
            "items": {
              "type": "string"
            }
          },
          "dealType": {
            "title": "Deal type",
            "enum": [
              "achat",
              "locations"
            ],
            "type": "string",
            "description": "Buy or rent. Chateaux, whole buildings and mansions are published for sale only; those combinations are skipped before the request and nothing is charged for them."
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Which kinds of property to search for. Every value was verified live against Seloger. Leave empty to search all types at once.",
            "items": {
              "type": "string",
              "enum": [
                "appartement",
                "maison",
                "terrain",
                "parking",
                "loft",
                "chateau",
                "immeuble",
                "hotel-particulier"
              ],
              "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"
              ]
            }
          },
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "Seloger search pages to scrape, instead of (or as well as) the Locations above. Paste them, link a text file, or upload one. Only <code>/immobilier/</code> and <code>/recherche/</code> pages are requested - URLs that Seloger's robots.txt disallows (<code>/list.htm</code>) are skipped and reported.",
            "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": "Follow Seloger's related searches (go deeper)",
            "type": "boolean",
            "description": "Each Seloger results page publishes narrower searches of its own - nearby towns, districts, property sub-types and price bands. Turn this on to follow them, which is how you get well beyond one page of results for a city. Bounded by \"Max search pages\".",
            "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-35 listings per search page; 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 any followed from \"Follow Seloger's related searches\".",
            "default": 25
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings at or above this price, in EUR. Filtered listings are not charged."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings at or below this price, in EUR. Filtered listings are not charged."
          },
          "minRooms": {
            "title": "Min rooms",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep listings with at least this many rooms (pieces). 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. 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"
              ],
              "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)"
              ]
            }
          },
          "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 seen before. Ideal on a schedule for new-listing alerts. Already-seen 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}