# Boat Trader Scraper (`solidcode/boattrader-scraper`) Actor

\[💰 $2.5 / 1K] Extract new and used boat listings from Boat Trader — price, year, make, model, length, engines, hull, HIN, dealer contacts, specs and photos. Filter by type, class, brand, condition, hull, state or ZIP radius, or paste any Boat Trader URL.

- **URL**: https://apify.com/solidcode/boattrader-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Developer tools, Automation, E-commerce
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

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/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

## Boat Trader Scraper

Pull new and used boat listings from Boat Trader at scale — asking prices and price drops, full engine records with hours and horsepower, hull identification numbers, beam and draft, dealer phone numbers, complete seller descriptions and every listing photo. Covers power boats, sailboats, personal watercraft and small boats across the entire United States. Built for boat dealers, marine market analysts, and brokerage lead-generation teams who need current nationwide inventory in a spreadsheet without clicking through thousands of listing pages one at a time.

### Why This Scraper?

- **89 boat classes across four boat types** — Center Console, Pontoon, Bowrider, Bass, Trawler, Sport Fishing, Ketch, Trimaran, Beach Catamaran, Narrowboat and 79 more, and you can select as many as you want in a single run.
- **Every one of Boat Trader's ~2,080 brands** — makes are a free-text list, not a top-100 dropdown, so "Grady-White", "Bennington", "Nautique" or any niche builder works straight away.
- **Hull identification numbers on roughly 92% of listings** — the boat equivalent of a VIN, for title checks, valuation work and spotting the same hull relisted by a second broker.
- **Complete engine records on roughly 97% of listings** — per-engine make, model, year, category, drive type, fuel, engine hours, horsepower and kilowatts, plus a combined `totalHorsepower` and engine count.
- **Dealer phone numbers on roughly 94% of listings** — the primary contact number plus every published line labelled by type (office, mobile, toll-free), alongside dealer name, street address and logo.
- **13 engine configurations and 9 hull materials** — single, twin and triple outboard, inboard, inboard/outboard, jet drive, V-drive and direct drive; fiberglass, aluminum, wooden, steel, Hypalon, plastic and ferro-cement.
- **ZIP-code radius search in 10 steps** — from that ZIP only out to 1,000 miles, with the distance to your ZIP written onto every row; or pick from all 50 states plus DC, Puerto Rico and the US Virgin Islands instead.
- **Up to ~80 photos per boat plus embedded video links** — full-resolution image URLs, and the complete seller description on 100% of listings.
- **Breaks past Boat Trader's own 10,000-result search ceiling** — when a search matches more than the site will serve, the run automatically splits it by state, then condition, then price band, deduplicating on listing ID so you never pay for the same boat twice.

### Use Cases

**Dealer & Brokerage Intelligence**

- Track a competing dealer's full inventory, asking prices and time on market
- Spot price cuts the moment they happen with `priceDropAmount` and `priceRevisedDate`
- Compare the new-versus-used mix by brand across a sales territory
- Watch one class — pontoons, center consoles — inside 100 miles of your yard

**Market Research & Pricing**

- Build price-per-foot curves by class, model year and region
- Measure how engine hours and total horsepower move used-boat asking prices
- Compare inventory depth state by state before opening a new location
- Track supply of diesel versus gas versus electric propulsion over time

**Lead Generation**

- Build broker and dealer call lists with names, phone numbers and street addresses
- Isolate for-sale-by-owner listings with the `isFsbo` flag for direct outreach
- Target dealers listing financeable inventory for finance and insurance partnerships
- Segment prospects by the brands and boat classes they actually carry

**Valuation, Finance & Insurance**

- Pull comparable listings by make, model, year and length for appraisal work
- Match hull identification numbers against your own book of business
- Price risk by hull material, length, beam and total horsepower
- Feed asking prices into residual-value and loan-to-value models

**Data Products & Enrichment**

- Power boat search portals and price comparison tools with fresh inventory
- Enrich an existing marine database with photos, specifications and descriptions
- Feed dashboards that report new listings and price changes daily
- Train models on structured listing text, equipment tags and specifications

### Getting Started

#### Newest Listings, Nationwide

The scraper runs with no input at all. This returns the first 100 boats with full detail:

```json
{
    "maxResults": 100
}
```

