Log in Sign up
Price monitoring

Proxies for price monitoring that shops do not notice

Shops show different prices to different regions and block anyone who asks too often from one address. A price tracker on Advanced.name spreads its requests across tens of thousands of IPv4 addresses and asks each shop from the region of its buyers.

  • 30,000 IPs on package #4
  • prices from the buyer's region
  • list refresh every 10 minutes
Warehouse aisle with a tablet showing a price chart
Price monitoring

What a price tracker needs and what the package gives

A tracker visits the same pages every hour. That pattern is what gets blocked, and the pool has to hide it.

What the task needsWhat the package gives

A different IP for each visit to the same product

Package #4 holds 30,000 addresses: a product card sees the same IP once a month

Prices as local shoppers see them

Europe, CIS and China pools; World MIX for the US and other markets

Thousands of SKUs checked every hour

Up to 2,500 threads on package #4, 5,000 on package #6

Pages with images and scripts, not just JSON

No traffic limit: fetch full pages as often as the schedule says

Unlimited proxies

Pick the package for your catalogue size

Ten thousand SKUs an hour fit in package #3; a marketplace-wide watch needs #4 or bigger.

Region
Term
Authorized IPs
1 +10% per IP above the first
Recommended for this task
$0
  • Proxies in package
  • Threads
  • Authorized IPs1
  • ProtocolsHTTP / SOCKS5
All 13 packages in the price table

Three steps to the first price snapshot

Split the catalogue by shop

Each shop gets its own request queue and its own share of the proxy list. Big marketplaces get the largest share.

Rotate and retry

Take the next address for every request, retry twice on a different one, log the price with the IP that fetched it.

Refresh the list every 10 minutes

Addresses leave the pool as they get old. The link always returns the current set, so re-read it on a timer.

Ready price monitor: one request per product, rotating

Fill products.txt with product URLs and set COUNTRY. Each product is fetched through the next proxy, the price is pulled out and written to prices.csv. Adjust PRICE_RE to the shop's markup. Trial it on the free proxy list first.

CSV export link from your dashboard
buyers' country: prices are read as local shoppers see them
one product URL per line
regex, group 1 = the price
url;price;proxy;country is written here
Values come from the form; copy or download the ready file.
Show the script code
Python 3.8+ · prices.py
#!/usr/bin/env python3
"""Price monitor for Advanced.name proxies.

Fetches product pages through proxies from the buyer's country and pulls the
price out of each page. One request per product goes through the next proxy, so
a shop sees the same address rarely. Standard library only. python3 prices.py
"""

# ================================ CONFIG ====================================
CSV_URL = "https://get.advanced.name/YOUR_LIST_ID.csv"  # CSV export link from your dashboard
COUNTRY = "DE"          # buyers' country: prices are read as local shoppers see them
MIN_SPEED = 3
PRODUCTS_FILE = "products.txt"           # one product URL per line
PRICE_RE = r'"price"\s*:\s*"?([0-9][0-9.,]*)'   # regex, group 1 = the price
OUT_FILE = "prices.csv"                   # url;price;proxy;country is written here
THREADS = 40
TIMEOUT = 20
RETRIES = 3
# ============================================================================

import csv
import io
import itertools
import re
import sys
import threading
import urllib.request
from concurrent.futures import ThreadPoolExecutor, as_completed

COL_IP, COL_PORT, COL_COUNTRY, COL_SPEED = 0, 1, 2, 3
UA = "Mozilla/5.0 (compatible; price-monitor/1.0)"
PRICE = re.compile(PRICE_RE)


def load_proxies():
    raw = urllib.request.urlopen(CSV_URL, timeout=30).read().decode("utf-8", "replace")
    pool = []
    for row in csv.reader(io.StringIO(raw), delimiter=";"):
        if len(row) <= COL_SPEED or not row[COL_PORT].strip().isdigit():
            continue
        if COUNTRY and row[COL_COUNTRY].strip().upper() != COUNTRY.upper():
            continue
        if int(row[COL_SPEED] or 0) < MIN_SPEED:
            continue
        pool.append(row[COL_IP].strip() + ":" + row[COL_PORT].strip())
    return pool


