# Multi Auction Search — Storage, Surplus & Estate Sites (`scrapersdelight/multi-auction-search`) Actor

Search 8 auction sites in one run — StorageTreasures, GSA, PublicSurplus, Municibid, Proxibid, MaxSold, K-BID & Equip-Bid. One unified feed of lots with bid, close time, location & photo, plus a cross-site new-lot monitor with alerts. No login or API key. $4 per 1,000 lots.

- **URL**: https://apify.com/scrapersdelight/multi-auction-search.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** E-commerce, Automation, Lead generation
- **Stats:** 7 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 per lots

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 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

## 🔎 Multi Auction Search — Storage, Surplus & Estate Sites

**One keyword search across 8 auction sites in a single run — StorageTreasures, GSA Auctions, PublicSurplus, Municibid, Proxibid, MaxSold, K-BID and Equip-Bid. Get one unified feed of matching lots (title, current bid, location, close time, photo) instead of checking 8 tabs, then schedule it as a cross-site new-lot monitor that pings Slack, email, or webhook the moment a fresh match drops anywhere.**

Stop tab-hopping between auction sites. Type "tools", "generator", "trailer", "jewelry" — get every matching live lot across the storage-unit, government-surplus, and estate-sale ecosystems in one clean dataset. No login, no API key, no browser automation.

***

### What does Multi Auction Search do?

Multi Auction Search fans your keyword out to up to **8 auction marketplaces concurrently** and returns one normalized table of matching live lots you can export to **JSON, CSV, Excel, or push to your app via API**:

- 🏛️ **PublicSurplus** — state/county/city government surplus (server-side keyword search)
- 🚒 **Municibid** — municipal surplus: vehicles, equipment, gear (server-side keyword search)
- 🇺🇸 **GSA Auctions** — federal surplus, from the official public JSON feed
- 📦 **StorageTreasures** — abandoned storage-unit auctions (contents matched to your keyword)
- 🚜 **Equip-Bid** — Midwest equipment & liquidation auctions
- 🔨 **K-BID** — the Midwest's largest independent online-auction marketplace
- 💎 **Proxibid** — live auction lots by category
- 🏠 **MaxSold** — estate-sale item lots across the US & Canada

Sites with a real server-side search get your keyword in the request; sites without one have their latest lots fetched and filtered client-side — the same live-verified approach as our 8 dedicated single-site scrapers (linked below).

- ⚡ **Concurrent + fault-isolated** — all sites run in parallel under a per-site time budget; one slow or blocked site never fails the run.
- 🧾 **One unified record shape** — `site`, `lot_url`, `title`, `current_bid`, `currency`, `location`, `close_time`, `image`.
- 🔔 **Cross-site new-lot monitor** — schedule it and get **Slack / email / webhook alerts** for newly listed matches on any of the 8 sites.

***

### What data does it extract?

One dataset row per matching lot:

- 🌐 `site` — which marketplace the lot is on
- 🆔 `lot_id`, 🔗 `lot_url` — direct link to bid
- 🏷️ `title` — lot/auction title
- 💵 `current_bid` + `currency` (USD / CAD)
- 📍 `location` — city/state as the site publishes it
- ⏰ `close_time` — auction end time
- 🖼️ `image` — lead photo
- ✨ `is_new` (monitor mode), 🔎 `keyword`, 🕒 `scraped_at`

***

### Who is it for?

- 🛒 **Resellers & flippers** sourcing inventory ("tools", "pallet", "laptop") across every channel at once.
- 🚚 **Equipment & vehicle buyers** watching surplus fleets on GSA + PublicSurplus + Municibid simultaneously.
- 📦 **Storage-auction hunters** combining unit contents with surplus and estate lots in one feed.
- 📊 **Deal-alert builders** piping cross-site matches into Slack, Make, Zapier, n8n, or a custom app.

***

### Two ways to use it

1. **One-shot search** — enter keywords, pick sites, get the combined dataset.
2. **Cross-site monitor** *(the recurring play)* — set `monitorMode: true`, attach an **Apify Schedule** (e.g. hourly), and the actor emits/alerts **only lots that are new since the last run**, per keyword+site scope.

***

### How to use it (step by step)

1. Click **Try for free**.
2. Enter **Keywords** (e.g. `tools` — comma-separate multiple terms).
3. Pick **Sites to search** (the prefill is the 3 fastest; add the rest for full coverage).
4. Click **Start**, then open the **Dataset** tab to view/export.
5. *(Optional)* set **monitorMode** + a **Schedule** + an alert channel to get pinged on new matches.

#### Quick start

```json
{ "keywords": "tools", "sites": ["publicsurplus", "municibid", "gsa"] }
```

#### Full 8-site sweep

```json
{ "keywords": "generator, welder", "maxLotsPerSite": 100 }
```

#### Cross-site new-lot monitor

