# Municibid Government Surplus Auction Scraper (`amrameng/municibid-scraper`) Actor

Structured data for every Municibid government surplus auction. Active and completed listings across 46 categories and 19 US states, with full bid history, exact UTC end times, photo galleries, and typed seller and category metadata. Read-only.

- **URL**: https://apify.com/amrameng/municibid-scraper.md
- **Developed by:** [Amram Englander](https://apify.com/amrameng) (community)
- **Categories:** Developer tools, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$8.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

<p align="center">
  <img src="https://i.imgur.com/IHZnXxj.png" alt="Municibid Scraper" width="640" />
</p>

## Municibid Government Surplus Auctions

An Apify Actor that extracts structured data from Municibid, the online auction marketplace where 7,000+ US municipalities, school districts, and government agencies sell surplus equipment to verified bidders. Outputs clean, normalized records covering active and completed listings across 46 categories and 19 US states.

### Who uses it

- **Resellers and flippers** — track ending-soon auctions and build comp databases for max-bid pricing decisions
- **Researchers and journalists** — pull per-agency or per-state history for transparency reporting and market analysis
- **Developers and data analysts** — feed structured listing data into comp-pricing tools, ending-soon alert services, or AI agents

### Features

- **Broad coverage** — active and completed listings across 46 categories and 19 US states.
- **Deep historical archive** — completed listings are paginable months back, not just a recent window. Suitable for comps and long-horizon market analysis.
- **Full bid history per listing** — every bid amount and timestamp, not just the current price.
- **Accurate auction end times** — end timestamps account for last-minute bid extensions, so ending-soon alerts don't fire on stale times.
- **Complete photo galleries** — every photo on each listing, not just the cover image.
- **Flexible filtering** — combine category, US state, keyword, agency, price range, bid count, and auction-end date in a single run.
- **Filter by specific agency** — pull every auction from any single government seller on the platform.
- **Predictable cost** — cap the number of results per run; the Actor stops there even if more matches exist.
- **Read-only** — the Actor never bids, watches, or touches an account. Safe to run on a schedule.

### Input Parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `categories` | string[] | No | `[]` (all 46) | Top-level categories to scrape. Each value is a category ID like `C160883` (Automotive). Multi-select dropdown in the Apify console. |
| `regions` | string[] | No | `[]` (no filter) | US states to filter on. Each value is a region ID like `R3777835` (Pennsylvania). Multi-select dropdown. |
| `status` | enum | No | `active` | `active` for current auctions or `completed` for closed auctions (comps). |
| `sort` | enum 0-7 | No | `0` | `0` = Ending Soon, `1` = Newest, `2` = Price Low, `3` = Price High, `4` = Number of Bids, `5`/`6` = Title A-Z/Z-A, `7` = Preview. |
| `keyword` | string | No | — | Optional full-text search (e.g. `"fire truck"`, `"ford f-250"`). |
| `seller` | string | No | — | Optional seller slug. Slugs for each agency are listed in the `SELLERS` key-value store entry written at every run. |
| `priceMin` | integer | No | — | Filter out records below this USD price. |
| `priceMax` | integer | No | — | Filter out records above this USD price. |
| `onlyNoBids` | boolean | No | `false` | When `true`, keep only listings that haven't received any bids yet — useful for finding low-competition snipe candidates. Equivalent to `maxBids: 0`. |
| `minBids` | integer | No | — | Keep only listings with at least this many bids. Useful for filtering to listings that have received market validation (e.g., `minBids: 5`). |
| `maxBids` | integer | No | — | Keep only listings with at most this many bids. Useful for finding low-competition listings (e.g., `maxBids: 3`). |
| `endingWithinHours` | integer | No | — | Filter to listings whose auction closes within this many hours from run start. Combine with `sort: "0"` (Ending Soon) for an ending-soon sweep. |
| `endAfter` | string (YYYY-MM-DD) | No | — | Keep only listings whose auction end is on or after this date (UTC). With `status: "completed"`, the Actor short-circuits pagination once it walks past the cutoff. |
| `endBefore` | string (YYYY-MM-DD) | No | — | Keep only listings whose auction end is on or before this date (UTC, inclusive of the entire day). Combine with `endAfter` for a clean historical window (e.g. Q1 2026). |
| `listingIds` | string[] | No | — | If provided, skip discovery entirely and fetch only these specific listing IDs (8-digit). When set, `categories`/`regions`/`keyword`/`seller`/`status`/`sort` are ignored. Useful for cron-refreshing a known set of listings. |
| `maxListings` | integer | No | `100` | Hard cap on dataset rows. `0` = no cap. |
| `maxPagesPerFacet` | integer | No | `5` | Maximum browse pages per `(category × region)` facet. Each page returns ~20 listings. `0` = no cap. |
| `proxyConfiguration` | object | No | Apify datacenter proxy | Apify proxy configuration. Datacenter is the default (cheaper) and sufficient for Municibid at this rate; switch to RESIDENTIAL only if you observe 429/503 responses. |

`priceMin`, `priceMax`, `onlyNoBids`, `minBids`, `maxBids`, `endingWithinHours`, `endAfter`, and `endBefore` are applied after the listing is fetched. Filtered records do not count against `maxListings` and are not charged to you.

### Coverage

#### Regions (19 US states)

| Region ID | State | Region ID | State |
|---|---|---|---|
| R3777805 | Delaware | R3777820 | Minnesota |
| R3777806 | Florida | R3777822 | Missouri |
| R3777810 | Illinois | R3777826 | New Hampshire |
| R3777811 | Indiana | R3777827 | New Jersey |
| R3777814 | Kentucky | R3777829 | New York |
| R3777815 | Louisiana | R3777832 | Ohio |
| R3777816 | Maine | R3777835 | Pennsylvania |
| R3777817 | Maryland | R3777842 | Vermont |
| R3777818 | Massachusetts | R3777843 | Virginia |
| R3777819 | Michigan | | |

#### Categories (46 total)

| ID | Name | ID | Name |
|---|---|---|---|
| C5764318 | Ambulances | C169118 | Kitchen Equipment |
| C11100415 | Holiday/Seasonal | C169119 | Landscaping |
| C12253698 | Parking | C169120 | Medical |
| C14622523 | Apparel | C169121 | Music |
| C15884675 | Appliances | C169128 | Office Supplies |
| C160883 | Automotive | C169130 | Parks & Rec |
| C160884 | Boating | C169131 | Police & Fire |
| C160885 | Furniture | C169135 | Real Estate |
| C160887 | Computers & IT | C169142 | Sanitation |
| C169054 | Aircraft | C169143 | School Supplies |
| C169055 | Collectibles | C169145 | Scrap |
| C169069 | Electronics | C169146 | Signage |
| C169084 | Energy Equipment | C169147 | Snow Removal |
| C169085 | Farm Equipment & Supplies | C169148 | Snowmobiles |
| C169087 | Firearm Accessories | C169149 | Sporting Goods |
| C169089 | General Equipment | C169167 | Storage |
| C169090 | General Supplies | C169168 | Street & Traffic |
| C169091 | Building Supplies | C169169 | Structures |
| C169105 | Golf Carts | C169170 | Tools |
| C169106 | Heavy Equipment | C169171 | Trailers |
| C169109 | Jewelry | C169172 | Water & Sewer |
| C24200839 | Books | C30453594 | Certificates and Licenses |
| C58277794 | Precious Metals | C5852560 | Tractors |

#### Status

- `active` — auctions currently open for bids
- `completed` — closed auctions, for comps and historical analysis

### Example Input

Comp database — completed automotive auctions across Mid-Atlantic states:

```json
{
  "categories": ["C160883"],
  "regions": ["R3777835", "R3777817", "R3777827", "R3777829"],
  "status": "completed",
  "sort": "1",
  "maxListings": 2000,
  "maxPagesPerFacet": 25
}
````

Ending-soon snapshot across heavy equipment in three states (cron candidate):

```json
{
  "categories": ["C169106", "C169171"],
  "regions": ["R3777835", "R3777810", "R3777832"],
  "status": "active",
  "sort": "0",
  "maxListings": 200,
  "maxPagesPerFacet": 5
}
```

Single-seller history:

```json
{
  "seller": "cecil",
  "status": "completed",
  "maxListings": 500,
  "maxPagesPerFacet": 25
}
```

Keyword search across the platform:

```json
{
  "keyword": "fire truck",
  "status": "active",
  "maxListings": 100
}
```

Snipe candidates — no-bid trucks under $10,000 ending in the next 48 hours:

```json
{
  "categories": ["C160883"],
  "keyword": "truck",
  "status": "active",
  "onlyNoBids": true,
  "priceMax": 10000,
  "endingWithinHours": 48,
  "maxListings": 50
}
```

Historical window — completed automotive auctions that closed in Q1 2026:

```json
{
  "categories": ["C160883"],
  "status": "completed",
  "endAfter": "2026-01-01",
  "endBefore": "2026-03-31",
  "maxListings": 5000,
  "maxPagesPerFacet": 100
}
```

Refresh known listings (skip discovery):

```json
{
  "listingIds": ["82825058", "83327438", "83089177"]
}
```

### Output Schema

#### Example record

```json
{
  "id": "82825058",
  "slug": "2016-ford-explorer",
  "title": "2016 Ford Explorer",
  "description": "2016 Ford Explorer 3.5L EcoBoost, automatic, 4x4, 115,010 miles. Routinely serviced; no fault codes. Air bag light on. Inspected through 03/27. Sold as-is, where-is. Purchaser responsible for transfer and transportation.",
  "image": "https://storagemunicibidpro.blob.core.windows.net/assets/media/3f2e0b70-9063-42f9-a5f6-b5286230d87a_fullsize.jpg",
  "photos": [
    "https://storagemunicibidpro.blob.core.windows.net/assets/media/3f2e0b70-9063-42f9-a5f6-b5286230d87a_fullsize.jpg",
    "https://storagemunicibidpro.blob.core.windows.net/assets/media/07b87ded-9c79-41f5-8851-6221585e86af_fullsize.jpg",
    "https://storagemunicibidpro.blob.core.windows.net/assets/media/526776cd-37fc-445f-917b-a41a1284a4a1_fullsize.jpg",
    "https://storagemunicibidpro.blob.core.windows.net/assets/media/fcd30614-0adb-4b9b-89be-5f2f45edb84e_fullsize.jpg"
  ],
  "price": 2150.00,
  "currentTopBidAmount": 2050.00,
  "currentTopBidProxy": 2555.55,
  "currentTopBidder": "BidderAlias42",
  "numberOfBids": 32,
  "priceValidUntil": "2026-05-27",
  "auctionStartUtc": "2026-05-18T09:00:00.000Z",
  "auctionEndUtc": "2026-05-27T14:00:00.000Z",
  "reserveType": "No",
  "condition": "https://schema.org/UsedCondition",
  "seller": {
    "displayName": "City of Springfield",
    "slug": "springfield",
    "type": "GovernmentOrganization"
  },
  "category": {
    "primaryId": 160883,
    "primaryName": "Automotive",
    "secondaryId": 11965711,
    "secondaryName": "SUV"
  },
  "region": {
    "id": 3777835,
    "name": "Pennsylvania"
  },
  "vehicle": {
    "year": null,
    "miles": null,
    "model": null
  },
  "bidTimeline": [
    { "timestamp": "2026-05-20T22:28:48.2230000", "amount": 500.00 },
    { "timestamp": "2026-05-23T21:10:52.8870000", "amount": 525.00 },
    { "timestamp": "2026-05-25T21:42:30.9400000", "amount": 1400.00 },
    { "timestamp": "2026-05-26T23:47:46.7430000", "amount": 2050.00 }
  ],
  "detailUrl": "https://municibid.com/Listing/Details/82825058/2016-ford-explorer",
  "scrapedAt": "2026-05-27T10:14:33.412Z"
}
```

#### Field reference

Each scraped listing includes:

| Field | Type | Description |
|---|---|---|
| `id` | string | Unique listing ID (8-digit integer). Use as primary key. |
| `slug` | string | URL slug from the canonical listing URL (e.g. `2016-ford-explorer`) |
| `title` | string | Listing title |
| `description` | string | Free-text description provided by the seller |
| `image` | string | Cover image URL |
| `photos` | array | Full image gallery (URLs) |
| `price` | number | Current price in USD |
| `currentTopBidAmount` | number | Current standing bid amount |
| `currentTopBidProxy` | number | Highest proxy bid the leader authorized |
| `currentTopBidder` | string | Pseudonymous display name of current top bidder |
| `numberOfBids` | integer | Total number of bids placed |
| `priceValidUntil` | string | Date (YYYY-MM-DD) the auction closes (Eastern Time end-of-day) |
| `auctionStartUtc` | string | Auction start time (ISO-8601, UTC) |
| `auctionEndUtc` | string | Auction end time (ISO-8601, UTC). May shift up to 2 minutes on late bids. |
| `reserveType` | string | `"No"`, `"Yes-Met"`, or `"Yes-Not Met"` |
| `condition` | string | Item condition (schema.org URL, typically `UsedCondition`) |
| `bidTimeline` | array | Full bid history; each entry has `timestamp` (UTC) and `amount` (USD) |
| `detailUrl` | string | Canonical listing URL on municibid.com |
| `scrapedAt` | string | Scrape timestamp (ISO-8601, UTC) |
| **Seller** | | |
| `seller.displayName` | string | Agency name (e.g. "Cecil Township") |
| `seller.slug` | string | Server-side identifier used as the `seller` input filter |
| `seller.type` | string | Schema.org type (typically `GovernmentOrganization`) |
| **Category** | | |
| `category.primaryId` | integer | Primary category ID |
| `category.primaryName` | string | Primary category name (e.g. "Automotive") |
| `category.secondaryId` | integer | Sub-category ID |
| `category.secondaryName` | string | Sub-category name (e.g. "SUV") |
| **Region** | | |
| `region.id` | integer | Region ID |
| `region.name` | string | US state name |
| **Vehicle (when applicable)** | | |
| `vehicle.year` | integer | Model year, when provided by seller |
| `vehicle.miles` | integer | Mileage, when provided by seller |
| `vehicle.model` | string | Model, when provided by seller |

# Actor input Schema

## `categories` (type: `array`):

Top-level Municibid categories to crawl. Empty = all 46 categories. Each value is the category ID (C12345 form) from the Municibid /SiteMap.

## `regions` (type: `array`):

US states to filter on. Empty = no region filter (cross-state). Each value is the Municibid region ID (R12345 form).

## `status` (type: `string`):

Filter by auction status. 'active' = currently open for bids (default). 'completed' = closed auctions, useful for comps and historical analysis.

## `sort` (type: `string`):

Server-side sort. Default 0 = Ending Soon. Documented in Municibid's /Browse landing.

## `keyword` (type: `string`):

Optional full-text search query. Examples: 'fire truck', 'ford f-250', 'snow plow'. Composes with category/region/status filters.

## `seller` (type: `string`):

Optional seller filter. Use the slug for a specific agency (e.g. 'cecil' for Cecil Township). The Actor writes a (slug → display name) catalog of all active sellers to the 'SELLERS' key-value store at every run; read it from any prior run's storage to find the slug for a specific agency.

## `priceMin` (type: `integer`):

Skip records below this price. Applied after fetch; you are not charged for filtered-out records. Leave blank for no minimum.

## `priceMax` (type: `integer`):

Skip records above this price. Applied after fetch; you are not charged for filtered-out records. Leave blank for no maximum.

## `onlyNoBids` (type: `boolean`):

Filter to listings that have not yet received any bids. Useful for finding low-competition snipe candidates. Shorthand for maxBids=0.

## `minBids` (type: `integer`):

Keep only listings with at least this many bids. Useful for filtering to listings that have received market validation. Leave blank for no minimum.

## `maxBids` (type: `integer`):

Keep only listings with at most this many bids. Useful for finding listings with low competition. Leave blank for no maximum.

## `endingWithinHours` (type: `integer`):

Filter to listings whose auction closes within this many hours from now. Combine with sort=0 (Ending Soon) for an ending-soon sweep. Leave blank for no time-window filter.

## `endAfter` (type: `string`):

Filter to listings whose auction end is on or after this date. Combine with status=completed for a historical-window sweep (e.g. last 30 days, Q1 2026). When set on completed sweeps, the Actor short-circuits pagination once it walks past this cutoff. Format: YYYY-MM-DD.

## `endBefore` (type: `string`):

Filter to listings whose auction end is on or before this date. Use with endAfter for clean historical windows (e.g. endAfter=2026-01-01, endBefore=2026-03-31 for Q1 2026). Format: YYYY-MM-DD.

## `listingIds` (type: `array`):

If provided, skip discovery and fetch only these specific listing IDs. Each value is the 8-digit ID from a Municibid listing URL (e.g. '82825058'). When set, categories/regions/keyword/seller/status/sort are ignored.

## `maxListings` (type: `integer`):

Maximum number of listings to scrape per run. Set to 0 to disable the limit. Use a small value (e.g. 10) for test runs.

## `maxPagesPerFacet` (type: `integer`):

Maximum browse pages to crawl per category/region facet. Each page returns ~20 listings. Set to 0 to disable.

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

Apify proxy configuration. The Actor runs at ~2 req/s, which Municibid serves cleanly from any IP — datacenter IPs (the default) are sufficient. Switch to RESIDENTIAL only if you ever observe 429/503 responses.

## Actor input object example

```json
{
  "categories": [],
  "regions": [],
  "status": "active",
  "sort": "0",
  "onlyNoBids": false,
  "maxListings": 100,
  "maxPagesPerFacet": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "maxListings": 100,
    "maxPagesPerFacet": 5,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("amrameng/municibid-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 = {
    "maxListings": 100,
    "maxPagesPerFacet": 5,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("amrameng/municibid-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "maxListings": 100,
  "maxPagesPerFacet": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call amrameng/municibid-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=amrameng/municibid-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Municibid Government Surplus Auction Scraper",
        "description": "Structured data for every Municibid government surplus auction. Active and completed listings across 46 categories and 19 US states, with full bid history, exact UTC end times, photo galleries, and typed seller and category metadata. Read-only.",
        "version": "0.1",
        "x-build-id": "jvMozrRjtSVZeC1hY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/amrameng~municibid-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-amrameng-municibid-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/amrameng~municibid-scraper/runs": {
            "post": {
                "operationId": "runs-sync-amrameng-municibid-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/amrameng~municibid-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-amrameng-municibid-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": {
                    "categories": {
                        "title": "Categories",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Top-level Municibid categories to crawl. Empty = all 46 categories. Each value is the category ID (C12345 form) from the Municibid /SiteMap.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "C5764318",
                                "C11100415",
                                "C12253698",
                                "C14622523",
                                "C15884675",
                                "C160883",
                                "C160884",
                                "C160885",
                                "C160887",
                                "C169054",
                                "C169055",
                                "C169069",
                                "C169084",
                                "C169085",
                                "C169087",
                                "C169089",
                                "C169090",
                                "C169091",
                                "C169105",
                                "C169106",
                                "C169109",
                                "C169118",
                                "C169119",
                                "C169120",
                                "C169121",
                                "C169128",
                                "C169130",
                                "C169131",
                                "C169135",
                                "C169142",
                                "C169143",
                                "C169145",
                                "C169146",
                                "C169147",
                                "C169148",
                                "C169149",
                                "C169167",
                                "C169168",
                                "C169169",
                                "C169170",
                                "C169171",
                                "C169172",
                                "C24200839",
                                "C30453594",
                                "C58277794",
                                "C5852560"
                            ],
                            "enumTitles": [
                                "Ambulances",
                                "Holiday/Seasonal",
                                "Parking",
                                "Apparel",
                                "Appliances",
                                "Automotive",
                                "Boating",
                                "Furniture",
                                "Computers & IT",
                                "Aircraft",
                                "Collectibles",
                                "Electronics",
                                "Energy Equipment",
                                "Farm Equipment & Supplies",
                                "Firearm Accessories",
                                "General Equipment",
                                "General Supplies",
                                "Building Supplies",
                                "Golf Carts",
                                "Heavy Equipment",
                                "Jewelry",
                                "Kitchen Equipment",
                                "Landscaping",
                                "Medical",
                                "Music",
                                "Office Supplies",
                                "Parks & Rec",
                                "Police & Fire",
                                "Real Estate",
                                "Sanitation",
                                "School Supplies",
                                "Scrap",
                                "Signage",
                                "Snow Removal",
                                "Snowmobiles",
                                "Sporting Goods",
                                "Storage",
                                "Street & Traffic",
                                "Structures",
                                "Tools",
                                "Trailers",
                                "Water & Sewer",
                                "Books",
                                "Certificates and Licenses",
                                "Precious Metals",
                                "Tractors"
                            ]
                        },
                        "default": []
                    },
                    "regions": {
                        "title": "Regions (US states)",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "US states to filter on. Empty = no region filter (cross-state). Each value is the Municibid region ID (R12345 form).",
                        "items": {
                            "type": "string",
                            "enum": [
                                "R3777805",
                                "R3777806",
                                "R3777810",
                                "R3777811",
                                "R3777814",
                                "R3777815",
                                "R3777816",
                                "R3777817",
                                "R3777818",
                                "R3777819",
                                "R3777820",
                                "R3777822",
                                "R3777826",
                                "R3777827",
                                "R3777829",
                                "R3777832",
                                "R3777835",
                                "R3777842",
                                "R3777843"
                            ],
                            "enumTitles": [
                                "Delaware",
                                "Florida",
                                "Illinois",
                                "Indiana",
                                "Kentucky",
                                "Louisiana",
                                "Maine",
                                "Maryland",
                                "Massachusetts",
                                "Michigan",
                                "Minnesota",
                                "Missouri",
                                "New Hampshire",
                                "New Jersey",
                                "New York",
                                "Ohio",
                                "Pennsylvania",
                                "Vermont",
                                "Virginia"
                            ]
                        },
                        "default": []
                    },
                    "status": {
                        "title": "Listing status",
                        "enum": [
                            "active",
                            "completed"
                        ],
                        "type": "string",
                        "description": "Filter by auction status. 'active' = currently open for bids (default). 'completed' = closed auctions, useful for comps and historical analysis.",
                        "default": "active"
                    },
                    "sort": {
                        "title": "Sort order",
                        "enum": [
                            "0",
                            "1",
                            "2",
                            "3",
                            "4",
                            "5",
                            "6",
                            "7"
                        ],
                        "type": "string",
                        "description": "Server-side sort. Default 0 = Ending Soon. Documented in Municibid's /Browse landing.",
                        "default": "0"
                    },
                    "keyword": {
                        "title": "Keyword (full-text search)",
                        "type": "string",
                        "description": "Optional full-text search query. Examples: 'fire truck', 'ford f-250', 'snow plow'. Composes with category/region/status filters."
                    },
                    "seller": {
                        "title": "Seller slug (optional)",
                        "type": "string",
                        "description": "Optional seller filter. Use the slug for a specific agency (e.g. 'cecil' for Cecil Township). The Actor writes a (slug → display name) catalog of all active sellers to the 'SELLERS' key-value store at every run; read it from any prior run's storage to find the slug for a specific agency."
                    },
                    "priceMin": {
                        "title": "Minimum price (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip records below this price. Applied after fetch; you are not charged for filtered-out records. Leave blank for no minimum."
                    },
                    "priceMax": {
                        "title": "Maximum price (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Skip records above this price. Applied after fetch; you are not charged for filtered-out records. Leave blank for no maximum."
                    },
                    "onlyNoBids": {
                        "title": "Only auctions with no bids",
                        "type": "boolean",
                        "description": "Filter to listings that have not yet received any bids. Useful for finding low-competition snipe candidates. Shorthand for maxBids=0.",
                        "default": false
                    },
                    "minBids": {
                        "title": "Minimum number of bids",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only listings with at least this many bids. Useful for filtering to listings that have received market validation. Leave blank for no minimum."
                    },
                    "maxBids": {
                        "title": "Maximum number of bids",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Keep only listings with at most this many bids. Useful for finding listings with low competition. Leave blank for no maximum."
                    },
                    "endingWithinHours": {
                        "title": "Ending within (hours)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Filter to listings whose auction closes within this many hours from now. Combine with sort=0 (Ending Soon) for an ending-soon sweep. Leave blank for no time-window filter."
                    },
                    "endAfter": {
                        "title": "Auction ended on or after (YYYY-MM-DD)",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Filter to listings whose auction end is on or after this date. Combine with status=completed for a historical-window sweep (e.g. last 30 days, Q1 2026). When set on completed sweeps, the Actor short-circuits pagination once it walks past this cutoff. Format: YYYY-MM-DD."
                    },
                    "endBefore": {
                        "title": "Auction ended on or before (YYYY-MM-DD)",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Filter to listings whose auction end is on or before this date. Use with endAfter for clean historical windows (e.g. endAfter=2026-01-01, endBefore=2026-03-31 for Q1 2026). Format: YYYY-MM-DD."
                    },
                    "listingIds": {
                        "title": "Specific listing IDs (optional)",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "If provided, skip discovery and fetch only these specific listing IDs. Each value is the 8-digit ID from a Municibid listing URL (e.g. '82825058'). When set, categories/regions/keyword/seller/status/sort are ignored.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxListings": {
                        "title": "Max listings",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Maximum number of listings to scrape per run. Set to 0 to disable the limit. Use a small value (e.g. 10) for test runs.",
                        "default": 100
                    },
                    "maxPagesPerFacet": {
                        "title": "Max pages per facet",
                        "minimum": 0,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum browse pages to crawl per category/region facet. Each page returns ~20 listings. Set to 0 to disable.",
                        "default": 1
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy configuration. The Actor runs at ~2 req/s, which Municibid serves cleanly from any IP — datacenter IPs (the default) are sufficient. Switch to RESIDENTIAL only if you ever observe 429/503 responses."
                    }
                }
            },
            "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
                                    }
                                }
                            },
                            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
