Adspower
π Claude Code skill for AdsPower antidetect browser β manage profiles, proxies, cookies, and fingerprints through natural language
npx -y skills add pencil20388-eng/adspower-skill --skill adspowerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.5 KB, as published. Nobody here has run it
AdsPower Local API Automation Skill
Automate AdsPower antidetect browser operations through its Local API. This skill handles profile creation, browser control, proxy management, cookie operations, and fingerprint verification.
Prerequisites
- AdsPower installed and running locally (paid plan with API access)
- API Key generated (AdsPower β Automation β API β Generate)
- Python 3.8+ with
requestsinstalled
API Basics
Base URL: http://local.adspower.net:50325
All requests require the Authorization header:
Authorization: Bearer YOUR_API_KEY
Success response: {"code": 0, "msg": "success", "data": {...}}
Error response: {"code": -1, "msg": "error description"}
Core Operations
1. Check API Status
curl -s -H "Authorization: Bearer $API_KEY" \
"http://local.adspower.net:50325/api/v1/status"
2. Create a Profile
import requests
resp = requests.post(
"http://local.adspower.net:50325/api/v1/user/create",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"name": "profile_001",
"group_id": "0",
"fingerprint_config": {
"automatic_timezone": "1",
"language": ["en-US", "en"],
},
},
).json()
profile_id = resp["data"]["id"]
3. Open a Browser Profile
resp = requests.get(
f"http://local.adspower.net:50325/api/v1/browser/start?user_id={profile_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=30, # 30s timeout for slow proxies
).json()
# Connection info for automation frameworks:
webdriver_path = resp["data"]["webdriver"]
selenium_address = resp["data"]["ws"]["selenium"] # For Selenium
puppeteer_ws = resp["data"]["ws"]["puppeteer"] # For Playwright
4. Close a Browser Profile
requests.get(
f"http://local.adspower.net:50325/api/v1/browser/stop?user_id={profile_id}",
headers={"Authorization": f"Bearer {API_KEY}"},
)
5. Connect Selenium
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
service = Service(executable_path=webdriver_path)
options = Options()
options.add_experimental_option("debuggerAddress", selenium_address)
driver = webdriver.Chrome(service=service, options=options)
driver.get("https://www.browserscan.net/")
6. Connect Playwright
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(puppeteer_ws)
context = browser.contexts[0]
page = context.pages[0] if context.pages else context.new_page()
page.goto("https://www.browserscan.net/")
7. Update Proxy
requests.post(
"http://local.adspower.net:50325/api/v1/user/update",
headers={"Authorization": f"Bearer {API_KEY}"},
json={
"user_id": profile_id,
"user_proxy_config": {
"proxy_soft": "other",
"proxy_type": "http", # http | https | socks5
"proxy_host": "1.2.3.4",
"proxy_port": "8080", # Must be string
"proxy_user": "username",
"proxy_password": "password",
},
},
).json()
8. Query Profiles
resp = requests.get(
"http://local.adspower.net:50325/api/v1/user/list",
headers={"Authorization": f"Bearer {API_KEY}"},
params={"page": 1, "page_size": 100, "group_name": "My Campaign"},
).json()
profiles = resp["data"]["list"]
9. Create a Group
resp = requests.post(
"http://local.adspower.net:50325/api/v1/group/create",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"group_name": "My Campaign"},
).json()
group_id = resp["data"]["group_id"]
Rate Limits
| Profile count | Max frequency |
|---|---|
| 0β200 | 2 req/sec |
| 200β5000 | 5 req/sec |
| > 5000 | 10 req/sec |
Profile creation is always limited to 1 req/sec. Add time.sleep(1.1) between batch operations.
Common Errors
| Error | Cause | Fix |
|---|---|---|
| Connection refused | AdsPower not running | Start AdsPower, check API status |
| Invalid API key | Wrong or expired key | Regenerate in Automation β API |
| Error 100044 | Browser start timeout | Check proxy, clear cache, increase timeout |
| Error 100001 | Browser failed to start | Repair profile, update AdsPower |
| Too many requests | Rate limit exceeded | Add sleep between API calls |
| Profile not found | Wrong user_id | Query /api/v1/user/list to get correct IDs |
Important Notes
-
proxy_portmust be a string, not an integer -
user_idis the internal ID from creation, not the profile name or UI number -
The API port (default 50325) can change between sessions β verify in AdsPower settings
-
Always close browsers via API after automation to prevent resource leaks
-
Use
resp["data"]["ws"]["selenium"]for Selenium,resp["data"]["ws"]["puppeteer"]for PlaywrightBundled Scripts
Profile Report Generator
Generate a CSV audit report of all profiles:
python3 ${CLAUDE_SKILL_DIR}/scripts/profile_report.py
python3 ${CLAUDE_SKILL_DIR}/scripts/profile_report.py --group "My Campaign"
Output includes: profile_id, name, group, proxy status, cookie status, creation time, last open time. Use this when the user asks to audit profiles, check proxy coverage, or generate a profile summary.