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
Nobody can find your address. Nobody can find your street either. The whole system is built around that:
- Your raw GPS reading is never stored; it is rounded to three decimal places (about 110 metres) before it is saved.
- The only coordinate the API can return is a display point — and that point is not where you are.
- Distance comes back as a range like “under 5 km”, never as a decimal number.
- Location updates only while you have the app open. There is no background tracking.
- Your location record is a single row per person; a new reading overwrites the old one. There is no “was here on this date” table.
Some of these rules live in the database schema rather than in application code. Even if a bug made the app try to write full-precision coordinates, the database rewrites the value as it is stored.
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
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
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
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
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 notifiedWhy the offset is fixed, not random
This is the part people get backwards. Intuition says “offset it randomly on every request, that must be safer”. The opposite is true.
A random offset scatters the displayed point in a cloud around your real position. Someone who queries you enough times can average those points, and the average converges on where you actually are. With enough samples the offset dissolves completely and the privacy it bought disappears.
A fixed offset produces no cloud. Query a thousand times and you get the same point a thousand times. Repeating the request yields no new information — all an attacker ever holds is one point that may be kilometres from you.
The cell you are in also feeds the hash. Move to another city and the direction of your offset changes too. Otherwise your display points in two cities would carry the same vector, and that vector alone is enough to solve for your real position.
This is covered by tests: display points are generated for 200 accounts in the same cell, and more than 150 of them must land over 500 metres from the real point. Tests also confirm that two calls for the same person return an identical point, and that two people in one cell never land on top of each other.
The server secret behind the offset is set once in production and never changed. If it changed, everyone's map point would shift at the same moment — and for anyone who saw both the old and the new point, that shift would be a fresh clue worth thinking about.
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.
| Data | Stored on the server | Returned by the API | Never returned |
|---|---|---|---|
| Coordinates | Latitude/longitude rounded to three decimals (~110 m) | A display point: cell centre plus a fixed offset | The raw GPS reading |
| Cell | res-6 (~3 km), res-4 (~23 km) and res-2 (~158 km) ids | A set of cells at the resolution the radius calls for | In the density view, a cell holding fewer than five people |
| Distance | Not stored; computed per request | A range: “under 5 km” | A decimal distance such as 2.7 km |
| Address | Nothing | Nothing | Street, building or house number |
| Location history | The latest reading only; it overwrites the previous one | Nothing | Trails or lists of past positions |
| City / country label | Country code and city name | Absent from match and map responses | Anything 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
How it works
The maths behind a match: two-way compatibility, the confidence factor and rare interests.
Safety
Photo moderation, blocking, reporting and deleting your account.
Privacy Policy
The full text: what data is processed, and on what legal basis.
Frequently asked questions
Is it a dating app, is it free, when does it launch?
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.