```json
{
  "keywords": "trailer",
  "monitorMode": true,
  "alertOnNewLot": true,
  "slackWebhookUrl": "https://hooks.slack.com/services/…"
}
```

***

### Input

| Field | What it does |
|-------|--------------|
| `keywords` | search terms, comma-separated; empty = latest lots per site |
| `sites` | which of the 8 sites to include (omit = all 8) |
| `maxLotsPerSite` | cap on matching lots per site (default 25) |
| `perSiteTimeoutSecs` | per-site time budget; a slow site is cut off, run continues (default 120) |
| `proxibidCategory` | Proxibid `/for-sale/<category>` slug its latest lots are pulled from |
| `maxsoldStates` | MaxSold `/usa/<state>` browse pages used for discovery |
| `gsaApiKey` | optional free api.data.gov key (DEMO\_KEY used otherwise) |
| `monitorMode`, `alertOnNewLot` | recurring cross-site watcher + alerts |
| `webhookUrl`, `slackWebhookUrl`, `emailRecipients` | alert channels |
| `proxyConfiguration`, `requestConcurrency` | proxy + per-site parallelism (datacenter is enough) |

***

### Output

Each matching lot is one dataset record (fields listed above). Export to **JSON, CSV, Excel, HTML, or RSS**, or fetch via the **Apify API**. Bids are numbers; `close_time` is ISO-8601 where the site publishes a real timestamp (site-local or relative text otherwise). A per-site result summary is logged on every run; a failing site is skipped, and the run succeeds as long as at least one site returned.

***

### How much does it cost?

Pay-per-event — you pay for what you pull, no subscription:

| Event | What it covers | Price |
|-------|----------------|-------|
| `lot-scraped` | each matching lot returned | $0.004 / lot |
| `monitor-run-completed` | each scheduled watch run | $0.05 / run |
| `new-lot-detected` | each newly listed lot (monitor mode) | $0.02 / lot |
| `alert-delivered` | each Slack/email/webhook push | $0.005 / alert |

That's **$4 per 1,000 lots** for plain searches.

***

### Related Actors (deep single-site scrapers)

Need every field a site offers (descriptions, photos galleries, seller/agency, bid counts, server-side filters)? Use the dedicated scraper:

