# Boat Trader Scraper - Boat Listings, Specs, HIN & Dealer Phones (`scrapersdelight/boattrader-scraper`) Actor

Scrape BoatTrader boats for sale: price and price drops, year, make, model, class, length, beam, hull, HIN, every engine with hours and horsepower, location with coordinates, dealer or private seller, dealer phones, photos, description, views and days on market. Dealer directory. No login.

- **URL**: https://apify.com/scrapersdelight/boattrader-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** E-commerce, Lead generation, Business
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.30 / 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.

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

### What does Boat Trader Scraper do?

**Boat Trader Scraper** exports boats for sale from **BoatTrader.com**, the largest US boat marketplace (113,500+ US listings and ~2,400 abroad on 2026-10-14). Each row is one boat: price and price drops, year, make, model, class, length, beam, hull material and HIN, every engine with hours and horsepower, location with coordinates, dealer or private seller, dealer phones and address, photos and the seller's description. Boat dealers, brokers, marine lenders, insurers, appraisers and market researchers use it to build comps, inventory reports and dealer lead lists.

Also known as: BoatTrader scraper, Boat Trader API, boat listings scraper, boats for sale scraper, boat dealer list.

- 🚤 **Every listing, one row each:** price, last price cut, year, make, model, class, length overall, beam, draft, weight, tanks, cabins, HIN, engines (make, model, hours, hp), fuel, hull, photos, description, listed date.
- 🔎 **All the site's filters:** state, city, ZIP + radius, country, boat type, 90 classes, activity groups, makes and models, condition, price, year, length, fuel, hull material, hull shape, engine set-up, number of engines, dealer or private seller, price dropped in 30 days, keyword, words in the description, 10 sort orders.
- 🔗 **Or paste URLs:** BoatTrader search pages (filters kept), listing pages or listing numbers, a dealer's inventory page, dealer-directory pages.
- 📊 **Views, saves and days on market:** optional per-listing numbers no other BoatTrader scraper returns, plus the dealer's website and active/sold listing counts.
- 🏪 **Dealer directory rows:** all 2,799 BoatTrader dealers with phone, website, street address, coordinates and logo.
- 🔁 **Monitor mode, past 10,000:** deliver only new or price-changed listings on a schedule; searches bigger than the site's 10,000-boat limit are split automatically.
- 🔓 **No login, no cookies, no API key.**

### What data can you get from BoatTrader?

<table>
<tr><td>🆔 Listing id + URL</td><td>🏷️ Year, make, model, model range</td><td>⛵ Boat type + class</td></tr>
<tr><td>💲 Price (USD)</td><td>📉 Last price change + date</td><td>✨ New / used</td></tr>
<tr><td>📏 Length, LOA, waterline</td><td>↔️ Beam, draft, bridge clearance</td><td>⚖️ Dry weight, displacement</td></tr>
<tr><td>🔢 HIN (hull id number)</td><td>🧱 Hull material + shape</td><td>⛽ Fuel + tank sizes</td></tr>
<tr><td>⚙️ Engines: make, model, year, hours, hp, kW</td><td>🐎 Total horsepower</td><td>🛏️ Cabins, heads, passengers</td></tr>
<tr><td>📍 City, state, ZIP, country</td><td>🌐 Latitude / longitude</td><td>📐 Distance from your ZIP</td></tr>
<tr><td>🏪 Dealer name + id</td><td>📞 Dealer phones (by type)</td><td>🏠 Dealer street, city, state, ZIP</td></tr>
<tr><td>🧑‍💼 Sales contact + phone</td><td>👤 Private seller flag</td><td>🖼️ Photos (all) + count</td></tr>
<tr><td>📝 Description + sections</td><td>🧰 Equipment (electronics, covers...)</td><td>🗓️ Listed + modified dates</td></tr>
<tr><td>👀 Views, saves, days on market</td><td>🌍 Dealer website + listing counts</td><td>⛵ YachtWorld cross-listing id</td></tr>
</table>

