Sports Odds Arbitrage Finder
Pricing
from $0.85 / 1,000 matches
Sports Odds Arbitrage Finder
Find pre-match sports arbitrage opportunities, guaranteed-profit stake splits, and freshness signals from Sportsmonks odds data.
Pricing
from $0.85 / 1,000 matches
Rating
0.0
(0)
Developer
Trove Vault
Maintained by CommunityActor stats
1
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Find pre-match football arbitrage and live in-play arbitrage candidates from your Sportsmonks odds feed. The Actor compares bookmaker prices for upcoming and current football markets, returns guaranteed pre-match arbitrage rows when the best odds imply less than 100% probability, and marks live rows as candidates because in-play odds can suspend or move before execution.
The output is built for fast triage: event, league, market, arbitrage percentage, implied probability total, stake split, bookmaker selections, and odds freshness signals when timestamps are available.
Why use this Actor
Sports odds APIs can return a lot of raw prices, but the work is deciding which events are actionable. This Actor turns odds into ranked arbitrage opportunities:
- Scan upcoming pre-match opportunities and current in-play fixtures with almost no setup.
- Compare the main full-time result markets across bookmakers.
- Get exact pre-match arbitrage rows, live in-play candidates, and near-miss watchlist rows in the same dataset.
- Get calculated stakes per outcome, not just a list of prices.
- Keep a clean dataset for scheduled monitoring or downstream alerts.
What it produces
Each dataset row represents one event and market. sourceMode is always prematch or live. Pre-match exact rows use opportunityStatus: "arbitrage_found". Live exact rows use opportunityStatus: "live_arbitrage_candidate" because execution risk is materially higher. Near-miss rows use near_miss_watchlist or live_near_miss_watchlist and show negative profit values so they are not confused with profitable arbitrage.
Important fields include:
eventName,leagueName,startTimesourceModemarketarbitragePercentimpliedProbabilityTotalguaranteedProfittotalStakebestOutcomeSummaryoutcomesfreshnessStatuslastOddsUpdateexecutionRisk,oddsAgeSecondson live rows when available
Use cases
Betting analysts can monitor upcoming fixtures and quickly find opportunities worth checking in their own bookmaker accounts.
Trading and odds teams can use the output to benchmark market discrepancies across bookmakers covered by their Sportsmonks plan.
Automation builders can schedule the Actor and send high-margin rows into Slack, a database, or another Apify workflow.
Affiliate and content teams can use the dataset as a source for internal research, provided their Sportsmonks plan and downstream use allow it.
How it works
- The Actor reads your encrypted
sportsmonksApiToken. - It scans pre-match, live, or both depending on
mode. - For pre-match, it scans today through tomorrow by default, or your optional date range.
- For live, it checks current in-play fixtures and retrieves in-play odds.
- It fetches odds per fixture in parallel for lower latency.
- It normalizes odds, markets, selections, bookmakers, and update timestamps.
- For each event and market, it selects the best decimal odds per outcome.
- It returns exact rows first, then the closest near-miss rows.
The Actor currently targets football odds through Sportsmonks API v3, covering pre-match odds and standard in-play odds. It uses the main full-time result market family by default. Available bookmakers, odds, in-play fixtures, and freshness timestamps depend on your Sportsmonks subscription.
Input
{"sportsmonksApiToken": "YOUR_SPORTSMONKS_API_TOKEN","mode": "both","includeNearMissWatchlist": true}
Input fields
| Field | Description |
|---|---|
sportsmonksApiToken | Required. Encrypted Sportsmonks API token with access to odds data. |
mode | Optional. both scans pre-match and live in-play odds. Use prematch or live to restrict the scan. |
dateFrom / dateTo | Optional UTC event dates in YYYY-MM-DD format. Leave empty to scan today through tomorrow. |
includeNearMissWatchlist | Optional. Keep true to include close markets to monitor. Set false to return only direct arbitrage/candidate rows. |
The Actor uses sensible internal defaults: football, mode: "both", main full-time result markets, all upcoming fixtures in the selected date window, current live fixtures, EUR stake labels, and a 500 total stake for stake-split calculations.
Output example
{"opportunityStatus": "arbitrage_found","sourceMode": "prematch","profitSignal": "solid_margin","sport": "football","leagueName": "Premier League","eventId": "123456","eventName": "Team A vs Team B","startTime": "2026-07-04T18:00:00.000Z","market": "1X2","arbitragePercent": 3.42,"impliedProbabilityTotal": 96.69,"guaranteedProfit": 17.1,"currency": "EUR","totalStake": 500,"outcomeCount": 3,"bestOutcomeSummary": "Team A: Bookmaker 1 @ 2.2 stake 219.77 | Draw: Bookmaker 2 @ 3.6 stake 134.31 | Team B: Bookmaker 3 @ 3.3 stake 145.92","outcomes": [{"selection": "Team A","bookmaker": "Bookmaker 1","odds": 2.2,"stake": 219.77,"payout": 483.49,"updatedAt": "2026-07-02T09:15:00.000Z"},{"selection": "Draw","bookmaker": "Bookmaker 2","odds": 3.6,"stake": 134.31,"payout": 483.52,"updatedAt": "2026-07-02T09:14:00.000Z"},{"selection": "Team B","bookmaker": "Bookmaker 3","odds": 3.3,"stake": 145.92,"payout": 481.54,"updatedAt": "2026-07-02T09:13:00.000Z"}],"freshnessStatus": "fresh","lastOddsUpdate": "2026-07-02T09:15:00.000Z","oldestOddsUpdate": "2026-07-02T09:13:00.000Z","runId": null}
Near-miss rows use the same shape but are clearly marked:
{"opportunityStatus": "near_miss_watchlist","sourceMode": "prematch","profitSignal": "near_miss","eventName": "Team A vs Team B","market": "Fulltime Result","arbitragePercent": -0.27,"impliedProbabilityTotal": 100.27,"guaranteedProfit": -1.35,"bestOutcomeSummary": "Away: Coral @ 11 stake 45.3 | Draw: Ladbrokes @ 5.5 stake 90.6 | Home: Dafabet @ 1.37 stake 363.1"}
Near-miss rows are a radar signal only. They mean the best available prices are close to arbitrage, not that the stake split is guaranteed profitable.
Live rows use sourceMode: "live" and candidate statuses:
{"opportunityStatus": "live_arbitrage_candidate","sourceMode": "live","profitSignal": "thin_margin","executionRisk": "high","oddsAgeSeconds": 8,"eventName": "Team A vs Team B","market": "Fulltime Result","arbitragePercent": 0.41,"impliedProbabilityTotal": 99.59,"guaranteedProfit": 2.05,"bestOutcomeSummary": "Away: Bookmaker 1 @ 4.8 stake 103.76 | Draw: Bookmaker 2 @ 3.9 stake 127.7 | Home: Bookmaker 3 @ 1.86 stake 268.54"}
Live candidate rows are not guaranteed execution opportunities. They mean the current in-play odds snapshot calculates as profitable before fees, limits, suspension, account rules, and odds movement.
API usage
curl "https://api.apify.com/v2/acts/TROVEVAULT_ACTOR_ID/runs" \-H "Content-Type: application/json" \-H "Authorization: Bearer $APIFY_TOKEN" \-d '{"sportsmonksApiToken": "YOUR_SPORTSMONKS_API_TOKEN","mode": "both","includeNearMissWatchlist": true}'
After the run finishes, fetch the default dataset items:
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true" \-H "Authorization: Bearer $APIFY_TOKEN"
Limitations
- The Actor does not place bets.
- Profit is calculated before bookmaker fees, limits, void rules, delays, account restrictions, currency conversion, and odds movement.
- Output depends on the sports, bookmakers, markets, and update timestamps available in your Sportsmonks plan.
- This version is designed for football odds. Multi-sport support needs additional Sportsmonks endpoint adapters.
- Live rows are in-play arbitrage candidates, not guaranteed executed arbitrage. The Actor filters stopped and suspended in-play odds, but prices can still move before a user acts.
- Near-miss watchlist rows are not guaranteed-profit arbitrage. They are ranked cases that are close enough to monitor or manually re-check. Set
includeNearMissWatchlisttofalseto hide them. - If Sportsmonks returns odds without update timestamps, the Actor can still calculate opportunities but marks freshness as
unknown_age. - If your Sportsmonks plan does not include odds, the run summary will show the API or data-access failure.
FAQ
Do I need a Sportsmonks account?
Yes. This Actor uses your own Sportsmonks API token. The token is marked as a secret input in Apify.
Does this use MCP connectors?
Not in v1. Apify MCP connectors are a good option when a third-party service exposes an MCP server, but this Actor uses direct Sportsmonks API-token authentication because that is the documented access path.
Why did I get zero rows?
Common reasons:
- No exact arbitrage, live candidate, or near-miss case was found in the scanned fixtures.
- Your API plan did not return odds for the requested events.
Is this legal to use?
This Actor is a data analysis tool. You are responsible for complying with Sportsmonks terms, bookmaker terms, local betting laws, and any rules around publishing or acting on odds data.
Changelog
0.1- Pre-match and live football arbitrage scanner with Sportsmonks token input, fast fixture-level odds fetching, sourceMode labels, exact pre-match rows, live candidate rows, near-miss watchlist rows, stake split calculation, freshness handling, and Apify dataset output.