Documentation Python quickstart Blog Free tools Enterprise solutions hello@quanticdata.ioLog in

How to set up a proxy in Changedetection.io: per watch, Chrome fetcher and errors

Setting up a proxy in Changedetection.io in four steps: generate a Residential Premium line in URL format in the QuanticData endpoint generator, add it under Settings, CAPTCHA & Proxies, Extra Proxies as a Name and a Proxy URL, pick that name in the watch under Edit, Request, Proxy, then run Check/Scan all; the card lists the three things to verify when a check fails.
Setting up a proxy in Changedetection.io in four steps: generate a Residential Premium line in URL format in the QuanticData endpoint generator, add it under Settings, CAPTCHA & Proxies, Extra Proxies as a Name and a Proxy URL, pick that name in the watch under Edit, Request, Proxy, then run Check/Scan all; the card lists the three things to verify when a check fails.

To add a proxy in Changedetection.io, open Settings, CAPTCHA & Proxies, and fill a row of Extra Proxies: a Name and a Proxy URL that starts with http://, such as http://USER:PASS@host:8080. Save, then pick that name in each watch under Edit, Request, Proxy. Below: each step, Residential Premium, ISP and mobile lines, the Chrome fetcher and every error.

Changedetection.io checks web pages on a schedule and tells you when they change: a price, a stock status, a job list, a legal page. Many sites answer a monitoring server differently from a visitor, or not at all, and some show other content to other countries. A proxy gives each watch the address and the country it needs. The field names below are the ones in Changedetection.io's own templates (release 0.60.9 of 12 October 2026), and the values come from the QuanticData endpoint generator.

What you need before you start

  • Changedetection.io running, self-hosted with Docker or pip, or the hosted service. On the hosted service the same list of proxies appears in each watch as Location.
  • A proxy plan. Residential Premium, ISP or mobile: all of them work. The table further down says which one fits which watch.
  • The line in URL format. In the QuanticData dashboard open My proxies, then the plan; in the Endpoint generator set Output format to URL, which gives http://user:pass@host:port.

The proxy format Changedetection.io accepts

Changedetection.io takes one thing per proxy: a URL with the scheme in front. Its form refuses anything else with "Proxy URLs must start with http://, https:// or socks5://". The username and password go inside the URL, before the @.

LineIn Changedetection.io
http://USER:PASS@host:8080Accepted, works with every fetcher: the one to use
socks5://USER:PASS@host:1080Accepted; a SOCKS5 proxy with a login works only with the Basic fetcher
host:8080:USER:PASSRefused on Save: rewrite it as a URL
USER:PASS@host:8080Refused on Save: add http:// in front

The same QuanticData Residential Premium proxy, sticky in France for 60 minutes, as Changedetection.io wants it:

http://USER-country-fr-sid-cd01-ttl-60m:PASS@residentialpremium.quantumproxies.io:8080

The login is the whole username, with everything after the first dash: -country-fr picks the exit country, -sid-cd01 names the session and -ttl-60m keeps the same IP for 60 minutes. If a password ever contains #, /, ? or @, write those characters percent-encoded (%23, %2F, %3F, %40): Changedetection.io decodes them before it sends the login.

Step by step: add the proxy in Settings

The QuanticData Endpoint generator for a Residential Premium plan: France selected, Session set to Sticky, HTTP protocol, Output format http://user:pass@host:port and the preview line on residentialpremium.quantumproxies.io:8080, with the username and password blurred
Step 1 in the QuanticData dashboard: country, sticky session, HTTP and the URL output format.
  1. Generate the line. In the QuanticData dashboard open My proxies, then your plan. In the Endpoint generator choose the Country (and a Region or City if the watch needs one), set Session to Sticky, choose HTTP and set Output format to URL. The Preview shows the line to copy.
  2. Open the settings. In Changedetection.io click Settings in the top menu, then the CAPTCHA & Proxies tab.
  3. Fill a row of Extra Proxies. There are five rows. In Name write a label you will recognise, for example QD France: it is what you pick in each watch. In Proxy URL paste the line. A row needs both: a Name without a URL, or a URL without a Name, is refused.
  4. Add one row per exit. A second country, a mobile line or an ISP IP each get their own row, with their own Name.
  5. Scroll down and click Save. "Settings updated." confirms it.
The Extra Proxies box of Changedetection.io, Settings, CAPTCHA and Proxies tab, redrawn with two QuanticData proxies: QD France with a Residential Premium URL on residentialpremium.quantumproxies.io:8080 and QD Mobile France with a mobile URL on mobile.quantumproxies.io:8080, with five numbered steps beside it
Steps 2 to 5 in Changedetection.io, redrawn with our values. The partner boxes shown above Extra Proxies in the app are left out.

