Notte Web Automation

A Python framework and hosted API for browser-based AI automation and structured web extraction.

Source repo
nottelabs/notte
Stars
★ 2.1k
Last updated
today
License
NOASSERTION
Primary language
Python

At a glance

How it runs
Library / SDKHosted service
Works with
Portable with changes
Cost
Free tier plus a paid hosted plan
Setup effort
Low · running in minutes
You'll need
Python 3.11+PatchrightChromiumShell / CLINetwork accessLocal filesystem
Typical use
A Python developer running browser tasks locally with their own LLM API keys for navigation, form actions, or image search.
Not a fit if
  • Teams that need fully offline or on-prem browser sessions; hosted sessions run in Notte's cloud
  • Commercial projects that cannot accept the SSPL-1.0 license terms
  • JavaScript-only teams unwilling to add a Python runtime

What does this agent do, and when should you use it?

Notte is a Python framework and API service for building, deploying, and scaling AI automations that interact with websites. Its open-source path uses notte.Session and notte.Agent with a local browser session and the user's own LLM API keys. Its hosted path uses notte_sdk.NotteClient to create sessions and agents, and requires a Notte API key. The documented workflow combines Playwright-compatible deterministic actions with natural-language agent steps and can return Pydantic-defined structured output. The README also documents hosted session features including Vaults, Personas, file storage, cookies, CDP connections, proxies, and CAPTCHA solving.

In local mode, you install notte and Chromium through Patchright, open a notte.Session, and call notte.Agent(...).run(task=...) for a natural-language browser task. In hosted mode, NotteClient creates the session and agent; the session can call session.execute(type="goto"|"fill"|"click", ...), session.observe(), and session.scrape(instructions=...). Agent.run accepts a Pydantic response_format and exposes the returned result through response.answer. client.scrape fetches and extracts a URL directly, while FileStorage uploads inputs and retrieves files downloaded during an agent session.

  1. A Python developer running browser tasks locally with their own LLM API keys for navigation, form actions, or image search.
  2. A data-extraction engineer collecting article or Hacker News fields into a Pydantic schema with titles, URLs, authors, scores, and content.
  3. An automation team scripting stable navigation and form filling with session.execute, then using an Agent only for steps requiring web-page reasoning.
  4. A team needing hosted browser sessions with proxies, CAPTCHA handling, cookies, or a connection to an external CDP-compatible browser.
  5. A user automating a login workflow by adding site credentials to a Vault for use by an Agent.
  6. A workflow that must upload a PDF to a website and retrieve files downloaded by the agent through FileStorage.

How do you install or deploy this agent?

Local mode requires Python 3.11+. Install the package and Chromium:

pip install notte
patchright install --with-deps chromium

A local agent also needs your own LLM API keys. For the hosted SDK path, create NOTTE_API_KEY in the Notte Console; the README shows from notte_sdk import NotteClient but does not provide a separate installation command for notte_sdk.

How do you use this agent?

First local invocation:

import notte
with notte.Session(headless=False) as session:
    agent = notte.Agent(session=session, reasoning_model='gemini/gemini-2.5-flash', max_steps=30)
    response = agent.run(task='doom scroll cat memes on google images')

For hosted execution, create NotteClient(api_key=os.getenv('NOTTE_API_KEY')), create client.Session(...), then create client.Agent and call the same run method.

What are this agent's strengths and limitations?

Pros
  • It explicitly combines deterministic session.execute browser primitives with agent reasoning, so stable portions can remain scripted.
  • Pydantic-backed response_format provides a documented way to constrain web-extraction results to a caller-defined structure.
  • The hosted session interface documents proxies, automatic CAPTCHA solving, Vaults, Personas, file storage, cookies, and CDP connectivity.
  • AgentFallback provides a documented recovery pattern when a deterministic browser action fails.
Limitations
  • Local use requires Python 3.11+, Patchright, Chromium, and LLM API keys supplied by the adopter.
  • Hosted capabilities require a Notte Console API key; the README supplies no standalone notte_sdk installation command or pricing details.
  • The supplied repository metadata lists the license as NOASSERTION while the README says SSPL-1.0, so the effective license should be verified before adoption.
  • Its benchmark ranking is reported from the linked open-operator-evals; it does not establish results for a specific site, model, or workload.

How does this agent compare with similar options?

The README's benchmark table compares Notte with Browser-Use and Convergence (proxy-lite). It reports 86.2% Agent Self-Report, 79.0% LLM Evaluation, 47 seconds per task, and 96.6% Task Reliability for Notte; these are reported evaluation figures, not guarantees for other environments.

Key facts side by side with the most closely related agents.

Agent Source review Form / cost Stars Updated Language Full support on
Notte Web Automation This agent 44 · Major gaps Library / SDKFreemium ★ 2.1k today Python —
Stagehand: The AI Browser Automation Framework 47 · Major gaps Library / SDKFree + model costs ★ 26k 1d ago TypeScript —
OpenBrowser 60 · Some gaps CLIFreemium ★ 279 1mo ago Python Codex · Claude Code · Claude.ai · OpenAI API · Claude API
BrowserAct Skills: Real Browser Automation for AI Agents 48 · Major gaps CLIFreemium ★ 6.3k 2d ago Python Codex · Claude Code

How does FollowAgents rate this agent?

FollowAgents source review · FARS-2.1
Major gaps
44/ 100 5-point scale 2.2 / 5
This review covers the source as of Aug 09, 2026. The project has shipped 25 stable release(s) since, which have not been re-reviewed. The score and verdict describe the reviewed version only. Recent releases ↓
Trust 7/29
Reliability 6/14
Adaptability 10/18
Convention 9/18
Effectiveness 9/13
Verifiability 3/8
Why each dimension lost points
Trust7 / 29 · 1.2/5

