YachtWorld Scraper avatar

YachtWorld Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
YachtWorld Scraper

YachtWorld Scraper

Scrape YachtWorld - the world's largest yacht & boat marketplace. Search boats for sale with make, model, length, price and year filters, browse by make, fetch full listing details with specifications, engines, broker info and images.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Scrape YachtWorld — the world's largest marketplace for yachts and boats. Search hundreds of thousands of listings with make, model, length, price and year filters, browse every listing from a manufacturer, or fetch complete detail pages with specifications, engines, broker information and photo galleries.

What this actor does

  • Three modes: search (keyword + full filter set), browseByMake (every listing from one manufacturer), byUrl (full detail from a listing or broker URL)
  • Search filters: make, model, keyword, boat type, new/used condition, fuel type, hull material, hull shape, length range (ft), price range (USD), year range, country, seller type, sort order
  • Full listing detail: title, price (USD + currency), year, make/model, length, beam, draft, weight, fuel type, hull material/shape, engines (make, model, hours, hp), fuel/water capacities, description, location, broker name/phone, image and video URLs
  • Cross-platform IDs: IMT, Boat Trader and BCNA listing IDs are captured when YachtWorld exposes them
  • Empty fields are omitted

Data source

YachtWorld (yachtworld.com) is owned by Boats Group. The actor reads YachtWorld's public search pages and listing pages.

Cloudflare caveat: YachtWorld is protected by Cloudflare. Plain HTTP clients receive 403 Forbidden (verified), while a full headless browser loads the site normally. This actor therefore runs a real browser (Playwright) for every request. If the datacenter IP is challenged, the optional Apify proxy is engaged automatically and retried with rotating sessions — no user action needed. Image URLs point at the images.boatsgroup.com CDN.

Facet routing: most search filters are applied through YachtWorld's REST search API. The fuel type / hull material / hull shape facets are not accepted by that API (it rejects them with 400), so the actor automatically switches to the SSR search pages (/boats-for-sale/fuel-diesel/, /hull-steel/, /hull-type-modified-vee/, …) whenever any of those three filters is set — verified live that these path segments filter correctly and can be combined (type-sail/condition-used/). In the SSR path a free-text keyword that matches a manufacturer (e.g. bayliner) is automatically turned into a make-… path segment (/boats-for-sale/fuel-diesel/make-bayliner/ — verified live), falling back to the plain listing when the hinted page has no boats. If the REST path is interrupted mid-way (0 records, or a throttle mid-pagination) while data exists, the actor recovers through the SSR pages — deduplicating against everything already emitted — before giving up.

Output per boat

  • listingId — YachtWorld listing ID
  • title, make, model, year
  • priceUsd, priceCurrency, priceHidden, previousPriceUsd, availability
  • lengthFt, lengthM, beamFt, draftFt, weightLb/weightKg, dryWeightLb, displacementLb
  • fuelType, hullMaterial, hullShape
  • fuelCapacityGal, waterCapacityGal, holdingCapacityGal
  • engines[] — per engine: make, model, type, hours, hp; plus totalPowerHp, totalEngineHours
  • city, subdivision, country, postalCode, location
  • brokerName, brokerPhone, brokerAddress, brokerCity, brokerCountry, brokerStreet, brokerPostalCode, brokerLatitude, brokerLongitude, brokerSpotlight, brokerLogoUrl, brokerActiveListings, brokerSoldListings
  • class (e.g. power-pilot, sail-racercruiser), boatType (power / sail / unpowered)
  • condition (new / used), sellerType (dealer / owner)
  • sponsored, featured, enhanced — listing promotion flags
  • attributes — listing attribute codes (NEW_ARRIVAL, LOCAL_DELIVERY, …) or label/value pairs when YachtWorld returns them
  • isCurrentModel, isOemModel — model lifecycle flags
  • imageUrls[], videoUrls[], mediaCount, imageCount, videoCount
  • description, otherDetails, specs
  • imtId, boatTraderId, bcnaId, yachtworldId
  • sourceUrl, recordType: "boat", scrapedAt

Input

