MIX-Basic
8,000 IPs · 500–900 threads
from $50 a month
One project: a crawl of up to a hundred thousand URLs, keyword collection, a weekly link check.
A crawler walks a site in hundreds of threads, and sooner or later any server answers it with a 429. A MIX pool up to 25,000 IPs spreads those threads across different addresses, so Screaming Frog, Netpeak Spider, A-Parser and Key Collector run at full speed instead of one thread with pauses. A test hour costs $1.

Pick a package, then move the period and thread sliders. Threads here are the same threads you set in your crawler: 1,200 threads means 1,200 URLs the tool pulls at once. The slider sits on that value.
MIX-Basic covers the audit of one project: a crawl of 50–100 thousand URLs in Screaming Frog or Netpeak Spider, keyword collection in Key Collector, a one-off broken-link check. 8,000 addresses lift the server limits, and 500 threads match what people usually set in a crawler.
MIX-Business is built for an SEO department or an agency: several projects a week, Sitebulb and SEO PowerSuite side by side, A-Parser for suggestions and SERPs, ScrapeBox for bulk checks. 16,000 addresses and 1,200 threads by default: that is what goes into a crawler when the crawl has to finish in an evening.
MIX-Elite is made for your own service or a large in-house team: millions of URLs per crawl, logs and crawling at the same time, custom indexation and pagination checkers. A pool of 25,000 addresses and threads up to 9,900 — no other package reaches those numbers.
A thread is one simultaneous connection. More threads — more done in the same time.
$50 for a monthno extra charge for threads
save $250 vs. dailyA thread is one simultaneous connection. More threads — more done in the same time.
$100 for a month+ $20 for threads
save $420 vs. dailyA thread is one simultaneous connection. More threads — more done in the same time.
$150 for a monthno extra charge for threads
save $450 vs. dailyAccess is tied to the computer or server itself, so in the proxy settings of Screaming Frog and Netpeak the login and password fields stay empty. You can register up to ten such machines.
It returns a text file in address-and-port form, one proxy per line. Screaming Frog and Netpeak expect the same list but as a file: save the response to .txt and point the settings at it.
A-Parser and ScrapeBox re-read the URL themselves and take every address from it. Key Collector, Sitebulb and SEO PowerSuite read a list file, so refresh it with a script every 10 minutes, example below.
500 on Basic, 1,000 on Business, 1,500 on Elite without add-ons. Every port is a separate proxy and one crawler thread occupies one port: setting more threads in Screaming Frog than you have ports buys nothing.
SOCKS5 is what Screaming Frog, A-Parser, ZennoPoster and ScrapeBox take. Netpeak Spider, Key Collector and SEO PowerSuite go over HTTP(S). Both protocols sit on the same port, you only switch it in the tool.
This is how the pool plugs into an audit of your own. The script reads addresses from urls.txt, pulls each page through a random proxy and stores the status code, redirect, title, h1, description, canonical and robots in audit.csv — the same things a crawler shows, only on your rules. Replace PROXY_LIST_URL_FROM_DASHBOARD with the URL from your dashboard.
# pip install requests[socks]
import csv, random, re, time, requests
from concurrent.futures import ThreadPoolExecutor
PROXY_LIST_URL = "PROXY_LIST_URL_FROM_DASHBOARD"
REFRESH_SEC = 600
THREADS = 1200
HEADERS = {"User-Agent": "Mozilla/5.0 (compatible; SeoAudit/1.0)", "Accept-Language": "en-US,en;q=0.9"}
_pool, _loaded = [], 0
def pool():
global _pool, _loaded
if time.time() - _loaded > REFRESH_SEC:
text = requests.get(PROXY_LIST_URL, timeout=15).text
_pool = [line.strip() for line in text.splitlines() if ":" in line]
_loaded = time.time()
return _pool
def first(pattern, html):
match = re.search(pattern, html, re.S | re.I)
return re.sub(r"\s+", " ", re.sub(r"<[^>]+>", " ", match.group(1))).strip() if match else ""
def audit(url, tries=3):
for _ in range(tries):
proxy = random.choice(pool())
try:
r = requests.get(url, headers=HEADERS, timeout=20, allow_redirects=False,
proxies={"http": f"socks5h://{proxy}", "https": f"socks5h://{proxy}"})
except requests.RequestException:
continue
html = r.text if "html" in r.headers.get("Content-Type", "") else ""
return {
"url": url,
"status": r.status_code,
"redirect": r.headers.get("Location", ""),
"title": first(r"<title[^>]*>(.*?)</title>", html),
"h1": first(r"<h1[^>]*>(.*?)</h1>", html),
"description": first(r'<meta[^>]+name="description"[^>]+content="([^"]*)"', html),
"canonical": first(r'<link[^>]+rel="canonical"[^>]+href="([^"]*)"', html),
"robots": first(r'<meta[^>]+name="robots"[^>]+content="([^"]*)"', html),
}
return {"url": url, "status": 0, "redirect": "", "title": "", "h1": "",
"description": "", "canonical": "", "robots": ""}
urls = [line.strip() for line in open("urls.txt") if line.strip()]
fields = ["url", "status", "redirect", "title", "h1", "description", "canonical", "robots"]
with open("audit.csv", "w", newline="", encoding="utf-8") as out:
writer = csv.DictWriter(out, fieldnames=fields, delimiter=";")
writer.writeheader()
with ThreadPoolExecutor(THREADS) as executor:
for row in executor.map(audit, urls):
writer.writerow(row)
print(row["status"], row["url"], row["title"][:60])
8,000 IPs · 500–900 threads
from $50 a month
One project: a crawl of up to a hundred thousand URLs, keyword collection, a weekly link check.
16,000 IPs · 1,000–1,400 threads
from $100 a month
An agency or SEO department: several crawlers at once, suggestion harvesting and bulk checks on one pool.
25,000 IPs · 1,500–9,900 threads
from $150 a month
Your own service or a large in-house team: millions of URLs per crawl, threads up to 9,900, around the clock.
import csv, io, requests
CSV_URL = "PROXY_LIST_URL_FROM_DASHBOARD.csv"
TAKE = 1200
OUT_FILE = "proxies_fast.txt"
text = requests.get(CSV_URL, timeout=15).text
rows = list(csv.DictReader(io.StringIO(text), delimiter=";"))
rows.sort(key=lambda r: int(r["speed"]), reverse=True)
picked = [f"{r['ip']}:{r['port']}" for r in rows[:TAKE]]
with open(OUT_FILE, "w") as f:
f.write("\n".join(picked) + "\n")
print(f"{len(picked)} proxies saved to {OUT_FILE}")
The rest about the service is collected in the general FAQ, every package with prices is on the home page.
Run your crawler on the pool for an hour, look at the crawl speed, then pick a period. On packages from 3 days the remainder goes back to your balance.
Test proxies for $1