{
  "openapi": "3.0.1",
  "info": {
    "title": "AllSurplus Scraper — Industrial Surplus Auction Lots",
    "description": "$4.50 per 1,000 lots, no start fee. Every live COMMERCIAL surplus lot on AllSurplus: the named corporate seller, its pickup street address, closing time, current bid, buyer's premium, condition, quantity, specs and photos. Government surplus is excluded — our GovDeals Scraper covers that.",
    "version": "0.1",
    "x-build-id": "kpj44xtzu1erk3I0L"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapersdelight~allsurplus-industrial-lot-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapersdelight-allsurplus-industrial-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~allsurplus-industrial-lot-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapersdelight-allsurplus-industrial-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~allsurplus-industrial-lot-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapersdelight-allsurplus-industrial-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": {
          "startUrls": {
            "title": "AllSurplus URLs (search pages or lot pages)",
            "type": "array",
            "description": "Paste any allsurplus.com URL straight out of your address bar — a search/browse page or a single lot page (https://www.allsurplus.com/asset/1/27040). Search pages and lot pages can be mixed in one run. While this list is non-empty it WINS over the 'What to scrape' picker below. Government-surplus lots pasted here are rejected and never charged.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchType": {
            "title": "What to scrape",
            "enum": [
              "all",
              "keyword",
              "country",
              "state",
              "category",
              "seller",
              "lotUrls"
            ],
            "type": "string",
            "description": "Which slice of the commercial catalogue to walk. 'Everything' walks all open commercial lots. The others each need their own list below; if the list is empty the run falls back to a sample of the open catalogue rather than failing.",
            "default": "all"
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Search terms, one scope each (e.g. \"forklift\", \"CNC\", \"chiller\", \"wafer\"). Used when 'What to scrape' is 'By keyword'. Measured 2026-09-18: \"forklift\" matched 81 open commercial lots.",
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Countries or regions",
            "type": "array",
            "description": "Country names, ISO codes or a whole region, one scope each — e.g. \"United States of America\", \"USA\", \"Germany\", \"DEU\", or the region \"Europe, the Middle East & Africa\". Resolved against AllSurplus' own live location menu. Used when 'What to scrape' is 'By country or region'. Measured 2026-09-18: USA 1,150 lots, Germany 490, Israel 405, South Africa 331.",
            "items": {
              "type": "string"
            }
          },
          "states": {
            "title": "States / provinces / regions",
            "type": "array",
            "description": "US and Canadian two-letter codes are expanded automatically (TX -> Texas); outside North America type the local region name exactly as AllSurplus shows it (\"Antwerpen\", \"Hauts-de-France\"). One scope each. Used when 'What to scrape' is 'By state'.",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Category names or AllSurplus category codes. A family name such as \"Metalworking Equipment\" or \"Heavy Equipment and Construction\" is expanded to every child code automatically, because the API matches the exact code on a lot and would otherwise return nothing. Used when 'What to scrape' is 'By category'.",
            "items": {
              "type": "string"
            }
          },
          "sellerAccountIds": {
            "title": "Seller account ids",
            "type": "array",
            "description": "Numeric AllSurplus seller account ids — the second number in a lot URL (https://www.allsurplus.com/asset/1/27040 -> 27040). Every lot from those sellers. Used when 'What to scrape' is 'By seller account id'.",
            "items": {
              "type": "string"
            }
          },
          "lotUrls": {
            "title": "Lot URLs",
            "type": "array",
            "description": "Individual AllSurplus lot pages to resolve directly, e.g. https://www.allsurplus.com/asset/1/27040. Used when 'What to scrape' is 'Only the lot URLs I list'. A lot AllSurplus no longer has a record for is reported, not billed.",
            "items": {
              "type": "string"
            }
          },
          "saleType": {
            "title": "Sale type",
            "enum": [
              "any",
              "3",
              "5",
              "4",
              "1"
            ],
            "type": "string",
            "description": "Restrict to one sale format, applied server-side. Measured 2026-09-18 across the 2,892 open commercial lots: Online Auction 2,027, Make Offer 782, Buy Now 83.",
            "default": "any"
          },
          "timeWindow": {
            "title": "Time window",
            "enum": [
              "any",
              "closingToday",
              "newListings"
            ],
            "type": "string",
            "description": "Restrict to lots closing today or to newly listed lots, applied server-side. 'Any' is the whole open catalogue.",
            "default": "any"
          },
          "minBid": {
            "title": "Minimum current bid",
            "minimum": 0,
            "type": "integer",
            "description": "Drop lots whose current bid is below this. Applied before the lot is enriched or delivered, so a rejected lot is never charged. A lot with no bid yet is never dropped by this filter. Note lots are priced in six currencies (USD, EUR, ZAR, CNY, AUD, GBP) and this compares the raw number, not a converted one."
          },
          "maxBid": {
            "title": "Maximum current bid",
            "minimum": 0,
            "type": "integer",
            "description": "Drop lots whose current bid is above this. Applied before the lot is enriched or delivered, so a rejected lot is never charged. Compares the raw number in the lot's own currency."
          },
          "includeClosedLots": {
            "title": "Include lots that have already closed",
            "type": "boolean",
            "description": "Off by default. Measured 2026-09-18: 0 of 2,892 lots in the open index had already closed, so this normally changes nothing — it exists so a closed lot can never be delivered and billed as if it were bidable.",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "closing",
              "newest",
              "bidHigh",
              "bidLow",
              "bestMatch"
            ],
            "type": "string",
            "description": "Which lots come first, which decides what a capped run gets. Applied server-side.",
            "default": "closing"
          },
          "fetchDetails": {
            "title": "Fetch lot details (condition, quantity, specs, photos, terms, buyer's premium)",
            "type": "boolean",
            "description": "On by default. Adds two calls per lot — the asset record and the live bid box — which fill condition, quantity, VIN/serial, spec attributes, seller spec PDFs, the full photo gallery, inspection/payment/removal terms, bid increment, buyer's premium and view counts. Measured fill 2026-09-18 on 65 lots: detail 65/65, bid box 63/65. There is no extra charge for it; turn it off to run faster on a listings-only pull.",
            "default": true
          },
          "maxLots": {
            "title": "Max lots",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many lots across every scope, so a run's cost is predictable. 0 means no limit — the whole open commercial catalogue was 2,892 lots on 2026-09-18. Lots rejected by your filters do not count against it and are never charged.",
            "default": 50
          },
          "monitorMode": {
            "title": "Monitor mode - only return lots that are new since the last run",
            "type": "boolean",
            "description": "Remembers the lots each scope has already returned in a named key-value store that survives between scheduled runs, and delivers only the newly listed ones. The first run returns everything and seeds the memory.",
            "default": false
          },
          "alertOnNewLot": {
            "title": "Alert on a newly listed lot",
            "type": "boolean",
            "description": "Send an alert for each lot that is new since the previous monitoring run. Only fires while Monitor mode is on.",
            "default": true
          },
          "alertOnBidChange": {
            "title": "Alert when a watched lot's bid moves",
            "type": "boolean",
            "description": "Send an alert when the current bid changes on one of the lot ids listed below. Only fires while Monitor mode is on.",
            "default": false
          },
          "watchlistLotIds": {
            "title": "Watched lot ids",
            "type": "array",
            "description": "Lot ids to watch for bid movement, in the dataset's own \"assetId-accountId\" form, e.g. \"1-27040\".",
            "items": {
              "type": "string"
            }
          },
          "webhookUrl": {
            "title": "Webhook URL",
            "type": "string",
            "description": "Each alert is POSTed to this URL as JSON."
          },
          "slackWebhookUrl": {
            "title": "Slack incoming-webhook URL",
            "type": "string",
            "description": "Each alert is posted to this Slack incoming webhook as a card with the lot title, seller, bid and photo."
          },
          "emailRecipients": {
            "title": "Email recipients",
            "type": "array",
            "description": "Email addresses to send a digest of the alerts to, via Apify's own send-mail actor.",
            "items": {
              "type": "string"
            }
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify's shared datacenter proxy is enough for this source — measured 29/29 search pages and 65/65 detail calls clean on 2026-09-18, with no residential bandwidth, no session pinning and no browser.",
            "default": {
              "useApifyProxy": true
            }
          },
          "requestConcurrency": {
            "title": "Request concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many AllSurplus API calls run at once. 5 is the measured-good setting; raising it speeds up a large run but is more likely to draw rate limiting.",
            "default": 5
          },
          "diagnose": {
            "title": "Diagnostic mode",
            "type": "boolean",
            "description": "Fetch a few rows, dump the raw API response, the normalised row, the businessId values on the page and the page-1/page-2 overlap to the key-value store, then stop. Use this before reporting a problem — it costs nothing and shows exactly what AllSurplus returned.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}