15% off your first purchase with code WELCOME15, up to 25 GB.

See pricing

Use case · Price monitoring

Monitor prices from inside each market.

Storefronts price by the visitor's country, sometimes by city. A monitor on one server reports one region's prices, then trips a per-IP limit halfway through the sweep. Put the market in the username, take a fresh ISP exit for every check, and pay by the gigabyte. A check is one compressed HTML response, so our lowest-priced pool carries most of the schedule.

Pay per GB · No subscription · Prices in EUR, excl. VAT

sku 4471, one request in 7 marketsillustration
GET https://shop.example/p/4471
-x proxy.arcproxies.io:8000
-U USERNAME_pool-arc_country-{cc}:PASSWORD
  1. ├─_country-de49.90 EURfree shipping−10% this week
  2. ├─_country-fr52.00 EUR+ 4.99 shipping
  3. ├─_country-it51.50 EUR+ 3.90 shipping
  4. ├─_country-es47.90 EURfree from 50.00bundle offer
  5. ├─_country-nl49.90 EURfree shipping
  6. ├─_country-gb42.00 GBP+ 3.95 shipping
  7. └─_country-us54.00 USD+ 6.00 shippingships in 5 days
7 checks · 7 connections · 7 exits · ≈ 0.84 MB at ~120 KB each
Illustration — fictional product, fictional prices. Between rows, the only thing that changes is the country token in the username.
€0.75
per GB on ARC Basic, excl. VAT
€0.082
per 1,000 checks at 120 KB — worked example below
185+
countries, city targeting
Never
expires — buy for the peak season

The problem

Why the number from your server is the wrong number

A price check is a small request, and small requests fail quietly. These failures produce a wrong price rather than an error, which is worse: nothing alerts.

The storefront prices by the IP's country

Many storefronts resolve the visitor's country from the IP before they render a price: currency, whether tax is included, the local promotion, the shipping tier. A server in Frankfurt sees the German storefront and nothing else. The number you want is the one a shopper in the target market gets, so the request has to leave from that market.

Hosting ranges get a different page

Well-known datacenter ranges are often served a reduced page, a consent wall or a challenge instead of the product page. The parser finds no price, or finds a placeholder, and the run logs a 200. ISP and residential addresses are the ranges shoppers browse from.

A sweep from one IP trips a per-IP limit

Twenty thousand product pages from one address in an hour is exactly the pattern a rate limiter is built to notice. After the limit, every check returns an error page or an empty template until it resets. One new connection per check on a rotating username spreads the same sweep across many addresses, each making a handful of requests.

Shipping is computed for a location

Delivery cost and promised dates depend on where the visitor is, and often on a postcode entered one request earlier. That state lives in a session tied to one visitor, so rotating mid-flow resets it. Hold one exit for the flow with a sticky session, then let it go.

Paginated listings lose their place

Category walks, sort orders and filters are often bound to a session. When the exit changes between page 3 and page 4, some sites jump back to page 1 or reshuffle the order, and you double-count or skip products. Same fix: one IP per listing walk, a new one for the next.

Every check billed at residential rates

A compressed product page is tens to a few hundred kilobytes. Paying residential per-GB prices for all of them is the largest avoidable line in a monitoring budget. Run the schedule on the ISP pool and move only the domains that need residential exits.

Setup

Recommended setup

Run the whole schedule on ARC Basic, rotating, with the market in the username. Move a domain to ARC Fast only when ARC Basic's results for that domain stop being usable — and move that domain alone, not the schedule.

PlanRoleSessionTargetingPrice
ARC Basic
Rotating ISP
Default for the schedule
HTML checks are small and frequent, which is what the ISP pool is priced for. One connection per check spreads a catalogue sweep across the pool.
Rotating, one connection per checkCountry; city where prices differ inside a country
€0.75 / GB
€0.59 at 1 TB (−21%)
ARC Fast
Rotating residential
Per-domain fallback
For large marketplaces with strict rate limits. Move a domain when, over several days, its checks on ARC Basic keep ending in 403 or 429 responses, challenge pages, or a 200 with no price in it — not after one bad run.
Rotating; sticky for multi-page flowsCountry, optionally city
€2.00 / GB
€1.12 at 1 TB (−44%)
ARC Ultra
Premium residential
Only where it pays
For the rare domain where ARC Fast still fails and the success rate is worth more than the price difference. Measure it per domain; most catalogue monitors never need it.
Rotating or stickyCountry, optionally city
€3.50 / GB
€2.17 at 1 TB (−38%)
ARC Basic — default for the schedule
http://USERNAME_pool-arc_country-de:PASSWORD@proxy.arcproxies.io:8000
ARC Fast — per-domain fallback
http://USERNAME_pool-arcfast_country-de:PASSWORD@proxy.arcproxies.io:8000

Prices are list prices in EUR, excl. VAT. Volume discounts apply automatically at checkout — full ladder on the pricing page.

Sessions

Rotate by default. Hold an IP only for a flow.

Three usernames on the same plan and the same credentials cover a whole monitoring schedule. They differ only in whether a _session- handle is present and how many minutes it asks for.

Single product page

Rotating — no handle

Any check that stands on its own: a product page, a search result, a stock flag. No session token, so nothing is held. Each new connection can get a different exit and a reused one keeps its exit, so turn keep-alive off in your client and let every check open its own connection.

single product page
http://USERNAME_pool-arc_country-de:PASSWORD@proxy.arcproxies.io:8000

Paginated category listing

Sticky — one exit for the whole walk

