Monitor any webpage for changes — via API.
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 "the page changed" emails. You want a webhook when a specific value crosses a threshold you care about — and when the change is visual, a pixel diff scoped to the region you chose.
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.
Whole-page noise
"The page changed" alerts trigger on cookie banners, ad rotations, and timestamps. No way to scope the check or gate it on a rule, so you stop reading them.
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.
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.
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 backoff and a dead-letter queue.
Turn any page into typed fields.
Six ways to pull the exact value you care about. Output is always structured — never raw HTML.
CSS selectors
Target any element by class, id, or attribute path - the fastest way to pull a value.
Read the guide →MethodXPath
Walk the DOM tree for elements CSS can’t reach, like “the price next to In stock”.
Read the guide →MethodJSONPath
Pull a single field straight out of a JSON API response without parsing the payload.
Read the guide →MethodRegex
Match a pattern inside raw text or HTML when the markup is inconsistent.
Read the guide →MethodFull-page hash
Hash the whole rendered page to catch any change at all - no selector required.
Read the guide →Lead storyAI extraction
Describe the field in plain English and let the LLM find it when selectors break.
Read the guide →Selectors for structured pages, AI for the ones that break them — and a static fetch that escalates to a headless browser on its own. Browse all extraction guides →
Alert on meaningful state, not raw change.
The reason screenshot-only tools spam you is they fire on any change. Verid only fires when the rule you wrote returns true. Combine them with AND / OR.
- Price dropCompetitor price falls 5%+
- Stock returnOut-of-stock becomes available
- Version bumpA semver field changes
- CompositeAND / OR combinations
{
"type": "composite",
"operator": "AND",
"conditions": [
{ "type": "field_decreases_by_percent",
"field": "price", "threshold": 10 },
{ "type": "field_equals",
"field": "availability",
"value": "in_stock" }
]
}
// → fires only on price drops for in-stock itemsGet the alert where your team already works.
When a predicate fires, Verid pushes the before/after diff to the channel you choose - signed, retried, and never silently dropped.
- HMAC-signed webhooks your endpoint can verify.
- 6 retries with exponential backoff, then a dead-letter queue.
- Before / after diff payload, not just "something changed".
Signed webhooks
HMAC-signed POST to your endpoint. 6 retries, exponential backoff, dead-letter queue.
Slack
Drop the before/after diff into any channel the moment a predicate fires.
Discord
Same field-level alert, routed to a Discord webhook for your community or team.
A plain, readable summary of what changed - no dashboard login required.
{
"monitor": "React latest release",
"fired": "field_changes",
"field": "version",
"before": "19.0.0",
"after": "19.1.0",
"at": "2026-06-25T09:31:00Z"
}Create a monitor in seconds.
Full REST API with an 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" }]
}'Everything else the loop needs,
already wired.
Fetching, state, signing, retries, and templates the infrastructure you'd otherwise build and babysit yourself.
Three-layer fetching
Static fetch → headless browser → residential proxy. Bot-protected and JS-heavy sites escalate automatically.
REST API + Node SDK
Full REST API with an OpenAPI 3.1 spec and an official Node.js SDK. Works with any HTTP client.
Field-level diff history
Every run is compared to the last. See exactly which fields changed and their before / after values.
HMAC-signed webhooks
Each webhook is signed with your monitor’s secret so your endpoint can verify it really came from Verid.
Retries + dead-letter queue
6 automatic retries with exponential backoff. Anything that still fails lands in a dead-letter queue, never silently dropped.
Ready-made templates
Start in seconds with templates for GitHub releases, npm packages, CoinGecko prices, and more.
The same job, three toolchains.
Verid is the only one that closes the loop instead of handing you the hard part.
What people monitor with Verid.
Real workflows the community runs on a schedule each one a copy-paste starting point.
Competitive pricing
Track competitor product pages with CSS extraction and trigger repricing the moment prices change.
Explore use case →SERP monitoring
Watch Google ranks, AI Overviews, and featured snippets for the keywords you care about.
Explore use case →Dependency releases
Watch GitHub, npm, and PyPI releases with JSONPath. Get notified before CI breaks.
Explore use case →Regulatory filings
Monitor government portals and official registers for new filings with full-page hashing.
Explore use case →Inventory restocks
Watch product pages for "In Stock" status changes using CSS selectors and regex matching.
Explore use case →API contract drift
Poll upstream APIs every 5 minutes and catch breaking schema changes before production does.
Explore use case →Start free. Upgrade when you outgrow it.
A permanent free plan with a real monthly budget - no credit card, no time limit. Paid plans add frequency, monitors, history, and proxy bandwidth.
Learn the patterns.
Guides and deep dives on extracting, diffing, and alerting on web data.
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.