#### Used Pontoons in Florida Under $60,000

```json
{
    "boatType": "power",
    "boatClasses": ["power-pontoon"],
    "condition": "used",
    "states": ["FL"],
    "maxPrice": 60000,
    "sortBy": "price:asc",
    "maxResults": 500
}
```

#### Center Consoles Within 100 Miles of Miami

```json
{
    "boatClasses": ["power-center"],
    "makes": ["Boston Whaler", "Grady-White", "Robalo"],
    "zipCode": "33139",
    "radiusMiles": "100",
    "minYear": 2018,
    "minLengthFt": 22,
    "maxLengthFt": 35,
    "maxResults": 1000
}
```

#### Full Sailboat Market Sweep

```json
{
    "boatType": "sail",
    "hullMaterials": ["fiberglass+reinforced", "aluminum"],
    "minYear": 2000,
    "minLengthFt": 30,
    "sortBy": "year:desc",
    "includeDetails": true,
    "maxResults": 0
}
```

You can also paste Boat Trader links directly. A search-results page and an individual boat page both work, and the scraper tells them apart automatically:

```json
{
    "startUrls": [
        "https://www.boattrader.com/boats/type-power/class-power-pontoon/state-fl/",
        "https://www.boattrader.com/boat/2011-tracker-super-guide-v-16-sc-10259181/"
    ]
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | array | `[]` | Boat Trader search-result pages, individual boat listing pages, or bare listing numbers. All three are detected automatically, boat pages are opened several at a time, and anything that is not a Boat Trader search or boat page is skipped with a message. When set, the filters below are ignored. |
| `searchKeyword` | string | `""` | Words to look for in the listing title, description and equipment list, such as `wake tower`, `twin diesel` or `bass boat`. |

#### Boat Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `boatType` | string | `any` | Any boat type, Power boats, Sailboats, Personal watercraft (PWC), or Small boats (dinghies, kayaks, inflatables). |
| `boatClasses` | array | `[]` | 89 specific categories such as Pontoon, Center Console, Bowrider, Sloop or Trawler. Pick as many as you like. |
| `boatGroup` | string | `any` | Activity grouping: Fishing, Day cruising, Overnight cruising, Long-range cruising, Lakes and rivers, Sailing, Watersports or Commercial. Replaces boat type and classes when set. |
| `makes` | array | `[]` | Brand names exactly as Boat Trader shows them, for example `Sea Ray` or `Bennington`. Any of the ~2,080 brands works. |
| `condition` | string | `any` | New and used, New only, or Used only. |
| `fuelTypes` | array | `[]` | Gas, Diesel, Electric or Other. |
| `hullShapes` | array | `[]` | 17 shapes including Modified Vee, Deep Vee, Pontoon, Tritoon, Catamaran and Trimaran. |
| `hullMaterials` | array | `[]` | Fiberglass/Reinforced, Fiberglass/Composite, Aluminum, Wooden, Steel, Hypalon, Plastic/PVC, Ferro-cement, Other. |
| `engineConfigurations` | array | `[]` | 13 setups: single, twin and triple outboard; single and twin inboard; single, twin and triple inboard/outboard; jet drive; V-drive; direct drive; no engine; other. |

#### Price, Year & Size

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `minPrice` | integer | — | Only boats asking at least this much, in US dollars. |
| `maxPrice` | integer | — | Only boats asking at most this much, in US dollars. |
| `minYear` | integer | — | Earliest model year, for example `2015`. |
| `maxYear` | integer | — | Latest model year. |
| `minLengthFt` | integer | — | Minimum length in feet. |
| `maxLengthFt` | integer | — | Maximum length in feet. |

#### Location

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `states` | array | `[]` | Any of the 50 US states plus the District of Columbia, Puerto Rico and the US Virgin Islands. Empty means nationwide. |
| `zipCode` | string | `""` | A US ZIP code to search around, for example `33139`. When set, the state filter is ignored. |
| `radiusMiles` | string | `"100"` | How far around the ZIP code to look: ZIP code only, 10, 25, 50, 75, 100, 200, 300, 500 or 1000 miles. |

#### Output & Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `sortBy` | string | `recommended` | Recommended, Price low to high, Price high to low, Year newest first, Year oldest first, Length shortest first, Length longest first. |
| `includeDetails` | boolean | `true` | On returns the complete record: all engines with hours and horsepower, hull identification number, beam, draft, weight and capacity, the full seller description, every photo, video links and all seller phone numbers. Off returns only the fields shown on search result cards. |
| `maxResults` | integer | `100` | The most boats to return in total for the whole run. When your choices need several searches (one per state, hull shape or engine configuration), the total is shared out evenly between them, and unused shares pass to the searches that still have more to give. Set to `0` for no limit — with no other filters that is every boat in the country, well over 100,000 results. |

### Output

One row per boat listing. Empty fields are removed, so lighter runs return narrower rows.

```json
{
    "listingId": 9920179,
    "boatTraderId": "105600266",
    "url": "https://www.boattrader.com/boat/2026-harris-cruiser-230-9920179/",
    "title": "2026 Harris Cruiser 230",
    "make": "Harris",
    "model": "Cruiser 230",
    "year": 2026,
    "condition": "new",
    "status": "active",
    "boatType": "power",
    "boatClass": "power-pontoon",
    "boatClasses": ["power-pontoon", "power-sportcruiser", "power-aluminum"],
    "price": 68495,
    "currency": "USD",
    "priceHidden": false,
    "priceDropAmount": 2500,
    "priceRevisedDate": "2026-06-18",
    "lengthFt": 23,
    "beamFt": 8.5,
    "maxDraftFt": 1.75,
    "dryWeightLb": 2496,
    "fuelType": "gasoline",
    "hullMaterial": "fiberglass",
    "hullShape": "pontoon",
    "hin": "HCX230329",
    "engineCount": 1,
    "totalHorsepower": 150,
    "engines": [
        { "make": "MERCURY", "model": "150 FS", "category": "outboard", "fuel": "gasoline", "hours": 120, "horsepower": 150, "kilowatts": 111.85 }
    ],
    "city": "Fort Walton Beach",
    "state": "FL",
    "zip": "32548",
    "country": "US",
    "latitude": 30.405755,
    "longitude": -86.618842,
    "dealerName": "MarineMax Fort Walton Beach",
    "dealerId": 219342,
    "dealerPhone": "850-779-4278",
    "dealerPhones": [{ "type": "office", "number": "(850) 760-0300" }],
    "dealerAddress": "14 SW Miracle Strip Parkway, Fort Walton Beach, FL 32548",
    "isFsbo": false,
    "isFinanceable": true,
    "dateListed": "2025-10-30T22:03:00Z",
    "dateModified": "2026-07-21T23:04:02Z",
    "description": "2026 Harris Cruiser 230. Stock #215471. Experience the perfect combination of comfort, style and performance...",
    "imageCount": 24,
    "primaryImageUrl": "https://images.boattrader.com/images/1/upload/...",
    "scrapedAt": "2026-07-25T09:14:02+00:00"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | integer | Boat Trader listing ID |
| `boatTraderId` | string | Portal-facing alias ID |
| `url` | string | Canonical listing page |
| `title` | string | Year, make and model headline |
| `make` | string | Manufacturer |
| `model` | string | Model name |
| `year` | integer | Model year |
| `boatName` | string | Name painted on the boat, when given |
| `condition` | string | `new` or `used` |
| `status` | string | Listing status |
| `boatType` | string | `power`, `sail`, `pwc` or `unpowered` |
| `boatClass` | string | Primary class, e.g. `power-pontoon` |
| `boatClasses` | array | Every class the boat belongs to, primary first |
| `attributes` | array | Equipment and feature tags |
| `dateListed` | string | First published, ISO 8601 |
| `dateModified` | string | Last modified, ISO 8601 |
| `scrapedAt` | string | Collection timestamp, ISO 8601 |

#### Pricing

| Field | Type | Description |
|-------|------|-------------|
| `price` | number | Asking price in US dollars |
| `currency` | string | Currency the seller entered |
| `priceHidden` | boolean | True when the seller withholds the price |
| `priceDropAmount` | number | Size of the most recent price cut |
| `priceRevisedDate` | string | Date the price was last revised |
| `isFinanceable` | boolean | Seller offers financing |

#### Dimensions & Capacity

| Field | Type | Description |
|-------|------|-------------|
| `lengthFt` | number | Nominal length, feet |
| `lengthOverallFt` | number | Length overall, feet |
| `beamFt` | number | Beam, feet |
| `maxDraftFt` | number | Maximum draft, feet |
| `dryWeightLb` | number | Dry weight, pounds |
| `displacementLb` | number | Displacement, pounds |
| `seatingCapacity` | integer | Number of seats |
| `maxPassengers` | integer | Maximum rated passengers |
| `maxCapacityLb` | integer | Maximum rated load, pounds |
| `cabins` | integer | Number of cabins |
| `heads` | integer | Number of heads |

#### Engines & Propulsion

| Field | Type | Description |
|-------|------|-------------|
| `engineCount` | integer | Number of engines fitted |
| `totalHorsepower` | number | Combined horsepower of all engines |
| `fuelType` | string | `gasoline`, `diesel`, `electric` or `other` |
| `engines` | array | One object per engine |
| `engines[].make` | string | Engine manufacturer, e.g. `MERCURY` |
| `engines[].model` | string | Engine model |
| `engines[].year` | integer | Engine model year |
| `engines[].category` | string | `outboard`, `inboard` and similar |
| `engines[].driveType` | string | Drive arrangement |
| `engines[].fuel` | string | Fuel this engine burns |
| `engines[].hours` | number | Engine hours run |
| `engines[].horsepower` | number | Horsepower |
| `engines[].kilowatts` | number | Power in kilowatts |

#### Hull

| Field | Type | Description |
|-------|------|-------------|
| `hin` | string | Hull identification number |
| `hullMaterial` | string | What the hull is built from |
| `hullShape` | string | Hull shape, when the seller published it |
| `keelType` | string | Keel type, mostly on sailboats |
| `designerName` | string | Naval architect or designer |
| `builderName` | string | Yard that built the hull |

#### Location

| Field | Type | Description |
|-------|------|-------------|
| `city` | string | City the boat lies in |
| `state` | string | Two-letter state code |
| `zip` | string | ZIP code |
| `country` | string | Country code |
| `latitude` | number | Latitude |
| `longitude` | number | Longitude |
| `distanceMiles` | number | Distance from your searched ZIP, when one was given |

#### Seller

| Field | Type | Description |
|-------|------|-------------|
| `dealerName` | string | Dealer, broker or private seller name |
| `dealerId` | integer | Seller ID |
| `dealerPhone` | string | Primary contact number |
| `dealerPhones` | array | Every published number with its `type` |
| `dealerAddress` | string | Seller street address |
| `dealerLogo` | string | Dealer logo image URL |
| `isFsbo` | boolean | For sale by owner rather than a dealer |
| `isOemModel` | boolean | Manufacturer model page rather than a specific unit |

#### Media & Description

| Field | Type | Description |
|-------|------|-------------|
| `description` | string | Full seller description, plain text |
| `descriptionSections` | array | Titled sections with `title`, `type` and `text` |
| `imageCount` | integer | Number of photos on the listing (full-detail runs only) |
| `primaryImageUrl` | string | Main photo — always present, including on lightweight runs |
| `images` | array | Every photo URL (full-detail runs only) |
| `videoUrls` | array | Embedded video links (full-detail runs only) |

### Tips for Best Results

- **Boat Trader serves at most 10,000 results per single search.** Broad runs are split automatically by state, then condition, then price band — but for maximum depth on a nationwide category, list the states you care about explicitly so each one becomes its own search with its own 10,000-boat allowance.
- **Turn `includeDetails` off for inventory counts and price tracking.** You still get make, model, year, price, length, location, seller and the main photo, in much lighter rows, and the run costs exactly the same number of page requests. Lightweight rows carry only the main photo, so the full photo list and photo count are left out rather than shown as a misleading `1`.
- **Pair `sortBy` with `maxResults` to choose *which* boats you get.** `price:asc` with a cap of 100 gives you the 100 cheapest matches; `year:desc` gives you the 100 newest. The cap is a total for the run, and it is shared evenly between states when you pick several, so a three-state run with a cap of 300 returns roughly 100 from each rather than 300 from the first.
- **Hull shape is published on only a small share of listings.** Use `hullShapes` to narrow a search deliberately, not to enrich a broad one — filtering on it will drop most otherwise-matching boats.
- **A ZIP code overrides the state filter.** Fill in `zipCode` and `radiusMiles` for catchment-area work, or leave the ZIP empty and use `states` for territory-level analysis. Only ZIP searches populate `distanceMiles`.
- **Activity groups replace boat type and classes.** Setting `boatGroup` to Fishing or Watersports sweeps a whole segment without hand-picking a dozen classes.
- **Keep `states` × `hullShapes` × `engineConfigurations` at 200 combinations or fewer.** Each combination becomes its own search; splitting a very wide sweep across two or three runs keeps every leg fast.

### Pricing

**From $2.50 per 1,000 results** — below the going rate for Boat Trader data, with hull identification numbers, engine hours and dealer phone numbers included rather than sold as an upgrade. Bronze, Silver and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.30 | $0.28 | $0.27 | $0.25 |
| 1,000 | $3.00 | $2.80 | $2.65 | $2.50 |
| 10,000 | $30.00 | $28.00 | $26.50 | $25.00 |
| 100,000 | $300.00 | $280.00 | $265.00 | $250.00 |

A "result" is one boat listing row in your dataset. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger your own endpoints when a run finishes
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor collects publicly available boat listing data for legitimate market research, valuation, and business intelligence. You are responsible for complying with applicable laws and Boat Trader's Terms of Service. Seller contact details are published by dealers and brokers to attract buyers — use them for genuine business enquiries only, never for spam, harassment, or any unlawful purpose, and honour applicable marketing and do-not-call regulations in your jurisdiction.

# Actor input Schema

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

Paste Boat Trader search-result pages or individual boat listing pages, for example 'https://www.boattrader.com/boats/type-power/class-power-pontoon/state-fl/' or 'https://www.boattrader.com/boat/2011-tracker-super-guide-v-16-sc-10259181/'. A bare listing number such as 10259181 works too. All three kinds are detected automatically, and boat pages are opened several at a time. Anything that isn't a Boat Trader search or boat page is skipped with a message, so a mistyped link can never turn into a nationwide search. When you add URLs here, the filters below are ignored. Leave empty to build a search with the filters instead.

## `searchKeyword` (type: `string`):

Words to look for in the listing title, description and equipment list, for example 'wake tower', 'twin diesel' or 'bass boat'. Leave empty to skip keyword matching.

## `boatType` (type: `string`):

The broadest category of boat. Choose 'Any' to include everything.

## `boatClasses` (type: `array`):

Specific boat categories such as Pontoon, Center Console, Bowrider or Sloop. Pick as many as you like. Leave empty for all classes in the chosen boat type.

## `boatGroup` (type: `string`):

Boat Trader's activity-based grouping, for example all fishing boats or all watersports boats. When you choose a group it replaces the Boat Type and Boat Classes filters above.

## `makes` (type: `array`):

Brand names exactly as Boat Trader shows them, for example 'Sea Ray', 'Bennington', 'Boston Whaler' or 'Grady-White'. Add as many as you like. Any of Boat Trader's 2,000+ brands works here. Leave empty for all brands.

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

Show only new boats, only used boats, or both.

## `fuelTypes` (type: `array`):

Engine fuel. Pick one or more, or leave empty for all fuels.

## `hullShapes` (type: `array`):

The shape of the hull, which affects how the boat rides. Pick one or more, or leave empty for all shapes. Boat Trader runs one search per hull shape, and the combined total of states x hull shapes x engine configurations must stay at or below 200 searches per run — if you go over, the run stops straight away and tells you which list to shorten. When you set a result limit, it is shared out evenly between the searches. Note that Boat Trader publishes a hull shape on only a small share of listings, so this filter is narrow.

## `hullMaterials` (type: `array`):

What the hull is built from. Pick one or more, or leave empty for all materials.

## `engineConfigurations` (type: `array`):

How many engines the boat has and how they are mounted. Pick one or more, or leave empty for all configurations. Boat Trader runs one search per configuration, and the combined total of states x hull shapes x engine configurations must stay at or below 200 searches per run — if you go over, the run stops straight away and tells you which list to shorten. When you set a result limit, it is shared out evenly between the searches.

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

Only show boats asking at least this much, in US dollars. Leave empty for no lower limit.

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

Only show boats asking at most this much, in US dollars. Leave empty for no upper limit.

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

Only show boats from this model year or later, for example 2015. Leave empty for any age.

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

Only show boats from this model year or earlier. Leave empty for any age.

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

Only show boats at least this long, in feet. Leave empty for no lower limit.

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

Only show boats at most this long, in feet. Leave empty for no upper limit.

## `states` (type: `array`):

Only show boats located in these states or territories. Pick as many as you like. Leave empty to search the whole country. Boat Trader runs one search per state, and the combined total of states x hull shapes x engine configurations must stay at or below 200 searches per run — if you go over, the run stops straight away and tells you which list to shorten. When you set a result limit, it is shared out evenly between the states you pick.

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

A US ZIP code to search around, for example '33139'. Works together with Search Radius below. When you fill this in, the US States filter is ignored — Boat Trader searches around the ZIP instead. Leave empty to search by state or nationwide.

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

How far around the ZIP code to look. Choose 'ZIP code only' to stay inside that ZIP. This is only used when a ZIP code is filled in above.

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

The order Boat Trader returns listings in. Combined with a result limit, this decides which boats you get, for example the 100 cheapest or the 100 newest.

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

When on, every boat comes back with its complete record: all engines with hours and horsepower, hull identification number (HIN), hull material and shape, beam, draft, weight and capacity, the full seller description, every photo, video links and all published seller phone numbers. Turn it off for a lightweight run that returns only the fields shown on the search result cards (make, model, year, price, length, location, seller, main photo). This never changes how many pages are requested, only how much data each page carries, so 'off' is faster on big runs but costs exactly the same number of requests.

## `maxResults` (type: `integer`):

The most boats to return in total for the whole run, across every filter combination and every URL you provide. When your choices need several searches (one per state, hull shape or engine configuration), this total is shared out evenly between them, and any share that isn't used up is passed on to the searches that still have more to give. The scraper stops asking for new pages once the total is reached, so you may receive a handful of extra boats from the last page. Set to 0 for no limit — with no other filters that means every boat listed in the country, well over 100,000 results, billed accordingly, so add a state, boat class or price filter to keep a run predictable. Boat Trader itself only serves the first 10,000 results of any single search; when a search matches more than that, the scraper automatically splits it by state, then condition, then price band (three levels deep) to reach the rest, and tells you if some matches are still out of reach.

## Actor input object example

```json
{
  "startUrls": [],
  "boatType": "any",
  "boatClasses": [],
  "boatGroup": "any",
  "makes": [],
  "condition": "any",
  "fuelTypes": [],
  "hullShapes": [],
  "hullMaterials": [],
  "engineConfigurations": [],
  "states": [],
  "radiusMiles": "100",
  "sortBy": "recommended",
  "includeDetails": true,
  "maxResults": 100
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of boat listings with the key fields: make, model, year, condition, price, length, engines and location.

## `details` (type: `string`):

Full per-listing rows including hull and engine specifications, dimensions, dealer contact details and photos.

# 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": [],
    "searchKeyword": "",
    "boatType": "any",
    "boatClasses": [],
    "boatGroup": "any",
    "makes": [],
    "condition": "any",
    "fuelTypes": [],
    "hullShapes": [],
    "hullMaterials": [],
    "engineConfigurations": [],
    "states": [],
    "zipCode": "",
    "radiusMiles": "100",
    "sortBy": "recommended",
    "includeDetails": true,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/boattrader-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": [],
    "searchKeyword": "",
    "boatType": "any",
    "boatClasses": [],
    "boatGroup": "any",
    "makes": [],
    "condition": "any",
    "fuelTypes": [],
    "hullShapes": [],
    "hullMaterials": [],
    "engineConfigurations": [],
    "states": [],
    "zipCode": "",
    "radiusMiles": "100",
    "sortBy": "recommended",
    "includeDetails": True,
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/boattrader-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 '{
  "startUrls": [],
  "searchKeyword": "",
  "boatType": "any",
  "boatClasses": [],
  "boatGroup": "any",
  "makes": [],
  "condition": "any",
  "fuelTypes": [],
  "hullShapes": [],
  "hullMaterials": [],
  "engineConfigurations": [],
  "states": [],
  "zipCode": "",
  "radiusMiles": "100",
  "sortBy": "recommended",
  "includeDetails": true,
  "maxResults": 100
}' |
apify call solidcode/boattrader-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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