{
  "openapi": "3.0.1",
  "info": {
    "title": "GetHome.pl Scraper",
    "description": "Scrape gethome.pl - Polish real-estate listings for sale and rent, resale and new developer projects. Get prices, area, rooms, floor, address, coordinates, photos and seller contacts. Filter by city, district, price and rooms, plus cheap incremental monitoring of new offers and price drops.",
    "version": "0.1",
    "x-build-id": "OQvqGDptKUoqq8ZtG"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/trev0n~gethome-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-trev0n-gethome-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/trev0n~gethome-scraper/runs": {
      "post": {
        "operationId": "runs-sync-trev0n-gethome-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/trev0n~gethome-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-trev0n-gethome-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": {
          "city": {
            "title": "🏙️ City",
            "type": "string",
            "description": "City to search, in plain Polish — e.g. Warszawa, Kraków, Gdańsk, Wrocław. Leave empty to search all of Poland (or use Start URLs instead)."
          },
          "district": {
            "title": "📍 District",
            "type": "string",
            "description": "Optional district inside the city — e.g. Mokotów, Śródmieście, Krowodrza. Requires City to be filled in."
          },
          "searchType": {
            "title": "🤝 Transaction",
            "enum": [
              "sprzedaz",
              "wynajem"
            ],
            "type": "string",
            "description": "Buy or rent.",
            "default": "sprzedaz"
          },
          "propertyType": {
            "title": "🏠 Property type",
            "enum": [
              "",
              "mieszkanie",
              "dom",
              "dzialka"
            ],
            "type": "string",
            "description": "Type of property. Leave as 'All types' to include flats, houses and plots.",
            "default": "mieszkanie"
          },
          "marketType": {
            "title": "🏗️ Market",
            "enum": [
              "",
              "wtorny",
              "pierwotny"
            ],
            "type": "string",
            "description": "Secondary market (resale) or primary market (brand-new, sold by developers). Leave as 'Both' to include everything. Ignored for plots.",
            "default": ""
          },
          "startUrls": {
            "title": "🔗 Start URLs",
            "type": "array",
            "description": "Paste GetHome.pl listing, offer or development URLs to scrape them directly. Listing pages are paginated automatically; filters embedded in the URL are respected.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "priceMin": {
            "title": "💰 Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price in PLN (monthly rent when searching rentals)."
          },
          "priceMax": {
            "title": "💰 Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price in PLN (monthly rent when searching rentals)."
          },
          "areaMin": {
            "title": "📐 Min area",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum floor area in square metres."
          },
          "areaMax": {
            "title": "📐 Max area",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum floor area in square metres."
          },
          "roomsMin": {
            "title": "🛏️ Min rooms",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Minimum number of rooms."
          },
          "roomsMax": {
            "title": "🛏️ Max rooms",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum number of rooms."
          },
          "priceM2Min": {
            "title": "📊 Min price per m²",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price per square metre in PLN."
          },
          "priceM2Max": {
            "title": "📊 Max price per m²",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price per square metre in PLN."
          },
          "buildYearMin": {
            "title": "🗓️ Built after",
            "minimum": 1800,
            "maximum": 2100,
            "type": "integer",
            "description": "Only properties built in or after this year."
          },
          "buildYearMax": {
            "title": "🗓️ Built before",
            "minimum": 1800,
            "maximum": 2100,
            "type": "integer",
            "description": "Only properties built in or before this year."
          },
          "floorMin": {
            "title": "🏢 Min floor",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Lowest acceptable floor (0 = ground floor)."
          },
          "floorMax": {
            "title": "🏢 Max floor",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Highest acceptable floor."
          },
          "sellerType": {
            "title": "👤 Seller",
            "enum": [
              "",
              "private",
              "agency",
              "developer"
            ],
            "type": "string",
            "description": "Restrict results to a kind of seller — private owners only (no agents), agencies, or developers.",
            "default": ""
          },
          "includeKeywords": {
            "title": "✅ Must contain",
            "type": "array",
            "description": "Keep only offers whose title, description, address or agency name contains at least one of these words. Works best together with 'Fetch full details' — without it only the title and the portal's short summary are searched.",
            "items": {
              "type": "string"
            }
          },
          "excludeKeywords": {
            "title": "🚫 Must not contain",
            "type": "array",
            "description": "Drop offers whose title, description, address or agency name contains any of these words. Works best together with 'Fetch full details' — without it only the title and the portal's short summary are searched.",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "↕️ Sort by",
            "enum": [
              "newest",
              "price_asc",
              "price_desc",
              "price_m2_asc",
              "price_m2_desc",
              "area_asc",
              "area_desc"
            ],
            "type": "string",
            "description": "Result order. 'Newest first' is what monitoring runs want — it also makes early-stop pagination possible.",
            "default": "newest"
          },
          "extractDetails": {
            "title": "📖 Fetch full details",
            "type": "boolean",
            "description": "Fetch each offer's own page for the complete description, amenities, heating and legal status, the contact phone number and the full photo gallery. Slower and more expensive — the fast mode already returns price, area, rooms, floor, address, coordinates, photos and the agency.",
            "default": false
          },
          "expandInvestments": {
            "title": "🏗️ Expand new developments into individual flats",
            "type": "boolean",
            "description": "GetHome shows a brand-new development as ONE row. Turn this on to get every individual flat inside it (unit number, exact area, floor and price) instead. Greatly increases the number of results on the primary market.",
            "default": false
          },
          "maxItems": {
            "title": "🔢 Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many results. Set 0 for unlimited (bounded by what the portal serves).",
            "default": 50
          },
          "maxPages": {
            "title": "📄 Max pages per search",
            "minimum": 0,
            "maximum": 400,
            "type": "integer",
            "description": "Cap the number of result pages per search. 0 = no cap. The portal itself serves at most 400 pages (10 000 results) per search.",
            "default": 0
          },
          "maxConcurrency": {
            "title": "⚡ Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many detail requests to run in parallel.",
            "default": 10
          },
          "compact": {
            "title": "🗜️ Compact output",
            "type": "boolean",
            "description": "Emit only the essential fields — handy for AI pipelines and spreadsheets.",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "🧹 Drop empty fields",
            "type": "boolean",
            "description": "Remove fields that are empty for a given offer instead of emitting nulls.",
            "default": false
          },
          "incrementalMode": {
            "title": "🔄 Incremental monitoring",
            "type": "boolean",
            "description": "Track state across runs and emit only NEW / UPDATED / REAPPEARED offers. The first run builds a baseline; later runs return just the difference — ideal for cheap daily monitoring of new listings and price drops.",
            "default": false
          },
          "stateKey": {
            "title": "🔑 Monitoring state key",
            "type": "string",
            "description": "Name of the saved state for incremental runs. Leave empty to derive it from your search settings. Use an explicit key when several schedules should share one baseline.",
            "default": ""
          },
          "earlyStopPages": {
            "title": "⏱️ Early-stop after N quiet pages",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "During incremental runs, stop paging once this many consecutive pages contain nothing new. Keeps daily monitoring runs to a couple of requests. 0 disables early stopping.",
            "default": 2
          },
          "emitUnchanged": {
            "title": "📋 Also emit unchanged offers",
            "type": "boolean",
            "description": "Include offers that have not changed since the previous run. Turns incremental mode into a full snapshot and disables early stopping.",
            "default": false
          },
          "emitExpired": {
            "title": "🗑️ Also emit disappeared offers",
            "type": "boolean",
            "description": "Emit a record for offers that vanished since the previous run (sold, rented or withdrawn). Disables early stopping.",
            "default": false
          },
          "skipReposts": {
            "title": "♻️ Skip reposts",
            "type": "boolean",
            "description": "Drop offers that look like a re-listing of something that recently disappeared (same content, new id).",
            "default": false
          },
          "webhookUrl": {
            "title": "🪝 Webhook URL",
            "type": "string",
            "description": "POST the changed offers as JSON to this URL after each run.",
            "default": ""
          },
          "telegramBotToken": {
            "title": "📨 Telegram bot token",
            "type": "string",
            "description": "Send a summary of new and changed offers to Telegram."
          },
          "telegramChatId": {
            "title": "💬 Telegram chat id",
            "type": "string",
            "description": "Chat or channel that should receive the Telegram messages.",
            "default": ""
          },
          "discordWebhookUrl": {
            "title": "🎮 Discord webhook URL",
            "type": "string",
            "description": "Post new and changed offers to a Discord channel."
          },
          "slackWebhookUrl": {
            "title": "💼 Slack webhook URL",
            "type": "string",
            "description": "Post new and changed offers to a Slack channel."
          },
          "notifyOnlyChanges": {
            "title": "🔕 Only notify when something changed",
            "type": "boolean",
            "description": "Stay silent when a monitoring run finds nothing new.",
            "default": true
          },
          "notificationLimit": {
            "title": "🔢 Offers per notification",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many offers to list in a notification message before summarising the rest.",
            "default": 10
          },
          "includeRunSummary": {
            "title": "📊 Include run summary",
            "type": "boolean",
            "description": "Add the run's counters to the webhook payload.",
            "default": true
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "GetHome.pl does not require a proxy — leave this off for the cheapest, fastest runs. Enable it only if you run at very high volume.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}