YachtWorld APIyachtworld.com ↗
Search and retrieve boat listings from YachtWorld.com. Filter by make, class, type, location, and price. Get full specs, media, and broker contact info.
What is the YachtWorld API?
The YachtWorld API provides access to boat listings across 6 endpoints, letting you search inventory by make, class, type, condition, location, price range, and year. The search_boats_for_sale endpoint returns paginated results with sponsored listings, filterable facets, and a pagination cursor. get_boat_detail delivers full listing data including specs, media URLs, propulsion details, pricing, and broker contact information for any individual listing.
curl -X GET 'https://api.parse.bot/scraper/242b2dc6-c896-4c4c-bef5-3db255d870a9/search_boats_for_sale?make=Sea+Ray&page=1&sort=recommended&type=power&class=power-center&limit=5&country=US&owner_id=44211&year_max=2026&year_min=2020&condition=new&fuel_type=gasoline&price_max=500000&price_min=10000' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace yachtworld-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: YachtWorld SDK — search boats, browse classes, drill into details."""
from parse_apis.yachtworld_boat_listings_api import (
YachtWorld, Sort, BoatType, Condition, FuelType, BoatNotFound
)
client = YachtWorld()
# Discover available boat classes (taxonomy lookup).
for boat_class in client.boatclasses.list(limit=5):
print(boat_class.name, boat_class.heading, boat_class.count)
# Search power boats sorted by newest, capped at 3 results.
for listing in client.listingsummaries.search(
type=BoatType.POWER, sort=Sort.LISTED_DATE_DESC, limit=3
):
print(listing.make, listing.model, listing.year)
# Drill into the first result to get full detail.
first = client.listingsummaries.by_make(make="Beneteau", limit=1).first()
if first:
detail = first.details()
print(detail.make, detail.model, detail.year, detail.condition)
# Direct point-lookup by known boat ID.
try:
boat = client.listings.get(boat_id="9858107")
print(boat.make, boat.model, boat.year, boat.portal_link)
except BoatNotFound as exc:
print(f"Boat not found: {exc}")
# Browse a broker's inventory.
for b in client.listingsummaries.by_broker(owner_id="44211", limit=3):
print(b.make, b.model, b.year, b.class_)
print("exercised: boatclasses.list / listingsummaries.search / by_make / details / listings.get / by_broker")
Search for boats for sale with comprehensive filters including make, type, class, condition, location, price range, and year range. Returns paginated results with sponsored listings, facets for filtering, and ordered result records. Paginates via integer page number. Each result record contains listing summary data (id, make, model, year, price, location, media). Facets provide counts for available filter values.
| Param | Type | Description |
|---|---|---|
| make | string | Boat manufacturer name (e.g., 'Beneteau', 'Sea Ray') |
| page | integer | Page number (1-based) |
| sort | string | Sort order for results. |
| type | string | Boat type filter. |
| class | string | Boat class slug (e.g., 'power-center', 'sail-cruiser', 'power-motor'). Use get_boat_types to see available values. |
| limit | integer | Results per page |
| facets | string | Additional raw facet string to append |
| country | string | Country code (e.g., 'US', 'GB', 'IT') |
| owner_id | string | Broker/dealer owner ID to filter listings by a specific dealer |
| year_max | integer | Maximum model year |
| year_min | integer | Minimum model year |
| condition | string | Boat condition filter. |
| fuel_type | string | Fuel type filter. |
| price_max | integer | Maximum price in USD |
| price_min | integer | Minimum price in USD |
{
"type": "object",
"fields": {
"count": "integer total number of matching results",
"facets": "object with filtering facets (fuelType, make, class, hullMaterial, etc.)",
"records": "array of listing objects with id, make, model, year, class, price, portalLink, media, location",
"next_from": "integer pagination cursor or null",
"sponsored": "object containing count and records array of sponsored listings"
},
"sample": {
"data": {
"count": 68843,
"facets": {
"class": [
{
"count": 9856,
"value": "power-center"
}
],
"fuelType": [
{
"count": 41242,
"value": "gasoline"
}
]
},
"records": [
{
"id": 10124655,
"make": "Tigé",
"year": 2026,
"class": "power-skiwake",
"model": "Ultré 25ZX",
"price": {
"hidden": true
},
"portalLink": "https://www.yachtworld.com/yacht/2026-tige-ultre-25zx-10124655/"
}
],
"next_from": 9,
"sponsored": {
"count": 4,
"records": []
}
},
"status": "success"
}
}About the YachtWorld API
Search and Filter Listings
The search_boats_for_sale endpoint accepts a broad set of query parameters: make (e.g., 'Beneteau', 'Sea Ray'), type ('power', 'sail', or 'unpowered'), class (a slug like 'power-center' or 'sail-cruiser'), country code, price range, year range, and sort options including recommended, price_asc, price_desc, length_asc, length_desc, year_asc, and year_desc. Results are paginated and include a nextFrom cursor for deep pagination. The facets object in the response surfaces available filter values for fuel type, hull material, make, and class, which you can feed back into subsequent queries.
Listing Detail and Taxonomy
get_boat_detail takes a numeric boat_id and returns a complete listing record: make, model, year, type, class, condition, a price object with currency amounts, a media array with asset URLs, a contact object with broker details, and additional spec fields covering propulsion and location. get_boat_types requires no inputs and returns the full taxonomy used across the platform — an array of class objects each carrying a value slug, name, count, and heading category. Use this to discover valid values for the class parameter before querying.
Focused Search Endpoints
Three endpoints provide scoped searches without requiring the full filter set. search_boats_by_make accepts a required make string and returns the same structure as the main search. search_boats_by_class accepts a required class slug (e.g., 'power-pontoon', 'power-motor') and paginates results within that class. get_broker_listings accepts a required owner_id — a numeric string identifying a broker or dealer — and returns all active listings for that seller. All three endpoints share the same response shape: facets, sponsored, and orderedResults with count, records, and nextFrom.
The YachtWorld API is a managed, monitored endpoint for yachtworld.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when yachtworld.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official yachtworld.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate new and used boat inventory across multiple makes for a marine marketplace or comparison site
- Build a boat valuation tool using price, year, condition, and class fields from listing records
- Monitor a specific broker's active inventory by polling
get_broker_listingswith theirowner_id - Power a search UI with dynamic facet filters sourced from the
facetsresponse object (fuelType, hullMaterial, make, class) - Display media galleries for boat listings using the
mediaarray of asset URLs fromget_boat_detail - Index the full boat class taxonomy from
get_boat_typesto populate a class-browser or navigation menu - Track price changes on specific listing IDs by storing and diffing the
priceobject fromget_boat_detailover time
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does YachtWorld have an official developer API?+
What does `get_boat_detail` return beyond what appears in search results?+
get_boat_detail returns the full listing record for a single boat, including the media array of asset URLs, a contact object with broker contact information, a price object with currency breakdown, condition (new or used), and propulsion-related spec fields. Search result records contain a subset of these fields. You need the numeric boat_id from a search result to call this endpoint.How does pagination work across search endpoints?+
orderedResults object containing a count, a records array, and a nextFrom cursor string. Pass the page parameter (1-based integer) to step through results. The limit parameter controls records per page. The nextFrom cursor can be used for offset-based deep pagination when sequential page numbers are insufficient.Does the API cover boat rental listings or charter availability?+
Are there any known gaps in geographic or listing coverage?+
country filter in search_boats_for_sale accepts standard country codes (e.g., 'US', 'GB', 'IT'), but coverage density varies by market — YachtWorld's inventory skews toward North American and Western European listings. Listings that are marked inactive or sold are not returned. Historical sold-listings data and price history are not exposed by any current endpoint. You can fork this API on Parse and revise it to attempt coverage of sold or archived listings if your use case requires that data.