$151,308a year less than Percy.

For 300 stories at 3 viewports and 400 builds a month, 360,000 screenshots.

Percy sends your DOM to BrowserStack and renders it again at every browser and width. stateofpixel reviews the screenshots from your own test run, and bills for storage, not screenshots.

Start free with GitHubSee the switch

Facts about Percy checked on 27 September 2026, with 6 sources.

A month of visual tests

300 stories, 3 viewports, 400 builds, 360,000 screenshots

  • stateofpixelFree, 5.5 GB stored$0
  • PercyDesktop 25k $549 + 335,000 extra at $36 per 1,000$12,609
Price it for your suite

One build, step by step.

300 stories at 3 viewports, run through Percy and through stateofpixel.
One build
One buildOne month

Percy

  1. 1Your tests capture the DOM
  2. 2The SDK uploads the DOM and assets
  3. 3Percy renders each browser and width
  4. 4Percy compares and sets the check
Billed per screenshot900countedEach screenshot in each build

stateofpixel

  1. 1Your tests take screenshots900 screenshots
  2. 2The CLI hashes and compares them on the runner900 hashes
  3. 3Only images we have not seen upload45 changed
  4. 4The review page and the GitHub check
Billed per GB stored0counted45 changed screenshots and their diffs stored

What changes when you switch.

The same pull request, reviewed with less in the way.
01What you test is what you reviewPercy renders your DOM a second time, outside your test run. We compare the pixels your own browser produced.
02No login to set up twicePercy loads your assets again when it renders, so pages behind a login can need extra setup. Your CI already has access.
03No per screenshot pricePercy counts each page at each browser and width, and extra screenshots cost $0.036. We bill for storage, and an unchanged screenshot is one hash.

What your reviewers get.

Each changed screenshot next to its baseline, with the changed pixels in magenta.
  • Four views. Side by side, diff, slider and flip.
  • Keyboard first. j and k to move, a to approve, r to reject.
  • One check. Green when every change is approved.
Try the review page
The stateofpixel review page, with the baseline and the new screenshot side by side and the changed pixels in magenta

Price it for your suite.

Move the sliders. Every tool here bills for this many screenshots a month, except stateofpixel.
Stories or pages300
Viewports3
Browsers1
Builds a month400

Screenshots a month360,000

stateofpixelFree, 5.5 GB stored$0 /mo
PercyDesktop 25k $549 + 335,000 extra at $36 per 1,000$12,609 /mo

$151,308 a year less than Percy.

Screenshots are stories x viewports x browsers x builds. For stateofpixel, 5% of screenshots change per build at 80 KB each, and pull request images are kept 60 days. The cheapest list plan for each tool, before tax, from Percy pricing on 27 September 2026. Percy prices are month to month; yearly billing is lower.

stateofpixel and Percy, row by row.

Every row about Percy links to the page it came from.
Key rows5Pricing5Screenshots4Platform3All12
stateofpixelPercyWhat you pay forStorage. Snapshots, builds and seats are free.Screenshots: pages x browsers x widths.1Free plan10 GB stored. Snapshots are not charged.5,000 screenshots a month.1At the plan limitWarns at 80%. After 14 days over, new images are not stored and the check passes with a note.Paid plans keep running and bill each extra screenshot.1Who takes themYour CI.Percy, from a DOM snapshot of your page.2Where they are comparedYour CI. Only the images upload.Percy's cloud.2

Where Percy is ahead.

We skip some features on purpose. If you need one of these, choose Percy.
Many browsers and real devicesPercy renders Chrome, Firefox, Edge and Safari, and mobile on its higher plan. stateofpixel compares what your CI renders.
AI reviewPercy's Visual Review Agent highlights meaningful changes on paid plans. stateofpixel compares pixels with a color threshold.
GitLab and BitbucketPercy supports both. stateofpixel works with GitHub only.
Selenium in any languagePercy has SDKs for Java, Ruby, Python and .NET. stateofpixel takes the PNG files those tests write.

Switch in one pull request.

Keep your tests. Change the step that sends screenshots to Percy. The moving guide has the details.
  1. 1Install the GitHub AppPick the repositories. On GitHub Actions there is no token to copy.
  2. 2Swap percySnapshot() for snapshot()Import it from stateofpixel/playwright and add the reporter. It waits for fonts and disables animations.
  3. 3Merge to mainThat build becomes the baseline, and pull requests compare against it.

Before

.github/workflows/visual.yml
steps:
  - run: npx percy exec -- npx playwright test
    env:
      PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }}

After

.github/workflows/visual.yml
permissions:
  contents: read
  id-token: write

steps:
  - run: npx playwright test
playwright.config.ts
import { defineConfig } from "@playwright/test";

export default defineConfig({
  reporter: [["list"], ["stateofpixel/playwright"]],
});

Questions.

What to know before you move from Percy.

Sources

Read on 27 September 2026. Prices are list prices before tax. The stateofpixel column comes from our docs.

  1. 1Percy pricing
  2. 2Percy SDK workflow
  3. 3Percy cross-browser
  4. 4Percy SDKs
  5. 5Percy source control
  6. 6@percy/cli package

Every pixel, reviewed.
Nothing ships by surprise.

Start free with GitHubRead the quickstart