The Mosaic blog

News from the product, the engineering behind it, and the reasons we made the calls we made.

RSS feed

Headless is a way to be seen, beside a screenshot: a Mosaic leak test: every surface a site reads, checked from inside the profile page
Engineering

Headless is not a way to hide, it is a way to be seen

Headless Chrome names itself HeadlessChrome in its user agent and drops the real GPU. Why our background work runs headed, off-screen, instead.

Two routes to one value, and only one of them moved, beside a screenshot: mosaic settings showing the installed Tesseract Chrome engine and its version
Engineering

Half a spoof is a contradiction

Partial fingerprint spoofing detection is simple: ask one question two ways. We cut five spoofs that changed one route to a value and left the other.

A fingerprint, a proxy and a cookie jar that agree
Story

Why the parts of a profile have to agree

Fingerprint, proxy and cookies consistency: sites compare the three, and each can look fine alone while together they describe nobody.

1 sec: One command read a session cookie off the disk, beside a screenshot: importing a cookie jar into a Mosaic profile
Engineering

Chromium's mock keychain, and why we encrypt the store

Chromium's --use-mock-keychain keeps cookie encryption on but uses a password from its own source. We read a live session cookie off disk, then sealed it.

300: The page was told 300. The header still said 50
Engineering

The RTT client hint, read off the wire

ECT, RTT and Downlink headers behind a proxy, measured: a claimed round trip moved JavaScript to 300 and left the RTT header at 50. So we claim neither.

false: isTrusted: false, on every scroll it made, beside a screenshot: the Mosaic warm-up robot about to give a new profile a browsing history
Engineering

The warm-up robot that left a bot signature

Our warm-up robot scrolled with window.scrollBy, so pages saw isTrusted false and a scroll with no wheel. How a page detects that, and what we changed.

Values change in C++, not in the page, beside a screenshot: mosaic settings showing the installed Tesseract Chrome engine and its version
Engineering

Why we built our own Chromium instead of injecting JavaScript

Mosaic changes fingerprint values in C++ inside its own engine. Three measured differences between Chrome and plain Chromium explain why that matters.

The pasted line is the specification, beside a screenshot: a proxy provider in Mosaic: one gateway line that mints a separate session for every profile
Engineering

Reading a proxy seller's grammar off one pasted line

Proxy sellers put country, session and lifetime in the username. Mosaic reads the grammar off the line you paste and keeps every token it does not know.

5: Five products, told apart by their fields, beside a screenshot: filtering Mosaic profiles by tag: only the profiles tagged "shop" are listed
Engineering

Importing other browsers' libraries by shape, not file name

To migrate anti-detect browser profiles, Mosaic reads which product wrote the file from its fields, keeps what that product recorded and draws the rest.

Identical in two profiles and equal to this Mac
Engineering

The values every profile inherited from this Mac

A browser fingerprint value inherited from the host is identical across two unrelated profiles and equal to the computer. That test found dark mode and more.

Every profile's files in its own folder, beside a screenshot: mosaic storage settings: each profile downloads into its own folder
Story

A downloaded file is evidence of its profile

With several browser profiles, one shared Downloads folder mixes every profile's files and outlives them. Mosaic gives each profile its own folder instead.

One shortcut per client, in the client's colour, beside a screenshot: mosaic projects: one library split into Client work, Etsy shops and Social team
Industry

Switching between client accounts in seconds, not sign-ins

Signing out and back in is where a client switch costs minutes and where wrong-account posts start. A shortcut per client profile makes it one double-click.

Agency versus Advertiser, each name in its own tile: Linked access instead of a shared login
Industry

Amazon Ads Partner Network access, for agencies

Amazon Ads Partner Network access lets an agency link clients' ad accounts to its own manager account, so nobody hands over a Seller Central password.

The port opens only for a data directory of its own
Industry

Chrome 136 stopped remote debugging on your default profile

Since Chrome 136, --remote-debugging-port is ignored on the default profile. Pass --user-data-dir with a folder of its own and the port opens.

The challenge you get is the score, beside a screenshot: a Mosaic leak test: every surface a site reads, checked from inside the profile page
Industry

Why hCaptcha gives some browsers a puzzle every time

hCaptcha's challenge is its score. A puzzle every time usually means blocked cookies, a crowded VPN exit or a browser whose values disagree with each other.

Every fresh profile is a first visit, beside a screenshot: creating a profile in Mosaic: a checked proxy, and the hardware and locale drawn to match its exit
Industry

Seeing the notification prompt again, as a new visitor would

Chrome asks a site once and keeps the answer, so the tester sees nothing next time. Reset the site's permission, or open a profile that has never visited.

2 clocks: Two round trips, and the gap between them
Industry

Detecting a proxy with two clocks

A server times the TCP handshake to the exit and a round trip to the browser. Behind a proxy the second is longer, and the gap is the tunnel.

A deleted profile has no browser left open, beside a screenshot: the Mosaic trash: deleted profiles kept for 30 days, restorable one by one
Engineering

Trashing a profile closes its browser, at every door

Delete a running profile in Mosaic and its browser closes first. If the browser will not close, the profile stays on the list, with its Stop button.

4: Unlimited bandwidth, and four places the limit goes
Industry

"Unlimited bandwidth" proxies and where the limit really is

An unlimited bandwidth residential proxy still has a limit. It moves to threads, ports, speed or a fair-use clause, and the terms say which one.

webdriver true versus webdriver false, each name in its own tile: true and trusted, false and flagged
Engineering

Why navigator.webdriver is true, and why false proves little

navigator.webdriver is true because automation set it on purpose. We measured a debug-attached Chrome reading true and still scoring 100 on IPHey.

An AI assistant that runs your browser profiles, beside a screenshot: the Mosaic MCP server: let an AI assistant manage profiles, proxies and launches
Engineering

Letting an AI assistant run browser profiles over MCP

Mosaic's MCP server lets Claude or any MCP client create, start and drive browser profiles. Three faults we found when a model was the caller.

-20: One Associates account, one tracking ID per site
Industry

Amazon Associates and several websites: one account, many tracking IDs

Amazon Associates wants one account per person, with every site listed in it and a tracking ID for each. A second account for a second site breaks the rules.

0/100: A perfect score from a page that measured nothing
Engineering

fingerprint-scan.com bot score: 0 before anything was measured

fingerprint-scan.com shows Bot score 0/100 while its hash still reads collecting. Read the score only after the hash exists, and expect 15, not 0.

The key belongs to the browser that wrote the jar, beside a screenshot: importing a cookie jar into a Mosaic profile
Industry

App-Bound Encryption, and why tools stopped reading Chrome's cookies

App-Bound Encryption ties Chrome's cookie key on Windows to Chrome itself, so tools reading the Cookies file broke. Export from inside the browser.

200: A homepage where the bot test used to be
Engineering

A retired bot test can still answer 200 and look like a pass

Antoine Vastel's fp-scanner demo now serves his homepage with HTTP 200, which a challenge reader scores as a pass. His tests moved; here is where.

10_15_7: Every Mac, one frozen version, beside a screenshot: a profile fingerprint in Mosaic: GPU, screen, fonts, timezone and language matched to the exit
Industry

Why every Mac's Chrome says Mac OS X 10_15_7

Chrome froze the macOS version in its User-Agent, so every Mac claims 10.15.7. The real one is in Sec-CH-UA-Platform-Version, a hint sites must ask for.

One bill grows with every profile. Ours doesn't
Industry

The proxy bill is usually bigger than the browser bill

Past a couple of dozen profiles, the exits cost more each month than the anti-detect browser. That is why we price per month, not per profile.

One profile per variant, kept for the length of the test
Industry

Seeing both sides of your own A/B test

Testing tools put each visitor in one variant by a cookie or id and keep them there. To see every variant, keep one browser profile per variant for the test.

TLS: browser versus TCP: exit, each name in its own tile: Two layers, two machines, one connection
Industry

Through a proxy, your TCP fingerprint is the exit's

A proxy's exit opens its own TCP connection, so the TTL, window and options a site reads come from the exit's system, not your browser or your computer.

Windows 10 versus Windows 11, each name in its own tile: Two versions of Windows, one string
Industry

Why the User-Agent says Windows 10 on Windows 11

Windows 11 and 10 both send Windows NT 10.0 in the User-Agent. Only the platformVersion client hint, 13 or higher, says Windows 11.

