The workflow decision
For email and SMS verification, the useful comparison is whether Notte or Steel can meet the following outcome: The permitted verification step completes for the intended account and the application retains only the references needed to explain the outcome.
A new persona identity and an existing user's verification channel are different resources. Check who owns the inbox or phone, what messages can be read and what additional usage costs apply.
A proposed acceptance case
An authorized account workflow receives a verification message while the browser is open. The message must be associated with the right task and identity.
This is an evaluation design, not a claim that this workflow has been executed successfully on every provider.
| Part of the test | Required observation |
|---|---|
| Controlled input | A controlled account, an approved inbox or phone channel and the corresponding browser job. |
| Pass condition | The permitted verification step completes for the intended account and the application retains only the references needed to explain the outcome. |
| Negative case | Run two controlled jobs with distinct messages. Verify that the application cannot accidentally submit one job's code to the other account. |
| Evidence to retain | Identity owner, channel reference, browser job association and completed verification state. |
Documented mechanisms, side by side
These labels describe product mechanisms. The linked source and the acceptance case determine whether a mechanism meets this workflow's requirement.
| Requirement | Notte | Steel |
|---|---|---|
| Saved browser state | Documented | Documented |
| Credential handling | Documented | Credentials API |
| Website sign-in | Documented | Profile / credential flows |
Sources: docs.notte.cc [1] ↗docs.notte.cc [2] ↗docs.steel.dev [3] ↗docs.steel.dev [4] ↗
Website login
Notte: Vaults substitute credential placeholders in supported browser actions outside the model context. Managed Auth checks requested saved connections before automation. Personas supply an inbox and optional phone number for verification workflows.
Steel: Steel's Credentials API stores credentials for users or agents. Its cookbook demonstrates using stored credentials with Playwright, while profiles and auth contexts preserve signed-in browser state.
What survives a session
Notte: Profiles save cookies, local storage and session storage. Sessions start with fresh state by default. Persisting a profile writes state back when the session ends; a running session can also save its state explicitly.
Steel: The Profiles API documents reusable browser context, cookies, extensions, credentials and browser settings. Steel also documents lighter auth-context reuse, which should not be confused with a complete profile.
Pricing model
Notte: The public usage rates are $0.01 per browser-hour, $0.05 per Function-hour and $10 per GB of managed proxy traffic. Paid plans return their price as usage credits. Price the relevant meters and plan eligibility for the workload.
Steel: Hosted browser plans and a self-hosted browser have different cost structures. For self-hosting, include the worker, compute, networking, storage and operations rather than assigning the open-source code a zero operating cost.
Sources: notte.cc [1] ↗docs.steel.dev [2] ↗
What should change the choice?
Notte personas provide an identity channel for eligible verification workflows. An existing user's inbox or phone and a newly provisioned persona have different ownership, so select the appropriate path deliberately.
Steel: Steel's managed and self-hosted choices make infrastructure ownership a concrete deciding factor. Keep that option on the shortlist when operating the browser is intentional; evaluate Notte when owning fewer execution and authentication components is the actual goal.
Retain the customer's existing verification channel or another established identity integration when it is required by the account workflow. Browser infrastructure alone is not a replacement for control of that channel.
Sources: docs.notte.cc [1] ↗docs.notte.cc [2] ↗notte.cc [3] ↗docs.steel.dev [4] ↗docs.steel.dev [5] ↗docs.steel.dev [6] ↗
The cost boundary
Use the same attempted work and eligible account capacity in both estimates. The browser-hour rate does not include every proxy, execution or identity meter, and the cost of an incomplete job is still part of the workflow budget.
The workload evidence should include: Identity owner, channel reference, browser job association and completed verification state.
Sources: notte.cc [1] ↗docs.steel.dev [2] ↗
Make a bounded pilot
Use a controlled account and approved channel, verify message-to-session association, and avoid recording message contents in ordinary application logs.
Use the same authorized account, input and final-state check in each configuration. Treat a missing product contract as an open question; do not turn an undocumented capability into an unsupported claim or a successful test result.
- Separate customer-owned channels from provider-created test identities.
- Pilot the target with an approved channel and record message-to-job association without logging message contents.
- Verify correct account completion before changing verification-dependent jobs.