skills$openclaw/vpn-rotate-skill
acastellana3.5k

by acastellana

vpn-rotate-skill – OpenClaw Skill

vpn-rotate-skill is an OpenClaw Skills integration for coding workflows. Bypass API rate limits by rotating VPN servers. Works with any OpenVPN-compatible VPN (ProtonVPN, NordVPN, Mullvad, etc.). Automatically rotates to new server every N requests for fresh IPs. Use for high-volume scraping, government APIs, geo-restricted data.

3.5k stars5.3k forksSecurity L1
Updated Feb 7, 2026Created Feb 7, 2026coding

Skill Snapshot

namevpn-rotate-skill
descriptionBypass API rate limits by rotating VPN servers. Works with any OpenVPN-compatible VPN (ProtonVPN, NordVPN, Mullvad, etc.). Automatically rotates to new server every N requests for fresh IPs. Use for high-volume scraping, government APIs, geo-restricted data. OpenClaw Skills integration.
owneracastellana
repositoryacastellana/vpn-rotate-skill
languageMarkdown
licenseMIT
topics
securityL1
installopenclaw add @acastellana/vpn-rotate-skill
last updatedFeb 7, 2026

Maintainer

acastellana

acastellana

Maintains vpn-rotate-skill in the OpenClaw Skills directory.

View GitHub profile
File Explorer
13 files
.
providers
mullvad.md
789 B
nordvpn.md
674 B
protonvpn.md
1.2 KB
scripts
decorator.py
2.9 KB
setup.sh
4.2 KB
vpn.py
9.2 KB
_meta.json
467 B
CHANGELOG.md
609 B
README.md
1.8 KB
requirements.txt
176 B
SKILL.md
4.1 KB
SKILL.md

name: vpn-rotate-skill description: Bypass API rate limits by rotating VPN servers. Works with any OpenVPN-compatible VPN (ProtonVPN, NordVPN, Mullvad, etc.). Automatically rotates to new server every N requests for fresh IPs. Use for high-volume scraping, government APIs, geo-restricted data.

VPN Rotate Skill

Rotate VPN servers to bypass API rate limits. Works with any OpenVPN-compatible VPN.

Setup

1. Run Setup Wizard

./scripts/setup.sh

This will:

  • Check OpenVPN is installed
  • Help you configure your VPN provider
  • Set up passwordless sudo
  • Test the connection

2. Manual Setup

If you prefer manual setup:

# Install OpenVPN
sudo apt install openvpn

# Create config directory
mkdir -p ~/.vpn/servers

# Download .ovpn files from your VPN provider
# Put them in ~/.vpn/servers/

# Create credentials file
echo "your_username" > ~/.vpn/creds.txt
echo "your_password" >> ~/.vpn/creds.txt
chmod 600 ~/.vpn/creds.txt

# Enable passwordless sudo for openvpn
echo "$USER ALL=(ALL) NOPASSWD: /usr/sbin/openvpn, /usr/bin/killall" | sudo tee /etc/sudoers.d/openvpn

Decorator (Recommended)

from scripts.decorator import with_vpn_rotation

@with_vpn_rotation(rotate_every=10, delay=1.0)
def scrape(url):
    return requests.get(url).json()

# Automatically rotates VPN every 10 calls
for url in urls:
    data = scrape(url)

VPN Class

from scripts.vpn import VPN

vpn = VPN()

# Connect
vpn.connect()
print(vpn.get_ip())  # New IP

# Rotate (disconnect + reconnect to different server)
vpn.rotate()
print(vpn.get_ip())  # Different IP

# Disconnect
vpn.disconnect()

Context Manager

from scripts.vpn import VPN

vpn = VPN()

with vpn.session():
    # VPN connected
    for url in urls:
        vpn.before_request()  # Handles rotation
        data = requests.get(url).json()
# VPN disconnected

CLI

python scripts/vpn.py connect
python scripts/vpn.py status
python scripts/vpn.py rotate
python scripts/vpn.py disconnect
python scripts/vpn.py ip

Configuration

Decorator Options

@with_vpn_rotation(
    rotate_every=10,      # Rotate after N requests
    delay=1.0,            # Seconds between requests
    config_dir=None,      # Override config directory
    creds_file=None,      # Override credentials file
    country=None,         # Filter servers by country prefix (e.g., "us")
    auto_connect=True,    # Connect automatically on first request
)
VPN(
    config_dir="~/.vpn/servers",
    creds_file="~/.vpn/creds.txt", 
    rotate_every=10,
    delay=1.0,
    verbose=True,
)