The call ties the account to a person, beside a screenshot: the Mosaic profiles table: names, coloured tags, proxy locations and a Start button on each row
Industry

Why Amazon verifies new sellers on a video call

Amazon seller video verification puts a face beside the ID and statement you uploaded. After it, two accounts are linked by the person, not by the browser.

1: Five countries, one seller account, beside a screenshot: the Mosaic profiles table: names, coloured tags, proxy locations and a Start button on each row
Industry

Amazon's unified account in Europe, explained

Amazon's unified account in Europe is one Seller Central login for every European store, so selling in five countries needs one account, not five.

.0.0.0: The major is real, the rest is frozen
Industry

Why Chrome's User-Agent says 0.0.0

Chrome zeroes everything after the major, so the User-Agent says 0.0.0 and the build moves to Sec-CH-UA-Full-Version-List. A real build in the UA is a tell.

A copied cookie lasts until its next refresh, beside a screenshot: importing a cookie jar into a Mosaic profile
Industry

Device-bound sessions and the end of copying a cookie

With Device Bound Session Credentials in Chrome, a site reissues its session cookie only to the device with the key. A copied cookie lasts until it expires.

Article one, as a reader who has never been here
Industry

How to test a metered paywall as a new visitor

A meter can count by cookie, by login, by address or by fingerprint. To test yours as a new visitor you need a browser that is new to every one of them.

1300: The segment size belongs to whoever opened the socket
Industry

MSS 1300: what an MSS value says about VPN detection

VPN detection by MSS value: a tunnel shrinks the MSS in every SYN. A proxy opens a new connection at the exit, so a site reads the exit's MSS.

9 GB: A year of one profile, priced two ways
Industry

Per-GB vs per-IP proxy pricing for long-lived profiles

Per GB vs per IP proxy pricing over a year: a light profile is cheaper per GB, a busy one per IP, and the crossover is lifetime gigabytes against months.

1 week: Measure one profile for a week, then multiply
Industry

How much proxy traffic a browser profile uses

How much proxy traffic do you need? It follows the pages a profile loads, not the profile count. Measure one profile for a week, then multiply.

Background tab versus Foreground tab, each name in its own tile: Never ready in 140s, then ready in 8.2s
Story

A detector that never answered because its tab was in the background

Background tab throttling stops requestAnimationFrame. Our test tab was in the background, two detectors never answered, and Page.bringToFront fixed both.

Chrome versus Edge, each name in its own tile: One switch, two shapes, and Edge could not have both
Engineering

Why Mosaic profiles never claim Edge

Our Edge profiles sent either a full build in the User-Agent or an empty Sec-CH-UA-Bitness client hint. No real Edge sends either, so we refuse Edge.

Act for a brand from your own login, beside a screenshot: the Mosaic profiles table: names, coloured tags, proxy locations and a Start button on each row
Industry

Brand Registry agents: running a brand you don't own on Amazon

Amazon Brand Registry agent access: the trademark owner invites the agency's own account in User Permissions and picks its roles. No password changes hands.

15s: Fifteen seconds of input, then the score, beside a screenshot: the Mosaic warm-up robot about to give a new profile a browsing history
Engineering

Behaviour tests score your mouse, not just your browser

A behavioral bot detection test scores mouse paths and dwell next to browser attributes. Load one and touch nothing, and the score describes your stillness.

IP Protection was retired; proxies stay your job
Industry

Chrome's IP Protection was cancelled, and proxies stay your job

Chrome's IP Protection would have proxied some Incognito traffic to known trackers. Google retired it with Privacy Sandbox, and sites still see your IP.

Two address families, one exit, beside a screenshot: a proxy check result in Mosaic: latency, exit address, ISP, HTTPS tunnelling and reputation
Engineering

An IPv4 and an IPv6 address from one proxy is one exit

A proxy that shows both an IPv4 and an IPv6 address is a dual-stack exit. Sites see either one, so look both up before you trust the location.

49: 49 detectors, five groups, one list
Engineering

49 browser fingerprint detectors, and how we read them

Our browser fingerprint detectors list: 49 public test pages in five groups, 40 read by a script and 9 kept as reference because they print no verdict.

A fresh browser for every test run, beside a screenshot: the Mosaic trash: deleted profiles kept for 30 days, restorable one by one
Industry

A fresh browser for every test run, and why it should be cheap

Leftover cookies and storage are where flaky browser tests come from. A one-time profile gives each run a clean jar and trashes itself when its browser closes.

/64: Many addresses, one /64, one household, beside a screenshot: a proxy provider in Mosaic: one gateway line that mints a separate session for every profile
Industry

IPv6 proxies, and why a site may count a /64 as one house

IPv6 proxies are cheap because addresses are plentiful, but sites that score IPv6 count a /64 prefix as one household. Many addresses from one prefix are one.

0.75 GB: Where per GB and per IP cost the same
Industry

What a proxy costs per profile per month

Proxy cost per account depends on how the seller bills. Worked sums for per-GB, per-IP and per-port plans at one, ten and a hundred profiles.

20: Twenty test accounts, each with its state beside it
Industry

Keeping twenty QA test accounts straight

Managing test accounts for QA goes wrong when the state lives in people's heads. Give each persona a profile with its login, role and state beside it.

Your dark mode, sent as a request header, beside a screenshot: mosaic general settings: theme and how profiles launch
Engineering

Your dark mode is sent as a request header

Sec-CH-Prefers-Color-Scheme sends your dark mode setting to any server that asks. On our profiles it carried this Mac's own settings, until each drew its own.

2: A second account needs a reason, and good standing, beside a screenshot: mosaic projects: one library split into Client work, Etsy shops and Social team
Industry

Amazon's 'legitimate business need' clause, read closely

Amazon allows a second seller account only for a legitimate business need, with every account in good standing. Two businesses qualify; a backup never does.

Chrome kept third-party cookies, beside a screenshot: importing a cookie jar into a Mosaic profile
Industry

Chrome kept third-party cookies. What that means for cookie jars

Chrome is not removing third-party cookies: Google dropped the phase-out and then the prompt. A jar per account matters as much as it did before.

What cloud sync costs, and what local costs, beside a screenshot: mosaic projects: one library split into Client work, Etsy shops and Social team
Story

What cloud sync costs an anti-detect browser

Cloud sync puts every logged-in session you run in one vendor's database. Mosaic keeps profiles on your disk instead, and pays for it in three ways.

The banner your office sees proves nothing about Paris, beside a screenshot: importing a cookie jar into a Mosaic profile
Industry

Checking your cookie banner from the countries that require it

Consent tools pick the banner by the visitor's IP location, so your office sees one version. Test each region from a fresh profile with an exit there.

3: A resolver is a leak only next to your exit, beside a screenshot: a proxy check result in Mosaic: latency, exit address, ISP, HTTPS tunnelling and reputation
Engineering

A DNS server in another country is not always a leak

Our US exit resolved through Google in Germany, and nothing leaked. A foreign resolver in a DNS leak test matters only if it is your own ISP's.

An API Chrome removed is an API a page can miss, beside a screenshot: mosaic settings showing the installed Tesseract Chrome engine and its version
Industry

Privacy Sandbox is retired, and its APIs are a version tell

Chrome is removing Topics and Protected Audience release by release, so whether runAdAuction exists tells a page which Chrome you really are.

Price per GB, times gigabytes per profile, beside a screenshot: a proxy provider in Mosaic: one gateway line that mints a separate session for every profile
Industry

Residential proxy prices, turned into a cost per profile

Residential proxy prices are quoted per GB and move with plan size and the market. What an operator budgets is gigabytes per profile, times the rate.

Page versus Worker, each name in its own tile: One override, two answers from one browser
Engineering

setUserAgentOverride without metadata wipes your client hints

Without userAgentMetadata, setUserAgentOverride left our page with empty brands while a worker reported both. We set the User-Agent at launch instead.

Record: x86 versus Browser: arm, each name in its own tile: The record said x86 and the browser said arm
Engineering

Our profiles said x86 and the browser said arm

Chrome on an Apple silicon Mac sends Sec-CH-UA-Arch "arm". Our profile records said "x86", read by nothing, so we fixed the record, not the browser.

0: Candidates gathered with non-proxied UDP blocked, beside a screenshot: a Mosaic leak test: every surface a site reads, checked from inside the profile page
Engineering

Why video calls struggle in a proxied profile

WebRTC sends media over UDP, which an HTTP or SOCKS proxy in Chrome does not carry. With non-proxied UDP blocked, only a TURN relay over TCP is left.

