Browser agent SMS verification, solved
Your browser-using AI agent — OpenAI Operator, Anthropic Computer Use, Browserbase, Skyvern, custom Playwright/Puppeteer — navigates pages beautifully right up until it hits "we need to verify your phone number." Cash App, Coinbase, Stripe Atlas, Tinder, banking apps all check whether the number is VoIP. Twilio fails. Real carrier numbers pass. This guide shows you how to drop a fix into your agent's loop.
Try with 5 free numbers
Real US carrier numbers, ~98% verification pass rate, webhook delivery in <3s.
The pattern most browser agents need
- Agent navigates to signup page (Cash App, Coinbase, whatever)
- Agent fills email, password, name
- Agent hits "phone number" field
- 👉 Agent calls MeiSIM API:
POST /v1/numbers/provision - API returns: phone number (within 60s)
- Agent types phone number into the form
- Agent submits
- Service sends verification SMS to MeiSIM number
- MeiSIM POSTs SMS to your webhook (within 3s of receipt)
- Agent reads webhook payload, extracts 4-8 digit code from text
- Agent types code into verification form
- Account verified. Mission proceeds.
OpenAI Operator pattern
Operator's tool-use loop lets you register custom tools. Add a get_us_phone_number tool that calls MeiSIM's API and returns the number. Add a wait_for_sms_code tool that polls our messages endpoint for 60 seconds and extracts the code. Operator chains these automatically when it hits a verification page.
Anthropic Computer Use pattern
Same pattern but via Claude's tool-use schema. Define two tools:
Or use our MCP server and Claude calls them via natural language without any custom tool definition.
Browserbase / Skyvern integration
Both platforms expose hooks for "form-filling intelligence" — they figure out what each field wants based on the page DOM. Configure them to call MeiSIM when they detect a "Phone" field on a recognized verification page. The agent gets the number transparently and continues.
Playwright / Puppeteer custom agents
For agents you wrote yourself, the integration is one async function call:
Number-rotation strategy
Some services lock a phone number to one account permanently (Coinbase, Stripe Atlas, US banks). Use a fresh MeiSIM number per signup for these. Other services (Tinder, Bumble, social media) tolerate the same number across multiple accounts, but reputation degrades after 5-10. Pattern: keep a pool of warm numbers, rotate them, retire any that get flagged.
Build it into your agent
Get API access, drop the verification function in, ship.
FAQ
Why does my browser agent fail at phone verification?
Twilio numbers tagged as VoIP. Fraud detection rejects them. Real carrier numbers pass ~98% of the time.
How does the agent know when the SMS arrives?
Webhook (best for production, <3s latency) or polling (best for prototyping).
Can I reuse the same number for many signups?
Depends on service. Cash App / Coinbase / Stripe bind to one account. Tinder / social media tolerate 5-10. Use fresh per-signup for high-value services.
Does this work with headless Playwright?
Yes — the API is HTTP, the agent just makes fetch calls. See code sample above.
What about reCAPTCHA / Cloudflare Turnstile during signup?
Different problem. We solve the phone-verification leg; CAPTCHAs need a separate tool like 2Captcha or AntiCaptcha.