Guide · Browser Agents

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.

Get API access →

The pattern most browser agents need

  1. Agent navigates to signup page (Cash App, Coinbase, whatever)
  2. Agent fills email, password, name
  3. Agent hits "phone number" field
  4. 👉 Agent calls MeiSIM API: POST /v1/numbers/provision
  5. API returns: phone number (within 60s)
  6. Agent types phone number into the form
  7. Agent submits
  8. Service sends verification SMS to MeiSIM number
  9. MeiSIM POSTs SMS to your webhook (within 3s of receipt)
  10. Agent reads webhook payload, extracts 4-8 digit code from text
  11. Agent types code into verification form
  12. 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:

{ "name": "get_us_phone_number", "description": "Provision a real US phone number for SMS verification. Returns the number.", "input_schema": { "type": "object", "properties": {} } }, { "name": "wait_for_sms_code", "description": "Poll for an SMS verification code on a previously-provisioned number. Returns the code when received or null after 60s timeout.", "input_schema": { "type": "object", "properties": { "number_id": { "type": "string" } }, "required": ["number_id"] } }

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:

async function verifyPhone(page) { const { phone, id } = await fetch('https://meisimusa-backend.vercel.app/v1/numbers/provision', { method: 'POST', headers: { Authorization: 'Bearer ' + process.env.MEISIM_API_KEY, 'Content-Type': 'application/json' }, body: JSON.stringify({ plan_id: 'p3:1:123', label: 'browser-agent-' + Date.now() }), }).then(r => r.json()); await page.fill('input[name="phone"]', phone); await page.click('button[type="submit"]'); // Poll for SMS for (let i = 0; i < 30; i++) { const msgs = await fetch(`https://meisimusa-backend.vercel.app/v1/numbers/${id}/messages`, { headers: { Authorization: 'Bearer ' + process.env.MEISIM_API_KEY }, }).then(r => r.json()); const code = msgs.messages?.[0]?.text?.match(/\b\d{4,8}\b/)?.[0]; if (code) { await page.fill('input[name="code"]', code); return; } await new Promise(r => setTimeout(r, 2000)); } throw new Error('SMS timeout'); }

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.

Email us →

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.