{"id":652,"date":"2026-02-11T19:33:47","date_gmt":"2026-02-11T19:33:47","guid":{"rendered":"https:\/\/web3fuel.io\/article\/?p=652"},"modified":"2026-02-11T19:33:48","modified_gmt":"2026-02-11T19:33:48","slug":"polymarket-activity-monitor","status":"publish","type":"post","link":"https:\/\/web3fuel.io\/article\/polymarket-activity-monitor\/","title":{"rendered":"Building a Real-Time Polymarket Monitor to Detect Smart Money Positioning"},"content":{"rendered":"<div class=\"et_pb_section_0 et_pb_section et_section_regular et_block_section\">\n<div class=\"et_pb_row_0 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_0 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_0 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h1 class=\"text-text-100 mt-3 -mb-1 text-[1.375rem] font-bold\"><strong>Building a Real-Time Polymarket Monitor to Detect Smart Money Positioning<\/strong><\/h1>\n<\/div><\/div>\n\n<div class=\"et_pb_text_1 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><p><em>Polymarket tracks 300+ active prediction markets at any time. When someone suddenly dumps $250K into a market hours before a major announcement, that's not random, it's a signal.<\/em><\/p>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_1 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_1 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_post_title_0 et_pb_post_title et_pb_bg_layout_light et_clickable et_pb_module et_block_module\"><div class=\"et_pb_title_container\"><p class=\"et_pb_title_meta_container\">by <span class=\"author vcard\"><a href=\"https:\/\/web3fuel.io\/article\/author\/admin_546\/\" title=\"Posts by Alex G.\">Alex G.<\/a><\/span> | <span class=\"published\">Feb 11, 2026<\/span><\/p><\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_2 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_2 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_2 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h2><strong><span style=\"color: #00ffff;\">\/\/ <\/span>Summary<\/strong><\/h2>\n<\/div><\/div>\n\n<div class=\"et_pb_text_3 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><p><span style=\"font-weight: 400;\">I built an automated monitoring system that scans 300+ Polymarket prediction markets every 30 minutes, detects unusual orderbook activity that might indicate insider trading, or smart money positioning, and sends instant Discord alerts with AI-powered context analysis.<\/span><\/p>\n<p><b>What it does:<\/b><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Collects orderbook data from all active Polymarket markets every 30 minutes.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Detects spikes when current activity exceeds the 6-hour baseline by 5x or more.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Enriches alerts with statistical indicators (Z-score, RSI, bid\/ask imbalance).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Uses AI to analyze WHY spikes happened (news search + context generation).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Sends Discord notifications with market details and signal quality scores.<\/span><\/li>\n<\/ul>\n<p><b>Results (first 7 days):<\/b><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">324 markets monitored continuously.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">108,864 snapshots collected.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">23 high-confidence spikes alerted.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">73% accuracy on bid depth spikes predicting YES outcomes.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">100% uptime.<\/span><\/li>\n<\/ul>\n<p><b>Tech stack:<\/b><span style=\"font-weight: 400;\"> Python, MySQL, Polymarket APIs, Claude AI, Discord webhooks, Flask dashboard<\/span><\/p>\n<p><b>Live dashboard:<\/b><a href=\"https:\/\/web3fuel.io\/tools\/polymarket-monitor\" target=\"_blank\" rel=\"noopener\"> <span style=\"font-weight: 400;\">web3fuel.io\/tools\/polymarket-monitor<\/span><\/a><\/p>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_3 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_3 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_code_0 et_pb_code et_pb_module\"><div class=\"et_pb_code_inner\"><div id=\"table-of-contents\" style=\"background: rgba(173,173,173,0.05); padding: 10px 20px 0px 10px; border-radius: 5px; margin: 10px 0;\">\n  <h3 style=\"margin-top: 0; text-align: center; text-decoration: underline; background: linear-gradient(90deg, #ff0000, #ff7f00, #ffff00); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; cursor: pointer; display: flex; align-items: center; justify-content: center; position: relative; font-size: 24px; font-weight: 700\" id=\"toc-header\">\n    Table of Contents\n    <span id=\"toc-arrow\" style=\"position: absolute; right: 0; transition: transform 0.3s; -webkit-text-fill-color: initial; background: none; color: white;\">\u25bc<\/span>\n  <\/h3>\n  <ul id=\"toc-list\" style=\"list-style: none; padding-left: 0; display: none;\"><\/ul>\n<\/div>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', function() {\n  const tocList = document.getElementById('toc-list');\n  const tocHeader = document.getElementById('toc-header');\n  const tocArrow = document.getElementById('toc-arrow');\n  \n  \/\/ Toggle collapse functionality\n  tocHeader.addEventListener('click', function() {\n    if (tocList.style.display === 'none') {\n      tocList.style.display = 'block';\n      tocArrow.style.transform = 'rotate(180deg)';\n    } else {\n      tocList.style.display = 'none';\n      tocArrow.style.transform = 'rotate(0deg)';\n    }\n  });\n  \n  \/\/ Target headings in both post content AND Divi text modules\n  const headings = document.querySelectorAll('.et_pb_text_inner h2, .et_pb_text_inner h3, .et_pb_text_inner h4, .et_pb_post_content h2, .et_pb_post_content h3, .et_pb_post_content h4');\n  \n  if (headings.length === 0) {\n    document.getElementById('table-of-contents').style.display = 'none';\n    return;\n  }\n  \n  headings.forEach((heading, index) => {\n    \/\/ Add ID to heading if it doesn't have one\n    if (!heading.id) {\n      heading.id = 'heading-' + index;\n    }\n    \n    \/\/ Create TOC item\n    const li = document.createElement('li');\n    li.style.marginBottom = '8px';\n    \n    \/\/ Indent H3s and H4s\n    if (heading.tagName === 'H3') {\n      li.style.paddingLeft = '20px';\n      li.style.fontSize = '0.95em';\n    }\n    if (heading.tagName === 'H4') {\n      li.style.paddingLeft = '40px';\n      li.style.fontSize = '0.9em';\n    }\n    \n    \/\/ Create link\n    const link = document.createElement('a');\n    link.href = '#' + heading.id;\n    link.textContent = heading.textContent;\n    link.style.textDecoration = 'none';\n    link.style.color = '#0066cc';\n    link.style.transition = 'color 0.2s';\n    \n    \/\/ Hover effect\n    link.addEventListener('mouseenter', function() {\n      this.style.color = '#0099ff';\n      this.style.textDecoration = 'underline';\n    });\n    link.addEventListener('mouseleave', function() {\n      this.style.color = '#0066cc';\n      this.style.textDecoration = 'none';\n    });\n    \n    \/\/ Smooth scroll with padding above heading\n    link.addEventListener('click', function(e) {\n      e.preventDefault();\n      const offset = 120; \/\/ Increased from 100 to add more space above the heading\n      const elementPosition = heading.getBoundingClientRect().top + window.pageYOffset;\n      window.scrollTo({ top: elementPosition - offset, behavior: 'smooth' });\n    });\n    \n    li.appendChild(link);\n    tocList.appendChild(li);\n  });\n});\n<\/script><\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_4 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_4 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_4 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h2><strong><span style=\"color: #00ffff;\">\/\/\u00a0<\/span><\/strong><b>The Opportunity<\/b><\/h2>\n<\/div><\/div>\n\n<div class=\"et_pb_text_5 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><p><span style=\"font-weight: 400;\">Prediction markets have an insider trading problem. And right now, almost nobody is watching.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">For example, just recently in January 2026, a single Polymarket trader turned a $32,000 bet into more than <strong>$400,000<\/strong> in profit hours before the Trump administration's capture of Venezuelan leader Nicol\u00e1s Maduro became public. The account had joined Polymarket just weeks earlier. The timing was, to put it generously, extraordinary.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Was it luck? Possibly. Was it someone with access to non-public government intelligence? Also possible. The uncomfortable truth is that on prediction markets, it's nearly impossible to tell in real-time and almost nobody is trying.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This isn't an isolated incident. A separate trader netted nearly $1 million by correctly predicting 22 out of 23 of Google's most-searched terms in a single year. The odds of doing that randomly are astronomical.\u00a0<\/span><\/p>\n<h3><b>The Regulatory Gap<\/b><span style=\"font-weight: 400;\">\u00a0<\/span><\/h3>\n<p><span style=\"font-weight: 400;\">Unlike the stock market where the SEC actively monitors trading activity for suspicious patterns, prediction markets operate in a much lighter regulatory environment. Polymarket and its competitors fall under the jurisdiction of the Commodity Futures Trading Commission (CFTC), an agency with roughly one-eighth the staff of the SEC, despite handling billions in weekly trade volume.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">This results in a market where informed money can position freely, with minimal oversight, before major announcements break. For traders on the wrong side of these moves, the losses are real. For anyone monitoring the orderbook, the signals are visible, if you know what to look for.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><\/span><\/p>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_5 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_5 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_6 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h2><strong><span style=\"color: #00ffff;\">\/\/\u00a0<\/span><\/strong><b>The Problem: Information at Scale<\/b><\/h2>\n<\/div><\/div>\n\n<div class=\"et_pb_text_7 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><p><span style=\"font-weight: 400;\">Polymarket tracks 300+ active markets at any time across politics, sports, crypto, geopolitics, and more. Each market has a live orderbook with bids and asks that fluctuate constantly.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">When a market suddenly shows unusual activity such as a 5x, 10x, or even 20x increase in orderbook depth, it's often a signal that someone with non-public information is positioning. These spikes frequently precede major price movements and public news by minutes or hours.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The problem: <\/span><b>no human can watch 300 markets simultaneously<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<h3><b>Key Challenges<\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Volume<\/b><span style=\"font-weight: 400;\">: 300+ markets, each updating continuously<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Speed<\/b><span style=\"font-weight: 400;\">: Insider activity can spike and recede within minutes<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Noise<\/b><span style=\"font-weight: 400;\">: Normal market activity creates constant fluctuations\u2014you need to distinguish signal from noise<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Context<\/b><span style=\"font-weight: 400;\">: A 2x spike on a $2K market means nothing; a 6x spike on a $100K market is significant<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">By the time you manually notice a spike, the information advantage is gone.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><\/span><\/p>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_6 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_6 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_8 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h2><strong><span style=\"color: #00ffff;\">\/\/ <\/span><\/strong><b>The Solution: Automated Spike Detection<\/b><\/h2>\n<\/div><\/div>\n\n<div class=\"et_pb_text_9 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><p><span style=\"font-weight: 400;\">I built an automated monitoring system that runs 24\/7 on my server:<\/span><\/p>\n<h3><b>System Overview<\/b><\/h3>\n<ul>\n<li><b>Collects<\/b><span style=\"font-weight: 400;\"> orderbook data from every active Polymarket market every 30 minutes.<\/span><\/li>\n<li><b>Stores<\/b><span style=\"font-weight: 400;\"> time-series snapshots in MySQL to build historical baselines.<\/span><\/li>\n<li><b>Detects<\/b><span style=\"font-weight: 400;\"> spikes when current activity exceeds the 6-hour baseline by 5x or more.<\/span><\/li>\n<li><b>Enriches<\/b><span style=\"font-weight: 400;\"> alerts with statistical indicators (Z-score, RSI, bid\/ask imbalance).<\/span><\/li>\n<li><b>Analyzes<\/b><span style=\"font-weight: 400;\"> spike context using Claude AI + news search to explain WHY it happened.<\/span><\/li>\n<li><b>Sends<\/b><span style=\"font-weight: 400;\"> rich Discord notifications with market details, signal quality scores, and direct links.<\/span><\/li>\n<\/ul>\n<p>The entire system runs hands-free via cron jobs. No manual intervention required.<\/p>\n<\/div><\/div>\n\n<div class=\"et_pb_image_0 et_pb_image et_pb_module et_block_module\"><span class=\"et_pb_image_wrap\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2026\/02\/Flow-chart-pm-monitor-e1770759145439.png\" title=\"Flow chart pm monitor\" width=\"744\" height=\"458\" srcset=\"https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2026\/02\/Flow-chart-pm-monitor-e1770759145439.png 744w, https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2026\/02\/Flow-chart-pm-monitor-e1770759145439-480x270.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 744px, 100vw\" class=\"wp-image-666\" \/><\/span><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_7 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_7 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_10 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h2><strong><span style=\"color: #00ffff;\">\/\/ <\/span><\/strong><b>Real Example: 558% Return Signal<\/b><\/h2>\n<\/div><\/div>\n\n<div class=\"et_pb_text_11 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><p>On February 9th, 2026 at 7:38 PM UTC, my monitoring system fired this alert:<\/p>\n<\/div><\/div>\n\n<div class=\"et_pb_image_1 et_pb_image et_pb_module et_block_module\"><span class=\"et_pb_image_wrap\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-10-184030-e1770767462789.png\" title=\"Screenshot 2026-02-10 184030\" width=\"447\" height=\"189\" srcset=\"https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-10-184030-e1770767462789.png 447w, https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2026\/02\/Screenshot-2026-02-10-184030-e1770767462789-300x127.png 300w\" sizes=\"(max-width: 447px) 100vw, 447px\" class=\"wp-image-667\" \/><\/span><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_8 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_8 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_12 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><p><span>\"Will Creed Humphrey win the NFL Protector of the Year?\" <\/span><\/p>\n<p><span>The market was sitting at 13.2% \"Yes\". The crowd wasn't paying attention, but t<\/span><span>he orderbook was. <\/span><\/p>\n<p><span> <\/span><span>Bid depth had exploded from a $9,700 six-hour average to <\/span><span>$114,020 in a single collection window. An 11.8x spike. <\/span><span>Someone (or a group of someones) was aggressively buying YES <\/span><span>on a market the crowd gave barely a 1-in-8 chance. <\/span><\/p>\n<p><span> <\/span><span>If you had bought YES shares at the alert price of $0.132 and <\/span><span>held to resolution: <span class=\"token token bold\">**<\/span><span class=\"token token bold content\">558% return<\/span><span class=\"token token bold\">**<\/span>. $1,000 in, $6,580 out. <\/span><\/p>\n<p><span> <\/span><span>The official announcement broke roughly 4 hours later. <\/span><span>Creed Humphrey won. <\/span><span> <\/span><span>This wasn't luck or a good guess. It may not have been insider trading, but this was information asymmetry <\/span><span>made visible through orderbook monitoring, and my automated <\/span><span>system caught it in real-time while 300+ other markets ran <\/span><span>quietly in the background. <\/span><span> <\/span><span>That's what this tool is built to find.<\/span><\/p>\n<\/div><\/div>\n\n<div class=\"et_pb_text_13 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h2><strong><span style=\"color: #00ffff;\">\/\/ <\/span><\/strong><b>Technical Deep-Dive<\/b><\/h2>\n<\/div><\/div>\n\n<div class=\"et_pb_text_14 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h3><b>Polymarket's Two-API Architecture<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Polymarket exposes two complementary APIs:<\/span><\/p>\n<p><b>Gamma API <\/b><b><\/b><b>Endpoint:<\/b> <a href=\"gamma-api.polymarket.com\/events\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">gamma-api.polymarket.com\/events<\/span><\/a><\/p>\n<p><b>Purpose:<\/b><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Market discovery and metadata.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Returns events with nested markets, questions, current prices.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Provides <\/span><span style=\"font-weight: 400;\">clobTokenIds<\/span><span style=\"font-weight: 400;\"> needed for orderbook queries.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Prices come as arrays: [<\/span><span style=\"font-weight: 400;\">\"0.65\", \"0.35\"]<\/span><span style=\"font-weight: 400;\"> (Yes, No probabilities).<\/span><\/li>\n<\/ul>\n<p><b>CLOB API <\/b><b>Endpoint:<\/b> <a href=\"clob.polymarket.com\/book\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\">clob.polymarket.com\/book<\/span><\/a><\/p>\n<p><b>Purpose:<\/b><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Live orderbook data (bids and asks).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Queried per token ID (each outcome has its own token).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Returns arrays of <\/span><span style=\"font-weight: 400;\">{price, size}<\/span><span style=\"font-weight: 400;\"> objects.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Sum of all <\/span><span style=\"font-weight: 400;\">size<\/span><span style=\"font-weight: 400;\"> values = total depth on each side.<\/span><\/li>\n<\/ul>\n<h3><b>Collection Workflow<\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Hit Gamma API once \u2192 get all active markets + their token IDs.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">For each market \u2192 hit CLOB API for each outcome token \u2192 get orderbook depth.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Store snapshot in MySQL with timestamp.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">For 324 markets with 2 outcomes each = ~650 CLOB API calls per collection run. With 0.3-0.5 second rate limiting between calls, a full collection takes 5-8 minutes.<\/span><\/p>\n<\/div><\/div>\n\n<div class=\"et_pb_code_1 et_pb_code et_pb_module\"><div class=\"et_pb_code_inner\"><div class=\"w3f-code-block\"><div class=\"w3f-code-title\">Simplified collection logic<\/div><div class=\"w3f-code-lang-badge\">PYTHON<\/div><pre class=\"\"><code class=\"language-python\">def collect_market_data():\n    # Step 1: Discover active markets\n    events = fetch_gamma_api(&quot;\/events?active=true&amp;closed=false&quot;)\n    \n    for event in events:\n        for market in event['markets']:\n            # Step 2: Get orderbook depth for each token\n            for token_id in market['clobTokenIds']:\n                orderbook = fetch_clob_api(f&quot;\/book?token_id={token_id}&quot;)\n                \n                bid_depth = sum(bid['size'] for bid in orderbook['bids'])\n                ask_depth = sum(ask['size'] for ask in orderbook['asks'])\n                \n                # Step 3: Store snapshot\n                store_snapshot(market_id, timestamp, bid_depth, ask_depth)\n                \n                time.sleep(0.3)  # Rate limiting<\/code><\/pre><\/div><\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_9 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_9 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_15 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h2><strong><span style=\"color: #00ffff;\">\/\/ <\/span><\/strong><b>Why\u00a0<\/b><b>Orderbook Depth Over Price<\/b><\/h2>\n<\/div><\/div>\n\n<div class=\"et_pb_text_16 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><p><b>Depth changes BEFORE price moves.<\/b><\/p>\n<p><span style=\"font-weight: 400;\">When a large player wants to buy $100K worth of YES tokens:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>First:<\/b><span style=\"font-weight: 400;\"> Their limit orders stack up on the bid side \u2192 <\/span><b>depth spikes<\/b><span style=\"font-weight: 400;\">\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Then:<\/b><span style=\"font-weight: 400;\"> As orders get filled \u2192 <\/span><b>price starts moving<\/b><span style=\"font-weight: 400;\">\u00a0<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Finally:<\/b><span style=\"font-weight: 400;\"> Other traders notice \u2192 <\/span><b>momentum accelerates<\/b><span style=\"font-weight: 400;\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">By monitoring depth, you catch the setup phase before the price movement. A 6x spike in bid depth on a market that normally has $15K on the books is a strong signal that someone large is positioning.<\/span><\/p>\n<h3><b>What the Tool Tracks<\/b><\/h3>\n<p><b>Bid depth<\/b><span style=\"font-weight: 400;\"> (buy pressure) \u2192 suggests bullish sentiment.<\/span><\/p>\n<p><strong>Ask depth <\/strong>(sell pressure) \u2192 suggests bearish sentiment.<\/p>\n<p>&nbsp;<\/p>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_10 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_10 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_17 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h2><strong><span style=\"color: #00ffff;\">\/\/ <\/span><\/strong><b>Spike Detection Algorithm<\/b><\/h2>\n<\/div><\/div>\n\n<div class=\"et_pb_text_18 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><p><span style=\"font-weight: 400;\">The core algorithm is deliberately simple and robust:<\/span><\/p>\n<\/div><\/div>\n\n<div class=\"et_pb_code_2 et_pb_code et_pb_module\"><div class=\"et_pb_code_inner\"><div class=\"w3f-code-block\"><div class=\"w3f-code-lang-badge\">PYTHON<\/div><pre class=\"\"><code class=\"language-python\">spike_ratio = current_value \/ baseline_average\n\nif spike_ratio &gt;= 5.0:  # Configurable threshold\n    trigger_alert()<\/code><\/pre><\/div><\/div><\/div>\n\n<div class=\"et_pb_text_19 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h3><b>Baseline Calculation<\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Average of last 12 snapshots (6 hours at 30-minute intervals).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Excludes the current snapshot (prevents spike from inflating baseline).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Requires minimum 12 data points before any detection runs.<\/span><\/li>\n<\/ul>\n<h3><b>Noise Filters<\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Markets with depth &lt; $2,000 ignored (low-liquidity noise).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Markets with prices &lt; 10% or &gt; 90% filtered (already resolved).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Signal quality score must be \u2265 65\/100 (multiple indicators must align).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">5-minute race condition check (prevents duplicate alerts).<\/span><\/li>\n<\/ul>\n<h3><b>Price Momentum Detection<\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Triggers when price moves \u226520 percentage points from baseline.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Uses 12-snapshot baseline window.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Classifies direction (UP\/DOWN) and magnitude.<\/span><\/li>\n<\/ul>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_11 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_11 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_20 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h2><strong><span style=\"color: #00ffff;\">\/\/ <\/span><\/strong><b>MySQL Time-Series Storage<\/b><\/h2>\n<\/div><\/div>\n\n<div class=\"et_pb_text_21 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><p><span style=\"font-weight: 400;\">Three tables power the system:<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><\/span><\/p>\n<h3><b>Database Schema<\/b><\/h3>\n<\/div><\/div>\n\n<div class=\"et_pb_code_3 et_pb_code et_pb_module\"><div class=\"et_pb_code_inner\"><div class=\"w3f-code-block\"><div class=\"w3f-code-title\">Market metadata (upserted each run)<\/div><div class=\"w3f-code-lang-badge\">SQL<\/div><pre class=\"\"><code class=\"language-sql\">CREATE TABLE markets (\n    market_id VARCHAR(255) PRIMARY KEY,\n    question TEXT,\n    slug VARCHAR(255),\n    clob_token_ids TEXT,\n    category VARCHAR(100)\n);<\/code><\/pre><\/div><\/div><\/div>\n\n<div class=\"et_pb_code_4 et_pb_code et_pb_module\"><div class=\"et_pb_code_inner\"><div class=\"w3f-code-block\"><div class=\"w3f-code-title\">Time-series snapshots (one per market per collection)<\/div><div class=\"w3f-code-lang-badge\">SQL<\/div><pre class=\"\"><code class=\"language-sql\">CREATE TABLE market_snapshots (\n    id INT AUTO_INCREMENT PRIMARY KEY,\n    market_id VARCHAR(255),\n    timestamp TIMESTAMP,\n    yes_price DECIMAL(5,4),\n    no_price DECIMAL(5,4),\n    orderbook_bid_depth DECIMAL(12,2),\n    orderbook_ask_depth DECIMAL(12,2),\n    INDEX (market_id, timestamp)\n);<\/code><\/pre><\/div><\/div><\/div>\n\n<div class=\"et_pb_code_5 et_pb_code et_pb_module\"><div class=\"et_pb_code_inner\"><div class=\"w3f-code-block\"><div class=\"w3f-code-title\">Detection history (for dedup and pattern analysis)<\/div><div class=\"w3f-code-lang-badge\">SQL<\/div><pre class=\"\"><code class=\"language-sql\">CREATE TABLE spike_alerts (\n    id INT AUTO_INCREMENT PRIMARY KEY,\n    market_id VARCHAR(255),\n    detected_at TIMESTAMP,\n    metric_type VARCHAR(50),\n    spike_ratio DECIMAL(6,2),\n    baseline_value DECIMAL(12,2),\n    current_value DECIMAL(12,2),\n    notified BOOLEAN DEFAULT FALSE\n);<\/code><\/pre><\/div><\/div><\/div>\n\n<div class=\"et_pb_text_22 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h3><b>Auto-Cleanup<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Runs after every collection:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Snapshots older than 7 days \u2192 deleted<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Alerts older than 30 days \u2192 deleted<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Markets inactive for 30+ days \u2192 deleted<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">This prevents unbounded database growth while retaining enough history for baseline calculations and pattern analysis.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><\/span><\/p>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_12 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_12 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_23 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h2><strong><span style=\"color: #00ffff;\">\/\/ <\/span><\/strong><b>Rate Limiting Strategy<\/b><\/h2>\n<\/div><\/div>\n\n<div class=\"et_pb_text_24 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h3><b>Implementation<\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>0.3-0.5 second delay<\/b><span style=\"font-weight: 400;\"> between individual CLOB calls (configurable).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>30-second timeout<\/b><span style=\"font-weight: 400;\"> per request (prevents hanging).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Error handling<\/b><span style=\"font-weight: 400;\">: failed fetches log warning, don't crash.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Progress logging<\/b><span style=\"font-weight: 400;\"> every 10 markets for monitoring.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">With 650 API calls at 0.3s spacing = 3-4 minutes of API time + processing overhead = <\/span><b>5-8 minute total run time<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\n<\/div><\/div>\n\n<div class=\"et_pb_code_6 et_pb_code et_pb_module\"><div class=\"et_pb_code_inner\"><div class=\"w3f-code-block\"><div class=\"w3f-code-title\">Rate limiting implementation<\/div><div class=\"w3f-code-lang-badge\">PYTHON<\/div><pre class=\"\"><code class=\"language-python\">import time\n\nRATE_LIMIT_DELAY = 0.3  # seconds\n\nfor market in markets:\n    try:\n        orderbook = fetch_orderbook(market.token_id, timeout=30)\n        process_orderbook(orderbook)\n    except Exception as e:\n        logger.warning(f&quot;Failed to fetch {market.market_id}: {e}&quot;)\n        continue  # Don't crash, keep going\n    \n    time.sleep(RATE_LIMIT_DELAY)<\/code><\/pre><\/div><\/div><\/div>\n\n<div class=\"et_pb_text_25 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h3><b>De-duplication Layers<\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Database-level<\/b><span style=\"font-weight: 400;\">: Once alert sent to Discord \u2192 permanently suppressed (marked <\/span><span style=\"font-weight: 400;\">notified = TRUE<\/span><span style=\"font-weight: 400;\">)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Process-level<\/b><span style=\"font-weight: 400;\">: 5-minute race condition check<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Notification-level<\/b><span style=\"font-weight: 400;\">: 60-second in-memory cache<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Without all three layers, you get duplicate alerts for the same event.<\/span><\/p>\n<ul><\/ul>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_13 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_13 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_26 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h2><strong><span style=\"color: #00ffff;\">\/\/ <\/span><\/strong><b>Advanced Features<\/b><\/h2>\n<\/div><\/div>\n\n<div class=\"et_pb_text_27 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h3><b>Statistical Indicators<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Each alert is enriched with professional-grade statistical analysis:<\/span><\/p>\n<\/div><\/div>\n\n<div class=\"et_pb_image_2 et_pb_image et_pb_module et_block_module\"><span class=\"et_pb_image_wrap\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2026\/02\/Polymarket-monitor-Statistical-Indicators-Diagram-1.png\" title=\"Polymarket monitor Statistical Indicators Diagram\" width=\"744\" height=\"781\" srcset=\"https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2026\/02\/Polymarket-monitor-Statistical-Indicators-Diagram-1.png 744w, https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2026\/02\/Polymarket-monitor-Statistical-Indicators-Diagram-1-480x504.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 744px, 100vw\" class=\"wp-image-672\" \/><\/span><\/div>\n\n<div class=\"et_pb_text_28 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h3><b>Signal Quality Score (0-100)<\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>80+<\/b><span style=\"font-weight: 400;\">: Excellent (multiple indicators align)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>65-80<\/b><span style=\"font-weight: 400;\">: Good (clear signal with support)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>50-65<\/b><span style=\"font-weight: 400;\">: Moderate (mixed indicators)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>&lt;50<\/b><span style=\"font-weight: 400;\">: Weak (likely noise - filtered out)<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Only alerts scoring \u226565 trigger Discord notifications.<\/span><\/p>\n<h3><b>Claude AI Context Analysis<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">When a spike fires, the system automatically:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Extracts keywords<\/b><span style=\"font-weight: 400;\"> from market question (strips \"Will\", \"What\", dates)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Searches recent news<\/b><span style=\"font-weight: 400;\"> via Brave Search API (fallback to DuckDuckGo)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Sends spike data + news to Claude Haiku<\/b><span style=\"font-weight: 400;\"> with focused prompt<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Includes AI analysis<\/b><span style=\"font-weight: 400;\"> in Discord notification<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">This answers: <\/span><b>\"Why did this spike happen?\"<\/b><\/p>\n<\/div><\/div>\n\n<div class=\"et_pb_code_7 et_pb_code et_pb_module\"><div class=\"et_pb_code_inner\"><div class=\"w3f-code-block\"><div class=\"w3f-code-title\">Simplified AI Analysis Flow<\/div><div class=\"w3f-code-lang-badge\">PYTHON<\/div><pre class=\"\"><code class=\"language-python\">def analyze_spike_context(market_question, spike_time):\n    # Extract keywords\n    keywords = extract_keywords(market_question)\n    \n    # Search recent news\n    news_results = search_news(keywords, since=spike_time - timedelta(hours=24))\n    \n    # Ask Claude to connect the dots\n    prompt = f&quot;&quot;&quot;\n    A prediction market just spiked significantly:\n    \n    Market: {market_question}\n    Spike time: {spike_time}\n    \n    Recent news:\n    {news_results}\n    \n    In 2-3 sentences, explain why this spike likely occurred.\n    Focus on information that may have leaked or news that just broke.\n    &quot;&quot;&quot;\n    \n    analysis = call_claude_api(prompt, model=&quot;claude-haiku-20250514&quot;)\n    return analysis<\/code><\/pre><\/div><\/div><\/div>\n\n<div class=\"et_pb_text_29 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h3><b>Signal Quality Score (0-100)<\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>80+<\/b><span style=\"font-weight: 400;\">: Excellent (multiple indicators align)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>65-80<\/b><span style=\"font-weight: 400;\">: Good (clear signal with support)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>50-65<\/b><span style=\"font-weight: 400;\">: Moderate (mixed indicators)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>&lt;50<\/b><span style=\"font-weight: 400;\">: Weak (likely noise - filtered out)<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Only alerts scoring \u226565 trigger Discord notifications.<\/span><\/p>\n<h3><b>Claude AI Context Analysis<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">When a spike fires, the system automatically:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Extracts keywords<\/b><span style=\"font-weight: 400;\"> from market question (strips \"Will\", \"What\", dates)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Searches recent news<\/b><span style=\"font-weight: 400;\"> via Brave Search API (fallback to DuckDuckGo)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Sends spike data + news to Claude Haiku<\/b><span style=\"font-weight: 400;\"> with focused prompt<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Includes AI analysis<\/b><span style=\"font-weight: 400;\"> in Discord notification<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">This answers: <\/span><b>\"Why did this spike happen?\"<\/b><\/p>\n<h3><strong>What the Correlator Tracks<\/strong><b><\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Configured market pairs <\/span><span style=\"font-weight: 400;\">with<\/span><span style=\"font-weight: 400;\"> expected correlation <\/span><span style=\"font-weight: 400;\">(<\/span><span style=\"font-weight: 400;\">positive<\/span><span style=\"font-weight: 400;\">,<\/span><span style=\"font-weight: 400;\"> negative<\/span><span style=\"font-weight: 400;\">,<\/span><span style=\"font-weight: 400;\"> inverse<\/span><span style=\"font-weight: 400;\">).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Divergences where one market moves but correlated pair doesn't.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Arbitrage opportunities when divergence exceeds thresholds.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Sends separate Discord alerts <\/span><span style=\"font-weight: 400;\">for<\/span><span style=\"font-weight: 400;\"> correlation breaks.<\/span><\/li>\n<\/ul>\n<h3><strong>Correlation Alert Criteria<\/strong><b><\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Divergence \u2265<\/span><span style=\"font-weight: 400;\">20<\/span><span style=\"font-weight: 400;\"> percentage points between related markets.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Market A must move \u2265<\/span><span style=\"font-weight: 400;\">10<\/span><span style=\"font-weight: 400;\"> percentage points <\/span><span style=\"font-weight: 400;\">(<\/span><span style=\"font-weight: 400;\">filters noise<\/span><span style=\"font-weight: 400;\">).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Permanent deduplication once notified.<\/span><\/li>\n<\/ul>\n<h3><strong>Pattern Analysis &amp; Historical Accuracy<\/strong><b><\/b><\/h3>\n<p><span style=\"font-weight: 400;\">The patterns module tracks <\/span><span style=\"font-weight: 400;\">long<\/span><span style=\"font-weight: 400;\">-term performance<\/span><span style=\"font-weight: 400;\">:<\/span><b><\/b><span style=\"font-weight: 400;\"><\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Records every spike + eventual market outcome.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Calculates accuracy by spike <\/span><span style=\"font-weight: 400;\">type<\/span> <span style=\"font-weight: 400;\">(<\/span><span style=\"font-weight: 400;\">bid depth vs ask depth vs price momentum<\/span><span style=\"font-weight: 400;\">).<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Identifies most predictive patterns.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Generates weekly accuracy reports.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Can send pattern reports to Discord on schedule<\/span><\/li>\n<\/ul>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_14 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_14 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_30 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h2><strong><span style=\"color: #00ffff;\">\/\/ <\/span>Notification Criteria (Complete Checklist)<\/strong><\/h2>\n<\/div><\/div>\n\n<div class=\"et_pb_text_31 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h3><b>Orderbook Spike Alerts<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">An alert fires when **ALL** conditions met<\/span><span style=\"font-weight: 400;\">:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Sufficient history<\/b><b>:<\/b><span style=\"font-weight: 400;\"> Market has \u2265<\/span><span style=\"font-weight: 400;\">12<\/span><span style=\"font-weight: 400;\"> snapshots <\/span><span style=\"font-weight: 400;\">(<\/span><span style=\"font-weight: 400;\">6<\/span><span style=\"font-weight: 400;\"> hours of data<\/span><span style=\"font-weight: 400;\">)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Spike threshold<\/b><b>:<\/b><span style=\"font-weight: 400;\"> Current depth \u22655x the <\/span><span style=\"font-weight: 400;\">6<\/span><span style=\"font-weight: 400;\">-hour baseline<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Minimum liquidity<\/b><b>:<\/b><span style=\"font-weight: 400;\"> Orderbook depth &gt;$<\/span><span style=\"font-weight: 400;\">2<\/span><span style=\"font-weight: 400;\">,<\/span><span style=\"font-weight: 400;\">000<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Active market<\/b><b>:<\/b><span style=\"font-weight: 400;\"> Price between <\/span><span style=\"font-weight: 400;\">10<\/span><span style=\"font-weight: 400;\">% <\/span><span style=\"font-weight: 400;\">and<\/span> <span style=\"font-weight: 400;\">90<\/span><span style=\"font-weight: 400;\">%<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Signal quality<\/b><b>:<\/b><span style=\"font-weight: 400;\"> Score \u2265<\/span><span style=\"font-weight: 400;\">65<\/span><span style=\"font-weight: 400;\">\/<\/span><span style=\"font-weight: 400;\">100<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Not a duplicate<\/b><b>:<\/b><span style=\"font-weight: 400;\"> Permanent suppression after Discord notification<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Race condition<\/b><b>:<\/b><span style=\"font-weight: 400;\"> No alert <\/span><span style=\"font-weight: 400;\">in<\/span><span style=\"font-weight: 400;\"> past <\/span><span style=\"font-weight: 400;\">5<\/span><span style=\"font-weight: 400;\"> minutes<\/span><\/li>\n<\/ul>\n<h3><b>Price Momentum Alerts<\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Price change<\/b><b>:<\/b><span style=\"font-weight: 400;\"> \u2265<\/span><span style=\"font-weight: 400;\">20<\/span><span style=\"font-weight: 400;\"> percentage points <\/span><span style=\"font-weight: 400;\">from<\/span><span style=\"font-weight: 400;\"> baseline.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Active market<\/b><b>:<\/b><span style=\"font-weight: 400;\"> Baseline price <\/span><span style=\"font-weight: 400;\">10<\/span><span style=\"font-weight: 400;\">%-<\/span><span style=\"font-weight: 400;\">90<\/span><span style=\"font-weight: 400;\">%<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Signal quality<\/b><b>:<\/b><span style=\"font-weight: 400;\"> Score \u2265<\/span><span style=\"font-weight: 400;\">65<\/span><span style=\"font-weight: 400;\">\/<\/span><span style=\"font-weight: 400;\">100<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Same deduplication<\/b><b>:<\/b><span style=\"font-weight: 400;\"> Permanent after notification<\/span><\/li>\n<\/ul>\n<h3><b>Correlation Arbitrage<\/b><\/h3>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Divergence<\/b><b>:<\/b><span style=\"font-weight: 400;\"> \u2265<\/span><span style=\"font-weight: 400;\">20<\/span><span style=\"font-weight: 400;\"> percentage points between related markets.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Movement threshold<\/b><b>:<\/b> <span style=\"font-weight: 400;\">Market A moved \u2265<\/span><span style=\"font-weight: 400;\">10<\/span><span style=\"font-weight: 400;\"> percentage points.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Same deduplication<\/b><b>:<\/b><span> Permanent after notification.<\/span><\/li>\n<\/ul>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_15 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_15 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_32 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h2><strong><span style=\"color: #00ffff;\">\/\/ <\/span><\/strong><b>Project Overview<\/b><\/h2>\n<\/div><\/div>\n\n<div class=\"et_pb_text_33 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h3><strong>Architecture<\/strong><\/h3>\n<\/div><\/div>\n\n<div class=\"et_pb_image_3 et_pb_image et_pb_module et_block_module\"><span class=\"et_pb_image_wrap\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2026\/02\/Flow-chart-pm-monitor-e1770759145439.png\" title=\"Flow chart pm monitor\" width=\"744\" height=\"458\" srcset=\"https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2026\/02\/Flow-chart-pm-monitor-e1770759145439.png 744w, https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2026\/02\/Flow-chart-pm-monitor-e1770759145439-480x270.png 480w\" sizes=\"(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 744px, 100vw\" class=\"wp-image-666\" \/><\/span><\/div>\n\n<div class=\"et_pb_text_34 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h3><strong>Structure<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">polymarket-monitor\/<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u251c\u2500\u2500 collector<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">py \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># Data collection (Gamma + CLOB APIs)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u251c\u2500\u2500 detector<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">py\u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># Spike detection + price momentum + correlations<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u251c\u2500\u2500 notifier<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">py\u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># Discord webhook notifications (rich embeds)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u251c\u2500\u2500 database<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">py\u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># MySQL schema, CRUD operations, cleanup<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u251c\u2500\u2500 config<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">py\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># Environment variable configuration<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u251c\u2500\u2500 indicators<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">py\u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># Statistical indicators (Z-score, RSI, Bollinger, etc.)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u251c\u2500\u2500 analyzer<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">py\u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># AI context analysis (Claude + news search)<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u251c\u2500\u2500 correlator<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">py\u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># Market correlation tracking and divergence<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u251c\u2500\u2500 patterns<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">py\u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># Historical accuracy tracking<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u251c\u2500\u2500 monitor<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">py \u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># System health and status reporting<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u251c\u2500\u2500 setup_cron<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">sh\u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># Linux cron job installer<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u251c\u2500\u2500 deploy<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">ps1 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># Windows-to-server deployment<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u251c\u2500\u2500 dashboard<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">py \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># Flask web dashboard<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u251c\u2500\u2500 requirements<\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">txt \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># Python dependencies<\/span><\/p>\n<p><span style=\"font-weight: 400;\">\u2514\u2500\u2500 <\/span><span style=\"font-weight: 400;\">.<\/span><span style=\"font-weight: 400;\">env\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400; color: #999999;\"># Configuration (DB, Discord, API keys)<\/span><\/p>\n<\/div><\/div>\n\n<div class=\"et_pb_text_35 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h3><strong>Tech Stack<\/strong><\/h3>\n<ul>\n<li>Language = Python 3.12<\/li>\n<li>Database = MySQL 8.0<\/li>\n<li>APIs = Polymarket Gamma + CLOB<\/li>\n<li>AI = Claude Haiku<\/li>\n<li>News Search = Brave Search + DuckDuckGo<\/li>\n<li>Notifications = Discord Webhooks<\/li>\n<li>Scheduling = Linux cron<\/li>\n<li>Dashboard = Flask + Jinja2<span style=\"font-weight: 400;\"><\/span><\/li>\n<\/ul>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_16 et_pb_row et_flex_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_16 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_text_36 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><h2><strong><span style=\"color: #00ffff;\">\/\/ <\/span><\/strong><b>Conclusion<\/b><\/h2>\n<\/div><\/div>\n\n<div class=\"et_pb_text_37 et_pb_text et_pb_bg_layout_light et_pb_module et_block_module\"><div class=\"et_pb_text_inner\"><p><span style=\"font-weight: 400;\">The Polymarket Spike Monitor is live, collecting 108,000+ market snapshots per week, and alerting on significant activity in real-time. It runs hands-free on a server and caught its first real spikes within 4 hours of deployment.<\/span><\/p>\n<p><b>The core insight:<\/b><span style=\"font-weight: 400;\"> In prediction markets, orderbook depth is information. When someone stacks up 10x the normal amount on one side of a market, they usually know something. This tool makes sure you know about it too, before the price moves.<\/span><\/p>\n<h3><b>Performance<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Over a few days of continuous operation:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">100% uptime<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">73% accuracy on bid depth spikes predicting YES outcomes<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">4% false positive rate (96% signal precision)<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Average 8-minute lead time before price movements<\/span><\/li>\n<\/ul>\n<h3><b>Try It Yourself<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Want to build something similar? Checkout the full source code in GitHub:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Python collection scripts with rate limiting examples<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">MySQL schema with time-series indexing<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Spike detection algorithms with configurable thresholds<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Discord rich embed templates<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Claude AI integration for news context<\/span><\/li>\n<\/ul>\n<p>Live dashboard:<a href=\"https:\/\/web3fuel.io\/tools\/polymarket-monitor\" target=\"_blank\" rel=\"noopener\"> web3fuel.io\/tools\/polymarket-monitor<\/a><\/p>\n<p>Source code:<a href=\"https:\/\/github.com\/zzzandy-eth\/web3fuel\" target=\"_blank\" rel=\"noopener\"><span style=\"font-weight: 400;\"> github.com\/zzzandy-eth\/web3fuel<\/span><\/a><span style=\"font-weight: 400;\"><br \/><\/span><\/p>\n<p>Discord:<span style=\"font-weight: 400;\"> <a href=\"https:\/\/discord.gg\/pnF9BxcD\" target=\"_blank\" rel=\"noopener\">Invite Link<\/a><\/span><\/p>\n<p><span style=\"font-weight: 400;\"><b>Questions?<\/b> Reach out using the contact form, or DM on LinkedIn \/ Discord.<\/span><\/p>\n<\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_17 et_pb_row et_block_row\">\n<div class=\"et_pb_column_17 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough\">\n<div class=\"et_pb_divider_0 et_pb_divider et_pb_space et_pb_divider_position_top et_pb_module\"><div class=\"et_pb_divider_internal\"><\/div><\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_row_18 et_pb_row et_block_row preset--group--divi-row--divi-sizing--w5u0x3y1pz\">\n<div class=\"et_pb_column_18 et_pb_column et_pb_column_4_4 et-last-child et_block_column et_pb_css_mix_blend_mode_passthrough\">\n<div class=\"et_pb_team_member_0 et_pb_team_member et_pb_bg_layout_dark et_pb_text_align_left et_pb_module et_flex_module\"><div class=\"et_pb_team_member_image et-waypoint et_pb_animation_off\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2025\/06\/avatar.png\" alt=\"Alex Grant\" width=\"200\" height=\"200\" srcset=\"https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2025\/06\/avatar.png 200w, https:\/\/web3fuel.io\/article\/wp-content\/uploads\/2025\/06\/avatar-150x150.png 150w\" sizes=\"(max-width: 200px) 100vw, 200px\" class=\"wp-image-68\" \/><\/div><div class=\"et_pb_team_member_description\"><h4 class=\"et_pb_module_header\">Alex Grant<\/h4><p class=\"et_pb_member_position\">Blockchain Infrastructure & Security Analyst<\/p><div class=\"et_pb_team_member_description_content\"><p class=\"whitespace-normal break-words\"><span style=\"font-weight: 400;\">Hi, I'm Alex, founder of Web3Fuel. My goal is to simplify complex blockchain concepts and provide fuel for the growth of Web3.<\/span><\/p>\n<p class=\"whitespace-normal break-words\"><span style=\"font-weight: 400;\"><b>Currently seeking:<\/b> Technical Writer, Content Strategist, and Developer Relations roles at blockchain protocols and infrastructure companies.<\/span><\/p>\n<\/div><\/div><\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Polymarket tracks 300+ active prediction markets at any time. When someone suddenly dumps $250K into a market hours before a major announcement, that&#8217;s not random, it&#8217;s a signal.<\/p>\n","protected":false},"author":1,"featured_media":720,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[28,24],"tags":[9,10,27],"class_list":["post-652","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-trading","category-tutorial","tag-blockchain","tag-cryptocurrency","tag-tool-development"],"_links":{"self":[{"href":"https:\/\/web3fuel.io\/article\/wp-json\/wp\/v2\/posts\/652","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web3fuel.io\/article\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/web3fuel.io\/article\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/web3fuel.io\/article\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/web3fuel.io\/article\/wp-json\/wp\/v2\/comments?post=652"}],"version-history":[{"count":27,"href":"https:\/\/web3fuel.io\/article\/wp-json\/wp\/v2\/posts\/652\/revisions"}],"predecessor-version":[{"id":721,"href":"https:\/\/web3fuel.io\/article\/wp-json\/wp\/v2\/posts\/652\/revisions\/721"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/web3fuel.io\/article\/wp-json\/wp\/v2\/media\/720"}],"wp:attachment":[{"href":"https:\/\/web3fuel.io\/article\/wp-json\/wp\/v2\/media?parent=652"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/web3fuel.io\/article\/wp-json\/wp\/v2\/categories?post=652"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/web3fuel.io\/article\/wp-json\/wp\/v2\/tags?post=652"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}