Mobile Proxies (SpiderProxy)
SpiderProxy provides mobile proxy infrastructure using USB modems with real SIM cards. Each modem provides a unique mobile IP that can be rotated on demand.
Overview
Real Mobile IPs
Traffic routes through actual carrier networks (Lifecell, Vodafone, etc.)
IP Rotation
Rotate IPs on-demand via API or on a schedule
Multiple Carriers
Mix carriers for diverse IP pools
SMS Bridge
Receive SMS for 2FA verification
Architecture
┌─────────────────────────────────────────────────────────────┐
│ SpiderIQ Central API │
│ (spideriq.ai) │
├─────────────────────────────────────────────────────────────┤
│ Admin API - Location/modem management, IP rotation │
│ Proxy Pool - Unified pool of all modems + iPhones │
│ Command Queue - Async command execution │
└────────────────────────────┬────────────────────────────────┘
│
WireGuard VPN (10.100.0.x)
│
┌────────────────────────────▼────────────────────────────────┐
│ SpiderHub Location │
│ (e.g., ua-odesa-1, us-nyc-1) │
├─────────────────────────────────────────────────────────────┤
│ Agent - Heartbeats, command execution │
│ 3proxy - HTTP proxy server (one per modem) │
│ SMS Poller - Receives SMS for 2FA │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Modem 1 │ │ Modem 2 │ │ Modem 3 │ │ Modem 4 │ │
│ │ Port 3101│ │ Port 3102│ │ Port 3103│ │ Port 3104│ │
│ │ Lifecell │ │ Lifecell │ │ MTS │ │ MTS │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└──────────────────────────────────────────────────────────────┘
Quick Start
1. Check Available Proxies
curl -X GET "https://spideriq.ai/api/v1/admin/proxy/stats" \
-H "X-Admin-Key: your_admin_key"
{
"total_modems": 4,
"online_modems": 4,
"healthy_modems": 4,
"by_country": {"UA": 4}
}
2. List Modems
curl -X GET "https://spideriq.ai/api/v1/admin/proxy/modems" \
-H "X-Admin-Key: your_admin_key"
[
{
"modem_id": "11111111-...",
"proxy_port": 3101,
"carrier": "lifecell",
"signal_strength": 100,
"status": "online"
}
]
3. Use a Proxy
Proxies are accessible via WireGuard VPN:
# Get your current IP
curl https://api.ipify.org
# Get IP through mobile proxy
curl --proxy http://10.100.0.2:3101 https://api.ipify.org
# Returns: 203.0.113.50 (mobile IP)
curl --proxy http://10.100.0.2:3102 https://api.ipify.org
# Returns: 203.0.113.51 (different mobile IP)
4. Rotate IP
curl -X POST "https://spideriq.ai/api/v1/admin/proxy/modems/{modem_id}/rotate?method=reconnect" \
-H "X-Admin-Key: your_admin_key"
{
"success": true,
"command_id": "f0579c88-...",
"message": "Rotation command queued"
}
The modem will reconnect and obtain a new IP within ~30 seconds.
Proxy Configuration
Connection Details
| Setting | Value |
|---|---|
| Protocol | HTTP/HTTPS |
| Host | WireGuard IP (e.g., 10.100.0.2) |
| Ports | 3101-3104 (one per modem) |
| Auth | None (secured by VPN) |
Python Example
import requests
# Configure proxy for specific modem
proxies = {
"http": "http://10.100.0.2:3101",
"https": "http://10.100.0.2:3101"
}
# Make request through mobile proxy
response = requests.get("https://api.ipify.org", proxies=proxies)
print(f"Mobile IP: {response.text}")
Node.js Example
const axios = require('axios');
const HttpsProxyAgent = require('https-proxy-agent');
const agent = new HttpsProxyAgent('http://10.100.0.2:3101');
axios.get('https://api.ipify.org', { httpsAgent: agent })
.then(response => console.log(`Mobile IP: ${response.data}`));
IP Rotation
Manual Rotation
Trigger rotation for a specific modem:
import requests
def rotate_ip(modem_id, method="reconnect"):
response = requests.post(
f"https://spideriq.ai/api/v1/admin/proxy/modems/{modem_id}/rotate",
params={"method": method},
headers={"X-Admin-Key": "your_admin_key"}
)
return response.json()
# Rotate IP
result = rotate_ip("11111111-...")
print(f"Command queued: {result['command_id']}")
Rotation Methods
| Method | Speed | Description |
|---|---|---|
reconnect | ~10s | Drop and reconnect data connection |
airplane | ~30s | Toggle airplane mode (more reliable) |
ussd | Varies | Send carrier USSD code |
Scheduled Rotation
Set up automatic rotation every N minutes:
curl -X POST "https://spideriq.ai/api/v1/admin/proxy/schedules" \
-H "X-Admin-Key: your_admin_key" \
-H "Content-Type: application/json" \
-d '{
"modem_id": "11111111-...",
"interval_minutes": 30,
"rotation_method": "reconnect"
}'
Monitoring
Check Modem Health
curl -X GET "https://spideriq.ai/api/v1/admin/proxy/modems" \
-H "X-Admin-Key: your_admin_key" | \
jq '.[] | {carrier, signal_strength, status, is_healthy}'
Signal Quality
| Signal % | Quality | Notes |
|---|---|---|
| 80-100% | Excellent | 4-5 bars, optimal for scraping |
| 60-79% | Good | 3 bars, reliable |
| 40-59% | Fair | 2 bars, may have latency |
| 0-39% | Poor | Consider relocating modem |
Speed Testing (v2.24.0)
Run speed tests on modems to compare carrier performance over time.
Trigger Speed Test
curl -X POST "https://spideriq.ai/api/v1/admin/proxy/modems/{modem_id}/speed-test" \
-H "X-Admin-Key: your_admin_key"
The SpiderHub agent will execute the test and report results in the next heartbeat (~30s).
View Speed Test History
curl -X GET "https://spideriq.ai/api/v1/admin/proxy/modems/{modem_id}/speed-tests?days=30" \
-H "X-Admin-Key: your_admin_key"
Get Carrier Performance Summary
Compare all modems/carriers at once:
curl -X GET "https://spideriq.ai/api/v1/admin/proxy/speed-tests/summary?days=30" \
-H "X-Admin-Key: your_admin_key"
{
"period_days": 30,
"modem_count": 4,
"modems": [
{
"modem_id": "11111111-...",
"carrier": "lifecell",
"avg_download_mbps": 45.2,
"avg_upload_mbps": 12.8,
"avg_latency_ms": 42
}
]
}
Traffic Metrics (v2.24.0)
Track requests, bytes, and uptime per modem for usage analysis.
Get Traffic Stats for a Modem
curl -X GET "https://spideriq.ai/api/v1/admin/proxy/modems/{modem_id}/traffic-stats?days=30" \
-H "X-Admin-Key: your_admin_key"
{
"modem_id": "11111111-...",
"carrier": "lifecell",
"summary": {
"total_requests": 45000,
"total_bytes_gb": 12.5,
"success_rate": 99.8,
"avg_requests_per_day": 1500
},
"daily_stats": [
{"date": "2026-01-05", "requests": 1200, "bytes_mb": 350, "rotations": 24}
]
}
Get Traffic Summary for All Modems
curl -X GET "https://spideriq.ai/api/v1/admin/proxy/traffic-stats/summary?days=30" \
-H "X-Admin-Key: your_admin_key"
Auto-Rotation Schedules (v2.24.0)
Set up automatic IP rotation on a schedule for all modems.
Create Schedule
Rotate all modems at a location every 60 minutes:
curl -X POST "https://spideriq.ai/api/v1/admin/proxy/schedules" \
-H "X-Admin-Key: your_admin_key" \
-H "Content-Type: application/json" \
-d '{
"location_id": "33333333-...",
"interval_minutes": 60,
"rotation_method": "reconnect"
}'
Or for a specific modem:
curl -X POST "https://spideriq.ai/api/v1/admin/proxy/schedules" \
-H "X-Admin-Key: your_admin_key" \
-H "Content-Type: application/json" \
-d '{
"modem_id": "11111111-...",
"interval_minutes": 30,
"rotation_method": "reconnect"
}'
List Schedules
curl -X GET "https://spideriq.ai/api/v1/admin/proxy/schedules" \
-H "X-Admin-Key: your_admin_key"
Delete Schedule
curl -X DELETE "https://spideriq.ai/api/v1/admin/proxy/schedules/{schedule_id}" \
-H "X-Admin-Key: your_admin_key"
Best Practices
Rotate IPs strategically
- Rotate before starting a new scraping session
- Rotate if you receive rate-limit responses
- Don't rotate too frequently (carriers may throttle)
Distribute load across modems
- Use different modems for different target sites
- Balance requests across available proxies
- Monitor per-modem request counts
Handle connection drops gracefully
- IP rotation briefly disconnects the modem
- Implement retry logic in your code
- Check
is_healthybefore using a modem
Mix carriers for diversity
- Different carriers have different IP pools
- Some sites may block specific carrier ranges
- Having multiple carriers provides redundancy
Troubleshooting
Proxy not responding
- Check modem status:
GET /admin/proxy/modems - Verify WireGuard VPN is connected
- Check signal strength (should be >40%)
- Try rotating the IP
Slow connection
- Check signal strength
- Verify network type (LTE preferred)
- Try a different modem/carrier
- Check if carrier is throttling
Same IP after rotation
- Wait 30+ seconds for command to complete
- Try
airplanemethod instead ofreconnect - Some carriers reuse IPs - wait longer between rotations