# Municipal Surplus Auctions: Zero-Bid Listings (`getascraper/government-surplus-outcome-feed`) Actor

Scrape public municipal and government surplus auctions from Municibid and GovPlanet. Export prices, bids, zero-bid signals, locations, condition, and source URLs as JSON or CSV for fleet and equipment sourcing.

- **URL**: https://apify.com/getascraper/government-surplus-outcome-feed.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Other, Automation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.66 / 1,000 surplus listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🏛️ Government Surplus Auction Outcome Feed

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#EFF6FF;border:1px solid #BFDBFE;border-top:4px solid #1D4ED8;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Find government surplus lots with prices, bid activity, and direct source links in one run.</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Collect public Municibid and GovPlanet auction data in a clean dataset built for sourcing, research, and scheduled checks.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFDBFE;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E3A8A">💸 Bid signals</span><br>
<span style="font-size:12px;color:#57534E">Spot confirmed zero-bid and active-bid Municibid listings.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFDBFE;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E3A8A">🏛️ Public sources</span><br>
<span style="font-size:12px;color:#57534E">Collect the validated public Municibid and GovPlanet surfaces.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFDBFE;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E3A8A">🔗 Verifiable rows</span><br>
<span style="font-size:12px;color:#57534E">Trace every record back to its live source listing.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #BFDBFE;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1E3A8A">🎯 Focused runs</span><br>
<span style="font-size:12px;color:#57534E">Filter titles, states, statuses, pages, and record counts.</span>
</td>
</tr>
</table>

Government surplus research often means opening many auction pages and copying inconsistent fields. This Actor turns public listings into structured rows with honest missing-field handling.

### 🔍 What does Government Surplus Auction Outcome Feed do?

