PublicSurplus Scraper - Government Surplus Auction Data API
parseforge/publicsurplus-scraper
E-commerceAutomationOther
Extract open PublicSurplus government surplus auctions: live bid count and price, closing time, selling agency, pick-up address, photos, attached documents, condition and vehicle specs including VIN, mileage and an optional NHTSA VIN decode.
- Total runs
- 13
- Bookmarked
- 0
- Last modified
- 32 hours ago
This scraper was last updated on .
What does the PublicSurplus Scraper - Government Surplus Auction Data API return?
PublicSurplus Scraper - Government Surplus Auction Data API
Scrape open government auctions from PublicSurplus. Every run returns a 20-field base row: id, title, price, currency, region, the full schedule, the lot type, the category, the condition grade and the selling agency: for one flat price. On top of that sit nine optional data blocks covering the other 68 fields: live bidding, the agency profile, the pick-up address, the sale terms, the item's own spec sheet, an NHTSA VIN decode, photos, documents and the description. Each one is off by default: if you do not tick it, you do not receive it and you are not charged for it. No login, no API key, no cookies. Export to CSV, JSON, Excel, or XML.
PublicSurplus is where roughly 5,700 open lots from US and Canadian cities, counties, school districts, universities, police departments and state agencies sit at any moment. It publishes no API. This Actor reads the same pages a buyer sees and turns them into one fixed schema.
| Who uses it | What they scrape PublicSurplus for |
|---|---|
| Dealers and resellers | Fleet vehicles and heavy equipment with VIN, odometer and running condition, filtered to lots closing today |
| Auction aggregators | A deduplicated feed of every open lot in one schema, keyed on a stable auction id |
| Fleet and asset managers | What comparable units actually sell for, by state, agency and category |
| Municipal procurement teams | What peer agencies are disposing of, and on what payment and pick-up terms |
| Price and market researchers | Bid counts, increments and reserve state across 232 categories and 68 regions |
What it does
This Actor collects PublicSurplus auctions by keyword, category, state, agency, ZIP radius or exact URL, and returns each lot as a flat row. The π blocks below are optional and off unless you ask for them.
π The selling agency, not just its name. (includeAgencyProfile) agencyId, the agency's storefront URL, its logo, and a link to every other lot it has open, so one row turns into a whole agency's catalogue.
π The pick-up address split into columns. (includePickupLocation) Location name, street, city, state and ZIP as separate fields, plus PublicSurplus's map link. You can plan a collection route straight off the dataset.
π Live bidding state. (includeBidding) bidCount, minimumBid, bidIncrement, the masked handle of the leading bidder with their years on the platform, and whether a reserve exists and has been met.
π The agency's own vehicle block. (includeItemSpecs) vin, mileage, year, make, model, engine, transmission, tires and runningCondition as typed columns: plus the CARFAX link PublicSurplus prints beside the VIN.
π An NHTSA VIN decode. (includeVinDecode) Tick it and every 17-character VIN gains 16 more columns from the US government's public vPIC database: body class, fuel type, cylinders, displacement, drive type, GVWR class, assembly plant.
π Real-estate lots too. (includeItemSpecs) Parcel number, property type, zoning, lot size in acres and building size in square feet come back as typed fields on Real Estate lots.
π Every photo, full resolution. (includeImages, includeAttachments) imageUrls holds the agency's uploads in order, not the listing thumbnail. Attached documents: titles, inspection reports, site maps: come back as name-and-URL pairs.
π·οΈ All three lot types, in the base row. Ordinary bid auctions, fixed-price buy-it-now lots with their asking price, and multi-unit dutch auctions with the quantity on offer.
Results export to CSV, JSON, Excel, or XML, or stream from the API.
What you can do with PublicSurplus data
π Source fleet vehicles by the numbers.
Filter to Motor Pool, onlyWithVin, mileage under your ceiling and endingWithinHours of 24, and you get a shortlist of vehicles closing today with the VIN already decoded.
π Track what surplus actually sells for.
Run it on a schedule and key on auctionId. bidCount and currentPrice climbing across runs is a live price curve; a lot that disappears has closed.
πΊοΈ Plan a collection route.
pickupCity, pickupState, pickupZip and the ZIP-radius filter let you buy only what you can physically collect.
π Watch for new listings.
startedWithinHours asks PublicSurplus for lots that opened in the last hour, day or week. That is a new-listing monitor with one field and no diffing.
π’ Follow specific agencies.
Put their agencyId values in agencyIds and the Actor walks each agency's whole open catalogue, 50 lots a page.
Why choose this scraper
| What you get | |
|---|---|
| 88 fields per lot | Every field the public auction page publishes, verified against live pages rather than guessed. Twenty of them are the base row; the rest arrive block by block, as you ask for them. |
| Bids, not just prices | bidCount, bidIncrement, minimumBid, the leading bidder's masked handle and platform tenure, and reserve state. |
| The agency block | agencyId, storefront, logo, full pick-up address, accepted payment methods, card ceiling, deposit rule and the terms document. |
| Vehicle specs as columns | VIN, mileage, year, make, model, engine, transmission, tires and running condition: from the agency's own form, not parsed out of prose. |
| Nothing billed by surprise | A run left at its defaults charges exactly one per-row price. Nine optional blocks are each a checkbox and each its own line on the bill. |
| 23 filters that cut the bill | Thirteen go to PublicSurplus with the query; ten more run before the row is written. Rejected rows are never charged, and the filters read the complete row, so you can filter on bids, photos, documents or a VIN without buying those columns. |
| 232 categories, 68 regions | All 28 top categories and 204 sub-categories, 50 US states, DC, four US territories and 13 Canadian provinces and territories: every region the site lists: by name or by id. |
| No proxy, no login | PublicSurplus answers plain requests. The Actor runs proxy-free by default, so a run costs you nothing in proxy traffic. |
| Honest empties | A field the agency did not fill in is absent, never a guessed value and never a null. |
| Four export formats | CSV, JSON, Excel, and XML, from the dashboard or the API. |
How it compares
The competitor columns below reflect what each Actor's own public listing states, not a test run of it.
| Feature | ParseForge | scrapersdelight | lulzasaur | crawlerbros |
|---|---|---|---|---|
| Fields per lot | 88 | Lot, bid, location, close time | Title, bid, location, category, close time, URL, images | Not stated |
| Bid count, increment and minimum | Yes | Not stated | Not stated | Not stated |
| High bidder handle and tenure | Yes | No | No | No |
| Reserve price state | Yes | No | No | No |
| Selling agency id and pick-up address | Yes | Location only | Location only | Not stated |
| Vehicle VIN, mileage and condition | Yes | Not stated | Not stated | Not stated |
| NHTSA VIN decode | Yes, 16 columns | No | No | No |
| Real-estate parcel, zoning and lot size | Yes | No | No | No |
| Attached documents | Yes | No | No | No |
| Fixed-price and Dutch lots flagged | Yes | Not stated | Not stated | Not stated |
| New-listing monitor | startedWithinHours filter |
Yes, with Slack/email/webhook alerts | Not stated | Not stated |
| Base price per result | $0.007 | $0.003 | $0.005 | $0.005 |
| Optional blocks you can switch off | 9, each its own charge | No | No | No |
This Actor is the dearest of the four per row, and deliberately so: the base row alone carries fields the others do not return at all, and the deep data: bids, agency, address, documents, spec sheet, VIN decode: is priced block by block instead of being folded into everybody's bill. If all you need is a title-and-price feed, the cheaper Actors will do it more cheaply.
If you want alerting, a scheduled monitor that pushes new lots to Slack, email or a webhook: scrapersdelight's Actor does that and this one does not.
What a lot looks like
A run left at its defaults returns this, the base row, twenty fields, one flat price. Real record, unedited. (categoryId and categoryName are the two that only appear when the run browsed a category; a keyword search returns eighteen.)
{
"auctionId": "4066151",
"url": "https://www.publicsurplus.com/sms/auction/view?auc=4066151",
"title": "ADOT - D790 - 2002 FORD F450 TRUCK 1.5 TON 5TH WHEEL DRW 4X4",
"scrapedAt": "2026-08-20T17:27:58.087Z",
"currentPrice": 7300,
"currency": "USD",
"state": "AZ",
"auctionType": "bid",
"condition": "UNKNOWN",
"agencyName": "ADOT",
"categoryId": 4,
"categoryName": "motor pool",
"startsAt": "2026-08-18T03:00:00.000Z",
"endsAt": "2026-08-22T03:00:00.000Z",
"startedAtText": "Aug 17, 2026 09:00 PM MDT",
"endsAtText": "Aug 21, 2026 09:00 PM MDT",
"timeLeftSeconds": 120722,
"isEnded": false,
"mightExtend": true,
"thumbnailUrl": "https://d37qv0n5b4mbzm.cloudfront.net/sms/docviewer/cdnmainaucdoc/thumb-b/4066151/71388322"
}
Tick the blocks you want and the same row grows. With all nine on, a fleet vehicle comes back with 70 fields:
{
"auctionId": "4064156",
"title": "2020 Chevrolet Tahoe 4x2",
"currentPrice": 5600,
"bidCount": 35,
"minimumBid": 5700,
"bidIncrement": 100,
"highBidder": "F******1",
"highBidderYears": 0,
"agencyId": "294914",
"agencyUrl": "https://www.publicsurplus.com/sms/scottsdale,az/browse/home",
"agencyAuctionsUrl": "https://www.publicsurplus.com/sms/list/current?orgid=294914",
"pickupStreet": "9191 E San Salvador Dr",
"pickupCity": "Scottsdale",
"pickupState": "AZ",
"pickupZip": "85258",
"paymentMethods": ["Visa", "MasterCard", "Discover"],
"creditCardLimitUsd": 4000,
"bidDeposit": "REQUIRED",
"termsUrl": "https://www.publicsurplus.com/sms/docviewer/aucterms?auc=4064156",
"year": 2020,
"make": "Chevrolet",
"model": "Tahoe",
"mileage": 158773,
"vin": "1GNLCDEC8LR231706",
"engine": "5.3 Li 8V",
"transmission": "6 Automatic",
"runningCondition": "Starts, Runs, Drives",
"carfaxUrl": "https://secure.carfax.com/creditCard.cfx?partner=DVE_B&vin=1GNLCDEC8LR231706",
"vinBodyClass": "Sport Utility Vehicle [SUV]/Multipurpose Vehicle [MPV]",
"vinFuelType": "Gasoline",
"vinEngineCylinders": 8,
"vinDisplacementL": 5.3,
"vinGvwr": "Class 2E: 6,001 - 7,000 lb (2,722 - 3,175 kg)",
"vinPlantCountry": "UNITED STATES (USA)",
"imageCount": 25,
"imageUrls": ["https://d37qv0n5b4mbzm.cloudfront.net/sms/docviewer/cdnaucdoc/img/4064156/71341883"],
"attachmentCount": 0,
"description": "6,001-7,000 GVW Sport Utility - 3/4 Ton Public Safety ...",
"descriptionFormat": "text"
}
Configure the run
| Setting | What it does |
|---|---|
keyword / keywords |
Word or phrase to search for. PublicSurplus matches it against the title and the full description, so truck also finds a cabinet whose description mentions a hand-truck. Each extra keyword is its own search, merged and deduplicated. |
category / categoryIds |
One of 28 categories or 204 sub-categories. Accepts the name (motor pool), a sub-category (motor pool > truck, or just truck), or the numeric id. |
region / regions |
State or province. Accepts the name (California), the code (CA), or the site's own all,ca. |
agencyIds |
Walk specific agencies' full catalogues instead of searching. Use the agencyId from any row. |
auctionUrls |
Exact lots to fetch, skipping discovery. Accepts a full auction URL or the bare number. |
maxItems |
Ceiling on rows written. Not a target, a narrow filter returns fewer. |
maxPages |
How deep discovery may page into one search. A search page holds 25 rows, an agency page 50. |
sortBy / sortDescending |
Closing soonest, price, auction id, or title. Sent to PublicSurplus; with several keywords, categories or regions the merged set is sorted again before rows are written. |
listingOnly |
Skip the lot's own page for a faster, shallower run: 13 fields straight off the listing, without the condition grade, agency name or start date. It does not change the price, and the page is read anyway if you tick a block or set a filter that needs it. |
descriptionFormat |
text or html, for when the description block is on. |
proxyConfiguration |
Off by default. PublicSurplus answers plain requests; enable only if your runs start getting rate-limited. |
Optional data blocks
The base row is always there. Everything else is a checkbox, off by default, with its own line on the bill. A block you do not tick is neither written to the dataset nor charged for.
| Switched on by | What it adds |
|---|---|
includeBidding |
bidCount, openingPrice, minimumBid, bidIncrement, highBidder, highBidderYears, hasReserve, reserveMet, buyItNowPrice, quantity. |
includeAgencyProfile |
agencyId, agencyAlias, agencyUrl, agencyAuctionsUrl, agencyLogoUrl. The agency's name is in the base row either way. |
includePickupLocation |
pickupLocationName, pickupStreet, pickupCity, pickupState, pickupZip, mapUrl. |
includeSaleTerms |
paymentMethods, paymentNote, creditCardLimitUsd, shipping, bidDeposit, termsUrl. |
includeItemSpecs |
specs plus the typed columns: year, make, model, mileage, vin, engine, transmission, tires, runningCondition, bodyStyle, manufacturer, hours, carfaxUrl, parcelNumber, propertyType, lotSizeAcres, buildingSizeSqFt, zoning. About 20% of lots carry a block. |
includeVinDecode |
The 16 vin* columns from NHTSA vPIC. Works on its own: you do not need includeItemSpecs to get them. |
includeImages |
imageUrls and imageCount. |
includeAttachments |
attachments and attachmentCount. About 6% of lots carry a document. |
includeDescription |
description and descriptionFormat. |
Narrow the run with filters
Every filter runs before the row is written, so rows you filter out are never charged: not even for the auction page the Actor had to read in order to apply the filter. The one thing a wide run still pays for is the listing-page events discovery spends finding candidates.
Filters read the complete row, before the optional blocks are stripped out. That means you can filter on data you are not buying: onlyWithVin, onlyWithBids, minBidCount, onlyWithImages and onlyWithAttachments all work with every block switched off. You pay for the rows that match, not for the columns used to find them.
Thirteen filters go to PublicSurplus with the query, so the lots they reject are never even downloaded:
| Filter | What it keeps |
|---|---|
keyword / keywords |
Lots whose title or description contains the term. |
category / categoryIds |
Lots in that category or sub-category. |
region / regions |
Lots in that state, territory or province. |
agencyIds |
Lots from those agencies. |
priceMin / priceMax |
Lots whose current price falls in the range. |
endingWithinHours |
Lots closing in 1, 6, 24, 120 or 240 hours, the five steps the site offers. |
startedWithinHours |
Lots that opened in the last 1, 24, 48 or 168 hours. |
zipCode + milesFromZip |
Lots within a radius of a US ZIP code, in the steps the site offers from 20 to 1,000 miles. |
Ten more run in the Actor, because PublicSurplus has no query parameter for them:
| Filter | What it keeps |
|---|---|
auctionTypes |
bid, fixed-price or dutch. Read off the listing badge, so a rejected lot never costs a detail fetch. |
states |
Lots in these two-letter regions. Cheaper than regions on a broad run, because it does not fan out into separate searches. |
titleExcludes |
Drops lots whose title or description contains any of these words. |
onlyWithBids / onlyWithoutBids |
Lots that have, or have not, been bid on. |
minBidCount / maxBidCount |
Lots inside a bid-count range. |
onlyWithImages |
Lots the agency published with at least one photo. |
onlyWithVin |
Lots carrying a valid 17-character VIN. |
onlyWithAttachments |
Lots with an attached document. |
Why discovery works the way it does
PublicSurplus's search endpoint is stateless: every filter has to ride on every request, page 2 included. The Actor sends the full query each time, which is why paging deep into a filtered search returns the filtered set rather than drifting back to everything.
Its listing pages give 25 rows each, and an unfiltered search runs about 230 pages deep: roughly 5,750 open lots site-wide, measured 20/08/2026. Lots open and close all day, so the Actor reads the pager off the page instead of assuming a page count, and stops on the first empty page. A single search therefore reaches the whole site; a category or region search reaches all of it several times over.
Closed auctions are not covered. PublicSurplus answers 401 for a closed lot unless you are logged in, so this Actor returns open lots only. A lot that closes mid-run is logged and skipped, never billed.
Free users
Apify free-plan runs are capped at 50 auctions per run. Everything else works the same: all 88 fields across the nine blocks, all 23 filters. Upgrade your Apify plan to lift the cap.
Run it
- Open the Actor in Apify Console and set a
keyword, acategory, aregion, or any combination. - Set
maxItemsto the number of lots you want, and tick any optional blocks you need under Optional data. - Click Start, then export the dataset as CSV, JSON, Excel, or XML.
Or from the API:
curl -X POST "https://api.apify.com/v2/acts/parseforge~publicsurplus-scraper/runs?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"category":"motor pool","region":"Texas","onlyWithVin":true,"includeItemSpecs":true,"includeVinDecode":true,"maxItems":100}'
Use with AI agents (MCP)
The Actor is exposed over Apify's MCP server, so an agent can call it as a tool:
https://mcp.apify.com/sse?actors=parseforge/publicsurplus-scraper
Ask things like "find government pickup trucks on PublicSurplus in Texas closing today" and the agent fills the input itself.
Troubleshooting
No auctions came back.
The filters are ANDed. A keyword plus a category plus a region plus a bid-count floor can genuinely match nothing. Drop one filter at a time, and raise maxPages, a rare filter such as auctionTypes: ["dutch"] needs discovery to read deeper before it finds enough matches.
Fewer rows than maxItems.
maxItems is a ceiling. Discovery stops when the page budget is exhausted, and lots that closed between the listing page and the detail fetch are skipped. The log prints how many were filtered and how many had gone.
A keyword search returns things that do not look like the keyword.
PublicSurplus searches the full description, not just the title. A cabinet whose description says "bring a hand-truck" is a genuine hit for truck. Use titleExcludes to trim, or run includeDetails and filter the description yourself.
A column I expected is not in the output.
Most of the 88 fields belong to one of the nine optional blocks and are off until you tick them. bidCount needs includeBidding, vin needs includeItemSpecs, pickupZip needs includePickupLocation, and so on, the Optional data blocks table above maps every field to its checkbox. The filters keep working regardless, so onlyWithVin still finds the vehicles even with every block off.
Why is openingPrice missing on most rows?
PublicSurplus only labels the figure "Opening Price" while a lot has no bids; once someone bids it becomes "Current Price". About 18% of open lots are in that state. currentPrice is on every row either way.
Why is highBidder empty?
Nobody has bid yet. bidCount will be 0 on the same row.
Why are make, model and vin empty even with includeItemSpecs on?
Only lots where the agency filled in the vehicle form carry them: around 20% of all lots, and the large majority of Motor Pool and Heavy Equipment ones. Use onlyWithVin to keep just those; it works whether or not you bought the block.
A VIN did not decode.
NHTSA vPIC answers 200 with an error code for a VIN it cannot read, usually because the agency typed it wrong. The row keeps its vin and simply gets no vin* columns.
The run got slower or started failing.
PublicSurplus is a single application server and this Actor reads five pages at a time on purpose. If your IP gets rate-limited, switch proxyConfiguration on.
FAQ
| Question | Answer |
|---|---|
| Do I need a PublicSurplus account or API key? | No. PublicSurplus has no public API. This reads public auction pages only, so there is nothing to register or authenticate. |
| Will I be charged for data I did not ask for? | No. Nine of the twelve events are optional blocks that are off by default; a run left alone bills result-item, listing-page and apify-actor-start and nothing else. |
| Can I filter on a column without paying for it? | Yes. Filters run on the complete row, before the optional blocks are stripped. onlyWithVin, onlyWithBids, minBidCount, onlyWithImages and onlyWithAttachments all work with every block off. |
| Does it cover closed auctions and final sale prices? | No. PublicSurplus puts closed lots behind a login, answering 401 to anonymous callers. This Actor returns open lots only. |
| Does it cover Canada? | Yes. All 13 Canadian provinces and territories are in the region list, alongside 50 US states, DC and four US territories. |
| Can I fetch one specific lot? | Yes. Put its URL or auction number in auctionUrls. |
| Can I follow one agency? | Yes. Put its agencyId in agencyIds and the Actor walks its whole open catalogue. |
| How current is the data? | Live. Every row is built from the page as it stands, and timeLeftSeconds is measured against PublicSurplus's own server clock. |
| How many lots are reachable? | About 5,750 open site-wide, measured 20/08/2026, across roughly 230 pages of 25. A single search reaches all of them. |
| How many rows per run? | Free plan: 50. Paid: up to 10,000, bounded by how many lots match your filters. |
| Does it bid for me? | No. It reads public auction pages and never logs in, bids or transacts. |
| Does it need a proxy? | No. It runs proxy-free by default. |
| Is this an official PublicSurplus product? | No. It is unofficial and reads only publicly available PublicSurplus data. |
π Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.
β οΈ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by PublicSurplus or The Public Group, LLC. It collects only publicly available auction data: lots that public agencies publish for anyone to browse, and no buyer accounts or personal profiles. highBidder is the masked handle PublicSurplus itself displays publicly and cannot be resolved to a person. You are responsible for using the data in compliance with PublicSurplus's terms and applicable laws.
What input does the PublicSurplus Scraper - Government Surplus Auction Data API accept?
| Field | Type | What it does | Default |
|---|---|---|---|
| keyword | string | Word or phrase to search for. PublicSurplus matches it against the lot title AND the full description, so `truck` also finds a cabinet whose description mentions a hand-truck. Leave empty to take every open auction. | truck |
| keywords | array | Run several keyword searches in one go. Each is a separate search on PublicSurplus and the results are merged, deduplicated by auction id. | [] |
| category | string | One of PublicSurplus's 28 categories or 204 sub-categories. Accepts the name (`motor pool`), a sub-category (`motor pool > truck`, or just `truck`), or the numeric id. | not set |
| categoryIds | array | Extra categories to sweep, by name or numeric id. Each becomes its own search. | [] |
| region | string | Keep only auctions in one region. Accepts the name (`California`), the two-letter code (`CA`), or the site's own `all,ca`. Covers all 68 regions the site lists: 50 US states, DC, four US territories and 13 Canadian provinces and territories. | not set |
| regions | array | Sweep several regions in one run. Each becomes its own search. | [] |
| agencyIds | array | Pull every open auction from specific agencies instead of searching. Use the `agencyId` from any row this Actor returns, which is the `orgid` in the agency's PublicSurplus URL. When set, the keyword, category and region filters are not sent: PublicSurplus has no agency-plus-keyword endpoint. | [] |
| auctionUrls | array | Specific auctions to fetch, skipping discovery entirely. Accepts a full https://www.publicsurplus.com/sms/auction/view?auc=β¦ URL or the bare auction number. | [] |
| maxItems | integer | Maximum number of auctions written to the dataset. A ceiling, not a target, a narrow filter returns fewer. About 5,700 auctions are open site-wide at any moment. | 50 |
| maxPages | integer | How deep discovery may page into one search before moving on. A search page holds 25 rows, an agency page 50. Discovery stops as soon as it has enough candidates, so this is a ceiling. Each page actually read is one listing-page event. | 40 |
| priceMin | integer | Keep only lots whose current price is at least this. Sent to PublicSurplus, so cheaper lots are never downloaded. | not set |
| priceMax | integer | Keep only lots whose current price is at most this. Leave both price fields at 0 to see every lot. | not set |
| endingWithinHours | string (5 options) | Only auctions closing inside this window. PublicSurplus offers these five steps and no others. | not set |
| startedWithinHours | string (4 options) | Only auctions that opened inside this window, the fastest way to poll for new listings. Mutually exclusive with `Ending within` on the site's own form. | not set |
| zipCode | string | Five-digit US ZIP code at the centre of a radius search. Needs `Miles from ZIP` to do anything. | not set |
| milesFromZip | string (12 options) | Radius around the ZIP code. PublicSurplus offers these steps and no others. | not set |
| sortBy | string (5 options) | Order PublicSurplus returns the listing in. With several keywords, categories or regions the merged set is sorted again before rows are written. | timeLeft |
| sortDescending | boolean | Flip the sort: highest price first, newest auction id first, ZβA. | false |
| auctionTypes | array | Keep only these kinds of lot. Leave empty for all three. | [] |
| onlyWithBids | boolean | Drop lots nobody has bid on yet. | false |
| onlyWithoutBids | boolean | The opposite: keep only untouched lots. Useful for finding bargains that are about to close. | false |
| minBidCount | integer | Keep lots with at least this many bids. | not set |
| maxBidCount | integer | Keep lots with at most this many bids. | not set |
| onlyWithImages | boolean | Drop lots the agency published without a single photo. | false |
| onlyWithVin | boolean | Keep only vehicles carrying a valid 17-character VIN, the rows a VIN decode can enrich. | false |
| onlyWithAttachments | boolean | Keep only lots with an attached document, such as a title, inspection report or site map. | false |
| states | array | Post-filter on the two-letter region code. Cheaper than `More states` when you already have a broad search running, because it does not fan out into separate searches. | [] |
| titleExcludes | array | Drop lots whose title or description contains any of these words. Case-insensitive. | [] |
| listingOnly | boolean | Skip the lot's own page for a faster, shallower run: id, title, price, region, closing time, thumbnail and lot type, straight off the listing. Leave it off to also get the condition grade, the selling agency's name and the start date. This does not change the per-row price, and the page is read anyway if you tick an optional block below or set a filter that needs it. | false |
| includeBidding | boolean | Bid count, opening price, minimum bid, bid increment, the masked high-bidder handle with their years on the platform, reserve status, buy-it-now price and Dutch quantity. | false |
| includeAgencyProfile | boolean | The selling agency's numeric id, URL slug, storefront, logo and a link to every other lot it has open. The agency's name is in the base row either way. | false |
| includePickupLocation | boolean | Location name, street, city, state and ZIP as separate columns, plus the site's map link. | false |
| includeSaleTerms | boolean | Accepted payment methods, the online card ceiling, the payment caveat, shipping arrangement, bid-deposit rule and the agency's terms document. | false |
| includeItemSpecs | boolean | The agency's own attribute block as typed columns: vehicle year, make, model, mileage, VIN, engine, transmission, tires and running condition; equipment manufacturer and hours; real-estate parcel number, property type, zoning, lot acres and building square feet. Plus the raw label/value pairs and the CARFAX link. Around 20% of lots carry one. | false |
| includeVinDecode | boolean | For lots with a 17-character VIN, add 16 NHTSA vPIC columns: body class, fuel type, cylinders, displacement, drive type, GVWR class, assembly plant and more: from the US government's public vehicle database. One extra request per vehicle. Works on its own: you do not need the specs block to get the decoded columns. | false |
| includeImages | boolean | Every full-resolution photo the agency uploaded, in order, plus the count. | false |
| includeAttachments | boolean | Documents the agency attached: titles, inspection reports, site maps: as name, URL and file-type triples, plus the count. Around 6% of lots carry one. | false |
| includeDescription | boolean | The agency's full lot description. Some run to several thousand words. | false |
| descriptionFormat | string (2 options) | `text` flattens the agency's markup into readable plain text; `html` keeps it as published. Only matters when the description is switched on. | text |
| proxyConfiguration | object | Off by default. PublicSurplus answers plain requests, so a run costs you nothing in proxy traffic. Turn it on only if your runs start getting rate-limited. | {"useApifyProxy":false} |
How much does the PublicSurplus Scraper - Government Surplus Auction Data API cost?
from $6.23 per 1,000 results
| Charged for | What it is | Price each |
|---|---|---|
| result | One auction row: id, URL, title, price, currency, region, schedule, lot type, category, condition grade, selling agency name and thumbnail, plus the auction page read to get them. | $0.00623 to $0.007 |
| Listing page | One PublicSurplus search or agency listing page read during discovery - 25 rows on a search, 50 on an agency. | $0.00178 to $0.002 |
| Actor Start | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.0178 to $0.02 |
| Bidding state | Switched on by includeBidding. Bid count, opening and minimum bid, increment, masked high bidder with platform tenure, reserve status, buy-it-now price and Dutch quantity. | $0.001335 to $0.0015 |
| Agency profile | Switched on by includeAgencyProfile. The selling agency id, URL slug, storefront, logo and a link to its other open lots. The agency name is in the base row either way. | $0.000712 to $0.0008 |
| Pick-up location | Switched on by includePickupLocation. Location name, street, city, state and ZIP as separate columns, plus the map link. | $0.000712 to $0.0008 |
| Sale terms | Switched on by includeSaleTerms. Accepted payment methods, online card ceiling, payment caveat, shipping arrangement, bid deposit rule and the terms document. | $0.000534 to $0.0006 |
| Item specifications | Switched on by includeItemSpecs. The agency structured attribute block - vehicle VIN and mileage, equipment hours, or real-estate parcel and zoning. About 20 percent of lots carry one. | $0.001068 to $0.0012 |
| VIN decode | Switched on by includeVinDecode. A vehicle VIN decoded against the NHTSA vPIC database, adding 16 columns. One extra request per vehicle. | $0.001335 to $0.0015 |
| Photo URLs | Switched on by includeImages. Every full-resolution photo the agency uploaded, in order, plus the count. | $0.000712 to $0.0008 |
| Attached documents | Switched on by includeAttachments. Documents the agency attached - titles, inspection reports, site maps - as name, URL and file type. About 6 percent of lots carry one. | $0.000534 to $0.0006 |
| Description | Switched on by includeDescription. The agency full lot description, as plain text or as published HTML. | $0.000712 to $0.0008 |
Tiered: the lower figure is the price on a higher Apify plan. Billing and the free credit live on Apify.
How do I call the PublicSurplus Scraper - Government Surplus Auction Data API API?
One POST returns the dataset directly. Same shape for every scraper in the library, so swapping the slug is the only change.
curl -X POST "https://api.apify.com/v2/acts/parseforge~publicsurplus-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"keyword": "truck",
"keywords": [],
"categoryIds": [],
"regions": [],
"agencyIds": []
}' What example inputs can I use?
Use these inputs to see how a run is configured.
{
"keyword": "truck",
"keywords": [],
"categoryIds": [],
"regions": [],
"agencyIds": []
} What do users say about the PublicSurplus Scraper - Government Surplus Auction Data API?
No reviews yet. Be the first.
How do I report an issue with the PublicSurplus Scraper - Government Surplus Auction Data API?
We build and maintain this scraper, so a problem with it comes to us. Report it on the Apify listing and the thread stays attached to the scraper where the next person can find it: open an issue.
Broken and urgent, or you would rather not post in public? Write to parseforge@protonmail.com and it reaches the people who wrote it.
What related scrapers can I use?
Run PublicSurplus Scraper - Government Surplus Auction Data API on Apify All scrapers
