Visual regression for the AI coding era

Catch UI regressions on
every preview URL.

Point SnapDiff at your Vercel preview, staging URL, or any two pages — get a pixel diff in seconds. Plus an MCP server so Claude Code, Cursor, and Windsurf can verify their own UI changes before opening a PR.

Start Free → See it diff a live PR →
curl — snapdiff api
$ curl -X POST https://api.snapdiff.ai/v1/diff \
  -H "X-API-Key: sd_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "before": "https://myapp.com",
    "after": "https://staging.myapp.com",
    "threshold": 0.1
  }'
Response — 200 OK • 4.2s
{
  "match": false,
  "diff_percentage": 3.42,
  "diff_pixel_count": 12847,
  "diff_image_url": "https://cdn.example.com/...",
  "changed_regions": [{ "label": "region_1", ... }],
  "duration_ms": 4210
}

How visual regression testing works with SnapDiff

Three steps. Two minutes. No SDK, no CI/CD, no onboarding call.

1

Get an API Key

Sign up and get your sd_live_ key instantly. No credit card required on the free plan.

2

Point at a preview URL

Vercel, Netlify, Cloudflare Pages, your staging box, or any HTTPS URL. SnapDiff captures it, stores a baseline, and diffs every subsequent change. No tests to write.

3

Get the diff

Receive diff percentage, highlighted diff image, and bounding boxes of every changed region.

From API calls to a full regression testing platform

Baselines, builds, and PR checks. The complete visual regression workflow, accessible from any CI runner.

1

Create a project

Group related pages under one project. Each project tracks baselines per branch.

POST /v1/projects
2

Run builds from CI

Drop our GitHub Action into your workflow. Each PR triggers a build that diffs your pages against stored baselines — it finds your Vercel preview URL automatically.

corralimited/snapdiff-action@v1
3

Review & approve

Intentional changes? Approve them and baselines update. Regressions? Reject and block the merge. Full PR status integration.

POST /v1/projects/:id/builds/:bid/approve
.github/workflows/visual-test.yml
name: Visual Regression Test
on: pull_request
 
jobs:
  visual-test:
    runs-on: ubuntu-latest
    steps:
      - uses: corralimited/snapdiff-action@v1
        with:
          api-key: ${{ secrets.SNAPDIFF_API_KEY }}
          project: my-site
          pages: |
            homepage=https://staging.myapp.com/
            pricing=https://staging.myapp.com/pricing
On your PR
SnapDiff Visual Test — 2 of 5 pages changed
Review in dashboard →

Visual testing features built for developers

Everything you need to compare pages visually. Nothing you don't.

POST /v1/diff

Send two URLs, get back a diff percentage + highlighted diff image. No test suite, no CI/CD pipeline. One HTTP request.

POST /v1/watch

Monitor any URL on a cron schedule. Get webhooks when it changes visually beyond your threshold. Set-and-forget.

MCP Server

AI coding agents (Claude Code, Cursor, Windsurf) can verify UI changes without opening a browser. One tool call replaces a manual review pass. See how it catches UI drift →

Flat-Rate Pricing

Predictable monthly plans from $19/mo. No per-screenshot billing, no annual contracts, no sales calls. Self-serve from day one.

Cookie & Ad Blocking

Auto-hides 40+ cookie consent banners, 20+ chat widgets, and blocks 30+ ad/tracker domains. Clean screenshots every time.

Pixel-Perfect Comparison

Powered by pixelmatch with antialiasing detection, configurable thresholds, ignore regions, and CSS selector masking.

Try a live screenshot diff

See SnapDiff catch real changes between two pages. No signup required.

POST /v1/diff
Quick demos:
This demo compares two versions of a SaaS landing page with 6 deliberate changes: headline ("Launch" → "Ship"), CTA button color & text, price increase ($29 → $39), new "Popular" badge, and a different testimonial.
Diff
Pixels Changed
Duration
Diff overlay showing changed regions highlighted in red
Before screenshot
After screenshot
Before
After After
Before

        

Visual regression testing pricing, flat-rate

Diffs are the product. Screenshots are just infrastructure.

Free

Evaluate the API

