Quick verdict: DataDome blocks at four layers — IP reputation (datacenter = instant block), TLS fingerprint (Python's default fails), browser fingerprint (canvas, WebGL, audio context), and behavioral signals (mouse movement, scroll). Beating it in 2026 needs all four: rotating residential or LTE mobile proxies + curl_cffi or undetected-chromedriver + matching headers/UA + slow human-like timing. For the consumer-CAPTCHA fallback, plug in 2Captcha or CapSolver.
Sites using DataDome in 2026: Reddit, Hermes, Allegro, RIU, FootLocker, Vinted, French press portals, several airlines. If you see a "Sorry, you have been blocked" page with the DataDome logo or a slider CAPTCHA, that is what you are facing.
DataDome scores every request 0–100. Above a threshold (typically 70+) you get a CAPTCHA, above 90 a hard block. The score blends:
For DataDome targets without a JS-only challenge, curl_cffi is the lightest option. It impersonates Chrome's TLS and HTTP/2 fingerprints at the network layer:
pip install curl_cffifrom curl_cffi import requests
proxy = "http://USER:[email protected]:8000"
r = requests.get(
"https://target-with-datadome.com",
impersonate="chrome120",
proxies={"http": proxy, "https": proxy},
timeout=30,
)
print(r.status_code, len(r.content))Pair with rotating Premium Residential ($2.75/GB) for IP rotation. This combo handles the IP + TLS + HTTP/2 layers. It will NOT solve a JS challenge or CAPTCHA, but DataDome only fires those for ~20-30% of traffic from residential IPs.
For sites where DataDome challenges every request, you need a real browser AND the cleanest IPs:
pip install undetected-chromedriver seleniumimport undetected_chromedriver as uc
from selenium.webdriver.common.proxy import Proxy, ProxyType
options = uc.ChromeOptions()
options.add_argument("--proxy-server=http://gw-mobile.spyderproxy.com:8000")
driver = uc.Chrome(options=options, version_main=120)
driver.get("https://target.com")
# Wait for human-like time before scraping
import time
time.sleep(4)
html = driver.page_source
driver.quit()LTE Mobile proxies ($2/IP) are the gold standard for DataDome — carrier IPs share with thousands of legitimate phones, so DataDome cannot block them without collateral damage. Use a fresh sticky-session IP per scraping task.
When DataDome serves the slider/geetest CAPTCHA, you cannot solve it programmatically. Hand off to a solver:
import requests
# 1. Submit to 2Captcha
captcha_id = requests.post("http://2captcha.com/in.php", data={
"key": "YOUR_2CAPTCHA_KEY",
"method": "datadome",
"captcha_url": "https://geo.captcha-delivery.com/captcha/?initialCid=...",
"pageurl": "https://target.com",
"userAgent": "Mozilla/5.0 ...",
"proxy": "user:[email protected]:8000",
"proxytype": "HTTP",
}).text
# 2. Poll for result
import time
while True:
time.sleep(5)
res = requests.get(f"http://2captcha.com/res.php?key=KEY&action=get&id={captcha_id}")
if res.text.startswith("OK|"):
cookie_value = res.text.split("|")[1]
break
# 3. Use the datadome cookie in your next request
cookies = {"datadome": cookie_value}
r = requests.get("https://target.com", cookies=cookies)Cost: ~$2.99 per 1,000 DataDome solves with 2Captcha. For volume scrapers this often beats trying to bypass without a CAPTCHA.
Even with Chrome impersonation, DataDome tracks how you move through pages. Patterns to mimic:
| Proxy type | DataDome score impact | Cost | Use case |
|---|---|---|---|
| Datacenter | Instant block (95+) | $1.50/proxy/mo | Don't use against DataDome |
| ISP / Static Residential | Medium (40-60) | $3.90/day | Persistent sessions, 1-3 IPs |
| Budget Residential | Medium (30-50) | $1.75/GB | High-volume + acceptable error rate |
| Premium Residential | Low (15-30) | $2.75/GB | Best balance for most DataDome targets |
| LTE Mobile | Lowest (5-15) | $2/IP | Hardest DataDome targets (Reddit, Hermes) |
Before launching the heavy machinery, detect whether the target uses DataDome at all:
r = requests.get("https://target.com")
is_datadome = (
"datadome" in r.text.lower()
or "geo.captcha-delivery.com" in r.text
or "datadome" in dict(r.cookies)
)The unique fingerprints are the datadome cookie name, the captcha-delivery.com challenge endpoint, and the script tag https://js.datadome.co/tags.js.
DataDome bypass is a gray area. Public data (no login) is generally fair under the HiQ v. LinkedIn precedent; data behind a login is not. Always respect robots.txt and ToS. For commercial scraping, get the target's permission or use their API.
Related: Cloudflare bypass, Cloudscraper tutorial, Rotating proxies with Python requests.