# MachineryTrader Scraper (`crawlerbros/machinerytrader-scraper`) Actor

Scrape machinerytrader.com heavy-equipment listings - browse by category (excavators, dozers, cranes, skid steers, etc.), manufacturer, US state, condition and price/year range, or fetch a full listing by ID. Real prices, hours, specs, seller location and images.

- **URL**: https://apify.com/crawlerbros/machinerytrader-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## MachineryTrader Scraper

Scrape [MachineryTrader.com](https://www.machinerytrader.com) — one of the largest online marketplaces for used and new heavy construction equipment. Browse listings by category, manufacturer, US state, condition and price/year range, or fetch a full listing by ID. No login, no API key, no paid proxy required.

### What this actor does

- **Two modes:** `browse` (search/filter listings) and `byListingIds` (fetch full detail for specific listing IDs)
- **18 equipment categories:** excavators, mini excavators, dozers, cranes, skid steers, wheel loaders, motor graders, off-highway trucks, telehandlers, forklifts, loader backhoes, drills, trenchers, sweepers, aggregate equipment, asphalt/paving equipment, forestry equipment, lifts
- **Filters:** manufacturer, US state, condition (new/used), price range, model-year range, free-text keyword search
- **Sort orders:** featured, price low→high, price high→low, year oldest→newest, year newest→oldest
- **Rich detail records** (via `byListingIds`): hours meter, serial number, seller name/phone, machine location, full spec sheet, photo gallery, video
- **Empty fields are omitted**

### Output per listing

#### Browse mode (`equipmentListing`)

- `listingId`, `title`, `year`, `manufacturer`, `model`, `category`
- `price`, `currency`, `condition` (`New`/`Used`), `inStock`
- `description`, `imageUrl`
- `locationCity`, `locationState`, `locationPostalCode`, `locationCountry`
- `listingUrl`
- `recordType: "equipmentListing"`, `scrapedAt`

#### Detail mode (`equipmentListingDetail`)

All of the above, plus:

- `hoursMeter` (numeric hour reading), `hoursMeterStatus` (e.g. "Accurate / Verified")
- `serialNumber`, `sellerName`, `sellerPhone`, `areaServed`
- `machineLocation` — full street/city/state/zip
- `additionalSpecs` — remaining spec-sheet key/value pairs (varies by equipment type: ROPS, drive type, engine make/model, hydraulics, etc.)
- `imageUrls[]` — up to 15 full-size photos
- `videoUrl` — walkaround video if the seller provided one

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `browse` | `browse` / `byListingIds` |
| `category` | select | `any` | Equipment category, or "Any category" |
| `keywords` | string | – | Free-text keyword search |
| `manufacturer` | string | – | e.g. `CATERPILLAR`, `JOHN DEERE`, `KOMATSU` |
| `state` | select | `any` | US state the equipment is located in |
| `condition` | select | `any` | `New` / `Used` |
| `sortBy` | select | `featured` | Sort order |
| `minPrice` / `maxPrice` | int | – | USD price range |
| `minYear` / `maxYear` | int | – | Model-year range |
| `listingIds` | array | – | Listing IDs (mode=`byListingIds`) |
| `maxItems` | int | `50` | Hard cap (1–1000) |

#### Example: browse Caterpillar excavators in Texas under $100k

```json
{
  "mode": "browse",
  "category": "1031",
  "manufacturer": "CATERPILLAR",
  "state": "Texas",
  "maxPrice": 100000,
  "sortBy": "priceLowHigh",
  "maxItems": 100
}
```

#### Example: keyword search across all categories

```json
{
  "mode": "browse",
  "category": "any",
  "keywords": "skid steer bobcat",
  "condition": "Used",
  "maxItems": 50
}
```

#### Example: full detail for specific listings

```json
{
  "mode": "byListingIds",
  "listingIds": ["240187737", "258856065"]
}
```

### Use cases

- **Equipment dealers** — monitor competitor pricing across manufacturers and states
- **Fleet buyers** — bulk-compare listings by category/price/year before purchasing
- **Market research** — track heavy-equipment resale price trends over time
- **Lead generation** — surface seller contact info for a given equipment segment
- **Price benchmarking** — feed listing prices into valuation models

### FAQ

**Do I need to log in or provide an API key?**  No. The actor reads MachineryTrader's public listing pages; no account, cookies, or paid proxy are required.

**How many listings can I get per run?**  Up to `maxItems` (max 1000). Each search page returns ~20-27 listings, so the actor paginates automatically.

**What does `condition` mean?**  `New` listings are unused factory/dealer stock; `Used` listings have prior operating history (hours, wear, etc.).

**Why do some records have `additionalSpecs` and others don't?**  Spec sheets vary by equipment type — an excavator lists ROPS/reach type, a wheel loader lists bucket capacity, etc. Only fields the seller actually filled in are included.

**Can I filter by price and year together with a category and manufacturer?**  Yes — all `browse` filters combine (category + manufacturer + state + condition + keywords + price range + year range).

**How fresh is the data?**  Real-time — every request hits MachineryTrader's live listing pages directly.

# Actor input Schema

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

What to fetch.

## `category` (type: `string`):

Restrict to an equipment category (mode=browse). Leave as Any to search all categories.

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

Free-text keyword search across all listings, e.g. `caterpillar 320` (mode=browse). Combine with category/manufacturer/state for a narrower search.

## `manufacturer` (type: `string`):

Filter by manufacturer/brand name, e.g. `CATERPILLAR`, `JOHN DEERE`, `KOMATSU`, `KUBOTA`, `BOBCAT`, `VOLVO`, `HITACHI`, `CASE`, `JCB` (mode=browse).

## `state` (type: `string`):

Filter listings by the US state the equipment is located in (mode=browse).

## `condition` (type: `string`):

Filter by equipment condition (mode=browse).

## `sortBy` (type: `string`):

How to order results (mode=browse).

## `minPrice` (type: `integer`):

Drop listings priced below this amount (mode=browse).

## `maxPrice` (type: `integer`):

Drop listings priced above this amount (mode=browse).

## `minYear` (type: `integer`):

Drop listings older than this model year (mode=browse).

## `maxYear` (type: `integer`):

Drop listings newer than this model year (mode=browse).

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

Apify proxy used to reach machinerytrader.com (free AUTO datacenter group).

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

Numeric MachineryTrader listing IDs, e.g. `240187737` (from a listing URL `/listing/for-sale/240187737/...`).

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

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "browse",
  "category": "1031",
  "state": "any",
  "condition": "any",
  "sortBy": "featured",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "listingIds": [],
  "maxItems": 50
}
```

# Actor output Schema

## `listings` (type: `string`):

Dataset containing all scraped MachineryTrader equipment listings.

# 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 = {
    "mode": "browse",
    "category": "1031",
    "state": "any",
    "condition": "any",
    "sortBy": "featured",
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "listingIds": [],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/machinerytrader-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 = {
    "mode": "browse",
    "category": "1031",
    "state": "any",
    "condition": "any",
    "sortBy": "featured",
    "proxyConfiguration": { "useApifyProxy": True },
    "listingIds": [],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/machinerytrader-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 '{
  "mode": "browse",
  "category": "1031",
  "state": "any",
  "condition": "any",
  "sortBy": "featured",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "listingIds": [],
  "maxItems": 50
}' |
apify call crawlerbros/machinerytrader-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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