Game-Day Fire Sale Watch
Day-of polling for last-hour panic-drop listings on the secondary ticket market. Iterates a list of upcoming events; fires per-event when a steep discount appears in the final hours before tip-off.
What it does
The monitor's for_each: walks a literal list of event IDs. Per event, on
each fire:
- The check calls a ticket-pricing endpoint for the cheapest 5 listings.
- The
when:arm tests TWO conditions simultaneously: -hoursToEvent <= 6— only fire in the final-hours window. -discountPct >= 40— only fire when the price is significantly below today's median for the event (i.e. a real fire-sale, not just a baseline cheap listing). - If both pass, a per-event notification fires with section/row/URL. Otherwise nothing fires.
This is the "opportunistic late buy" pattern. Outside the 6-hour window, the monitor stays quiet. Inside the window but with normal pricing, also quiet. The notification only fires when something genuinely unusual happens: a seller slashing to recoup anything rather than eat the ticket.
Data-source setup — read this first
The data-source story is identical to event-price-watch.
You wire one scraper / API endpoint that returns the expected JSON shape;
both monitors use it.
This monitor additionally requires the scraper to publish a discountPct
field — the percentage discount of the cheapest current listing vs. the
event's typical/median price (either today's intraday median, or the price
ladder observed earlier this week). Most marketplace scrapers can compute
this with one extra query.
Expected published bindings:
| Binding | Expected value |
|---|---|
{{check.lowestPrice}} |
Cheapest current listing (number). |
{{check.eventName}} |
Display name of the event. |
{{check.section}} |
Section identifier of the cheapest listing. |
{{check.row}} |
Row within that section. |
{{check.hoursToEvent}} |
Hours from now to tip-off (number). |
{{check.discountPct}} |
Percent discount of lowestPrice vs. typical (number, e.g. 42 means 42% off). |
{{check.listingUrl}} |
Direct URL to the listing on the marketplace. |
Edit before installing
In monitor.yaml:
for_each.items— replace with your event IDs. The monitor only fires inside the 6-hour window for each one, so listing dozens of events is fine; almost all of them will be inert most of the time.for_each.as— loop variable name; defaulteventId. If you rename it, update the{{eventId}}reference in the check URL.when[0].condition— adjust thresholds.hoursToEvent <= 6anddiscountPct >= 40are aggressive defaults; loosen to<= 12and>= 25for more sensitive alerting.
Schedule guidance:
- Default cadence: every 5-10 minutes. Outside the 6-hour window the monitor is essentially a no-op, so high cadence is cheap.
- For an even lower-noise version, schedule the monitor to fire ONLY during the relevant time window (e.g. 5pm-10pm if your events tip off at 7-9pm).
Bindings used per iteration
{{eventId}}— current event id from the list.{{check.*}}— see "Data-source setup" above.
Tools used
http— core InTouch HTTP task type.
Pattern showcase
Combines literal for_each iteration + compound boolean condition.
The condition uses && to require BOTH a time-window match AND a price
threshold — neither alone is enough. This is the canonical "two-factor
alert" shape that keeps notifications honest.
Related monitors
event-price-watch— far-in-advance hourly threshold check on ONE event.good-seat-ai-watch— AI judges value across current listings.