Sort order, filters and the page counter are often bound to a session. Hold one IP from page 1 to the last page, then use a new handle for the next category. Any string works as a handle; _sesstime- is in minutes, and ten covers most walks.

paginated category listing
http://USERNAME_pool-arc_country-de_session-k3f9a1x2_sesstime-10:PASSWORD@proxy.arcproxies.io:8000

Shipping estimate by postcode

Sticky, short, city-targeted

The postcode form and the page that shows the estimate have to come from one visitor. Some storefronts also pre-select a delivery region from the IP, so a city token keeps the exit consistent with the postcode you enter. Five minutes is plenty for two or three requests.

shipping estimate by postcode
http://USERNAME_pool-arc_country-gb_city-manchester_session-k3f9a1x2_sesstime-5:PASSWORD@proxy.arcproxies.io:8000

Code

One snippet per tool

Each one uses the tool's documented proxy option, with the market in the username and keep-alive turned off where a sweep would otherwise reuse one exit. Replace USERNAME and PASSWORD with the credentials from your dashboard.

check_prices.py
import httpx# {cc} is the market. No _session- token, so each new connection can get a# different exit in that country.BASIC = "http://USERNAME_pool-arc_country-{cc}:PASSWORD@proxy.arcproxies.io:8000"FAST = "http://USERNAME_pool-arcfast_country-{cc}:PASSWORD@proxy.arcproxies.io:8000"# Domains whose results on ARC Basic stopped being usable. Only these pay# the residential rate; everything else stays on the ISP pool.ON_FAST = {"marketplace.example"}# Keep-alive off: each check opens its own connection, so it can get its own exit.NO_REUSE = httpx.Limits(max_keepalive_connections=0)clients: dict[str, httpx.Client] = {}def fetch(url: str, cc: str) -> str:    proxy = (FAST if httpx.URL(url).host in ON_FAST else BASIC).format(cc=cc)    if proxy not in clients:        clients[proxy] = httpx.Client(proxy=proxy, limits=NO_REUSE, timeout=20.0)    r = clients[proxy].get(url)    r.raise_for_status()    return r.text   # the document only — no images, scripts or fontsfor sku in ["4471", "4472", "4473"]:    for cc in ["de", "fr", "it"]:        html = fetch(f"https://shop.example/p/{sku}", cc)        save(sku, cc, parse_price(html))   # your parser

httpx takes proxy= (the older proxies= argument is gone since 0.28). With requests, call requests.get(url, proxies={"http": proxy, "https": proxy}) without a Session: each call opens its own connection, and a proxy passed on the call is not overridden by HTTP_PROXY on the host.

Before you schedule

  • Request the document only. The price is in the HTML; images, scripts and fonts are most of a page's weight.
  • Ask for compression. The gateway meters the bytes that pass through it, and a gzipped page is a fraction of the raw HTML.
  • One connection per check. A client that reuses connections reuses the exit IP with them.
  • One _session- handle per listing walk or postcode flow; none for single pages.
  • Log failures per domain. Move a domain to ARC Fast from that log, one at a time.
  • Space checks out across the day rather than firing the whole catalogue at once.

The API reference covers endpoints, balance and usage per plan, so a scheduler can check what is left before a sweep.

Works with anything that takes a proxy URL

  • Python requests / httpx
  • Scrapy
  • Node.js
  • changedetection.io
  • n8n
  • curl
  • Go net/http
  • Playwright
  • Puppeteer

Illustration

What watching 5,000 products in 7 markets costs

An illustration with round numbers — your pages, payloads and retry rate will differ. The arithmetic is the real price ladder.

Assumptions

Products watched
5,000
Markets per product
7
Checks per product and market, per day
4
Per check, compressed, incl. handshake
120 KB
Retries
+10%
Checks per month (30 days)
4,200,000
Bandwidth per month
≈ 555 GB

On ARC Basic

€344.10per month, excl. VAT

555 GB bought in one purchase at €0.62 / GB (−17% volume rung, applied automatically).

The same 555 GB on ARC Fast: €654.90 at €1.18 / GB. Route only the jobs that need it through the pricier pool.

That is €0.082 per 1,000 checks on ARC Basic at this volume. The number to measure on your own runs is the bytes per check — it decides everything else. A storefront that serves its price from a public JSON endpoint can come in far under 120 KB; one that needs a rendered page costs many times more.

Bandwidth never expires, so a bigger single purchase is only ever cheaper per GB. See the ladder.

Calculator

Run it with your numbers

Same ladder as checkout, standing prices only. Retries are counted at +10%, a month as 30 days, and a check as one compressed HTML response on its own connection — no images, scripts or fonts.

Your schedule

Checks per month
4,200,000
Bandwidth per month
≈ 555 GB

Per month, excl. VAT

ARC Basic

Rotating ISP

€344.10/ month

Per GB
€0.62−17%
Per 1,000 checks
€0.082
Bought as
555 GB, one purchase

ARC Fast

Rotating residential

€654.90/ month

Per GB
€1.18−41%
Per 1,000 checks
€0.156
Bought as
555 GB, one purchase

Run the schedule on ARC Basic and route only the domains that need residential exits through ARC Fast — the real bill sits between the two columns, closer to the left one. Bandwidth never expires, so buying a season at once is only ever cheaper per GB. See the ladder.

FAQ

Price-monitoring questions

Something not covered? Write to contact@arcproxies.io.

Get started

Check prices from the markets you sell in.

Create an account, and code WELCOME15 takes 15% off your first bandwidth purchase, up to 25 GB. No subscription, no sales call, and the gigabytes never expire.