Notte runs full Chromium browser sessions that execute all JavaScript - React hydration, lazy loading, infinite scroll, WebSocket updates, and client-side routing.
Why API-based scrapers fail on dynamic content:
- SPAs render content via JavaScript after page load
- Lazy-loaded images and content aren't in the initial HTML
- Infinite scroll requires actual scrolling to trigger data loading
- Client-side routing means URLs don't map to server-rendered pages
- WebSocket-driven content (dashboards, chat, real-time data) requires a persistent connection
How Notte captures everything:
- Full Chromium rendering engine - sees exactly what a human sees
- AI agents handle scrolling, waiting for content, and navigating client-side routes
- Captures content after all JavaScript has executed and data has loaded
- Returns structured data (Pydantic models), not raw HTML
At scale:
- Plan-based browser concurrency, with higher limits available on Enterprise
- Each session renders independently with full JavaScript support
- Stealth settings and proxies are available for sites with bot controls
- Usage-based pricing for browser time, proxies, and LLM usage
Use cases:
- E-commerce product data (React/Vue SPAs)
- Financial dashboards (real-time data)
- Social media content (infinite scroll)
- Internal tools behind login (dynamic rendering)
Docs at docs.notte.cc.