How to Use AdsPower with Scrapy: Setup, Workflow & Examples
Take a Quick Look
Combine AdsPower anti-detect profiles with Scrapy spiders to scrape at scale without blocks. Step-by-step setup, Local API code, and practical examples.
🔥 Limited-Time Offer! Save extra 10% off on your first monthly plan with code: Anitdetect10
Sign upHow to Use AdsPower with Scrapy: Setup, Workflow & Examples
Scrapy is fast, but it is also predictable. A default spider sends the same headers, the same TLS signature, and the same IP pattern on every request, which is exactly what anti-bot systems look for. AdsPower solves the other half of that problem: it gives each scraping identity its own isolated browser environment with a unique fingerprint and its own proxy.
This guide explains how the two tools fit together, how to wire AdsPower profiles into a Scrapy project, and when the combination is worth the extra moving parts.
Why pair AdsPower with Scrapy?
Scrapy handles crawling logic, concurrency, retries, and data pipelines. AdsPower handles identity. Used together, they cover the full stack of a resilient scraping operation:
- Fingerprint isolation. AdsPower generates separate Canvas, WebGL, User Agent, timezone, and language profiles, so requests from different profiles do not look like one machine.
- Proxy per profile. Each AdsPower profile can carry its own residential, mobile, or ISP proxy, which keeps IP reputation tied to a single identity instead of a shared pool.
- Session persistence. Cookies and logins stay inside the profile, so a Scrapy job that needs an authenticated session can reuse it across runs.
- JavaScript rendering. AdsPower runs a real Chromium-based browser (SunBrowser), which covers pages that Scrapy alone cannot parse.
Scrapy on its own is excellent at scale but weak at camouflage. AdsPower is strong at camouflage but is not a crawler. The pairing is what makes both useful for protected targets.
Two ways to combine them
There is no official AdsPower plugin for Scrapy, so integration happens at the network layer. You have two practical options.
Option A: Point Scrapy at an AdsPower proxy
This is the simplest path. You create an AdsPower profile, attach a proxy to it, and then use that same proxy endpoint inside Scrapy's settings.py. Scrapy does the crawling; AdsPower is used mainly to manage and verify the proxy and fingerprint combination before you commit it to a spider.
Best for: large crawls where you need raw throughput and the target does not require a full browser.
Option B: Drive AdsPower through its Local API
AdsPower exposes a Local API that lets you start and stop browser profiles programmatically. You can launch a profile, read its debugging port, and connect a browser automation tool to it. This is the approach to use when a page needs JavaScript execution or a logged-in session.
Best for: gated content, single-page applications, and anything behind a login.
Step-by-step setup

