polymarket-opportunities-scanning

by caoqi

Scan 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", or set up a daily morning report. No external API keys required — uses Polymarket's public Gamma API.

View Chinese version with editor review

安装

claude skill add --url github.com/openclaw/skills/tree/main/skills/caoqi/polymarket-opportunities-scanning

文档

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.

DeviationTypeStrategy
Sum > 1.0 (overbooked)OVERBOOKBuy all NO outcomes
Sum < 1.0 (underbooked)UNDERBOOKBuy all YES outcomes

NegRisk markets are the highest quality — they're structurally guaranteed to be mutually exclusive.

Setup

  1. Copy scripts/scanner.js and scripts/send-report.js to your project directory
  2. Create .env in the same directory with email config (see references/setup.md)
  3. Install dependencies: npm install (no external deps — uses built-in fetch and Node.js)
  4. Test: node scanner.js && node send-report.js

Running a Scan

bash
# 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:

bash
node /path/to/send-report.js

(send-report.js calls scanner.js internally)

Scan Parameters (configurable in scanner.js)

ParameterDefaultDescription
minVolume$10,000Skip low-liquidity markets
minThreshold3%Minimum deviation worth acting on
maxThreshold50%Above this = likely false signal
minPrice3%Filter near-zero outcomes
maxPrice97%Filter near-certain outcomes

Report Format

code
🎯 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 message tool (channel: telegram, to: <your_telegram_id>)
  • Email: via Apple Mail + osascript (macOS only) — set SMTP_TO in .env

See references/setup.md for configuration details.

Cron Job Setup

Recommended: daily at 08:00 local time.

json
{
  "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.js\nWait for it to complete. If it fails, send a Telegram alert with the error.",
    "timeoutSeconds": 0
  },
  "delivery": { "mode": "none" }
}