Bookmaker Odds Comparison
Bookmaker Odds Comparison
The bookmakerOddsComparison widget renders a per-event 1x2 odds-comparison table across multiple bookmaker brands, served from the per-event snapshot pre-aggregated by the odds-pipeline-worker. Each row is a clickable affiliate link (/go/<cloakedLink>) wrapping logo + brand name + the 1 / X / 2 price cells.
Key features:
- Cross-provider odds: one row per configured brand, side-by-side prices for the 1, X, and 2 outcomes. Inactive brands are hidden entirely (no greyed-out rows).
- Affiliate-funnel CTA: each row is a single semantic
<a> to the brand’s cloaked tracking link. Optional widget-level CTA button via ctakey / ctatext attributes.
- Editorial copy via configuration JSON:
title, subtitle, and the event identity live in the configuration attribute; CTA + layout (fullwidth) live on top-level attributes the same way as ctabuttonlogo7.
- Tracking-link strategy (
tlTarget): switch between the default Vulcan cloaked links and the RBO legacy-id links without changing anything else.
- Two markets (
market): 1x2 (1 / X / 2 columns) or a tournament outright (one column per outcome – e.g. World Cup Winner) selected via the market field in the configuration JSON. See the Outright section at the bottom of this page.
The configuration attribute is a JSON object containing the event id, market, brands array, and optional title/subtitle. CTA + fullwidth are top-level attributes (NOT inside the JSON), matching the convention used by other CTA-bearing widgets.
Tracking-link strategy (tlTarget + per-brand legacyId)
The tlTarget top-level attribute controls how every affiliate link in the widget (brand logo, each odds cell, and the BET NOW button) is built:
tlTarget |
Link form |
Notes |
vulcan (default) |
/go/<cloakedLink>?country=…&language=…&wid=… |
Standard Vulcan cloaked-link strategy. Used when tlTarget is omitted. |
rbo |
/go/<legacyId>.html |
RBO legacy strategy. Uses each brand’s legacyId; no query params are appended. |
- The value is case-insensitive (
RBO, Rbo, rbo all work) and any unrecognized value falls back to vulcan.
- For
rbo, each brand’s legacyId is read from the brands[] entry in the configuration JSON (it falls back to the brand’s Sanity reference legacyId when omitted). If no legacyId can be resolved for a brand, that link safely falls back to the Vulcan form.
legacyId is ignored when tlTarget is vulcan, so it is harmless to always include it.
Full attributes (all options)
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019e6dac-0a37-762f-8f21-13a8b6b28939","market":"1x2","brands":[{"cloakedLink":"rabona-sports","legacyId":"Rabona-Sports","provider":"altenar"},{"cloakedLink":"royalistplay-sports","legacyId":"royalistplay-sports","provider":"delasport"},{"cloakedLink":"1bet-sports","legacyId":"1Bet-Sports","provider":"bahigo"},{"cloakedLink":"legendplay-sports","legacyId":"LegendPlay-Sports","provider":"altenar"}],"title":"Cross-bookmaker odds","subtitle":"Compare prices across all your favourite sportsbooks"}'
ctakey="bookmaker-odds-cta-bet-now"
ctatext="Bet now"
fullwidth="true"
anchorid="bookmaker-odds-full"
tlTarget="vulcan"
country="UK"
language="en"></nw-blocks>
Minimal attributes (defaults applied)
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019e6dac-0a37-762f-8f21-13a8b6b28939","brands":[{"cloakedLink":"rabona-sports","provider":"altenar"},{"cloakedLink":"1bet-sports","provider":"bahigo"}]}'
country="ZZ"
language="en"></nw-blocks>
With CTA translation key (resolved server-side via i18n)
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019e6dac-0a37-762f-8f21-13a8b6b28939","market":"1x2","brands":[{"cloakedLink":"rabona-sports","provider":"altenar"},{"cloakedLink":"royalistplay-sports","provider":"delasport"},{"cloakedLink":"1bet-sports","provider":"bahigo"},{"cloakedLink":"legendplay-sports","provider":"altenar"}],"title":"Today's headline match","subtitle":"World Cup 2026"}'
ctakey="bookmaker-odds-cta-bet-now"
country="de"
language="de"></nw-blocks>
With CTA literal text (no translation lookup)
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019e6dac-0a37-762f-8f21-13a8b6b28939","market":"1x2","brands":[{"cloakedLink":"rabona-sports","provider":"altenar"},{"cloakedLink":"1bet-sports","provider":"bahigo"}],"title":"Best odds, side by side"}'
ctatext="Claim your best odds now"
country="fr"
language="fr"></nw-blocks>
Fullwidth layout
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019e6dac-0a37-762f-8f21-13a8b6b28939","market":"1x2","brands":[{"cloakedLink":"rabona-sports","provider":"altenar"},{"cloakedLink":"royalistplay-sports","provider":"delasport"},{"cloakedLink":"1bet-sports","provider":"bahigo"},{"cloakedLink":"legendplay-sports","provider":"altenar"}],"title":"Compare odds","subtitle":"Full-width banner layout"}'
ctakey="bookmaker-odds-cta-bet-now"
fullwidth="true"
country="UK"
language="en"></nw-blocks>
RBO tracking links (tlTarget="rbo")
Set tlTarget="rbo" and provide a legacyId for each brand. Every affiliate link in the widget (brand logo, odds cells, and the BET NOW button) is then built as /go/<legacyId>.html instead of the Vulcan /go/<cloakedLink> form.
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019e6dac-0a37-762f-8f21-13a8b6b28939","market":"1x2","brands":[{"cloakedLink":"rabona-sports","legacyId":"Rabona-Sports","provider":"altenar"},{"cloakedLink":"royalistplay-sports","legacyId":"royalistplay-sports","provider":"delasport"},{"cloakedLink":"1bet-sports","legacyId":"1Bet-Sports","provider":"bahigo"},{"cloakedLink":"legendplay-sports","legacyId":"LegendPlay-Sports","provider":"altenar"}],"title":"Cross-bookmaker odds","subtitle":"RBO tracking strategy"}'
ctakey="bookmaker-odds-cta-bet-now"
ctatext="Bet now"
fullwidth="true"
tlTarget="rbo"
country="UK"
language="en"></nw-blocks>
Outright market (market: "outright")
The same bookmakerOddsComparison widget renders a tournament outright (e.g. World Cup Winner) when market is set to "outright" in the configuration JSON. Instead of fixed 1 / X / 2 columns, each brand row shows that bookmaker’s price for every outcome (one cell per selection – the competing teams or nations), served from the outright snapshot pre-aggregated by the odds-pipeline-worker.
Everything else is identical to the 1x2 market: brands, title / subtitle, ctakey / ctatext, fullwidth, tlTarget, and per-brand legacyId all behave exactly the same. Only two fields differ from the examples above – market is "outright" and internalEventId points at an outright event.
Note: Delasport does not offer outright markets, so these examples use Altenar- and Bahigo-backed brands. A configured brand with no outright price for the event is simply hidden, the same inactive-row behaviour as the 1x2 market.
Outright – full attributes (all options)
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019ec25b-d1b5-7d11-9c62-e6981cd49886","market":"outright","brands":[{"cloakedLink":"rabona-sports","legacyId":"Rabona-Sports","provider":"altenar"},{"cloakedLink":"1bet-sports","legacyId":"1Bet-Sports","provider":"bahigo"},{"cloakedLink":"legendplay-sports","legacyId":"LegendPlay-Sports","provider":"altenar"}],"title":"World Cup 2026 Winner","subtitle":"Outright odds across bookmakers"}'
ctakey="bookmaker-odds-cta-bet-now"
ctatext="Bet now"
fullwidth="true"
anchorid="bookmaker-odds-outright"
tlTarget="vulcan"
country="UK"
language="en"></nw-blocks>
Outright – minimal attributes (defaults applied)
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019ec25b-d1b5-7d11-9c62-e6981cd49886","market":"outright","brands":[{"cloakedLink":"rabona-sports","provider":"altenar"},{"cloakedLink":"1bet-sports","provider":"bahigo"}]}'
country="ZZ"
language="en"></nw-blocks>
Outright – RBO tracking links (tlTarget="rbo")
Set tlTarget="rbo" and provide a legacyId for each brand. Every affiliate link in the outright table – the brand-logo column headers, every odds cell, and the footer BET NOW buttons – is then built as /go/<legacyId>.html instead of the Vulcan /go/<cloakedLink> form.
Expand me...
<nw-blocks
id="bookmakeroddscomparison"
configuration='{"internalEventId":"019ec25b-d1b5-7d11-9c62-e6981cd49886","market":"outright","brands":[{"cloakedLink":"rabona-sports","legacyId":"Rabona-Sports","provider":"altenar"},{"cloakedLink":"1bet-sports","legacyId":"1Bet-Sports","provider":"bahigo"},{"cloakedLink":"legendplay-sports","legacyId":"LegendPlay-Sports","provider":"altenar"}],"title":"World Cup 2026 Winner","subtitle":"RBO tracking strategy"}'
ctakey="bookmaker-odds-cta-bet-now"
ctatext="Bet now"
fullwidth="true"
tlTarget="rbo"
country="UK"
language="en"></nw-blocks>