Reproduce User Sessions for Support Teams (2026 Guide)

12 min read

Picture the ticket: the checkout button is "completely broken." The user is in São Paulo, and the screenshot shows a blank white box where the payment form should be. A US-based support engineer clicks through the same flow and everything works. Checkout button right there, payment form loading, card fields responsive.

"Unable to reproduce" goes into the ticket notes.

Weeks later the same report keeps arriving from Brazilian users. QA finally reproduces it by setting the browser to Portuguese, the timezone to America/Sao_Paulo, and routing through a Brazilian proxy. The payment integration had a race condition triggered by specific Accept-Language header orderings, and it had been broken for Brazilian users the whole time.

One engineer could have caught it on day one — with the tools to see what the user saw.

The Problem With "Unable to Reproduce"

Support teams don't fail users because they're lazy. They fail users because they're looking at a different version of the product. Sharp engineers miss obvious bugs for days — not because they aren't good at their job, but because their browser is showing them a different reality.

When a user reports something broken, the bug lives in the intersection of their environment:

  • IP geolocation (affects CDN routing, feature flags, pricing, compliance banners)
  • Timezone (affects date rendering, scheduling logic, API timeouts)
  • Browser language (affects Accept-Language headers, i18n strings, RTL layouts)
  • Screen resolution and DPI (affects responsive breakpoints, canvas rendering)
  • Browser identity settings (can affect fraud-scoring rules, bot filtering and A/B test assignment on your own site)
  • Installed fonts (affects text rendering, PDF generation, canvas output)

Your support engineer in the US, on their corporate laptop, with English Chrome on Pacific time — they're not seeing what the user in São Paulo sees. They're not even close.

The typical workarounds don't cut it. VPNs change your IP but nothing else, so timezone and language still point at your real location. Browser DevTools device emulation fakes the viewport but not the fingerprint. Chrome's location override changes the Geolocation API but not your actual traffic routing.

You need a browser configured like theirs. That is one of the legitimate uses of a multi-account browser — not just keeping client accounts separate, but debugging and QA workflows.

Standard browser dev tools don't offer full geo simulation, which is why a separate profile per region is useful.

The T&S Reproduction Workflow

Here's a workflow support and engineering teams can use to reproduce user sessions without contaminating their own accounts or leaking credentials.

Step 1: Extract Environment Details From the Ticket

Most helpdesk platforms (Zendesk, Intercom, Freshdesk, HelpScout) capture some user metadata automatically. At minimum, you usually get:

  • IP-derived country and city
  • Browser user agent
  • Screen resolution
  • Operating system

Some platforms also capture:

  • Timezone offset
  • Browser language
  • Referrer URL

If your support widget doesn't capture these, add them. A single line in your tracking snippet saves hours of back-and-forth. Capturing navigator.language, Intl.DateTimeFormat().resolvedOptions().timeZone, and screen.width + 'x' + screen.height in the support widget takes a few lines of code.

For trust-and-safety investigations (abuse, fraud, appeals), you probably have server-side logs with more detail: full request headers, IP quality scores from MaxMind or similar, session history. Use it.

Step 2: Build or Select a Matching Profile

Open JustBrowser. Either create a new profile or select from your team's profile templates.

Configure to match:

ParameterWhere to find itJustBrowser setting
CountryIP geolocation from ticketProxy selector (ISP or residential proxy from that country)
TimezoneUser's reported timezone or derived from IPTimezone dropdown
LanguageAccept-Language header or browser languageLanguage settings (set primary + secondary)
OSUser agent from ticketOS identity (Windows, macOS or Linux)
BrowserUser agent from ticketJustBrowser's Chromium core (rebuilt as upstream Chromium moves)
Screen resolutionTicket metadata or logsScreen settings

You don't need a perfect match on every parameter. Focus on the ones most likely to affect the reported issue:

  • Payment problems? Geo and language matter most (currency, compliance, Accept-Language race conditions).
  • Rendering issues? Screen resolution and OS matter most.
  • False positives from your own bot filtering? Identity consistency matters most — make sure canvas, WebGL, and fonts agree with each other. Our WebGL fingerprinting deep dive explains how GPU details are read.

JustBrowser handles the hard parts. Set the country and OS, and it auto-generates a consistent fingerprint: matching WebGL renderer strings, plausible font lists, hardware-consistent canvas output. You don't need to manually configure 40+ identity parameters—that's the whole point.

Step 3: Assign a Geo-Matched Proxy

The profile needs an IP from the user's region.

