IPLoop Python SDK
Residential proxy SDK — one-liner web fetching through millions of real IPs.
pip install iploop-sdk
Quick Start
from iploop import IPLoop
# New format (v2): iploop_{short}_{secret} — single key, no customer_id needed!
ip = IPLoop("iploop_fd80eb86_72dabf65a3e44459423ade99a5e4a83e133c9125")
# Fetch any URL through a residential proxy
response = ip.get("https://httpbin.org/ip")
print(response.text)
# Target a specific country
response = ip.get("https://example.com", country="DE")
# POST request
response = ip.post("https://api.example.com/data", json={"key": "value"})
Smart Headers
Headers are automatically matched to the target country — correct language, timezone, and User-Agent:
ip = IPLoop("key", country="JP") # Japanese Chrome headers automatically
Sticky Sessions
Keep the same IP across multiple requests:
s = ip.session(country="US", city="newyork")
page1 = s.fetch("https://site.com/page1") # same IP
page2 = s.fetch("https://site.com/page2") # same IP
Auto-Retry
Failed requests (403, 502, 503, timeouts) automatically retry with a fresh IP:
# Retries up to 3 times with different IPs
response = ip.get("https://tough-site.com", retries=5)
Async Support
import asyncio
from iploop import AsyncIPLoop
async def main():
async with AsyncIPLoop("key") as ip:
results = await asyncio.gather(
ip.get("https://site1.com"),
ip.get("https://site2.com"),
ip.get("https://site3.com"),
)
for r in results:
print(r.status_code)
asyncio.run(main())
Support API
ip.usage() # Check bandwidth quota
ip.status() # Service status
ip.ask("how do I handle captchas?") # Ask support
ip.countries() # List available countries
Data Extraction
Auto-extract structured data from popular sites:
# eBay — extract product listings
products = ip.ebay.search("laptop", extract=True)["products"]
# [{"title": "MacBook Pro 16", "price": "$1,299.00"}, ...]
# Nasdaq — extract stock quotes
quote = ip.nasdaq.quote("AAPL", extract=True)
# {"price": "$185.50", "change": "+2.30", "pct_change": "+1.25%"}
# SERP / Google-compatible search results
# Use this preset instead of raw google.com/search to avoid verification pages.
results = ip.serp.search("best proxy service", country="US")["results"]
# [{"title": "...", "url": "..."}, ...]
# Backward compatible alias: ip.google.search(...) now uses the SERP-safe path by default.
results = ip.google.search("best proxy service", extract=True)["results"]
# Twitter — extract profile info
profile = ip.twitter.profile("elonmusk", extract=True)
# {"name": "Elon Musk", "handle": "elonmusk", ...}
# YouTube — extract video metadata
video = ip.youtube.video("dQw4w9WgXcQ", extract=True)
# {"title": "...", "channel": "...", "views": 1234567}
Smart Rate Limiting
Built-in per-site rate limiting prevents blocks automatically:
# These calls auto-delay to respect site limits
for q in ["laptop", "phone", "tablet"]:
ip.ebay.search(q) # 15s delay between requests
LinkedIn (New)
ip.linkedin.profile("satyanadella")
ip.linkedin.company("microsoft")
Concurrent Fetching (v1.3.0)
Batch fetch up to 25 URLs in parallel:
# Concurrent fetching (safe up to 25)
batch = ip.batch(max_workers=10)
results = batch.fetch_all([
"https://ebay.com/sch/i.html?_nkw=laptop",
"https://ebay.com/sch/i.html?_nkw=phone",
"https://ebay.com/sch/i.html?_nkw=tablet"
], country="US")
# Multi-country comparison
prices = batch.fetch_multi_country("https://ebay.com/sch/i.html?_nkw=iphone", ["US", "GB", "DE"])
Chrome Fingerprinting (v1.3.0)
Every request auto-applies a 14-header Chrome desktop fingerprint — the universal recipe from Phase 9 testing:
# Auto fingerprinting — no setup needed
html = ip.fetch("https://ebay.com", country="US") # fingerprinted automatically
# Get fingerprint headers directly
headers = ip.fingerprint("DE") # 14 headers for German Chrome
Stats Tracking (v1.3.0)
# After making requests...
print(ip.stats)
# {"requests": 10, "success": 9, "errors": 1, "total_time": 23.5, "avg_time": 2.35, "success_rate": 90.0}
Debug Mode
ip = IPLoop("key", debug=True)
# Logs: GET https://example.com → 200 (0.45s) country=US session=abc123
Exceptions
from iploop import AuthError, QuotaExceeded, ProxyError, TimeoutError
try:
response = ip.get("https://example.com")
except QuotaExceeded:
print("Upgrade at https://iploop.io/pricing")
except ProxyError:
print("Proxy connection failed")
except TimeoutError:
print("Request timed out")
Links
- Website: https://iploop.io
- Docs: https://docs.iploop.io
- Dashboard: https://iploop.io/dashboard
Release files for iploop-sdk 1.8.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| iploop_sdk-1.8.1.tar.gz | 62.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| iploop_sdk-1.8.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 163.3 kB
Release files / iploop_sdk-1.8.1.tar.gz
| Download URL | iploop_sdk-1.8.1.tar.gz |
|---|---|
| Size | 62.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
28aecaad64d472a7f8f4522f80f75a9e69fc7d5d7622be499f17dcc783647cc9
|
|
BLAKE2b-256 checksum How to use checksums |
2c2c872cf05505333487a1ea402baf8f0b7c5f88d5ebe9fca8f4a73be4e095c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / iploop_sdk-1.8.1-py3-none-any.whl
| Download URL | iploop_sdk-1.8.1-py3-none-any.whl |
|---|---|
| Size | 100.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bfbc7682ff98db2d5a0a48eeea316cf73902e59dbf4f9adc60891796fb640e92
|
|
BLAKE2b-256 checksum How to use checksums |
85231b7e7b53d1442d23b70ac3d1c278ee7f6203b141872a382568b0389a50d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|