TestWatchStart free

Find out before your customers do.

TestWatch is an AI end-to-end testing service. Describe signup, login or checkout in plain English; it writes a real Playwright test, runs it on a schedule or from CI, and tells you why it failed.

Start freeSee how it works

Free: 5 tests, 500 runs a month, 2 apps and one daily schedule. Unlimited teammates, no card.

Checkout with 2FA sign-in, on the Fieldmark demo shop

  1. PassedSign in as the 2FA shopper310 ms
  2. PassedOpen the Waterproof Notebook and add one to the cart130 ms
  3. PassedCheck out and pay with test card185 ms
  4. PassedVerify order confirmation and total65 ms

0AI calls on this passing run

A real run from 3 October 2026, exported unedited.

What you can check

  • 0 AI calls

    on a passing run. Runs are plain Playwright, so every plan includes them.

  • 94% good outcomes

    in our eval (87 trials, October 2026). 1% were false green, so you review every test. How we measured

  • Code you own

    Every test is Playwright you can read and copy. Export the whole suite as a project.

  • 4 browser profiles

    Desktop and mobile Chrome, mobile and desktop Safari.

End-to-end tests are nobody’s job

So signup, login and checkout break quietly and a customer tells you. Hand-written suites rot after the next redesign, and testers that bill every run make checking often expensive.

Pay to create tests, not to run them

No AI credits. A passing run makes no AI calls, so runs are included and you pay per test.

See all plans

Starter$99 a month

Uses 10 of 30 tests and 300 of 2,500 runs a month.

AI calls on passing runs: 0

Billed per run instead, 300 runs would cost about $299 a month.

Start freeFull estimate

What it does for you

Logs in like your users

Passwords, authenticator-app 2FA, and codes or links sent by email.

More about this

await page.getByRole('button', { name: 'Sign in' }).click();

await page.getByRole('textbox', { name: 'Authentication code' }).fill(otp());
await page.getByRole('button', { name: 'Verify' }).click();

Runs on a schedule and tells you when it breaks

Daily on Free, hourly on Starter and as often as every 15 minutes on Team. Failures email the owner on every plan; Slack and email channels on paid plans.

More about this

Checkout with 2FA sign-inFailed

Failing step: Verify order confirmation and total

Expected $21.00, received $16.00

A real failed run on the demo shop after we broke its cart total.

Four browser profiles from one description

Desktop and mobile Chrome, mobile and desktop Safari, emulated.

More about this

  • Desktop ChromeSupported
  • Mobile Chrome (Pixel 7)Supported
  • Mobile Safari (iPhone 13)Supported
  • Desktop SafariSupported

Tells you why it failed

A UI change, a real bug, an outage, a CAPTCHA or a bad login: every failure gets a call.

More about this

  • A button was renamedFix proposed

    The page changed, not the app’s behaviour

  • The cart total was wrongFailed

    Not a UI change. Needs your decision

  • The contact formBlocked

    The app blocked automated access (CAPTCHA / WAF). Not a problem with your test.

You approve every fix

When the page changes, it proposes a new locator or wait. Assertions in your main tests are never touched.

More about this

TestWatch result page for a checkout test that failed on a staging copy of the demo shop where the add-to-cart button was renamed. The Suggested fix tab marks it Test outdated at 98% confidence and shows a one-line diff from getByTestId('add-to-cart') to getByTestId('add-to-bag'), waiting for Apply fix or Decline.
Recorded 19 October 2026 on the Fieldmark demo shop. Unedited dashboard screenshot.

Code you can read and keep

Every test is plain Playwright with named steps. Copy one, or export the whole suite.

More about this

await test.step('Open the Waterproof Notebook and add one to the cart', async () => {
  await page.getByRole('link', { name: 'Waterproof Notebook' }).click();
  await page.getByTestId('add-to-cart').click();
  await expect(page.getByRole('link', { name: 'Check out' })).toBeVisible();
});

Questions

Can I trust tests written by AI?

Not blindly, and we don’t ask you to. In our eval on our own fixture apps (87 trials, October 2026), 94% of generations ended well: a correct test, or a correct explanation of why the flow can’t be tested. 1% were false green: the test passed when it should have failed. That is why you review each test and every fix.

Do I pay for every run?

No. A passing run is plain Playwright and makes no AI calls, so every plan includes its runs. Going over isn’t billed or blocked: above 150% of your runs, they wait behind other runs until the month resets. Pricing.

What happens when a test breaks?

TestWatch looks at the failure and says what it is: the page changed, a real bug, the app is down, a CAPTCHA, or a login that no longer works. For a page change it proposes a new locator or wait; nothing changes until you approve it.

What does the AI see?

While writing a test: your description and scrubbed snapshots of the pages it visits. When a run fails: the scrubbed error and a page snapshot. When a run passes: nothing. Security details.

Can it log in, including 2FA?

Yes: password logins and authenticator-app (TOTP) 2FA, with credentials encrypted at rest. Emailed codes, verify links, magic links and password resets work through built-in test inboxes on every plan. SMS codes aren’t supported. Logins with 2FA.

Can it run from CI?

Yes, on Starter or higher: the GitHub Action testwatch-dev/action, the CLI @testwatch/cli, the REST API, or a signed deploy hook start a run. The Action and CLI wait for the verdict and can fail the build on a real bug. On every plan, runs also start on a schedule or by hand. GitHub Action docs.

Am I locked in?

Every test is ordinary Playwright code you can read and copy. On every plan you can export the whole suite as a runnable Playwright project and run it with npx playwright test. Export your suite.

Write your first test in a few minutes.

Free: 5 tests, 500 runs a month, 2 apps and one daily schedule. Unlimited teammates, no card.

Start freeSee pricing