You do not have to match browser timezone to proxy by hand. Mosaic matches a profile's timezone, language and geolocation to the address its proxy actually exits from. It measures the exit through the proxy itself, draws the locale for that place when the profile is created, and checks it again before every launch, because residential exits move.
Why match browser timezone to proxy at all
It is the first comparison a consistency scanner makes: where your IP is, against what time your browser thinks it is. A Berlin exit with America/New_York in Intl.DateTimeFormat().resolvedOptions().timeZone fails that before anything subtler is read.
Measured through the proxy, not read off its label
A proxy's label says what the seller sold you. The exit is what a site sees, so that is what Mosaic looks up: the check goes out through the proxy, and the address it comes back from decides the country, the timezone and the coordinates. A rotating gateway hands out a different exit per connection, so at launch Mosaic uses the exit its own pre-launch check just measured on the exact credentials the browser is about to use, rather than measuring a second time and matching the profile to an address nobody is browsing from.
When you create profiles with a proxy, the exit is measured before the identity is generated, and the lookup is cached per exit for five minutes, so a batch of 500 on one gateway costs one request. Every create call over the API says whether it worked, in an exitMatch field: matched: true when a measured exit decided the locale, or matched: false with the reason. Before that field existed, the same European gateway produced America/New_York on one call and America/Chicago on the next, and the two answers looked identical from outside.

Timezone, language and location come from where the proxy comes outIn Mosaic: Matched to the exit. Timezone, language and location follow the proxy. Free holds 3 profiles. Pro is $49 a month for any number.
Mosaic is a desktop app
Email yourself the link and open it on your computer.
How it works: Matched to the exit
Before every launch
Exits move. A sticky session expires, a pool rotates, a provider moves a subnet, and a profile that agreed with Frankfurt last week now leaves from Dallas. So "Match the identity to the proxy exit at every launch" is on by default for every profile (it is on the editor's Privacy tab), and the exit is resolved again before the browser starts.
Not everything moves with it, and the split is deliberate:
- Timezone and geolocation always follow the exit. A logged-in site reads whatever the browser reports now, so changing them costs nothing.
- Language follows only on a profile that has never run and has no cookies.
Accept-Languagegoes out on every request, and a session that has spokende-ATto a site for a month and suddenly switches toen-UShas told that site something true about itself. For a profile with history the language is left alone and the mismatch is reported, so you decide. - The rest of the fingerprint never moves. Canvas, screen and GPU stay as they were, because redrawing them would replace the profile with a different machine that happens to share its name.
If the editor sees an exit in one timezone and a profile in another, it says so in a "Timezone mismatch" banner, and tells you whether it will be fixed at the next start or why it will not.
When the lookup fails
A launch is never blocked on a geolocation service. If the exit cannot be resolved, the profile is left exactly as it was and the browser log says so; Mosaic does not invent a country to fill the gap. (A proxy that does not answer at all is a different matter: then the profile does not open, as checking a proxy before you use it explains.)
Profiles with no proxy
A profile without a proxy browses from your own address, so it is matched to your computer's own location. We got this wrong once. The lookup ran once at app start, and when it failed nothing retried, so no-proxy profiles were drawn from a table weighted by country share, which leans American: a machine in Austria made profiles claiming New York. Now the lookup is resolved where it is used and retried on its own interval, and when the answer is genuinely unknown the fallback is your machine's own timezone, never a table.
Where to go from here
Matching only works if each profile has its own exit to match. Provider accounts mint a separate session per profile from one gateway line, and machines that exist covers the hardware half that stays put. The timezone itself is set inside the engine, in C++, so a worker reads the same zone as the page.