FieldTypeDefaultDescription
modestringsearchsearch / browseByMake / byUrl
qstringbaylinerFree-text keyword: make, model or type (mode=search)
makestringConstrain to a manufacturer (mode=search)
modelstringConstrain to a model name (mode=search)
browseByMakestringbaylinerManufacturer to browse (mode=browseByMake)
urlsarrayListing/broker URLs to fetch (mode=byUrl, duplicates deduped)
boatTypestringpower / sail / unpowered
conditionstringnew / used
fuelTypestringdiesel / electric / petrol / other
hullMaterialstringaluminum / composite / ferrocement / fiberglass / hypalon / other / pvc / steel / wood
hullShapestringcatamaran / deep-vee / modified-vee / monohull
minLength / maxLengthintLength range in feet
minPrice / maxPriceintPrice range in USD
minYear / maxYearintModel-year range
countrystringISO 3166-1 alpha-2 country of the listing
sellerTypestringdealer / owner
sortBystringrecommendedrecommended, created-desc, price-asc, year-desc, …
maxItemsint20Hard cap (1–200)
proxyConfigurationobjectApify proxyOptional; auto-engaged on Cloudflare challenge

Note: when fuelType / hullMaterial / hullShape are used the search runs through the SSR facet pages. sortBy and model are not part of the facet path — length/price/year/keyword are still enforced locally on every record. When only REST-compatible filters are used, sortBy and model apply as normal.

Example: search with filters

{
"mode": "search",
"q": "trawler",
"boatType": "power",
"condition": "used",
"fuelType": "diesel",
"hullMaterial": "steel",
"minLength": 40,
"maxLength": 70,
"minPrice": 100000,
"maxPrice": 800000,
"minYear": 2005,
"country": "US",
"sortBy": "price-desc",
"maxItems": 10
}

Example: browse all boats from one manufacturer

{
"mode": "browseByMake",
"browseByMake": "beneteau",
"maxItems": 50
}

Example: fetch full listing details by URL

{
"mode": "byUrl",
"urls": [
"https://www.yachtworld.com/yacht/2000-bayliner-5788-pilot-house-motoryacht-10075370/",
"https://www.yachtworld.com/yacht/2015-beneteau-first-35-2-carbon-edition-10278657/"
]
}

Use cases

  • Yacht dealerships — monitor competitor inventory, pricing and brokerage positioning
  • Market research — build price-per-foot benchmarks by make, type, year and region
  • Boat valuation — track sold-listing history and current asking prices for a model
  • Lead generation — identify brokers and owners with active inventory in a region
  • Fleet managers — keep a structured registry of vessels on the market worldwide

Limitations

  • Cloudflare blocks plain HTTP clients — YachtWorld returns 403 Forbidden to plain HTTP clients (verified). The actor runs a real browser (Playwright) for every request and auto-engages the optional Apify proxy on a challenge.
  • Search records are compact cards — detailed specifications, engines, descriptions and other details are only exposed on the listing detail page (mode=byUrl); specs, engines, description and otherDetails appear on detail records.
  • Prices can be hidden — sellers can list without a public price ("Request price"); those records omit the price fields.
  • Facet routing caveat — when fuelType / hullMaterial / hullShape are used, the search runs through the SSR facet pages where sortBy and model don't apply (length/price/year/keyword are still enforced locally).
  • maxItems is capped at 200 — hard cap is 1–200 per run.
  • Image CDN requires a browser-like clientimages.boatsgroup.com URLs return 403 to plain curl/urllib; fetch them with a real browser or the Apify proxy.

FAQ

What is the data source? YachtWorld.com, the world's largest online marketplace for boats and yachts, operated by Boats Group.

How fresh is the data? Every run reads YachtWorld live — records reflect the listing state at scrape time, and scrapedAt records exactly when.

Why does the actor need a browser? YachtWorld sits behind Cloudflare and returns 403 to plain HTTP clients (verified). A full browser is required; the actor automatically engages the optional Apify proxy if a datacenter IP is challenged.

Why are some prices missing? Sellers can list without a public price ("Request price"). Those records simply omit the price fields.

Why are some fields missing on search records? Search results are the marketplace's compact card payload — detailed specifications, engine details and descriptions are only exposed on the listing detail page (mode=byUrl). The specs, engines, description and otherDetails fields appear on detail records.

What is boatType? YachtWorld groups boats into power (motor boats), sail (sailboats) and unpowered (small boats such as kayaks and tenders).

Does the data include boat images? Yes — imageUrls lists all gallery image URLs from the boatsgroup.com CDN. The CDN serves the images to real browsers from any network (verified: 200 image/jpeg via headless Chrome from a clean context on this machine, same IP that gets 403 from plain HTTP clients). Plain curl/urllib requests get 403 text/html regardless of User-Agent or Referer — the block is on the client's TLS/fingerprint, not the IP. If your client sees 403s, fetch through a real browser or the Apify proxy.

Is this affiliated with YachtWorld? No. This is an independent third-party actor using YachtWorld's public website.