| Site | Actor |
|------|-------|
| StorageTreasures | [apify.com/scrapersdelight/storagetreasures-scraper](https://apify.com/scrapersdelight/storagetreasures-scraper) |
| GSA Auctions | [apify.com/scrapersdelight/gsa-auctions-scraper](https://apify.com/scrapersdelight/gsa-auctions-scraper) |
| PublicSurplus | [apify.com/scrapersdelight/publicsurplus-scraper](https://apify.com/scrapersdelight/publicsurplus-scraper) |
| Municibid | [apify.com/scrapersdelight/municibid-scraper](https://apify.com/scrapersdelight/municibid-scraper) |
| Proxibid | [apify.com/scrapersdelight/proxibid-scraper](https://apify.com/scrapersdelight/proxibid-scraper) |
| MaxSold | [apify.com/scrapersdelight/maxsold-scraper](https://apify.com/scrapersdelight/maxsold-scraper) |
| K-BID | [apify.com/scrapersdelight/k-bid-scraper](https://apify.com/scrapersdelight/k-bid-scraper) |
| Equip-Bid | [apify.com/scrapersdelight/equip-bid-scraper](https://apify.com/scrapersdelight/equip-bid-scraper) |

***

### Is it legal to scrape these sites?

The lots are **public auction listings**, browsable without a login, and the records are item/listing data — not personal data. Scraping publicly available listings is generally legal, but you are responsible for your use: **review each site's Terms of Service before commercial use or resale of the data**.

***

### FAQ

**Which sites does it search?**
PublicSurplus, Municibid, GSA Auctions, StorageTreasures, Equip-Bid, K-BID, Proxibid, and MaxSold — pick any subset with the `sites` input.

**Do I need an account, login, or API key?**
No. Every site is read from public pages or public feeds. (Optionally add a free api.data.gov key for higher GSA rate limits.)

**How does keyword matching work?**
PublicSurplus and Municibid search server-side. The others have no public keyword search, so the actor pulls their latest lots/feeds and matches your terms against titles, descriptions, or unit contents — the same as their dedicated scrapers.

**What happens if one site is down or blocks the request?**
It's logged and skipped. The run succeeds with whatever the other sites returned — only if *all* selected sites fail does the run fail.

**Can I monitor all 8 sites and get alerts?**
Yes. Turn on `monitorMode`, attach an Apify **Schedule**, and add a Slack/webhook/email channel. Each run emits and alerts **only lots new since the last run** across every selected site.

**Why does StorageTreasures sometimes return few matches?**
It has no server-side search, so the actor scans the newest ~3,000 lots of the national feed per run and matches your keyword against unit contents. Niche terms may match only a handful — that's the real match count, not a failure.

**Can I search multiple keywords?**
Yes — comma-separate them (`"generator, welder"`). A lot matches if any term matches.

**What does `current_bid: null` mean?**
K-BID and Equip-Bid list multi-lot auction sales, not single items, so there is no single bid figure; some sites also show no-bid lots. Open the `lot_url` for live bidding detail, or use the dedicated single-site scraper for item-level data.

**How fresh is the data?**
Live — every run hits the sites in real time. `close_time` lets you sort by what's ending soonest.

**How do I export the data?**
JSON, CSV, Excel, HTML, or RSS from the Dataset tab, or via the Apify API.

**Can I integrate with Make, Zapier, n8n, or my backend?**
Yes — use the webhook/Slack channels for alerts, or the Apify API to pipe the dataset anywhere.

***

### Feedback

Want another auction site added to the sweep, or a missing field? Open an issue on the actor — fast fixes and feature requests welcome.

# Actor input Schema

## `keywords` (type: `string`):

What to search for across the selected auction sites, e.g. 'tools' or 'generator'. Comma-separate multiple terms (a lot matches if ANY term matches). Leave empty to pull the latest lots from each site without filtering.

## `sites` (type: `array`):

Which auction sites to include in this run. Defaults to all 8 when omitted via API. The prefill is the 3 fastest sites for a quick first run — add the rest for full coverage.

## `maxLotsPerSite` (type: `integer`):

Hard cap on matching lots returned per site (cost/speed guard). 25 keeps the run fast; raise it for bulk pulls.

## `perSiteTimeoutSecs` (type: `integer`):

Each site gets this many seconds before it is cut off with whatever it has collected — one slow site can't drag the whole run. Sites run concurrently.

## `proxibidCategory` (type: `string`):

Proxibid has no public keyword search, so its latest lots are pulled from this /for-sale/<category> page and filtered by your keywords. Default: jewelry-gemstones-watches.

## `maxsoldStates` (type: `array`):

MaxSold has no public keyword search, so its latest auctions are discovered from these /usa/<state> browse pages (lowercase, hyphenated, e.g. new-york) and their item lots filtered by your keywords. Default: new-york, california, florida, massachusetts, pennsylvania, texas.

## `gsaApiKey` (type: `string`):

Optional. The public DEMO\_KEY is used by default; supply your own free api.data.gov key for higher rate limits.

## `monitorMode` (type: `boolean`):

Recurring watcher: diff against the prior run's seen lots (per keyword+site scope) and output/alert ONLY newly-listed lots across all selected sites. Pair with an Apify Schedule.

## `alertOnNewLot` (type: `boolean`):

In monitor mode, deliver an alert for each newly-listed lot via the channels below.

## `webhookUrl` (type: `string`):

POST endpoint for new-lot alert payloads (Make / Zapier / n8n / custom). One JSON body per alert.

## `slackWebhookUrl` (type: `string`):

Slack incoming-webhook URL for formatted new-lot cards.

## `emailRecipients` (type: `array`):

Email addresses for the new-lot digest (sent via apify/send-mail).

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

Proxy settings. Datacenter rotation is enough for these sites.

## `requestConcurrency` (type: `integer`):

Max parallel requests inside each site adapter (feed pages, bid galleries). Keep modest to respect the sites' rate limits.

## `diagnose` (type: `boolean`):

Dev only. Runs the search, logs one parsed record per site plus the per-site summary, saves DEBUG\_SITE\_RESULTS to the key-value store, and exits WITHOUT pushing data. Leave off for normal runs.

## Actor input object example

```json
{
  "keywords": "tools",
  "sites": [
    "publicsurplus",
    "municibid",
    "gsa"
  ],
  "maxLotsPerSite": 25,
  "perSiteTimeoutSecs": 120,
  "proxibidCategory": "jewelry-gemstones-watches",
  "monitorMode": false,
  "alertOnNewLot": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "requestConcurrency": 4,
  "diagnose": false
}
```

# Actor output Schema

## `lots` (type: `string`):

The dataset of matching lots across all selected auction sites (one item per lot).

# 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 = {
    "keywords": "tools",
    "sites": [
        "publicsurplus",
        "municibid",
        "gsa"
    ],
    "maxLotsPerSite": 25,
    "perSiteTimeoutSecs": 120
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/multi-auction-search").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 = {
    "keywords": "tools",
    "sites": [
        "publicsurplus",
        "municibid",
        "gsa",
    ],
    "maxLotsPerSite": 25,
    "perSiteTimeoutSecs": 120,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/multi-auction-search").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 '{
  "keywords": "tools",
  "sites": [
    "publicsurplus",
    "municibid",
    "gsa"
  ],
  "maxLotsPerSite": 25,
  "perSiteTimeoutSecs": 120
}' |
apify call scrapersdelight/multi-auction-search --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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