Evidence: README describes vault and persona features, implying credential management, but no implementation details or least-privilege explanations. User confirmation mechanism not seen. Data flow transparency limited, only mentions file storage and cookie management. Sensitive data handling has vault and persona concepts but not in-depth. Dependency security has pyproject.toml listing dependencies, but no vulnerability scanning or lock file. External effects evident (browser automation, proxies, CAPTCHA solving), but side effects not discussed. Rollback mechanism not seen. Source attribution has author and copyright, but publisher unverified. Deductions: lack of concrete implementation evidence, permissions and user confirmation not addressed.

Reliability6 / 14 · 2.1/5

Evidence: README and docs tests show internal consistency, e.g., parameter sync tests. Dependency availability: dependency list exists, but no lock file or version ranges. Failure messages: docs mention AgentFallback for handling failures, but no specific error message format. Deductions: dependency locking and error message details insufficient.

Adaptability10 / 18 · 2.8/5

Evidence: README targets developers, provides multiple scenarios (agents, scraping, hybrid workflows). Capability boundaries: describes feature scope, but no explicit limitations. Trigger precision: tasks described in natural language, but no precise trigger conditions. Environment fit: supports local and cloud modes, but no system requirements. Deductions: trigger precision and boundary definitions not precise enough.

Convention9 / 18 · 2.5/5

Evidence: Information architecture clear, with README, docs, tests. Install notes provide pip command. Naming stability: version number exists, but no changelog. Examples and FAQ: many examples, but FAQ not seen. Known limitations: not explicitly listed. License: SSPL-1.0 clear. Versioning: version number, but no changelog. Maintenance responsibility: author and contact, but no maintenance policy. Deductions: missing changelog, FAQ, and known limitations.

Effectiveness9 / 13 · 3.5/5

Evidence: Output usability: provides structured output and scraping. Marginal value: emphasizes cost reduction and reliability. Cost-benefit: claims 50%+ cost reduction, but no detailed data. Deductions: cost-benefit claims lack concrete evidence.

Verifiability3 / 8 · 1.9/5

Evidence: Claim traceability: benchmarks link to external repo, but no raw data. Cross-source: external links exist, but not independently verified. Fact-inference separation: README distinguishes features and benchmarks, but inferences not explicitly labeled. Deductions: benchmark data not provided, inferences not clearly marked.

Risks and how to mitigate them
  • Not found in source: confirmation before actingTurn on (or add) a confirmation step before it acts, and try it in a sandbox or test environment before real data.
  • Not found in source: rollback or recovery pathBack up first, or work on a git branch or snapshot, so its changes can be undone.
  • Publisher unverified, identity unknown.
  • Dependencies not locked, supply chain risk.
  • Sensitive data handling (vault/persona) implementation details not disclosed.
  • Benchmark data not provided, claims should be treated with caution.
  • SSPL license may affect commercial use.
Evidence confidence: Low Reviewed Aug 09, 2026 Reviewed revision caf891985c81 New commits since this review; the score may not cover them
See the full review method →

Recent releases

Latest entries from the project's GitHub Releases. Notes are quoted from upstream as written, not rewritten or tested by FollowAgents.

  1. v1.10.5
    Release notes excerpt
    <!-- Release notes generated using configuration in .github/release.yml at 92ad42ac54d4b31463462a48aa95aba8a6798635 --> What's Changed What's Changed * chore: advance Python packages to 1.10.5.dev0 by @andreakiro in https://github.com/nottelabs/notte/pull/1459 * feat(credentials): add BitwardenVault and AacVault integrations by @giordano-lucas in https://github.com/nottelabs/notte/pull/816 * Document passwords, 2FA codes and API keys for secret proxies by @giordano-lucas in https://github.com/nottelabs/notte/pull/1461 …
    View on GitHub ↗
  2. v1.10.4
    Release notes excerpt
    <!-- Release notes generated using configuration in .github/release.yml at bdcc74d262208147ec08c7e015a91b2079fad20f --> What's Changed What's Changed * chore: advance Python packages to 1.10.4.dev0 by @andreakiro in https://github.com/nottelabs/notte/pull/1452 * Add secret proxy entry and sticky_session proxy option by @giordano-lucas in https://github.com/nottelabs/notte/pull/1451 * Send the persona inbox test email through Resend by @leo-notte in https://github.com/nottelabs/notte/pull/1450 …
    View on GitHub ↗
  3. v1.10.3
    Release notes excerpt
    <!-- Release notes generated using configuration in .github/release.yml at e675bf886702b73f93f2a953eac5755c8053dc5e --> What's Changed What's Changed * Fit Gemini computer-use popups to the shared window viewport by @giordano-lucas in https://github.com/nottelabs/notte/pull/1426 * chore: advance Python packages to 1.10.3.dev0 by @andreakiro in https://github.com/nottelabs/notte/pull/1427 * ci: stop passing an OpenAI key to the integration examples by @giordano-lucas in https://github.com/nottelabs/notte/pull/1424 …
    View on GitHub ↗

FAQ

Can it run entirely locally?
Yes. The README shows local execution with notte.Session and notte.Agent; you install Patchright and Chromium and provide your own LLM API keys.
When is a Notte API key required?
A NOTTE_API_KEY created in the Notte Console is required for the hosted NotteClient path and its documented hosted session features.
Can it return validated structured data?
Yes. Supply a Pydantic response_format to Agent.run or client.scrape to request output in that model's structure.
What happens if a scripted action fails?
The README demonstrates AgentFallback(session, "..."), which can invoke an agent recovery task when a deterministic session.execute operation fails.
Can it use an existing browser provider?
The README documents passing a CDP URL through client.Session(cdp_url=...) for an external CDP-compatible browser session.
View on GitHub ↗ Install ↓

Related agents