Skip to content

Location privacy

This page answers one question: could someone use this app to work out where you live? No. Not because we promise it, but because the server never stores anything precise enough to identify an address and the API has no path that returns your real coordinates. Here is exactly what is stored, what is returned, and why it was built this way.

The short answer

What happens to a coordinate

This is the sequence a reading goes through after it leaves your phone. By the end of step four, nothing is left that could be worked backwards into your real position.

  1. 1

    It gets rounded (~110 m)

    Latitude and longitude drop to three decimal places before storage, so data at house-address resolution never exists in the first place. A database trigger enforces it, rewriting the value on every insert and update. The rule does not depend on the app behaving well.

  2. 2

    It lands in a cell (~3 km)

    The rounded point is turned into three H3 cells: res-6 (~3 km), res-4 (~23 km) and res-2 (~158 km). Proximity searches run on those cell ids rather than by comparing coordinates, so the query never touches the stored position at all.

  3. 3

    A display point is generated

    The point you see on the map is placed by offsetting the centre of your res-6 cell. Direction and distance come from a hash of a server secret, your account id and the cell you are in, so the same input always yields the same point. The offset reaches at most one cell radius and spreads evenly across the cell, which keeps points from piling up in the middle.

  4. 4

    Distance becomes a bucket

    The real distance between two people is computed on the server but never handed back as a number. The response carries a range instead: under 2 km, under 5 km, under 10 km, under 25 km, and so on in fixed steps.

The app is coming soon. Want to hear when it launches?

Get notified

Why the offset is fixed, not random

Stored, returned, never returned

Left to right: what sits on the server, what the API hands out, and what it never hands out under any conditions.

DataStored on the serverReturned by the APINever returned
CoordinatesLatitude/longitude rounded to three decimals (~110 m)A display point: cell centre plus a fixed offsetThe raw GPS reading
Cellres-6 (~3 km), res-4 (~23 km) and res-2 (~158 km) idsA set of cells at the resolution the radius calls forIn the density view, a cell holding fewer than five people
DistanceNot stored; computed per requestA range: “under 5 km”A decimal distance such as 2.7 km
AddressNothingNothingStreet, building or house number
Location historyThe latest reading only; it overwrites the previous oneNothingTrails or lists of past positions
City / country labelCountry code and city nameAbsent from match and map responsesAnything finer-grained than a city

What the map is, and what it is not

No street detail

The map screen does not run a street-level map engine; points sit in an abstract visualisation. That is deliberate. When the point being drawn is already approximate, printing street names around it would imply a precision that does not exist.

Resolution drops as you look further

A 10 km search runs on res-6 cells (~3 km). At 100 km it switches to res-4 (~23 km), at 400 km to res-2 (~158 km). Widening the radius coarsens what you see, which keeps the query fast and tells a distant observer less.

No background tracking

Your location is refreshed only when you open the app. There is no service, scheduler or background job collecting positions while the app is closed.

Leaving the map entirelyOn the way

Your location record carries a hidden flag, and map and pin queries drop the rows that have it set before anything else runs. There is no screen for turning that flag on or off yet, so you cannot pull yourself off the map today. When it ships, it will sit on the Ruh Eşi+ side. While hidden, matching keeps running; you simply are not on the map.

Density viewOn the way

On the free plan, cells will show a headcount instead of individual people, with cells holding fewer than five people excluded outright (k-anonymity). The aggregation behind that view is not refreshed on a schedule yet, so today it comes back empty in practice. It will be fixed before launch.

Frequently asked questions

Can someone find my address?

No. The server never stores anything precise enough to identify an address: the most precise value we keep is a coordinate rounded to roughly 110 metres, and that value is never returned by any endpoint. The only coordinate that leaves the server is a display point offset inside a cell of about 3 km.

If I open and close the app a few times, do I appear somewhere different?

As long as you stay in the same cell, no — you appear at exactly the same point. That is intentional rather than a shortcut: if the point moved each time, anyone querying you repeatedly could average the readings and recover your real position.

Why is distance vague? What would showing “2.4 km” give away?

An exact distance allows triangulation. Three exact distances measured from three known points pin the fourth to a single spot. A range breaks that: “under 5 km” leaves possible positions spread across a wide area, and the intersections never narrow.

Do you keep a record of where I have been?

No. Your location is one row per account, and every new reading overwrites the previous one. There is no table accumulating past positions. When you delete your account, that row goes with it.

I do not want to appear on the map at all. Is that possible?

Not yet. The hidden flag is defined in the schema and map and pin queries drop every row that carries it, but there is no screen for turning it on or off. When it ships, it will sit on the Ruh Eşi+ side. While hidden, your compatibility is still calculated — you simply no longer appear on the map.

Next

Coming to iOS and Android

Meet people who like what you like

Ruh Eşi is not a dating app. It exists so you can meet people to hike with, listen to the same band with, and talk about the same thing for hours — and your exact location is never shown on the map.