# RV Trader Scraper (`crawlerbros/rvtrader-scraper`) Actor

Scrape RV listings from RVTrader.com - search new & used motorhomes, travel trailers, fifth wheels, toy haulers and more by type, keyword, make, condition, seller type, fuel type, state, price, year, length, sleeping capacity or ZIP radius. Free AUTO proxy; no login required.

- **URL**: https://apify.com/crawlerbros/rvtrader-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** E-commerce, Automation, Lead generation
- **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

## RV Trader Scraper

Scrape RV listings from [RVTrader.com](https://www.rvtrader.com) — search new & used motorhomes, travel trailers, fifth wheels, toy haulers and more by type, condition, price, year, length, sleeping capacity, state, ZIP radius or free-text keyword. No login or API key required; uses the free Apify AUTO datacenter proxy.

### What this actor does

- **Search & filter** RVTrader's full listing inventory by RV type, keyword (make/model/trim), manufacturer/make, model, condition (new/used), seller type (dealer/private), fuel type, state/province, price range, year range, length range, minimum sleeping capacity, ZIP + search radius, and sort order
- **Real listing data** for every result — title, year, price, currency, condition, and the direct RVTrader listing URL, always populated from the search results page
- **Bonus enrichment when available** — on search-page templates that embed RVTrader's richer per-listing data, records also include make, model, trim, mileage, length, dealer or private-seller details, VIN, stock number, city/state/coordinates and real photo URLs — no per-listing page fetch required
- **Empty fields are omitted** from every record

### Output fields

Always present:

- `recordType` — always `"listing"`
- `listingId` — RVTrader's internal listing ID
- `title` — e.g. "2024 Jayco Eagle 355MBQS"
- `year`, `price`, `priceCurrency`, `condition`
- `rvType` — the RV category the listing was found under (Class A, Travel Trailer, etc.) — always known, since every search request is scoped to a specific type
- `listingUrl` — the live rvtrader.com listing page
- `scrapedAt` — ISO-8601 timestamp of when the record was collected

Included when RVTrader's search page provides the richer per-listing data for that result:

- `make`, `model`, `trim`
- `mileage` — odometer reading in miles
- `lengthFt` — RV length in feet
- `sellerType` — `"Dealer"` or `"Private"`
- `dealerName`, `dealerPhone`, `dealerWebsite`, `dealerId` — for dealer-listed RVs
- `dealerGroupName`, `dealerGroupId` — the dealer chain/group name and ID (e.g. "Camping World"), when the selling dealer belongs to a multi-location dealer group
- `stockNumber`, `vin` — when the seller listed them
- `msrp` — manufacturer's suggested retail price in USD, when the dealer published one
- `rebate` — manufacturer/dealer rebate amount in USD, when one is being offered on the listing
- `locationCity`, `locationState`, `latitude`, `longitude`
- `images` — array of listing photo URLs; `primaryImageUrl` — the first photo; `photoCount` — total photos on the listing
- `description` — the listing's summary text
- `listedDate` — when the listing was first published
- `dealerListingUrl` — the dealer's own website listing for this exact RV, when the dealer maintains one separately from RVTrader
- `isFeaturedListing` — `true` when the seller paid for premium/top placement on RVTrader (omitted for standard listings)

### Input options

| Field | Description |
|---|---|
| `rvType` | RV category — Class A, Class B, Class C, Destination Trailer, Fifth Wheel, Fish House, Park Model, Pop Up Camper, Teardrop Trailer, Toy Hauler, Travel Trailer, Truck Camper |
| `keyword` | Free-text keyword matching make/model/trim, e.g. "Winnebago", "Jayco Eagle" |
| `make` | Filter to a specific RV manufacturer, e.g. "Forest River", "Keystone", "Jayco", "Grand Design" — matches RVTrader's structured make field for more precise results than a keyword search |
| `model` | Filter to a specific RV model, e.g. "Eagle", "Montana", "Wildwood", "Flying Cloud" — matches RVTrader's structured model field; works well combined with `make` |
| `condition` | `New` or `Used` |
| `sellerType` | `Dealer` or `Private` — filter by whether the RV is listed by a dealer or a private seller |
| `fuelType` | Powertrain fuel type — Gasoline, Diesel, Natural Gas, Flex Fuel, Hybrid Electric (mainly relevant for motorized RVs) |
| `state` | US state or Canadian province |
| `minPrice` / `maxPrice` | Price range in USD |
| `minYear` / `maxYear` | Model year range |
| `minLengthFt` / `maxLengthFt` | RV length range in feet |
| `sleepingCapacity` | Minimum sleeping capacity |
| `zipCode` / `radiusMiles` | Search near a ZIP code within a radius |
| `sortBy` | Result ordering — featured, price, year, newest, best match |
| `maxItems` | Max records to return |
| `proxyConfiguration` | Apify proxy — free AUTO datacenter group (required; rvtrader.com blocks requests without a rotating proxy IP) |

### Example: search listings

```json
{
  "rvType": "Travel Trailer",
  "condition": "Used",
  "minPrice": 10000,
  "maxPrice": 50000,
  "maxItems": 30
}
```

### Example: search by keyword

```json
{
  "keyword": "Winnebago",
  "maxItems": 30
}
```

### Use cases

- **RV dealers** — monitor competitor inventory and pricing across RV types and regions
- **Buyers** — track availability of specific makes/models within a budget, length or sleeping-capacity range
- **Market research** — analyze pricing trends for motorhomes, travel trailers and fifth wheels
- **Lead generation** — find sellers of specific RV types for B2B outreach
- **Price comparison tools** — enrich listings with cross-referenced market pricing

### Data source

RVTrader.com is part of the Trader Interactive network (the same platform group as BoatTrader and EquipmentTrader). This actor scrapes the public search results — no residential proxy tier, CAPTCHA-solving, or login of any kind is required to get results.

### FAQ

**Do I need an RV Trader account?** No — this actor scrapes public search results.

**Why does the actor use a proxy?** rvtrader.com blocks some requests that don't come through a proxy. The actor uses the free Apify AUTO proxy group, so no paid proxy tier is required.

**Can I search by ZIP code?** Yes — set `zipCode` and `radiusMiles` together to search near a specific location.

**Can I filter to only dealer or only private-seller listings?** Yes — set `sellerType` to `Dealer` or `Private`. This filter depends on RVTrader's richer per-listing data being available for the search, so a narrow request (e.g. private sellers only, which make up a small share of total inventory) may take a bit longer to gather the requested `maxItems`. If that richer data isn't available for a given search, the run's status message will let you know — simply remove the `sellerType` filter to keep getting results in that case.

**Can I filter by manufacturer (make)?** Yes — set `make` to a manufacturer name like "Forest River", "Keystone", "Jayco" or "Winnebago". Like `sellerType`, this is matched against RVTrader's structured per-listing make field for precision and shares the same data-availability caveat above. It's also used as the search keyword (when `keyword` itself is left empty) to narrow results and speed up matching.

**Can I filter by model?** Yes — set `model` to a model name like "Eagle", "Montana" or "Flying Cloud". It works the same way as `make` (matched against RVTrader's structured model field, combinable with `make`, and shares the same data-availability caveat), and is likewise used as the search keyword when `keyword` is left empty.

**Can I get more detail per listing (mileage, dealer, photos)?** When RVTrader's search results page includes its richer per-listing data, the actor automatically includes make/model/trim, mileage, length, dealer name/phone/website (or private-seller status), VIN, stock number, city/state/coordinates and real photo URLs — no extra request needed. This enrichment isn't guaranteed on every result; the core fields (title, year, price, condition, URL) are always populated regardless. Individual RVTrader listing pages aren't fetched directly — follow the `listingUrl` in your browser for the full listing page and any remaining details.

**Why might a run take longer than usual?** Occasionally rvtrader.com is slower to respond to some requests, which can add a few minutes to a run (more for large `maxItems` requests spanning many result pages). Records are pushed to the dataset progressively as each page is parsed, so even if a run is stopped before collecting the full requested amount, everything found up to that point is already saved.

# Actor input Schema

## `rvType` (type: `string`):

RV category to filter by. Leave empty to search all RV types.

## `keyword` (type: `string`):

Free-text keyword to search listing titles. Matches make, model or trim — example: "Winnebago", "Jayco Eagle", "Airstream Flying Cloud".

## `make` (type: `string`):

Filter to a specific RV manufacturer, e.g. "Forest River", "Keystone", "Jayco", "Grand Design", "Coachmen", "Thor Motor Coach", "Winnebago", "Heartland", "Airstream". Matches RVTrader's structured make field (partial match, case-insensitive) rather than free-text title search, so it's more precise than 'Keyword' for this purpose. Leave empty to search all makes.

## `model` (type: `string`):

Filter to a specific RV model, e.g. "Eagle", "Montana", "Wildwood", "Flying Cloud". Matches RVTrader's structured model field (partial match, case-insensitive) rather than free-text title search, so it's more precise than 'Keyword' for this purpose. Works well combined with 'Make'. Leave empty to search all models.

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

New or used listings.

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

US state or Canadian province the RV is listed in. Leave empty to search nationwide.

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

Minimum listing price in USD.

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

Maximum listing price in USD.

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

Minimum model year.

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

Maximum model year.

## `minLengthFt` (type: `integer`):

Minimum RV length in feet.

## `maxLengthFt` (type: `integer`):

Maximum RV length in feet.

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

Filter by whether the RV is listed by a dealer or a private party. Applied client-side against RVTrader's richer per-listing data, so it may scan more result pages than a plain search to gather enough matches.

## `fuelType` (type: `string`):

Powertrain fuel type — mainly relevant for motorized RVs (Class A/B/C, Truck Camper tow vehicles). Leave empty to search all fuel types.

## `sleepingCapacity` (type: `integer`):

Minimum number of people the RV sleeps.

## `zipCode` (type: `string`):

5-digit US ZIP code to search near. Used together with 'Search radius'. Leave empty to search nationwide.

## `radiusMiles` (type: `string`):

Search radius around 'ZIP code'. Ignored if ZIP code is empty.

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

Result ordering.

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

Maximum number of listing records to return.

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

Free AUTO datacenter proxy — required. rvtrader.com blocks requests without a rotating proxy IP.

## Actor input object example

```json
{
  "rvType": "",
  "keyword": "Winnebago",
  "condition": "",
  "state": "",
  "sellerType": "",
  "fuelType": "",
  "radiusMiles": "nationwide",
  "sortBy": "featured:asc",
  "maxItems": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Dataset containing all scraped RV listing records.

# 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 = {
    "rvType": "",
    "keyword": "Winnebago",
    "condition": "",
    "state": "",
    "sellerType": "",
    "fuelType": "",
    "radiusMiles": "nationwide",
    "sortBy": "featured:asc",
    "maxItems": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/rvtrader-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 = {
    "rvType": "",
    "keyword": "Winnebago",
    "condition": "",
    "state": "",
    "sellerType": "",
    "fuelType": "",
    "radiusMiles": "nationwide",
    "sortBy": "featured:asc",
    "maxItems": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/rvtrader-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 '{
  "rvType": "",
  "keyword": "Winnebago",
  "condition": "",
  "state": "",
  "sellerType": "",
  "fuelType": "",
  "radiusMiles": "nationwide",
  "sortBy": "featured:asc",
  "maxItems": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call crawlerbros/rvtrader-scraper --silent --output-dataset

```

## MCP server setup

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