# Equipment Trader Listings Scraper (`piotrv1001/equipmenttrader-listings-scraper`) Actor

Scrape construction, farm and industrial equipment from Equipment Trader (equipmenttrader.com): price, year, make, model, condition, VIN or serial number, dealer name and phone, location with coordinates and photos. Optional details add hours, horsepower, serial number and the full description.

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

## Pricing

from $4.00 / 1,000 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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🚜 Equipment Trader Listings Scraper

Extract construction, farm and industrial equipment for sale from **equipmenttrader.com**. The **Equipment Trader Listings Scraper** turns any Equipment Trader search into structured data: prices, year, make and model, condition, serial number or VIN, dealer name and **phone number**, city, state, ZIP code, map coordinates and photos. Use it for market research, price tracking, dealer inventory analysis and lead lists.

Run it on the **Apify platform** to get API access, scheduling, monitoring and one-click export to JSON, CSV, Excel or your favourite integration.

### ✨ Features

- 📋 **Rich data from the search pages**: title, year, make, model, trim, condition, price, MSRP, class and category, serial number / VIN, stock number, seller type, dealer name, ID, website and phone, city, state, ZIP, latitude and longitude, listing date, photo URLs and a short description.
- 🔧 **Optional full details**: turn on *Scrape full listing details* to add the complete description, every photo and the spec sheet (hours, horsepower, serial number), plus recent price drops.
- 🔗 **Any search works**: filter on equipmenttrader.com (make, model, price, location, condition, seller type…), copy the address and paste it. Single listing pages (`/listing/...`) work too.
- 🧹 **No duplicates**: each listing is saved and charged once per run, even when several of your searches overlap.
- 📣 **Tells you when a search is too big**: Equipment Trader shows at most about 420 listings per search. When your search matches more, the run says so and how to split it.
- 💸 **Pay only for what you get**: listings that cannot be loaded or no longer exist are not charged.

### 🛠️ How to use the Equipment Trader Listings Scraper

1. **Add search URLs**: open equipmenttrader.com, set the filters you want and copy the address, or keep the default *equipment for sale* page.
2. **Set a limit**: choose how many listings to save with **Max items** (default 50, 0 = no limit).
3. **Choose the depth**: leave **Scrape full listing details** off for fast, cheaper search data, or turn it on for specs, the full description and all photos.
4. **Run it** and download the results as JSON, CSV, Excel or HTML, or read them through the API.

### 🔢 Input

| Field | Description |
|---|---|
| **Search URLs** | Equipment Trader search pages (or single listing pages). Empty = https://www.equipmenttrader.com/equipment-for-sale. |
| **Max items** | Maximum number of listings to save across all URLs (`0` = no limit). |
| **Scrape full listing details** | Open every listing for the spec sheet, full description and all photos. |
| **Proxy configuration** | US residential proxies are used by default and are needed for reliable access. |

Example input:

```json
{
    "startUrls": [{ "url": "https://www.equipmenttrader.com/equipment-for-sale" }],
    "maxItems": 50,
    "scrapeDetails": false
}
```

### 📊 Output

Example record with **Scrape full listing details** on (photo list and description shortened):

```json
{
    "id": "5042605636",
    "url": "https://www.equipmenttrader.com/listing/2019-JLG-1055-5042605636",
    "title": "2019 JLG 1055",
    "year": 2019,
    "make": "JLG",
    "model": "1055",
    "trim": null,
    "condition": "Used",
    "price": 115000,
    "msrp": null,
    "className": "LIFTING",
    "category": "Telehandler",
    "mileage": null,
    "hours": 3268,
    "fuelType": null,
    "serialNumber": null,
    "stockNumber": "GU003995",
    "sellerType": "Dealer",
    "dealerName": "Global Fleet Solutions",
    "dealerId": "5000014480",
    "dealerWebsite": "https://www.globalfleetsolutions.com/",
    "phone": "1-888-215-4976",
    "dealerDirectPhone": "8556004483",
    "trustedPartner": null,
    "premium": false,
    "city": "Houston",
    "state": "TX",
    "zip": "77022",
    "latitude": 29.82997,
    "longitude": -95.37642,
    "listedAt": "2026-10-12T04:29:07Z",
    "photoCount": 4,
    "images": [
        "https://cdn-media.tilabs.io/v1/media/6acc62144f75545cbc05d4fc.jpg",
        "https://cdn-media.tilabs.io/v1/media/6acc62145d3cfac295013ca2.jpg"
    ],
    "description": "2019 JLG, 1055 Telehandler / Zoom Boom, 10000 Lbs Capacity, Brake System, , Stacking Height, 2019 used JLG 1055 for sale. Global has over 2000 pieces of used equipment in stock. In…",
    "makeAnOfferPrice": null,
    "priceDrop": null,
    "horsePower": null,
    "specs": {
        "stockNumber": "GU003995",
        "hours": "3,268"
    },
    "scrapedAt": "2026-10-12T06:07:55.158Z"
}
```

