Checkout monitoring: your server says 200, your checkout says no
An uptime check sees a page that loads. Your customer sees a sign-in that loops or a "Place order" button that never turns on. VerLake runs your login, SSO and checkout as real-browser Playwright journeys on a schedule, and tells you which step broke.
In short
- A Playwright script signs in, adds to cart and reaches payment in real Chromium, every 1 to 60 minutes.
- It follows SSO and OAuth redirects the way a customer's browser does.
- You get an alert after the number of failures in a row you choose, and again on recovery.
- Every run records the failed step, each step's timing, the console output, the error and an AI summary.
What uptime checks miss
A ping asks one question: does the server answer? A login or checkout can fail while the answer is still HTTP 200. These are the failures customers find first:
The page loads, then a script error stops the form from working. The server never knows.
"Sign in" or "Place order" never becomes clickable, so nobody gets past it.
The identity provider sends the user back to sign-in instead of to the app.
A payment widget, tax service or inventory call fails, and your checkout gets the blame.
A synthetic transaction catches these because it does what the customer does. It clicks the button, fills the form and checks the result. That is user journey monitoring, and login and checkout are the journeys that cost the most when they break.
How it works
1Write the journey, generate it, or bring it
Write a Playwright test in the editor. Or describe the flow in plain English in the AI tab and it drafts the script, using your organization's own AI API key. Already have tests? Point the project at a GitHub or Bitbucket repository and give the monitor a command such as npx playwright test --grep @prod.
2Point it at an environment
An environment holds the URL and the test account's credentials. VerLake injects them as process.env, so one script runs against production, staging or each tenant.
3Test it, then schedule it
Click Test Run and you get each step, the console output, screenshots and a video replay. Then choose an interval of 1, 5, 15, 30 or 60 minutes, a timeout of up to 300 seconds, and a failure threshold.
4Add a fast tripwire
Pair the journey with an API check on a pricing, inventory or health endpoint. It asserts on status, latency, headers and body, as often as every 30 seconds.
Example: sign in and reach payment
This journey signs in with a test account, adds a product to the cart and checks that "Place order" is enabled. It stops before paying. Each test.step names one part of the flow. The URL, labels and button names are placeholders, so adjust them to match your store.
import { test, expect } from '@playwright/test';
// Placeholder selectors: change the labels and names to match your store.
test('customer can sign in and reach payment', async ({ page }) => {
await test.step('Open the store', async () => {
await page.goto(process.env.APP_URL);
});
await test.step('Sign in', async () => {
await page.getByRole('link', { name: 'Sign in' }).click();
await page.getByLabel('Email').fill(process.env.TEST_USER);
await page.getByLabel('Password').fill(process.env.TEST_PASS);
await page.getByRole('button', { name: 'Sign in' }).click();
await expect(page.getByRole('link', { name: 'My account' })).toBeVisible();
});
await test.step('Add a product to the cart', async () => {
await page.getByPlaceholder('Search').fill('trail runner');
await page.keyboard.press('Enter');
await page.getByRole('button', { name: 'Add to cart' }).first().click();
});
await test.step('Reach payment', async () => {
await page.getByRole('link', { name: 'Checkout' }).click();
await expect(page.getByRole('button', { name: 'Place order' })).toBeEnabled();
});
});
Signing in through SSO
For SSO login monitoring, swap the sign-in step for one that goes through your identity provider and back. Playwright follows the redirects like a real browser.
await test.step('Sign in through SSO', async () => {
await page.getByRole('button', { name: 'Sign in with SSO' }).click();
await page.waitForURL(/idp\.example\.com/); // your identity provider
await page.getByLabel('Email').fill(process.env.SSO_USER);
await page.getByLabel('Password').fill(process.env.SSO_PASS);
await page.getByRole('button', { name: 'Sign in' }).click();
await page.waitForURL(process.env.APP_URL + '/**');
await expect(page.getByRole('heading', { name: 'Dashboard' })).toBeVisible();
});
Use a test account. Create one just for monitoring, keep its password in an environment, and stop before the final payment step or use your payment provider's test mode.
What you see when a check fails
VerLake waits for the number of failures in a row you set, so one flaky run doesn't page anyone. Then it alerts you, and it tells you again when the journey recovers.
Every run records:
- the step that failed, and how long every step took
- the browser console output and the error
- an AI summary of the likely root cause, using your own AI API key
Runs stay in Run History, so you can compare a failure with the last good run. On the Growth plan and up, you can show login and checkout on a public status page with incident posts. With the MCP connector and its 16 tools, your AI assistant can list failed runs and summarise them for you.
Pricing
You pay for the seconds a check runs. Queue time is free. A login check usually takes 5 to 15 seconds and a full checkout 25 to 60 seconds.
| Plan | Price | Execution-seconds | History |
|---|---|---|---|
| Free | $0 | 40,000 once (about 800 checks) | 7 days |
| Starter | $29/month | 400,000 a month | 30 days |
| Growth | $99/month | 1,500,000 a month, plus status pages | 90 days |
| Scale | $249/month | 4,000,000 a month | 365 days |
A 30-second checkout journey every 10 minutes uses 129,600 seconds a month. A 10-second login check every 5 minutes uses 86,400. Both fit in Starter. Beyond your plan it's $0.10 per 1,000 seconds, with a spend cap you control. See full pricing.
FAQ
What is checkout monitoring?
Checkout monitoring runs a scripted purchase journey against your live store on a schedule. In VerLake the script is a Playwright test that runs in real Chromium. It signs in, adds a product to the cart and checks that payment can go ahead, and it alerts you when a step fails.
Will a checkout monitor place real orders?
Only if your script tells it to. Use a dedicated test account and stop before the final payment step, or use your payment provider's test mode. A check that the Place order button is enabled proves most of the flow works.
Can VerLake monitor SSO and OAuth logins?
Yes. Playwright drives a real browser, so it follows OAuth redirects and pop-ups to your identity provider and back. Keep the test user's credentials in an environment and read them from process.env.
How often should a checkout or login monitor run?
Login and checkout usually run every 1 to 5 minutes. You can add an API check on a pricing or health endpoint every 30 seconds as a fast tripwire.
What does a checkout monitor cost?
VerLake bills the seconds a check runs. A 30-second checkout journey every 10 minutes uses 129,600 execution-seconds a month, which fits in the Starter plan at $29 a month. The Free plan includes 40,000 execution-seconds once.
Can I use my existing Playwright tests?
Yes. Paste a spec into the editor, or connect a GitHub or Bitbucket repository and give VerLake the command to run, such as npx playwright test --grep @prod.
Know your checkout works before customers try it
40,000 free execution-seconds, about 800 checks. No credit card.