### How to scrape BoatTrader with Boat Trader Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) — the free plan comes with monthly credit.
2. Open **Boat Trader Scraper** and pick **US states**, a **ZIP code** with a radius, or paste BoatTrader URLs.
3. Narrow it down with the filters — makes, class, condition, price, year, length — or leave them empty.
4. Set **Max results**; switch on **Add views, saves & days on market** if you need them.
5. Click **Start**. 25 boats take a few seconds; 1,000 boats took about 25 seconds in our tests.
6. Download the results as JSON, CSV, Excel or HTML, or read them through the API.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| **🔍 What to scrape** | | |
| `mode` | select | `listings` (default) or `dealers` (the dealer directory) |
| `startUrls` | list | BoatTrader search, listing, dealer-inventory or dealer-directory URLs, or listing numbers |
| `keyword` | text | The site's keyword search (dealer mode: part of the dealer name) |
| `descriptionKeyword` | text | Boats whose description mentions these words |
| **📍 Location** | | |
| `country` | select | Default `US`; 37 other countries or `ALL` |
| `states` | multi-select | One search per state; empty = whole country |
| `city` | text | A city inside the one state picked |
| `zipCode` + `radiusMiles` | text + select | Search around a ZIP: that ZIP only, 10-1,000 miles, or any distance (default 100) |
| **🎯 Boat filters** | | |
| `boatType` | select | Power, sail, PWC, small boats, unpowered |
| `boatClasses` | multi-select | Any of the site's 90 classes (Pontoon, Center Console, Sloop...) |
| `boatGroup` | select | Activity: fishing, day cruising, overnight, long range, watersports, commercial, sailing, lakes & rivers, pleasure, yachts |
| `makes` | list | `Sea Ray`, `Boston Whaler`, or `Sea Ray:Sundancer 320` for one model — all in one search |
| `condition` | select | New and used, new, used |
| `minPrice` / `maxPrice` | number | USD; 0 = no limit |
| `minYear` / `maxYear`, `minLength` / `maxLength` | number | Model year; length in feet |
| `fuelTypes`, `hullMaterials` | multi-select | Several = any of them |
| `hullShapes`, `engineTypes` | multi-select | One search per value (the site takes one at a time) |
| `numberOfEngines` | number | Exactly this many engines |
| `sellerType` | select | Dealers / brokers or private sellers |
| `priceDropOnly` | checkbox | Price cut in the last 30 days |
| `sortBy` | select | Recommended, recently updated, price, year, length, nearest |
| **✂️ Refine results** | | |
| `withPhoneOnly` | checkbox | Skip rows without a phone |
| `maxEngineHours` | number | Only boats with published hours at or under this |
| **➕ Extra data** | | |
| `includeDetails` | checkbox | Views, saves, days on market, dealer website and listing counts, overview, video links (one extra request per listing, no extra charge) |
| `includePhotos` | checkbox | All photo URLs (default on) |
| **🔁 Monitoring** | | |
| `monitorMode` + `monitorStoreName` | checkbox + text | Only listings not delivered before, or whose price changed |
| **📦 Output** | | |
| `maxResults` | number | Default 100; 0 = no limit |
| `maxResultsPerSearch` | number | Cap per state / hull shape / engine set-up / URL |
| `splitLargeSearches` | checkbox | Go past the site's 10,000 boats per search (default on) |
| `compact` | checkbox | 31 core fields for listings, 10 for dealers |
| **⚙️ Advanced** | | |
| `maxConcurrency`, `proxyConfiguration` | | Leave as-is; the actor starts on a direct connection |

#### Input JSON

```json
{
  "states": ["FL"],
  "boatClasses": ["power-center"],
  "makes": ["Boston Whaler", "Grady-White"],
  "condition": "used",
  "minYear": 2018,
  "maxPrice": 250000,
  "sortBy": "price-asc",
  "maxResults": 200
}
```

#### Type makes the way BoatTrader shows them

