JA3 and JA4 Fingerprints
JA3 is a fingerprint of a TLS client computed from the ClientHello, the first message a client sends when opening a connection. It concatenates the TLS version, the accepted cipher suites, the extension list, the elliptic curves and the curve point formats in the order they appear on the wire, then hashes the result to a single MD5 string. JA4 is its successor, published by FoxIO under a BSD 3-Clause licence and credited to John Althouse, who also worked on JA3. Rather than one opaque hash, JA4 produces three readable sections in an a_b_c form, for example t13d1516h2_8daaf6152771_e5627efa2ab1.
The FoxIO specification, read 2026-07-27, describes the first section as the protocol marker (q for QUIC, d for DTLS, t for TLS over TCP), a two-character TLS version, d or i for whether SNI is present, a two-digit cipher count, a two-digit extension count, and the first and last characters of the first ALPN value. The second section is a 12-character truncated SHA256 of the ciphers sorted in hex order. The third is the same over the sorted extensions followed by the signature algorithms, with SNI and ALPN excluded. Sorting is the point: JA3 preserved wire order, so browsers that shuffle their extensions on every connection produced a new JA3 each time and broke the fingerprint as an identifier. Sorting survives the shuffle, and the signature algorithms are folded in to restore the uniqueness that sorting would otherwise cost.
This is the highest-value detection signal a site has, because it arrives before a single byte of HTTP does. The fingerprint is a property of your TLS library, not your code, so Python requests via OpenSSL, Go net/http, curl, Node and Chrome each emit a distinct and well-catalogued value. No amount of header spoofing changes it. A scraper that sets a perfect Chrome User-Agent while handshaking as Python announces the mismatch in the handshake, and that mismatch is trivially detectable. Mitigation runs along a spectrum: impersonation libraries that replay a real browser's ClientHello byte for byte, running an actual browser so the handshake is genuine, or buying a vendor such as Scrapfly, ZenRows, Scrappey or ScrapeNinja that manages the TLS layer for you.
The diagnostic pattern is specific. If a block survives every proxy change, every header change and every IP type, and it fires on the very first request before any behavioural signal exists, suspect TLS. Confirm by sending the same request from a real browser on the same IP. If the browser gets through and your client does not, the handshake is the trip wire, and the choice is between an impersonating HTTP client, which is cheap and fast, and a full browser, which is expensive but leaves nothing to imitate.
Tools that handle ja3 and ja4 fingerprints
4 tools in the webscrape.dev directory are commonly used for ja3 and ja4 fingerprints workflows, spanning web scraping apis. Each is reviewed independently with pricing and editorial assessment.
Scrapfly is an API-first web scraping and browser automation platform built around a single endpoint that handles anti-bot bypass (including Cloudflare, Akamai, DataDome, and PerimeterX), JavaScript rendering, and rotating residential and datacenter proxies across 190+ countries. It returns HTML, Markdown, plain text, JSON, or screenshots. The product line extends beyond the core scraping API to a Cloud Browser, an LLM-powered Extraction API, a Crawler API, an AI Browser Agent, and an MCP server for Claude, Cursor, and Cline. Scrapfly was founded in 2017 for internal use and opened to the public in 2020. It is operated by Joam Intelligence, LLC, a bootstrapped company, and ships SDKs for Python, TypeScript, Go, Rust, and Scrapy.
ZenRows is a web scraping API company based in Spain, initially bootstrapped and later seed-funded. Its Universal Scraper API returns page HTML or structured data from a single call and handles premium proxy rotation, anti-bot and CAPTCHA bypass, and headless JS rendering. The product line also includes a cloud-hosted Scraping Browser for teams running their own Puppeteer or Playwright automation, plus a residential proxy network with more than 55 million IPs and geotargeting.
Scrappey is a web scraping API that pulls publicly available web data through direct HTTP requests or full browser automation in Chrome and Firefox. It handles JavaScript rendering, CAPTCHA challenges, and Cloudflare verification flows. Requests route through a pool of more than 50 million residential IPs across 195+ countries, and output comes back as HTML, JSON, cookies, or markdown formatted for LLM input. It supports over 30 browser automation actions and charges per request rather than by subscription; failed requests are not billed.
ScrapeNinja is a web scraping API run by developer Anthony Sidashin. It has a fast raw-request endpoint (/scrape) with Chrome fingerprint emulation to bypass bot detection and Cloudflare, plus a full headless-browser endpoint (/scrape-js) with JavaScript evaluation for dynamic pages. Rotating datacenter proxies span six regions, with optional paid premium proxies, automatic retries based on response codes and timeouts, and JavaScript-based extractors that turn HTML into structured JSON. A browser-based sandbox lets you build and test scrapers without code, and the API ships with an OpenAPI spec and an official n8n integration node.