Phantom, the browser your agents run on
Phantom is Browsa's own browser built on Chromium: one build for every customer on every plan, measured in public.
- Your codePlaywright, Puppeteer, raw CDP or MCP
- Browsa API
POST /v1/agentspicks one coherent machine - PhantomBuilt in, no random noise
- navigator
- WebGL
- WebGPU
- Screen
- Fonts
- Voices
- Permissions
- Time zone
- The siteVia your proxy, or from our data center
- Measured on production
- Browser
- Default, macOS
- Network
- No proxy, our data center
- Compared with
- Regular Chrome on a real Mac
What Phantom can do
- One coherent machineA Mac or Windows shape: cores, memory, screen, GPU, fonts and voices chosen together
- Your client, as it isPlaywright, Puppeteer, raw CDP or MCP, with no extra plugin
- WebGL and WebGPUBoth available; a WebGPU adapter since 14 November 2026
- Saved identities, your proxyLogins kept between sessions; your own HTTP, HTTPS or SOCKS5 proxy per browser
- Live view
live_urlopens the running browser to watch or take over - Same build on every planIncluding the 100 free credits
What public checks reported
One production run, no proxy. The miss is shown with the passes.
Measured on
- bot.sannysoft.com
- 31/ 31checks passed
- fingerprint-scan.com
- 0/ 100bot score, lower is better
- deviceand
browserinfo.com - 0/ 22signals raised, not flagged
- Twelve real sites
- 10/ 12opened: 7 untouched, 3 after one click
Of the twelve sites, three showed Cloudflare's full-page check and opened after one click on its checkbox, and two did not load. No browser passes every check. Every result, misses included.
Measured values and known gaps
Each area, what Phantom does, and what a default browser reported next to a real Mac.
Measured on
-
navigatorNo gapSets user agent, platform, languages, vendor,
hardwareConcurrencyanddeviceMemoryfor the chosen OS, with the same values in workers and iframes. Cores, memory, screen and GPU name are chosen together as one machinemacOS user agent and
platform: MacIntel, languagesen-US, en;hardwareConcurrency14,deviceMemory32. A dedicated worker, a shared worker and an iframe reported the same values. TheuserAgentDataarchitecture wasarmin the page, the dedicated worker and the shared worker, as on the real Mac; earlier that day the first page of a session readx86. The Chrome major version in the user agent was one behind the latest stable release that rebrowser-bot-detector looked up; its version test passed. -
Automation flagNo gap
navigator.webdriveris present andfalse, as in regular Chrome. Ordinary pages get nochrome.runtimeobject. Thecdc_*properties automation drivers leave behind are absentnavigator.webdriverisfalseand'webdriver' in navigatoristrue, the same as regular Chrome on a real Mac.window.chromehasloadTimes,csiandappand noruntime, the same keys as on the real Mac -
Automation clientNo gap
Console behaviour, error timing and error stack traces are the same with an automation client attached as without one
rebrowser-bot-detector passed all 18 tests it ran, with unmodified Playwright as our test client,
runtimeEnableLeakandsourceUrlLeakamong them. deviceandbrowserinfo.com raised none of its 22 signals;isAutomatedWithCDP,isAutomatedWithCDPInWebWorkerandhasInconsistentTimingResolutionwere allfalse. In the first run of the daysourceUrlLeakfailed; on 12 November 2026hasInconsistentTimingResolutionwas raised. -
PermissionsNo gap
Permission states follow regular Chrome defaults
All 20 permission states our probe queries matched regular Chrome on a real Mac: for example notifications, geolocation, camera and microphone
prompt, clipboard-write and the motion sensorsgranted -
WebGLGapsReports a GPU vendor and renderer for the chosen OS, in the format Chrome uses
On macOS: vendor
Google Inc. (Apple), rendererANGLE (Apple, ANGLE Metal Renderer: Apple M2, Unspecified Version), the strings the real Mac reports. The same 39 WebGL and 36 WebGL2 extensions and the same limits as on the real Mac (38 against 39 extensions on 12 November 2026). deviceandbrowserinfo.com did not raisehasInconsistentWebGLShaderLang; it did on 12 November.Gaps: drawing runs in software, so a shader draw test took 716 ms against 108 ms on the real Mac, and the image it drew differs; CreepJS listed two notes, "suspicious gpu" and "suspicious capabilities"
-
WebGPUGapExposes the WebGPU API with an adapter
navigator.gpureturns an adapter with vendorappleand architecturemetal-3. Its 25 features and preferred formatbgra8unormare the same as in regular Chrome of the same major version on an Apple M2, and the 36 limits fingerprint-scan.com read are the same too. On 12 November 2026 no adapter was available.Gap: it draws in software, so WebGPU work is slower than on a real GPU. We did not time it in this run
-
Screen and windowNo gap
Sets screen size, color depth and pixel ratio. A Mac profile gets the built-in display of a Mac that shipped with its chip, with that model's menu bar; scrollbars are overlay scrollbars and the display reports P3 colour
1512 x 982, color depth 30, pixel ratio 2, with a 32 px menu bar, on a profile with an M3 Max chip. Scrollbars take no width;
color-gamut: p3anddynamic-range: highmatch, as on the real Mac (a 1470 x 956 screen with the same 32 px bar). In the first run of the day a profile had 1920 x 1080 with a 25 px bar, which no Mac laptop has. -
Canvas and audioGaps
Adds no random noise. Anti-aliased edges in canvas and WebGL output are drawn slightly differently for each identity, and the same way every time for that identity, as they differ between real machines. Audio is not varied
Canvas: the same result on repeated draws, no altered pixels in a solid fill. Two default browsers gave different canvas and WebGL readouts; until that day's last build every browser gave the same ones. In a test of that build, one identity gave the same readouts in a second session. Audio: the same result on two runs, and a live sample rate of 48000 Hz as on the real Mac. CreepJS listed no lies.
Gaps: the canvas image and text metrics differ from the real Mac; a 2D canvas test took 27 ms against 14 ms; the audio readout differs from the sixth decimal place (124.0434777 against 124.0434748); the live audio context reported
running, andsuspendedon the real Mac -
FontsGap
Provides the fonts of the chosen OS
All 37 macOS fonts our probe looks for were found, the same 37 as on the real Mac.
Gap: text set in the generic
system-ui,cursive,fantasyandemojifamilies measured different widths than on the real Mac (system-ui: about 890 px against 827 px), and an emoji drawn to a canvas came out differently -
Voices and media devicesNo gap
The speech voice list and the media device list follow a real Mac
CreepJS counted 210 speech voices, 191 of them local, the same counts as on the real Mac. One audio input, one video input and one audio output, as on the real Mac
-
Video and DRMGaps
Plays the codecs built into the Chromium build
H.264, VP8, VP9 and AV1 are reported as playable.
mediaCapabilitiesreports decoding as smooth and power efficient, as on the real Mac.Gaps: no HEVC video and no Widevine (
com.widevine.alphais refused); regular Chrome on the real Mac had both. WebRTC lists 13 video codecs against 15 on the real Mac: H.265 and one H.264 profile are missing -
Time zone and languageNo gap
Follow your proxy's country when you set a proxy. With no proxy, the time zone follows the address the traffic leaves from, and
countrydoes not change itNo proxy: the time zone belongs to the country fingerprint-scan.com looked up for the exit address, and the page, both workers and an iframe reported the same zone. Language
en-US -
NetworkNot compared
Bring your own HTTP, HTTPS or SOCKS5 proxy per browser. Without one, traffic leaves from our data center
No proxy: traffic left from our data center, with a data-center IP address. WebRTC reported that same address
How we measured
Measured on production on 14 November 2026, after a new browser build went live that day, with a default browser: POST /v1/agents with only a TTL (macOS is the default os_type), no proxy. Page values were read by a probe script run through Playwright over CDP; detector values are what each public page showed in the same run. "The real Mac" is the same probe run in regular Chrome on a real Apple Silicon Mac on 12 November 2026, one major version behind our build. The WebGPU comparison used Chrome of the same major version as our build on an Apple M2. This is one run of one browser; the platform picks the machine, so screen size, cores and memory differ between browsers. Windows and Linux shapes were not measured on this build, so we do not list their values here.
- PassedNot detectedBotD: none of its 18 detectors fired
- PassedPassedbrowserscan.net: "Browser fingerprint authenticity: 100%"
- PassedTrustworthyiphey.com, score 100
- MissMixedCreepJS: 0% headless, 0% stealth, 31% "like headless", two WebGL notes
- PassedPassedrebrowser-bot-detector: 18 tests passed, none failed
- MissMixedpixelscan.net: no automated behavior, but "Masking detected" and "Proxy detected"
On 9 November 2026 the trust score API gave a default browser 840 out of 1000. That number is an estimate computed from the browser's settings, not a result of these checks; 700 to 849 is the range a new browser with default settings starts in. How trust_score is computed.
Power-user overrides
Six overrides for finer control, set when the agent is created.
- Empty means the platform default.
- An invalid value falls back to the default rather than refusing the provision.
- The overrides do not change the trust score.
| Override | Accepted values | Default |
|---|---|---|
screen_resolution | 1366x768, 1440x900, 1536x864, 1600x900, 1920x1080, 2560x1440, 3840x2160, mobile-iphone (390x844), mobile-android-pixel (412x915), or custom WxH (320≤W,H≤7680) | Platform picks (default browsers measured 1920x1080 and 1440x900 on 14 November 2026) |
webrtc_mode | masked, real, disabled | masked |
geolocation_mode | prompt, allow, block | prompt |
geolocation_data | "lat,lng" string (lat∈[-90,90], lng∈[-180,180]), used when geolocation_mode="allow" | derived from country |
media_devices_mode | masked, real | masked |
port_scan_protection | masked, real | masked |
1Set them on the agent at create time.
curl https://browsa.io/v1/agents \
-H "X-API-Key: agt_live_..." \
-d '{
"mode": "burner",
"os_type": "OS_TYPE_MACOS",
"country": "de",
"screen_resolution": "2560x1440",
"geolocation_mode": "allow",
"geolocation_data": "52.5200,13.4050"
}'2Incoherent combinations are not refused (some advanced use cases want a mobile resolution on a macOS UA). They show up in warnings on GET /v1/agents/{id}/fingerprint.
{
"screen": { "width": 390, "height": 844, ... },
"warnings": [
"screen_resolution is smaller than a desktop screen but os_type is a desktop OS; a page can read both values",
"media_devices_mode=real returns the host's device list, which is empty in our data center"
],
...
}Verify it yourself
Four ways to audit the fingerprint yourself.
GET /v1/agents/{id}/fingerprintThe wire-level preview for any provisioned agent.GET /v1/agents/{id}/trustThe per-factor trust-score breakdown.GET /v1/agents/{id}/detection-signalThe latest recorded harness run for your identity's fingerprint shape, ornullwhen there is none from the last 14 days (the case on 9 November 2026).c.connect(agent_id)Connect to the agent via CDP in the SDK and open any bot-check page in it. Compare what you see with the measurements above.
from browsa import Client
c = Client(api_key="agt_live_...")
agent = c.create_agent(country="us", os_type="OS_TYPE_MACOS")
print(c.fingerprint(agent["id"])) # full wire spec
print(c.trust_breakdown(agent["id"])) # why the score is what it is
print(c.connect(agent["id"])) # paste-ready Playwright snippetWhy we publish this
So you can check Phantom against your own browser. If a value here doesn't match yours, email support@browsa.io with your agent_id.
Audit it on your own agent.
Start free with 100 credits. No card, no subscription.