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 before starting a new scraping session
  • Rotate if you receive rate-limit responses
  • Don’t rotate too frequently (carriers may throttle)
  • Use different modems for different target sites
  • Balance requests across available proxies
  • Monitor per-modem request counts
  • IP rotation briefly disconnects the modem
  • Implement retry logic in your code
  • Check is_healthy before using a modem
  • Different carriers have different IP pools
  • Some sites may block specific carrier ranges
  • Having multiple carriers provides redundancy

Troubleshooting

  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
  1. Check signal strength
  2. Verify network type (LTE preferred)
  3. Try a different modem/carrier
  4. Check if carrier is throttling
  1. Wait 30+ seconds for command to complete
  2. Try airplane method instead of reconnect
  3. Some carriers reuse IPs - wait longer between rotations