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 FAQ 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.

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.