Once there is at least one proxy, Settings, General shows a Default proxy choice, "Choose a default proxy for all watches". It is the proxy every watch uses unless the watch picks another one.

Choose the proxy in each watch

This is the part that makes Changedetection.io useful with more than one proxy: every watch can leave from its own exit. A price page in France, a stock page in Germany, a page that only opens from a mobile network, each in its own watch.

  1. In the watch list, click Edit on the watch, then the Request tab.
  2. Under Fetch Method, keep Basic fast Plaintext/HTTP Client for plain pages, or choose the Chrome browser (Playwright Chromium/Javascript) for pages that build their content with JavaScript. Both send the request through the proxy chosen below.
  3. Under Proxy, pick the Name you gave in Settings. The list starts with Default, then your proxies, then No proxy.
  4. Click Check/Scan all to test this watch's page through every proxy in the list. Next to each one it shows OK or X, the reason (for example 403 - Access denied, or the status code) and the time in seconds.
  5. Click Save. The next check of the watch leaves from that proxy.
The Request tab of a Changedetection.io watch, redrawn: Fetch Method set to the Playwright Chromium browser, the Proxy list with Default, QD France selected, QD Mobile France, QD ISP 01 and No proxy, the Check/Scan all button and Save, with five numbered steps beside it
The proxy of one watch, chosen by its name. Redrawn screen; the other Request options are left out, as in the app's own tutorial.

When a watch is left on Default, Changedetection.io uses the Default proxy from Settings, General; if none is set there, it takes the first proxy in the list. That is why a watch can go through a proxy you did not pick: set the Default proxy on purpose, or choose No proxy in the watches that must not use one.

Check where a watch comes from

The quickest proof is a watch on a page that prints the visitor's IP. Add a watch on https://ipinfo.io/json, choose the proxy in its Request tab, recheck it and open Preview: the Text tab shows the address and the place the request came from. Changedetection.io stores JSON sorted by key, so city, country, ip, region and timezone appear in that order.

The Preview of a Changedetection.io watch on ipinfo.io/json through the QD France proxy, redrawn: the Text tab shows city Lyon, country FR, region Auvergne-Rhone-Alpes and timezone Europe/Paris, the IP masked; a real check of 24 October 2026
The answer of a real check through the France line on 24 October 2026: Lyon, Auvergne-Rhone-Alpes, Europe/Paris. IP masked, other fields left out.

The same France line went out from Lyon, Auvergne-Rhone-Alpes, in the Europe/Paris time zone, on 24 October 2026 at 09:17 UTC. The city is not fixed: with -country-fr only, each new session can land anywhere in France. A Region or City chosen in the generator narrows it.

Residential Premium, ISP and mobile proxies in Changedetection.io

Proxy typeProxy URL in Extra ProxiesGood for
Residential Premiumhttp://USER-country-fr-sid-cd01-ttl-60m:[email protected]:8080Most watches: home IPs in the country of the page, region, city or ISP in the login
ISPhttp://USER:PASS@IP:50100, from Assigned IPsWatches that should come from the same address for months
Mobilehttp://USER-country-fr-type-mobile-sid-cd02-ttl-60m:PASS@mobile.quantumproxies.io:8080Pages that answer phones differently, or refuse other networks

Residential Premium

The line from the steps above. Give each group of watches its own row with its own session ID: -sid-cd01 for one, -sid-cd02 for the next. With Session on Sticky the generator makes as many lines as the Quantity field says, ten by default, each with its own session, and Copy all takes them out in the same URL format. More countries are a matter of more rows: -country-de, -country-us and so on. See QuanticData residential proxies and French proxies for the plans and the locations.

ISP proxies

An ISP plan gives fixed IPs. In the dashboard, Proxy endpoints, Assigned IPs lists them; set Output format to Proxy URL and each line is already in the form Changedetection.io wants, http://USER:PASS@IP:50100 with Protocol on HTTP / HTTPS. Paste one IP per row, with a Name like QD ISP 01, and pick it in the watches that need a stable address. The IP does not change, so there is no session to manage. The plans are on the page for ISP proxies.

The Assigned IPs panel of a QuanticData ISP plan: Protocol HTTP / HTTPS, Output format Proxy URL, five IPs masked with port 50100 and username USER, and the formatted output as http://USER:PASS@IP:50100 lines ready to copy
ISP plan: Output format Proxy URL gives one ready line per fixed IP. Sample IPs masked.
The Extra Proxies box of Changedetection.io, redrawn with a third row QD ISP 01 holding a QuanticData ISP IP as a Proxy URL, http://USER:PASS@82.x.x.11:50100 with the IP masked, and three numbered steps beside it
An ISP IP as its own proxy row. Redrawn screen, IP masked.

Mobile proxies

