# Ad blockers

How many visits ad and privacy blockers hide from ProductLense, how to tell when your own browser is blocking it, and how a proxy recovers them.

Some ad and privacy blockers stop analytics scripts, including ProductLense. A blocked visitor sends nothing, so they are missing from every report: visitors, conversions and the visit that would have linked a payment to its channel. Payments themselves still arrive from your billing provider and count toward revenue; only their channel can be missing.

## Is your own browser blocking it?

In the developer tools' Network tab, a blocked request shows as *blocked*, *failed* or `ERR_BLOCKED_BY_CLIENT`, with no status code. Test in a browser profile without extensions. If the visit then appears on the Live page, the install is fine and the blocker was the cause.

## How much it matters

The share of blocked visitors depends on your audience: it is low for consumer sites and higher for developer and technical audiences, where blockers and privacy browsers are common. ProductLense cannot measure what it never receives, so treat it as a known gap rather than an error, and compare like with like over time.

## Recover blocked visits with a proxy

Blocklists match the script URL and the domain events are sent to. Serving ProductLense from your own domain removes both:

- **Serve the script** from a neutral path on your domain (any plan). This gets past rules that match `api.productlense.app/a.js`.
- **Forward events too** through your domain (Scale plan). Every request is then first-party, which also survives blocklists that list `api.productlense.app` itself.

Step-by-step guides: [Next.js](/docs/proxy/nextjs), [Vercel](/docs/proxy/vercel), [Netlify](/docs/proxy/netlify), [Cloudflare Worker](/docs/proxy/cloudflare-worker), [Nginx](/docs/proxy/nginx), [Caddy](/docs/proxy/caddy), [PHP](/docs/proxy/php), [Flask](/docs/proxy/flask), [FastAPI](/docs/proxy/fastapi), [Laravel](/docs/proxy/laravel), [Firebase Hosting](/docs/proxy/firebase-hosting) and [DigitalOcean App Platform](/docs/proxy/digitalocean).

> [!IMPORTANT]
> Never forward events with a plain rewrite. ProductLense would see your server's IP address for every visitor, so unique visitors and countries would be wrong. Each guide adds the visitor's real address; the [proxy overview](/docs/proxy/overview) explains why.

## Server-side events are never blocked

Signups, trials and other actions your backend already knows about can be sent with the [Events API](/docs/api/events), which no browser extension can block.