`makes` takes brand names as the site writes them (`Sea Ray`, `Grady-White`, `Yamaha WaveRunner`); spacing and capitals do not matter. Add a model after a colon (`Sea Ray:Sundancer 320`). Several makes are searched together in one request.

#### Paste a URL when you already built the search on the site

Every filter in a BoatTrader search URL is translated to the same API filter (type, class, make, model, state, city, ZIP, radius, seller, fuel, hull, hull type, engine, length, price, price drop, year, condition, keyword, sort). A URL with a segment the actor cannot translate is skipped with a message rather than run broader than you asked. Listing URLs and bare listing numbers return that listing with its views, saves and days on market.

### ⬆️ Output

One row per boat (or per dealer). Example from a real run (Texas, details on; engines and photos shortened):

```json
{
  "recordType": "listing",
  "id": 10301531,
  "url": "https://www.boattrader.com/boat/2020-outerlimits-sc46-10301531/",
  "title": "2020 Outerlimits SC46",
  "condition": "used", "boatClass": "power-highperf",
  "price": 1179000, "lengthFt": 45.75, "beamFt": 11.92,
  "hullMaterial": "fiberglass", "hin": "OPP46104B020",
  "engineCount": 1, "totalHorsepower": 1550,
  "engines": [{ "make": "Mercury", "category": "inboard", "fuel": "gasoline", "hours": 10, "horsepower": 1550, "kilowatts": 1155.83 }],
  "city": "Tyler", "state": "TX", "zip": "75702", "latitude": 32.34763, "longitude": -95.2943,
  "sellerType": "dealer", "dealerName": "Seabound Yachts", "dealerPhone": "+19296007055",
  "dealerInventoryUrl": "https://www.boattrader.com/boats/dealer-seabound-yachts-158462/",
  "imageCount": 44, "dateListed": "2026-08-26T16:19:15.000Z",
  "views": 4459, "saves": 54, "daysOnMarket": 48,
  "dealerWebsite": "http://www.seaboundyachts.com"
}
```

A dealer row:

```json
{ "recordType": "dealer", "id": 1013, "url": "https://www.boattrader.com/boats/dealer-the-boat-dock-1013/", "name": "The Boat Dock",
  "phone": "217-629-4062", "website": "http://www.theboatdock.com/", "street": "4600 Rising Moon Rd", "city": "Springfield",
  "state": "IL", "zip": "62711", "latitude": 39.750988, "longitude": -89.732902 }
```

#### How full are the fields?

Measured on a nationwide run of 1,000 listings, a Texas run of 30 listings with details, and the full dealer directory, 2026-10-14:

| Field | Filled | Field | Filled |
|---|---|---|---|
| price, year, make, model, class, length, coordinates, photos, description | 100% | HIN | 92% |
| beam | 94% | engines listed / horsepower | 99% / 87% |
| engine hours | 78% | fuel type | 90% |
| hull shape | 54% | dry weight | 48% |
| dealer name, phone, logo (dealer rows of the 1,000; 11% were private sellers) | 100% | sales contact + phone | 66% |
| last price change | 12% | YachtWorld cross-listing id | 72% |
| **details on:** views, saves, days on market | 100% | dealer website | 90% |
| **dealer directory:** phone / street / website | 99.5% / 97% / 85% | coordinates / logo | 99% / 96% |

Private-seller listings carry no phone, address or sales contact on BoatTrader (checked on 50 of 50), so their dealer fields are empty.

### How can I use BoatTrader data?

- 🧮 **Valuation and comps:** asking prices by make, model, year, length and engine hours for appraisals and loan-to-value.
- 📉 **Price-drop tracking:** listings cut in the last 30 days, or a daily monitor that flags every new price.
- 🏪 **Dealer intelligence:** a competitor's full inventory, prices and days on market from its inventory URL.
- 🤝 **Lead lists:** all 2,799 BoatTrader dealers with phone, website and address, or the dealers selling one brand in one state.
- 🛡️ **Insurance and finance:** HIN, hull, horsepower and length for risk and repower models.
- 📊 **Market reports:** supply by class, state and price band; how fast boats sell (days on market, views, saves).