### 🧾 Data fields

| Field | Description |
|---|---|
| `id`, `url` | Equipment Trader listing ID and page |
| `title`, `year`, `make`, `model`, `trim` | What is for sale |
| `condition` | New or used |
| `price`, `msrp` | Asking price and MSRP in USD (`null` = call for price) |
| `className`, `category` | Equipment Trader class and category |
| `mileage`, `hours`, `fuelType` | Usage and fuel, where the seller gives them |
| `serialNumber`, `stockNumber` | Serial number or VIN, dealer stock number |
| `sellerType`, `dealerName`, `dealerId`, `dealerWebsite` | Who sells it |
| `phone`, `dealerDirectPhone` | Phone number shown on the listing, and the dealer's own line when it differs |
| `city`, `state`, `zip`, `latitude`, `longitude` | Where it is |
| `listedAt` | When the listing was created |
| `premium`, `trustedPartner` | Paid placement and the dealer's trusted-partner badge |
| `photoCount`, `images` | Number of photos and their URLs |
| `description` | Short description from the search page; the full text with details on |
| `specs` | *Details only*: the spec sheet (hours, horsepower, serial number…) |
| `horsePower`, `makeAnOfferPrice`, `priceDrop` | *Details only*: horsepower, make-an-offer price, latest price drop (amount and date) |
| `scrapedAt` | When the row was saved |

### 💰 Pricing

This Actor uses **Pay-Per-Event** pricing: you pay for the listings you get.

| Event | Price |
|---|---|
| **Listing** (from search pages) | $0.004 per listing ($4 per 1,000) |
| **Detail** (with *Scrape full listing details*, charged instead of the listing) | $0.01 per listing ($10 per 1,000) |
| **Actor start** | $0.00005 per run (per GB of memory) |

**How much does it cost to scrape Equipment Trader?** 1,000 listings from search pages cost about **$4**; 1,000 listings with full details cost about **$10**. Apify's free plan includes monthly credits, so you can try it at no cost.

### 💡 Tips

- **Big searches**: Equipment Trader shows at most about 420 listings for one search, however many match. To get more, split the search: one URL per make, state or price range. The run's status message tells you when a search hit this limit.
- **Order**: if your URL has no sort, listings come in the site's own default order. Pick a sort on the site (for example newest first) to change it.
- **A URL with `page=3`** starts at page 3.
- Use **Max items** to cap costs while testing, and schedule runs to track new inventory and price changes.

### ❓ FAQ

**Is it legal to scrape Equipment Trader?** The Actor collects publicly available listing data. You are responsible for using it in line with Equipment Trader's terms and applicable law, including data-protection rules for any personal data.

**Why do some listings have no price?** The seller chose "call for price"; `price` is `null` then.

**Why did my run return fewer listings than the search shows?** Equipment Trader shows about 420 listings per search. Split the search with filters, as described in Tips.

**Found a bug or need a feature?** Open an issue in the Actor's **Issues** tab.

# Actor input Schema

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

Equipment Trader search pages to scrape. Run a search on equipmenttrader.com (make, model, price, location, condition…) and paste its address. Equipment Trader shows about 420 listings per search, so split large searches with filters (price ranges, makes or states) into several URLs. Single listing pages (`/listing/...`) are also accepted and always return full details. Leave empty to scrape https://www.equipmenttrader.com/equipment-for-sale.

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

Maximum number of listings to save across all URLs. Set to 0 for no limit.

## `scrapeDetails` (type: `boolean`):

Open every listing and add the full description, all photos and the spec sheet (hours, horsepower, serial number). Charged as a listing detail instead of a listing.

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

US residential proxies are required for reliable access and are used by default.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.equipmenttrader.com/equipment-for-sale"
    }
  ],
  "maxItems": 50,
  "scrapeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.equipmenttrader.com/equipment-for-sale"
        }
    ],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/equipmenttrader-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 = {
    "startUrls": [{ "url": "https://www.equipmenttrader.com/equipment-for-sale" }],
    "maxItems": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/equipmenttrader-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 '{
  "startUrls": [
    {
      "url": "https://www.equipmenttrader.com/equipment-for-sale"
    }
  ],
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call piotrv1001/equipmenttrader-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/equipmenttrader-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/4tizTajvB2fJojmkw/builds/8hGrP2SNAgRCC7QW0/openapi.json