Mobile lines work like Residential Premium, on mobile.quantumproxies.io, HTTP 8080 or SOCKS5 1080, with -type-mobile in the login. In the generator choose the gateway (Global, USA, EU or Asia), Session Sticky and Output format URL, then paste the line as its own row. Mobile plans also offer IP whitelist authentication: add the public IP of the server that runs Changedetection.io, and the list for that IP gives host:port lines with no login. That is the way to use SOCKS5 with the Chrome fetcher, which cannot send a SOCKS5 login. More on QuanticData mobile proxies and mobile proxies in France.

The QuanticData Endpoint generator for a Mobile plan: France, Global gateway, Session Sticky, HTTP 8080, Output format http://user:pass@host:port and the preview line on mobile.quantumproxies.io:8080 with -type-mobile in the login, credentials blurred
Mobile: gateway, sticky session and the URL format in the generator.

The Chrome fetcher, Playwright and the proxy

Pages that need JavaScript are fetched by a real Chrome. In the Docker setup that is the Playwright fetcher, enabled with PLAYWRIGHT_DRIVER_URL; its label in Fetch Method shows the address, for example ws://browser-sockpuppet-chrome:3000. Three things to know:

  • The watch's proxy wins. A proxy chosen in the Request tab, or the Default proxy, is passed to the browser, and Changedetection.io takes the username and password out of the URL for it. Nothing else to set.
  • HTTP, not SOCKS5, when there is a login. SOCKS5 with a username and password works only with the Basic fetcher. For the Chrome fetcher use the HTTP line on port 8080, or a mobile line with IP whitelist.
  • A default for the browser only. Without any proxy in the list, the Playwright fetcher reads four environment variables: playwright_proxy_server, playwright_proxy_username, playwright_proxy_password and playwright_proxy_bypass.
# docker-compose.yml, service changedetection: a default proxy for the Chrome fetcher
    environment:
      - PLAYWRIGHT_DRIVER_URL=ws://browser-sockpuppet-chrome:3000
      - playwright_proxy_server=http://residentialpremium.quantumproxies.io:8080
      - playwright_proxy_username=USER-country-fr-sid-cd01-ttl-60m
      - playwright_proxy_password=PASS

The older WebDriver (Selenium) fetcher passes the proxy to Chrome as a --proxy-server start option, and Chrome does not take a username and password from it. With that fetcher, use the mobile IP whitelist, or switch to the Playwright browser.

proxies.json and environment variables

Settings is the simplest place for proxies, but not the only one. A file called proxies.json in the datastore directory adds proxies to the same list, next to the ones from Extra Proxies; with Docker, mount it as ./proxies.json:/datastore/proxies.json. Each entry has a label, the name you see in the watch, and a url:

{
  "qd-france": {
    "label": "QD France",
    "url": "http://USER-country-fr-sid-cd01-ttl-60m:PASS@residentialpremium.quantumproxies.io:8080"
  },
  "qd-mobile-fr": {
    "label": "QD Mobile France",
    "url": "http://USER-country-fr-type-mobile-sid-cd02-ttl-60m:PASS@mobile.quantumproxies.io:8080",
    "reuse_time_minimum": 300
  },
  "direct": {
    "label": "No proxy - Direct"
  }
}

An entry without a url is a choice with no proxy. reuse_time_minimum is the least number of seconds between two checks through that proxy: a watch that comes due sooner waits until that time has passed. For plain requests with no proxy in any list, Changedetection.io also reads HTTP_PROXY and HTTPS_PROXY; the project's wiki adds NO_PROXY for the addresses to leave out.

One sticky session, or a new IP each check

A sticky line keeps one IP for as long as its -ttl- says, up to 1440 minutes in the generator. That is what a watch with Browser Steps, a login or a cookie banner needs: every request of one check has to come from the same address. When the session ends, the next request gets a new IP on its own, and the line in Settings never has to change.

For plain public pages a new IP at every check is fine, and sometimes better. Set Session to Rotating in the generator: the login then has no -sid-, and every connection gets a fresh address. To move a sticky watch to a new IP right away, change the session ID in its row, -sid-cd03 instead of -sid-cd01, and save.

Changedetection.io proxy not working: errors and fixes

Errors show up in three places: under Extra Proxies when you save, in red under the watch in the watch list after a check, and next to each proxy after Check/Scan all. These are the messages and what they mean, in the order to check.

