How to Manage Proxy Sub-Users and Rotate Credentials
Proxy sub user management for teams: what to demand from a provider before you buy, how many credentials you need, and a zero-downtime rotation runbook.

Proxy sub-user management is a purchasing decision before it is an operations one. If the plan you buy hands you one username and one password for the whole company, you inherit a shared secret nobody can rotate without breaking somebody's job, and no way to answer "which team burned the concurrency last night". This guide gives you the questions to ask at checkout, a sizing model for how many credentials you actually need, and a rotation runbook that does not take your scrapers down.
The Buying Decision in One Table
Most buyers do not need every feature a vendor lists on its account-management page. Find your row, then ask only for what it names.
| Your situation | What you actually need | What to confirm before paying |
|---|---|---|
| One developer, one scraper | One credential pair, one whitelist slot | Nothing exotic. Do not pay a higher tier for team features. |
| One team, 3 to 8 jobs | Separate credentials per job, plus a spare | Are sub-users included in the plan, or billed per seat? |
| Several internal teams on one contract | Sub-users with per-user usage reporting | Is usage attributed per credential, and how often does it refresh? |
| Agency running client workloads | Sub-users with enforceable per-user caps | Can caps be set in hard numbers, and can you provision by API? |
| Anything inside an audit boundary | Creation, revocation, and an audit trail | How fast does revocation actually take effect? |
The most common overspend in this category is buying a higher tier for "team features" when the real requirement was three credential pairs and a naming convention. The most common underspend is running an entire company off one shared login because the plan never offered anything else, then discovering at rotation time that eleven services hold the same secret.
What a Sub-User Actually Is
Three things get conflated in vendor marketing. Separating them tells you what a sub-user can and cannot do for you.
| Concept | What it controls | Scope on most plans |
|---|---|---|
| Credential (sub-user) | Identity. Who is making the request. | Per user, plentiful on plans that support it |
| Concurrency (threads) | Capacity. How many requests run at once. | Pooled account-wide unless the vendor supports per-user caps |
| Whitelist slot | Network access. Which source IPs may connect without a password. | Account-wide, and strictly limited by plan |
Read the middle row twice, because it is the assumption that burns teams. Creating ten sub-users does not multiply your concurrency. On a plan sold with 250 threads, ten sub-users share those 250 threads unless the provider lets you cap each one. If your reason for wanting sub-users is more capacity, you need a bigger plan, not more usernames. Our explainer on concurrent connections in proxies covers how that pool is metered.
What a sub-user does give you is four things that matter: blast radius, attribution, revocation, and least privilege. Each credential can be switched off on its own, each one shows up separately in usage reporting, each one can be scoped to the proxy types a job legitimately needs, and a leaked one costs you a single job instead of the whole estate. The mechanics of the credential itself are unchanged. It is the same username:password pair sent in the same Proxy-Authorization header, as covered in how proxy authentication works.
Scraping at scale? Skip the blocks.
Fast, unblockable datacentre proxies with unlimited bandwidth.
Nine Questions to Ask Before You Pay
Send these to sales, in writing, before the card goes in. The answers separate providers far more sharply than pool-size claims do.
| # | Question | Why it matters | Answer that should worry you |
|---|---|---|---|
| 1 | Are sub-users included, or billed per seat? | Per-seat billing turns basic hygiene into a line item | "Contact us for team pricing" with no number attached |
| 2 | Is there a hard cap on sub-user count? | A low cap forces credential sharing | A cap at or below your job count |
| 3 | Can I set per-user limits on bandwidth, requests, or threads? | Without caps, one runaway job eats the plan | "All users share the account pool", with no controls |
| 4 | Is usage reported per sub-user, and how fresh is it? | Daily rollups cannot catch a leak in progress | Reporting that exists only at account level |
| 5 | Can I create and revoke by API? | Dashboard clicks do not survive an incident at 3am | Dashboard only, no programmatic route |
| 6 | How quickly does revocation take effect? | A credential that keeps working for an hour is not revoked | "Within the next billing cycle" |
| 7 | Does each sub-user get its own whitelist, or is it account-wide? | Decides whether IP auth is usable per team | Account-wide whitelist with no per-user scoping |
| 8 | Is there an audit log of credential events? | Auditors ask for this by name | No log, or a log you cannot export |
| 9 | Can a sub-user see billing or other users' traffic? | An agency cannot show client A the existence of client B | "Sub-users see the full account dashboard" |
Question 6 is the one people skip and later regret. Ask for the number in seconds, then verify it during the trial: revoke a test credential, then hammer the gateway until it returns 407. If the vendor cannot state the number, assume it is slow.
How Many Credentials You Need
A credential should be the smallest unit you would be willing to switch off without asking permission. That gives you a formula rather than a guess:
credentials = (jobs x environments) + humans doing manual work + 1 break-glass
Worked example for a mid-size price monitoring team: 6 scraping jobs, two environments (production and staging), 2 analysts running ad-hoc pulls, and one break-glass pair kept in the password manager and never deployed. That is (6 x 2) + 2 + 1 = 15 credentials.
| Team shape | Jobs x envs | Humans | Break-glass | Total credentials |
|---|---|---|---|---|
| Solo developer | 2 x 1 | 0 | 1 | 3 |
| Small team | 4 x 2 | 1 | 1 | 10 |
| Mid-size data team | 6 x 2 | 2 | 1 | 15 |
| Agency, 5 clients | 10 x 2 | 3 | 1 | 24 |
Fifteen credentials sounds like a lot until the first incident, when the difference between pausing one credential and pausing the company is the entire point of the exercise. This count is independent of thread count. Sizing threads is a separate calculation driven by request rate and target latency, worked through in our guide to rotating proxies and per-IP request limits.
Naming and the Credential Registry
Random usernames are how a credential ends up orphaned: still active, still billing, and nobody willing to delete it because nobody knows what breaks. Fix that with a naming scheme and a registry file.
Scheme: team-job-env-seq, lowercase, no personal names.
pricing-amazon-prod-01
pricing-amazon-stage-01
seo-serp-prod-01
seo-serp-prod-02
ops-breakglass-01
Then keep an inventory in the repo that owns the scrapers. It holds no secrets, only metadata, so it is safe to commit:
# credentials.yml (metadata only, never the password)
- user: pricing-amazon-prod-01
owner: data-platform
purpose: hourly ASIN price pull
gateway: gateway.sparkproxy.io:11000
created: 2026-07-14
rotate_by: 2026-10-14
secret_ref: vault://proxy/pricing-amazon-prod-01
- user: seo-serp-prod-01
owner: growth
purpose: daily rank tracking
gateway: gateway.sparkproxy.io:11002
created: 2026-08-02
rotate_by: 2026-11-02
secret_ref: vault://proxy/seo-serp-prod-01
The rotate_by field is what turns rotation into a scheduled task instead of a fire drill. A weekly CI check that fails the build when any date falls inside the next 14 days takes an hour to write and removes the whole class of "we forgot" incidents. If you already run scheduled jobs, bolt it onto the same scheduler that runs the scrapers, as described in how to schedule and automate web scrapers.
The Zero-Downtime Rotation Runbook
The reason most teams never rotate is that they picture a hard swap: change the password, restart everything, hope. Do it as an overlap instead. Two credentials are valid at the same time, traffic moves, then the old one dies.
| Step | Action | Elapsed | Rollback |
|---|---|---|---|
| 1 | Create the replacement sub-user in the dashboard or by API | 0 min | Delete it, nothing else changed |
| 2 | Smoke test the new pair against the gateway | 2 min | Stop here, do not proceed |
| 3 | Write the new secret to the vault as `secondary` | 5 min | Remove the key |
| 4 | Deploy, so workers hold both and prefer `primary` | 20 min | Standard deploy rollback |
| 5 | Promote `secondary` to `primary`, config change only | 30 min | Swap the two values back |
| 6 | Watch error rates for one full job cycle | 1 to 24 h | Swap back, the old pair is still live |
| 7 | Revoke the old sub-user, confirm it now returns 407 | after the watch | None needed, and none wanted |
Step 2, the smoke test, is one command:
curl -s -x "http://pricing-amazon-prod-02:NEWPASS@gateway.sparkproxy.io:11000" \
https://api.ipify.org
# prints an egress IP if the credential works
# returns 407 Proxy Authentication Required if it does not
Step 4 is what buys the zero downtime. Workers load both credentials and fall back on an auth failure, so an early revocation or a typo degrades instead of breaking:
import os, requests
GATEWAY = "gateway.sparkproxy.io:11000"
CREDS = [c for c in (os.environ.get("PROXY_PRIMARY"),
os.environ.get("PROXY_SECONDARY")) if c]
def fetch(url, timeout=30):
last = None
for cred in CREDS:
proxy = f"http://{cred}@{GATEWAY}"
try:
r = requests.get(url, proxies={"http": proxy, "https": proxy},
timeout=timeout)
except requests.RequestException as exc:
last = exc
continue
if r.status_code == 407: # dead credential, try the next one
last = r
continue
return r
raise RuntimeError(f"all proxy credentials failed: {last}")
PROXY_PRIMARY and PROXY_SECONDARY hold user:password strings injected from the secrets manager, never from the repo. The same two-credential pattern slots into whatever rotation layer you already run, including the pool logic in how to rotate proxies in Python.
Step 7 deserves its own emphasis. A rotation that never revokes the old credential is not a rotation, it is credential accumulation. Confirm the revocation, and expect a 407 rather than a timeout. If your provider returns something else, check it against our reference on proxy error codes so your monitoring classifies it correctly.
Sensible cadence: every 90 days for production jobs, immediately on any team departure, and immediately on any suspected exposure. Quarterly is frequent enough to keep the runbook warm and rare enough that nobody starts skipping it.
Whitelist Slots Are a Second, Scarcer Budget
Credentials are usually cheap and plentiful. Whitelisted IPs are not, because every provider caps them by plan. Here is how that budget looks on SparkProxy's published datacenter plans, all with unlimited bandwidth and 30 days of validity:
| Plan | Price | Threads | Whitelist slots |
|---|---|---|---|
| Starter | $75/mo | 100 | 5 |
| Core | $140/mo | 250 | 10 |
| Boost | $240/mo | 500 | 15 |
| Plus | $440/mo | 1000 | 25 |
Higher tiers exist for larger concurrency requirements, Pro at 1500 threads and Pro+ at 2000, and those are quoted rather than list priced. Fair usage speed caps run 25, 50, 100, 150, 200, and 250 Mbps up that ladder, with custom arrangements to 1 Gbps. Treat those figures as ceilings, not promised throughput.
Budget the slots deliberately. Put your workers behind a single fixed egress, a NAT gateway or a bastion, and one slot covers an entire cluster. Burn a slot per developer laptop and a five-slot plan is gone before production starts. Ephemeral CI runners are the classic trap, since their public IP changes per run, which makes them a job for username-password auth rather than whitelisting. The trade-offs in both directions are laid out in what IP whitelisting is for proxies.
Gateway details, for the smoke test above: gateway.sparkproxy.io, port 11000 for HTTP and HTTPS, port 11002 for sticky sessions, port 13000 for SOCKS5. If a job needs the same exit IP across a multi-step flow, it belongs on the sticky port, and it wants its own credential so you can reason about it separately. See what a sticky session proxy is for when that applies.
Scraping API Keys Have the Same Problem
If you buy a scraping API instead of raw proxies, the credential is an API key and every rule above still applies, with one addition: keys usually carry a spend limit. A leaked proxy password costs you bandwidth. A leaked API key costs you credits, and credits have a price list.
For reference, SparkProxy's Scraping API bills 1 credit for a plain fetch, 5 for a JavaScript render, and 10 for a screenshot or PDF. Plans run Starter $49 for 250,000 credits and 50 concurrent requests, Growth $99 for 1,000,000 credits and 100 concurrent, Pro $249 for 3,000,000 and 200 concurrent, and Scale $599 for 8,000,000 and 400 concurrent. There are 1,000 free credits with no card, which is enough to rehearse a rotation drill end to end before committing to anything.
Three rules for keys specifically. Give every environment its own key, so a staging leak never touches production credits. Never ship a key to anything a user can open, including browser extensions and mobile apps, because a key in client code is public the moment it ships. And alert on credit burn rate rather than monthly totals, since a stolen key looks exactly like a busy afternoon until the month closes.
When a Credential Leaks
Revoke first. Investigate second. The instinct to work out what happened before touching anything is how a 20 minute incident becomes a weekend.
| Minute | Action |
|---|---|
| 0 to 2 | Revoke the exposed credential. Do not wait for confirmation of misuse. |
| 2 to 10 | Promote the standby credential, or create and deploy a replacement. |
| 10 to 30 | Pull per-user usage for the exposure window, note anything unexplained. |
| 30 to 60 | Find the leak path: repo history, container image layers, CI logs, a screenshot in a ticket. |
| Same day | Rotate anything else that shared the same storage location. |
Proxy credentials leak through boring routes. A hardcoded string in a scraper committed before anyone set up a secrets manager. A Dockerfile ENV line baked into a published image. A CI log that prints the full proxy URL in a debug line. A support ticket screenshot with the password visible in a config panel. Scan for the gateway hostname across your repos and image layers, because a grep for gateway.sparkproxy.io finds every embedded URL in one pass.
Detection is where per-user reporting earns its keep. Unexplained thread saturation on one credential, traffic during hours that job never runs, or requests to targets that job never touches are all visible when usage is attributed per sub-user, and invisible when it is not. That is question 4 on the buying checklist, and it is why the question is on the list. If you also expose proxy access to internal services, the abuse patterns in securing proxy servers against SSRF and proxy abuse are worth reading alongside this.
Mistakes That Cost Teams Money
One credential for everything. The cheapest mistake to avoid and the most expensive to unwind. When it leaks, every job stops at once, and the rotation touches every service you own.
Buying more sub-users to get more throughput. Sub-users partition identity, not capacity. If jobs are queueing, the fix is threads.
Calendar rotation with no revocation test. Teams that rotate quarterly but never verify the old pair is dead usually have a trail of live orphans behind them. Test for the 407.
Whitelisting an office range. A /24 on the allowlist means every device on that network, guests included, can use your plan. Whitelist single addresses you control.
Rotating without a fallback. A hard swap with no secondary credential turns a typo into a full outage. The two-credential pattern above removes that failure mode for the price of one environment variable.
No owner recorded. A credential with no named owning team is a credential nobody will ever dare delete. Put the owner in the registry on day one.
Frequently asked questions
FAQ
No. Sub-users split identity, not capacity. On most plans, including SparkProxy's published tiers, threads are an account-wide pool every credential draws from, so ten sub-users on a 250-thread plan still share 250 threads.
Every 90 days for production jobs is a reasonable default, plus an immediate rotation whenever someone with access leaves, a credential appears in a log or repo, or you see usage you cannot explain. Needing to rotate more often than monthly usually means the process is manual and should be automated instead.
Some providers offer programmatic creation and revocation, others are dashboard only. Ask before buying: if you provision client workloads, or need to revoke during an incident without a human clicking through a UI, an API for credential management is a hard requirement rather than a nice extra.
That depends entirely on the provider, which is why it belongs on the buying checklist. Expect new connections to fail with 407 immediately and established connections to drop within seconds. Verify the real behaviour during a trial rather than trusting the documentation.
Use whitelisting for stable, fixed-egress infrastructure and username-password for anything dynamic. Whitelist slots are capped by plan, so put workers behind one NAT gateway and spend a single slot; ephemeral CI runners and laptops should authenticate with credentials instead.
Three credentials is enough: one for production, one for local and staging work, and one break-glass pair kept offline. That costs nothing on a plan that includes sub-users, and it means a leaked laptop config never touches your production job.
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

How Many Proxies Do I Need for Web Scraping?
How many proxies do I need? Size threads, IPs per target and Mbps from your real scraping volume, then match the number to a plan you should actually buy.

How to Check Proxy IP Fraud Score and Geo Accuracy
Test the pool before you buy. Check a proxy IP fraud score across scoring vendors, verify geolocation on three layers, and set honest pass or fail thresholds.

Enterprise Proxy Procurement: What Security and Legal Will Ask
Buying an enterprise proxy provider? The exact questions security, legal and procurement ask, the answers that pass, and the ones that end the deal.
