Free embeddable widget
Put live market data on your boat listings
A small panel showing how a boat’s asking price compares to the market for its model and year, from 135,302+ tracked listings across 126 models — counted as distinct boats, not raw listings. One snippet, whole site. No account, no fee, no iframe.
See it with your own boat
Select an example boat to preview the panel — these controls are for this page only, not part of the snippet you paste.
Figures are Hulls’ GBP-sourced market data. The currency control sets what the snippet writes for your listings — it doesn’t convert these figures.
<div data-hulls-widget></div>
<script src="https://hulls.io/embed/v1/widget.js" async></script>One line across your whole site. Each listing page identifies its own boat, currency and theme from the markup you already have — and shows nothing if it can’t confidently match a tracked model.
Awkward page? Set the boat explicitly (always overrides detection)
<div data-hulls-widget
data-manufacturer="Lagoon"
data-model="42"
data-year="2016"
data-price="411346"
data-currency="GBP"></div>This is what the live preview above uses (the picker drives it), since this page isn’t a listing to detect from. data-currency is your listing currency; data-theme pins light or dark (omit it to follow the visitor’s device).
Strict Content-Security-Policy? Two lines
Only if your site sends an enforcing CSP. The script and its data calls both go to hulls.io, so allow it in two directives:
script-src ... https://hulls.io;
connect-src ... https://hulls.io;script-src lets the widget load; connect-src lets it fetch the market data (that’s all it calls — no cookies, no third parties). Rendering the panel server-side instead needs no CSP change at all, which is why that route is the more robust one under a strict policy.
What to expect
The panel appears where the widget can confidently identify a tracked model with enough data behind it. On any other listing it renders nothing at all — no empty box, no error, no gap in your layout.
Coverage depends on your stock. We track around 126 production models — cruisers, sportsboats and catamarans from builders like Sea Ray, Beneteau, Sunseeker, Lagoon, Jeanneau and Fountaine Pajot — and a panel shows on roughly 100 of them, wherever the data runs deep enough to be worth showing. If you sell mostly superyachts, one-off vessels or rarer imports, expect it on few of your listings. The tracked list grows as the dataset does.
Not sure? Send us your website and we’ll tell you how many of your current listings would show a panel — before you paste anything.
The terms, plainly
- • Free — there is no charge to embed it, and no fee paid in either direction.
- • What it collects. Whenever the widget script detects a boat on a listing page — whether or not a panel is shown for it — it records the boat’s make, model and year as printed on that page, the listing’s address and your site’s domain, the date it was seen, how the boat was identified (structured data or the page title), a listing reference where your page exposes one, and the asking price and currency where your page’s structured data marks a single asking price. It never reads prices from page text or finance calculators; where the markup is unclear it records the sighting with no price. Asking prices are kept as advertised, in your currency, and are never treated as sale prices.
- • Where it goes. Every observation is held in a quarantine store. Nothing collected this way appears in the widget, on hulls.io or in the open dataset until a person has reviewed it; there is no automatic publication.
- • What it’s for. Knowing which models appear, and where, tells us which boats to prioritise for market-data coverage, and asking-price sightings build the evidence base for boats we cannot yet show data for — including newly released models no one has data on.
- • Nothing about your visitors. No names, no emails, and no IP addresses are recorded — no analytics or tracking of the people browsing your site. Only what the listing itself displays: the boat, its address, its asking price and your domain.
- • How long, and opting out. Observations are kept for up to 24 months from when a listing was last seen. Opt out any time: add
data-noingestto the widget div to stop it immediately (the panel keeps working), or email us your domain and we’ll exclude it. If you opt out, your domain’s existing observations are deleted. - • No account needed. Copy the snippet and paste it. That is the whole process.
- • Link it however you like. The widget carries one plain “Hulls.io” link back to the model’s data page — a normal followed link by default. If you’d rather it didn’t pass SEO signal, add
data-nofollowto the widget div and the link renders withrel="nofollow". Your choice, never a condition of use. - • It won’t break your page. It renders in an isolated shadow root, so your CSS and ours never collide. If our data or server is unavailable, it renders nothing rather than a broken box.
How the figures are derived
These are asking prices, not sale prices. We track live and historical listings and compute, per model and model-year, the median asking price and the interquartile range (the middle 50% of asking prices). The widget places a boat’s asking price against that band for its year.
Every figure is shown with its sample size — the number of distinct boats it was computed from (repeat scrapes and cross-site duplicates of the same boat are merged first). A model or year with too little data is omitted rather than shown as a guess. The current snapshot is April 2026, covering 135,302 listings across 126 models.
The full underlying dataset is documented at market intelligence.