How to Use AdsPower with Scrapy: Setup, Workflow & Examples - Step-by-step setup.
1. Install AdsPower and create a profile
Download AdsPower for your operating system, register an account, and create a new browser profile. Choose the operating system and browser version you want the target site to see.
2. Attach a proxy to the profile
In the profile settings, add your proxy details. A typical HTTP configuration looks like this:
Proxy type: HTTP
Host: your-proxy-host
Port: your-proxy-port
Username: your-username
Password: your-password
Click Check Proxy and confirm you get a connection test passed message. If you are still choosing a provider, the workflow in How to Use AdsPower with IPRoyal covers residential, mobile, and ISP options and how targeting flags behave.
3. Verify the fingerprint
Open the profile and check the built-in browser scan. Confirm that the IP location, timezone, and language match the identity you intended. A US proxy paired with a European timezone is a common and avoidable red flag.
4. Copy the proxy into Scrapy
If you are using Option A, add the same proxy to your Scrapy project. In settings.py:
HTTP_PROXY = "http://your-username:your-password@your-proxy-host:your-proxy-port"
DOWNLOADER_MIDDLEWARES = {
"scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware": 100,
}
For per-request control, set meta={"proxy": HTTP_PROXY} on individual Request objects instead.
5. Add a realistic header set
Scrapy's default User Agent is a giveaway. Set one that matches the AdsPower profile you verified:
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
DEFAULT_REQUEST_HEADERS = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.9",
}
6. Test with a small crawl
Run your spider against a low-risk page first and check the response. If you see a block page or a CAPTCHA, the problem is usually the proxy reputation or a fingerprint mismatch, not the spider code.
Driving AdsPower from a Scrapy pipeline
For JavaScript-heavy targets, use the Local API to launch a profile and then connect scrapy-playwright to that browser.
import requests
BASE = "http://local.adspower.net:50325"
# Start a specific profile
resp = requests.get(f"{BASE}/api/v1/browser/start", params={"user_id": "PROFILE_ID"})
data = resp.json()["data"]
ws_endpoint = data["ws"]["puppeteer"]
print(ws_endpoint)
The returned endpoint can be passed to a browser automation layer. In practice, teams run a small helper that starts the profile, hands the endpoint to the crawler, and stops the profile when the job finishes. That keeps profile usage clean and avoids orphaned browser processes.
If you would rather offload rendering and proxy rotation entirely, an API-based approach such as How to Use AdsPower with Scrapingpass is a lighter alternative to maintaining your own browser bridge.
Practical example: rotating identities across a crawl
A common pattern is to spread a crawl across several AdsPower profiles so no single identity makes too many requests.
- Create five AdsPower profiles, each with a different proxy and a matching timezone and language.
- Verify each profile with the browser scan.
- Store the five proxy strings in a list in your Scrapy project.
- Assign a proxy per request using a rotating index in your spider's
start_requestsmethod. - Set
AUTOTHROTTLE_ENABLED = Trueand a conservativeDOWNLOAD_DELAYso request timing looks human.
PROXIES = ["http://user:pass@host1:port", "http://user:pass@host2:port"]
def start_requests(self):
for i, url in enumerate(self.start_urls):
yield scrapy.Request(url, meta={"proxy": PROXIES[i % len(PROXIES)]})
This gives you the identity separation of AdsPower with the scheduling control of Scrapy.
Common problems and fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| Instant 403 on every request | Proxy IP is flagged or datacenter-class | Switch to residential or mobile proxies in AdsPower |
| CAPTCHA on first page | Fingerprint and proxy region mismatch | Align timezone, language, and IP country |
| Login drops between runs | Session not persisted | Keep the session inside the AdsPower profile rather than in Scrapy cookies |
| Empty HTML from a JS page | No browser rendering | Use the Local API with a rendering layer |
| Profile will not start | Another process is using it | Stop the profile before launching a new job |
When the combination is worth it
Use AdsPower with Scrapy when you need both scale and identity separation: multi-account research, price monitoring across regions, or crawling sites with aggressive bot detection. If your target is a static page with no protections, plain Scrapy is faster to set up and cheaper to run.
If you are still deciding on the browser side, the comparison in AdsPower vs Octo Browser vs Maskfog breaks down fingerprint isolation, automation support, and pricing. And if proxy costs are the deciding factor, ScraperAPI Pricing 2026 explains how credit multipliers can change your real monthly spend.
Related reading
- Encrypted Cloud Storage: How It Works & Best Options 2026 - Learn how encrypted cloud storage works, compare zero-knowledge providers like Sync.com, Proton Drive, and pCloud, and secure your files in 2026.
FAQ
Does AdsPower have an official Scrapy integration?
No. Integration happens through proxies and the Local API. Scrapy connects to an AdsPower-managed proxy, or a browser automation layer connects to a profile launched via the Local API.
Can Scrapy use an AdsPower profile without a proxy?
Technically yes, but it defeats the purpose. The fingerprint isolation only matters when the network identity matches it.
Is this combination legal?
Scraping public data is generally permitted, but rules vary by jurisdiction and by site terms. Always check the target's terms of service and applicable law before crawling.
How many profiles do I need?
Start with a small number and watch your block rate. If blocks rise as request volume increases, add profiles rather than increasing speed on existing ones.
Can I run AdsPower and Scrapy on the same machine?
Yes. AdsPower runs locally, and the Local API is available on localhost, so a Scrapy project on the same machine can reach it without extra networking.
Conclusion
AdsPower and Scrapy solve different halves of the same problem. Scrapy gives you a structured, scalable crawling engine. AdsPower gives each crawl a believable, isolated identity with its own fingerprint and proxy. Wire the proxy into settings.py for simple jobs, or use the Local API with a rendering layer for JavaScript-heavy targets, and verify every profile before you scale. Start with a small crawl, measure your block rate, and expand only when the current setup holds.
For more on proxy configuration patterns, see the ScrapeOps AdsPower integration guide and the ProxyOmega integration reference for how targeting suffixes work across tools. AdsPower's own ecommerce scraping guide covers the non-coding side of the same workflow.
