Know when data
changes. Not when
a pixel moves.
Verid extracts the exact field you care about price, version, stock status then fires a webhook only when a predicate you define is true. Structured. Quiet by default.
Every existing approach optimizes the wrong layer.
You don't want raw HTML. You don't want pixel diffs. You want to know when a specific value crosses a threshold you care about and you want that as a webhook, not a screenshot.
Fragile selectors, forever
You write the fetch, the parser, the scheduler, the diff, the retry, the alert. Then the site changes a class name and you maintain it on a Sunday.
Screenshot noise
"The page changed" alerts trigger on cookie banners, ad rotations, and timestamps. Operationally useless when you need to act on a specific value.
Half the loop
They return structured data, but you still wire up scheduling, state, diffing, and predicates yourself. The annoying part is exactly the part they skip.
Verid is the missing middle: structured extraction, durable state, field-level diff, and predicate-driven delivery in one loop. One API call away.
Create a monitor in seconds
Full REST API with OpenAPI 3.1 spec. Works with any HTTP client.
curl -X POST https://api.verid.dev/v1/monitors \
-H "Authorization: Bearer vrd_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "React latest release",
"url": "https://api.github.com/repos/facebook/react/releases/latest",
"schedule_interval_seconds": 3600,
"extract_config": {
"method": "json_path",
"fields": { "version": "$.tag_name" }
},
"diff_predicate": { "type": "field_changes", "field": "version" },
"deliveries": [{ "type": "webhook", "url": "https://your-app.com/hooks" }]
}'One pipeline. Five stages. Zero glue code.
Every monitor runs the same loop on a schedule you set. You write the config we run the infrastructure.
Fetch
Static fetch first. Auto-fallback to a headless browser, then residential proxy if the site fights back.
Extract
CSS, XPath, JSONPath, regex, full-page hash, or LLM prompt. Output is always typed fields.
Diff
Field-level comparison against the last successful run. Returns exactly which fields changed and their before/after values.
Predicate
Did price drop 10%? Did stock return? Did the version match a regex? Quiet unless your rule fires.
Deliver
HMAC-signed webhook, Slack, Discord, or email. 6 retries with exponential backoff and a dead-letter queue.
Built for developers
Everything you need to monitor the web programmatically.
Six extraction methods
CSS selectors, XPath, JSONPath, regex, full-page hashing, and LLM-powered extraction using natural language.
Smart predicates
Fire only when prices drop by 5%, specific fields change, values match a pattern, or complex AND/OR conditions are met.
Reliable delivery
Webhooks (HMAC-signed), Slack, Discord, and email with 6 automatic retries and exponential backoff.
Three-layer fetching
Static fetch → headless browser → residential proxy network. Bot-protected sites handled automatically.
REST API + SDK
Full REST API with OpenAPI 3.1 spec and official Node.js SDK. Integrate in minutes.
Ready-made templates
Start in seconds with templates for GitHub releases, npm packages, CoinGecko prices, and more.
Alert on meaningful state, not raw change.
The reason screenshot diff tools spam you is they fire on any byte change. Verid only fires when the rule you wrote returns true. Combine them with AND / OR.
Trigger when a competitor price falls by 5% or more.
{
"type": "field_decreases_by_percent",
"field": "price",
"threshold": 5
}Fire when an out-of-stock product becomes available again.
{
"type": "field_matches_regex",
"field": "availability",
"pattern": "^In Stock$"
}Get a hook the moment a specific semver field changes.
{
"type": "field_changes",
"field": "version"
}Combine two predicates only price drops on in-stock items count.
{
"type": "composite",
"operator": "AND",
"conditions": [
{ "type": "field_decreases_by_percent",
"field": "price", "threshold": 10 },
{ "type": "field_equals",
"field": "availability", "value": "in_stock" }
]
}What people monitor
Real use cases from the Verid community.
Competitive pricing
Track competitor product pages with CSS extraction and trigger repricing workflows the moment prices change.
SERP monitoring
Watch Google ranks, AI Overviews, and featured snippets for the keywords you care about - alerts the moment the page shifts.
Dependency releases
Watch GitHub, npm, and PyPI releases with JSONPath extraction. Get notified before your CI pipeline breaks.
Regulatory filings
Monitor government portals, regulatory bodies, and official registers for new filings using full-page hash detection.
Inventory restocks
Watch product pages for "In Stock" status changes using CSS selectors and regex matching.
API contract drift
Poll upstream APIs on a 5-minute interval and catch breaking response schema changes before they hit production.
Data pipeline triggers
Fire ETL jobs only when a data source actually updates. No more polling empty pages.
How Verid compares
The same job done with three different toolchains. Verid is the only one that closes the loop.
Frequent questions
Short answers to what people ask before they sign up.
Does Verid handle JavaScript-rendered pages?
Yes. Static fetch runs first; if extraction returns empty fields, the job automatically retries with a headless browser. Bot-protected sites fall through to a residential proxy.
What happens when a site changes its HTML?
If your CSS or XPath selector breaks, the LLM extractor is a fallback you can switch to with a config change describe the field in natural language and re-run. No code deploy.
How is this different from Browserless, Apify, or ScrapingBee?
Those return HTML. You still have to schedule, diff, store state, and define alert rules yourself. Verid is the whole loop in one API call you write the predicate, we run the rest.
How do you avoid alert noise on dynamic pages?
Predicates. Verid only fires deliveries when the rule you defined returns true price dropped 10%, version field changed, stock string matches a regex. Other byte-level changes are ignored.
Is the webhook signed?
Yes. Every webhook is signed with an HMAC using your monitor’s secret. We retry up to 6 times with exponential backoff and dead-letter anything that still fails.