For support reproduction, ISP proxies work best — static IP, consistent behavior, no mid-session rotation. Residential proxies work too but cost more per GB and can rotate unexpectedly. Datacenter proxies are often treated differently by fraud rules, which can introduce new behaviour you're not trying to reproduce. If the proxy's location and the profile's timezone disagree, fix that first, or you'll be reproducing a mismatch rather than the user's setup.

Proxies aren't included in the subscription, so bring your own or buy a proxy plan in the app; providers price dedicated ISP IPs per IP per month, so check their current pricing pages. Our full ISP proxy setup tutorial covers configuration details.

If your team reproduces issues from the same 5-10 countries regularly, keep a dedicated IP for each. Set it up once and reuse it for as long as you keep the IP. Worth it. Proxy costs are pocket change compared to the engineer hours you waste with "unable to reproduce."

Assign the proxy in JustBrowser:

  1. Profile settings → Proxy
  2. Enter your proxy string (e.g., socks5://user:[email protected]:1080)
  3. Test connection — verify country matches
  4. Save

Step 4: Reproduce Without Session Contamination

Launch the profile.

This is the part that trips people up: you're not logging into the user's account. You're loading your product from a browser that looks like the user's browser. When you hit your login page, use a test account — or create a fresh account from within that profile if you need to test onboarding flows.

Why does this matter?

  1. No credential sharing. You don't need the user's password. You don't need to ask for it, so there is nothing of theirs to store or leak.
  2. No session contamination. Your main Chrome profile stays clean — no cookies from the reproduction session bleeding into your daily work.
  3. Reproducible. The profile persists. If the issue appears, you can save the profile state, share it with engineering, and they can pick up exactly where you left off.

Navigate to the flow the user reported. See what they see. If the bug appears — screenshot, screen-record, document. If it doesn't, adjust parameters and try again. Many issues reproduce on the first try once the environment matches. The ones that don't usually mean you're missing a parameter—check the ticket again for anything you overlooked.

Step 5: Document and Escalate

When you reproduce the issue:

  1. Screenshot the broken state — include the URL bar and any error messages.
  2. Export the profile (JustBrowser's encrypted full-profile export) so engineering can import it and recreate the exact environment.
  3. Note the exact proxy IP (from the proxy tester) and the fingerprint values you set — or just hand over the exported profile.
  4. Add to your bug tracker with the reproduction steps.

When engineering gets the exported profile, they can import it directly. No "works on my machine." Same fingerprint, same proxy, same environment. If it's broken for the profile, it's broken for users with matching conditions. Finally—reproducible bug reports that actually reproduce.

Why This Beats BrowserStack / Sauce Labs for Support

Cloud device labs exist. BrowserStack, Sauce Labs, AWS Device Farm — real browsers in real locations. Great products for cross-browser visual testing.

But for support reproduction? Different beast. Here's the support-specific breakdown:

Cost model. Cloud device labs price by plan, by parallel session or by device minute, depending on the vendor; their pricing pages have the current terms. Reproduction debugging is slow, exploratory work — clicking around, trying variations, waiting for race conditions to manifest — and pricing tied to sessions or minutes fits it poorly.

JustBrowser is $9.99/month (or $99.99/year) for unlimited profiles, and team seats are free — one subscription covers the whole desk running shared reproduction profiles. Add a few ISP proxies from your provider. Your total cost is fixed, not proportional to how long bugs take to find.

Identity control. Cloud device labs give you real browsers on real devices, with location and locale options that vary by vendor, but generally not control over identity details such as the font list or canvas and WebGL output. For reproducing fraud-rule false positives or A/B test weirdness on your own product, you need that control. Our explainer on AI-driven bot detection covers how scoring rules like yours weigh those signals, and the TLS fingerprint explainer shows how to check the network layer of a profile.

Persistence. Cloud sessions are ephemeral. The browser disappears when you disconnect. JustBrowser profiles persist — cookies, local storage, the whole session state. You can pick up tomorrow where you left off, or hand the profile to a colleague.

Runs locally. A cloud lab streams a remote browser to you, so every click travels through that stream. JustBrowser runs on your own Windows or macOS machine, so the browser is right there and only the profile's traffic goes through its proxy.

Advanced: Automating Reproduction With the REST API

For high-volume support orgs, you can automate profile creation from ticket metadata.

JustBrowser's local REST API lets you create profiles programmatically:

// Pseudo-code — field names are illustrative; the real schema is at justbrowser.app/docs
const ticketMeta = extractFromZendeskWebhook(payload);

const profileConfig = {
  name: `REPRO-${ticketMeta.ticketId}`,
  os: mapUserAgentToOS(ticketMeta.userAgent),
  language: ticketMeta.browserLanguage || 'en-US',
  timezone: ticketMeta.timezone || 'UTC',
  screen: ticketMeta.screenResolution || '1920x1080',
  proxy: selectProxyForCountry(ticketMeta.country)
};

await fetch('http://127.0.0.1:36542/api/v1/profiles', {
  method: 'POST',
  headers: { 'Authorization': 'Bearer <token>', 'Content-Type': 'application/json' },
  body: JSON.stringify(profileConfig)
});

When an engineer picks up the ticket, the profile already exists. They launch it and start investigating immediately. No manual config, no fat-fingering timezone settings. Handle missing timezones in the webhook, and test the handler thoroughly.

If you want full hands-off reproduction, connect the profile launch to Playwright via Chrome DevTools Protocol and run automated checks — load the reported URL, screenshot the result, attach to the ticket. Human review still matters, but you've front-loaded the grunt work. Check the API docs for the full profile creation schema.

What This Workflow Catches

Matching a user's region, language and timezone tends to surface bugs like these:

  • Timezone-triggered race conditions in date pickers
  • CDN edge-cache variations by region
  • Geo-gated feature flags that didn't match internal test accounts
  • Fraud rules that treat a US timezone on a non-US IP differently (the VPN case)
  • Currency formatting bugs only visible in specific locales

None of these are exotic. They're boring, common bugs. They just happen to be invisible from a US office.

A typical example: a subscription management page shows the wrong renewal date for users in timezones ahead of UTC. The JavaScript toLocaleDateString() call ran client-side with the user's timezone, but the server sent UTC timestamps assuming client-side parsing. US support engineers never see it — they are behind UTC. (If you're tracking errors across regions, consider pairing this workflow with analytics that correlate errors with funnel drop-off so the pattern shows up before it becomes a pile of tickets.)

The fix for an "unable to reproduce" bug is usually trivial once you can see it.

Frequently Asked Questions

Can I reproduce a user's session without logging into their account?

Yes. You're recreating their environment — geo, timezone, browser fingerprint, language, device type — not their account. When you load your product from that profile, you see what they see because your browser presents the same signals. No credentials needed, no access to their personal data, and far less compliance exposure than logging in as them.

How is this different from using a VPN to check geo-specific behavior?

VPNs only change your IP. Sites can read many other signals: timezone, language headers, canvas fingerprint, WebGL renderer, font list, screen resolution. A VPN from Brazil with your US-configured Chrome still reports a US timezone and language on a Brazilian IP, so apps may render differently than for an actual Brazilian user. A JustBrowser profile sets those values together, across 40+ identity parameters, to match the target locale.

Does reproducing sessions work for mobile-reported issues?

Partially. You can match screen size, DPR, language and geo, and for mobile web pages a mobile profile can present Chrome on Android's client hints, memory range and touch screen. Native app bugs or issues involving actual device sensors (GPS, accelerometer, cellular carrier) still require real devices or emulators.

How do I share reproduction profiles with my support team?

JustBrowser includes direct profile sharing — no exporting credentials or copying session data. Team seats are free and unlimited, so the rest of the desk can run the profiles you've shared with them without each person needing their own subscription. Set up a template profile for each region and share it view-only or with launch permission; recipients run the shared profile as-is and cannot edit it, so the template stays intact and everyone gets an identical baseline.


Try JustBrowser

Native Chromium multi-account browser for teams — not extension-based. Real C++ engine patches at the canvas / WebGL / audio / font / screen layer, across 40+ identity parameters. Local REST API + CDP for Playwright, Puppeteer, Selenium.

$9.99/month or $99.99/year. 7-day free trial, card required — cancel any time in the seven days and you are not charged. Unlimited profiles, unlimited cloud sync, unlimited team seats.

Get started → · How it differs from Multilogin / GoLogin / AdsPower

Ready to manage multiple accounts?

Seven days free, then $9.99/month — one plan, everything included.

We'd like to use Google Analytics, a Google service, to understand how our website is used. It sets two cookies in your browser and runs only if you click Accept. You can change your choice at any time with Cookie settings. Cookie Policy

Sign-in cookies and the cookie that remembers this choice are always on; the website needs them to work.

Google Analytics, a Google service, helps us understand how our website is used. It sets two cookies, _ga and _ga_TVZHQ99TZW. It is now onoff in this browser. If your browser sends a Global Privacy Control or Do Not Track signal, it stays off. Cookie Policy