Phonekit vs Mailosaur for SMS testing
Both give your tests a phone number that receives texts and pulls out the code. Choose Mailosaur when you want email and SMS testing in one tool, or numbers in the UK or Canada. Choose Phonekit when you need a real SIM line, or when coding agents and teammates share the same numbers.
Phonekit team Updated
Compare the two
Mailosaur details come from its public site, docs and pricing page as of November 2026.
| Phonekit | Mailosaur | |
|---|---|---|
| What it tests | Texts only | Email and SMS in one product |
| Number types | Mobile: real SIM line on a mobile network. Standard: US local VoIP | Numbers dedicated to your account; its docs don't state the line type |
| Countries | Standard numbers are US local | Standard numbers in the UK, US and Canada; premium numbers elsewhere through support |
| How a test reads a code | SDK: mark the number, trigger the text, then waitForOtp() | API: messages.get() waits for a message sent to the number; codes are in text.codes |
| Client libraries | JS/TS SDK, CLI and HTTP API | SDKs for Node.js, Java, Ruby, Python, .NET, PHP, Go and browser JavaScript |
| Access | Each number shared with chosen people, test keys and agents | Permissions set per project |
| Sending | Closed-loop texts to your own numbers, teammates and recent senders, with limits | Reply to a received SMS from its API |
| Plans | Starter $29, Team $99 or Scale $199 a month; SMS included on every plan | Personal from $20 and Core from $50 a month, billed annually; Enterprise custom |
| SMS price | Starter includes 3 Standard numbers, 1 Mobile line and a monthly SMS pool; extra Standard $5, Mobile $15 a month | Listed on Core as "SMS and authentication from $37.50 per month"; no per-number price stated |
Choose Mailosaur when
- You test email and SMS and want both in one tool and one API.
- You need test numbers in the UK or Canada, or premium numbers in other countries.
- Your tests are written in Java, Ruby, Python, .NET, PHP or Go and you want a native client.
- You want email previews or deliverability checks alongside your SMS tests.
Choose Phonekit when
- A service your product depends on only texts mobile numbers. Phonekit Mobile numbers are real SIM lines on a mobile network.
- Coding agents need to read codes while they work on your own app. They can use the agent skill, MCP server, CLI, SDK or API.
- Your team shares numbers. Each number has its own list of people, test keys and agents, and everyone sees messages in one shared inbox.
- You run tests in parallel. Give each worker its own number and mark it before the text is sent, so a test only reads the code it asked for.
- You test a product that texts people. Phonekit can text your own numbers, your teammates' verified phones, anyone who texted you in the last 30 days and up to five numbers you add, at 10 texts a minute and 100 a day per number.
No number is accepted by every service. Some services only text mobile numbers, and that is what Mobile lines are for. Phonekit is for testing and running your own product, not for verifying accounts on other services.
The same Playwright test in each tool
Both tests sign in to the same app: fill in the phone number, ask for a code, read it and submit it. The Mailosaur calls are the ones its Playwright SMS docs show: messages.get() with sentTo, and the code from message.text.codes.
import { test, expect } from "@playwright/test"
import MailosaurClient from "mailosaur"
const mailosaur = new MailosaurClient(process.env["MAILOSAUR_API_KEY"]!)
test("signs in with the SMS code", async ({ page }) => {
const phoneNumber = process.env["TEST_PHONE_NUMBER"]!
await page.goto("/signin")
await page.getByLabel("Phone number").fill(phoneNumber)
const receivedAfter = new Date()
await page.getByRole("button", { name: "Send code" }).click()
const message = await mailosaur.messages.get(
process.env["MAILOSAUR_SERVER_ID"]!,
{ sentTo: phoneNumber },
{ receivedAfter, timeout: 120_000 }
)
const code = message.text?.codes?.[0]?.value ?? ""
await page.getByLabel("Verification code").fill(code)
await page.getByRole("button", { name: "Verify" }).click()
await expect(page).toHaveURL(/\/account/)
})import { test, expect } from "@playwright/test"
import { Phonekit } from "@phonekit/sdk"
const phonekit = new Phonekit({ apiKey: process.env["PHONEKIT_API_KEY"]! })
test("signs in with the SMS code", async ({ page }) => {
const phoneNumber = process.env["TEST_PHONE_NUMBER"]!
const number = phonekit.number(phoneNumber)
await page.goto("/signin")
await page.getByLabel("Phone number").fill(phoneNumber)
const after = await number.mark()
await page.getByRole("button", { name: "Send code" }).click()
const code = await number.waitForOtp({ after, timeoutMs: 120_000 })
await page.getByLabel("Verification code").fill(code)
await page.getByRole("button", { name: "Verify" }).click()
await expect(page).toHaveURL(/\/account/)
})The two are close in length. The differences are in the details:
- Waiting. Mailosaur's Node client waits 10 seconds by default and searches the last hour unless you pass
receivedAfter. Pass both, as above, for a fresh code and a realistic wait. Phonekit'swaitForOtp()needs a deadline every time. - Fresh messages.
receivedAfteris a time from the test machine. Phonekit'smark()is a position recorded on Phonekit's side, so the wait doesn't depend on two clocks agreeing. - Types. Mailosaur's docs read
message.text.codes[0].value. In its TypeScript types those fields are optional, so a strict project checks them as shown. Phonekit'swaitForOtp()returns a string, or throwsmissing_otpwhen the text has no code.
The Playwright guide has the complete Phonekit test, and one number per parallel test covers resends and parallel workers.
Sources
As of November 2026:
- Mailosaur SMS testing page and SMS testing docs: email and SMS in one product, and the client libraries.
- Mailosaur phone numbers docs: standard numbers in the UK, US and Canada, each dedicated to your account.
- Mailosaur Playwright SMS guide:
messages.get()withsentTo,receivedAfter, and codes inmessage.text.codes. - Mailosaur Playwright quickstart:
npm install mailosaurandnew MailosaurClient(...). - Mailosaur Node client source:
messages.get()waits 10 seconds and searches the last hour by default, andtext.codesis optional in its types. - Mailosaur pricing: Personal from $20 and Core from $50 a month billed annually, and "SMS and authentication from $37.50 per month" listed on Core.
- Phonekit pricing and the SDK reference.
Questions
Can I use Phonekit and Mailosaur together?
Yes. Many teams test email in one tool and SMS in another. Your app sends to whichever number or address the test gives it, so each test can use the service that fits.
Does Mailosaur test email as well as SMS?
Yes. Mailosaur's site describes email testing, email previews and SMS testing in one product, with the same API for both. Phonekit is for texts only: it receives them, and sends within its closed-loop limits.
Are Phonekit numbers real SIMs?
Mobile numbers are real SIM lines on a mobile network. Standard numbers are US local VoIP numbers. No number is accepted by every service, so test the exact step you depend on.
Which countries can I get numbers in?
Mailosaur's docs list standard numbers in the UK, US and Canada, with premium numbers for other countries through its support team. Phonekit Standard numbers are US local numbers. Check both before you plan tests that need a specific country.
How do these facts stay current?
The Mailosaur details on this page come from its public site and docs as of November 2026. Products change, so check Mailosaur's own pages before you decide.
Keep reading
- VoIP or real SIMA plain comparison of VoIP numbers and real SIM lines for SMS verification, with when to choose each, when to keep or release a number, and a checklist.
- Playwright SMS testA complete Playwright SMS test: receive a fresh code with the Phonekit SDK, submit it in the browser, and assert the signed-in account.
- One number per parallel testMake SMS tests repeatable: mark the inbox before you send, give each parallel worker its own number, budget the whole test and report the stage that failed.
- Phonekit pricingPhonekit plans start at $29 a month per workspace, with Standard numbers and real SIM Mobile lines, the SDK, CLI, MCP server and API, and a shared inbox on every plan.