State monitoring, not screenshot diffing

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.

6
Extractor Methods
9
Predicate Types
Retry w/ Backoff
Monitorslive
React latest release
changed
api.github.com/repos/facebook/react/releases/latest·$.tag_name
v18.2.0v19.0.0
checked 2 min ago · every 60m
ETH / USD price
active
api.coingecko.com/api/v3/simple/price·$.ethereum.usd
$3,241.88
checked 8 min ago · every 5m
npm: typescript
active
registry.npmjs.org/typescript/latest·$.version
5.4.5
checked 14 min ago · every 30m
Delivery feedlive
14:02:11React latest releasev18.2.0v19.0.0200
13:55:44ETH / USD price3,198.203,241.88200
13:41:09npm: typescript5.4.45.4.5200
The problem

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.

DIY scrapers

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.

No-code monitors

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.

Scraping APIs

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.

REST API

Create a monitor in seconds

Full REST API with OpenAPI 3.1 spec. Works with any HTTP client.

POST /v1/monitors
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" }]
  }'
The loop

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.

01

Fetch

Static fetch first. Auto-fallback to a headless browser, then residential proxy if the site fights back.

02

Extract

CSS, XPath, JSONPath, regex, full-page hash, or LLM prompt. Output is always typed fields.

03

Diff

Field-level comparison against the last successful run. Returns exactly which fields changed and their before/after values.

04

Predicate

Did price drop 10%? Did stock return? Did the version match a regex? Quiet unless your rule fires.

05

Deliver

HMAC-signed webhook, Slack, Discord, or email. 6 retries with exponential backoff and a dead-letter queue.

Predicates

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.

Price drop

Trigger when a competitor price falls by 5% or more.

{
  "type": "field_decreases_by_percent",
  "field": "price",
  "threshold": 5
}
Stock return

Fire when an out-of-stock product becomes available again.

{
  "type": "field_matches_regex",
  "field": "availability",
  "pattern": "^In Stock$"
}
Version bump

Get a hook the moment a specific semver field changes.

{
  "type": "field_changes",
  "field": "version"
}
Composite rule

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.

Capability
DIY scraper
Screenshot tools
Verid
Structured field extraction
Yes (you write it)
No pixel diffs only
Yes 6 methods
Predicate-based alerting
You write it
No
8 predicates + composites
Field-level diff history
You store it
Image diffs only
Per-field before / after
Bot / JS-heavy sites
You add a headless browser + proxies
Limited
Auto-escalates static → browser → proxy
Signed webhook delivery
You write retries
Email / Slack only
HMAC + 6× backoff + DLQ
Time to first alert
Days
Minutes (then noise)
Minutes (and quiet)

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.

Start monitoring for free

5 monitors, no credit card, no time limit.