{
  "openapi": "3.0.1",
  "info": {
    "title": "Futurehome.al Scraper: Albania Real Estate, Offices & Agents",
    "description": "Scrape Futurehome.al, the Future Home real estate network in Albania: sale and rent listings with price in EUR or Lek, area, bedrooms, floor, coordinates and photos, plus offices and agents. Export CSV, Excel, JSON, XML.",
    "version": "0.1",
    "x-build-id": "UzlgHVkspbvJ6nSwc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/recordsdata~futurehome-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-recordsdata-futurehome-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/recordsdata~futurehome-scraper/runs": {
      "post": {
        "operationId": "runs-sync-recordsdata-futurehome-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/recordsdata~futurehome-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-recordsdata-futurehome-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Optional futurehome.al pages to read: an ad (futurehome.al/property/8081324/...), an office page (futurehome.al/office/future%20home%20unaza.html), an agent page (futurehome.al/agent/269-anisa-hysenbelliu.html), the offices list (futurehome.al/offices), the agents list (futurehome.al/agents) or any search or category page such as futurehome.al/vila-me-qera or futurehome.al/properties?business_type=sale&city=Durres. A search page brings its own filters, so the filters below are ignored for it. Leave empty to search with the filters below.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "listingIds": {
            "title": "Ad IDs",
            "type": "array",
            "description": "Optional list of ad ids (the number in the ad URL, for example 8081324) or full ad URLs. These ads are fetched directly with their full detail and the search filters are not applied to them. An id that is gone returns one free error row.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "references": {
            "title": "Reference codes",
            "type": "array",
            "description": "Optional list of reference codes exactly as shown on the ads (for example UNA17267 or AREA75192). Each code returns the ad that carries it, sale or rent. A code nobody uses returns one free error row.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000"
          },
          "recordTypes": {
            "title": "Record types",
            "type": "array",
            "description": "What to return. Listings: one row per ad (price in EUR or Lek, area, bedrooms, floor, address, coordinates, photos, agent and office). Offices: one row per Future Home office (address, city, ad count). Agents: one row per licensed agent (name, role, office). Every row counts toward Max Items; listings come first, then offices, then agents.",
            "items": {
              "type": "string",
              "enum": [
                "listings",
                "offices",
                "agents"
              ],
              "enumTitles": [
                "Listings (ads)",
                "Offices",
                "Agents"
              ]
            },
            "default": [
              "listings"
            ]
          },
          "fetchDetails": {
            "title": "Fetch full ad details",
            "type": "boolean",
            "description": "Open every ad for the full description, street address, coordinates, all photos, floor, views, publication date and the agent and office behind it. Billed as the listing-detail event on top of the listing. Turn off for a cheaper and faster list-only pass (price, bedrooms, bathrooms, area, place name, reference code and one photo).",
            "default": true
          },
          "operation": {
            "title": "Operation",
            "enum": [
              "sale",
              "rent",
              "both"
            ],
            "type": "string",
            "description": "Sale, monthly rent, or both. Every row says which one it is in the operation field. Rents are monthly.",
            "default": "sale"
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Only these property types. Leave empty for all of them. Each type is scanned in turn, so a small Max Items still mixes the types.",
            "items": {
              "type": "string",
              "enum": [
                "apartment",
                "duplex",
                "house",
                "villa",
                "studio",
                "penthouse",
                "bar-restaurant",
                "business-building",
                "commercial",
                "hotel",
                "warehouse",
                "shopping-mall",
                "office",
                "resort",
                "garage",
                "land"
              ],
              "enumTitles": [
                "Apartment",
                "Duplex",
                "House",
                "Villa",
                "Studio (garsoniere)",
                "Penthouse",
                "Bar / restaurant",
                "Business building",
                "Commercial space",
                "Hotel",
                "Warehouse / pavilion",
                "Shopping mall",
                "Office",
                "Resort",
                "Garage / parking",
                "Land"
              ]
            },
            "default": []
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "Only ads in these cities, for example Tirana, Durres, Vlore, Sarande or Shkoder. Accents and capitals do not matter (Durrës and durres both work) and every spelling the site uses for the town is included. Offices are filtered by city too. Leave empty for all of Albania.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "zones": {
            "title": "Neighbourhoods",
            "type": "array",
            "description": "Only ads in these neighbourhoods, as named in the site search, for example Blloku, Komuna e Parisit or Kodra e Diellit. Accents and capitals do not matter; a part of a name matches every neighbourhood that contains it (up to 12). Can be combined with Cities.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "bedrooms": {
            "title": "Bedrooms",
            "type": "array",
            "description": "Only ads with exactly this number of bedrooms, from 1 to 5, for example [2, 3]. Each value is scanned in turn. The site counts bedrooms as the number before the plus in 2+1. Leave empty for any.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "bathrooms": {
            "title": "Bathrooms",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Only ads with exactly this number of bathrooms, from 1 to 5. Leave empty or 0 for any."
          },
          "minPrice": {
            "title": "Min price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest price in euros (monthly rent in euros for rentals). The site filters on the euro price. Leave empty or 0 for no minimum."
          },
          "maxPrice": {
            "title": "Max price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest price in euros (monthly rent in euros for rentals). Leave empty or 0 for no maximum."
          },
          "minArea": {
            "title": "Min area (m2)",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest area in square meters, as the site search measures it. Leave empty or 0 for no minimum."
          },
          "maxArea": {
            "title": "Max area (m2)",
            "minimum": 0,
            "type": "integer",
            "description": "Largest area in square meters, as the site search measures it. Leave empty or 0 for no maximum."
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Optional word searched by the site in titles and descriptions, for example a street, a building name or pool. Leave empty to skip.",
            "default": ""
          },
          "maxRunSeconds": {
            "title": "Max run time (seconds)",
            "minimum": 30,
            "maximum": 86400,
            "type": "integer",
            "description": "Stop collecting after this many seconds and return what was gathered, so a very wide search never runs unbounded.",
            "default": 1800
          },
          "onlyNew": {
            "title": "Only new rows (monitor mode)",
            "type": "boolean",
            "description": "Only new rows: skip every ad, office or agent this same search already returned in an earlier run, so a scheduled run returns just the new ones and you are not charged for skipped rows. Max Items then means N new rows. Off by default.",
            "default": false
          },
          "stateKey": {
            "title": "Monitor name (optional)",
            "type": "string",
            "description": "Name of this monitor. Leave empty to derive it from your filters. Use a name to run two monitors with the same filters.",
            "default": ""
          },
          "resetSeen": {
            "title": "Forget previously seen rows",
            "type": "boolean",
            "description": "Clear the saved list for this monitor before the run, so everything counts as new again.",
            "default": false
          },
          "includeContactDetails": {
            "title": "Include business contact data",
            "type": "boolean",
            "description": "Add the business contacts the agency publishes on its public pages: the agent e-mail, phone and WhatsApp number, the office phone, and phone numbers or e-mails written inside ad descriptions. Without it those are removed and the rows keep only names, roles and the office. Off by default.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Not needed: runs of up to 50 rows read futurehome.al directly at a polite pace of about one request every 2.4 seconds. The site slows each IP down, so for bigger scans the actor uses the Apify datacenter proxy by itself (about ten times faster) and falls back to it if a small run gets throttled. Switch the proxy on here to force it from the first request.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}