# Used Heavy Equipment Listings & Pricing — MachineryTrader (`jungle_synthesizer/machinerytrader-used-heavy-equipment-listings-scraper`) Actor

Scrape used heavy equipment listings from MachineryTrader.com across every major equipment category (excavators, skid steers, dozers, cranes, loaders, and more). Get pricing, full specs, dealer contact info, location, and photos for every for-sale listing.

- **URL**: https://apify.com/jungle\_synthesizer/machinerytrader-used-heavy-equipment-listings-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 record scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/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

## Used Heavy Equipment Listings & Pricing — MachineryTrader Scraper

Scrape used heavy equipment listings from [MachineryTrader](https://www.machinerytrader.com), the reference price surface for North American construction equipment. Returns pricing, full spec sheets, dealer contact details, location, and photos for every for-sale listing across all 18 equipment categories — excavators, skid steers, dozers, cranes, and more.

***

### MachineryTrader Scraper Features

- Covers all 18 top-level equipment categories, from skid steers and excavators to cranes and off-highway trucks
- Returns numeric asking price alongside the price exactly as displayed, so "Call for Price" listings don't silently become nulls
- Extracts every spec-table entry the listing publishes — engine, hours, boom capacity, bucket capacity, undercarriage condition, whatever the equipment type carries — not just a fixed set of fields
- Pulls the full photo gallery per listing, not just the hero image
- Includes dealer name, phone, and profile link for every record — useful for prospecting, not just pricing
- Filter by category, or leave it blank and get everything

***

### Who Uses MachineryTrader Data?

- **Equipment dealers** — price trade-ins against live retail listings instead of guessing
- **Asset-based lenders and appraisers** — mark collateral value against current market asking prices
- **Rental fleet managers** — benchmark disposal pricing before retiring aging units
- **Auction houses** — pull retail comps to set reserve prices, which is a nicer way of saying "know what it's actually worth before the gavel drops"
- **Market researchers** — track pricing trends across equipment categories and manufacturers over time

***

### How MachineryTrader Scraper Works

1. Pick one or more equipment categories, or leave the field empty to cover all 18.
2. The scraper works through each category's listings, following pagination until it has enough records or runs out of listings.
3. Every listing gets its full detail page pulled — price, specs, dealer info, location, description, and photos — not just what's visible on the search results card.
4. Records land in your dataset as clean, structured JSON, ready to export or pipe into whatever you're building.

***

### Input

```json
{
  "maxItems": 50,
  "categories": ["excavators", "skid-steers"]
}
```

| Field        | Type    | Default | Description                                                                                          |
|--------------|---------|---------|--------------------------------------------------------------------------------------------------------|
| `maxItems`   | integer | —       | Maximum number of listing records to scrape. Required.                                                |
| `categories` | array   | all     | Equipment categories to include (e.g. `excavators`, `skid-steers`, `cranes`, `dozers`). Leave empty to cover every category. |

***

### MachineryTrader Scraper Output Fields

```json
{
  "listing_id": "259572195",
  "listing_url": "https://www.machinerytrader.com/listing/for-sale/259572195/2023-kubota-svl97-2-track-skid-steers",
  "title": "2023 KUBOTA SVL97-2",
  "year": 2023,
  "make": "KUBOTA",
  "model": "SVL97-2",
  "category": "Skid Steers",
  "subcategory": "Track Skid Steers",
  "price_usd": 95000,
  "price_label": "$95,000",
  "sale_type": "for-sale",
  "hours": 930,
  "mileage": null,
  "condition": "Used",
  "serial_number": "KBCZ064CAP1C76151",
  "stock_number": "4058",
  "location_city": "Vero Beach",
  "location_state": "Florida",
  "location_country": "USA",
  "dealer_name": "Ryan Underhill",
  "dealer_phone": "(772) 245-7723",
  "dealer_url": "https://www.machinerytrader.com/listings/for-sale/vero-beach-florida/construction-equipment",
  "description": "Barely Used! Attachments Included: mulcher, grapple, pallet forks, bucket, & root spade...",
  "spec_attributes": { "rops": "Enclosed", "bucket": "Yes", "hours_meter": "Accurate / Verified" },
  "image_urls": ["https://media.sandhills.com/img.axd?id=11040448746..."],
  "listed_at": "Wednesday, August 19, 2026 11:13 AM",
  "scraped_at": "2026-09-01T16:02:41.811Z"
}
```

| Field               | Type    | Description                                                                 |
|---------------------|---------|-------------------------------------------------------------------------------|
| `listing_id`        | string  | MachineryTrader's internal listing id                                        |
| `listing_url`       | string  | Full URL to the listing detail page                                          |
| `title`             | string  | Listing title — year, make, and model as displayed                           |
| `year`              | integer | Model year                                                                   |
| `make`              | string  | Manufacturer / brand                                                         |
| `model`             | string  | Model                                                                        |
| `category`          | string  | Top-level equipment category (Excavators, Skid Steers, Cranes, Dozers, ...)  |
| `subcategory`       | string  | The site's more specific sub-type (e.g. "Track Skid Steers")                 |
| `price_usd`         | number  | Numeric asking price in USD, when the listing shows one                      |
| `price_label`       | string  | Price exactly as displayed (e.g. "$95,000", "Call for Price")                |
| `sale_type`         | string  | Always `for-sale` — this actor covers MachineryTrader's for-sale listings    |
| `hours`             | number  | Meter/hour-meter reading, when the equipment type shows one                  |
| `mileage`           | number  | Odometer reading, when the equipment type shows one (trucks)                 |
| `condition`         | string  | Listed condition (Used, New)                                                 |
| `serial_number`     | string  | Manufacturer serial number                                                   |
| `stock_number`      | string  | Dealer stock number, when shown                                              |
| `location_city`     | string  | Machine location city                                                        |
| `location_state`    | string  | Machine location state/province                                              |
| `location_country`  | string  | Machine location country                                                     |
| `dealer_name`       | string  | Seller/dealer contact name                                                   |
| `dealer_phone`      | string  | Seller/dealer phone number                                                   |
| `dealer_url`        | string  | Link to the seller's other listings on MachineryTrader                       |
| `description`       | string  | Full listing description text                                                |
| `spec_attributes`   | object  | Every spec-table label/value pair the listing publishes                      |
| `image_urls`        | array   | Full-size photo URLs for the listing                                         |
| `listed_at`         | string  | Listing's last-updated timestamp, as displayed on the search result card     |
| `scraped_at`        | string  | Timestamp this record was scraped                                            |

***

### FAQ

#### How do I scrape MachineryTrader?

Run this actor with a `maxItems` value and, optionally, a list of equipment categories. It returns structured listing data — no MachineryTrader account or login required.

#### What data can I get from MachineryTrader?

Pricing, full spec sheets, dealer contact info, location, and the complete photo gallery for every for-sale listing across all 18 equipment categories. That includes the fields you'd expect (make, model, year, hours) and the ones dealers don't always mention up front (serial numbers, stock numbers, undercarriage condition).

#### Can I filter by equipment category?

Yes. Pass one or more category slugs (`excavators`, `skid-steers`, `cranes`, `dozers`, and 14 others) in the `categories` input field. Leave it empty and you get every category.

#### Does this actor cover auctions as well as for-sale listings?

No — this actor covers MachineryTrader's for-sale listings specifically. A minority of search results cross-post to sibling Sandhills platforms (auctiontime.com, tractorhouse.com); those are out of scope here and filtered out automatically.

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

No. Point the actor at a category, and it returns listing data — no login, no API key.

***

### Need More Features?

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

### Why Use This MachineryTrader Scraper?

- **Full spec sheets, not just the listing card** — every record includes the complete spec table (engine, hours, boom/bucket capacity, undercarriage condition) plus dealer contact details, which is what actually makes a row usable for pricing or prospecting.
- **Every category, one actor** — covers all 18 equipment categories MachineryTrader publishes, so you're not stitching together results from six different scrapers.
- **Structured output** — clean, consistent field names on every record, so you spend your time using the data instead of cleaning it.

# Actor input Schema

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

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

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

Provide any feedback or suggestions for improvements.

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

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

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

Maximum number of listing records to scrape.

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

Optional. Restrict the crawl to these top-level equipment categories. Leave empty to cover every category MachineryTrader publishes.

## Actor input object example

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

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "categories": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/machinerytrader-used-heavy-equipment-listings-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "categories": [],
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/machinerytrader-used-heavy-equipment-listings-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "categories": []
}' |
apify call jungle_synthesizer/machinerytrader-used-heavy-equipment-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/machinerytrader-used-heavy-equipment-listings-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/XDQP0tbdwXntx4a8n/builds/meoBAgDSNQNpObU6n/openapi.json
