OrbTop

PublicSurplus Government Surplus Auction Scraper

BUSINESSOTHER

Independent tool. Trademarks referenced on this page are the property of their respective owners and are used only to identify the public website this tool reads. No affiliation or endorsement.

PublicSurplus Government Surplus Auction Scraper

Scrapes government surplus auction listings from PublicSurplus, a marketplace where US and Canadian government agencies — states, counties, cities, school districts, and universities — sell surplus vehicles, equipment, electronics, and other assets. Returns one structured record per lot, covering every browse category, with agency, location, bid, and closing-price data.


PublicSurplus Scraper Features

  • Covers all 28 top-level PublicSurplus browse categories — vehicles, heavy equipment, computers, electronics, furniture, industrial gear, medical, real estate, and more
  • Returns the selling government agency and pick-up location (city + state) alongside every lot, so results join cleanly against other government-surplus datasets
  • Captures current bid, bid count, and — for lots whose auction ends during the crawl — the closing price
  • Filter by one or more categories, or leave blank to crawl everything
  • Supports resuming a large run that stopped early, without re-paying for records you already have

Who Uses PublicSurplus Data?

  • Surplus resellers and flippers sourcing inventory — heavy equipment, fleet vehicles, IT hardware, lab and AV gear
  • Municipal-fleet remarketers tracking what government agencies are offloading and at what price
  • Asset-recovery and liquidation firms building comparables from realized sale prices
  • Market researchers studying government surplus disposal patterns across US states and Canadian provinces

Input

{
  "maxItems": 100,
  "categories": ["17", "4"]
}
Field Type Default Description
maxItems integer 10 Required. Maximum number of auction lots to return.
categories array of strings all 28 PublicSurplus category ids to crawl (e.g. 17 = Heavy Equipment, 4 = Motor Pool). Leave empty for all categories.

Category ids

Id Category Id Category
1 Computers 16 Clothing
2 Electronics 17 Heavy Equipment
3 Office Equipment 18 Collectibles
4 Motor Pool 19 Aviation
5 Sporting Goods 20 Marine
6 Industrial Equipment 21 Motor Pool Parts
8 Food Supply 22 Airport
9 School Supplies 23 Medical
10 Building 24 Animals and Livestock
11 Jewelry 25 Scrap
12 Outdoor Equipment 26 Storage
13 Music and Arts 27 Housewares
14 Furniture 28 For Children
15 Real Estate 29 Heavy Equipment Parts

Output Fields

{
  "auction_id": "4063975",
  "title": "SUM1500RMXL2U APC battery backup",
  "category": "Electronics",
  "category_id": 2,
  "agency_name": "Show Low Unified School District",
  "agency_region": "AZ",
  "location_city": "Show Low",
  "location_state": "AZ",
  "current_bid_usd": 50,
  "bid_count": 0,
  "starting_bid_usd": 50,
  "time_left_raw": "4 hours 6 mins",
  "ends_at": "2026-08-21T19:00:00.000Z",
  "quantity": null,
  "condition": "UNKNOWN",
  "description": "SUM1500RMXL2U APC battery backup untested",
  "thumbnail_url": "https://d37qv0n5b4mbzm.cloudfront.net/sms/docviewer/cdnmainaucdoc/thumb-b/4063975/70982201",
  "image_urls": ["https://d37qv0n5b4mbzm.cloudfront.net/sms/docviewer/cdnmainaucdoc/thumb-b/4063975/70982201"],
  "detail_url": "https://www.publicsurplus.com/sms/auction/view?auc=4063975",
  "is_closed": false,
  "sold_price_usd": null,
  "scraped_at": "2026-08-21T14:53:45.907Z"
}
Field Type Description
auction_id string PublicSurplus lot identifier
title string Lot title
category string Category name
category_id integer Category id
agency_name string Selling government agency
agency_region string State/province badge shown on the lot's listing card
location_city string Pick-up location city
location_state string Pick-up location state/province
current_bid_usd number Current bid price in USD
bid_count integer Number of bids placed so far
starting_bid_usd number Opening bid, populated when the lot has zero bids so far
time_left_raw string Time-left text as shown on the listing
ends_at string Auction close time, ISO 8601
quantity string Quantity, where the listing discloses one
condition string Item condition, as reported by the seller
description string Full lot description
thumbnail_url string Primary lot image URL
image_urls array Lot image URLs
detail_url string Direct link to the lot on PublicSurplus
is_closed boolean Whether the auction had ended at scrape time
sold_price_usd number Closing price, populated when the lot closed during the crawl
scraped_at string ISO-8601 timestamp of when the record was captured

Resuming a large crawl

Every run emits a resumeCursor in its Output. If a large crawl stops before it finishes — because it hit maxItems, your spend cap (maxTotalChargeUsd), or was aborted — start a new run with the same input plus that resumeCursor to continue from where it left off. The crawl resumes from the queued work the previous run didn't reach.

  • You are not re-charged for records the earlier run already delivered.
  • Resume within your account's run-retention window — on the free tier, roughly your 10 most recent runs. Once the source run is pruned, its resumeCursor is no longer valid.
  • resumeCursor is opaque — supply it unmodified.

FAQ

How do I scrape PublicSurplus auctions?

Set maxItems and, optionally, categories — leave categories blank to cover every category. Run the actor; it returns one record per auction lot.

Can I get just one category, like heavy equipment or vehicles?

Yes. Set categories to any subset of the ids listed above.

Does this include auctions that have already closed?

Live auctions are the primary coverage. A lot that closes while its page is being crawled is captured as closed with its final sale price (is_closed: true, sold_price_usd populated) — this is opportunistic, not a guaranteed archive of every closed lot on the site.

How much does this cost to run?

Pay-per-event pricing — you pay per lot record returned. Exact per-event pricing is shown on the actor's Apify page before you run.


Why Use This Scraper?

  • Whole-site coverage — every browse category in one actor, not a single-category slice
  • Normalised agency + location fields — join cleanly against other government-surplus datasets
  • Resumable — a large full-catalog pull can pick up where it left off without duplicate charges