{
  "openapi": "3.0.1",
  "info": {
    "title": "Craigslist Scraper & API - Listings, Prices, Cars, Homes, Jobs",
    "description": "Craigslist scraper and API for any Craigslist site (US, Canada, UK, worldwide): keywords, areas, categories, price, ZIP + radius or search URLs, past the 10,000 cap. One result = one listing: title, price, place, date, photos, URL; details included. $0.45 per 1,000, no start fee.",
    "version": "1.0",
    "x-build-id": "chv9HoawXTgyKdtyP"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rel8ble~craigslist-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rel8ble-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/rel8ble~craigslist-scraper/runs": {
      "post": {
        "operationId": "runs-sync-rel8ble-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/rel8ble~craigslist-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-rel8ble-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": {
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Optional. What you would type into the Craigslist search box, one per line: \"bike\", \"iphone 13\", \"toyota tacoma\", \"couch\", \"2 bedroom\". Each keyword is one search (times each category and area). Leave empty to list a whole category instead.",
            "items": {
              "type": "string"
            }
          },
          "areas": {
            "title": "Areas (Craigslist sites)",
            "type": "array",
            "description": "Craigslist sites to search, one per line: the site name from the address (sfbay.craigslist.org = \"sfbay\", \"newyork\", \"losangeles\", \"chicago\", \"seattle\", \"london\", \"toronto\", \"berlin\"), an area name (\"SF bay area\"), a sub-area (\"newyork/brk\", \"brooklyn\", \"south bay\"), or a country code for every site in it (\"US\" = 413 sites, \"CA\", \"GB\", \"AU\"). Several = one search per area. Needed unless you give a postalCode or startUrls. A country counts as one search: maxResults applies to all its sites together.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Optional. Craigslist category codes or names, one per line. The code is the part after /search/ in a Craigslist URL (/search/bia = bicycles). Main ones: sss = for sale (all), bia = bicycles, cta = cars & trucks, fua = furniture, ela = electronics, zip = free stuff, hhh = housing (all), apa = apartments / housing for rent, jjj = jobs (all), ggg = gigs (all), bbb = services (all), ccc = community (all). Narrower ones work too: \"cto\" (cars & trucks by owner), \"mca\" (motorcycles), \"moa\" (cell phones), \"sya\" (computers), \"roo\" (rooms), \"sof\" (software jobs). Several = one search per category. Empty = \"sss\" (everything for sale).",
            "items": {
              "type": "string"
            }
          },
          "postalCode": {
            "title": "Postal / ZIP code",
            "type": "string",
            "description": "Optional. Search around a US ZIP or other postal code instead of whole areas, e.g. \"94110\" or \"10001\"; combine with distanceMiles. Craigslist picks the right site(s) itself, so areas are not needed (and not used) with a postal code. Rows then carry distanceMiles."
          },
          "distanceMiles": {
            "title": "Distance from the postal code (miles)",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Optional, only used with postalCode. Search radius in miles, e.g. 5, 10, 25, 50. Empty = the site's default around that code."
          },
          "priceMin": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Lowest price in whole units of the local currency (USD on US sites), e.g. 50. Empty = no minimum. Listings without a price are left out by any price filter, as on the website."
          },
          "priceMax": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Highest price in whole units of the local currency, e.g. 500. Empty = no maximum."
          },
          "hasImage": {
            "title": "Only listings with photos",
            "type": "boolean",
            "description": "Optional boolean, default false. true = only listings that have at least one photo (\"has image\").",
            "default": false
          },
          "postedToday": {
            "title": "Posted today only",
            "type": "boolean",
            "description": "Optional boolean, default false. true = only listings posted today (\"posted today\"). Good for daily schedules.",
            "default": false
          },
          "searchTitlesOnly": {
            "title": "Search titles only",
            "type": "boolean",
            "description": "Optional boolean, default false. true = keywords must appear in the title, not just the description (fewer, more exact matches).",
            "default": false
          },
          "bundleDuplicates": {
            "title": "Bundle duplicates",
            "type": "boolean",
            "description": "Optional boolean, default false. true = postings Craigslist marks as duplicates (the same item re-posted) are collapsed into one row (the newest), with duplicateCount saying how many copies were folded in.",
            "default": false
          },
          "sellerType": {
            "title": "Seller type (for-sale categories)",
            "enum": [
              "any",
              "owner",
              "dealer"
            ],
            "type": "string",
            "description": "Optional. \"any\" (default), \"owner\" (private sellers, \"by owner\") or \"dealer\" (businesses, \"by dealer\"). Only has an effect in for-sale categories.",
            "default": "any"
          },
          "sort": {
            "title": "Sort by",
            "enum": [
              "newest",
              "oldest",
              "price_asc",
              "price_desc",
              "relevance",
              "distance"
            ],
            "type": "string",
            "description": "Optional. \"newest\" (default; use it on a schedule to catch new listings), \"oldest\", \"price_asc\", \"price_desc\", \"relevance\" or \"distance\" (needs postalCode).",
            "default": "newest"
          },
          "startUrls": {
            "title": "Craigslist URLs",
            "type": "array",
            "description": "Optional. URLs copied from craigslist.org, one per line. A search URL (\"https://sfbay.craigslist.org/search/cta?auto_make_model=toyota&max_price=15000\", \"https://www.craigslist.org/search/area/newyork?cat=apa&min_bedrooms=2\") is scraped with every filter in it, including category-specific ones (make/model, odometer, bedrooms, condition ...); the fields above are not applied to it. A posting URL (\"https://sfbay.craigslist.org/pen/bik/d/.../7945993826.html\" or \"https://www.craigslist.org/view/d/.../<id>\") is looked up directly with full details.",
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "Max listings per search",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Maximum listings saved per search (one keyword x category x area, or one URL), integer >= 0. Default 100; 0 = every listing the search has. You pay per listing saved ($0.00045 each), so 1,000 listings = $0.45. Use 10-20 for a quick answer.",
            "default": 100
          },
          "deepSearch": {
            "title": "Deep search (go past the 10,000-listing limit)",
            "type": "boolean",
            "description": "Optional boolean, default true. One Craigslist search lists at most 10,000 postings. With deep search on, a bigger search is split automatically by sub-area, then category, then price band, and the results are merged without duplicates. Only kicks in when maxResults is above 10,000 (or 0). Costs extra requests and time, not extra money per listing.",
            "default": true
          },
          "includeDetails": {
            "title": "Include posting details (slower)",
            "type": "boolean",
            "description": "Optional boolean. false (default) = data from the search: title, price, place, neighborhood, approximate map position, date, category, all photos, plus bedrooms / sqft (housing), odometer (cars), salary / company (jobs); about 1,000 listings per request. true = also open each posting for the full description (e-mails and phone numbers masked), all attributes (condition, make / model, year, size, type ...), notices, exact posted and updated time. Same price per listing, about 1 extra request per listing.",
            "default": false
          },
          "includeNearbyAreas": {
            "title": "Include results from nearby areas",
            "type": "boolean",
            "description": "Optional boolean, default false. When an area has few matches, Craigslist adds postings from nearby sites below them. false = keep only the area you searched; true = keep those too (marked isNearbyArea: true).",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Optional, advanced. Parallel requests, integer 1-20. Default 5; requests are also paced to stay polite. Leave unset.",
            "default": 5
          },
          "maxRequestRetries": {
            "title": "Max retries per request",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Optional, advanced. Retries per failed or blocked request, integer 0-20; each retry uses a new session (and proxy IP when a proxy is on). Default 8. Leave unset.",
            "default": 8
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional, advanced. Apify Proxy settings object. Default {\"useApifyProxy\": true} (datacenter proxy, enough for Craigslist). Leave unset.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}