# TrailerTrader Scraper — Trailers, RVs & Dealer Leads (`yugenox/trailertrader-scraper`) Actor

Scrape TrailerTrader.com trailers and RVs for sale: price, year, make, model, condition, specs, photos, location and the dealer's name, phone, website and address. Filter by category, condition, make, US state or city radius, price and year. Optional VIN, GVWR and dimensions. No login.

- **URL**: https://apify.com/yugenox/trailertrader-scraper.md
- **Developed by:** [Yugenox Corp](https://apify.com/yugenox) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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

## TrailerTrader Scraper: trailers, RVs and dealer leads

Scrape **TrailerTrader.com**, the US marketplace for trailers and recreational vehicles, by category, keyword, US state or city radius. Every listing comes with the **price, year, make, model, condition, category, photos, location and the dealer's name, phone number, website and address**. Turn on **full details** to add the **VIN, GVWR, axle capacity, dimensions, the full description and every spec**. Filter by condition, make, price, model year and hitch type, or keep **dealers only** for a clean lead list. No login, no cookies, no TrailerTrader account.

### What you get

| | |
|---|---|
| **Listing** | Title, year, make, model, condition (new / used / remanufactured), category, trailer type, listing URL, posted and updated dates |
| **Price** | Asking price, regular and sale price, "contact seller for price" flag, currency, monthly payment when the dealer shows one |
| **Specs** | Hitch type, length, payload capacity, weight; with full details also VIN, GVWR, axles, axle capacity, width, height, construction, color and every other spec the listing has (living quarters, slide-outs, nose and roof type …) |
| **Photos** | Main photo and the photo URLs |
| **Dealer** | Dealership name, phone, e-mail, website, street address, city, state, ZIP (with full details) and map coordinates |
| **Description** | Short description; with full details the complete description as plain text |

### How to use it

1. Pick one or more **categories** (Dump Trailers, Cargo (Enclosed) Trailers, Travel Trailers, Horse Trailers, Flatbed Semi Trailers …) and/or type **search terms** such as `gooseneck`, `7x16` or `Big Tex 14LP`.
2. Optionally set a **US state** (`Texas` or `TX`) or a **city** (`Dallas, TX`) with a radius in miles.
3. Add filters (condition, makes, price, model years, hitch type, dealers only), set **Max listings** and run.

Each search term is searched in each category. **Max listings** is the total for the run, shared fairly between your searches. Leave everything empty to get the newest listings on the whole site.

#### Input examples

Used dump trailers in Texas:

```json
{
  "categories": ["Dump Trailers"],
  "state": "TX",
  "condition": ["used"],
  "maxItems": 200
}
```

Gooseneck flatbeds within 100 miles of Dallas, $5,000 to $15,000, with VIN and GVWR:

```json
{
  "categories": ["Equipment / Flatbed Trailers"],
  "searchTerms": ["gooseneck"],
  "city": "Dallas, TX",
  "distanceMiles": 100,
  "priceMin": 5000,
  "priceMax": 15000,
  "includeDetails": true,
  "maxItems": 50
}
```

A dealer lead list: every dealer selling Big Tex or PJ trailers in Georgia:

```json
{
  "manufacturers": ["Big Tex Trailers", "PJ Trailers"],
  "state": "Georgia",
  "sellerType": "dealers",
  "maxItems": 0
}
```

You can also paste TrailerTrader **search pages** (for example `https://trailertrader.com/trailers-for-sale/used-dump-trailers-for-sale-in-texas`; the filters in the URL are kept) or **listing pages** (ending in `.html`; these are always read with full details) into **TrailerTrader URLs**.

### Output example

```json
{
  "listingId": "4530512",
  "url": "https://trailertrader.com/2014-titan-22-gooseneck-MAat.html",
  "title": "2014 TITAN 22' Gooseneck",
  "year": 2014,
  "manufacturer": "Titan Trailers",
  "model": "22' Gooseneck",
  "condition": "used",
  "category": "Stock / Stock Combo Trailers",
  "trailerType": "Horse & Livestock",
  "price": 11500,
  "listPrice": 11500,
  "salePrice": null,
  "onSale": false,
  "callForPrice": false,
  "currency": "USD",
  "availability": "Available",
  "stockNumber": "E1067591",
  "vin": "4TGG22202E1067591",
  "specs": { "on_sale": false },
  "description": "- Very Clean 6'8 x 22 Long Titan Gooseneck Stock Trailer. Escape door on curb side, sliding vents under nose, 1 sliding center gate, spare tire, 7k Axles …",
  "imageUrl": "https://dealer-cdn.com/kuDXH6/7pffYO/2014_TITAN_22_Gooseneck_kjRefw8q7zk2.webp",
  "imageCount": 10,
  "sellerType": "dealer",
  "sellerName": "Rod's Power Sports",
  "dealerPhone": "(402) 423-6230",
  "dealerEmail": "info@rodspowersports.com",
  "dealerWebsite": "https://www.rodspowersports.com/",
  "address": "1030 SALTILLO RD",
  "city": "Roca",
  "state": "NE",
  "postalCode": "68430",
  "latitude": 40.6702,
  "longitude": -96.6391,
  "listedAt": "2026-10-01T06:13:34.000Z",
  "searchQuery": "\"gooseneck\"",
  "position": 3,
  "detailsFetched": true,
  "scrapedAt": "2026-10-01T23:24:02.673Z"
}
```

Every row has the same columns (the example leaves a few out); a value the listing doesn't state is `null`. `vin`, `gvwrLbs`, `axles`, `widthFt`, `heightFt`, `axleCapacityLbs`, `postalCode`, the full `description` and the complete `specs` come with **Include full details**.

### Use cases

- **Dealer lead generation**: build a list of trailer and RV dealers by state, make or category, with phone, website and address.
- **Price research**: compare asking prices by make, model, year, condition and region; spot sale prices.
- **Inventory monitoring**: schedule a daily run to track what competitors list and when listings are sold.
- **Market analysis**: count listings by category, make and state over time.
- **Buying**: get every gooseneck, dump or cargo trailer in your price range near you in one spreadsheet.

### FAQ

**Do I need a TrailerTrader account, cookies or a login?** No. The scraper reads the same public listings any visitor sees, through the data the TrailerTrader website itself loads for anonymous visitors. It never logs in and needs nothing from you except a search.

**How fast is it?** A results page holds 100 listings and takes about 2 seconds, so 1,000 listings take well under a minute. **Include full details** reads one extra record per listing (about 3 a second).

**How many listings can I get?** All of them. TrailerTrader returns at most 10,000 listings for one search, so when you ask for more the scraper splits a big search into parts by condition, make and model year by itself. Set **Max listings** to 0 to get everything your searches find.

**Can I search in Canada?** TrailerTrader lists a few Canadian dealers, but its own location filters only work for US states and US cities. A state or city TrailerTrader doesn't recognise is never silently dropped: the run tells you and charges nothing for it.

**What about private sellers?** Private sellers' listings are included (unless you choose **Dealers only**), but the seller's name, phone number, e-mail, street address, ZIP code and map location are never output: the seller shows as "Private Seller" with just the city and state, and phone numbers or e-mails typed into a private seller's title or description are removed.

**Which proxy should I use?** Keep the default (Apify Proxy, datacenter). It comes with every Apify plan, including the free one. If TrailerTrader refuses datacenter IPs for a while, the run switches to residential proxies when your account has them, and carries on without them when it doesn't.

**What does a run cost?** You pay per listing saved, a tiny fee per search and a small fee per run; full details are a separate, optional charge. See the Pricing tab. Listings that are filtered out (for example private sellers with **Dealers only**) are never charged.

**Is it legal to scrape TrailerTrader?** This Actor only collects publicly available data: trailer and RV listings that anyone can see on TrailerTrader without an account, such as the price, specs, photos and the dealership's business contact details. Collecting publicly available data is generally legal, but you're responsible for how you use it. Private sellers are people, so their names and contact details are never collected. You must follow privacy laws such as GDPR, PIPEDA and CCPA, anti-spam laws such as CAN-SPAM and CASL if you contact dealers, as well as TrailerTrader's terms. If you're unsure, check with a lawyer. More on this: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?** No. Everything comes from listings TrailerTrader shows to any visitor without logging in. It never uses a login, never touches user accounts, saved searches or messages, and follows TrailerTrader's robots.txt.

This Actor is not affiliated with, endorsed by or sponsored by TrailerTrader or its owners. All trademarks belong to their owners.

# Actor input Schema

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

TrailerTrader categories to scrape, e.g. Dump Trailers, Cargo (Enclosed) Trailers, Travel Trailers. Each category is searched separately. Leave empty to search every category (or pick a trailer type below).

## `searchTerms` (type: `array`):

Optional keywords, the same as typing in TrailerTrader's search box, e.g. "gooseneck", "7x16", "Big Tex 14LP". Each term is searched separately (in each category).

## `trailerType` (type: `string`):

Limit the search to one of TrailerTrader's trailer types (used when no category is picked).

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

A US state name or two-letter code, e.g. "Texas" or "TX". Leave empty for the whole country. (TrailerTrader can't filter by Canadian province.)

## `city` (type: `string`):

Search around a US city instead of a state, written as "City, ST", e.g. "Dallas, TX".

## `distanceMiles` (type: `integer`):

Radius around the city. TrailerTrader's default is 200 miles.

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

Maximum number of listings for the whole run, shared fairly between your searches. 0 = everything (searches over 10,000 listings are split automatically).

## `includeDetails` (type: `boolean`):

Also read every listing's detail record: the full description, VIN, GVWR, axle capacity, dimensions, every spec (axles, construction, color, nose, roof, living quarters…) and every photo. One extra request per listing, charged as a separate "detail" event.

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

Optional: TrailerTrader search pages (e.g. https://trailertrader.com/trailers-for-sale/used-dump-trailers-for-sale-in-texas — filters in the URL are kept) or listing pages (ending in .html; always read with full details).

## `condition` (type: `array`):

New, used and/or remanufactured. Empty = all.

## `manufacturers` (type: `array`):

Only these manufacturers, written as TrailerTrader shows them, e.g. "Big Tex Trailers", "PJ Trailers", "Forest River".

## `priceMin` (type: `integer`):

Lowest asking price, in the listing's own currency (almost always USD).

## `priceMax` (type: `integer`):

Highest asking price, in the listing's own currency (almost always USD).

## `yearMin` (type: `integer`):

Oldest model year to include, e.g. 2018.

## `yearMax` (type: `integer`):

Newest model year to include.

## `pullType` (type: `array`):

Empty = all.

## `sellerType` (type: `string`):

All sellers, or dealers only (useful for dealer lead lists). Private sellers' names, phone numbers, e-mails and street addresses are never included.

## `sort` (type: `string`):

Newest listings first (default) or oldest first.

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

Apify Proxy (datacenter) is the default and comes with every Apify plan. If TrailerTrader refuses datacenter IPs for a while, the run switches to residential proxies when your account has them.

## Actor input object example

```json
{
  "categories": [
    "Dump Trailers"
  ],
  "trailerType": "any",
  "state": "TX",
  "distanceMiles": 200,
  "maxItems": 20,
  "includeDetails": false,
  "sellerType": "all",
  "sort": "newest",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped trailer and RV listings.

## `run` (type: `string`):

Status and statistics for this run.

## `report` (type: `string`):

RUN_REPORT: how the run ended, counts, requests and proxy use.

# 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 = {
    "categories": [
        "Dump Trailers"
    ],
    "state": "TX",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/trailertrader-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 = {
    "categories": ["Dump Trailers"],
    "state": "TX",
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/trailertrader-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 '{
  "categories": [
    "Dump Trailers"
  ],
  "state": "TX",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call yugenox/trailertrader-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yugenox/trailertrader-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/UYA2T661t9UMafwSw/builds/5VamxYDDtEaKjaL1W/openapi.json
