Scrape Stake.com sport odds, live bets, highrollers, trending matches and market data. Python + GraphQL. No captcha. No browser. No Selenium.
Quick Start · What you can scrape · Use Telegram Bot
Your Stake.com companion. Monitor bets, check balances, manage withdrawals.
@stakecontrolbot already does all the scraping for you 24/7 — highrollers, trending matches, odds monitoring, balance tracking — straight to your Telegram. No code, no server, no maintenance.
Most Stake.com scrapers use Selenium or Puppeteer to render the page in a browser. That's slow, fragile, and gets blocked.
This scraper hits the GraphQL API directly — the same endpoint the Stake.com website uses internally. No browser, no Selenium, no captcha solver needed for public data.
POST https://stake.com/_api/graphql
Content-Type: application/json
Fast. Lightweight. Reliable.
| Data | GraphQL query | Update frequency |
|---|---|---|
| Highroller bets | highrollerSportBets |
Real-time |
| All sport bets feed | allSportBets |
Real-time |
| Trending matches | sportHomepageTrendingMatches |
Every ~60s |
| Match odds | sportFixture |
Real-time |
| Sport markets | sportFixture.groups |
Real-time |
| Exchange rates (crypto/fiat) | CurrencyConversionRate |
Every ~60s |
| Data | GraphQL query |
|---|---|
| Your balance | UserBalances |
| Your bet history | sportBetList |
| Your transactions | transactions |
| Your tips history | tipList / sendTipList |
| Active bets | activeSportBets |
Get your token: Stake.com → Settings → Security → API Tokens
git clone https://github.com/forcemaredart/stake-scraper
cd stake-scraper
pip install -r requirements.txt
python scraper.pyimport requests
ENDPOINT = "https://stake.com/_api/graphql"
HEADERS = {"content-type": "application/json"}
query = """
query {
allSportBets(limit: 20) {
bet {
... on SportBet {
amount
currency
user { name }
outcomes {
odds
fixtureName
outcome { name }
}
}
}
}
}
"""
r = requests.post(ENDPOINT, headers=HEADERS, json={"query": query})
bets = r.json()["data"]["allSportBets"]
for item in bets:
b = item["bet"]
oc = b["outcomes"][0]
print(f"{b['user']['name']:20} {b['amount']} {b['currency']} @ {oc['odds']} | {oc['fixtureName']}")query = """
query FixtureOdds($id: String!) {
sportFixture(id: $id) {
name
status
groups(groups: ["winner"]) {
templates(limit: 1) {
markets(limit: 1) {
name
outcomes {
name
odds
active
}
}
}
}
}
}
"""
r = requests.post(ENDPOINT, headers=HEADERS, json={
"query": query,
"variables": {"id": "YOUR_FIXTURE_ID"}
})
fixture = r.json()["data"]["sportFixture"]
print(fixture["name"])
for market in fixture["groups"][0]["templates"][0]["markets"]:
for outcome in market["outcomes"]:
print(f" {outcome['name']:20} {outcome['odds']}")query = """
query {
sportHomepageTrendingMatches(sortBy: totalBetValue) {
fixtureStatistics {
totalUserCount
totalBetCount
totalBetValue
}
fixture {
name
status
tournament {
category { sport { name } }
}
}
}
}
"""
r = requests.post(ENDPOINT, headers=HEADERS, json={"query": query})
matches = r.json()["data"]["sportHomepageTrendingMatches"]
for m in matches:
stats = m["fixtureStatistics"]
fixture = m["fixture"]
sport = fixture["tournament"]["category"]["sport"]["name"]
print(f"{fixture['name']:40} {sport:15} bets:{stats['totalBetCount']:>6} vol:${stats['totalBetValue']:>10,.0f}")import requests
BINANCE = "https://api.binance.com/api/v3/ticker/price"
# Get prices
prices = {"USDT": 1.0, "USDC": 1.0}
for item in requests.get(BINANCE).json():
if item["symbol"].endswith("USDT"):
prices[item["symbol"][:-4]] = float(item["price"])
# Scrape highrollers
query = """
query {
highrollerSportBets(limit: 25) {
bet {
... on SportBet {
amount currency
potentialMultiplier
user { name }
outcomes { odds fixtureName outcome { name } }
}
}
}
}
"""
r = requests.post(ENDPOINT, headers=HEADERS, json={"query": query})
for item in r.json()["data"]["highrollerSportBets"]:
b = item["bet"]
usd = float(b["amount"]) * prices.get(b["currency"].upper(), 0)
oc = b["outcomes"][0]
print(f"${usd:>8,.0f} {b['user']['name']:20} x{b['potentialMultiplier']:.2f} {oc['fixtureName']}")# Scrape highrollers to CSV
python scraper.py --mode highrollers --output highrollers.csv
# Scrape trending matches
python scraper.py --mode trending
# Scrape live odds for a fixture
python scraper.py --mode odds --fixture-id FIXTURE_ID
# Monitor all bets in real time
python scraper.py --mode monitor --threshold 500timestamp,player,amount,currency,usd,odds,fixture,outcome,sport
2026-03-24 14:23:01,cryptowhale,0.25,ETH,1020.50,2.10,Real Madrid vs Barcelona,Real Madrid,Football
2026-03-24 14:23:04,hidden,0.018,BTC,1890.00,1.85,Lakers vs Celtics,Lakers,Basketball
2026-03-24 14:23:09,stake_king,500.0,USDT,500.00,3.40,Djokovic vs Alcaraz,Djokovic,Tennis
Stake.com uses Cloudflare. Tips to stay unblocked:
- Don't exceed 1 request/second for the same query
- Use
requests.Session()— keep-alive reduces fingerprinting - Randomize User-Agent between sessions
- Add
x-language: enheader — reduces response variation - For heavy scraping, use rotating proxies + FlareSolverr for CF cookie refresh
session = requests.Session()
session.headers.update({
"content-type": "application/json",
"x-language": "en",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
})@stakecontrolbot is a ready-made Telegram bot that scrapes Stake.com continuously and delivers data straight to your phone:
| What you want | DIY scraper | @stakecontrolbot |
|---|---|---|
| Highroller feed | + | + |
| Trending matches | + | + |
| Live odds monitoring | + | + |
| Push alerts on big bets | — | + |
| Suspicious match detection | — | + |
| Your personal balance | — | + |
| Your bet history + ROI | — | + |
| Runs 24/7, no server needed | — | + |
| Zero setup | — | + |
- stake.com-api — full GraphQL API documentation
- stake-highroller-tracker — highroller monitor
Not affiliated with Stake.com. For educational purposes. Scraping public data only. Use responsibly and in accordance with Stake.com Terms of Service.