QA that shows you what it saw.

Write what your app should do in plain English. Testsy does it in a real browser, an iPhone Simulator or an Android Emulator, and every check comes back with the value it read, not just a green tick.

Start free See how it works 50 runs a month free. No card needed, nothing to install on your side.
Run #2 184 · checkout.yourshop.com · ChromeFailed

Requirement
Add the blue “Harbour” mug to the cart, open the cart and check the subtotal is $24.00 and the delivery estimate says 2–4 business days.

  1. Mug added to the cart

    Cart badge1product titleHarbour mug, blue
  2. Subtotal is $24.00

    Read at .cart-summary$24.00
  3. Delivery estimate says 2–4 business days

    Expected2–4 business daysseen5–7 business days
2 min 51 s14 actionsVideo, screenshots and the page at each check attached

Three steps. No scripts, no selectors.

A test is the sentence you would say to a colleague. Testsy works out the clicks, keeps evidence of each one, and judges the result against what you wrote.

Describe the journey

Paste a URL or upload an app build, then write what to do and what must be true at the end. Sign-in details are stored encrypted per project and filled in at run time.

Testsy runs it for real

A real Chrome, iPhone Simulator or Android Emulator in the cloud, with a live view while it runs. Most first runs finish in about three minutes; repeat runs reuse what was learned and are faster.

Read the verdict and the evidence

Each check lists the expected value and the value Testsy read, with the screenshot and video moment it came from. Fetch the same report as JSON from the API or your CI.

Four honest outcomes.

Most tools only know pass and fail, so a site that blocked the test shows up as a bug in your app. Testsy tells you which it was.

Passed

Every check held, and the report shows the value behind each one.

Counts as a run
Failed

A check did not hold. You get the expected value, the value seen, the steps to reproduce and the video moment.

Counts as a run
Blocked by site

A bot wall, captcha or paywall stopped the journey before the checks. The report says where and shows the page.

Not billed
Inconclusive

The journey ran but a value could not be read with confidence. Testsy says so instead of guessing a verdict.

Counts as a run

Web and mobile apps, one plan.

The same plain-English test works on a website in Chrome and on a native app in the iPhone Simulator or Android Emulator. Upload an Android .apk or a zipped iOS Simulator build and Testsy installs it fresh for each run.

  • Real browsers, real devicesChrome on desktop and phone sizes; iOS and Android simulators with the permissions your journey needs and nothing else.
  • Files and media tooDownloads, uploads, CSV imports and video playback are checked the way a person would check them.
  • Sites that fight backRuns can leave from a residential ISP address in the right country, with the browser's language and time zone to match.

Runs where your code lives.

Trigger runs from a pull request, a GitHub Action, a CLI, the REST API, or straight from Claude Code and Cursor over MCP, so your coding agent can verify its own work in a real browser.

# GitHub Actions step, after your deploy
- name: Run QA tests
  env:
    QA_AI_API_KEY: ${{ secrets.QA_AI_API_KEY }}
    QA_AI_URL: https://app.testsy.dev
  run: |
    curl -fsSL "$QA_AI_URL/cli/qa-ai.mjs" -o qa-ai.mjs
    node qa-ai.mjs run --project checkout --junit qa-junit.xml
# exits 1 on a failed check; JUnit report for your CI

Run your first test in the next ten minutes.

Free plan with 50 runs a month. Paid plans add concurrency and mobile runs; blocked-by-site runs are never billed on any plan.