{
  "openapi": "3.0.1",
  "info": {
    "title": "Hepsiemlak Scraper - Turkey Property Listings & Prices",
    "description": "Scrape hepsiemlak.com across all 81 Turkish provinces: satılık and kiralık listings with price, m², room layout, building age, floor, district, agency and photos.",
    "version": "1.0",
    "x-build-id": "fSecQTFYVYoFD5q2D"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~hepsiemlak-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-hepsiemlak-property-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/sian.agency~hepsiemlak-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-hepsiemlak-property-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/sian.agency~hepsiemlak-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-hepsiemlak-property-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": {
          "operation": {
            "title": "⚙️ What to do",
            "enum": [
              "search",
              "detail"
            ],
            "type": "string",
            "description": "Property Search returns about 23 listings per page from a province or district, for sale or to rent. Listing Lookup takes listing URLs you already hold and fetches each one on its own, adding coordinates, the full description, every photo, the amenity list and the agency phone numbers. Search costs a fraction of Lookup per listing and carries every field the results page shows, so pick Lookup only when you need those extras.",
            "default": "search"
          },
          "province": {
            "title": "📍 Province",
            "enum": [
              "istanbul",
              "ankara",
              "izmir",
              "antalya",
              "bursa",
              "adana",
              "konya",
              "gaziantep",
              "mersin",
              "kocaeli",
              "mugla",
              "balikesir",
              "aydin",
              "tekirdag",
              "samsun",
              "denizli",
              "sakarya",
              "kayseri",
              "manisa",
              "eskisehir",
              "trabzon",
              "hatay",
              "diyarbakir",
              "sanliurfa",
              "malatya",
              "erzurum",
              "van",
              "kahramanmaras",
              "ordu",
              "yalova",
              "canakkale",
              "edirne",
              "zonguldak",
              "afyonkarahisar",
              "sivas",
              "elazig",
              "kutahya",
              "isparta",
              "kirklareli",
              "duzce",
              "usak",
              "bolu",
              "nevsehir",
              "aksaray",
              "karabuk",
              "rize",
              "giresun",
              "tokat",
              "corum",
              "amasya",
              "kastamonu",
              "osmaniye",
              "karaman",
              "nigde",
              "burdur",
              "kirsehir",
              "kirikkale",
              "bilecik",
              "sinop",
              "batman",
              "mardin",
              "adiyaman",
              "erzincan",
              "bartin",
              "yozgat",
              "cankiri",
              "siirt",
              "agri",
              "kars",
              "mus",
              "bingol",
              "bitlis",
              "hakkari",
              "sirnak",
              "igdir",
              "ardahan",
              "artvin",
              "gumushane",
              "bayburt",
              "tunceli",
              "kilis",
              "kibris"
            ],
            "type": "string",
            "description": "Which province to search. All 81 provinces plus the Northern Cyprus section the portal carries, taken from the portal's own list. İstanbul, Ankara, İzmir, Antalya and Bursa hold the deepest inventory. Ignored when you paste your own search URLs below.",
            "default": "istanbul"
          },
          "district": {
            "title": "🏘️ District (optional)",
            "type": "string",
            "description": "Narrow to one district instead of the whole province — for example kadikoy, besiktas, cankaya, konak, muratpasa. Use the portal's own slug: lowercase, no Turkish accents, words joined by hyphens. Leave empty to search the whole province. On this portal a district is searched on its own, not underneath its province, so setting this replaces the province rather than adding to it.",
            "default": ""
          },
          "market": {
            "title": "🏷️ Market",
            "enum": [
              "satilik",
              "kiralik",
              "sezonluk-kiralik",
              "devren-satilik",
              "devren-kiralik",
              "kat-karsiligi-satilik"
            ],
            "type": "string",
            "description": "Which market to read. For sale and To rent are the two deep ones. The four others are real sections of the portal but carry far less inventory, so expect fewer pages.",
            "default": "satilik"
          },
          "propertyType": {
            "title": "🏡 Property type (optional)",
            "enum": [
              "any",
              "daire",
              "villa",
              "mustakil-ev",
              "residence",
              "yazlik",
              "bina",
              "prefabrik",
              "bungalov",
              "koy-evi",
              "ciftlik-evi",
              "kosk",
              "yali",
              "yali-dairesi",
              "dag-evi",
              "loft-daire",
              "kooperatif"
            ],
            "type": "string",
            "description": "Restrict the search to one residential property type. Leave on Any type to read every type in the market. Apartment and Villa carry the bulk of the inventory; the rarer types return only a handful of pages.",
            "default": "any"
          },
          "roomLayout": {
            "title": "🛏️ Room layout (optional)",
            "enum": [
              "any",
              "studyo",
              "1-1",
              "2-1",
              "3-1",
              "4-1",
              "4-2",
              "5-1",
              "5-2",
              "6-1",
              "6-2"
            ],
            "type": "string",
            "description": "Turkish listings describe size as rooms plus living rooms — 3+1 means three bedrooms and one living room. Leave on Any layout to read every size. 2+1 and 3+1 are by far the most common.",
            "default": "any"
          },
          "searchUrls": {
            "title": "🔗 Or paste hepsiemlak search URLs",
            "type": "array",
            "description": "Paste one or more hepsiemlak.com search URLs and they are used exactly as given, overriding every field above. Build the search you want on the site, copy the address bar, paste it here. Any filter the portal supports in a URL works this way, including the ones this actor does not expose as a field.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "🔢 Maximum listings",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Stop after this many listings. Pages hold about 23 listings each, so 100 is a little over four pages. Raise it to read a whole market — İstanbul for sale held 31,718 listings when this was measured.",
            "default": 100
          },
          "minPrice": {
            "title": "💰 Minimum price (TL)",
            "minimum": 0,
            "type": "integer",
            "description": "Only listings at or above this price, in Turkish lira. Leave at 0 for no minimum. Applied by the portal, so filtered-out listings are never fetched and never billed.",
            "default": 0
          },
          "maxPrice": {
            "title": "💰 Maximum price (TL)",
            "minimum": 0,
            "type": "integer",
            "description": "Only listings at or below this price, in Turkish lira. Leave at 0 for no maximum. Applied by the portal, so filtered-out listings are never fetched and never billed.",
            "default": 0
          },
          "minAreaSqm": {
            "title": "📐 Minimum gross area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Only listings at or above this gross area. Leave at 0 for no minimum. Turkish listings quote both gross and net area; this filter and the area on a search row are both the gross figure.",
            "default": 0
          },
          "maxAreaSqm": {
            "title": "📐 Maximum gross area (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Only listings at or below this gross area. Leave at 0 for no maximum.",
            "default": 0
          },
          "postedWithin": {
            "title": "🗓️ Posted within",
            "enum": [
              "any",
              "today",
              "last-three-days",
              "last-one-week",
              "last-fifteen-days",
              "last-one-month",
              "last-two-months"
            ],
            "type": "string",
            "description": "Only listings first posted or refreshed inside this window. Useful on a schedule: run it daily with Today and you collect the new stock rather than re-reading the whole market.",
            "default": "any"
          },
          "listingUrls": {
            "title": "🔗 Listing URLs",
            "type": "array",
            "description": "For Listing Lookup only. Paste hepsiemlak listing page URLs — the listingUrl on every search row is exactly this, so the usual route is to run a search first and feed the URLs you want in here. Each one is fetched on its own and returns the full record with coordinates, description, photos, amenities and agency phone numbers. A bare listing number on its own is not enough: the portal's listing address also encodes the province, district and property type, and it has no lookup-by-number route.",
            "default": [],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}