### How much does it cost to scrape BoatTrader?

Boat Trader Scraper is priced per row: **$0.0013 per boat or dealer row**. Views, saves and days on market cost nothing extra. No start fee, nothing else to pay.

| Rows | Price |
|---|---|
| 10 | $0.013 |
| 100 | $0.13 |
| 1,000 | $1.30 |
| 10,000 | $13.00 |

Apify's free plan includes monthly credit, enough for thousands of rows. Each row is charged once, when it is saved.

### Integrations, API, scheduling and MCP

Run Boat Trader Scraper on a [schedule](https://docs.apify.com/platform/schedules) (daily with monitor mode is the usual set-up), get a webhook when it finishes, and send results to Google Sheets, Slack, Make, Zapier or n8n through Apify integrations. Call it from code with the [Python](https://apify.com/scrapersdelight/boattrader-scraper/api/python) or [JavaScript](https://apify.com/scrapersdelight/boattrader-scraper/api/javascript) client, or connect it to an AI assistant through the [MCP server](https://apify.com/scrapersdelight/boattrader-scraper/api/mcp).

### More vehicle and auction scrapers

<table>
<tr><td>🚗 <a href="https://apify.com/scrapersdelight/cars-com-dealer-scraper">Cars.com Dealer Scraper</a><br>Car dealers with phone, website and ratings.</td>
<td>🚙 <a href="https://apify.com/scrapersdelight/cargurus-dealer-scraper">CarGurus Scraper</a><br>Car dealer leads with phone and ratings.</td>
<td>🏁 <a href="https://apify.com/scrapersdelight/bringatrailer-results-scraper">Bring a Trailer Scraper</a><br>Sold prices, VINs and auction results.</td></tr>
<tr><td>💥 <a href="https://apify.com/scrapersdelight/copart-lot-scraper">Copart Scraper</a><br>Salvage lots, damage, title and bids.</td>
<td>🏛️ <a href="https://apify.com/scrapersdelight/govdeals-auction-scraper">GovDeals Scraper</a><br>Government surplus auction lots.</td>
<td>🚜 <a href="https://apify.com/scrapersdelight/ironplanet-lot-scraper">IronPlanet Scraper</a><br>Heavy equipment lots and serials.</td></tr>
</table>

See every actor on the [ScrapersDelight profile](https://apify.com/scrapersdelight).

### Limits and empty runs

- **10,000 boats per search on the site.** With Go past 10,000 on (default), a bigger search is split by state, then condition, model year and length; rows are deduplicated by listing id. Measured: 25 boats in 1 request, 1,000 boats in 11 requests (~25 s), a 10,279-boat ZIP search split into 2 parts and delivered in full (10,280 unique boats, one listed during the run) in about 4.5 minutes.
- **Listings change during long runs.** BoatTrader re-orders results while a long search is read, so a 5,000+ row walk sees a few repeats; when you ask for a whole search the actor reads it a second time in the opposite update order to pick up what moved, and the run summary reports coverage.
- **Videos** come with details (the listing's own record); search rows carry photos only.
- **Private sellers** show no phone or address on BoatTrader.
- **An empty run** means the filters matched nothing (see RUN_SUMMARY → searches → status); nothing is charged for it.

### ❓ FAQ

#### How much does Boat Trader Scraper cost?

$0.0013 per boat or dealer row, with views, saves and days on market included. 1,000 boats cost $1.30. There is no start fee.

#### How many boats can Boat Trader Scraper get?

All of them: 113,500+ US listings plus ~2,400 abroad on 2026-10-14. One search on the site stops at 10,000; the actor splits bigger searches automatically.

#### Does Boat Trader Scraper return the HIN and engine hours?

Yes. The hull identification number was on 92% of listings and engine hours on 78% in a 1,000-boat run, with make, model, horsepower and kilowatts for every engine.

#### Can Boat Trader Scraper get dealer phone numbers?

Yes: every dealer listing carries the dealer's name, phone numbers by type, street address, logo and inventory URL; switch on details for the dealer's website. Set **What to collect** to **Dealer directory** for all 2,799 BoatTrader dealers.

#### Can Boat Trader Scraper track price drops and new listings?

Yes. Tick **Price dropped in the last 30 days** for current price cuts, or turn on monitor mode with a daily schedule to receive only new listings and listings whose price changed (with the previous price).

#### Does Boat Trader Scraper cover boats.com or YachtWorld?

No — it reads BoatTrader's listings only. 72% of BoatTrader rows carry the boat's YachtWorld id (`yachtWorldId`), which Boats Group shares across its sites.

#### Do I need a BoatTrader account, API key or login?

No. Boat Trader Scraper reads BoatTrader's public listings without an account, cookies or key.

#### Can I use Boat Trader Scraper through the Apify API or MCP?

Yes. Use the [API tab](https://apify.com/scrapersdelight/boattrader-scraper/api) for Python, JavaScript or HTTP, or the [MCP server](https://apify.com/scrapersdelight/boattrader-scraper/api/mcp) to let an AI assistant run it. Turn on **Compact rows** for AI pipelines.

#### Why did my Boat Trader Scraper run return no results?

The filters matched no boats (for example a model name the site spells differently), or every match was filtered out by Only rows with a phone or Max engine hours. RUN_SUMMARY shows each search's total and status. Empty runs are not charged.

#### Your feedback

Found a bug or need a field? Open an issue on the [Issues tab](https://apify.com/scrapersdelight/boattrader-scraper/issues/open) — we read every one.

# Actor input Schema

## `mode` (type: `string`):

Boat listings, or dealer-directory rows (name, phone, website, address, coordinates). Dealer rows use States, City, ZIP code, Makes and Keyword (as the dealer name).

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

Search pages (their filters are kept, e.g. /boats/type-power/class-power-pontoon/state-fl/), listing pages or bare listing numbers (e.g. 10330076), dealer inventory pages (/boats/dealer-...-61492/) and dealer-directory pages (/boat-dealers/state-fl/).

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

The site's keyword search, e.g. "tower" (1,864 US boats on 2026-10-14). In dealer mode: part of the dealer name, e.g. "marinemax".

## `descriptionKeyword` (type: `string`):

Boats whose seller description mentions these words, e.g. "tower" (8,207 US boats on 2026-10-14) or "twin diesel".

## `country` (type: `string`):

BoatTrader lists 113,537 US boats and ~2,400 abroad (2026-10-14). "All countries" removes the country filter.

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

One search per state (the site filters one state at a time). Empty = the whole country.

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

A city in the one state picked above, e.g. "Miami" (1,703 boats). Several cities: separate them with commas.

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

A US ZIP code to search around, e.g. "33139". Replaces the states filter. Every row then carries its distance in miles.

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

How far around the ZIP code to look (33139: 25 mi = 5,246 boats, 100 mi = 10,279).

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

The broadest category. PWC = personal watercraft; Small = dinghies, inflatables, RIBs, tenders, kayaks.

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

Any of the site's 90 classes, e.g. Pontoon (16,988 boats), Center Console (19,176), Sloop. Several = boats in any of them.

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

The site's activity groups (each a set of classes). Replaces Boat type and Boat classes when set.

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

Brand names as BoatTrader shows them, e.g. "Sea Ray", "Boston Whaler", "Grady-White"; add a model after a colon, e.g. "Sea Ray:Sundancer 320". All in one search.

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

New, used or both.

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

Lowest asking price in US dollars. 0 = no minimum.

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

Highest asking price in US dollars. 0 = no maximum.

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

Earliest model year, e.g. 2015. 0 = any.

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

Latest model year. 0 = any.

## `minLength` (type: `integer`):

Shortest boat in feet. 0 = any.

## `maxLength` (type: `integer`):

Longest boat in feet. 0 = any.

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

Several = boats with any of them.

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

Several = boats with any of them.

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

One search per shape (the site takes one at a time). Sellers publish a shape on ~58% of listings, so this narrows sharply.

## `engineTypes` (type: `array`):

One search per set-up (the site takes one at a time).

## `numberOfEngines` (type: `integer`):

Exactly this many engines, e.g. 2 (23,703 US boats). 0 = any.

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

Dealers and brokers (104,525 US boats) or private sellers (9,011).

## `priceDropOnly` (type: `boolean`):

Only boats whose price was cut in the last 30 days (the site's "Price drop" filter).

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

The order the site returns boats in. With a result limit this decides which boats you get.

## `withPhoneOnly` (type: `boolean`):

Skip listings without a dealer phone (private-seller listings never carry one) and dealers without a phone.

## `maxEngineHours` (type: `integer`):

Only boats whose engine hours are published and at most this, e.g. 300. 0 = no limit.

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

Reads each listing's own record: views, saves, days on market, dealer website, dealer active/sold listing counts, trusted-partner badge, overview and the site's owner-review summary. Slower; no extra charge.

## `includePhotos` (type: `boolean`):

Every photo URL per listing (up to 150; video URLs come with details). Off = lighter rows without images.

## `monitorMode` (type: `boolean`):

Deliver (and charge) only listings this monitor has not delivered before, or whose price changed since (changeType NEW / PRICE_CHANGED, previousPrice).

## `monitorStoreName` (type: `string`):

Name of the memory kept between runs. Use one name per schedule, e.g. "fl-pontoons". Empty = "boattrader-monitor".

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

Most rows for the whole run (listings and dealers). 0 = no limit (113,537 US boats on 2026-10-14).

## `maxResultsPerSearch` (type: `integer`):

Cap for each search (each state, hull shape, engine set-up or URL). 0 = only the overall cap.

## `splitLargeSearches` (type: `boolean`):

The site serves at most 10,000 boats per search. On: bigger searches are split by state, condition, model year and length, ids deduplicated.

## `compact` (type: `boolean`):

Core fields only (31 for listings, 10 for dealers) - for spreadsheets, AI agents and MCP.

## `maxConcurrency` (type: `integer`):

Detail and lookup requests in flight at once.

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

Not needed: the actor starts on a direct connection and moves to its own fallback routes only if the site refuses it. Your own proxy URLs are tried first.

## Actor input object example

```json
{
  "mode": "listings",
  "country": "US",
  "states": [
    "FL"
  ],
  "radiusMiles": "100",
  "boatType": "any",
  "boatGroup": "any",
  "condition": "any",
  "minPrice": 0,
  "maxPrice": 0,
  "minYear": 0,
  "maxYear": 0,
  "minLength": 0,
  "maxLength": 0,
  "numberOfEngines": 0,
  "sellerType": "any",
  "priceDropOnly": false,
  "sortBy": "recommended",
  "withPhoneOnly": false,
  "maxEngineHours": 0,
  "includeDetails": false,
  "includePhotos": true,
  "monitorMode": false,
  "maxResults": 25,
  "maxResultsPerSearch": 0,
  "splitLargeSearches": true,
  "compact": false,
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One item per boat listing or dealer-directory entry.

## `summary` (type: `string`):

Per-search totals, split leaves, pages read and status; duplicate, filtered and unchanged counts; detail records read; routes used.

# 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 = {
    "states": [
        "FL"
    ],
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/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 = {
    "states": ["FL"],
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/boattrader-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 '{
  "states": [
    "FL"
  ],
  "maxResults": 25
}' |
apify call scrapersdelight/boattrader-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapersdelight/boattrader-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/10o1NysQilNKeRzfp/builds/uHIm6et2QSoU9rHPW/openapi.json
