Starter
For a solo developer starting with automated tests.
- Weekly budget60 credits / week
- Apps2 verified apps
- Runs1 run at a time
- Models2 models
- APINo API access
End-to-end testing for Web, Android and iOS
The careful click-through you’d do by hand runs on real devices while you keep building. Changes you sign off stay signed off, so each release is easier to trust.
Write the test in plain words, or ask your AI tool to. You see the estimated cost before it runs.
It worked yesterday.
same plan, v1yesterday: passed today: step 3 failed
Connect NthCase to any AI tool that supports MCP, then ask for a test in the chat. Your AI tool writes the test, runs it on a real device and tells you the result, without leaving the chat.
estimate_schedule tool tells an agent what a schedule will cost before it spends your credits.Write each step the way you would ask a friend to check your app, in the language you work in, or record them on a real device. No code, no selectors, no ids. The AI model you choose turns your steps into a fixed test plan once, and every run replays that plan.
Open the Web tab, wait for it to load, scroll to Acme's pricing section and verify the "Growth" plan shows "$29 / mo".
The spec or long prompt you gave your AI tool already says what your app should do. Upload it as a .pdf or .docx on your app's page, and NthCase proposes scenarios from it. Each one waits until you approve it; then you compile and run it like any other.
Open your app on a real device from NthCase: a web app in a browser, a phone app on one of our devices or on your own phone. Then press Record and use it. Each tap, typed value, scroll or Back becomes a step, named for you in plain words. No Discovery is needed first.
resource-id= com.acme.storefront: id/ accept_cookiesresource-id= com.acme.storefront: id/ featured_productresource-id= com.acme.storefront: id/ add_to_basketaccessibility-id= Basket5 is written in words
Pick the device for each run: one of ours, the phone on your desk, or a device you already rent from BrowserStack. Wherever it runs, it replays the same plan.
Emulators, simulators and real phones, with nothing to install. A run's floor is 2 credits on an emulator, a simulator or the web, and 4 on one of our real phones.
What a run costsPlug it into your computer and start the NthCase agent, nth-agent. Runs reach the phone through a connection the agent opens, so nothing connects in to your machine. A run's floor here is 2 credits.
New, and not finished yet. Name the devices you already rent, and each one becomes a device in your workspace. Your access key never leaves your machine: NthCase never receives it. A run here is priced as one on your own phone.
Connect your cloud-lab accountEvery run replays the plan you compiled. If a release moves or renames something a step looks for, the engine asks the AI model for a replacement, at most twice for that step, and puts what it found on the run's page. The plan changes only when you say so.
This step could not be verified. The AI proposes a selector — review it before pinning.
proposed: text=Continue to paymentwas looking for: the Continue button under the delivery formWrite a step about how a screen should look, and it compiles to a check against a picture a person approved, of the whole screen or of one element. Every run after that compares its screen with that picture, pixel by pixel.
one screen: 1280×720, 1x, landscape, light
1,906 of 921,600 pixels (0.206814%) differ from the approved baseline, more than the allowed 0.0002% (1 of 921,600 pixels; a pixel counts when its colour differs by more than 0.2 and it is not an anti-aliased edge).
A step can run another scenario of the same app, at its place. So any flow is written once, as a scenario of its own, and reused wherever it is needed: sign in, fill the basket, accept the cookie banner, whatever several tests share.
Check every release on a real device, or check your app every night, with the tests you already wrote.
The nth CLI starts a run, waits for the verdict and sets an exit code your pipeline can check. It uses your workspace's API key.
Install it with npm install -g @nthcase/cli, or with dotnet tool install -g nthcase.
Schedules run your scenarios on a timetable you set in the app, and every scheduled run is Strict. A schedule only takes scenarios whose steps a person has confirmed, by recording them on a device or pinning their selectors.
| 0 | the run passed |
| 1 | the run failed |
| 2 | the run ended in Error: it could not reach a verdict, because the engine or infrastructure broke or the run could not start — not a test verdict |
| 3 | the timeout ran out before the run finished |
| 4 | someone cancelled the run |
| 10 | the command or its arguments are wrong |
| 11 | the key is missing or the API did not accept it, or its address or version needs changing |
| 12 | the API could not be reached |
Every run records each step's result and time, per-step screenshots and the model used. It also keeps the logs, and the network capture when its scenario turns capture on, with sensitive headers and saved secrets masked.
No step of this example run asked a model, so its page says “No AI — deterministic replay”. A step can still ask one when its element is not found, as When your app changes shows.
A run costs its AI tokens or its floor, whichever is greater.
On your own device, you pay no device time. A run on a device you connected yourself has the 2-credit floor, however long it runs. We charge device time only on our own devices.
A discovery can save tokens on every run. A test compiled after a discovery uses the elements on its map, so its runs do not have to ask the AI model to find them. A test compiled without one can ask the model on every run, and every ask spends tokens.
A discovery is quoted before it starts. It costs exactly that quote when it completes or when you cancel it. One that our AI service stopped early, or one that fails on your own device, costs only what it used, and one the platform fails costs nothing. A run is charged the tokens it used, at 1 credit = 8,000 AI tokens on the reference model; a discovery's ceiling is quoted at 12,500 reserved tokens to the credit, because you pay for the ceiling whether or not the crawl uses it.
You choose the model, and the estimate follows. Each time you compile a test, run it or start a discovery, you pick the AI model, from Claude and OpenAI, and the estimate or quote you see before you confirm updates with your choice. See the models
Plans and credits can't be bought yet. A redemption code gives a workspace a month of a plan, and the plan's weekly credits come with it.
Each plan has a price in dollars a month and a weekly credit budget that resets every seven days. You can spend the budget on any operation, with any model your plan includes.
For a solo developer starting with automated tests.
For a team that runs tests on every push.
For growing product teams and agencies.
Credits from a code: a redemption code can also add credits of its own. They sit in a separate balance from the weekly budget. They never expire, never reset, and are kept when your plan changes.
Want to try Pro first? Tell us what you'd test.
Every plan includes members and roles. Before an app can run, you confirm that you own it or that its owner allows you to test it.
Each answer links to the page that says more.
NthCase runs end-to-end tests of web, Android and iOS apps on real devices. You write each test as steps in plain sentences and choose the AI model that compiles it. You see the cost in credits before anything runs: an estimate for a run, and an exact quote for a discovery.
No. A test is a scenario: a list of steps written as sentences, in the language you work in, with no selectors and no ids. Compiling turns the steps into a fixed plan once. Every run replays that plan.
Yes, from any AI tool that supports the Model Context Protocol. Add the NthCase server to it: a tool that supports sign-in connects by signing in, as Claude does, and any other sends your workspace's API key, as Cursor does. Your AI tool can then write a test, run it on a real device and read the result. In a tool that shows Model Context Protocol apps, a run opens a panel in the chat that follows it.
You can test web, Android and iOS apps. A run can use one of our emulators, simulators or physical devices. It can also use a phone plugged into a machine of yours, or a device you already rent from a cloud lab. The cloud lab option is new and not finished yet.
No. When your tests run on devices you rent from a cloud lab, the NthCase agent on your machine holds your access key. It adds the key only to what it sends the lab itself, never writes it to disk and never prints it. NthCase never receives it.
Your plan gives you a weekly budget of credits, and it resets every seven days. Everything you run is paid from it in credits. A compile costs its AI tokens, with a floor of 1 credit. A run costs its tokens or its floor, whichever is greater: 2 credits on an emulator, 4 on one of our physical devices. A discovery is quoted before it starts, and a completed discovery costs exactly that quote, or only what it used if our AI service stopped it early.
Models from Claude and OpenAI. You choose the model each time you compile a test, run it or start a discovery, and the price you see before you confirm follows your choice.
If a step's selector no longer finds its element, the engine asks the AI model for a replacement, at most twice for that step. Strict is the default mode, and every scheduled run uses it. A Strict run fails the step and offers the replacement for you to confirm. An Assisted run accepts the replacement and marks the step self-healed. A heal lasts for that run only. To keep it, pin it on the run's page and compile again, and later runs replay it.
No. You can write, compile and run tests without one. A Discovery explores your app and keeps a map of the real elements on its screens. A test compiled after a discovery uses the elements on its map, so its runs do not have to ask the AI model to find them. A test compiled without one can ask the model on every run, and every ask spends tokens. You need one to turn a scope document into scenarios, because that works from the map. A discovery is quoted before it starts.
Yes. Upload it on your app's page as a .pdf or .docx, once a Discovery has mapped the app. NthCase proposes scenarios from it, and each one waits until you approve it. Your app's page then lists each requirement in the document as covered or as a gap. Each run is quoted before it starts, and costs its AI tokens, never more than that quote. A run that fails costs nothing.
We scan an uploaded build for viruses and store it with Cloudflare, in the European Union. A build with malware never runs anywhere. A build that has not been scanned clean cannot run on our phones. Before a run on our devices installs your build, it removes any earlier copy of your app and its data. A live session removes the build it installed when it ends. We never remove an app that was on a device before we arrived.
Yes. Run the NthCase agent on the machine your phone is plugged into. It joins your workspace with an agent token. Runs reach the phone through an outbound tunnel that the agent opens, so nothing connects in to your machine. A run there costs its tokens or the 2-credit base floor, whichever is greater, and no device time.
Yes. One workspace API key works with the CLI, the REST API and the Model Context Protocol server. nth trigger --wait waits until the run has a verdict, then sets an exit code your pipeline can check. Install the CLI from npm (npx @nthcase/cli) or NuGet (dotnet tool install -g nthcase). An AI assistant can write, run and read tests with that server's 46 tools. An assistant that supports sign-in connects by signing in, as Claude does.
A saved login's secret is write-only. You type it once, and no screen or API call returns it again. It is encrypted with AES-GCM. It is decrypted in one place only: the worker that drives the browser or device, at the moment a step needs it. A step names the login by its label, never by its value. Every secret a run used is masked in its logs. When a scenario turns network capture on, the capture masks sensitive headers, fields and address parameters and the run's saved secrets; the privacy page says what it keeps as sent. Screenshots are not masked, because they are pictures of the screen.