Back to BlurLoc

Why BlurLoc Is Legally Different

The lookup API is designed so you never send a full IP to a third-party provider. This page explains why that matters legally, what it depends on, and what BlurLoc does not claim.

The starting point: full IPs are personal data

IP addresses are personal data under EU law. The ECJ confirmed this in Breyer v Bundesrepublik Deutschland (C-582/14, 2016): even a dynamic IP can be personal data where a party has realistic legal or technical means to combine it with identifying information. Sending a full IP to an external geolocation API is a regulated data transfer. It requires a legal basis, a Data Processing Agreement, and disclosure in your privacy policy.

This is the baseline. It is settled, not contested.

What BlurLoc sends instead

In the intended flow, your application sends a coarse network prefix: for example, 192.0.x.x rather than 192.0.2.1. BlurLoc resolves the lookup against the /16 network block, not the specific host address.

A /16 prefix covers 65,536 addresses. The lookup provider receives a signal at network-range granularity. The exact host address never leaves your server.

Why that changes the legal analysis

EU data protection law assesses identifiability from the actual recipient's perspective, using means that are reasonably likely to result in identification, not theoretical ones. GDPR Recital 26 states that to determine whether a natural person is identifiable, account should be taken of all the means reasonably likely to be used.

WP29 Opinion 4/2007 defines the singling-out test: a person is "identified" when they can be distinguished from all other members of a group. A coarse prefix covering 65,536 addresses does not single out an individual. It points to a network range, not a specific user.

The CJEU in EDPS v SRB (C-413/23 P, 2025) confirmed that identifiability must be assessed from the recipient's perspective. Data that is personal for one actor may not be personal data in the hands of a different party that lacks the means to identify an individual from it.

BlurLoc receives a network-level signal. It has no additional data to attribute that signal to a specific person. A prefix that does not distinguish one user from 65,535 others does not meet the singling-out threshold.

The core argument

In the intended prefix-only flow, the lookup payload may not be personal data in BlurLoc's hands at all.

This is a structural claim, not a policy claim. It is not "we handle personal data more carefully." It is "the input may not be personal data at the lookup provider, because the lookup provider cannot single out an individual from it using realistic means."

If the input is not personal data from the recipient's perspective, the processing does not automatically trigger the full set of GDPR obligations that apply to personal-data transfers. That changes the compliance picture for the lookup call specifically.

What this depends on

The argument holds only for the prefix-only flow. The prefix-only path is the canonical, intended design. It is what BlurLoc is built for.

If a full IP is submitted, BlurLoc returns a result but flags the response with "warning": "exact_ip_submitted". Submitting a full IP restores full-IP transfer dynamics. The legal advantage of the prefix-only flow does not apply.

Strict Mode is enabled by default. Full-IP input is rejected with a 400 error at the API level. Pass ?strict=0 only if you intentionally need to accept exact IPs for compatibility reasons.

Website traffic, server logs, and session monitoring are separate. They involve ordinary request metadata including full IPs and are standard personal-data processing. This analysis applies to the geolocation lookup call only.

The scope

This applies to the lookup call. Your server logs, session data, and wider traffic involve full IPs and are standard personal-data processing. BlurLoc changes the lookup specifically.

BlurLoc is a lookup API, not a compliance framework. Use it as one precise tool that eliminates one specific data transfer risk. That is a meaningful structural improvement to your stack.