Fractera AI Browser
A real browser on your server for machines: it opens pages and web applications the way a person does and returns what is actually on them.
Memory, other services and agents give it addresses and get back the final HTML after scripts, all the text, headings, links, buttons, forms, fields and media by attributes — for several pages in one call. YouTube videos come back with their data and subtitles with timestamps.
An agent that reads the web with plain HTTP requests sees empty templates of script-drawn pages and meta tags instead of content. And a browser running next to your data is a risk of its own if a page can make it knock on the machine's internal doors.
The AI browser is a separate microservice with its own address, its own key and its own pages. It does one thing: opens what it is given with a real browser and returns the result in a form a program can use.
One entry point, and every step between the caller and the page is a check.
A shallow look at elements and media by their attributes, and the whole text and code of the page.
The full HTML after scripts have run, and all visible text — not the source the server sent.
Title, lang, canonical, meta tags and headings h1–h6 with their levels.
Links, buttons, forms and fields with their names, labels, placeholders and options.
Images, video, audio and frames by their attributes: address, alt, poster, duration, title.
The browser stands next to the data layer and other services. A page must not be able to use it as hands inside the machine.
Scheme, literal IP and resolved name are checked before a tab opens: loopback, private networks, link-local and the machine's own addresses are refused.
All browser traffic leaves through the service's own proxy for that address. It resolves names itself and connects only to the address it checked — redirects and WebSockets included.
The browser engine is started so that even loopback goes through the proxy; by default Firefox would send it past.
The same browser, a method of its own: youtube returns the content of a video, not the page around it.
Title, description, channel, duration, publish and upload dates, views, keywords — from the video page itself.
Taken from the request the player makes when subtitles are turned on, as lines [mm:ss–mm:ss] text. A language can be asked for.
No subtitles or the player gave none — the video's data with transcript: null and the reason in words.
The service ships with a bench behind architect sign-in. It calls the same contract as any program — there is no second path into the browser.
/{lang}/settings?section=read-test
One REST API, one key. Two methods: read pages, read a YouTube video.
curl -X POST https://ai-browser.your-domain.com/v1/read \
-H "Content-Type: application/json" -H "x-ai-browser-key: YOUR_KEY" \
-d '{ "urls": ["https://todomvc.com/examples/react/dist/"] }'curl -X POST https://ai-browser.your-domain.com/v1/read \
-H "Content-Type: application/json" -H "x-ai-browser-key: YOUR_KEY" \
-d '{ "urls": [
"https://developer.mozilla.org/en-US/docs/Web/HTML",
"https://en.wikipedia.org/wiki/Web_browser",
"https://example.com/"
] }'curl -X POST https://ai-browser.your-domain.com/v1/youtube \
-H "Content-Type: application/json" -H "x-ai-browser-key: YOUR_KEY" \
-d '{ "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "lang": "en" }'Limits are stated in the answer itself, and anything cut is marked — a list of 300 links out of 2,000 carries total: 2000.
| What | Limit |
|---|---|
| Addresses per call | 10 |
| Tabs open at once | 3 |
| Time per address | 90 s |
| Final HTML per page | 5,000,000 characters |
| Visible text per page | 1,000,000 characters |
| Each list of elements | 300 items |
There is exactly one thing to know about installing this.
One run of the Fractera installer robot on your own server brings up every microservice of the platform, the AI browser included — the browser engine, its libraries, nginx and the access key are arranged for you.
The bench, the API and every method open pages through one guarded tab. A second path into the browser would bypass the address ban.
Every refusal has a permanent code and a reason: url-forbidden, page-timeout, not-youtube, video-unavailable. A failed address never breaks the others in the same call.
What is cut is marked, what did not load is said. load_reached: false means the page was returned without waiting for its load event.
Short answers to what people ask before they integrate.
Because many pages are drawn by scripts. A plain request to TodoMVC returns 645 characters of HTML; the browser returns 3,289 after the scripts have run — the list, the input field, the buttons. A plain request sees an empty template, the browser sees the page a person sees.
No. Addresses of the machine itself, loopback, private networks and link-local ranges are refused before a tab opens, and again on every request the page makes — images, frames, fetch, redirects and WebSockets. All browser traffic leaves through the service's own proxy, which resolves each name itself and connects only to the address it checked. A probe on the server counts hits on a loopback listener: zero, including after a redirect to 127.0.0.1.
For every address: the final URL and status, the title, the full final HTML, all visible text, lang and canonical, meta tags, headings h1–h6, links, buttons, forms and fields with their labels, images, video, audio and frames by their attributes — each list with items and total. Plus what the page tried to reach and was refused, and whether the page reached its load event.
Fractera AI Browser is one microservice of the Fractera platform, the engineering infrastructure for autonomous agents. The whole project, this service included, is open source.
The Fractera project on GitHubRead the service passport — what it is for, how it is built and where its limits are.
You still get the video's data — title, description, channel, duration, dates, views — with transcript: null and a reason in words. Subtitles are taken from the request the player itself makes; when the player gives none, the answer says so instead of returning an empty success.
A light page opens in a few seconds; a heavy one with dozens of third-party resources takes 20–60 s. Up to 10 addresses per call, 3 open at once, 90 s per address. Measured on the reference server: three heavy pages in one call — about 95 s.
No. The browser does not sign in to sites and does not solve bot checks. If a site shows a check page instead of its content, you get that page with its status code — measured: a Vercel security checkpoint came back as status 403 with its own title.
Memory calls it first, to keep pages and videos people send. Other services of the server and agents call it over the same contract with a key; processes of the same machine use the machine secret.
On your server. The browser, its cache and every page it opens stay on the machine; there is no third-party scraping service in the middle.