5: Five BrowserLeaks rows we keep as reference
Engineering

BrowserLeaks gives you values, not verdicts

BrowserLeaks prints a canvas signature, a renderer and a JA3 hash, and no pass or fail. Each value means something only beside Chrome on the same machine.

14,400: Minutes in a month of eight-hour days, beside a screenshot: the Mosaic sidebar with profiles running, each with its own window
Industry

Cloud phones by the minute, and what the meter adds up to

A cloud phone priced per minute and left open eight hours a day runs 14,400 minutes a month. Multiply by the rate before you compare it with a flat plan.

0.01%: Read the rarest row, not the headline
Industry

AmIUnique compares you with people who visit AmIUnique

AmIUnique measures its own visitors accurately, and they are not the web. Read which attribute sits at 0.01%, not the headline that says you are unique.

One plan, one number, no tiers, beside a screenshot: what the Mosaic plan includes: unlimited profiles and projects, the REST API and the MCP server
Story

Why Mosaic Pro is one price

Anti-detect browser pricing per profile sells a count. Mosaic Pro is $49 a month for any count, because a profile on your own disk costs us nothing.

One household, several sellers, beside a screenshot: a proxy provider in Mosaic: one gateway line that mints a separate session for every profile
Industry

The same home IP, sold by several providers

Residential pools overlap: one home device can sit in several sellers' networks at once, so switching seller does not promise switching neighbours.

SM-S918U: The model a phone sends when a site asks for it
Engineering

Sec-CH-UA-Model is empty on a desktop and a phone's name on Android

Chrome on Android freezes the model out of the User-Agent but still sends it in Sec-CH-UA-Model. Our first Android patch sent an empty one.

Midnight is somewhere else for most of your users
Industry

Testing date and deadline features in another timezone

Midnight cut-offs and "ends today" banners break in zones you don't live in. Test a website in a different timezone without touching your computer's clock.

Partner Center versus Shared password, each name in its own tile: An authorisation the seller can cancel, or a password
Industry

TikTok Shop Partner Center: managing shops you do not own

TikTok Shop Partner Center lets a seller authorise an agency into their shop and cancel it later. Signing in with the seller's own password skips all of that.

The candidate your proxy never carried, beside a screenshot: a Mosaic leak test: every surface a site reads, checked from inside the profile page
Industry

WebRTC and IPv6: the candidate your proxy never carried

A WebRTC IPv6 leak is a candidate gathered over UDP that an IPv4 proxy never sees. Blocking non-proxied UDP closes it for both address families at once.

What a gigabyte of residential traffic pays for
Industry

Why residential proxies cost what they cost per GB

Residential proxies are expensive because every gigabyte crosses somebody's home connection. For a browser profile, count working sessions, not gigabytes.

The first request carries less than the second
Industry

Accept-CH and Critical-CH: how a server asks for more

Accept-CH asks Chrome for more client hints on the next request; Critical-CH makes it retry the first. A server sees both requests and can compare them.

4: de-AT in the header, 1/1/1970 on the page
Industry

Testing a site in another language means more than one header

Set Accept-Language alone and the page still formats dates for your own machine. A real language test moves the header, navigator.languages and Intl.

Donut Browser versus ShardBrowser, each name in its own tile: An open app around a closed engine
Industry

Donut and ShardBrowser: open apps, closed engines

Donut Browser's app is AGPL-3.0 and ShardBrowser's launcher is MIT, but both run a closed Chromium binary. The part a site reads is the part you cannot audit.

3: Three first-party sites, one tracker following you, beside a screenshot: a Mosaic leak test: every surface a site reads, checked from inside the profile page
Engineering

Why Cover Your Tracks sends you to firstpartysimulator.org

firstpartysimulator.org is an EFF domain. Cover Your Tracks loads it mid-test as a stand-in first-party site, so a hang there leaves the test running for ever.

The reflexive address is wherever the packet left from
Industry

What "replace WebRTC IP with proxy IP" can actually mean

A WebRTC public address is what a STUN server saw a packet come from, so it cannot be swapped for the proxy's. What works is gathering no address outside it.

Residential says what an address looks like, beside a screenshot: a proxy check result in Mosaic: latency, exit address, ISP, HTTPS tunnelling and reputation
Industry

When the residential exit is somebody's infected router

Research has traced residential proxy pools to hijacked servers, paid SDKs and TV boxes sold with proxy code. Residential describes an address, not its source.

504: Four 504s on one session, then a fresh one
Engineering

Four 504s on one session: rotate, don't retry

On a sticky residential proxy a session token is an exit, so retrying it asks a dead exit three more times. Rotate to a fresh session instead.

The creator approves the post, not a login
Industry

TikTok One for agencies: creator access without logins

TikTok One, the old Creator Marketplace, lets an agency run a creator's post as a Spark Ad from its own ad account. The creator approves; no password.

A second account is allowed. A second chance is not.
Industry

What TikTok's guidelines say about running several accounts

TikTok's guidelines allow more than one account. They rule out accounts that deceive, inflate engagement or return after a ban, and that decides a brand's case.

One link, three countries, three landing pages
Industry

Following an affiliate link's redirects from three countries

An affiliate tracker picks the landing page from the visitor's IP country. To see a German visitor's page, click from a German exit on German time.

Every residential exit is somebody's home, beside a screenshot: a proxy check result in Mosaic: latency, exit address, ISP, HTTPS tunnelling and reputation
Industry

The household behind the exit you are renting

A residential exit is someone's home connection, still in use while you rent it. Whether that is fair depends on how they agreed, and you can ask.

2^18.28: One in about 318,000, of the browsers it compared
Engineering

18.28 bits: what Cover Your Tracks' number measures

Bits of identifying information is log2 of how rare your browser is in the EFF's sample. 18.28 bits is about one in 318,000, and it is not a tracking score.

0: Candidates gathered, with the API still there, beside a screenshot: a Mosaic leak test: every surface a site reads, checked from inside the profile page
Engineering

A browser with no RTCPeerConnection doesn't exist

Deleting WebRTC leaves a Chrome no one runs. Zero candidates with the API still present is every machine on a UDP-blocked network, so that is what we ship.

Extension versus Own engine, each name in its own tile: Separate cookies in one browser, or separate browsers
Industry

Anti-detect inside your own browser: the extension model

SessionBox keeps a cookie jar per session inside your own browser. Logins stay apart; the GPU, fonts and canvas a page reads are the same in all of them.

Asked for in script, sent in the headers, beside a screenshot: a profile fingerprint in Mosaic: GPU, screen, fonts, timezone and language matched to the exit
Industry

getHighEntropyValues: what a page can ask for and what it gets

getHighEntropyValues hands a page architecture, bitness, model and full versions on request, and each answer must match the headers Chrome sends.

Mosaic versus Linken Sphere, each name in its own tile: Two products that keep profiles on your disk
Industry

Linken Sphere, the other local-first anti-detect browser

With sync off, Linken Sphere keeps a session's cookies and storage on your computer and still sends its metadata. Mosaic has no sync to turn off.

One question, a different answer per market
Industry

TikTok Shop's multiple-shop rules differ by country

TikTok Shop runs a Seller Center per market, each with its own Seller University. A US answer about multiple shops is a US answer, not a UK one.

The first launch of a session wore a different identity
Engineering

A fingerprint that depended on launch order

Chrome's --user-agent flag left Sec-CH-UA-Bitness empty, and a cache empty at every app start decided when we sent it. One profile wore two identities.

1 of 3: Three flags on the command line, one in the binary
Engineering

Two WebRTC flags we used never existed in Chromium

Chrome has one WebRTC command line flag for leaks: --webrtc-ip-handling-policy. We also sent two that don't exist, and Chromium accepted both in silence.

93 min: A version bump, measured: one near-full rebuild, beside a screenshot: mosaic settings showing the installed Tesseract Chrome engine and its version
Industry

How far behind Chrome stable is your anti-detect browser?

Real Chrome updates itself, so an engine a few majors old claims a browser almost nobody runs. Our move from 153 to 154 took a 93-minute rebuild.

18.28: 18.28 bits, and the same 18.28 next time
Industry

'Randomized fingerprint' is the wrong goal on Cover Your Tracks

Cover Your Tracks praises a randomized fingerprint, but values that change on every load are a signal too. Profiles need one stable, normal browser each.

1 of 49: One row of 49 that would not load, beside a screenshot: the Mosaic sidebar with profiles running, each with its own window
Engineering

