Diff predicates
A predicate decides when a monitor actually fires. After Verid extracts your fields and compares them to the previous run, the predicate is evaluated against the diff — if it returns true, deliveries go out. If it returns false, the run is recorded but nothing is delivered.
This is the difference between "the page changed" and "the price dropped by more than 5%".
| Type | Fires when | Anchor |
|---|---|---|
any_field_changes | Any tracked field changed | #any_field_changes |
field_changes | A specific field changed | #field_changes |
field_increases_by_percent | Numeric field went up by ≥ N% | #field_increases_by_percent |
field_decreases_by_percent | Numeric field dropped by ≥ N% | #field_decreases_by_percent |
field_increases_by_absolute | Numeric field went up by ≥ N | #field_increases_by_absolute |
field_decreases_by_absolute | Numeric field dropped by ≥ N | #field_decreases_by_absolute |
field_matches_regex | New value matches a regex | #field_matches_regex |
field_equals | Field equals a literal value | #field_equals |
composite | AND / OR of other predicates | #composite |
All predicates reference fields by the name you gave them in extract_config.fields. See Extraction methods for how fields are defined.
any_field_changes
{ "type": "any_field_changes" }Fires if any tracked field differs from the previous run. The simplest predicate — pair it with method: "full_page" for a "tell me when anything changes" monitor.
field_changes
{ "type": "field_changes", "field": "tag_name" }Fires only when tag_name differs. Other fields can shift without firing. Best for "new release", "status text changed", and similar exact-match-irrelevant cases.
field_increases_by_percent
{ "type": "field_increases_by_percent", "field": "price", "threshold": 5 }Fires when price is at least 5% higher than the previous run. The field value must be numeric (or a numeric string Verid can parse). Threshold is a positive number — 5 means 5%, not 0.05.
field_decreases_by_percent
{ "type": "field_decreases_by_percent", "field": "price", "threshold": 10 }Mirror of the above — fires on a ≥ 10% drop. Common pattern for price-drop alerts and stock-dip notifications.
field_increases_by_absolute
{ "type": "field_increases_by_absolute", "field": "url_count", "threshold": 1 }Fires when the field increases by at least the absolute amount. With threshold: 1 you get a "one or more new entries" trigger — useful for sitemap, RSS, or comment-count monitors.
field_decreases_by_absolute
{ "type": "field_decreases_by_absolute", "field": "in_stock", "threshold": 5 }Same idea, downward. Useful for inventory drops, follower-count loss, etc.
field_matches_regex
{ "type": "field_matches_regex", "field": "status", "pattern": "^(error|failed|degraded)" }Fires when the new value of status matches the regex. JavaScript regex syntax. Escape backslashes in JSON (\\d+, not \d+).
field_equals
{ "type": "field_equals", "field": "availability", "value": "In Stock" }Fires when the new value equals the literal value exactly. value can be a string, number, or boolean. Case-sensitive for strings.
composite (AND / OR)
{
"type": "composite",
"operator": "AND",
"conditions": [
{ "type": "field_changes", "field": "tag_name" },
{ "type": "field_equals", "field": "prerelease", "value": false }
]
}Combine multiple predicates with AND or OR. Conditions can themselves be composite — nest as deep as you need. Common pattern: "tag_name changed AND prerelease is false" to skip beta releases, or "price dropped by 10% OR went out of stock" to capture both signals in one monitor.
Tips
- Numeric parsing: For
*_by_percentand*_by_absolutepredicates, Verid attempts to parse strings like"$1,299.00"or"+5.4%"as numbers. Strip currency symbols in your extractor when possible — it's less surprising. - First-run behaviour: The first run of a monitor never fires (there's nothing to compare against). The baseline is established silently.
- Boolean fields: With
field_equals, JSON booleans (true/false) match exactly. If your extractor returns the string"true", that's not equal to the booleantrue.
Related
- Extraction methods — Define the fields predicates reference
- Webhooks — What gets delivered when a predicate fires
- Recipes — Predicates in worked examples