# Sms Verification

> SMS Verification for Automated Account Creation

- Skill: `lucadominguez/sms-verification` (Agent Skill)
- Install (CLI): `npx skillmds@latest add lucadominguez/sms-verification`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lucadominguez/sms-verification/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: lucadominguez (https://skillmd.com/u/lucadominguez)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/lucadominguez/sms-verification

---

# SMS Verification for Automated Account Creation

Use when choosing, integrating, or debugging SMS verification providers for automated signup flows. Also load when a signup flow hits a phone verification wall and you need to understand why.

**Support files (shared with browser-automation):**
- `references/5sim-api.md` — 5sim.net API: endpoints, pricing, provider selection, country format
- `references/smspool-api.md` — SMSPool API: endpoints, pricing, error codes, known delivery failures
- `references/sms-verification-service.md` — sms-activate.org auto-purchase flow for phone verification
- `references/sms-provider-catalog.md` — SMS provider rankings and API details
- `references/sms-provider-failures.md` — Investigation: why both 5sim.net and SMSPool fail for Facebook SMS verification (June 2026)

## SMS Provider Evaluation Framework

When choosing an SMS verification provider for automated account creation, evaluate against seven dimensions:

1. **Number type** — Real SIM vs VoIP vs SIM-farm. Real SIMs on major carriers (T-Mobile, AT&T, Verizon, Rogers, Bell, Telus) have the highest success rate. VoIP (Google Voice, TextNow, Dingtone) is universally blocked by Facebook/Google. SIM-farm numbers fall in between.
2. **Pool diversity** — Are numbers from diverse carrier ranges or all from the same /24 block? Single-block providers get range-banned faster.
3. **Number freshness** — Are numbers reused across customers? Shared pools mean numbers get burned faster.
4. **API quality** — REST API with API key auth, documented endpoints, reasonable rate limits.
5. **Short code capability** — Can the provider receive short-code SMS (e.g., Facebook's 32665, Google's 22000)? Many SIM-farm aggregators cannot.
6. **Pricing** — Per-verification cost. Real SIMs cost more ($1-2) but work more reliably than SIM-farm numbers ($0.07-0.50).
7. **Payment methods** — Crypto, card, or both. Minimum top-up amount.

## Why Providers Fail for Facebook (4-Layer Root Cause)

Meta's anti-spam systems block virtual/SIM-farm numbers through multiple layers:

**Layer 1 — Carrier line-type detection**: Facebook queries carrier databases (Neustar, TNS) to check whether a number is a real mobile line, VoIP, or SIM-farm aggregator. SIM-farm numbers are classified as non-personal lines and blocked before SMS is even sent.

**Layer 2 — Short code delivery**: US/Canadian carriers can block short-code SMS from reaching certain number types. SIM-farm aggregators often route through carriers that don't support short codes at all. Facebook's verification short code (32665) just silently fails.

**Layer 3 — Number reputation**: Facebook maintains an internal database of every number ever used for account creation. If a number was tied to an account that got banned, it's permanently burned. Providers that recycle numbers have a growing burn rate.

**Layer 4 — Range-level blocking**: If a provider's entire number block generates hundreds of Facebook verifications in a short window, Facebook blocks the entire range. This is what kills providers — their pools are concentrated in a few carrier ranges.

## Integration Pattern

All SMS providers follow the same interface. When adding a new provider:

```python
class NewProvider:
    def get_balance(self) -> float
    def get_number(self, country: str, service: str) -> Optional[tuple]  # (order_id, phone)
    def wait_for_code(self, timeout: int = 300) -> Optional[str]         # "12345" or None
    def complete(self) -> None                                            # mark done
    def cancel(self, reason: str = "manual") -> None                     # release number
```

**Auth patterns vary**: query param (`?api_key=`), Bearer token (`Authorization: Bearer`), or custom header (`X-API-Key`). Check the provider's docs.

**Status polling**: String status (`RECEIVED`, `PENDING`, `FINISHED`), numeric status (`STATUS_WAIT_CODE`, `STATUS_OK`), or code presence (poll until `code` field is non-null).

**Number recycling guard**: Track used numbers in a set. Never re-purchase a just-released number — it's still burned. Cancel and retry with a different number if the first fails.

**Country matters**: Canadian numbers (+1) are more likely to work for Facebook than Indonesian or Russian numbers, regardless of provider. Facebook treats North American numbers differently.

## Provider Catalog

See `references/sms-provider-catalog.md` for current rankings. Confirmed non-working for Facebook (June 2026): 5sim.net, SMSPool. Candidates: SMS-Activate, SMSPVA, TextVerified, SMS-man, SMSCodes.

See `references/sms-verification-service.md` for sms-activate.org auto-purchase integration patterns.

## Facebook Phone Verification Detection

Check for `"checkpoint"` in URL or keywords in page content (`"confirm phone"`, `"mobile number"`, `"enter your phone"`).

**Match proxy geo**: Use Canadian phone numbers (country code 12) with Canadian residential proxies for consistency — mismatched geo is a red flag.