fingerprint.com wouldn't load through our proxy, and that was a result

Through one residential exit the FingerprintJS demo hung; from the same Mac with no proxy it loaded. Our runner blamed itself. The exit was why.

153 versus 153.0.8010.37, each name in its own tile: A version no Chrome has ever reported
Engineering

A full Chrome version with no build number is one no Chrome shipped

Our engine reported uaFullVersion as "153". Real Chrome always sends four numbers. Sending the full build moved FingerprintJS's confidence to stock's 0.99.

243: White dropped to 243 and only the screen showed it, beside a screenshot: mosaic general settings: theme and how profiles launch
Engineering

A canvas readback is not a rendering check

Forcing Chrome's colour profile to hdr10 lifted a page's dark background and dimmed its white on macOS. Four checks missed it; a screen capture did not.

8: Not_A Brand, version 8, at major 153, beside a screenshot: a profile fingerprint in Mosaic: GPU, screen, fonts, timezone and language matched to the exit
Industry

Not_A Brand: how Chrome's GREASE brand is computed

The Not A Brand entry in Chrome's user agent is computed from the major version by a fixed formula, so a label that doesn't fit the claimed major is a tell.

One sample of the pool, not the exit, beside a screenshot: a proxy check result in Mosaic: latency, exit address, ISP, HTTPS tunnelling and reputation
Engineering

Scoring a rotating proxy scores one draw from the pool

A reputation check on a rotating proxy scores whichever exit the pool handed out that second. Pin a sticky session to score the address you will browse from.

One test click, one empty cookie jar, beside a screenshot: importing a cookie jar into a Mosaic profile
Industry

Testing whether your affiliate links track, with a clean jar

To test whether an affiliate link tracks, click it from a browser with an empty cookie jar and read what it set. An old click's cookie can spoil the test.

Two limits, and only one of them moves with spend, beside a screenshot: mosaic projects: one library split into Client work, Etsy shops and Social team
Industry

How TikTok decides your Business Center ad account limit

TikTok's Business Center ad account limit is a default set per Business Center type, raised through TikTok. Spend moves a different limit: ad groups.

The .local address is Chrome working, beside a screenshot: a Mosaic leak test: every surface a site reads, checked from inside the profile page
Engineering

The .local address in your WebRTC test is Chrome working

A random .local name in a WebRTC leak test is Chrome hiding your LAN address. We once switched it off, and the empty result was the louder tell.

The exit resolves the name, whatever the browser is set to
Industry

What DNS over HTTPS changes when a browser uses a proxy

Does DNS over HTTPS work with a proxy? Through one, the exit resolves each hostname, so Chrome's DoH setting covers only lookups the browser makes itself.

Launch 1 versus Launch 2, each name in its own tile: Different per profile, the same every launch
Engineering

A FingerprintJS pass has two halves

A FingerprintJS visitor ID should differ per profile and hold across launches of one. Colliding ids link profiles; ids that change flag a spoofer.

Camoufox versus Firefox, each name in its own tile: A patched browser is as current as its base
Industry

Is Camoufox still maintained? Reading the repository

Is Camoufox still maintained? Its repository answers better than forums do: compare the latest release's date and Firefox base with today's Firefox.

A prompt on the front door, and the side door open
Industry

queryLocalFonts and the permission that guards your font list

The Local Font Access API permission, local-fonts, guards queryLocalFonts(). Measuring text needs no permission, so the gate binds only polite pages.

3: Exit, timezone, language: one country, beside a screenshot: a proxy provider in Mosaic: one gateway line that mints a separate session for every profile
Industry

Checking what Shopify Markets shows a buyer in each country

To test Shopify Markets geolocation, make the exit, timezone and language name one country: Shopify reads the IP for country and the browser for language.

Listed for being exactly what you paid for
Industry

A blocklist that lists home connections for being home

SORBS answered 127.0.0.10 when an IP sat in a home ISP's range, so a residential proxy got listed for being residential. Read the code first.

A check that lies is worse than one that is missing
Engineering

Why our reputation check doesn't ask Spamhaus

Spamhaus refuses queries that arrive through public resolvers, so asking it from an ordinary computer returns a confident wrong answer. We left it out instead.

90 s: One 90-second run would have saved four days, beside a screenshot: a Mosaic leak test: every surface a site reads, checked from inside the profile page
Engineering

The control that settles "is it our patches?"

Unpatched Chrome for Testing got the same IPHey verdict as our engine, so our patches were not the cause. Its voice list still differs from Chrome's.

1: Many channels, one AdSense account per payee, beside a screenshot: mosaic projects: one library split into Client work, Etsy shops and Social team
Industry

Several YouTube channels and one AdSense account

YouTube lets one creator run and monetise several channels, but AdSense allows one account per payee, so every monetised channel you own pays into the same one.

MCN versus Channel, each name in its own tile: Many channels, linked inside YouTube
Industry

What a YouTube MCN is, and what it can see

What is a YouTube MCN? A network linking channels to its content owner account, collecting their revenue and reading analytics. Strikes stay with YouTube.

Asked for a name, never for an address, beside a screenshot: routing Mosaic launches through Proxyman, Charles or mitmproxy to read their traffic
Engineering

A CONNECT to a raw IP means your machine resolved the name

To check if DNS goes through your proxy, read what the proxy is asked for. CONNECT example.com:443 means it resolved the name; a raw IP means you did.

Chrome versus Chromium, each name in its own tile: Same version, one name missing
Story

When the FingerprintJS demo can't name your browser

FingerprintJS read 'Chromium-Based Browser Not Available' for our engine. We blamed the version; the real variable was Google's branding.

1/20 px: Up to a twentieth of a pixel per glyph
Engineering

Same fonts, different measurements: per-profile glyph advances

Font fingerprint randomization can hide fonts or change how wide glyphs measure. Hiding read as masking; per-profile glyph advances did not.

Exit versus Resolver, each name in its own tile: A resolver is a leak only next to an exit
Engineering

Is a Google DNS server in your leak test a leak?

Google DNS in a leak test is not a leak by itself. It depends on where you browse from: the resolver your own ISP runs is the leak, someone else's is not.

Chroma versus Junglefox, each name in its own tile: Kameleo runs two engines
Industry

Junglefox and Chroma, Kameleo's two engines

Junglefox is Kameleo's Firefox-based engine, beside Chroma, its Chromium one. A Firefox profile needs an engine that really is Firefox, and keeping one is work.

3 in 20: Stock Chrome, masked 3 times in 20, beside a screenshot: a profile fingerprint in Mosaic: GPU, screen, fonts, timezone and language matched to the exit
Engineering

Pixelscan calls a stock Chrome masked 3 times in 20

A Pixelscan false positive, measured: an untouched Google Chrome read 'Masking detected' on 3 of 20 runs. Our fresh profiles read it once in 74.

Each supplier login lives with the store it buys for
Industry

Twenty supplier portals, twenty logins, one place for each

Manage supplier portal logins by keeping each one with the store it buys for: one browser profile per store, its supplier logins, codes and notes inside it.

400: One dead exit is not a dead proxy, beside a screenshot: a proxy check result in Mosaic: latency, exit address, ISP, HTTPS tunnelling and reputation
Engineering

"400 Target website error" and one observation of a pool

A proxy's 400 Target website error usually means the pool gave you an exit that could not reach the site. One answer like that does not make the proxy dead.

The buyer who has never been here before, beside a screenshot: the Mosaic trash: deleted profiles kept for 30 days, restorable one by one
Industry

Testing your own checkout as a customer who has never visited

To test a Shopify checkout as a customer, pay with a test method from a browser that has never seen your store: no admin login, no saved address, no cart.

A termination covers the person, beside a screenshot: the Mosaic profiles table: names, coloured tags, proxy locations and a Start button on each row
Industry

A terminated YouTube channel covers the person, not the channel

When YouTube terminates a channel, the ban covers its owner: any other channel they use or create breaks the rules too. The way back is the appeal.

48000: One line of script reads the rate your speakers run at
Industry

What AudioContext.sampleRate says about your speakers

AudioContext.sampleRate is the rate your output device runs at, usually 44100 or 48000. As a fingerprint it is one bit, and changing it is easy to catch.

Account A versus Account B, each name in its own tile: One Chrome profile, two Google accounts, one sync
Industry

Chrome sync quietly joins accounts you meant to keep apart

