Polymarket Alpha Signals: Odds Moves Live
Pricing
from $15.00 / 1,000 price move signals
Polymarket Alpha Signals: Odds Moves Live
Track Polymarket odds in real time and get only the markets that actually moved. Pay per signal, not per row. A quiet run costs you nothing.
Pricing
from $15.00 / 1,000 price move signals
Rating
0.0
(0)
Developer
Dmitrii Lominskii
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
This Actor watches live Polymarket markets and returns only the ones where something happened: a price move past your thresholds, a spike in 24 hour volume, or a brand new market. Every run compares the current state against what it saw on the previous run and writes one row per signal. You are charged per signal, so a run that finds nothing costs nothing beyond the Actor start fee. Put it on a schedule and it becomes a continuous monitor.
What you get
Three signal types, each a separate row in the dataset:
- Price move: the price changed by at least 0.03 points and at least 15 percent within your comparison window. Both thresholds must be met.
- Volume spike: 24 hour volume grew by at least 25 percent and at least $5,000. Both thresholds must be met.
- New market: a market appeared since the previous run. Off by default, see Limits below.
Every row carries the current and previous price, the change in points and in percent, current and previous volume, liquidity, best bid, best ask, spread, the market question, its tags, event title and a link to the market on Polymarket.
How it works
The Actor keeps a short price and volume history in a named key-value store on your account. Each run reads that history, compares it against live data, and writes the history back.
The first run has nothing to compare against, so it records a baseline and emits no signals. This is expected. The second run is the first one that can produce results.
When a run produces no signals, it writes a single free run_summary row
instead of leaving the dataset empty. That row tells you how many markets were
checked, how many candidates were suppressed, and why nothing fired. It is not
charged. Filter on signal_type if you only want real signals.
Set Comparison window, minutes close to how often you schedule the run. If
you run hourly, use 60. If you run every 15 minutes, use 15. The Actor looks
for the stored point closest to that window and reports the age it actually
used in actual_window_minutes, which is almost always a few minutes off the
window you asked for. That is the real interval the comparison was made over.
Quick start
- Leave the defaults and press Start. This run records a baseline.
- Wait roughly as long as your comparison window, then press Start again. This run returns signals.
- When the output looks right, create a schedule with the same input and the same interval.
Results land in the dataset and can be sent onward through the Integrations tab: webhooks, Slack, Zapier, Make, n8n and the rest.
What a run costs
You pay per signal that reaches the dataset. Suppressed candidates, filtered
markets and run_summary rows are not charged.
Max signals per run is the ceiling, 5 by default. Signals are ranked by strength first, so the cap keeps the strongest ones. That makes the worst case of any single run exactly:
5 x $0.015 = $0.075
On an hourly schedule that is at most $1.80 per day. Most runs return fewer than five signals, so the real figure is lower. Raise the cap for full coverage, lower it to tighten the ceiling.
The Actor start fee is $0.00005 at 512 MB of memory, and one such fee per extra gigabyte above 1 GB.
Tuning the output
Too many signals: raise Minimum price move, percent, raise Minimum 24 hour volume to work on a smaller and more liquid universe, or lower Max signals per run.
Too few signals: lower the move thresholds, lower Minimum liquidity and Minimum 24 hour volume, or raise Max markets per run.
Only the markets you care about: fill Market slugs or Condition IDs to watch a fixed list, or use Include tags to keep a theme such as politics or crypto. In watchlist mode the liquidity and volume filters do not apply, since you named the markets yourself.
Limits worth knowing before you start
Schedule interval and comparison window belong together. If the interval is much longer than the window, the Actor may have no usable history point and return nothing. It accepts points between a quarter and four times the window, so a missed run or a few minutes of drift will not break the chain.
Above 180 minutes the Actor falls back to Polymarket's own 24 hour price
change until it has collected enough history of its own. In those rows
window_source is gamma_1d and actual_window_minutes is 1440, so the
comparison really is against 24 hours ago, not against the window you set.
Volume spikes have no such fallback and simply will not fire until history
builds up.
The very first run can still find price moves. With no history yet, the
Actor checks Polymarket's own 1 hour price change and can emit price_move
signals from it, with window_source set to gamma_1h and
actual_window_minutes at 60. Volume spikes and new market signals still
need a second run, there is no such field to fall back on for those.
New market signals are off by default. In a broad scan they mostly surface sports sub-markets with no trading yet, which is noise you would be paying for. Turn them on together with a watchlist or a tag filter.
Markets near either end of the price scale are skipped. By default a signal is suppressed when the old or the new price sits outside 0.05 to 0.95, because a market that is already settling produces large percentage moves that mean nothing. Set Minimum price for a signal to 0 if you want to see those collapses.
Watching by slug is more reliable than by condition ID. A few markets cannot be looked up by condition ID directly. The Actor logs them and carries on with the rest.
Auto-generated recurring markets are excluded, such as the five-minute crypto up or down contracts Polymarket creates around the clock. Turn them back on with the checkbox if you want them.
Output fields
| Field | Meaning |
|---|---|
signal_type | price_move, volume_spike, new_market, or run_summary for a run with no signals |
signal_strength | How many times over its threshold the signal went. Used for ranking |
note | On a run_summary row, why the run produced no signals |
markets_checked, candidates_suppressed | On a run_summary row, how many markets passed the filters and how many candidates were suppressed |
price_now, price_then | Price at this run and at the comparison point, on the 0 to 1 scale |
price_change_points, price_change_pct | Absolute and relative change |
volume_24h_now, volume_24h_then, volume_change_pct | Same for 24 hour volume |
window_minutes, actual_window_minutes | Requested window and the age of the point actually used |
window_source | history for a stored point, gamma_1d for the long window fallback, gamma_1h for the first-run fallback |
liquidity, best_bid, best_ask, spread | Order book context at the time of the signal |
question, slug, outcome_yes, end_date | Market identity |
event_title, event_slug, tags, market_url | Event context and link |
condition_id | Stable market identifier, use it for a watchlist |
detected_at_iso, created_at_iso, age_hours | When the signal fired and how old the market is |
Running several monitors
All runs on your account share one history store by default, which is what you want: change a threshold and the history stays. If you run two monitors with different watchlists and want their histories kept apart, give each a different State key.