As of October 7, 2026, Shifter has the largest pool of live US IPs, more than Oxylabs and Bright Data, at a fraction of the cost.Shifter now has the largest pool of live US IPs

See benchmarks
Integration

Use Shifter with n8n

Plug Shifter's residential and ISP proxies into n8n workflows in two ways — environment-level for every HTTP node at once, or inline on the HTTP Request node when you need per-workflow control.

Quick Start

Install

docker run -p 5678:5678 -e HTTP_PROXY=... n8nio/n8n

Basic Usage

# Easiest path: set HTTP_PROXY / HTTPS_PROXY when launching n8n
docker run -d --name n8n -p 5678:5678 \
  -e HTTP_PROXY="customer-USERNAME-country-us-sid-123ABC:PASSWORD@p.shifter.io:443" \
  -e HTTPS_PROXY="customer-USERNAME-country-us-sid-123ABC:PASSWORD@p.shifter.io:443" \
  -e NO_PROXY="localhost,127.0.0.1" \
  n8nio/n8n

# Every HTTP Request node will now route through Shifter automatically.

Features

Configure once via HTTP_PROXY / HTTPS_PROXY env vars and every HTTP Request node uses Shifter automatically
Per-node proxy override on the HTTP Request node for workflows that need different countries / sessions per step
Function nodes can mint a fresh sid at workflow start for stable sticky sessions across the run
Geo-targeting in 195+ countries — pass country / city / ASN selectors via expressions
Works on n8n Cloud, self-hosted Docker, Kubernetes Helm chart, and the desktop app
Compatible with the entire n8n node ecosystem — anything that calls out via HTTP routes through Shifter

Examples

Per-Node Proxy via HTTP Request (UI)

When you need per-workflow control (different countries per node, sticky sessions per spider), configure the proxy directly on the HTTP Request node — no env vars required.

# In the HTTP Request node:
#   1. Switch to "Generic Authentication"
#   2. Authentication: "Generic Credential Type"
#   3. Credential type: "HTTP Header Auth"
#   4. Then in the node body, add:
#
#      Send Headers: ON
#      Header Parameters:
#         Proxy-Authorization: Basic <base64(USER:PASS)>
#
#   5. Set Request Options > Proxy:
#      http://p.shifter.io:443

# Or, simpler — set "Send Body / Send Headers / Use Proxy" toggles
# and configure Proxy directly:
{
  "parameters": {
    "url": "https://example.com",
    "options": {
      "proxy": "customer-USERNAME-country-uk-sid-456DEF:PASSWORD@p.shifter.io:443",
      "timeout": 30000,
      "redirect": { "followRedirects": true }
    }
  },
  "name": "Scrape UK products",
  "type": "n8n-nodes-base.httpRequest"
}

Per-Workflow Sticky Session with Function Node

Generate a unique sid at the start of a workflow and pass it into every HTTP node downstream — every fetch in that run shares one residential IP, perfect for multi-step scrapes.

// Function node — outputs a Shifter URL with a fresh sid + ttl
const sid = Math.random().toString(36).slice(2, 10);
const country = $json.country || "us";

return [
  {
    json: {
      shifterProxy:
        `customer-USERNAME-country-${country}-sid-${sid}-ttl-300:` +
        `PASSWORD@p.shifter.io:443`,
      country,
      sid,
    },
  },
];

// Then in each downstream HTTP Request node, set:
//   Proxy: ={{ $json.shifterProxy }}
//
// Every node in the run reuses the same residential IP.

Geo-Specific Branches (Switch + Multiple Countries)

Use a Switch node to route different items down different branches, with each branch's HTTP Request node configured for a different country. Ideal for localized price monitoring or SERP checks.

// Workflow shape:
//
//   Schedule Trigger
//        |
//   Set: list of regions
//        |
//   Split In Batches (per region)
//        |
//   Switch (item.region == "us" / "uk" / "jp" / ...)
//        |--- HTTP Request (proxy: country-us  sid-us-001)
//        |--- HTTP Request (proxy: country-uk  sid-uk-001)
//        |--- HTTP Request (proxy: country-jp  sid-jp-001)
//        |--- HTTP Request (proxy: country-de  sid-de-001)
//        |
//   Merge -> HTML Extract -> Postgres Insert

// Or, parameterize the proxy on a single HTTP Request node:
{
  "url": "https://example.com/{{$json.path}}",
  "options": {
    "proxy": "=customer-USERNAME-country-{{$json.region}}-sid-{{$json.region}}-{{$workflow.id}}:PASSWORD@p.shifter.io:443"
  }
}

Self-Hosted with Docker Compose

Production-ready setup. Inject Shifter env vars into the n8n container, persist workflows in Postgres, and let every HTTP Request node use Shifter without per-node config.

# docker-compose.yml
version: "3.8"

services:
  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      # Shifter proxy for every outbound HTTP Request node
      HTTP_PROXY:  "customer-USERNAME-country-us-sid-prod:PASSWORD@p.shifter.io:443"
      HTTPS_PROXY: "customer-USERNAME-country-us-sid-prod:PASSWORD@p.shifter.io:443"
      NO_PROXY:    "localhost,127.0.0.1,postgres"

      DB_TYPE:                  postgresdb
      DB_POSTGRESDB_HOST:       postgres
      DB_POSTGRESDB_DATABASE:   n8n
      DB_POSTGRESDB_USER:       n8n
      DB_POSTGRESDB_PASSWORD:   n8n_password
      N8N_BASIC_AUTH_ACTIVE:    "true"
      N8N_BASIC_AUTH_USER:      admin
      N8N_BASIC_AUTH_PASSWORD:  changeme
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres

  postgres:
    image: postgres:15
    restart: unless-stopped
    environment:
      POSTGRES_DB: n8n
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: n8n_password
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  n8n_data:
  postgres_data:
FAQ

Frequently asked questions

Common questions about using Shifter with n8n.

The simplest path is to set HTTP_PROXY and HTTPS_PROXY environment variables on the n8n process (or container). Every HTTP Request node — and most other nodes that call out — picks up these env vars automatically. For per-workflow control, set the proxy directly on the HTTP Request node's Options.

Yes. Each HTTP Request node has an Options > Proxy field. Paste your Shifter URL there and that node will route through Shifter regardless of any global env vars. Combine with expression syntax (`={{$json.proxy}}`) to parameterize per-item.

Yes. n8n Cloud doesn't let you set HTTP_PROXY env vars, but per-node proxy configuration on the HTTP Request node works exactly the same way as self-hosted. Set the proxy field on each node that needs Shifter.

Add a Function node at the start of the workflow that generates a unique sid (e.g. `Math.random().toString(36).slice(2, 10)`) and produces a Shifter URL with that sid embedded. Reference that URL via expression in every downstream HTTP Request node — they'll all share the same residential IP.

Yes. Use a Switch node to branch on a region field, or use expressions like `={{$json.country}}` inside the proxy URL on the HTTP Request node. Each item can route through a different Shifter country / city / ASN.

No custom node is required. Shifter is a standard HTTP / SOCKS5 proxy — n8n's built-in HTTP Request node and proxy env vars handle it out of the box. This keeps your workflows portable across n8n Cloud, self-hosted, and embedded deployments.

Get started

Start Using Shifter with n8n

Plug Shifter's 205M+ residential and ISP proxies into your n8n workflows. Env-var or per-node configuration, sticky sessions, and per-item geo-targeting — works on Cloud and self-hosted.

Try Shifter for FreeSet up in minutes. Cancel anytime.