{
  "openapi": "3.0.1",
  "info": {
    "title": "Aruodas Property Scraper",
    "description": "Scrape Aruodas.lt, Lithuania's number-one property portal: asking price, price per square metre, size, rooms, floor, year built, heating, energy class, GPS and the advertiser's phone. Sale and rent, apartments to plots, every city. JSON, CSV or Excel.",
    "version": "1.0",
    "x-build-id": "ge2TSfgzn7hHEkx2O"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~aruodas-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-aruodas-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~aruodas-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-aruodas-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~aruodas-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-aruodas-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": {
          "locations": {
            "title": "📍 Cities and towns",
            "uniqueItems": true,
            "type": "array",
            "description": "Where in Lithuania to search. Pick one place, several, or All Lithuania for the whole country in one sweep. One search runs per place and every row is stamped with the city it came from. The list is a fixed set on purpose: Aruodas answers an unknown place name with the WHOLE country instead of an error, so a free-text box would quietly bill you for the wrong result set.",
            "items": {
              "type": "string",
              "enum": [
                "all-lithuania",
                "vilniuje",
                "kaune",
                "klaipedoje",
                "siauliuose",
                "panevezyje",
                "alytuje",
                "marijampoleje",
                "mazeikiuose",
                "jonavoje",
                "utenoje",
                "kedainiuose",
                "telsiuose",
                "taurageje",
                "ukmergeje",
                "visagine",
                "palangoje",
                "plungeje",
                "kretingoje",
                "radviliskyje",
                "druskininkuose",
                "rokiskyje",
                "elektrenuose",
                "birzuose",
                "vilkaviskyje",
                "anyksciuose",
                "prienuose",
                "joniskyje",
                "kelmeje",
                "varenoje",
                "kaisiadoryse",
                "pasvalyje",
                "zarasuose",
                "kupiskyje",
                "moletuose",
                "skuode",
                "salcininkuose",
                "ignalinoje",
                "trakuose",
                "neringoje",
                "silaleje",
                "sirvintose",
                "lazdijuose",
                "pakruojyje",
                "raseiniuose",
                "sakiuose",
                "svencionyse",
                "jurbarke",
                "siluteje"
              ],
              "enumTitles": [
                "🇱🇹 All Lithuania",
                "📍 Vilnius",
                "📍 Kaunas",
                "📍 Klaipėda",
                "📍 Šiauliai",
                "📍 Panevėžys",
                "📍 Alytus",
                "📍 Marijampolė",
                "📍 Mažeikiai",
                "📍 Jonava",
                "📍 Utena",
                "📍 Kėdainiai",
                "📍 Telšiai",
                "📍 Tauragė",
                "📍 Ukmergė",
                "📍 Visaginas",
                "📍 Palanga",
                "📍 Plungė",
                "📍 Kretinga",
                "📍 Radviliškis",
                "📍 Druskininkai",
                "📍 Rokiškis",
                "📍 Elektrėnai",
                "📍 Biržai",
                "📍 Vilkaviškis",
                "📍 Anykščiai",
                "📍 Prienai",
                "📍 Joniškis",
                "📍 Kelmė",
                "📍 Varėna",
                "📍 Kaišiadorys",
                "📍 Pasvalys",
                "📍 Zarasai",
                "📍 Kupiškis",
                "📍 Molėtai",
                "📍 Skuodas",
                "📍 Šalčininkai",
                "📍 Ignalina",
                "📍 Trakai",
                "📍 Neringa",
                "📍 Šilalė",
                "📍 Širvintos",
                "📍 Lazdijai",
                "📍 Pakruojis",
                "📍 Raseiniai",
                "📍 Šakiai",
                "📍 Švenčionys",
                "📍 Jurbarkas",
                "📍 Šilutė"
              ]
            },
            "default": [
              "vilniuje"
            ]
          },
          "listingType": {
            "title": "🏷️ Sale or rent",
            "enum": [
              "sale",
              "rent"
            ],
            "type": "string",
            "description": "Which side of the market to read. For sale is much the larger pool nationwide. Land plots and garages are advertised for sale only on Aruodas, so those two are refused with rent rather than falling back to sale adverts.",
            "default": "sale"
          },
          "propertyCategory": {
            "title": "🏘️ Property type",
            "enum": [
              "apartment",
              "house",
              "homestead",
              "commercial",
              "land",
              "garage"
            ],
            "type": "string",
            "description": "Which kind of property. Apartments and houses each have separate sale and rent sections; homesteads and commercial premises do too. Land plots and garages exist for sale only.",
            "default": "apartment"
          },
          "maxResults": {
            "title": "🔢 Rows to collect",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "How many properties to return in total. When you pick several places the budget is shared evenly between them, and whatever one search does not use passes to the next — so choosing three cities gives you all three, not 100 rows of the first. Pages are 25 rows, so a search stops on the page that reaches its share. Nationwide apartment sales hold roughly 7,600 live adverts if you want the lot.",
            "default": 100
          },
          "fetchDetails": {
            "title": "📄 Full listing detail",
            "type": "boolean",
            "description": "Open every advert page as well as the results list, to add the advertiser's name and phone number, the full advert text, energy class, building type, window orientation, map coordinates and the complete photo set — 28 photos on a typical new-build against the 4 a results row carries. This fetches one extra page per property and bills the Full listing detail event per row, so leave it off for a price sweep and turn it on for a lead list.",
            "default": false
          },
          "priceMin": {
            "title": "💰 Price from (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest asking price to include, in euros. For rentals this is the monthly rent. Leave at 0 for no floor.",
            "default": 0
          },
          "priceMax": {
            "title": "💰 Price up to (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Highest asking price to include, in euros; for rentals, the monthly rent. Leave at 0 for no ceiling.",
            "default": 0
          },
          "pricePerSqmMax": {
            "title": "📊 Price per m² up to (€)",
            "minimum": 0,
            "type": "integer",
            "description": "Ceiling on the portal's own price-per-square-metre figure — capital price per m² on a sale advert, monthly rent per m² on a rental. Useful for finding value without fixing a total budget. 0 means no ceiling.",
            "default": 0
          },
          "areaMin": {
            "title": "📏 Size from (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Smallest floor area to include, in square metres. 0 means no floor.",
            "default": 0
          },
          "areaMax": {
            "title": "📏 Size up to (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Largest floor area to include, in square metres. 0 means no ceiling.",
            "default": 0
          },
          "roomsMin": {
            "title": "🛏️ Rooms from",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Fewest rooms to include. Lithuanian adverts count rooms, not bedrooms, so a two-room flat is a one-bedroom. 0 means no floor.",
            "default": 0
          },
          "roomsMax": {
            "title": "🛏️ Rooms up to",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Most rooms to include. 0 means no ceiling.",
            "default": 0
          },
          "floorMin": {
            "title": "🪜 Floor from",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Lowest floor to include — set 2 to skip ground-floor flats. 0 means no floor.",
            "default": 0
          },
          "floorMax": {
            "title": "🪜 Floor up to",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Highest floor to include. 0 means no ceiling.",
            "default": 0
          },
          "buildYearMin": {
            "title": "📅 Built from",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Earliest construction year to include — set 2015 to see modern stock only. 0 means no floor.",
            "default": 0
          },
          "buildYearMax": {
            "title": "📅 Built up to",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Latest construction year to include. 0 means no ceiling.",
            "default": 0
          },
          "listedWithinDays": {
            "title": "🆕 Listed in the last",
            "enum": [
              "0",
              "1",
              "2",
              "3",
              "7",
              "30"
            ],
            "type": "string",
            "description": "Only adverts published inside this window. This is the closest Aruodas gets to a transaction feed — Lithuania has no public sold-price register — so a daily run with 24 hours is how you watch new supply arrive.",
            "default": "0"
          },
          "sortBy": {
            "title": "↕️ Order results by",
            "enum": [
              "Importance",
              "AddDate",
              "Price",
              "PriceExp",
              "AreaOverall"
            ],
            "type": "string",
            "description": "How Aruodas orders the results before the actor reads them. It changes which properties you get first when you cap the row count, not how many exist.",
            "default": "Importance"
          },
          "searchUrls": {
            "title": "🔗 Aruodas search URLs",
            "type": "array",
            "description": "Optional. Set your filters on aruodas.lt, copy the URL out of the address bar and paste it here — the actor fetches it exactly as given and paginates from there. When this is filled in it replaces the city, sale-or-rent, property-type and filter fields above; everything else, including the row cap and Full listing detail, still applies.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}