# Government Surplus Auction Data — Municibid Scraper (`jungle_synthesizer/municibid-government-surplus-auction-scraper`) Actor

Extract live and completed government surplus auctions from Municibid — vehicles, equipment, and surplus gear from small-town and county agencies. Includes bid pricing, realized sold prices on ended lots, seller and location details, and vehicle specs like VIN and mileage.

- **URL**: https://apify.com/jungle\_synthesizer/municibid-government-surplus-auction-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Business, E-commerce
- **Stats:** 2 total users, 1 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 record scrapeds

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 Data — Municibid Scraper

Scrape live and completed auctions from [Municibid](https://municibid.com), the marketplace where small towns, school districts, and county agencies sell surplus vehicles and equipment. Returns pricing, bid counts, seller and location details, vehicle specs (VIN, mileage), and — on ended lots — the realized sold price.

***

### Municibid Scraper Features

- Extracts both live and completed auctions in a single run — active listings and the ended/sold archive together.
- Returns realized sold prices on ended lots, not just current bids. That's the number a comparables desk actually needs.
- Pulls vehicle-specific fields — VIN, mileage, make/model where disclosed — straight from the listing body.
- Captures seller identity (the municipality, fire department, or school district running the sale) and its state.
- Full-size gallery image URLs for every listing, not just a thumbnail.
- Covers Municibid's whole inventory: every state, every category, no filters required to get the full corpus.

***

### Who Uses Municibid Auction Data?

- **Surplus resellers and equipment dealers** — source fleet vehicles, plow trucks, and heavy equipment before they're gone.
- **Municipal fleet remarketers** — track what comparable agencies are listing and for how much.
- **Price-comparables desks** — pull realized sold prices to bid correctly instead of guessing.
- **Market researchers** — study government surplus pricing trends across states and categories.
- **Auction aggregators** — fold Municibid into a cross-platform surplus feed alongside other government auction sources.

***

### How the Municibid Scraper Works

1. Set a `maxItems` cap (or leave it high for a full crawl) and start the run.
2. The scraper walks Municibid's live listing index and its completed-auction archive in parallel.
3. Each listing's detail page is fetched for the fields the grid view doesn't show — location, category, condition, VIN, mileage, and gallery images.
4. Records land in your dataset as the run progresses, so you can start using data before a long crawl finishes.

***

### Input

```json
{
  "maxItems": 100
}
```

| Field       | Type    | Default | Description                                                                      |
|-------------|---------|---------|-----------------------------------------------------------------------------------|
| `maxItems`  | integer | 10      | Maximum number of auction records to return. Covers both active and ended/sold listings. Leave blank to scrape everything available. |
| `resumeCursor` | string | — | Cursor from a previous run's Output. Continues a crawl that stopped instead of starting over. |

***

### Municibid Scraper Output Fields

```json
{
  "listing_id": "85246692",
  "title": "1988 Mack Trash Truck",
  "slug": "1988-Mack-Trash-Truck",
  "seller_name": "Borough of Carlisle",
  "seller_state": "PA",
  "location_city": "Carlisle",
  "location_state": "PA",
  "category": "Automotive",
  "current_price_usd": 500,
  "minimum_bid_usd": 500,
  "bid_count": 0,
  "starts_at": "2026-08-20T19:20:00.000Z",
  "ends_at": "2026-08-31T19:14:00.000Z",
  "status": "active",
  "sold_price_usd": null,
  "description": "Has not been driven for an extended period of time. Sold as is.",
  "condition": "Used",
  "mileage": "57,637 as of 04/19",
  "vin": "VG6M112B1JB066366",
  "image_urls": [
    "https://storagemunicibidpro.blob.core.windows.net/assets/media/6063ee6f-ac28-41d3-a058-c470a342d04e_fullsize.jpg"
  ],
  "detail_url": "https://municibid.com/Listing/Details/85246692/1988-Mack-Trash-Truck",
  "scraped_at": "2026-08-21T13:20:27.957Z"
}
```

| Field                | Type    | Description                                                                  |
|----------------------|---------|-------------------------------------------------------------------------------|
| `listing_id`         | string  | Municibid's internal listing id.                                             |
| `title`               | string  | Listing title.                                                                |
| `slug`                | string  | URL slug segment for the listing.                                            |
| `seller_name`         | string  | Name of the selling agency — a municipality, fire department, or school district. |
| `seller_state`        | string  | Two-letter state code of the selling agency.                                 |
| `location_city`       | string  | City where the item is located.                                              |
| `location_state`      | string  | Two-letter state code where the item is located.                             |
| `category`            | string  | Primary listing category.                                                    |
| `current_price_usd`   | number  | Current bid, or the final highest bid once the auction ends.                 |
| `minimum_bid_usd`     | number  | Starting/minimum bid amount.                                                 |
| `bid_count`           | integer | Number of bids placed.                                                       |
| `starts_at`           | string  | Auction start time, ISO 8601.                                                |
| `ends_at`             | string  | Auction end time, ISO 8601.                                                  |
| `status`              | string  | One of `active`, `ended`, or `sold`.                                         |
| `sold_price_usd`      | number  | Realized sold price — populated only when `status` is `sold`.                |
| `description`         | string  | Listing description text.                                                    |
| `condition`           | string  | Item condition (New, Used, Refurbished, Damaged) when the seller discloses it. |
| `mileage`             | string  | Odometer reading — vehicle lots only.                                        |
| `vin`                 | string  | Vehicle identification number — vehicle lots only.                           |
| `image_urls`          | array   | Full-size gallery image URLs.                                                |
| `detail_url`          | string  | Canonical listing detail page URL.                                           |
| `scraped_at`          | string  | ISO 8601 timestamp when the record was scraped.                              |

***

### 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 Municibid auction listings?

Run this actor with a `maxItems` value and it returns structured records for live and completed Municibid auctions — no account or login required.

#### Does this include sold prices, or just current bids?

Both. Active listings return the current bid; completed listings return `status: "sold"` with the realized `sold_price_usd`, or `status: "ended"` when the item didn't sell.

#### Can I get vehicle details like VIN and mileage?

Yes, when the seller listed them. Vehicle lots return `vin` and `mileage` alongside the standard fields — everything else returns those as null, since a picnic table doesn't have an odometer.

#### Do I need a Municibid account or API key?

No. Point the actor at Municibid and it handles the rest.

#### How much does the Municibid Scraper cost to run?

Pay-per-result pricing — you're charged per record returned, not per page crawled.

***

### Need More Features?

Need custom fields, filters, or a different target site? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use the Municibid Scraper?

- **Comparables, not just a watchlist** — realized sold prices on ended lots, the number that makes this data actually useful for bidding.
- **Vehicle detail other feeds skip** — VIN and mileage pulled from the listing body, not just a bare title string.
- **Full coverage** — every state, every category, active and ended lots together, in one run.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `resumeCursor` (type: `string`):

Leave empty for a fresh crawl. To CONTINUE a previous run where it stopped — without paying again for records you already received — paste the `resumeCursor` value from that run's Output (the run's OUTPUT key). Resume promptly: the previous run's data expires with your account's retention window (free tier: your ~10 most recent runs).

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

Maximum number of auction records to scrape (covers both active and ended/sold listings). Leave blank to scrape all available.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10
}
```

# Actor output Schema

## `results` (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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/municibid-government-surplus-auction-scraper").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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/municibid-government-surplus-auction-scraper").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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10
}' |
apify call jungle_synthesizer/municibid-government-surplus-auction-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/municibid-government-surplus-auction-scraper"
        }
    }
}

```

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/OIQdgRv9xa2O60smF/builds/zyJt6aNs2diY8A1H4/openapi.json