Recommended Settings

API Aggressivenessrotate_everydelay
Aggressive (Catastro, LinkedIn)52.0s
Standard101.0s
Lenient20-500.5s

Files

vpn-rotate-skill/
├── SKILL.md              # This file
├── README.md             # Overview
├── scripts/
│   ├── vpn.py            # VPN controller
│   ├── decorator.py      # @with_vpn_rotation
│   └── setup.sh          # Setup wizard
├── examples/
│   └── catastro.py       # Spanish property API example
└── providers/
    ├── protonvpn.md      # ProtonVPN setup
    ├── nordvpn.md        # NordVPN setup
    └── mullvad.md        # Mullvad setup

Troubleshooting

"sudo: a password is required"

Run the setup script or manually add sudoers entry:

echo "$USER ALL=(ALL) NOPASSWD: /usr/sbin/openvpn, /usr/bin/killall" | sudo tee /etc/sudoers.d/openvpn

Connection fails

  1. Check credentials are correct
  2. Test manually: sudo openvpn --config ~/.vpn/servers/server.ovpn --auth-user-pass ~/.vpn/creds.txt
  3. Check VPN provider account is active

Still getting blocked

  1. Lower rotate_every (try 5 instead of 10)
  2. Increase delay (try 2-3 seconds)
  3. Check if API blocks VPN IPs entirely

No .ovpn files

Download from your VPN provider:

README.md

🔄 VPN Rotate Skill

Break free from API restrictions. Rotate IPs. Scrape without limits.

The Problem

APIs fight back against data collection:

  • 🚫 IP blocks after a few requests
  • 🚫 Rate limits killing throughput
  • 🚫 Geo-restrictions locking you out

The Solution

Automatically rotate VPN servers to get fresh IPs. Works with any OpenVPN-compatible VPN:

  • ✅ ProtonVPN
  • ✅ NordVPN
  • ✅ Mullvad
  • ✅ Any provider with .ovpn configs

Quick Start

# 1. Setup (interactive)
./scripts/setup.sh

# 2. Use in Python
from scripts.decorator import with_vpn_rotation

@with_vpn_rotation(rotate_every=10)
def scrape(url):
    return requests.get(url).json()

# Every 10 requests → new server → new IP → no blocks
for url in urls:
    data = scrape(url)

How It Works

  1. Connects to VPN server via OpenVPN
  2. Makes N requests
  3. Disconnects, picks new server
  4. Reconnects with fresh IP
  5. Repeat
RotationSuccess RateSpeed
Every 5 requests95%+Slower
Every 10 requests90-95%Medium
Every 20 requests80-90%Faster

Use Cases

  • Government APIs — Catastro, court records, public data
  • Real estate — Idealista, Zillow, property registries
  • E-commerce — Price monitoring, stock tracking
  • Search engines — SERP data, rankings
  • Social media — Profiles, posts, analytics

Requirements

  • Linux with OpenVPN (apt install openvpn)
  • VPN account with OpenVPN support
  • Passwordless sudo for openvpn (setup script handles this)

Documentation


Stop fighting rate limits. Start rotating IPs.

Permissions & Security

Security level L1: Low-risk skills with minimal permissions. Review inputs and outputs before running in production.

Requirements

  • OpenClaw CLI installed and configured.
  • Language: Markdown
  • License: MIT
  • Topics:

Configuration

### Decorator Options ```python @with_vpn_rotation( rotate_every=10, # Rotate after N requests delay=1.0, # Seconds between requests config_dir=None, # Override config directory creds_file=None, # Override credentials file country=None, # Filter servers by country prefix (e.g., "us") auto_connect=True, # Connect automatically on first request ) ``` ### VPN Class Options ```python VPN( config_dir="~/.vpn/servers", creds_file="~/.vpn/creds.txt", rotate_every=10, delay=1.0, verbose=True, ) ```

FAQ

How do I install vpn-rotate-skill?

Run openclaw add @acastellana/vpn-rotate-skill in your terminal. This installs vpn-rotate-skill into your OpenClaw Skills catalog.

Does this skill run locally or in the cloud?

OpenClaw Skills execute locally by default. Review the SKILL.md and permissions before running any skill.

Where can I verify the source code?

The source repository is available at https://github.com/openclaw/skills/tree/main/skills/acastellana/vpn-rotate-skill. Review commits and README documentation before installing.