polymarket-opportunities-scanning
v1.0.0Scan Polymarket prediction markets for book arbitrage opportunities (overbooked/underbooked multi-outcome markets), generate a formatted report, and deliver it via Telegram and email. Use when asked to "scan Polymarket", "find betting opportunities", "run Polymarket report", "check Polymarket arb",...
Installation
Polymarket Opportunities Scanning
Scan Polymarket's active multi-outcome markets for book arbitrage opportunities where the sum of all YES prices deviates from 1.0. Generate a ranked report and send to Telegram + email.
How It Works
In a truly mutually exclusive multi-outcome market, all YES prices should sum to 1.0.
| Deviation | Type | Strategy |
|---|---|---|
| Sum > 1.0 (overbooked) | OVERBOOK | Buy all NO outcomes |
| Sum < 1.0 (underbooked) | UNDERBOOK | Buy all YES outcomes |
NegRisk markets are the highest quality — they're structurally guaranteed to be mutually exclusive.
Setup
- Copy
scripts/scanner.jsandscripts/send-report.jsto your project directory - Create
.envin the same directory with email config (seereferences/setup.md) - Install dependencies:
npm install(no external deps — uses built-infetchand Node.js) - Test:
node scanner.js && node send-report.js
Running a Scan
# Run scanner → saves opportunities.json
node scanner.js
# Send report (reads opportunities.json → Telegram + email)
node send-report.js
Or run both in one cron command:
node /path/to/send-report.js
(send-report.js calls scanner.js internally)
Scan Parameters (configurable in scanner.js)
| Parameter | Default | Description |
|---|---|---|
| minVolume | $10,000 | Skip low-liquidity markets |
| minThreshold | 3% | Minimum deviation worth acting on |
| maxThreshold | 50% | Above this = likely false signal |
| minPrice | 3% | Filter near-zero outcomes |
| maxPrice | 97% | Filter near-certain outcomes |
Report Format
🎯 Polymarket Opportunities Report [timestamp]
Found N opportunities (X NegRisk)
⭐ NegRisk Markets (highest quality)
[OVERBOOK/UNDERBOOK] Event Title
💰 Profit: X% | Volume: $Xk | 24h: $Xk
📐 Sum: X% (deviation +X%)
🎯 Strategy: Buy all NO / Buy all YES
🔗 https://polymarket.com/event/...
X% Outcome A
X% Outcome B
...
📋 Regular Multi-Outcome Markets
[same format]
Delivery
- Telegram: via OpenClaw
messagetool (channel: telegram, to:<your_telegram_id>) - Email: via Apple Mail + osascript (macOS only) — set
SMTP_TOin.env
See references/setup.md for configuration details.
Cron Job Setup
Recommended: daily at 08:00 local time.
{
"name": "Polymarket Morning Scan",
"schedule": { "kind": "cron", "expr": "0 8 * * *", "tz": "Europe/Stockholm" },
"sessionTarget": "isolated",
"payload": {
"kind": "agentTurn",
"message": "Run: exec → node /path/to/send-report.jsnWait for it to complete. If it fails, send a Telegram alert with the error.",
"timeoutSeconds": 0
},
"delivery": { "mode": "none" }
}