Chrome sync files everything a profile does under one Google account, whichever account you used in the tab. Two accounts in one profile end up in one history.

MAP: The name that has to survive goes first
Engineering

--host-resolver-rules: the first match wins

Chrome's --host-resolver-rules tries MAP rules in order and stops at the first match. EXCLUDE is not ordered. A wildcard put first ate our extension's API call.

159: One string, measured once per font on the list
Industry

How websites list your fonts without a font API

Websites detect installed fonts by measuring a test string in each font against a fallback. A width that changes means the font is there. No permission needed.

Read each dashboard weekly, before the marketplace does, beside a screenshot: filtering Mosaic profiles by tag: only the profiles tagged "shop" are listed
Industry

An account health routine for sellers with more than one store

A seller account health checklist: Amazon, eBay and Etsy grade different metrics over different windows, so read each one weekly, by date, in its own profile.

A core number is a Chrome major with a date, beside a screenshot: mosaic settings showing the installed Tesseract Chrome engine and its version
Industry

Mimic, Multilogin's Chromium, and its core numbers

A Mimic core number is the Chrome major it is built on. Set the date a core shipped against the date that Chrome major reached stable, and you have the lag.

Runtime.enable flips a detector, beside a screenshot: a Mosaic leak test: every surface a site reads, checked from inside the profile page
Engineering

Runtime.enable flips a detector, so we don't call it

Runtime.enable detection, measured: one DevTools command turned a clean Mosaic profile into isBot=true on deviceandbrowserinfo. We removed all five calls.

SunBrowser versus FlowerBrowser, each name in its own tile: One profile, one browser family, all the way down
Industry

SunBrowser and FlowerBrowser, AdsPower's two engines

SunBrowser is AdsPower's Chromium engine, FlowerBrowser its Firefox one. Choosing Firefox changes the handshake, headers and extensions a profile runs.

3: Three requests, three countries, one endpoint
Story

Peru, Brazil and Bahrain in three requests

A rotating proxy with no country pin can exit in a different country on every request. Fine for a stateless scrape, fatal to a profile that keeps one timezone.

User-Agent versus ClientHello, each name in its own tile: The handshake has to agree with the header
Engineering

Why we leave the TLS and HTTP/2 fingerprints alone

A TLS fingerprint mismatch is a User-Agent claiming a browser the handshake did not come from. We avoid it by never claiming a Chrome the engine is not.

Two marketplaces, two profiles, two download folders, beside a screenshot: mosaic storage settings: each profile downloads into its own folder
Industry

Selling on Amazon and eBay at once without crossing the wires

Selling on Amazon and eBay simultaneously is allowed. The wires that cross are your buyer logins, your downloads and the stock count, not the marketplaces.

Two latency figures that belong to the computer
Engineering

baseLatency is shared by every profile and moves with your headphones

AudioContext baseLatency and outputLatency come from the real output device, so every browser profile on one computer reports the same pair.

12!: Twelve extensions have 479,001,600 orders, beside a screenshot: routing Mosaic launches through Proxyman, Charles or mitmproxy to read their traffic
Engineering

Chrome shuffles its ClientHello, so compare sets

Chrome TLS extension permutation reorders the ClientHello on every connection. Only the extension order moves, so a client that repeats its order is not Chrome.

30%: Drawn from what browsers send, not what people say, beside a screenshot: mosaic general settings: theme and how profiles launch
Engineering

Why 30% of our profiles use dark mode

The prefers-color-scheme dark mode share in real traffic is far below survey figures. Every profile on our Mac said dark; now each draws dark 30% of the time.

NOTFOUND: Every local lookup fails, so none of them leak
Engineering

DNS prefetching, the lookup that skips your proxy

Chrome's DNS prefetcher resolves names through your own resolver even with a proxy set. Mapping every name to NOTFOUND makes the leak fail closed.

20: Compared unsorted, twenty names were out of place, beside a screenshot: mosaic settings showing the installed Tesseract Chrome engine and its version
Engineering

Sorting the property list hid the question

Property enumeration order is a fingerprint that sorted diffs can't see. Compared unsorted, our engine differed from Chrome only in its 20 field-trial entries.

Shared login versus Invitation, each name in its own tile: Invite the person, not the password
Industry

Separating client work with Google Workspace accounts

Give each person a Google Workspace account and let clients invite that address. Your agency never holds a client's Google password, and leaving ends access.

Orbita versus Google Chrome, each name in its own tile: Which Chrome does an engine say it is?
Industry

What Orbita is, from GoLogin's own pages

Orbita is the Chromium-based browser a GoLogin profile opens in. GoLogin says it tracks Chrome releases, and each profile is updated on its own.

Exit, tunnel and stability are three answers, beside a screenshot: a proxy check result in Mosaic: latency, exit address, ISP, HTTPS tunnelling and reputation
Engineering

A green tick that means the socket opened is worthless

A proxy checker can pass while sites fail, because most test plain HTTP and the browser needs a CONNECT tunnel. Exit and stability are separate answers too.

CONNECT: Answers HTTP, refuses the tunnel
Engineering

A proxy that answers HTTP and refuses CONNECT

A proxy that works for HTTP but not HTTPS is refusing CONNECT, the tunnel every HTTPS page needs. A check that fetches a plain-HTTP page cannot see it.

Organization versus Client's login, each name in its own tile: Manage the listing, never sign in as the client
Industry

Google Business Profile organization accounts, for agencies

A Google Business Profile organization account lets an agency manage client listings under its own login. The client grants access and keeps ownership.

Why Google says verify it’s you, beside a screenshot: creating a profile in Mosaic: a checked proxy, and the hardware and locale drawn to match its exit
Industry

Why Google says 'verify it's you' on a new device

Google asks you to verify it's you when a sign-in comes without the cookie its last sign-in left, or from an address in a place you have not been.

90: Both scored 90. Only one was about the browser., beside a screenshot: a Mosaic leak test: every surface a site reads, checked from inside the profile page
Engineering

Same IPHey score, opposite reasons

IPHey Unreliable on a normal Chrome is usually the exit. Our profile and a stock Chrome both got MX 90, for a browser signal and a location signal.

Every store's inbox open, one window each, beside a screenshot: the Mosaic sidebar with profiles running, each with its own window
Industry

Customer messages across several stores, without missing one

Marketplaces count reply times per seller account, so one unread store inbox costs that store. Keep every store signed in and read all inboxes in one pass.

344: One value, the same on every profile we had made
Engineering

344 profiles said "denied": one value, everywhere

Notification permission became a fingerprint: Notification.permission read denied on all 344 of our profiles, where an unconfigured Chrome says default.

How the OfflineAudioContext fingerprint is computed
Industry

How the OfflineAudioContext fingerprint is computed

An oscillator through a compressor, rendered silently and summed: the OfflineAudioContext fingerprint reads your machine's floating-point audio path.

Link opened versus IP changed, each name in its own tile: Opening the link is not proof the IP changed
Engineering

"Rotation URL opened" is not "the IP changed"

Mobile proxy change-IP link not working? It worked if it answered 2xx and the exit differs once the modem redials. Our own Proxies page checked neither.

Why Seller Central keeps logging you out, beside a screenshot: importing a cookie jar into a Mosaic profile
Industry

Why Seller Central keeps logging you out

Seller Central signs you out when its cookies go: a cleaned browser, a second store in the same window, a private tab. Keep one store per cookie jar.

socks5h: socks5 and socks5h: where Chrome resolves the name
Engineering

socks5 and socks5h: where Chrome resolves the name

In curl, socks5h sends the hostname to the proxy and socks5 resolves it locally. Chrome's socks5 already sends the name; the leak is elsewhere.

Mimic versus Stealthfox, each name in its own tile: Multilogin froze Stealthfox
Industry

Multilogin froze Stealthfox, and what a legacy engine means

Multilogin lists Stealthfox as a legacy core and points users to Mimic. A browser core that stops updating turns its own version into a signal.

Exit in Russia, Accept-Language: es-MX, beside a screenshot: a profile fingerprint in Mosaic: GPU, screen, fonts, timezone and language matched to the exit
Story

A Russian exit and a profile speaking Mexican Spanish

A profile matched to a Russian exit kept sending es-MX in Accept-Language. Leaving the language alone was right. Saying nothing about it was the bug.

6: Six profiles, one machine, six countries, beside a screenshot: a Mosaic leak test: every surface a site reads, checked from inside the profile page
Engineering

A profile in Austria claimed New York

