Odds Scraping Proxies: Public Lines From Every Licensed Market
Quick answer
For sports odds data you need residential proxies with country targeting. Bookmakers serve their public odds pages only inside the jurisdictions they are licensed in, and the lines, markets and limits shown differ by country. Geonode residential IPs come from real connections in 195+ countries, with rotation for wide coverage and sticky sessions for live markets that update every few seconds.
Why sports odds collection breaks without the right proxies
Bookmakers geo-fence hard. A sportsbook licensed in the UK, Italy or a US state checks the visitor's IP before showing a single price, and foreign IPs get a "not available in your region" page. There is no single location from which you can read the public odds of operators across many markets.
Datacenter ranges are treated as a separate category. Most sportsbooks and comparison sites run bot management that assigns a low trust score to datacenter IPs and answers with a JavaScript challenge, a CAPTCHA or HTTP 403 before any odds are rendered. The same page from a residential connection in the right country loads normally.
Frequency is the third issue. Pre-match odds move every few minutes and in-play odds every few seconds, so a useful feed polls each event page continuously. Repeated polling from one IP triggers HTTP 429 or shadow-limited responses where stale odds are served from cache without an error, which is worse because it looks correct.
Odds pages are also heavily client-rendered, with markets loaded over websockets or JSON endpoints after the initial page, so the collector needs session continuity to keep those endpoints responding.
Which Geonode proxy type fits
Residential proxies are the right choice for odds scraping proxies. Each request leaves from a real consumer connection inside the jurisdiction, so the bookmaker serves the public odds page it shows to local customers, and the bot management sees ordinary residential traffic. Geonode offers 2.5M IPs online, 30–50M unique IPs rotating monthly, and targeting by country, state and city, which matters in the US where availability is set at state level.
ISP proxies fit a small set of operators you poll very frequently. A static IP from a real ISP keeps one consistent identity on a live-odds endpoint for hours, with unlimited bandwidth per IP, which suits in-play feeds where reconnecting costs you updates.
Datacenter proxies are suitable only for comparison sites and public odds APIs that explicitly allow automated access and do not geo-fence. For bookmaker front ends they are the wrong tool.
- Residential — Best for: Bookmaker odds pages by country and state, comparison sites; IP source: Real consumer devices, 195+ countries; Session: Rotating or sticky up to 24 h; Price from: $0.27/GB at volume, 10 GB for $7.92
- ISP (static residential) — Best for: High-frequency in-play polling on a few operators; IP source: Static IPs from real ISPs; Session: Unlimited sessions, unlimited bandwidth per IP; Price from: $1.25/IP
- Datacenter — Best for: Public odds APIs and comparison sites that allow automation; IP source: Datacenter ranges, rotating; Session: Rotating; Price from: $0.14/GB
How to set it up
- List the operators and comparison sites per market, with the jurisdiction each one is licensed in, and confirm that collecting their public odds pages is permitted under their terms and local law.
- Map each operator to the country or US state it serves, and assign a residential targeting string per operator so every request lands from inside the licensed area.
- Load the event listing page in a sticky session, then poll the JSON or websocket endpoints the page uses for odds updates, keeping the same session so those endpoints keep answering.
- Normalise odds to a common format, decimal is simplest, and store operator, market, selection, price, timestamp and IP country for every observation so comparisons are reproducible.
- Watch for cached or stale responses by comparing update timestamps across operators, and rotate the session when an operator stops moving while others do.
// verify endpoint against docs.geonode.com before publishing
import { chromium } from "playwright";
const USER = "USERNAME";
const PASS = "PASSWORD";
// Residential IP in the UK, sticky session for the whole event page
const session = "odds-uk-" + Date.now();
const browser = await chromium.launch({
proxy: {
server: "http://premium-residential.geonode.com:9000",
username: `${USER}-country-gb-session-${session}`,
password: PASS,
},
});
const page = await browser.newPage({ locale: "en-GB", timezoneId: "Europe/London" });
await page.goto("https://www.example-sportsbook.co.uk/football/premier-league", { waitUntil: "networkidle" });
const odds = await page.$$eval("[data-market='match-winner'] [data-price]", els =>
els.map(e => ({ selection: e.dataset.selection, price: e.dataset.price }))
);
console.log(JSON.stringify({ observedAt: new Date().toISOString(), session, odds }));
await browser.close();
Get the exact snippet for your language from the API Code Generator in the dashboard.
Odds-specific settings that matter
Country and state targeting per operator
Target the jurisdiction the operator is licensed in, not a generic location. In the US that means state targeting, because the same brand serves different states with different markets. State and city cannot be combined in one username, so use state for sportsbooks and city only for local comparison sites.
Sticky sessions for live markets
Odds pages establish a session and then stream updates over JSON or websocket endpoints. Keep one sticky session for the life of the event you are watching and rotate between events. For in-play feeds that must not drop, an ISP proxy gives a static IP with unlimited bandwidth.
Poll rate per operator
Pre-match markets can be polled on a relaxed schedule; in-play markets need higher frequency. Set the rate per operator from how often its odds actually change, back off exponentially on HTTP 429 or challenge pages, and never poll faster than the site's own update cadence.
Consistent browser profile
Match locale, timezone and Accept-Language to the IP country. A UK IP with a US timezone is an inconsistent profile that bot management scores poorly. Keep the profile fixed within a session and reuse it on reconnection.
Log odds with provenance
For each observation store operator, market, selection, price, operator timestamp, your receive time, IP country and session id. Stale-cache detection and dispute handling with a data customer both depend on this record.
What Geonode gives you for sports odds data
- Residential IPs in 195+ countries with country, state and city targeting for licensed-market coverage.
- Sticky sessions up to 24 hours to keep live-odds endpoints responding on one IP.
- ISP proxies with static IPs and unlimited bandwidth for high-frequency in-play polling.
- HTTP, HTTPS, SOCKS5 and UDP for headless browsers and websocket clients.
- No fixed thread limit on residential, pay-as-you-go, 24/7 support.
Pricing for sports odds data
Odds pages are light once the initial load is done, so continuous polling across a handful of markets fits the 10 GB residential entry plan at $7.92 per month, with volume pricing from $0.27/GB as you add operators and in-play coverage. The 3-day trial for $5 lets you measure bytes per operator before you scale. ISP proxies start at $1.25/IP for persistent live feeds, and datacenter traffic starts at $0.14/GB for permitted public APIs. See all options on the pricing page.
FAQ
Why do odds scraping proxies have to be residential?
Because bookmakers show public odds only to visitors inside their licensed jurisdiction and run bot management that scores datacenter ranges poorly. A residential IP in the right country or state is the only way to load the page as a local customer sees it.
Can I collect in-play odds with odds scraping proxies?
Yes. Open the event page in a sticky residential session or through an ISP proxy, then poll the JSON or websocket endpoints the page uses. Keep one IP for the life of the event, and rotate between events rather than within them.
How many countries should I cover?
Cover the jurisdictions your product compares. An odds-comparison site for the UK market needs UK-licensed operators from UK IPs; a US product needs state-by-state coverage. Add markets as you add operators rather than targeting every country at once.
Do I need a headless browser or can I use plain HTTP requests?
Most sportsbooks render odds client-side and load them from JSON endpoints after the page initialises. A headless browser with the proxy configured is the reliable starting point. Once you have identified the endpoints, plain requests on the same sticky session are faster.
Is odds collection allowed under Geonode's terms?
Yes, for publicly displayed odds collected within each operator's terms and rate limits and the gambling rules of each jurisdiction. Do not automate betting accounts, account creation or log-ins; use only accounts you own or manage with authorisation. Geonode's AUP prohibits fraud, spam and credential abuse.
How do I detect stale or cached odds?
Compare operator update timestamps across sources and watch for an operator whose prices stop moving while others do. Log the response headers and session id for each observation, rotate the session when staleness is detected, and flag the gap in your feed.
Start
Build an odds feed that reflects what each licensed market actually shows. Get started with a 3-day trial for $5, or Contact sales if you need multi-jurisdiction coverage with a mix of residential and ISP proxies.
Related: Stock market data · Price intelligence · Website change monitoring