Skip to content
Glossary

A headless browser is a real browser with nothing to look at

It parses HTML, runs JavaScript, applies CSS, keeps cookies and speaks the network exactly as a visible browser does. The only missing piece is the part a person would look at.

What headless does and does not remove

It removes the window, not the engine


Layout is still computed, JavaScript still executes, the event loop still ticks. Chrome in headless mode is Chrome. That is the whole point of it, and the reason it is heavier than an HTTP client.

It saves less memory than people expect


Dropping compositing and window management trims overhead, but the renderer process, the JavaScript heap and the network stack are unchanged. Budget for a few hundred megabytes per instance, not a few.

It is driven over a protocol, not by hand


Without a window there is nothing to click, so control comes from the Chrome DevTools Protocol underneath Playwright or Puppeteer. Everything a person could do has to have a protocol call behind it.

It is detectable, and increasingly declared


Headless Chrome differs from a desktop install in measurable ways. The direction of travel is declaring what you are through Web Bot Auth rather than disguising it.

Headless versus the alternatives

HTTP client (curl, requests) No JavaScript, no DOM. Fast and cheap where the server already returns the content you need.
HTML parser plus fetch Parses markup but executes nothing. Fine for static pages, useless for a single-page application.
Headless browser Full engine, full JavaScript, full cookies and storage. The correct choice when the page builds itself in the client.
Headed browser on a virtual display Same engine plus a window. Still used where an extension or a media codec refuses to run headless.
Typical memory per instance Roughly 150 to 400 MB for Chromium, driven mostly by the pages you keep open
Typical cold start Around one to three seconds for a fresh process, far less when a warm instance is reused

As of 2026-08-31

Common questions

Is headless Chrome the same as Chrome?

Since Chrome 112 the new headless mode is the same binary and the same rendering path, rather than the separate implementation the old mode used. Behaviour differences that used to bite people, particularly around extensions and printing, have largely closed.

Do I need a headless browser to scrape a page?

Often not. If the data arrives in the initial HTML response or from a JSON endpoint the page itself calls, an HTTP client is faster and an order of magnitude cheaper. Reach for a browser when the content only exists after scripts run.

Why is my headless run slower than my desktop browser?

Usually because nothing is cached. A desktop profile has months of warm disk cache, DNS and TLS session state; a fresh container has none of it. Persisting a profile between runs closes most of the gap.

Can a site tell that I am headless?

Yes, and reliably. Rather than trying to hide it, the more durable answer is to be a well-behaved client: identify yourself, respect robots directives, and keep request rates sane.

Run a headless browser without running the fleet

Five browser hours, no card. Point an existing Playwright or Puppeteer script at a different endpoint and see what changes.