Web Scraping APIs

What Is Botasaurus?

What Is Botasaurus? — conceptual illustration
On this page

Botasaurus is an MIT-licensed Python scraping framework with three top-level decorators — @browser, @request, @task — and built-in Bezier-curve mouse movements designed to pass behavioural anti-bot models. Maintained by Omkar Cloud, the project claims documented bypasses on Cloudflare WAF, BrowserScan, Fingerprint, DataDome, and Cloudflare Turnstile. Its mouse-physics module (Humancursor, contributed by Flori Batusha and Ambri) produces statistically-realistic trajectories with Gaussian-jittered velocity rather than the linear interpolation Playwright defaults to.

Quick facts

LicenseMIT
MaintainerOmkar Cloud (github.com/omkarcloud)
GitHub stars4.7k+ (May 2026)
Decorators@browser, @request, @task
Documented bypassesCloudflare WAF, Cloudflare Turnstile, DataDome, BrowserScan, Fingerprint Bot Detection

The three decorators

Botasaurus organises code around the unit you are scraping with — not the framework abstractions other tools impose:

  • @browser — wraps a function so it runs inside an automated Chromium with stealth patches and humanization applied. Use when the target needs a real browser.
  • @request — wraps a function so it runs as a lightweight HTTP request with browser-like headers and connection behaviour. Use when the target does not need JS.
  • @task — generic execution wrapper for non-scraping work (parsing, API calls, ML inference) that should share Botasaurus's parallelism and caching infrastructure.

A single project can mix all three: @request hits an XHR endpoint for the listing page, @browser opens detail pages that need JS, @task runs the LLM extraction step.

Why the mouse physics matter

DataDome runs a 35+ signal behavioural model that profiles mouse trajectories, scroll velocity, typing cadence, and click coordinates in real time. A scraper that calls page.mouse.move(x, y) with Playwright's default linear interpolation creates a trajectory that is statistically impossible for a human hand. DataDome catches this regardless of how perfect the TLS, IP, or canvas fingerprint is.

Botasaurus ships Humancursor, a separate library by Flori Batusha and Ambri, which generates Bezier-curve paths with Gaussian-jittered velocity and Fitts's Law deceleration (the curve slows as it approaches the target, slightly overshoots, then corrects). Pair that with page.click_human(selector) and the trajectory matches the distributions DataDome trained on.

What Botasaurus does not replace

Botasaurus is a framework, not a complete stealth stack. It still needs:

  • Residential or mobile proxies for IP reputation — datacenter IPs fail at the network layer regardless of mouse physics.
  • A patched browser binary (CloakBrowser / Camoufox) for the hardest targets where Function.toString() detection or Akamai's 60-extension probe matters. Botasaurus's stealth is JS-layer on top of vanilla Chromium.
  • curl_cffi or tls-client for HTTP-only flows where you need explicit TLS impersonation. Botasaurus's @request uses browser-like defaults but does not ship a curl_cffi-grade JA4 replacement.

In a production stack, Botasaurus is the orchestration and behavioural layer; you compose it with the right network and binary layers underneath.

Code example

python
# Botasaurus with humanized mouse — works against DataDome's behavioural model
from botasaurus.browser import browser, Driver

@browser(
    proxy="http://user:pass@residential:port",
    humanize=True,    # enables Humancursor Bezier-curve movements
)
def scrape(driver: Driver, data):
    driver.get("https://datadome-protected.example.com/")
    driver.click_human(".product-link")         # Bezier path, not teleport
    driver.scroll_human(amount=600)             # variable-velocity scroll
    return driver.page_html

result = scrape("ignored")

Related terms

Concept map

How Botasaurus connects

The terms most directly tied to this one. Hover a node to see its neighbours, click to preview, drag to rearrange.

0 terms · 0 connections
You are here · Web Scraping APIs
Building map…

Frequently asked questions

Is Botasaurus a replacement for Playwright?

No — it builds on top of Chromium automation (similar primitives to Playwright) and adds the decorator API, humanization layer, parallel execution, caching, and the ability to package scrapers as desktop apps or web UIs. For the lowest-level browser control you still talk to Chromium APIs; Botasaurus is the productivity layer above.

Does Botasaurus bypass Cloudflare Turnstile?

The project claims documented bypasses on Cloudflare Turnstile in addition to Cloudflare WAF, DataDome, BrowserScan, and Fingerprint Bot Detection. Real-world results depend on the specific deployment, proxy quality, and how recently the site updated. Always test on your specific target before scaling.

How is Botasaurus different from undetected-chromedriver?

undetected-chromedriver focuses narrowly on removing the navigator.webdriver flag from Selenium-driven Chrome. Botasaurus is a full framework — decorators, humanization, caching, parallelism, packaging — built around the assumption that anti-bot evasion has many surfaces beyond the WebDriver flag. They solve different scopes.

Can I run Botasaurus headless?

Yes, the @browser decorator accepts a headless=True argument. Note that headless Chromium produces a software-rendered canvas (SwiftShader, device ID 0x0000C0DE) that is blocklisted on Akamai. For Akamai-protected targets, run Botasaurus with headless=False under Xvfb, or upgrade the browser layer to CloakBrowser.

Last updated: 2026-05-26