Browser location does not match IP: a no-proxy profile made in Austria claimed New York. One failed lookup was never retried, and a table filled the gap.

Read it twice: v·f, then v·f·f, beside a screenshot: a Mosaic leak test: every surface a site reads, checked from inside the profile page
Engineering

An audio spoof that changed the sound every time it was read

getChannelData returns the buffer's own memory, so our audio noise multiplied samples on every read: v·f, then v·f². A seeded byte fixed it.

3: Three prices for one plan, and the one that counts
Industry

Grandfathered plans and why review prices disagree

On an old GoLogin pricing plan, your renewal price comes from your own subscription, not the public page. Reviews often quote plans a new account can't buy.

1 card: Same exit, same minute: the location card went our way, beside a screenshot: the Mosaic sidebar with profiles running, each with its own window
Engineering

Why IPHey's location card can be greener on a profile than on Chrome

On one US exit in one minute, stock Chrome got IPHey's masked or inconsistent location data and our profile got green. The difference was the timezone.

One parent account, one website per store, beside a screenshot: mosaic projects: one library split into Client work, Etsy shops and Social team
Industry

Merchant Center multi-client accounts for agencies and marketplaces

A Merchant Center multi-client account puts many stores under one operator. Each sub-account is still one store, with a website it can show is its own.

13: The code covers month one. Price month thirteen
Industry

Anti-detect browser promo codes and the price at month thirteen

An anti-detect browser promo code usually discounts one payment. Compare what you pay in month thirteen, at the profile count you will have by then.

0: Headers a tunnel can add to an HTTPS request
Industry

Elite, anonymous, transparent: proxy levels mean little on HTTPS

Elite vs anonymous proxy is about X-Forwarded-For and Via on plain HTTP. Inside a CONNECT tunnel to an HTTPS site, a proxy cannot add a header at all.

Six stores, six windows, one click to open them, beside a screenshot: six Mosaic profile windows arranged in a grid, each with its own name in the title bar
Industry

A seller's morning across six stores, one profile each

An ecommerce seller's daily checklist: messages, orders, account health. With six stores, open all six signed in at once instead of signing in and out.

HTTPS versus Plain HTTP, each name in its own tile: What the gateway reads, and what it cannot
Industry

What your proxy provider can and cannot see

Over HTTPS a proxy provider sees each hostname, port, time and byte count, never the pages or passwords. Over plain HTTP it sees everything you send.

1 of 5: The first call answered, the next four timed out
Engineering

A spoof that answers once: the geolocation bug we shipped

A geolocation spoofing timeout we shipped: the first getCurrentPosition got the exit's coordinates, every later call failed with code 3. One latch was to blame.

Manager account versus Separate logins, each name in its own tile: One login hits a cap; a manager account does not
Industry

How many Google Ads accounts one person can make

Google caps Google Ads accounts per login, counts manager accounts in that cap, and sends anyone advertising for several businesses to a manager account.

Five cards, one number: read the red one, beside a screenshot: a profile fingerprint in Mosaic: GPU, screen, fonts, timezone and language matched to the exit
Engineering

IPHey's score moves on unmodified Chrome. Read the card.

A low IPHey MX score is the sum of five cards. Untouched Chrome scored 100, 100, 70 and 0 in one afternoon, so the red card tells you more than the number.

Tesseract versus Chrome, each name in its own tile: Following “(whale)” to the end
Story

IPHey's "(whale)" signal, and what it was really about

IPHey's inconsistent browser fingerprint (whale) looked like a version problem. We followed it through branding and JavaScript to a Widevine certificate.

A local profile costs the vendor nothing to keep
Industry

Unlimited local profiles, metered cloud ones

A local profile is a folder on your disk and costs the vendor nothing; a cloud one is storage and transfer on every open. That is why only cloud gets counted.

6 loads: Six loads, one launch: the score fell when the exit moved
Industry

Pin the country, not the address

A residential pool moves your exit whatever you do. The checks that matter compare countries, so pin the country and let the address move inside it.

3: Our relay's CONNECT differed from Chrome's three ways
Engineering

Our proxy relay told the gateway it was a script

Chrome sends Proxy-Connection: keep-alive, lower case, to every proxy. Our relay sent Keep-Alive, no User-Agent and Connection: close, until we copied Chrome.

Add the assistant as a user, not as you, beside a screenshot: creating a profile in Mosaic: a checked proxy, and the hardware and locale drawn to match its exit
Industry

Giving a virtual assistant access without handing over the password

Seller Central, Meta and Google each let you add a virtual assistant under their own login, with chosen permissions. A shared password is the fallback.

f5337a44: One scene, one Mac, one hash for every profile
Engineering

Every profile on one Mac drew the same WebGL image

A WebGL fingerprint is the same in every browser profile on one machine because the GPU draws it. Ours was too, until per-profile noise moved the hash.

metal-3: Two routes to one GPU, read in one document
Industry

What navigator.gpu.requestAdapter tells a page without asking

WebGPU's adapter info gives any page the GPU vendor and architecture with no prompt. A WebGL renderer that says otherwise is a contradiction, not a disguise.

Direct3D11, Metal or OpenGL: the word that names your OS
Industry

What ANGLE means in your WebGL renderer string

ANGLE is the layer Chrome uses to turn WebGL into Direct3D, Metal or OpenGL. The backend it names in the renderer string tells a site your operating system.

49: 49 detectors, read by a script, with nobody watching
Engineering

Running 49 fingerprint tests unattended, and what that takes

To automate browser fingerprint testing, tell a failed profile from a dead site, an unreadable page and your own bug. Our runner names each across 49 rows.

The relay carries ciphertext, so the order arrives intact
Engineering

Header order is a fingerprint, and a tunnel cannot touch it

Sites read the order of Chrome's HTTP headers as well as their values. Through a CONNECT tunnel a relay carries ciphertext, so it cannot reorder a thing.

Profile cap versus Creation cap, each name in its own tile: Profiles you keep, or profiles you have ever made?
Industry

Profile creation caps, the meter missing from the headline

A profile creation limit counts every profile you make, deleted ones included. It exists because delete-and-recreate gets round a profile cap.

Verification ties an account to a legal name, beside a screenshot: mosaic projects: one library split into Client work, Etsy shops and Social team
Industry

What Google Ads advertiser verification asks, and what it joins

Google Ads advertiser verification requirements: a legal name, a country and documents for who pays and who advertises. Every account under that name is one.

0: Passwords a partnership ad needs, beside a screenshot: importing a cookie jar into a Mosaic profile
Industry

Partnership ads let a brand run a creator's post without the password

Instagram partnership ads access is a permission the creator grants from their own account. The brand runs the ad; nobody sends anybody a password.

70: Branded Chrome, one Mac, one afternoon: 100, 100, 70, 0
Story

IPHey's score moved with the address, not the browser

IPHey score changes even on an untouched Chrome: 100, 100, 70 and 0 in one afternoon. The score follows the exit and the moment; the browser card does not.

3 of 3: Unreachable through the exit, answering direct
Story

The residential IP several detectors already knew

A residential proxy can be detected as a proxy because it is one. On one Wichita exit, FingerprintJS and incolumitas never loaded in three rounds.

Three clients fit in Chrome. Thirty do not
Industry

What breaks in the browser between three clients and thirty

Scaling social media agency operations breaks the browser first: Chrome profiles hold three clients, but thirty needs an exit, 2FA and bulk edits per client.

20: Twenty APIs a page could find on us and not on Chrome, beside a screenshot: mosaic settings showing the installed Tesseract Chrome engine and its version
Engineering

Twenty APIs Chrome doesn't have: Chromium's field trials

Unbranded Chromium runs its field-trial testing config at every launch. Against Chrome 153 that was 20 API differences, and one switch moved them all.

Gigabytes are a sample, sessions are the supply
Industry

Anti-detect plans that bundle proxy traffic

When an anti-detect browser plan includes proxy traffic, it is usually a few gigabytes: a sample. What keeps profiles apart is one session per profile.

After launch versus Before launch, each name in its own tile: Counted after the start, and before it
Engineering

Chrome opens connections before your test starts

We counted 1, 0 and 0 CONNECTs in three launches and thought Chrome was bypassing the proxy for HTTPS. Our counter was reset after Chrome had started.

Direct: h3 versus Proxied: h2, each name in its own tile: One site, two routes, two protocols
Engineering

What happens to QUIC when Chrome has a proxy

