# NetBid Auction Scraper - Used Machinery Lots & Live Bids (`crawloop/netbid-scraper`) Actor

Scrape NetBid Industry Auctions used machinery lots: current bids, starting prices, reserve status, technical specs, image galleries, locations, contacts, and auction metadata. Full catalog, archive, search, auction/lot URLs. Listings or details mode.

- **URL**: https://apify.com/crawloop/netbid-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 scraped netbid listings

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/actors/running/actors-in-store.md#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

## NetBid Auction Scraper — Used Machinery Lots & Live Bids

> **Crawloop Used Machinery Marketplace Suite** — Structured extraction for used industrial and heavy machinery. Built for B2B lead generation, dealer intelligence, and market pricing workflows.

#### Industrial auction scrapers

| Troostwijk | Surplex | BidSpotter | NetBid |
| :--- | :--- | :--- | :--- |
| [Troostwijk Scraper](https://apify.com/crawloop/troostwijk-scraper) | [Surplex Scraper](https://apify.com/crawloop/surplex-scraper) | [BidSpotter Scraper](https://apify.com/crawloop/bidspotter-scraper) | NetBid Scraper ◄── you are here |

> **Disclaimer:** Unofficial integration for publicly accessible sources. NetBid and related trademarks belong to their respective owners. Provided for informational use only; users must comply with applicable platform terms and laws.

**NetBid scraper** for European **insolvency auctions**, **used industrial machinery**, and **private treaty sales**. Extract **live bids**, **starting prices**, **reserve status**, technical specs, image galleries, project-manager contacts, and auction metadata into JSON — a practical **NetBid API alternative** for Python, Node.js, and MCP workflows on Apify.

Supports **full active catalog**, **auction URLs**, **position (lot) URLs**, **keyword search**, and **historical archive**. Choose `listings` for fast card-level rows or `details` for full lot pages with description, galleries, contacts, and live bid state.

Reliable HTTP extraction with Chrome TLS fingerprinting via `curl_cffi` — no headless browser overhead.

### When to use this Actor

Use the **NetBid Auction Scraper** when you need:

- **Live bids & reserves** — `currentBid`, `startPrice`, `minimumPrice`, reserve-reached flags
- **Deep lot enrichment** — brand, model, year, description, multi-image galleries, documents
- **Project contacts** — manager name, phone, mobile, and email from lot pages
- **Auction context** — parent auction title, number, kind, inspection and pickup windows
- **Archive pricing** — ended auctions for historical comps
- **Multi-language catalogs** — `en`, `de`, `es`, `fr`, `pl`, `cz`, `sl`, `pt`

Ideal for machinery dealers, auction analysts, asset recovery teams, and researchers tracking German and European industrial disposals.

Combine with [Troostwijk Scraper](https://apify.com/crawloop/troostwijk-scraper), [Surplex Scraper](https://apify.com/crawloop/surplex-scraper), and [BidSpotter Scraper](https://apify.com/crawloop/bidspotter-scraper) for a multi-house auction intelligence pipeline.

### Used Machinery Auction Pipeline

```
Input sources                    Extraction modes              Output
─────────────────────           ─────────────────────         ──────────────────

  Full catalog (active lots) ──►  listings  (fast cards)  ──►  price, brand, location
  Auction URL  (/auctions/…) ──►  details   (full lot)   ──►  specs, images, contacts
  Position URL (/positions/…)──►  + live bid state       ──►  bids, reserve, end time
  searchQuery / archive

  Join with Troostwijk + Surplex + BidSpotter ──► cross-house price benchmarking
```

### Key Features

- **Full active catalog** — Pull all live positions in one pass; optional keyword filter on title, brand, and model.
- **Auction & lot targeting** — Scrape specific auction or position URLs from `startUrls`.
- **Deep enrichment** — In `details` mode: description, all images, contacts, inspection/pickup dates, auction linkage.
- **Live bid state** — Optional `includeBids` for start price, current bid, reserve, surcharge, and end time.
- **Historical archive** — Paginated archive of ended auctions for comps and trend analysis.
- **Eight languages** — Localized titles and URLs: `en`, `de`, `es`, `fr`, `pl`, `cz`, `sl`, `pt`.
- **Stable JSON API path** — Primary extraction via IMAS api-party (not fragile HTML scraping).
- **Residential proxy support** — Apify Proxy recommended for production volumes.

### Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `mode` | String | `"full_catalog"` | `full_catalog`, `auction_urls`, `position_urls`, `archive`, or `search`. |
| `scrapeMode` | String | `"details"` | `listings` for card-level rows or `details` for full lot enrichment. |
| `startUrls` | Array | `[]` | Auction pages (`/…/auctions/…`) or position pages (`/…/positions/…`). |
| `searchQuery` | String | `""` | Keyword filter for `search` mode (and optional filter in `full_catalog`). |
| `language` | String | `"en"` | `en`, `de`, `es`, `fr`, `pl`, `cz`, `sl`, `pt`. |
| `includeBids` | Boolean | `true` | In details mode, fetch live bid state per lot. |
| `maxAuctions` | Integer | `0` | Max auctions (`auction_urls` / `archive`). `0` = unlimited. |
| `maxItems` | Integer | `100` | Max position/auction rows to output. `0` = unlimited. |
| `concurrency` | Integer | `5` | Parallel workers for detail/bid fetches. |
| `proxyConfiguration` | Object | residential | Apify Proxy settings (residential recommended). |

#### Input example — keyword search (details)

```json
{
  "mode": "search",
  "scrapeMode": "details",
  "searchQuery": "CNC",
  "language": "en",
  "includeBids": true,
  "maxItems": 100,
  "concurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

#### Input example — full active catalog (listings)

```json
{
  "mode": "full_catalog",
  "scrapeMode": "listings",
  "language": "de",
  "maxItems": 500,
  "concurrency": 5
}
```

#### Input example — specific auctions

```json
{
  "mode": "auction_urls",
  "scrapeMode": "details",
  "startUrls": [
    { "url": "https://www.netbid.com/en/auctions/32742522-32742514-agricultural-tractor-for-professional-use" }
  ],
  "maxItems": 200,
  "includeBids": true
}
```

#### Input example — archive

```json
{
  "mode": "archive",
  "maxAuctions": 100,
  "maxItems": 100,
  "language": "en"
}
```

### Output Format

Each dataset row is a `position` (lot) or `auction` record.

#### Listings mode (card-level)

| Field | Description |
| :--- | :--- |
| `type`, `positionId`, `slugId`, `positionNumber` | Record type and identifiers |
| `title`, `url` | Lot title and canonical URL |
| `brand`, `model`, `constructionYear` | Machine identity |
| `price`, `priceValue`, `currency` | Display and numeric price (EUR) |
| `locationShort`, `locationFlag` | Location summary and country code |
| `amountBids`, `positionType` | Bid activity and lot type |
| `startTimeUtc`, `endTimeUtc`, `scrapedAt` | Timing |

#### Details mode (full lot + optional bids)

All listing fields plus:

| Field | Description |
| :--- | :--- |
| `description` | Full technical description |
| `images`, `documents`, `videos` | Media and attachments |
| `contacts` | Project manager name, phone, mobile, email |
| `locations`, `inspectionDates`, `pickupDates` | Logistics windows |
| `startPrice`, `currentBid`, `minimumPrice` | Live bid state |
| `surcharge`, `isMinimumPriceReached`, `hasBids` | Premium and reserve flags |
| `auctionTitle`, `auctionNumber`, `auctionUrl`, `auctionSlugId` | Parent auction context |
| `positionState` | e.g. `ACTIVE`, `WITH_RESERVATION`, `FINISHED` |

#### Auction records (`archive` / auction mode)

| Field | Description |
| :--- | :--- |
| `type`, `slugId`, `auctionNumber`, `url` | Auction identifiers |
| `title`, `auctionKind`, `auctionState` | Name, kind, and state |
| `positionsCount`, `locationShort`, `locationFlag` | Scale and geography |
| `contacts`, `images`, `description` | Enrichment when available |
| `startDateIso`, `endDateIso` | Auction timeline |

#### Output example (details mode)

```json
{
  "type": "position",
  "positionId": 32866246,
  "slugId": "32866246-26620167",
  "positionNumber": "17441-118",
  "url": "https://www.netbid.com/en/positions/32866246-26620167-dmg-mori-seiki-ecoline-dmu-50-cnc-milling-machine-milling-machine-12",
  "title": "CNC Milling Machine DMG Mori Seiki Ecoline DMU 50",
  "brand": "DMG Mori Seiki",
  "model": "Ecoline DMU 50",
  "constructionYear": 2014,
  "description": "SN: 1536580860A, Heidenhain 620, travel 500 x 450 x 400 mm, …",
  "price": "12.100 €",
  "priceValue": 12100,
  "startPrice": "11.600 €",
  "currentBid": "12.100 €",
  "minimumPrice": "15.400 €",
  "currency": "EUR",
  "amountBids": 2,
  "positionState": "ACTIVE",
  "locationShort": "49090 Osnabrück",
  "locationFlag": "de",
  "images": ["https://files.netbid.com/images/17441/V17441-118_1_slide.jpg"],
  "contacts": [
    {
      "headline": "Project Manager",
      "name": "Oliver Trost",
      "phone": "+49 40 355 059 120",
      "email": "trost@netbid.com"
    }
  ],
  "auctionTitle": "Machines and systems from the automotive supply industry",
  "auctionNumber": "17441",
  "scrapedAt": "2026-07-24T13:00:00Z"
}
```

### Use cases

- Monitor NetBid industrial lots for CNC, metalworking, woodworking, vehicles, and agriculture
- Benchmark live bids and reserves against Troostwijk / Surplex / BidSpotter comps
- Feed dealer CRM / sourcing pipelines with structured lot JSON and project contacts
- Track auction endings and reserve-met flags for bid alerts
- Pull archive auctions for historical pricing and insolvency comps

### Integration examples

#### Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/netbid-scraper').call({
  mode: 'search',
  scrapeMode: 'details',
  searchQuery: 'CNC',
  maxItems: 50,
  includeBids: true,
  proxyConfiguration: { useApifyProxy: true, apifyProxyGroups: ['RESIDENTIAL'] },
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 5));
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("crawloop/netbid-scraper").call(
    run_input={
        "mode": "search",
        "scrapeMode": "details",
        "searchQuery": "forklift",
        "maxItems": 50,
        "includeBids": True,
        "proxyConfiguration": {
            "useApifyProxy": True,
            "apifyProxyGroups": ["RESIDENTIAL"],
        },
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("title"), item.get("currentBid") or item.get("price"), item.get("brand"))
```

#### cURL

```bash
curl -s -X POST "https://api.apify.com/v2/acts/crawloop~netbid-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"search","searchQuery":"CNC","scrapeMode":"details","maxItems":20,"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp).
Connect your Apify account, then call this Actor by its Store ID / name.

Example prompts:

- "Run NetBid Scraper for searchQuery CNC in details mode and return the top 20 lots as JSON"
- "Scrape NetBid full catalog in listings mode, language de, maxItems 100"
- "Chain NetBid Scraper then Surplex Scraper to compare industrial auction asking prices"

### Suite next step

After NetBid lot discovery, enrich European industrial inventory with [Surplex Scraper](https://apify.com/crawloop/surplex-scraper) or [Troostwijk Scraper](https://apify.com/crawloop/troostwijk-scraper). For US/UK industrial catalogues, run [BidSpotter Scraper](https://apify.com/crawloop/bidspotter-scraper).

### FAQ

**Is this a NetBid API?**\
No official public API is required. This Actor reads publicly available catalog and lot data and returns structured JSON for Python, Node.js, and MCP clients.

**Listings vs details?**\
`scrapeMode: listings` is card-level (price, brand, location). `details` adds description, galleries, contacts, and live bid/reserve state.

**Why residential proxies?**\
NetBid is reachable over HTTP, but production volumes are more reliable with Apify RESIDENTIAL groups.

**Does archive mode return lots or auctions?**\
`mode: archive` returns auction-level records. Use `auction_urls` or `full_catalog` for lot-level rows.

**Which languages are supported?**\
`en`, `de`, `es`, `fr`, `pl`, `cz`, `sl`, `pt` — localized titles and URLs.

### Related Actors

| Actor | Role |
| :--- | :--- |
| [Troostwijk Scraper](https://apify.com/crawloop/troostwijk-scraper) | EU industrial auction lots |
| [Surplex Scraper](https://apify.com/crawloop/surplex-scraper) | EU plant closures and industrial lots |
| [BidSpotter Scraper](https://apify.com/crawloop/bidspotter-scraper) | US/UK industrial auction lots |
| NetBid Scraper ◄── you are here | Insolvency auctions, live bids & archive comps |

# Actor input Schema

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

NetBid auction or position URLs. Used when mode is auction\_urls or position\_urls. Examples: /en/auctions/{slugId}-..., /en/positions/{slugId}-...

## `mode` (type: `string`):

What to scrape: full active catalog, specific auctions/positions, historical archive, or keyword search over active positions.

## `scrapeMode` (type: `string`):

listings — fast card-level fields from the positions list (price, brand, location). details — full position page + live bid state (description, all images, contacts).

## `searchQuery` (type: `string`):

Keyword filter for search mode (matched against title, brand, model). Example: CNC, Trimill, tractor.

## `language` (type: `string`):

Site language for localized titles and URLs.

## `includeBids` (type: `boolean`):

In details mode, also fetch positions/{id}/bid (startPrice, currentBid, reserve reached, surcharge).

## `maxAuctions` (type: `integer`):

Maximum auctions to process (auction\_urls / archive). 0 = unlimited.

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

Maximum position/lot records to output. 0 = unlimited.

## `concurrency` (type: `integer`):

Parallel requests for detail/bid fetches.

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

Apify proxy configuration. Residential proxies recommended.

## Actor input object example

```json
{
  "startUrls": [],
  "mode": "full_catalog",
  "scrapeMode": "details",
  "searchQuery": "",
  "language": "en",
  "includeBids": true,
  "maxAuctions": 0,
  "maxItems": 100,
  "concurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `lotsAndAuctions` (type: `string`):

Dataset of NetBid positions (lots) and auction metadata: bids, specs, images, contacts, locations.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/netbid-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/netbid-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 '{}' |
apify call crawloop/netbid-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/netbid-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/a4brvpSRwqSiEqhYA/builds/oguxrrLVjjLsa0ShV/openapi.json
