{
  "openapi": "3.0.1",
  "info": {
    "title": "Craigslist Scraper — Listings, Cars, Housing, Jobs",
    "description": "Scrape Craigslist in any of its 707 cities: for sale, cars & trucks, apartments, real estate, jobs, gigs, services. Keywords × cities × categories, every Craigslist filter, full listing details, phones, photos. Export to JSON, CSV or Excel.",
    "version": "0.0",
    "x-build-id": "zJFgoaXVhf7gw1HWc"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nice_dev~craigslist-listings-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nice_dev-craigslist-listings-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/nice_dev~craigslist-listings-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nice_dev-craigslist-listings-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/nice_dev~craigslist-listings-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nice_dev-craigslist-listings-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",
            "maxItems": 1000,
            "type": "array",
            "description": "Craigslist search-result URLs (`https://sfbay.craigslist.org/search/apa?min_price=2000…` — every filter set on the site is kept, all pages are read) or single listing URLs (`https://sfbay.craigslist.org/sfc/apa/d/sunny-1br/7973142960.html`, `https://www.craigslist.org/view/d/sunny-1br/b82qR4cCT97BWdKwmPhjBA`). When this list is not empty, the search fields below (keywords, locations, categories) are ignored; filters, caps and monitoring still apply. Max 1 000 URLs.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "query": {
            "title": "Search keyword",
            "maxLength": 200,
            "type": "string",
            "description": "Free-text search, exactly as typed on Craigslist (e.g. `mountain bike`). Empty = every listing of the category."
          },
          "searchQueries": {
            "title": "More search keywords",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several keywords in one run: one search per keyword (times each location below). Added to **Search keyword**; listings found by several searches are saved once.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "Category",
            "enum": [
              "sss",
              "cta",
              "cto",
              "ctd",
              "mca",
              "rva",
              "boo",
              "pta",
              "bia",
              "fua",
              "ela",
              "sya",
              "moa",
              "ppa",
              "tla",
              "hsa",
              "zip",
              "gms",
              "hhh",
              "apa",
              "roo",
              "sub",
              "rea",
              "reo",
              "reb",
              "off",
              "prk",
              "vac",
              "jjj",
              "ggg",
              "bbb",
              "ccc",
              "eee",
              "rrr"
            ],
            "type": "string",
            "description": "Craigslist section to search. `— all` groups the by-owner and by-dealer listings. Empty = `sss` (all for sale), unless **More categories** is filled: then only those."
          },
          "categories": {
            "title": "More categories",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Several categories in one run, as Craigslist abbreviations (`apa`, `cto`, `bik`, `sof`… — the code in the site's URL `/search/<code>`). Added to **Category** (leave it empty to search only these); each keyword is searched in each category and each location (max 500 searches).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "maxLength": 200,
            "type": "string",
            "description": "Craigslist city: its site name (`sfbay`, `newyork`, `london`), its name (`San Francisco`, `Toronto`) or a sub-area (`sfbay/eby`, `newyork/brk`). Also `state:CA` (every city of a US state / Canadian province) or `country:GB` (every city of a country). Empty = `sfbay`."
          },
          "locations": {
            "title": "More locations",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several cities in one run, same formats as **Location** (`seattle`, `sfbay/sfc`, `state:TX`, `country:US`). Every keyword is searched in every city and category (`country:US` alone = 413 cities; max 500).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max listings",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of listings to save for the whole run (after deduplication and filters). 0 = no limit.",
            "default": 100
          },
          "maxItemsPerQuery": {
            "title": "Max listings per search",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Cap for EACH search (keyword × location, or search URL), so that the first search cannot use up the whole **Max listings** budget. 0 = no per-search cap.",
            "default": 0
          },
          "includeDetails": {
            "title": "Open each listing (details)",
            "type": "boolean",
            "description": "Open every listing page for the full description, all photos, every attribute (odometer, VIN, bedrooms, pets, compensation…), the street address, the creation date and the e-mails written in the text (phone numbers: see **Include phone numbers**). Off by default = search-result fields only (title, price, GPS, first photo, update date), faster and cheaper (see Pricing).",
            "default": false
          },
          "splitLargeSearches": {
            "title": "Go past 10 000 results per search",
            "type": "boolean",
            "description": "Craigslist stops a search at 10 000 listings. When a search has more, split it automatically by price range (and by sub-area) until every listing is reached. Off = the first 10 000 only.",
            "default": true
          },
          "sort": {
            "title": "Sort by",
            "enum": [
              "date",
              "dateoldest",
              "priceasc",
              "pricedsc",
              "dist",
              "relevant"
            ],
            "type": "string",
            "description": "Order of the results. `Newest` = last update (reposted listings come back to the top). Default: newest, or most relevant with a keyword."
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Lowest price, in the city's currency."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Highest price, in the city's currency."
          },
          "postalCode": {
            "title": "ZIP / postal code",
            "pattern": "^[A-Za-z0-9 -]{2,12}$",
            "maxLength": 12,
            "type": "string",
            "description": "Search around this ZIP / postal code (with **Search distance**)."
          },
          "searchDistance": {
            "title": "Search distance",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Radius around the ZIP code, in the city's distance unit (miles in the US)."
          },
          "titleOnly": {
            "title": "Search titles only",
            "type": "boolean",
            "description": "Match the keyword in the title only (`srchType=T`).",
            "default": false
          },
          "hasImage": {
            "title": "Has image",
            "type": "boolean",
            "description": "Only listings with at least one photo.",
            "default": false
          },
          "postedToday": {
            "title": "Posted today",
            "type": "boolean",
            "description": "Only listings posted or updated today (Craigslist's own filter).",
            "default": false
          },
          "hideDuplicates": {
            "title": "Hide duplicates",
            "type": "boolean",
            "description": "Craigslist's `bundle duplicates`: one listing per group of near-identical posts.",
            "default": false
          },
          "sellerType": {
            "title": "Sold by",
            "enum": [
              "all",
              "owner",
              "dealer"
            ],
            "type": "string",
            "description": "For-sale, cars and real-estate categories: owner (private seller) or dealer / broker.",
            "default": "all"
          },
          "condition": {
            "title": "Condition",
            "uniqueItems": true,
            "type": "array",
            "description": "For-sale and vehicle categories.",
            "items": {
              "type": "string",
              "enum": [
                "10",
                "20",
                "30",
                "40",
                "50",
                "60"
              ],
              "enumTitles": [
                "new",
                "like new",
                "excellent",
                "good",
                "fair",
                "salvage"
              ]
            },
            "default": []
          },
          "freeOnly": {
            "title": "Free items only",
            "type": "boolean",
            "description": "For-sale categories: only listings given away for free (Craigslist's `free` filter).",
            "default": false
          },
          "deliveryAvailable": {
            "title": "Delivery available",
            "type": "boolean",
            "description": "For-sale categories.",
            "default": false
          },
          "cryptoOk": {
            "title": "Cryptocurrency OK",
            "type": "boolean",
            "description": "For-sale categories.",
            "default": false
          },
          "minBedrooms": {
            "title": "Min bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category."
          },
          "maxBedrooms": {
            "title": "Max bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category."
          },
          "minBathrooms": {
            "title": "Min bathrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category."
          },
          "maxBathrooms": {
            "title": "Max bathrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category."
          },
          "minSqft": {
            "title": "Min area",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category. In the city's area unit (ft² in the US)."
          },
          "maxSqft": {
            "title": "Max area",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category. In the city's area unit (ft² in the US)."
          },
          "catsOk": {
            "title": "Cats OK",
            "type": "boolean",
            "description": "Housing-for-rent categories only (apa, roo, sub, hhh…); refused in any other category.",
            "default": false
          },
          "dogsOk": {
            "title": "Dogs OK",
            "type": "boolean",
            "description": "Housing-for-rent categories only (apa, roo, sub, hhh…); refused in any other category.",
            "default": false
          },
          "furnished": {
            "title": "Furnished",
            "type": "boolean",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category.",
            "default": false
          },
          "noSmoking": {
            "title": "No smoking",
            "type": "boolean",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category.",
            "default": false
          },
          "wheelchairAccessible": {
            "title": "Wheelchair accessible",
            "type": "boolean",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category.",
            "default": false
          },
          "airConditioning": {
            "title": "Air conditioning",
            "type": "boolean",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category.",
            "default": false
          },
          "evCharging": {
            "title": "EV charging",
            "type": "boolean",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category.",
            "default": false
          },
          "housingType": {
            "title": "Housing type",
            "uniqueItems": true,
            "type": "array",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9",
                "10",
                "11",
                "12"
              ],
              "enumTitles": [
                "apartment",
                "condo",
                "cottage/cabin",
                "duplex",
                "flat",
                "house",
                "in-law",
                "loft",
                "townhouse",
                "manufactured",
                "assisted living",
                "land"
              ]
            },
            "default": []
          },
          "laundry": {
            "title": "Laundry",
            "uniqueItems": true,
            "type": "array",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "4",
                "2",
                "3",
                "5"
              ],
              "enumTitles": [
                "w/d in unit",
                "w/d hookups",
                "laundry in bldg",
                "laundry on site",
                "no laundry on site"
              ]
            },
            "default": []
          },
          "parking": {
            "title": "Parking",
            "uniqueItems": true,
            "type": "array",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7"
              ],
              "enumTitles": [
                "carport",
                "attached garage",
                "detached garage",
                "off-street parking",
                "street parking",
                "valet parking",
                "no parking"
              ]
            },
            "default": []
          },
          "rentPeriod": {
            "title": "Rent period",
            "uniqueItems": true,
            "type": "array",
            "description": "Housing-for-rent categories only (apa, roo, sub, hhh…); refused in any other category.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3"
              ],
              "enumTitles": [
                "daily",
                "weekly",
                "monthly"
              ]
            },
            "default": []
          },
          "availability": {
            "title": "Availability",
            "enum": [
              "all",
              "30",
              "beyond"
            ],
            "type": "string",
            "description": "Housing categories only (apa, roo, sub, hhh, rea…); refused in any other category.",
            "default": "all"
          },
          "makeModel": {
            "title": "Make and model",
            "maxLength": 100,
            "type": "string",
            "description": "Cars & trucks / motorcycles / RVs / boats only; refused in any other category. E.g. `toyota tacoma`."
          },
          "minYear": {
            "title": "Min model year",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Cars & trucks / motorcycles / RVs / boats only; refused in any other category."
          },
          "maxYear": {
            "title": "Max model year",
            "minimum": 0,
            "maximum": 2100,
            "type": "integer",
            "description": "Cars & trucks / motorcycles / RVs / boats only; refused in any other category."
          },
          "minMiles": {
            "title": "Min odometer",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Cars & trucks / motorcycles / RVs / boats only; refused in any other category."
          },
          "maxMiles": {
            "title": "Max odometer",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Cars & trucks / motorcycles / RVs / boats only; refused in any other category."
          },
          "titleStatus": {
            "title": "Title status",
            "uniqueItems": true,
            "type": "array",
            "description": "Cars & trucks / motorcycles / RVs / boats only; refused in any other category.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6"
              ],
              "enumTitles": [
                "clean",
                "salvage",
                "rebuilt",
                "parts only",
                "lien",
                "missing"
              ]
            },
            "default": []
          },
          "transmission": {
            "title": "Transmission",
            "uniqueItems": true,
            "type": "array",
            "description": "Cars & trucks / motorcycles / RVs / boats only; refused in any other category.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3"
              ],
              "enumTitles": [
                "manual",
                "automatic",
                "other"
              ]
            },
            "default": []
          },
          "fuel": {
            "title": "Fuel",
            "uniqueItems": true,
            "type": "array",
            "description": "Cars & trucks / motorcycles / RVs / boats only; refused in any other category.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "6"
              ],
              "enumTitles": [
                "gas",
                "diesel",
                "hybrid",
                "electric",
                "other"
              ]
            },
            "default": []
          },
          "drive": {
            "title": "Drive",
            "uniqueItems": true,
            "type": "array",
            "description": "Cars & trucks / motorcycles / RVs / boats only; refused in any other category.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3"
              ],
              "enumTitles": [
                "fwd",
                "rwd",
                "4wd"
              ]
            },
            "default": []
          },
          "bodyType": {
            "title": "Body type",
            "uniqueItems": true,
            "type": "array",
            "description": "Cars & trucks / motorcycles / RVs / boats only; refused in any other category.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9",
                "10",
                "11",
                "12",
                "13"
              ],
              "enumTitles": [
                "bus",
                "convertible",
                "coupe",
                "hatchback",
                "minivan",
                "offroad",
                "pickup",
                "sedan",
                "truck",
                "SUV",
                "wagon",
                "van",
                "other"
              ]
            },
            "default": []
          },
          "paintColor": {
            "title": "Paint color",
            "uniqueItems": true,
            "type": "array",
            "description": "Cars & trucks / motorcycles / RVs / boats only; refused in any other category.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "20",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9",
                "10",
                "11"
              ],
              "enumTitles": [
                "black",
                "blue",
                "brown",
                "green",
                "grey",
                "orange",
                "purple",
                "red",
                "silver",
                "white",
                "yellow",
                "custom"
              ]
            },
            "default": []
          },
          "cylinders": {
            "title": "Cylinders",
            "uniqueItems": true,
            "type": "array",
            "description": "Cars & trucks / motorcycles / RVs / boats only; refused in any other category.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8"
              ],
              "enumTitles": [
                "3",
                "4",
                "5",
                "6",
                "8",
                "10",
                "12",
                "other"
              ]
            },
            "default": []
          },
          "minMonthlyPayment": {
            "title": "Min monthly payment",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Cars & trucks / motorcycles / RVs / boats only; refused in any other category."
          },
          "maxMonthlyPayment": {
            "title": "Max monthly payment",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Cars & trucks / motorcycles / RVs / boats only; refused in any other category."
          },
          "employmentType": {
            "title": "Employment type",
            "uniqueItems": true,
            "type": "array",
            "description": "Jobs only.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4"
              ],
              "enumTitles": [
                "full-time",
                "part-time",
                "contract",
                "employee's choice"
              ]
            },
            "default": []
          },
          "telecommuting": {
            "title": "Telecommuting OK",
            "type": "boolean",
            "description": "Jobs only.",
            "default": false
          },
          "internship": {
            "title": "Internship",
            "type": "boolean",
            "description": "Jobs only.",
            "default": false
          },
          "nonprofit": {
            "title": "Non-profit organization",
            "type": "boolean",
            "description": "Jobs only.",
            "default": false
          },
          "paidGigsOnly": {
            "title": "Paid gigs",
            "enum": [
              "all",
              "yes",
              "no"
            ],
            "type": "string",
            "description": "Gigs only.",
            "default": "all"
          },
          "siteFilters": {
            "title": "Other Craigslist filters",
            "type": "object",
            "description": "Any other filter of the Craigslist search page, as `name: value` pairs taken from the site's URL (e.g. `{\"language\": \"5\", \"auto_cylinders\": [\"2\", \"4\"]}`). Filters Craigslist does not echo back are reported in the log.",
            "default": {}
          },
          "postedAfter": {
            "title": "Posted after",
            "type": "string",
            "description": "Only listings created on or after this date: `2026-09-01`, or a period before now such as `7 days`, `2 weeks`, `1 month` (API: `24 hours` and full ISO date-times work too). Reads the creation date of the listing page when details are on, otherwise the last update date shown in the search results (a reposted listing counts as new)."
          },
          "postedBefore": {
            "title": "Posted before",
            "type": "string",
            "description": "Only listings published on or before this date (the whole day is included), or older than a period such as `30 days`."
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the listings whose title contains one of these words, also inside a longer word (`car` drops `carport`); case and accents ignored.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "requirePhone": {
            "title": "Only listings with a phone number",
            "type": "boolean",
            "description": "Keep only the listings whose text shows at least one phone number (read on the listing page: needs **Open each listing**). It works with **Include phone numbers** on or off; the numbers themselves are only returned when it is on.",
            "default": false
          },
          "includeCompany": {
            "title": "Include the employer's name",
            "type": "boolean",
            "description": "Fill `companyName` with the employer named in the search results (job postings; most other categories name none). Charged per listing as **Company name found**, once per listing delivered with a name, on top of the listing and charged separately, see Pricing; a listing without a name costs nothing extra. No page is opened for it. Off (default) = `companyName` is always null and nothing is charged.",
            "default": false
          },
          "includePhones": {
            "title": "Include phone numbers",
            "type": "boolean",
            "description": "Fill `phones` with the phone numbers written in the listing. Charged per listing as **Phone number found**, once per listing delivered with at least one number (however many it has), on top of the listing and charged separately, see Pricing; a listing without a number costs nothing extra. With **Open each listing** on, the numbers are read in the title and in the text of the page; with it off, only in the title (a few listings write their number there). The Actor never opens « show contact info »: a number hidden there is returned only when the page itself already carries it (common on for-sale and car listings). Off (default) = `phones` is always empty and nothing is charged; **Only listings with a phone number** still works.",
            "default": false
          },
          "includeMarketStats": {
            "title": "Add market statistics by zone",
            "type": "boolean",
            "description": "Add one record, `MARKET_STATS`, to the run's key-value store (linked in the Output tab): the market figures of each zone — a city, a category, a housing type (rentals and real estate) and a currency, never two currencies in one zone — worked out from the listings this run delivers: number of listings and of priced listings, median, minimum, maximum and quartiles of the price, and the 5 cheapest listings with their gap in % to the median. In housing zones they are ranked by price per unit of area, one unit at a time (square feet and square metres are never mixed); elsewhere, or when a housing zone has too few areas, by total price. A price of 0 or 1 is not counted as a price. Nothing is added to the dataset and no page is read. Charged per zone delivered as **Zone market statistics**, charged separately, see Pricing. A zone needs at least 5 priced listings; up to 20 zones, the biggest first. Off (default) = no record and nothing is charged. With **Only new listings**, only the listings delivered in this run count: raise **Max listings** for a sample worth a zone.",
            "default": false
          },
          "includePriceChanges": {
            "title": "Report price changes",
            "type": "boolean",
            "description": "Needs **Only new listings**. A listing already delivered under this **Memory key** comes back, whole, when its price has changed since the run that delivered it: `previousPrice`, `priceChange`, `priceChangePct` and `priceChangedAt` are filled. Charged per listing as **Price change**, on top of the listing and charged separately, see Pricing; a listing whose price did not move is skipped and costs nothing, a hidden price (or a price of 0 or 1) is never a change. The memory also keeps the last price of every listing: the first run after you tick it learns the prices and reports no change. The search is read to its end (10,000 listings per search at most) because an older listing can change its price: a run takes longer than with **Only new listings** alone, which stops after 300 listings already delivered in a row (with a cap, after 80 % of the cap). Past that point, each listing already known and re-checked for a price change is charged a **Price check** (see Pricing; a listing without a price is read, never charged), an older listing that no run delivered stays out, as with **Only new listings** alone, and the run stops if its maximum cost cannot pay one. Off (default) = the four columns are always null, the search stops as before and nothing is charged.",
            "default": false
          },
          "aiLabels": {
            "title": "AI labels",
            "maxItems": 20,
            "uniqueItems": true,
            "type": "array",
            "description": "Topics to look for in each listing, one per line (up to 20 of 300 characters). The title and the text are read and `aiLabelMatches` lists the topics that apply, each with a score from 0 to 1. Give CONCRETE subjects, for example `clean title`, `brand new` or `low mileage`: an abstract judgement such as `scam` is recognised badly. Writing the name, a colon, then a sentence says what you mean and works best (`utilities included: utilities are included in the rent`). The title alone gives few results: tick **Open each listing** so the text of the listing page is read. Some subjects are still missed even when the listing says them plainly (for example a negotiable price written \"OBO\"): try your labels on a small run first. Charged as **AI label**, once per label you wrote for each listing it was asked on, whether the label applies or not, on top of the listing and charged separately, see Pricing; a listing with no text, one whose labels the run's maximum cost cannot all pay, or one written while the run is ending, is not evaluated and costs nothing extra. The option needs 2 GB of memory: with less it is skipped, with a warning, and nothing is charged. Off (default) = no label written, `aiLabelMatches` is always null and nothing is charged.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "onlyNew": {
            "title": "Only new listings",
            "type": "boolean",
            "description": "Skip the listings that a previous run (same **Memory key**) already delivered: they are not saved and not charged, and their page is not even opened. First run = everything is new.",
            "default": false
          },
          "stateKey": {
            "title": "Memory key",
            "pattern": "^[a-zA-Z0-9_-]{1,64}$",
            "maxLength": 64,
            "type": "string",
            "description": "Name of the memory used by **Only new listings**. Give each schedule / task its own key (e.g. `paris-rentals`) so that they do not share their memory. Letters, digits, `-` and `_`.",
            "default": "default"
          },
          "resetState": {
            "title": "Reset the memory",
            "type": "boolean",
            "description": "Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every listing again. Untick it afterwards.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy or your own proxies. Keep the default: it is included in the price. The residential Apify proxy is not available in this Actor.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of requests processed in parallel.",
            "default": 8
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 10,
            "maximum": 2000,
            "type": "integer",
            "description": "Most requests to the site in any 60 seconds, all of them counted: results pages, listing pages and the extra page read for a listing. A budget, not an even pace: up to this many can leave at once when the minute starts (spread them with the minimum delay below). Lower it if the site answers HTTP 429 / 403 in the log.",
            "default": 600
          },
          "minRequestIntervalMs": {
            "title": "Min delay between requests",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Smallest gap between two requests, in milliseconds. Unlike the per-minute rate, this spreads the requests evenly instead of letting them go out in a burst. 0 = no gap.",
            "default": 0
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Retries per request before it is marked as failed. Behind a proxy, a request the site turns away is also retried on a new proxy session up to 10 times without using up these retries.",
            "default": 5
          },
          "debugLog": {
            "title": "Debug log",
            "type": "boolean",
            "description": "Include debug messages in the run log.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}