With an HTTP, HTTPS or SOCKS5 proxy set, Chrome reaches sites over TCP tunnels, so a page that gets HTTP/3 direct gets HTTP/2 through the proxy.

33: 33 patched functions gave their source to an iframe
Engineering

Why we change fingerprints in C++, not JavaScript

A JavaScript spoof is one realm deep. An iframe read the real source of 33 of our patched functions; the same values changed in C++ agree everywhere.

41 of 45: Hand-typed renderer strings, wrong in one field
Engineering

41 of 45 hand-written Windows renderer strings were wrong

Chrome's ANGLE Direct3D11 renderer string carries the GPU's PCI device id. Our hand-typed Windows rows left it out, a string no real driver produces.

Europe/Vienna versus America/New_York, each name in its own tile: Masking detected landed on the right timezone
Story

We broke the timezone on purpose and Pixelscan liked it better

We changed only the timezone on one profile behind a Slovak exit. Pixelscan flagged masking on the Vienna row, the correct one, and the controls disagreed.

Two lists per client, and every difference, beside a screenshot: mosaic projects: one library split into Client work, Etsy shops and Social team
Industry

A quarterly check of who can reach each client account

A social media account access audit is two lists per client: who the platform says has access, and which of your profiles hold a login. Each gap is a finding.

A partner on the dataset, not a password in a chat, beside a screenshot: mosaic projects: one library split into Client work, Etsy shops and Social team
Industry

Share the dataset, not the login: Meta's partner model

To share a Facebook pixel with an agency, the client adds the agency's business portfolio as a partner on the dataset. No password moves hands.

v4 + v6: Two addresses, one exit, three wrong verdicts
Engineering

IPv4 from one probe, IPv6 from the other: one exit, not two

A proxy that shows an IPv4 address on one checker and an IPv6 address on another is usually one dual-stack exit. Rotation only shows within one family.

640px: The profile's name, drawn left of the address bar
Story

Posting to the wrong client's account, and how it happens

A post lands on the wrong client's account because two clients share one browser and every window looks the same. Delete it, tell both, then label windows.

One client code on the ad account and the window, beside a screenshot: six Mosaic profile windows arranged in a grid, each with its own name in the title bar
Industry

Name the browser profile the way you name the ad account

Our naming convention for client ad accounts: ACME-DE-EUR, code first, since a cut-off name keeps its start. The browser profile is ACME-FB-Ads.

Four fields, read before the page exists, beside a screenshot: routing Mosaic launches through Proxyman, Charles or mitmproxy to read their traffic
Industry

The Akamai HTTP/2 fingerprint, read field by field

The Akamai HTTP/2 fingerprint is four fields: the SETTINGS values, the window update, any priority frames and pseudo-header order, all read before content.

A free cloud profile is a cookie jar on their disk
Industry

Why free anti-detect plans are often cloud-only

A free anti-detect browser with cloud profiles only keeps your first sign-ins as cookies on the vendor's servers. A cookie jar is a credential.

-130: Chrome never reached the proxy at all, beside a screenshot: routing Mosaic launches through Proxyman, Charles or mitmproxy to read their traffic
Engineering

ERR_PROXY_CONNECTION_FAILED is about the first hop

Chrome's proxy connection failed error means it never reached the proxy address it was given. Check the host, the port and anything local before the exit.

4 = 1: Four profiles, one session id, one address
Engineering

Same proxy session on multiple profiles: forty profiles, forty exits

The same proxy session on multiple profiles means one exit IP for all of them. A batch of ours did it in September 2026; now every profile mints its own.

Verification ties a portfolio to a legal name
Industry

What Meta business verification connects to your business

Meta business verification documents tie a business portfolio to one legal name, address, phone and domain. Two portfolios verified that way are one business.

4 of 4: The bot card was never the bug, beside a screenshot: creating a profile in Mosaic: a checked proxy, and the hardware and locale drawn to match its exit
Story

Pixelscan's automated behavior card, reproduced and not

Pixelscan's automated behavior detected card never came back on our own platform beside stock Chrome. The foreign platform claim failed four times in four.

Sixty honest fields and one string, beside a screenshot: a profile fingerprint in Mosaic: GPU, screen, fonts, timezone and language matched to the exit
Engineering

Pixelscan reads sixty WebGL fields, and the renderer string is one

Pixelscan's WebGL fingerprint is a render hash plus about sixty driver fields beside the renderer string. A chip that never existed failed like a real one.

Their server versus Your disk, each name in its own tile: Where the cookie jar lives decides what a lapse costs
Industry

What happens to your profiles when the subscription ends

When an anti-detect browser subscription expires, where profiles live decides the cost: a cloud vendor holds your cookie jars; a local app leaves them on disk.

0108: The renderer is one string beside sixty answers, beside a screenshot: mosaic settings showing the installed Tesseract Chrome engine and its version
Engineering

A WebGL renderer string is a claim and the limits are the evidence

WebGL MAX parameters, shader precision formats and the extension list come from the real driver. Our engine moves them only with data from a real device.

Ordered list versus Sorted set, each name in its own tile: Two handshakes, compared field by field
Engineering

Comparing two TLS handshakes: compare the set, not the order

To compare two TLS fingerprints, label GREASE and compare the extension set sorted. Our first diff against Chrome showed two differences, both noise.

-111: The proxy said no, and Chrome threw away the reason
Engineering

What ERR_TUNNEL_CONNECTION_FAILED is telling you

Chrome's tunnel connection failed error means the proxy refused the CONNECT tunnel. In our runs the usual cause was a sticky session the gateway had retired.

1 of 6: One surface off, and the masking verdict went
Story

Pixelscan's masking verdict, bisected to one surface

We bisected Pixelscan's masking detected verdict on one profile. Canvas, WebGL, audio and client rects were fine. Hiding about 2% of font families caused it.

90s: Three Windows claims, three scans that never ended
Engineering

When Pixelscan never stops scanning

Pixelscan stuck on scanning for 90 seconds was, in our runs, a profile claiming Windows on a Mac. A scan that never returns is a non-verdict, not a slow pass.

2nd seat: The second meter on a pricing page is people
Industry

What a second seat costs across anti-detect browsers

Anti-detect browsers meter people as well as profiles. A seat is a login to the vendor's shared library; Mosaic has no teams, so it has no seats.

One sheet of client logins, and what goes wrong with it
Industry

The shared password spreadsheet, and what replaces it

A spreadsheet of client logins breaks two-factor sign-in and leaves nothing to revoke. Partner access first, then one vault per login with its code.

60 min: Hawaii to Arkansas, and nobody said expired
Story

What an expiring sticky session looks like from inside a browser

A sticky session expired on our proxy: the browser showed tunnel errors, the check a healthy proxy in another state. Neither said expired.

null, and error 1280, until the page asks, beside a screenshot: a profile fingerprint in Mosaic: GPU, screen, fonts, timezone and language matched to the exit
Engineering

UNMASKED_RENDERER is null until a page asks for it

Chrome returns null for the unmasked WebGL renderer until the page calls getExtension, so a spoof that answers it earlier is a two-line tell.

Agency portfolio versus Client portfolio, each name in its own tile: Whose portfolio owns the client's Page?
Industry

Who owns a Facebook Page an agency built for a client

The business portfolio that created or claimed a Facebook Page owns it, whoever paid for the work. The client creates; the agency is added as a partner.

1704: The first licence message: 1704 bytes where Chrome sends 2
Engineering

Widevine device certificate privacy: one key for every profile

Widevine device certificate privacy needs a Google-signed browser. Without it, the first licence message is 1704 bytes where Chrome sends 2.

Monthly versus Prepaid year, each name in its own tile: Pay monthly, or prepay the year?
Industry

Yearly discounts on anti-detect browsers, read in full

At 40% off, a prepaid year costs what 7.2 months of monthly billing would. It is also a bet that the engine keeps up with Chrome for twelve months.

199: Nineteen voices only Google's own build ships, beside a screenshot: mosaic settings showing the installed Tesseract Chrome engine and its version
Engineering

199 voices: how a speech list tells Chromium from Chrome

speechSynthesis.getVoices() lists 199 voices in Google Chrome on our Mac and 180 in any unbranded Chromium. A page reads the difference in one call.

The CreepJS proxy test is not about your proxy
Engineering

The CreepJS proxy test is not about your proxy

CreepJS's proxy page looks for JavaScript Proxy objects wrapped around native functions. A flag there names a spoofing script, not your IP address.

