{
  "openapi": "3.0.1",
  "info": {
    "title": "PropertyRoom Scraper - Police Auction Lots & Consignors",
    "description": "From $0.90 per 1,000 rows, no start fee. Every open lot on PropertyRoom, the auctioneer for US police and municipal seized property: live bid, bid count, close time, condition, photos, and the consignor's name, street, city, state, ZIP and phone. 16,092 lots counted; 6,618 unreachable by category.",
    "version": "0.1",
    "x-build-id": "38mpPYTaO5z6B7gaj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~propertyroom-lot-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-propertyroom-lot-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/scrapersdelight~propertyroom-lot-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-propertyroom-lot-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/scrapersdelight~propertyroom-lot-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-propertyroom-lot-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": {
          "source": {
            "title": "Where to enumerate lots from",
            "enum": [
              "catalogue",
              "sitemap"
            ],
            "type": "string",
            "description": "CATALOGUE walks /c/ browse pages, which the site publishes in closing-soonest order. A capped run in that order stops after a few pages, so it is much cheaper — measured $0.0012 of platform usage for 25 rows against $0.0389 through the sitemap, because the sitemap path must read a 4.6 MB document plus the live state of all 16,092 lots before it can sort them. That is roughly $0.047 of fixed cost before the first row, so the sitemap only pays for itself above about 100 rows; below that the run says so in RUN_SUMMARY. Use SITEMAP when you need the 6,524 lots the browse pages omit, when you are pulling thousands of rows anyway, or when you are sorting by price or bid count across the whole site. Categories are ignored in sitemap mode — the sitemap does not say which category a lot sits in.",
            "default": "catalogue"
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "PropertyRoom category slugs, OR-ed. Top level with the lot count measured on 2026-09-18: jewelry (3,762) · everything-else (1,245) · collectibles (1,222) · electronics (877) · coins (746) · tools-and-equipment (729) · fashion (635) · watches (532) · fine-art (213) · sunglasses-and-eyewear (161) · musical-instruments (149) · computers (120) · vehicles (73) · bikes (18) · steal-of-the-day (11). Sub-category slugs work too — take them from any /c/ URL, e.g. \"jewelry_diamond-jewelry\" or \"coins_precious-metal_silver\". Leave empty to walk \"propertyroom\", the site's own all-items catalogue (9,568 lots). Ignored when Source is set to the sitemap.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "lotIds": {
            "title": "Specific lot IDs",
            "type": "array",
            "description": "Re-check known lots and skip enumeration entirely — the cheapest way to watch a shortlist of prices. The lot ID is the number at the end of a listing URL, e.g. \"18955621\" from https://www.propertyroom.com/l/some-slug/18955621. Overrides Categories.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "listingStatus": {
            "title": "Listing status",
            "enum": [
              "any",
              "open",
              "scheduled",
              "closed"
            ],
            "type": "string",
            "description": "PropertyRoom's own status code. OPEN lots take bids now. SCHEDULED lots are published with a price and a close date but no bid has ever landed on one in our sample — the soonest opened 25 hours out. CLOSED lots are past their close time; for those, soldPriceUsd is filled when the lot actually received a bid.",
            "default": "any"
          },
          "auctionFormats": {
            "title": "Auction format",
            "type": "array",
            "description": "Keep only these formats. Measured on a random 1,000: Auction 753, Fixed Price 233, Reserve Auction 11, Bid to be Approved 3. Leave empty for all four.",
            "items": {
              "type": "string",
              "enum": [
                "Auction",
                "Reserve Auction",
                "Fixed Price",
                "Bid to be Approved Auction"
              ]
            },
            "default": []
          },
          "bidState": {
            "title": "Bidding activity",
            "enum": [
              "any",
              "noBidsYet",
              "hasBids"
            ],
            "type": "string",
            "description": "Measured on a random 1,000 lots: 58 carried at least one bid. Note that a lot with no bids still shows a price — that is its opening ask, not a bid, and bidCount tells the two apart.",
            "default": "any"
          },
          "minCurrentPrice": {
            "title": "Minimum current price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only lots at or above this price. Measured spread across 1,000 open lots: median $32, maximum $3,999."
          },
          "maxCurrentPrice": {
            "title": "Maximum current price (USD)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only lots at or below this — the bargain filter. Combine with \"No bids yet\" to find lots nobody has touched."
          },
          "maxBidCount": {
            "title": "Maximum bid count",
            "minimum": 0,
            "type": "integer",
            "description": "Skip lots that already have a bidding war on them. 0 is the same as \"No bids yet\"."
          },
          "closingWithinHours": {
            "title": "Closing within N hours",
            "minimum": 1,
            "type": "integer",
            "description": "Keep only lots whose countdown is under this many hours — the \"what can I still win today\" filter. Read from PropertyRoom's own countdown, so it costs nothing to apply."
          },
          "titleContains": {
            "title": "Title contains",
            "type": "array",
            "description": "Keep only lots whose title contains one of these words (case-insensitive), e.g. [\"rolex\", \"14k\", \"macbook\"]. Multiple entries are OR-ed. Matched against the listing title on category pages and against the URL slug in sitemap mode — both of which PropertyRoom derives from the same title. PropertyRoom's own search page is robots-disallowed, so this is a filter over the catalogue rather than a site search.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "endingSoonest",
              "endingLatest",
              "priceLowest",
              "priceHighest",
              "mostBids",
              "newestListed",
              "asListed"
            ],
            "type": "string",
            "description": "Ending-soonest means soonest among lots that are still OPEN — a lot that has already closed has a negative countdown, and sorting on that naively would fill your first page with yesterday's dead lots. Closed lots follow, most recently closed first. Ending-soonest and As-listed match the site's own browse order, so in catalogue mode they let the walk stop after a few pages; every other sort has to read the whole category before it can order it, which costs more.",
            "default": "endingSoonest"
          },
          "maxLots": {
            "title": "Maximum lots",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Hard cap on rows delivered AND charged. You are charged once per delivered row and nothing else, so a small cap is genuinely cheap. The whole open inventory was 16,092 lots on 2026-09-18, so 20000 covers everything.",
            "default": 50
          },
          "fetchDetails": {
            "title": "Fetch full lot details",
            "type": "boolean",
            "description": "ON (the default): one extra request per delivered lot buys the description, condition, leaf category, photo gallery, quantities, shipping, reserve, watch count, bidder location — and the consignor's name, street, city, state, ZIP and phone. OFF: about five times faster and lighter, but 33 fields come back null at the same price per row. Only worth turning off for a pure price sweep over lots you have already profiled.",
            "default": true
          },
          "includeClientAgencies": {
            "title": "Also write PropertyRoom's client-agency roster",
            "type": "boolean",
            "description": "Writes a CLIENT_AGENCIES record to the key-value store holding the law-enforcement and municipal clients PropertyRoom names on its own /about-us/partners page — 45 named agencies against the 4,300+ clients the site claims — plus the five that publish their own auction page. IMPORTANT: this is a SITE-WIDE list and is NOT joinable to a lot. A PropertyRoom listing never names its consigning agency and nothing public resolves the numeric seller id or the consignor account code to one, so no row carries an agency name. Costs two extra page reads per run.",
            "default": true
          },
          "concurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "Requests in flight. Measured 200 detail calls at 8 in 25.6 seconds with zero errors and zero 403s over 1,000+ requests through a residential exit.",
            "default": 8
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "PropertyRoom sits behind CloudFront. Measured 2026-09-18: Apify's shared DATACENTER pool returned HTTP 403 with a CloudFront block page on 3 of 9 requests, while RESIDENTIAL with country US returned HTTP 200 on 20 of 20 and on every one of 1,000+ requests since. RESIDENTIAL + US is therefore the default. The Actor asks for gzip on every request, so a detail call costs 4.8 KB of residential traffic rather than 14.9 KB.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}