Changedetection.io refusing a proxy pasted as host:port:user:pass, redrawn: the message An error occurred, please see below, the row in pink and the error Proxy URLs must start with http://, https:// or socks5://; beside it the fix, rewrite the line as http://USER:PASS@host:port
The most common mistake: a host:port:user:pass line pasted as it is. Redrawn screen.
What you seeUsual causeFix
Proxy URLs must start with http://, https:// or socks5://The line was pasted as host:port:user:pass or user:pass@host:portGenerate it again with Output format URL, or add http:// and move the login before the @
Both a name, and a Proxy URL is required.A row has only one of the two fieldsFill both, or empty both
Error - 407 (Proxy authentication required) received, did you need a username and password for the proxy?The login is missing, cut at the first dash, or the password is wrongCopy the whole URL again from the Preview; see fixing 407 Proxy Authentication Required
Proxy connection failed? at the start of the errorA socks5:// proxy could not be reached: most often socks5:// on port 8080socks5:// with 1080, or http:// with 8080
An Exception with ProxyError or Unable to connect to proxyhttp:// on port 1080, a typo in the host, or a firewall blocking the porthttp:// with 8080, copied from the generator; then the curl test below
A SOCKS5 proxy works with Basic, fails with ChromeSOCKS5 with a login is supported only by the Basic fetcherUse the HTTP line on 8080, or a mobile line with IP whitelist
Error - 403 (Access denied) received - Try other proxies/locationThe site refused the request from that addressRun Check/Scan all and pick a proxy that shows OK; try a new session ID, the Chrome fetcher or a mobile line
The watch goes through a proxy you did not chooseThe watch is on Default, and Default falls back to the first proxy in the listSet the Default proxy in Settings, General, or pick No proxy in the watch
It worked before, every proxy row fails nowThe plan expired or its traffic is used upCheck the plan in My proxies: status, remaining traffic, expiry date

The 403 is the error people search for most, and the proxy is not always the cause: some sites refuse any automated client, whatever the address. More on that in why sites answer 403 Forbidden. To rule out the proxy, one test from the same server settles it in a minute; if it prints an address in the right country, the proxy works and the problem is in the watch:

curl -x http://residentialpremium.quantumproxies.io:8080 \
  -U "USER-country-fr-sid-test-ttl-10m:PASS" https://ipinfo.io/json

If the same command fails from the server but works from another network, a firewall in front of the server is blocking the proxy port. The full set of options is in the guide to using a proxy with curl, and SOCKS5 itself on the page for SOCKS5 proxies.

Before you monitor

A proxy changes where a watch's requests come from, not what the watch is allowed to collect. Keep to each site's terms and to the law where you work, keep the check interval reasonable for the page, and watch only the data you need.

Sources & further reading

FAQ

Quick answers on changedetection.io proxy.

Something else? Ask us

How do I add a proxy to Changedetection.io?

Open Settings, the CAPTCHA & Proxies tab, and fill a row of Extra Proxies: a Name and a Proxy URL such as http://USER:PASS@host:8080. Save. Then open a watch, click Edit, go to the Request tab and pick that Name under Proxy. To use it for every watch, set it as the Default proxy in Settings, General.

Can I use a different proxy for each watch?

Yes. Every row of Extra Proxies, and every entry of proxies.json, appears by its name in the Proxy list of each watch's Request tab. A watch left on Default uses the Default proxy from Settings, General, or the first proxy in the list when no default is set. No proxy sends that watch directly.

What proxy format does Changedetection.io need?

A URL with the scheme in front and the login inside: http://USER:PASS@host:port, https:// or socks5://. A line like host:port:user:pass is refused with "Proxy URLs must start with http://, https:// or socks5://". The QuanticData generator gives the right form with Output format URL, and ISP plans with Output format Proxy URL.

Does Changedetection.io support SOCKS5 proxies?

Yes, as socks5://USER:PASS@host:1080. With a username and password, SOCKS5 works only with the Basic fast Plaintext/HTTP Client fetcher; for the Chrome fetcher use an HTTP proxy, or a SOCKS5 proxy that authenticates by IP whitelist, as QuanticData mobile plans allow.

How do I use a proxy with the Playwright Chrome fetcher?

Choose the proxy in the watch, or set a Default proxy: Changedetection.io passes it to the browser and takes the username and password from the URL. Use HTTP on port 8080 when the proxy needs a login. Without any proxy in the list, the Playwright fetcher reads playwright_proxy_server, playwright_proxy_username and playwright_proxy_password from the environment.

Why does Changedetection.io show 403 Access denied with a proxy?

The site refused the request from that address, or refuses automated clients in general. Run Check/Scan all in the watch's Request tab to see which proxies get OK, try a new session ID for a fresh IP, switch to the Chrome fetcher for pages that test the browser, or use a mobile line for sites that trust phone networks.

Can I use free proxies with Changedetection.io?

It accepts any proxy URL, free ones included. Public free proxies are shared by many users, change or vanish without notice and are often already refused by the sites you want to watch, and whoever runs one can read plain HTTP traffic that passes through it. For watches that must keep working, use proxies with a login of your own.

A proxy for every Changedetection.io watch

Residential Premium, ISP and mobile proxies by country, with sticky sessions up to 1440 minutes, HTTP and SOCKS5, copied from the endpoint generator straight into Extra Proxies as a ready URL.

Related reading