Skip to main content

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

SettingValue
ProtocolHTTP/HTTPS
HostWireGuard IP (e.g., 10.100.0.2)
Ports3101-3104 (one per modem)
AuthNone (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

MethodSpeedDescription
reconnect~10sDrop and reconnect data connection
airplane~30sToggle airplane mode (more reliable)
ussdVariesSend 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 %QualityNotes
80-100%Excellent4-5 bars, optimal for scraping
60-79%Good3 bars, reliable
40-59%Fair2 bars, may have latency
0-39%PoorConsider 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_healthy before 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
  1. Check modem status: GET /admin/proxy/modems
  2. Verify WireGuard VPN is connected
  3. Check signal strength (should be >40%)
  4. Try rotating the IP
Slow connection
  1. Check signal strength
  2. Verify network type (LTE preferred)
  3. Try a different modem/carrier
  4. Check if carrier is throttling
Same IP after rotation
  1. Wait 30+ seconds for command to complete
  2. Try airplane method instead of reconnect
  3. Some carriers reuse IPs - wait longer between rotations