The Actor collects public auction listings from [Municibid](https://municibid.com/Listing/Browse) and [GovPlanet](https://www.govplanet.com/). It extracts identifiers, titles, prices, locations, images, bid activity, auction timing, and source links when each page publishes them.

Municibid provides numeric bid counts, including confirmed zero-bid records. GovPlanet output includes bid counts only when its public page provides a real number. Missing values are omitted instead of replaced with guesses.

Use direct browse, auction, category, or detail URLs. The Actor validates every input URL and refuses unsupported or protected paths.

### 👥 Why use this government surplus auction feed?

- **I am a surplus reseller** looking for low-competition municipal equipment so I can review zero-bid lots before an auction closes.
- **I am a fleet buyer** comparing public vehicle and equipment prices across agencies before contacting a seller.
- **I am a market analyst** collecting source-linked auction observations for price, demand, and geographic research.
- **I am an automation builder** scheduling small repeat runs and sending clean auction rows into a spreadsheet or database.

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#EFF6FF;border:1px solid #BFDBFE;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1D4ED8;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Paste public URLs</span><br>
<span style="font-size:12px;color:#57534E">Add Municibid browse or detail pages, or GovPlanet category or auction pages.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EFF6FF;border:1px solid #BFDBFE;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1D4ED8;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Choose your scope</span><br>
<span style="font-size:12px;color:#57534E">Set keywords, states, status, page limits, and the maximum record count.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EFF6FF;border:1px solid #BFDBFE;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1D4ED8;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Use the dataset</span><br>
<span style="font-size:12px;color:#57534E">Download JSON, CSV, Excel, or XML, or connect the run to an Apify integration.</span>
</td>
</tr>
</table>

The default input returns up to 10 Municibid records from one public page. This keeps the first run fast and predictable.

### 📥 Input

| Field                | Type             | Required | Description                                                                                                           |
| -------------------- | ---------------- | -------- | --------------------------------------------------------------------------------------------------------------------- |
| `startUrls`          | array of URLs    | No       | Public Municibid browse or detail URLs, or GovPlanet category or auction URLs. Defaults to the Municibid browse page. |
| `keywords`           | array of strings | No       | Keeps titles containing at least one supplied keyword. An empty list keeps every title.                               |
| `states`             | array of strings | No       | Keeps matching two-letter US state codes when a source publishes a state.                                             |
| `statusFilter`       | enum             | No       | Selects all records, active auctions, ended auctions, sold lots, or confirmed zero-bid records.                       |
| `proxyConfiguration` | object           | No       | Controls connection routing. Datacenter proxy routing is the Apify form default.                                      |
| `includeImages`      | boolean          | No       | Includes the public primary image URL when available.                                                                 |
| `maxItems`           | integer          | No       | Caps unique saved records between 1 and 1,000. Defaults to 10.                                                        |
| `maxPages`           | integer          | No       | Caps public result pages followed per source between 1 and 20. Defaults to 1.                                         |
| `maxConcurrency`     | integer          | No       | Caps simultaneous page requests between 1 and 5. Defaults to 2.                                                       |
| `debugLogging`       | boolean          | No       | Adds request diagnostics to the run log. It is disabled by default.                                                   |

### 📤 Output

Each row contains only values published by the source. A Municibid record can look like this:

```json
{
    "source": "municibid",
    "listingId": "84689885",
    "title": "Radar Speed Display Trailer",
    "listingUrl": "https://municibid.com/Listing/Details/84689885/Radar-Speed-Display-Trailer",
    "imageUrl": "https://storagemunicibidpro.blob.core.windows.net/assets/media/713542a2-aaf4-4910-818d-b6210e6c1b1f_thumbcrop.jpg",
    "location": "Otis, MA",
    "state": "MA",
    "seller": "Town of Otis",
    "price": 320,
    "currency": "USD",
    "bidCount": 38,
    "isZeroBid": false,
    "bidState": "has_bids",
    "auctionEnd": "08/10/2026 14:26:00",
    "scrapedAt": "2026-08-10T18:26:01.066Z"
}
```

Download the dataset as JSON, CSV, Excel, XML, or another format supported by Apify.

### 🧾 Data table

| Field                | Type    | Description                                                |
| -------------------- | ------- | ---------------------------------------------------------- |
| `source`             | string  | Source marketplace, either `municibid` or `govplanet`.     |
| `listingId`          | string  | Source-published listing or equipment identifier.          |
| `title`              | string  | Public lot title.                                          |
| `listingUrl`         | string  | Direct public source URL.                                  |
| `imageUrl`           | string  | Public primary image URL when available.                   |
| `location`           | string  | Source-published lot location.                             |
| `state`              | string  | Two-letter US state code when it can be read directly.     |
| `seller`             | string  | Public agency or seller name when provided.                |
| `category`           | string  | Public category label when provided.                       |
| `description`        | string  | Public Municibid lot description.                          |
| `condition`          | string  | Source-published Municibid condition.                      |
| `price`              | number  | Current or displayed auction price.                        |
| `currency`           | string  | Source-published currency code.                            |
| `bidCount`           | number  | Numeric bid count when the source publishes one.           |
| `isZeroBid`          | boolean | True only when the published bid count is exactly zero.    |
| `bidState`           | string  | `zero_bids` or `has_bids` when a numeric bid count exists. |
| `auctionStatus`      | string  | Source-backed active, ended, or sold state when available. |
| `auctionEnd`         | string  | Published Municibid end time.                              |
| `auctionStart`       | string  | Published Municibid start time.                            |
| `auctionDateText`    | string  | GovPlanet auction date text shown with the lot.            |
| `buyerFeePercent`    | number  | Public Municibid buyer fee percentage.                     |
| `auctionType`        | string  | Public GovPlanet sale format, such as online auction.      |
| `features`           | string  | GovPlanet equipment features from the public quickview.    |
| `registrationNumber` | string  | Public GovPlanet registration identifier.                  |
| `meterReading`       | string  | Source-published equipment meter reading.                  |
| `distanceText`       | string  | Public distance text relative to the request region.       |
| `countryCode`        | string  | Source-published GovPlanet country code.                   |
| `latitude`           | number  | Public lot latitude when embedded by GovPlanet.            |
| `longitude`          | number  | Public lot longitude when embedded by GovPlanet.           |
| `ironCladAssurance`  | boolean | Whether GovPlanet marks IronClad Assurance on the lot.     |
| `scrapedAt`          | string  | ISO timestamp for record collection.                       |

### 💰 Pricing

Pricing is pay per saved auction record or configured event. Empty datasets do not create result events. There is no monthly subscription required to run the Actor.

### ⭐ Enjoying Government Surplus Auction Outcome Feed?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#EFF6FF;border:1px solid #BFDBFE;border-left:5px solid #1D4ED8;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px;color:#1C1917">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Found a useful surplus lot without checking every page by hand?</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps surplus buyers and market analysts find this Actor. Your feedback also guides future fields.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#1D4ED8;border:1px solid #BFDBFE;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/government-surplus-outcome-feed/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### 💡 Tips

- Start with one direct auction page and 10 records before increasing the scope.
- Use `statusFilter: zero_bids` with Municibid pages to isolate confirmed no-bid rows.
- Schedule the same URL near auction close to refresh price and bid activity.
- Keep `maxConcurrency` low. Auction pages are large, and polite pacing improves reliability.
- Retain `listingUrl` and `scrapedAt` in downstream systems for provenance.

### ❓ FAQ

##### Does this government surplus scraper get blocked?

It uses the two public page surfaces validated for this release and requests them at a conservative rate. Network conditions can still change. Configure Apify proxy routing if direct requests fail.

##### Does it extract private bidder or contact information?

No. The Actor collects public listing fields only. It does not open account, bidding, bid-history, messaging, or document routes.

##### How fresh is the auction data?

Each run reads the current public page. `scrapedAt` records collection time, while auction dates and statuses remain source-published values.

##### Does it support every government auction website?

No. This release supports only public Municibid and GovPlanet pages. GovDeals, GSA authenticated services, PublicSurplus, and protected routes are intentionally excluded.

### ⚖️ Responsible use and limitations

Use the data in line with each source's terms, robots rules, and applicable laws. This Actor is not affiliated with Municibid, GovPlanet, or any government agency.

Auction pages may omit bid counts, final prices, seller names, categories, or precise locations. The Actor omits unavailable values. A missing field does not mean zero, unsold, or unavailable.

GovPlanet often publishes a displayed price without a numeric bid count. In those cases, `isZeroBid` and `bidState` are intentionally absent.

### 🔗 Other actors

- [AuctionNinja Scraper: Estate Sales & Online Auctions](https://apify.com/getascraper/auctionninja-scraper) ↗ - Collect estate-sale and online-auction listings.
- [HiBid Scraper: Real-Time Auction Listings](https://apify.com/getascraper/hibid-scraper) ↗ - Track current HiBid listings and auction details.
- [ShopGoodwill Scraper: Sold Comps & Auction Monitor](https://apify.com/getascraper/shopgoodwill-scraper) ↗ - Research ShopGoodwill sold comps and auction changes.
- [US HTS Tariff Monitor: Official Line Changes](https://apify.com/getascraper/us-hts-tariff-monitor) ↗ - Monitor official tariff line changes for import research.
- [SaaS Pricing Monitor: Competitor Plan Changes](https://apify.com/getascraper/saas-pricing-change-monitor) ↗ - Detect public pricing and plan changes on scheduled runs.

# Actor input Schema

## `startUrls` (type: `array`):

Public Municibid browse or detail URLs, or public GovPlanet category or auction URLs.

## `keywords` (type: `array`):

Keep listings whose titles contain at least one keyword. Leave empty to keep every title.

## `states` (type: `array`):

Keep records matching these two-letter state codes when the source publishes a state.

## `statusFilter` (type: `string`):

Keep all records or only active, ended, sold, or confirmed zero-bid records.

## `proxyConfiguration` (type: `object`):

Connection settings for public auction pages. Datacenter proxy routing is the economical default on Apify.

## `includeImages` (type: `boolean`):

Include the public primary image URL when the auction page provides one.

## `maxItems` (type: `integer`):

Stop after saving this many unique auction records.

## `maxPages` (type: `integer`):

Maximum number of public result pages followed from each start URL.

## `maxConcurrency` (type: `integer`):

Maximum public pages requested at the same time. A low value reduces source load.

## `debugLogging` (type: `boolean`):

Write additional request diagnostics to the run log without exposing credentials.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://municibid.com/Listing/Browse"
    }
  ],
  "keywords": [],
  "states": [],
  "statusFilter": "all",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "includeImages": true,
  "maxItems": 10,
  "maxPages": 1,
  "maxConcurrency": 2,
  "debugLogging": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://municibid.com/Listing/Browse"
        }
    ],
    "keywords": [],
    "states": [],
    "statusFilter": "all",
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "includeImages": true,
    "maxItems": 10,
    "maxPages": 1,
    "maxConcurrency": 2,
    "debugLogging": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/government-surplus-outcome-feed").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://municibid.com/Listing/Browse" }],
    "keywords": [],
    "states": [],
    "statusFilter": "all",
    "proxyConfiguration": { "useApifyProxy": True },
    "includeImages": True,
    "maxItems": 10,
    "maxPages": 1,
    "maxConcurrency": 2,
    "debugLogging": False,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/government-surplus-outcome-feed").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://municibid.com/Listing/Browse"
    }
  ],
  "keywords": [],
  "states": [],
  "statusFilter": "all",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "includeImages": true,
  "maxItems": 10,
  "maxPages": 1,
  "maxConcurrency": 2,
  "debugLogging": false
}' |
apify call getascraper/government-surplus-outcome-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/government-surplus-outcome-feed"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/dxAhRcvp31waAsqoA/builds/Gb0H1zDtRoKMzrB39/openapi.json
