{
  "openapi": "3.0.1",
  "info": {
    "title": "Craigslist Scraper: New Listings Alerts & Price Drops",
    "description": "Scrape Craigslist listings from any city: cars, apartments, real estate, for sale, jobs, gigs and services. Paste a search link or pick cities, category, keyword and filters. Schedule it: only new listings and price drops. Error rows are free.",
    "version": "0.1",
    "x-build-id": "WOxB7ygZdjmSdpSnC"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapewise~craigslist-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapewise-craigslist-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/scrapewise~craigslist-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapewise-craigslist-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/scrapewise~craigslist-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapewise-craigslist-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": "Craigslist links",
            "type": "array",
            "description": "Search results links from any Craigslist city site, one per line, for example https://newyork.craigslist.org/search/cta?query=tesla&max_price=40000. Set your filters on the site, copy the link from the address bar and paste it here: every filter in the link is kept. Listing links (one ad) also work and return the full listing page. Leave empty to search with the fields below. Also accepts 'searchUrls' and 'urls'.",
            "items": {
              "type": "string"
            }
          },
          "cities": {
            "title": "Cities",
            "type": "array",
            "description": "Craigslist sites to search, one per line: a city name (New York, Los Angeles, San Francisco, Chicago, Portland, ME), a borough or subarea (Brooklyn, Manhattan) or the site name from the address bar (newyork, losangeles, sfbay). Each city is a separate search with the category, keyword and filters below, and each row says which city it came from. Empty = New York. Also accepts 'city', 'locations' and 'sites'.",
            "items": {
              "type": "string"
            }
          },
          "category": {
            "title": "Category",
            "enum": [
              "allForSale",
              "cars",
              "carsByOwner",
              "carsByDealer",
              "motorcycles",
              "rvs",
              "boats",
              "autoParts",
              "bicycles",
              "furniture",
              "electronics",
              "computers",
              "cellPhones",
              "appliances",
              "tools",
              "toys",
              "clothing",
              "jewelry",
              "sportingGoods",
              "farmGarden",
              "free",
              "allHousing",
              "apartmentsForRent",
              "realEstateForSale",
              "rooms",
              "sublets",
              "vacationRentals",
              "parkingStorage",
              "officeCommercial",
              "allJobs",
              "gigs",
              "allServices",
              "community",
              "events"
            ],
            "type": "string",
            "description": "What to search in each city, from the Craigslist sections: for sale (cars, cars by owner or dealer, motorcycles, furniture, electronics, free stuff...), housing (apartments for rent, rooms, sublets, real estate for sale...), jobs, gigs, services, community and events. Empty = all for sale. For a section not in the list, use 'Category code'."
          },
          "categoryCode": {
            "title": "Category code (advanced)",
            "type": "string",
            "description": "Advanced. Any Craigslist category code from a search link (the three letters after /search/), for example cto (cars by owner), sof (software jobs) or fuo (furniture by owner). Overrides 'Category' when filled."
          },
          "query": {
            "title": "Keyword",
            "type": "string",
            "description": "Words to search for, as typed in the Craigslist search box, for example tesla model 3, iphone 15, studio or remote. Empty = every listing in the category. Also accepts 'searchTerm' and 'keyword'."
          },
          "searchTitlesOnly": {
            "title": "Search titles only",
            "type": "boolean",
            "description": "Off (default): the keyword is matched in the title and the description. On: only in the listing title, which gives fewer and more precise results.",
            "default": false
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Only listings at or above this price, as a whole number in the city's currency (monthly rent for rentals), for example 5000. Empty = no minimum."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Only listings at or below this price, as a whole number in the city's currency, for example 40000. Empty = no maximum."
          },
          "hasPic": {
            "title": "Has photo",
            "type": "boolean",
            "description": "Only listings with at least one photo. Off by default.",
            "default": false
          },
          "postedToday": {
            "title": "Posted today",
            "type": "boolean",
            "description": "Only listings posted or renewed today, by Craigslist's own filter. Off by default. For a daily feed, 'Only new listings since the last run' is more precise.",
            "default": false
          },
          "postalCode": {
            "title": "Near ZIP / postal code",
            "type": "string",
            "description": "Search around this ZIP or postal code, for example 10001 (Manhattan) or 94103 (San Francisco). Use it with a single city; the radius is set below."
          },
          "searchDistance": {
            "title": "Distance from ZIP (miles)",
            "minimum": 1,
            "type": "integer",
            "description": "Radius in miles around the ZIP or postal code, for example 25. Default 10. Used only when 'Near ZIP / postal code' is filled."
          },
          "minYear": {
            "title": "Model year from",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Vehicles: only this model year or newer, for example 2018. Works in cars, motorcycles, RVs and boats."
          },
          "maxYear": {
            "title": "Model year to",
            "minimum": 1900,
            "maximum": 2100,
            "type": "integer",
            "description": "Vehicles: only this model year or older, for example 2022."
          },
          "minMiles": {
            "title": "Minimum odometer (miles)",
            "minimum": 0,
            "type": "integer",
            "description": "Vehicles: only listings with at least this many miles on the odometer, for example 10000."
          },
          "maxMiles": {
            "title": "Maximum odometer (miles)",
            "minimum": 0,
            "type": "integer",
            "description": "Vehicles: only listings with at most this many miles on the odometer, for example 80000."
          },
          "makeModel": {
            "title": "Make and model",
            "type": "string",
            "description": "Vehicles: Craigslist's make and model filter, as free text, for example toyota camry or honda."
          },
          "sellerType": {
            "title": "Sold by",
            "enum": [
              "any",
              "owner",
              "dealer"
            ],
            "type": "string",
            "description": "For sale categories: Any (default), Owner (private sellers only) or Dealer (dealers only).",
            "default": "any"
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Housing: only listings with at least this many bedrooms, for example 2."
          },
          "maxBedrooms": {
            "title": "Maximum bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Housing: only listings with at most this many bedrooms."
          },
          "minBathrooms": {
            "title": "Minimum bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Housing: only listings with at least this many bathrooms, for example 1."
          },
          "minSqft": {
            "title": "Minimum size (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Housing: only listings with at least this many square feet, for example 600."
          },
          "maxSqft": {
            "title": "Maximum size (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Housing: only listings with at most this many square feet."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "newest",
              "oldest",
              "priceLowToHigh",
              "priceHighToLow",
              "relevance"
            ],
            "type": "string",
            "description": "Craigslist's own orders: Newest first (default), Oldest first, Price low to high, Price high to low, or Relevance. With a limit it also decides which listings you get, for example Price low to high plus 50 returns the 50 cheapest. 'Only new listings' always uses newest first.",
            "default": "newest"
          },
          "maxItems": {
            "title": "Max listings per search",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Stop each search (each link and each city) after this many listings, for example 50 (default). Craigslist lists at most 10,000 per search. 0 = as many as the site shows. You pay per listing delivered, so this caps the cost of each search.",
            "default": 50
          },
          "onlyNew": {
            "title": "Only new listings since the last run",
            "type": "boolean",
            "description": "For scheduled runs. Remembers which listings each search (with its filters) already returned, in a named key-value store in your account ('craigslist-scraper-memory'), and delivers only listings never returned before. Seen listings are not delivered and not charged. Uses the newest-first order. A run with nothing new costs nothing. Delete the store to start over.",
            "default": false
          },
          "trackPriceChanges": {
            "title": "Track price changes",
            "type": "boolean",
            "description": "Remembers the last price of every listing per search (same key-value store) and adds previousPrice, priceChange, priceChangePct and isPriceDrop to each row. Together with 'Only new listings', a run delivers new listings plus listings whose price changed since the last run.",
            "default": false
          },
          "onlyPriceDrops": {
            "title": "Price changes: only drops",
            "type": "boolean",
            "description": "With both options above on, listings you already have come back only when their price went down (price increases are skipped and not charged).",
            "default": false
          },
          "includeDetails": {
            "title": "Full listing page",
            "type": "boolean",
            "description": "Off (default): rows come from the search results (title, price, location, coordinates, first photo, date). On: also reads each listing's own page and adds the full description, attributes (year, make and model, condition, odometer, fuel, transmission, title status, bathrooms, housing type, laundry, parking, employment type, compensation), every photo and the date first posted. One extra request per listing, charged as a separate 'Listing details page' event.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy, default group, is used by default. If Craigslist keeps refusing it, the Actor switches to a stronger proxy group on its own, with no extra charge. Change it only to use your own proxies.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}