Extra profile versus Second account, each name in its own tile: An extra profile is not a second account
Industry

Facebook's additional profiles: a second profile Meta built itself

Facebook additional profiles rules, as Meta designed them: one account, one login, and a violation on any profile counts against the whole account.

1: One personal profile per person, beside a screenshot: mosaic projects: one library split into Client work, Etsy shops and Social team
Industry

Facebook's real name policy, and what it allows instead

Facebook's real name policy asks for one personal account per person, under the name you go by. Pages and business portfolios are how you run more.

Client, platform, role. Then tags., beside a screenshot: filtering Mosaic profiles by tag: only the profiles tagged "shop" are listed
Story

Naming 300 browser profiles so you can still find one

Name each profile client code, platform, role, in that order, so one search finds a client and one sort groups them. Status goes in a tag, not the name.

The owner is a project. The state is a tag., beside a screenshot: mosaic projects: one library split into Client work, Etsy shops and Social team
Story

Projects say who owns it, tags say what state it's in

How to organize client accounts with tags: the client goes in a project, the state in a tag. Owners rarely change; states change weekly.

Reading a ClientHello with a one-minute listener, beside a screenshot: routing Mosaic launches through Proxyman, Charles or mitmproxy to read their traffic
Engineering

Reading a browser's ClientHello with a one-minute listener

A raw TCP listener that reads the first TLS record and hangs up captures a browser's ClientHello. Ours and branded Chrome's matched in every field.

1 exit: Saved, reported, and ignored three times
Story

The setting was saved, and three launches ignored it

Our rotation setting was stored, reported back by the API, and ignored by three launches. A mapper had copied every field of the proxy except the new one.

4096: Two ways to read one WebGL image, beside a screenshot: mosaic settings showing the installed Tesseract Chrome engine and its version
Engineering

readPixels and toDataURL read a canvas from opposite ends

readPixels starts at the bottom row and toDataURL at the top, so position-keyed WebGL noise disagreed with itself. Keyed on colour, 4096 of 4096 pixels agree.

159: Same Mac, two claims: 159 fonts against 1
Story

Why OS spoofing fails on fonts: a Mac makes Mac profiles

Why OS spoofing fails on fonts: they come from the computer, not the claim. A Linux profile made on our Mac showed 1 font where macOS showed 159.

33: 33 patched functions, one four-line probe, beside a screenshot: a Mosaic leak test: every surface a site reads, checked from inside the profile page
Industry

Why canvas blocker extensions can make you easier to spot

A canvas blocker extension hides your canvas fingerprint by rewriting methods in page JavaScript, and a fresh iframe reads the rewrite: 33 leaked on one probe.

Day one sets up the rules you lean on at offboarding, beside a screenshot: mosaic projects: one library split into Client work, Etsy shops and Social team
Industry

The first hour in the browser with a new client

A social media client onboarding checklist for the browser: ask for partner access, not passwords, then a project, a proxy in their market and their 2FA.

Per open browser versus Per profile, each name in its own tile: Per open browser, or per profile?
Industry

Paying per open browser instead of per profile

Concurrent-browser pricing charges for how many profiles are open at once, not how many exist. Cheap for a big quiet library, costly when many run together.

A lie is a function that does not look native
Engineering

What CreepJS's prototype page tells you about JavaScript spoofing

CreepJS's prototype page checks each native function's keys, source and errors. A value patched in JavaScript trips it; a value changed in C++ leaves nothing.

17 / 18: Chrome 152 and 153, one extension apart, beside a screenshot: the Mosaic sidebar with profiles running, each with its own window
Engineering

JA4 moves with the Chrome major, and that is not a tell

Chrome 152 read t13d1517h2 and 153 read t13d1518h2: one TLS extension apart. Compare a JA4 only against a Chrome of the same major version.

The one link you make with your own hands, beside a screenshot: the Mosaic profiles table: names, coloured tags, proxy locations and a Start button on each row
Industry

Accounts Center is a link Meta asks you to make yourself

Accounts Center joins your Instagram, Facebook and Messenger accounts: one login, shared contact details, payments and ad settings. Meta reads it as one person.

18: 18 TLS extensions, the same as Google's own build, beside a screenshot: mosaic settings showing the installed Tesseract Chrome engine and its version
Engineering

Why our engine has no TLS fingerprint setting

You can't change Chrome's TLS fingerprint from a setting, and we chose not to patch it: our engine's JA4 matched Google's own build byte for byte.

Metered by use, not by size, beside a screenshot: what the Mosaic plan includes: unlimited profiles and projects, the REST API and the MCP server
Industry

Anti-detect browser daily launch limits and per-launch fees

An anti-detect browser daily launch limit meters use, not size: at 500 profiles and 30 launches a day, each profile opens once every 17 days.

Port 11000 is SOCKS5. The line never says so., beside a screenshot: bulk-importing proxies into Mosaic: every line read, new and duplicate ones told apart
Engineering

The port number told us whether a proxy was SOCKS5

Nothing in host:port:user:pass says HTTP or SOCKS5, and curl assumes HTTP. At CatProxies we asked the port: 11000 answered SOCKS5, 10000 HTTP.

Business Manager, renamed, beside a screenshot: mosaic projects: one library split into Client work, Etsy shops and Social team
Industry

Business Manager is now a business portfolio. What changed

Meta renamed Business Manager to business portfolio and moved nothing. An ad account still belongs to the portfolio it was made in, so check whose that is.

76: Same drawing, two places, 76 bytes apart, beside a screenshot: a Mosaic leak test: every surface a site reads, checked from inside the profile page
Engineering

The four-line probe that catches position-keyed canvas noise

To detect canvas noise injection, draw one shape twice at two offsets and diff them. A real browser gives 0 bytes; our old noise gave 76.

Offboarding a client: the profile goes last, beside a screenshot: the Mosaic trash: deleted profiles kept for 30 days, restorable one by one
Industry

What to do with a client's browser profile when the contract ends

Agency client offboarding goes wrong when access is revoked before the client can sign in. Confirm the handover, export, then trash the profile by id.

Mosaic is out, beside a screenshot: the Mosaic profiles table: names, coloured tags, proxy locations and a Start button on each row
Update

Introducing Mosaic, an anti-detect browser that lives on your machine

Mosaic runs its own Chromium, draws each profile from a real machine and matches it to the proxy exit. Profiles stay on disk. One plan, no per-profile fees.

400: A session token on a rotating port, beside a screenshot: a proxy check result in Mosaic: latency, exit address, ISP, HTTPS tunnelling and reputation
Story

A session token on a rotating port is a 400, not a no-op

"Can not use -session- on rotating ports" means the port, not the username, decides stickiness. We had written the opposite, until we asked the gateway.

2 of 4: Two of four canvas routes were never noised, beside a screenshot: mosaic settings showing the installed Tesseract Chrome engine and its version
Story

The canvas method nobody noised: what a worker test found

Our canvas noise reached toDataURL and missed toBlob, so a page calling toBlob got a PNG byte-identical to stock Chrome's. A worker test caught it.

What a canvas hash says about your machine, beside a screenshot: a profile fingerprint in Mosaic: GPU, screen, fonts, timezone and language matched to the exit
Industry

What a canvas hash actually tells a site about your machine

A canvas fingerprint reveals your rendering stack: GPU, driver, fonts, the OS's text rasteriser and antialiasing. It names a kind of machine, not a person.

0 lies: A CreepJS lie, and why stock Chrome has none
Engineering

What a CreepJS lie is, and why stock Chrome has none

CreepJS lies detected means an API behaved unlike the native one: wrong toString, wrong descriptor, or a worker that disagrees. Stock Chrome has none.

1 price: What a profile costs the company that sells it
Industry

Why anti-detect browsers cost what they cost

Anti-detect browsers are expensive per profile when the vendor stores and syncs each one. A profile on your own disk costs the vendor nothing.

Two JA3 hashes, one JA4, beside a screenshot: routing Mosaic launches through Proxyman, Charles or mitmproxy to read their traffic
Engineering

Why Chrome's JA3 hash changes on every connection

Chrome's JA3 changes because Chrome shuffles its TLS extension order on every connection, and JA3 hashes that order. JA4 sorts first and holds still.

Every account its own browser. One price for all of them.

Free holds 3 profiles and 10 profile creations, with no card. Pro is $49 a month for any number, or $490 a year with 2 months free. Try it for 14 days; cancel before day 14 and you pay nothing.