def main():
    proxies = load_proxies()
    if not proxies:
        sys.exit("No proxies for COUNTRY=%r." % COUNTRY)
    with open(PRODUCTS_FILE, encoding="utf-8") as fh:
        products = [line.strip() for line in fh if line.strip() and not line.startswith("#")]
    print("proxies: %d (%s), products: %d" % (len(proxies), COUNTRY, len(products)))

    rotation = itertools.cycle(proxies)
    lock = threading.Lock()

    def grab(url):
        for _ in range(RETRIES):
            with lock:
                proxy = next(rotation)
            handler = urllib.request.ProxyHandler({"http": "http://" + proxy, "https": "http://" + proxy})
            req = urllib.request.Request(url, headers={
                "User-Agent": UA, "Accept-Language": COUNTRY.lower() + "," + COUNTRY.upper()})
            try:
                html = urllib.request.build_opener(handler).open(req, timeout=TIMEOUT).read().decode("utf-8", "replace")
            except Exception:
                continue
            match = PRICE.search(html)
            return (match.group(1) if match else "not found"), proxy
        return "unreachable", ""

    rows = []
    with ThreadPoolExecutor(max_workers=THREADS) as pool:
        futures = {pool.submit(grab, u): u for u in products}
        for fut in as_completed(futures):
            url = futures[fut]
            price, proxy = fut.result()
            rows.append((url, price, proxy, COUNTRY))
            print("%-9s %s" % (price, url[:60]))

    with open(OUT_FILE, "w", encoding="utf-8", newline="") as out:
        writer = csv.writer(out, delimiter=";")
        writer.writerow(["url", "price", "proxy", "country"])
        writer.writerows(rows)
    print("written %s (%d rows)" % (OUT_FILE, len(rows)))


if __name__ == "__main__":
    main()
Setup

Setting up a price tracker

Your own parser

Fetch each product page through the next proxy and pull the price from the JSON-LD block or the price node; the script above uses a regex you tune per shop. Send the region's Accept-Language and currency cookie with the local IP, or the shop may redirect you to another market.

Schedule by pressure: stock every hour, prices twice a day. Store the HTTP status with every price, so a burst of 403s from one shop tells you to slow down there, not everywhere.

Ready tools and spreadsheets

Price-watch services and no-code scrapers (Octoparse, Web Scraper) take a proxy list in settings — paste the same ip:port file. Even Google Sheets IMPORTXML can run behind a small proxy relay for light checks.

Keep the pool fresh with the proxy checker and test the flow on the free proxy list before you scale to a full catalogue.

In practice

What the tracker sees

Four rules for clean price data

  1. Send the Accept-Language and currency cookies of the target region together with the regional IP; otherwise the shop may still redirect you.
  2. Watch for cached or personalised prices: two IPs from the same country should return the same number.
  3. Store the HTTP status with every price. A burst of 403s from one shop means slow down there, not everywhere.
  4. Keep a small reserve of threads for re-checks of items whose price jumped by more than 20%.

Per-GB plans for this task

This task by country

Show all countries
FAQ

Questions about this task

How often can I check one product?
Every hour is safe on package #4: with 30,000 addresses a product card meets the same IP about once a month.
Will I see local prices?
Yes, if the IP comes from the shop's region and your request carries the region's language and currency headers.
What about marketplaces with heavy JavaScript?
Traffic is not counted, so a headless browser through the proxy is fine. Give it 15 to 20 seconds of timeout and a fresh IP per session.
Can I try on my catalogue first?
One test hour on any package is free, with full threads. Run your tracker for an hour and compare error rates.
How do I collect prices by city?
Through Resi Prime: you set the city in the connection string, and the shop returns the local price and delivery date. Unlimited packages and Resi Core work to the country level.
Plans for this task

What to take for price monitoring

An hourly catalogue run pays off on an unlimited package. Strictly protected shops and city prices need residential addresses.

Unlimited proxies

Catalogue every hourBest fit

Package #4 · World MIX · 30,000 IP · 2,500 threads

A product card meets the same IP about once a month at hourly checks. Full pages do not raise the bill.

$990 per monthor $4.20 per hour

Resi Core

Strict shops

2M+ IPs · 200+ countries · no thread limit

A home IP from the shop country on every request. For sites that show list addresses a captcha instead of a price.

from $0.49 per GB1 GB for $0.85

Resi Prime

City prices

30M+ IPs · 220 countries · no thread limit

City and region in the connection string. The shop shows the price and delivery that a buyer in that city sees.

from $1.39 per GB1 GB for $2.29

Get tonight's prices from every shop

Choose the package, take the free hour, run the tracker across the whole catalogue.

Pricing Grab a free hour