$0/mo
  • 200 diffs / month
  • 2,000 screenshots / month
  • 0 watchers
  • 10 req/min
Get Started

Dev

Solo developers

$19/mo
  • 1,000 diffs / month
  • 5,000 screenshots / month
  • 3 watchers
  • 30 req/min
  • MCP server access
Start Free Trial

Team

Multiple projects

$119/mo
  • 20,000 diffs / month
  • 60,000 screenshots / month
  • 50 watchers
  • 300 req/min
  • MCP server access
Start Free Trial

Scale

Agencies & platforms

$299/mo
  • 100,000 diffs / month
  • 300,000 screenshots / month
  • 200 watchers
  • 1,000 req/min
  • MCP server access
Contact Sales

Overage: $0.01/diff, $0.002/screenshot beyond included. Diff screenshots don't count against your screenshot quota.

Common questions

What is visual regression testing?

It catches unintended UI changes by comparing screenshots — a known-good baseline against the current state of the page. Instead of asserting on DOM structure, it compares rendered pixels, which is the only layer where CSS cascade bugs, layout shifts, and broken styles actually show up. SnapDiff does it over HTTP: send two URLs (or a URL and a stored baseline) and get back a diff percentage, a highlighted diff image, and bounding boxes around every changed region.

Does SnapDiff work with AI coding agents like Claude Code and Cursor?

Yes — that's a core use case. The MCP server gives Claude Code, Cursor, Windsurf, and any other MCP client a snapdiff_verify_ui_change tool, so the agent can check its own UI changes against a baseline before opening a PR. Changed pixels get compared against the agent's stated intent, and the agent gets a verdict it can act on. Full write-up in Catching UI Drift From AI Coding Agents.

Do I need a test suite or CI pipeline to use SnapDiff?

No. The minimal setup is one POST /v1/diff request with two URLs. When you want diffs on every pull request, drop the GitHub Action into a workflow — it finds your Vercel preview URL automatically from GitHub's deployment statuses. The only secret you need is your SnapDiff API key.

How does SnapDiff handle cookie banners, ads, and dynamic content?

The stabilization layer auto-hides 40+ cookie consent banners and 20+ chat widgets and blocks 30+ ad and tracker domains before capturing. For content that's legitimately dynamic — dates, live counters, A/B slots — pass ignore_selectors to mask those elements out of the comparison entirely.

What's the difference between a diff and a screenshot in the plans?

A screenshot is one capture of one URL. A diff is the comparison — two captures plus the pixel analysis. Plans meter both, and diff images don't count against your screenshot quota. Past your plan's included volume, overage is $0.01 per diff and $0.002 per screenshot.

Can SnapDiff test pages behind a login or Vercel Deployment Protection?

Protected preview URLs work by passing headers with the capture — Vercel's protection-bypass header, Cloudflare Access credentials, or basic auth — via the GitHub Action's extra-headers input. For real login flows, the Playwright reporter captures in your own CI runner and uploads the PNGs, so SnapDiff never needs your credentials.

Is there a free plan?

Yes — 200 diffs and 2,000 screenshots a month, no credit card required, with full API and MCP server access included. Paid plans start at $19/month and add watchers and higher limits.

How is SnapDiff different from other visual testing tools?

Shape and pricing. SnapDiff points at URLs you already have — preview deployments, staging, a deployed Storybook — instead of instrumenting your build, and every plan is a flat monthly rate instead of a per-snapshot meter. It also speaks MCP, so AI coding agents can run visual verifications themselves.

From the blog

Setup guides for the three most common SnapDiff workflows.

Catching UI Drift From AI Coding Agents

Claude Code, Cursor, and Windsurf check their work with tests — nothing that renders a pixel. Give them a verification loop over MCP.

Visual Regression Testing on Vercel Previews

One workflow file, one secret. Diff every PR's preview deployment and block merges until someone approves the change.

Storybook Visual Regression Testing

Loop over index.json with a Playwright reporter and diff every story on every PR — no per-snapshot meter.

Start comparing in 2 minutes

Get an API key, make one POST request, see the diff.
No test suite. No CI/CD. No onboarding call.