Octoparse Proxy Setup: Custom Lists and Switch Interval
Octoparse proxy setup for local runs: the IP:port list format, whitelist auth, how the switch interval meets gateway rotation, and why pagination breaks.
An Octoparse proxy setup looks like a two-field job: tick "Use my own proxies", paste a list, pick a switch interval. Then the local run either refuses to load anything, or it loads page one and quietly falls apart on page four when the login screen comes back. Both failures come from three rules Octoparse documents but most setup guides skip: custom proxies take no password, they only work on your own computer, and Octoparse's switch interval is a different clock from the one inside a rotating gateway. This guide sets up SparkProxy as a custom proxy around those rules, then shows how to keep pagination and logins intact while the IP changes.
Everything about Octoparse here comes from its own documentation, read on 30 October 2026: the help center article "Set up IP Proxies" (last updated 30 July 2026) and the Proxies and IP rotation, Cloud IP pools, Local Extraction and Auto-login pages of the Octoparse docs. The current desktop release in Octoparse's changelog is 10.2. Where we infer behaviour instead of reading it, we say so.
Where the Octoparse proxy settings live
Octoparse has three places that mention proxies, and only two of them touch your scraping traffic.
| Place | Path | What it affects |
|---|---|---|
| Task settings | Open the task > **Task Settings** > **Anti-blocking** > tick **Access website via proxies** | The run itself (Local runs for custom proxies) |
| Editor toolbar | **Proxy** button, upper-right of the task editor | Pages loaded while you build the task; tick **Use the same proxies for task runs** to carry it over |
| Login screen | **Settings** on the Octoparse sign-in window > **Manual proxy configurations** | Signing in to your Octoparse account only |
The login-screen proxy catches people out. The help center says its settings "only apply during the login process" and exist for companies that restrict outbound requests. Putting your scraping proxy there changes nothing about how a task reaches the target site.
Inside Anti-blocking you choose between Use Octoparse proxies, the built-in residential pool billed by traffic, and Use my own proxies, which opens a Configure dialog for your list. The rest of this guide is about the second option, plus the cases where the first one is the only choice.
What a custom proxy list accepts
Octoparse's docs describe the scope of custom proxies as "deliberately narrow", and every item on the list matters:
| Rule | What Octoparse documents | What it means for you |
|---|---|---|
| Protocol | HTTP proxies only | Use an HTTP port. A SOCKS5 endpoint will not work here |
| Format | `IP:port`, address and port separated by a colon | The help center's own example is `58.22.214.29:2318` |
| Authentication | No username/password authentication | Credentials have nowhere to go; the proxy must recognise your computer instead |
| Where it runs | Task editing and Local runs only | A Cloud run never uses your list |
A few proxy vendors publish Octoparse guides that show a host:port:username:password line. Octoparse's own pages say authenticated proxies "are not currently supported", so we don't build on that format. If you try it anyway and it appears to work, confirm the exit IP before trusting it, because a silently ignored proxy and a working one look identical in the task editor.
With no credentials, the practical answer is IP whitelisting: the proxy provider accepts any connection that comes from an address you've registered. Our explainer on IP whitelisting for proxies covers the trade-offs; for Octoparse it's simply the only route that fits the dialog.
Scraping at scale? Skip the blocks.
Fast, unblockable datacentre proxies with unlimited bandwidth.
Enter the SparkProxy gateway in Octoparse
SparkProxy's gateway listens on port 11000 for HTTP/HTTPS with Random Rotation, 11002 for Sticky Sessions, and 13000 for SOCKS5. Octoparse is HTTP-only, so only the first two belong in the dialog.
- Open the task, then Task Settings > Anti-blocking.
- Tick Access website via proxies, then Use my own proxies, then Configure.
- Enter one line:
gateway.sparkproxy.io:11000for independent pages, orgateway.sparkproxy.io:11002for anything with a login or click-through pagination. - Confirm, then click Save in the upper-left corner.
- Start a Local run against a page that prints your IP, such as
https://api.ipify.org, before pointing the task at the real target.
Octoparse documents the format as IP:port and every example it gives is numeric. We have not verified whether the current dialog accepts a hostname. If it rejects gateway.sparkproxy.io, run nslookup gateway.sparkproxy.io in a terminal and paste the address it returns with the same port. We confirmed on 30 October 2026 that the resolved address answers on 11000 and 11002 exactly as the hostname does. The catch is that a pasted address won't follow the gateway if its IP ever changes, so repeat the lookup when connections start failing.
Step 5 is not optional. The Octoparse docs warn that a successful connection test "does not prove the target accepts the IP", and the reverse trap also exists: a typo in the list can leave the task running on your home connection, which is exactly the IP that was blocked.
The switch interval versus gateway rotation
This is where most Octoparse proxy setups go wrong. There are two independent clocks.
Octoparse's clock. Per its docs, when a task starts Octoparse uses a proxy from your list, and "if you set a rotation interval, it switches proxies at that interval while the task runs. Custom proxies are selected from your list." Switching pauses when the task is paused. The docs don't publish the allowed interval values or their unit, so read them in your own dialog rather than trusting a number from a blog.
The gateway's clock. A rotating gateway is one address that hands out many exit IPs behind it. On port 11000, each new connection can leave from a different IP. On port 11002, Sticky Sessions hold one exit IP for five minutes. Octoparse can't see any of this; to Octoparse your entire pool is a single list entry.
Put together, the outcomes look like this:
| Your list | Octoparse switch interval | What the target site actually sees |
|---|---|---|
| 5 static IPs from any provider | 60 (whatever unit your dialog shows) | Octoparse decides: one IP until the interval fires, then the next entry |
| `gateway.sparkproxy.io:11000` | Any value | Fresh IPs on new connections regardless of the interval; Octoparse's switches pick the same entry again |
| `gateway.sparkproxy.io:11002` | Any value | One IP for up to five minutes, then a new one, whatever the interval says |
| 11000 and 11002 mixed in one list | Short | Every switch toggles between "rotate constantly" and "hold an IP". Avoid |
The practical rule: with a gateway, the port is your rotation setting and the Octoparse interval is close to irrelevant. Leave it unset if your version allows that, or set it long. Choosing a good interval for a list of static IPs is its own question, worked through in our guide to picking a proxy rotation interval.
One side effect deserves attention. Octoparse documents that "when configured, Octoparse can switch a User-Agent or clear Cookies when the IP changes." We infer from the docs that "the IP changes" means Octoparse switching list entries, since it has no view of the gateway's exits. So on port 11000 the exit IP changes far more often than Octoparse thinks, and its cookie-clearing rule never lines up with the real IP changes.
Pagination and login breaking when the IP changes
The symptom is specific, and once you've seen it you'll recognise it. The first page or two extract cleanly. Then one of these happens:
- the browser view shows the site's login page in the middle of the run;
- Click to Paginate lands back on page 1, so rows from page 1 appear again in the export;
- the site shows a verification page or "unusual activity" notice after a click, not on the first load;
- detail pages open, but the content is a different region's version of the page.
All four have the same root: the site tied your session (a login cookie, a search token, a cart, a pagination cursor) to the IP that created it, and the next request arrived from a different IP. Octoparse's own rotation table says it plainly for logged-in pages: keep the IP stable, because "an IP change can invalidate a Cookie session or trigger a security check." Its troubleshooting page lists "IP change" as a check when a login reappears.
Fixes, in the order we'd try them:
- Move to port 11002. Sticky Sessions keep one exit IP for five minutes, so a login followed by a few pages of pagination happens on one address. This fixes most cases on its own. Background on how sticky routing works is in what a sticky session proxy is.
- Turn off "clear Cookies when the IP changes" for login tasks. Clearing removes the session, and Octoparse warns that a login-required site may send the task back to its sign-in page.
- Keep each logged-in stretch under five minutes. A task that paginates for twenty minutes will cross several sticky windows. Split it: one task collects listing URLs, a second task opens those URLs as a URL list. URL-list tasks don't depend on a page cursor, so an IP change between items costs nothing.
- Use Auto Login cookies. Octoparse (from version 8.6.8) can save the cookies from a sign-in you perform once. When the session drops, refresh the saved cookies instead of building login clicks into the workflow.
- Use Checkpoint resume after a break. Octoparse 10.2 can resume a supported interrupted local run from saved progress. It validates the checkpoint first and starts fresh if the task changed; scheduled local runs always start fresh.
What a proxy can't fix: an account the site has flagged, a session that expires on a timer regardless of IP, or a site that simply forbids automated access. If the login page returns even on a sticky IP inside a five-minute window, the cause is the session itself, not the network. Our guide to scraping websites behind a login goes deeper on session handling.
Local runs and Cloud runs use different IPs
Where the task runs decides which IP the target sees, and Octoparse's settings are not shared between the two.
| Local run | Cloud run | |
|---|---|---|
| Runs on | Your computer | Octoparse cloud nodes |
| IP the site sees with no proxy | Your own public IP | An Octoparse cloud IP in the selected region |
| Your custom proxy list | Used | Not used |
| Octoparse built-in proxies | Available | Available |
| Public IP Pool | Not applicable | Default or a listed region |
| Cost of the run itself | Free, per the Local Extraction docs | Uses Cloud Extraction resources from your plan |
The Public IP Pool is a region picker, not a proxy service. Octoparse's Cloud IP pools page listed US, UK, Germany, Japan, Australia, France, China, Canada, Brazil, South Korea and United Arab Emirates, plus Default, and states that cloud runs "can use different cloud nodes and IPs within the selected region." So a logged-in Cloud task can also meet the mid-task IP problem above, with no sticky port to fall back on.
This explains a common complaint: "it works locally and fails in the cloud". Locally the task ran on your custom proxy or home IP; in the cloud it ran on a shared Octoparse address your list never touched. Test the two environments separately and compare the screenshot and row count, as Octoparse's troubleshooting page recommends.
Diagnosing a blocked local run, cheapest check first
Work down this list in order. The early checks take seconds and rule out problems no proxy can solve.
| Order | Check | What you see | Can a proxy fix it? |
|---|---|---|---|
| 1 | Open the target in your normal browser on the same computer | Site down, moved, or layout changed | No |
| 2 | Run the curl command from the whitelist section | `curl: (56) CONNECT tunnel failed, response 407` | Yes: whitelist the current public IP |
| 3 | Load `https://api.ipify.org` as the task's first page | Your home IP appears | Yes: the list isn't being used; re-check the setting and Save |
| 4 | Watch the first page of the real run | 403, 429 or "access denied" on page 1 | Often: a new IP helps if the block is on your IP |
| 5 | Note when the block starts | Fine for a while, then 429 or a block page | Partly: per-IP rate limit; Random Rotation spreads it, slower pacing helps more |
| 6 | Look for the login page or page 1 again mid-run | Session lost | Yes, by holding the IP: port 11002, shorter stretches |
| 7 | CAPTCHA or Cloudflare page | Verification challenge | Partly: Octoparse's CAPTCHA and Cloudflare handling is a separate setting |
| 8 | Page loads but content is blank or partial | Slow JavaScript | No: add a wait or wait-for-element |
| 9 | Page is right but fields are empty | Selector no longer matches | No: fix the field in the task |
Two honest caveats. SparkProxy's pool is datacenter IPs, and some sites block datacenter networks outright; on those, rotation through any datacenter pool won't help, and Octoparse's residential built-in proxies are the tool for the job. And rate limits are about behaviour as much as address. If a site blocks you after twenty fast pages, adding a wait between page loads often does more than another hundred IPs. Our guide on how to avoid getting your proxy blocked covers the non-IP signals.
Scheduling, concurrency and cost
A custom-proxy task is a local task, so treat the computer as part of the pipeline.
Scheduling. Octoparse supports local schedules for "cases where Cloud Extraction does not work or where the target website requires a local IP address". Set Maximum runtime in whole minutes so a stuck run is stopped before the next one starts; the docs say it stops the task whether it's running or paused. Disable sleep on the computer, and remember the whitelist: if the public IP changes overnight, every scheduled run fails at the first page.
Storage. Local runs save collected data on the computer. Set an export (CSV or a database) at the end of each run so a later re-run doesn't leave you merging partial files by hand.
Concurrency. SparkProxy plans are sized by concurrent threads, with unlimited bandwidth included, so the number that matters is how many connections Octoparse holds open, not gigabytes. A browser opens several connections per page, and Octoparse's Boost mode runs subtasks in parallel. Measure instead of guessing: start your heaviest task, then run this in PowerShell on the same computer.
(Get-NetTCPConnection -RemotePort 11000,11002 -State Established -ErrorAction SilentlyContinue).Count
Keep the peak comfortably under your plan's thread count. Our explainer on concurrent connections in proxies shows how the count works.
Cost. The two proxy routes inside Octoparse bill on different units. Octoparse's built-in proxies cost $3 per GB of page-loading traffic (USD, Octoparse docs, read 30 October 2026), need at least $3 in credits, and are non-refundable; Octoparse's own testing puts 1 GB at roughly 500 pages, which it notes varies with images, scripts and retries. By that estimate, 50,000 pages a month would be about 100 GB, or about $300. SparkProxy starts from $75/month for 100 threads with unlimited bandwidth, so a heavier page doesn't move the bill. There's a 24-hour free trial with no credit card, enough to run the exit-IP script and one real task, and 3, 6 and 12 month terms take 5%, 10% and 15% off. The trade-off is the one in the table above: the flat-rate route only works for Local runs.
Checking an export for restart damage
When pagination silently resets, the run still "completes" and the export just contains repeats. This short script reads an Octoparse CSV export and reports duplicate rows and the first row where a repeat begins, which is usually where the IP changed.
import csv
import sys
from collections import Counter
path = sys.argv[1]
key = sys.argv[2] if len(sys.argv) > 2 else "Title"
with open(path, newline="", encoding="utf-8-sig") as f:
rows = list(csv.DictReader(f))
if not rows:
sys.exit("export is empty")
if key not in rows[0]:
sys.exit(f"column {key!r} not found; columns are {list(rows[0])}")
values = [row[key].strip() for row in rows]
counts = Counter(v for v in values if v)
repeated = {v: n for v, n in counts.items() if n > 1}
print(f"{len(rows)} rows, {len(counts)} unique {key} values, {len(repeated)} repeated")
first_seen = {}
for i, value in enumerate(values):
if value and value in first_seen:
print(f"row {i + 2} repeats row {first_seen[value] + 2}: likely restart point")
break
first_seen.setdefault(value, i)
Run it as python check_export.py export.csv "Product URL", naming whichever column should be unique. Row numbers match a spreadsheet, with the header as row 1. If the first repeat lands at a page boundary, look at the run log around that time for a login page or a proxy switch.
When the job has to run without your computer
If the task must run unattended in the cloud, your own proxy list is off the table. That leaves three paths:
- Octoparse Cloud with built-in proxies, billed per GB as above.
- Octoparse Cloud with the Public IP Pool set to a region, when the problem is location rather than blocking.
- Move that fetch to an API. For jobs that are really "download these URLs", SparkProxy's Scraping API runs the request on its side. Each request is independent: the docs state that "cookies and login state do not persist across separate API requests", so this suits URL lists and numbered page URLs, not click-through pagination behind a login.
A minimal version for numbered pages, using the API's JSON envelope. The envelope's body is base64 and has to be decoded before you look for anything in the HTML:
import base64
import requests
API = "https://scrape.sparkproxy.io/api/v1"
HEADERS = {"X-API-Key": "YOUR_API_KEY"}
LISTING = "https://www.sparkproxy.io/blog?page={page}"
def fetch(page: int) -> str:
params = {
"url": LISTING.format(page=page),
"render_js": "false",
"proxy_type": "premium",
"json_response": "true",
}
resp = requests.get(API, params=params, headers=HEADERS, timeout=90)
resp.raise_for_status()
envelope = resp.json()
print(page, envelope["status_code"], envelope["credits_used"], "credits")
return base64.b64decode(envelope["body"]).decode("utf-8", errors="replace")
for page in range(1, 4):
html = fetch(page)
if "<article" not in html:
print(f"page {page}: no articles found, stopping")
break
Pricing from the API docs: render_js defaults to true and costs 5 credits, so setting it to false makes each call a 1-credit plain fetch; country_code adds 5 credits. New accounts get 1,000 free credits. Whether this beats a managed proxy setup depends on the job, which our comparison of a scraping API versus self-managed proxies works through.
Frequently asked questions
FAQ
No. Octoparse's documentation says custom proxies are HTTP only, entered as IP:port, with no username/password authentication. Use a provider that supports IP whitelisting and register the public IP of the computer that runs Octoparse.
No. Octoparse states that your own proxies work for task editing and Local runs only, and Cloud runs are compatible only with Octoparse's built-in proxies. For a cloud region without paid proxy traffic, use the Public IP Pool in the Cloud Run Settings.
With a single gateway entry, the interval barely matters, because the gateway rotates behind one address that Octoparse can't see into. Pick the behaviour with the port (11000 for Random Rotation, 11002 for Sticky Sessions) and leave the interval unset or long.
The site tied its pagination or login state to the IP that started the session, and the next request came from another IP. Switch to Sticky Sessions on port 11002, stop clearing cookies on IP change, and split long paginated tasks into a URL collection task plus a URL-list task.
A working connection only proves the proxy accepts you. The site may block datacenter networks, rate-limit by behaviour, or require a CAPTCHA, and Octoparse notes that a successful connection test does not prove the target accepts the IP. Add waits between page loads, then consider residential IPs for sites that reject datacenter ranges.
Not for custom proxies. Octoparse documents HTTP proxies only, so use SparkProxy's HTTP ports 11000 or 11002 in the list and keep SOCKS5 port 13000 for other tools.
Get 20% off your first month
Premium datacentre proxies with unlimited bandwidth. Use the code at checkout.
Save up to 15% more on quarterly, half-yearly and yearly plans
Related articles
ScrapeBox Proxies: Load, Test, and Harvest Google
Set up ScrapeBox proxies that keep harvesting: the IP:PORT:USER:PASS format, loading a rotating gateway, what the Google test checks, and safe connections.
Competitors Bidding on My Brand Name? Track Them
Competitors bidding on my brand name? Schedule brand SERP captures per country, parse advertiser domains, save screenshot evidence and alert on new bidders.
How to See Google Ads in Other Countries Without Clicking
How to see Google ads in other countries: Ads Preview first, then a clean browser behind a country proxy, no clicks, and a daily script that logs ad copy.
