← Back to blog
Partner Spotlight·

Notte: Browser Automation API for AI Agents

Christian Pickett

Christian Pickett

Co-founder

AI agents need to interact with websites. Fill forms, click buttons, navigate flows, extract data. But running browsers at scale is painful, CAPTCHAs, bot detection, session management, infrastructure.

Today we're highlighting Notte, a browser automation API designed for AI agents, now available on Orthogonal.

What is Notte?

Notte provides managed browser sessions with AI-powered automation. Start a headless browser, execute actions, scrape content, or let an AI agent complete multi-step tasks autonomously. Built-in CAPTCHA solving and proxy rotation handle the hard parts.

Key Features

Managed Browser Sessions

Spin up Chrome or Firefox browsers on demand. Configure proxies, viewports, and user agents. Sessions auto-clean after timeout.

AI Agent Automation

Describe a task in plain English, let the AI agent figure out the clicks and keystrokes. Multi-step workflows without writing selectors.

Page Scraping

Extract structured content from any page. Use selectors for precision or let AI handle the extraction.

CAPTCHA Solving

Built-in CAPTCHA solving handles reCAPTCHA, hCaptcha, and image challenges automatically.

Using Notte with Orthogonal

Quick Scrape (No Session)

// Using @orth/sdk // Install: npm install @orth/sdk import Orthogonal from "@orth/sdk"; const orthogonal = new Orthogonal({ apiKey: process.env.ORTHOGONAL_API_KEY, }); // Scrape a URL without managing sessions const output = await orthogonal.run({ api: "notte", path: "/scrape", body: { url: "https://news.ycombinator.com" } }); console.log(output); // Returns: { // markdown: "...", // Page content as markdown // structured: {...}, // Extracted data // images: [...] // Image URLs // }

Start a Browser Session

// Start a managed browser session const session = await orthogonal.run({ api: "notte", path: "/sessions/start", body: { browser_type: "chromium", headless: true, proxies: true, solve_captchas: true, viewport_width: 1920, viewport_height: 1080, idle_timeout_minutes: 5 } }); const sessionId = session.session_id; console.log("Session started:", sessionId);

Navigate and Execute Actions

// Navigate to a page await orthogonal.run({ api: "notte", path: `/sessions/${sessionId}/page/execute`, body: { type: "goto", url: "https://example.com/login" } }); // Fill a field await orthogonal.run({ api: "notte", path: `/sessions/${sessionId}/page/execute`, body: { type: "fill", selector: "input[name='email']", value: "user@example.com" } }); // Click a button await orthogonal.run({ api: "notte", path: `/sessions/${sessionId}/page/execute`, body: { type: "click", selector: "button[type='submit']" } });

Scrape Current Page

// Extract content from current page in session const content = await orthogonal.run({ api: "notte", path: `/sessions/${sessionId}/page/scrape`, body: { only_main_content: true, scrape_links: true } }); console.log(content.markdown);

Observe Page State

// Get available actions on current page const state = await orthogonal.run({ api: "notte", path: `/sessions/${sessionId}/page/observe`, body: { instruction: "Find the search input and submit button" } }); console.log(state); // Returns clickable elements, input fields, etc.

Take Screenshot

// Capture screenshot const screenshot = await orthogonal.run({ api: "notte", path: `/sessions/${sessionId}/page/screenshot`, body: { full_page: false } }); console.log(screenshot.url);

Run AI Agent

// Let an AI agent complete a task const agent = await orthogonal.run({ api: "notte", path: "/agents/start", body: { task: "Search for 'AI agents' on Google and extract the top 5 results", session_id: sessionId, url: "https://google.com", max_steps: 10, use_vision: true } }); // Poll for completion const agentId = agent.agent_id; let result; do { await new Promise(r => setTimeout(r, 2000)); result = await orthogonal.run({ api: "notte", path: `/agents/${agentId}`, query: {} }); } while (result.status === "running"); console.log(result);

Clean Up Session

// Stop and clean up session when done await orthogonal.run({ api: "notte", path: `/sessions/${sessionId}/stop`, query: { session_id: sessionId } });

Using x402 Protocol

Notte on Orthogonal supports x402 for autonomous agent payments using USDC stablecoins.

// Install: npm install x402-fetch viem import { wrapFetchWithPayment } from "x402-fetch"; import { privateKeyToAccount } from "viem/accounts"; const account = privateKeyToAccount(process.env.PRIVATE_KEY); const fetchWithPayment = wrapFetchWithPayment(fetch, account); // Scrape URL with automatic USDC payment const url = "https://x402.orth.sh/notte/scrape"; const response = await fetchWithPayment(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ url: "https://example.com" }) }); const data = await response.json(); console.log(data);

Available Endpoints

EndpointMethodDescriptionPrice
/scrapePOSTQuick scrape without session$0.01
/scrape_from_htmlPOSTExtract from raw HTML$0.002
/sessions/startPOSTStart browser sessionDynamic
/sessions/{id}GETGet session statusFree
/sessions/{id}/stopDELETEStop sessionFree
/sessions/{id}/page/executePOSTExecute action (click, type, etc.)$0.002
/sessions/{id}/page/observePOSTObserve page state$0.005
/sessions/{id}/page/scrapePOSTScrape current page$0.003
/sessions/{id}/page/screenshotPOSTTake screenshot$0.001
/sessions/{id}/cookiesGETGet session cookiesFree
/sessions/{id}/cookiesPOSTSet session cookies$0.001
/sessions/{id}/network/logsGETGet network logsFree
/agents/startPOSTStart AI agentDynamic
/agents/{id}GETGet agent statusFree
/agents/{id}/stopDELETEStop agentFree

Use Cases

Web Scraping

Extract data from any website. Handle JavaScript rendering, pagination, and dynamic content automatically.

Form Automation

Automate form submissions, signups, and multi-step workflows. CAPTCHA solving included.

Testing & QA

Run browser-based tests against live websites. Take screenshots for visual regression.

Price Monitoring

Monitor product prices, availability, and changes across e-commerce sites.

Data Collection

Gather training data, research content, or competitive intelligence from the web.

AI Agent Workflows

Let AI agents browse the web autonomously. "Book me a flight" becomes possible when your agent can interact with airline websites.

Why Browser Automation for Agents?

Many APIs don't exist. Agents need to interact with websites the way humans do:

  1. Universal access: Any website, any workflow
  2. No API needed: Automate sites that don't offer APIs
  3. Dynamic content: Handle JavaScript, SPAs, and interactive elements
  4. Visual understanding: AI agents can interpret page layouts
  5. Scale: Managed infrastructure handles the complexity

Try It Today

Sign up for Orthogonal and get $10 free credits to try Notte and dozens of other APIs. No API keys to manage, no accounts to create.

Get Started | View on Orthogonal | Notte Website