{
  "openapi": "3.0.1",
  "info": {
    "title": "Preloved Scraper — UK Classified Ads, Prices & Photos",
    "description": "Scrape Preloved UK classified ads by keyword, category and location (town, city or postcode plus distance): title, price, ad type, category path, town, county, photos, posted and updated dates, seller type. Optional description, item details and views. Free items, wanted ads, pets. No login.",
    "version": "0.1",
    "x-build-id": "fuyXRKpa6GGnAnVBY"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/yugenox~preloved-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-yugenox-preloved-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/yugenox~preloved-scraper/runs": {
      "post": {
        "operationId": "runs-sync-yugenox-preloved-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/yugenox~preloved-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-yugenox-preloved-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": {
          "keywords": {
            "title": "🔎 Keywords",
            "type": "array",
            "description": "What to search for on Preloved, e.g. \"bike\", \"sofa\", \"lego\", \"ford transit\". Each keyword is searched separately (and in each location). Leave empty to browse a category or a place.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "🗂️ Categories",
            "type": "array",
            "description": "Only ads in these Preloved categories. Use the name as Preloved shows it (\"Bicycles\", \"Sofas\", \"Dogs\"), a path when a name is used twice (\"Cycling > Bicycles\"), the category ID, or a Preloved category link (https://www.preloved.co.uk/classifieds/cycling/bicycles). Several categories are searched together.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "📍 Location",
            "type": "string",
            "description": "A UK town, city or postcode, e.g. \"Manchester\", \"Leeds\", \"SW1A 1AA\". Leave empty to search the whole UK. A place Preloved doesn't recognise is skipped (and not charged) instead of returning ads from everywhere."
          },
          "locations": {
            "title": "📍 More locations",
            "type": "array",
            "description": "Run the same search in several places, e.g. \"Bristol\", \"Glasgow\".",
            "items": {
              "type": "string"
            }
          },
          "distance": {
            "title": "Distance",
            "enum": [
              "5",
              "10",
              "15",
              "20",
              "50",
              "100",
              "250",
              "400",
              "any"
            ],
            "type": "string",
            "description": "How far around the location to search. \"Any distance\" searches the whole UK with the nearest ads first.",
            "default": "20"
          },
          "maxItems": {
            "title": "Max ads",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of ads for the whole run, shared fairly between your searches (a search that finds fewer leaves its share to the others). 0 = everything.",
            "default": 100
          },
          "includeDetails": {
            "title": "Include ad details",
            "type": "boolean",
            "description": "Also read every ad's own record for the full description (search results show about 200 characters), the item details (condition, make, model, size, colour and other facts the seller filled in) and the view count. One extra request per ad.",
            "default": false
          },
          "startUrls": {
            "title": "🔗 Preloved links",
            "type": "array",
            "description": "Optional: Preloved search pages (https://www.preloved.co.uk/search?keyword=…, filters in the link are kept), category pages (https://www.preloved.co.uk/classifieds/…), Freeloved, or single ads (https://www.preloved.co.uk/adverts/show/…).",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "adType": {
            "title": "Ad type",
            "enum": [
              "all",
              "forsale",
              "wanted",
              "torent",
              "forloan",
              "swap",
              "event",
              "service",
              "lost",
              "found",
              "forstud",
              "other"
            ],
            "type": "string",
            "description": "Only one kind of listing. Empty = all.",
            "default": "all"
          },
          "sellerType": {
            "title": "Seller",
            "enum": [
              "all",
              "private",
              "business",
              "charity"
            ],
            "type": "string",
            "description": "Private sellers, businesses or charities. Who the seller is (name, profile, phone, e-mail) is never collected.",
            "default": "all"
          },
          "freeOnly": {
            "title": "Free items only (Freeloved)",
            "type": "boolean",
            "description": "Only items given away for free.",
            "default": false
          },
          "minPrice": {
            "title": "Min price (£)",
            "minimum": 0,
            "type": "integer",
            "description": "Only ads at or above this price."
          },
          "maxPrice": {
            "title": "Max price (£)",
            "minimum": 0,
            "type": "integer",
            "description": "Only ads at or below this price."
          },
          "maxAgeDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Only ads first posted in the last N days (newest first). Older ads that were just bumped are left out and not charged. Empty = any time."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "match",
              "mostRecent",
              "distance",
              "priceAsc",
              "priceDesc"
            ],
            "type": "string",
            "description": "Order of the results (and so which ads you get first when Max ads is lower than the total). \"Most recent\" = most recently posted or updated.",
            "default": "match"
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Requests in flight at the same time (1–5); it matters mostly with ad details on. The default 2 is polite and fast enough for most runs.",
            "default": 2
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy (datacenter) is the default and comes with every Apify plan. If Preloved refuses datacenter IPs for a while, the run switches to UK residential proxies when your account has them.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}