Alerts
Which opportunities are worth being interrupted for, written as rules the engine checks on every cycle so you do not have to sit on the board.
The screen, annotated
Every column, and what its number actually means.
The line under the page title, and the whole delivery model in one sentence. NEW means an opportunity the engine had not seen before. IMPROVED means the edge rose at least half a point above the number already stored. A price that drifts up a tenth at a time is never improved, and never re-alerts. COOLDOWN is five minutes per rule per opportunity. Inside that window the same play only reaches you again if its edge is half a point above what you were last told. Everything else that happens to a price — confirmed, nudged, expired — reaches you not at all.
Required; the rule will not save without one. It is not decoration. The name prints on every feed row and every Discord message. Once the opportunity is gone from the database, the name is the only thing left identifying the row. \"Arbs over 1.5%\" tells you what fired; \"test\" tells you nothing in a week.
Which kind of opportunity the rule watches. Any means all four, which is almost never what you want. Min edge % means a different thing in each. 2% of locked return on an arb and 2% of expected value on a +EV bet are not the same quantity, and one threshold cannot fit both. One rule per type is the working pattern.
The two options a new reader has usually not met. A middle is a pair of bets on different lines that can BOTH win if the result lands in the gap between them. Low hold is not a bet at all — it is a market where covering both sides costs almost nothing, which is where promotion conversions and hedges are cheapest. Both are ranked on expected value except low hold, which is ranked on cost; see the next field before you put a number on either.
The floor. The rule ignores anything whose edge is below this number, and the box is pre-filled with 1.0. Empty means no floor at all, and so does typing 0 — the screen reads that as "not set". No floor with Type on Any is the commonest way to end up with a feed nobody reads. The number is compared against the edge AFTER the engine has subtracted exchange and venue fees, so it is what would actually land in your pocket, not a headline.
Read this before saving that rule. Hold is the cost of a market, so lower is better, and the engine stores a low-hold opportunity's edge as the hold NEGATED — a market costing 1.8% is recorded as -1.8. A floor of 1.0, which is what the box is pre-filled with, therefore matches nothing and will match nothing forever. Enter -1 to mean 'hold of 1% or tighter', or clear the box to take every low-hold market the engine reports (it only reports them up to 2.5%).
Paste a Discord channel's webhook URL and that channel gets a message on every fire; leave it empty and the rule is in-app only. In-app is always on — the screen adds it to every rule it creates — so an empty box costs you nothing except the notification on your phone. This box and the in-app feed are the only two destinations this screen can set up.
The grey line under a rule's name in the Rules panel: the rule as it was actually stored, read back from the server. Check it after saving. A rule with no type reads "any type", and a rule with no floor simply omits the ≥ figure — which is how you spot the everything-alerts rule you did not mean to create.
Stops the rule firing. It is one-way from this screen: the struck-through rule stays in the list as a record, the disable link disappears, and there is no re-enable control. Treat it as deleting the rule, and write its replacement before you use it.
A row in Recent alerts: the selection, the book, and the edge AT THE MOMENT IT FIRED. That percentage is a historical record and is never refreshed — the price it describes may be better, worse, or gone. An arbitrage alert has no single side to name, so it shows the market's line with the matchup underneath and the two legs stay on the arbitrage board.
The grey second line of a feed row: the game, its start time, the rule that fired, and the local clock time of the alert. The time has no date on it, so a row reading 09:12:44 in the evening is from this morning. The panel holds the last 50 alerts.
No game, no selection, no percentage. An alert outlives the opportunity that caused it, which is the point of a feed, and this is what remains once that opportunity is no longer in the database. It is a record that your rule fired, not something to act on.
The three controls that matter
Ignore everything else on a first read.
Min edge %
The one setting that decides whether you read your own alerts. Start at 3 for a Positive EV rule, 1.5 for Arbitrage, 2 for Middle, and -1 for Low hold (negative, for the reason above). These sit above the 1% floor you browse the boards at, on purpose. You choose to open the board. An alert interrupts you, so it needs a higher bar. Nothing is hidden by raising it — every row below the floor is still on its board.
Type
Set it. Leaving it on Any is not a convenience. One Min edge % cannot mean anything across four quantities measured differently — and a rule with no type also collects Low hold, whose edge is negative. Two or three narrow rules with their own floors produce a feed you read; one Any rule produces one you mute.
disable
The fix for a rule that turned out to be too loose, and the only editing this screen does — there is no way to change a saved rule's floor. The sequence that works: create the replacement at the tighter number, watch the feed until you have seen it fire, THEN disable the old one. Name and Discord webhook can be left alone on a first read; the feed on the right needs no configuration at all.
A worked example
From a real row to a placed bet, including the stake.
Three alerts in seven minutes is what a single 3% rule looks like on a busy slate, and it is roughly the ceiling of what anyone reads. Drop that floor to 1 and the same evening produces dozens; set Type to Any as well and it produces hundreds, most of them the same handful of plays ticking. The failure is not the noise itself — it is that you mute the channel, and the 6% arbitrage three weeks later lands in a muted channel you no longer open. A stream nobody reads is worse than no alerts, because you have stopped watching the board too. And note what the last line is NOT: the alert did not place anything. It said a price existed at 19:04:11. Whether it still exists is a question only the book can answer.
When it goes wrong
The price moved, a leg was voided, the row vanished. What to actually do.
The alert said 3.10% and by the time you opened the book the price was +102 instead of +108, or the market was gone.
Expected, and not a bug. The percentage is the edge at the instant the alert fired. It is never updated. The book's price moves on its own clock, and the gap between a rule firing and you reading it is where most of the edge goes. Re-read the row on its board — +EV, arbitrage, whichever the rule watches — and decide from the number there, not the number in the message. If it is now under your floor, skip it: you are not obliged to place a bet because something told you about it, and an alert you decline cost you nothing. If most of your alerts do this, the bet type is moving faster than you can answer it. Arbitrage does. Either watch the board while you plan to trade, or raise your floor so only slower plays reach you.
The rule has never fired, and the board plainly shows rows of that type.
Work down this list in order. (1) Read the grey line under the rule name. Confirm the stored type and floor are what you meant. A rule saved with Type on Low hold and the default 1.0 floor can never match, because low-hold edges are stored negative. (2) Check the rule is not struck through; disabling is silent afterwards. (3) Compare your floor against the actual edges on the board — a 5% floor on +EV is above almost everything the engine finds. (4) If the plays sit at books your plan does not include, they are filtered out before delivery and leave no trace. Alerts never announce a bet you could not place. (5) Three-way soccer +EV — the 1X2 markets — never alerts at all, by design, because it is a hold-to-result single that cannot be hedged and a phone is the wrong place to discover that.
A price you were watching improved steadily all evening and you got exactly one alert about it.
That is the cooldown working, and you cannot change it here. After a rule fires, that bet goes quiet for five minutes. To alert again inside those five minutes, the edge has to climb at least half a point. The same half-point rule decides what counts as improved, so a price drifting up in tenths never sends a second alert. Suppressed fires are recorded server-side but the feed shows sent alerts only, so you will not see the ones you did not get. Treat the first alert on a play as the only one you will get, and if the play matters, watch it on its board.
The feed shows alerts but nothing arrives in Discord.
Those are two independent deliveries of the same alert, so the in-app row proves the rule fired and proves nothing about the webhook. A webhook URL that is mistyped, or belongs to a channel that has since been deleted, fails per-alert and silently — the failure is recorded but this screen does not display it. Check the URL in Discord (Channel settings, Integrations, Webhooks), and because a saved rule cannot be edited here, fixing it means creating the rule again with the corrected URL and disabling the old one. Keep alerts in their own channel while you tune a floor. A rule you are still calibrating will be noisy, and a noisy rule in a channel you talk in gets the whole channel muted.
Common mistakes
The specific ways people lose money with this tool.
Creating one rule with Type on Any and Min edge % cleared, to be sure of seeing everything.
Every new or improved opportunity fires — every type, every sport, every book your plan reaches. That is hundreds a night on a full slate, mostly thin rows you would never bet. Within days you mute the Discord channel and stop opening the feed, and the one 6% arbitrage that would have paid for the month arrives in a muted channel. You are now strictly worse off than with no alerts at all, because you also stopped sitting on the board.
Two or three narrow rules, each with its own floor: Positive EV at 3, Arbitrage at 1.5, Low hold at -1. Keep the boards at their 1% browsing floor — nothing is hidden, the rules only choose what is worth interrupting you for. Try this after a week. If you are not opening three of every four alerts, the floor is too low. Write the replacement a point higher and disable the old one.
Placing the bet straight from the Discord message or the lock screen, without opening the board.
The message carries the matchup, market, line and the edge as it was when it fired — no current price, no stake, and for an arbitrage no leg split at all. Acting on it means placing at whatever number the book now shows, which is routinely worse and is sometimes negative. On a two-leg play it is worse. You place the leg the message named, find the other side has moved, and are left holding half a hedge on a game you had no opinion about.
Treat every alert as a prompt to go look. Open the board it came from, read the current edge, and place from the row there, using the stake the screen computes. The alert has done its whole job the moment it made you open the page; if the price no longer justifies the bet, closing the tab is the correct outcome and a frequent one.
Disabling a noisy rule first, meaning to turn it back on once you have thought about the right number.
There is no re-enable on this screen. The rule stays in the list, struck through, with no controls. You rebuild it from memory days later — usually at a different threshold, so you cannot tell whether the change helped. In the meantime the type it covered is not being watched at all, which is how people miss the good week they were tuning for.
Create before you disable. Add the replacement at the tighter floor. Name it for what changed ("EV 3%+" after "EV 1%+"). Check the grey line stored the number you typed. Wait until it has fired once, then disable the old rule. The feed labels every row with the rule that produced it, so running both for an evening tells you exactly what the tighter floor cut.