What the playground reports
A clean browser on a flagged IP address still scores above zero. Read the flags, not only the score.
From the live tier
The live tier loads the playground in every browser it tests and records these fields:bot, tampering, anti_detect_browser, virtual_machine, developer_tools and incognito is set. Network flags are recorded and do not fail the test. Latest results shows the newest run.
Behind a proxy with measure-fpjs.py
scripts/measure-fpjs.py measures one headed launch through a proxy. It looks up the exit’s country and timezone through the proxy with curl, gives the persona that locale and timezone, loads the playground, and prints every flag.
It runs headed, so a Linux server needs Xvfb. Use a fresh proxy session for each run: FingerprintJS remembers a visitor, and a returning visitor with a new machine scores differently from a new one.
APOSTATE_BINARY points it at a local build.
Compare fairly
- Measure a control on the same exit:
--platform hostfor the real machine, or Google Chrome. Their difference from the persona is what Apostate changes; what they share is the network and the host. - Use the driver your users use. Under plain Playwright, FingerprintJS reports
developer_toolson every run; under Patchright, which the packages use, it does not. - Several runs, several seeds. One run is one sample.