Privacy Policy (GDPR Art 13 + ePrivacy)
Status: appropriate for the current closed-beta scale, revised against an external legal research memo dated 7 August 2026 and then reconciled, the same day, against a line-by-line audit of the shipped source code. Where the two disagreed, the code won: several passages that described an intended design now say plainly what the app does today, and are marked [planned] where the design is still being built. This notice is drafted to satisfy the information obligations of GDPR Article 13 (information to be provided where personal data are collected from the data subject) and the device-access consent rule of Article 5(3) of the ePrivacy Directive 2002/58/EC (as amended by 2009/136/EC), transposed in Denmark as cookiebekendtgørelsen, BEK nr 1148 of 9 December 2011, § 3. It also reflects Apple App Store Guideline 5.1.1(i) and Google Play's User Data / Data safety requirements.
Last updated: 27 October 2026 — Section 3.7 now says what blocking
someone does on their side: they are not told. A one-to-one chat you had
with them is changed for good the way an account deletion changes it: your
name, e-mail address and photos are taken out of it, and unblocking does not
bring it back. In a group room you both stay, and their app shows you to them
like an account that has left Flybi, with no profile to open. The
copy of a room's members' block lists that keeps a blocked person out of an
open room is now on a record only our servers can read (#2330).
Also 27 October 2026 — Section 3.4: the finest area cell
(~153 m) is no longer on your profile. Distances other people see are now
worked out on Flybi's servers from your private record, and their app receives
only a rounded distance, never your position or a cell. The server also
ignores a stored position that would mean travelling faster than about
300 km/h since the last one it accepted. If that server work
ever has to be switched off for a while, distances are worked out on the phone
from the ~1.2 km cell instead, so they are coarser and the Hot/Cold game
cannot be started (#2310). Before that, 26 October 2026 — New Section 3.3a: what you write in
your tags, your bio and your chats can say sensitive things about you (for
example about your health, your religion or beliefs, your political views or
your sexuality), so from the app update that adds it, Flybi asks for your
explicit consent to process it, as its own question: before you set up your
profile if you are new, and once, the next time you open the app, if you
already use Flybi. Flybi cannot run without it. If you say no, or later
withdraw it in Profile → Privacy & legal, Flybi keeps what you wrote but stops
showing your profile to other people, stops working out vibes with you, and
the app is on hold for you until you agree, with log out and account deletion always
available. Sections 3.2, 3.3, 3.6 and 10 now point to it (#2308).
Also 26 October 2026 — New Section 3.16, and a row in Section 8,
say what happens when you e-mail support@flybi.app, including through "Send
feedback / report a bug" in the app, which fills in your app version, phone
system and version, phone model and app language for you to send (#2285): we
receive what you send, use it only to answer you and fix the problem, and keep
it as long as that takes.
Also 26 October 2026 — Section 3.7 now says that your block lists (whom you
blocked, and their e-mail addresses) are kept on a private record under your
account that only you can read, and that a private record under your account,
which only our servers write, lists who has blocked you so that your app can
keep you and them apart. Until the app update that does this, your block lists
were on your profile, where another signed-in user could read them; a list set
before that update stays there until a one-off clean-up moves it, or until you
next block or unblock someone (#2312).
Also 26 October 2026 — Section 3.3 now says that nobody sees
whether, or how many, secret tags you share with them until you both agree to
compare. The Discover card used to show a count of shared secret tags; it no
longer does, and the stored counts are being deleted (#2311). It also says
that two people can compare again 30 days after the last answer, and that
nobody can ask someone who blocked them or hid from them (#2324).
Before that, 23 October 2026 — Section 7 now says where your photos are
stored. Until 23 October 2026 they were stored with Google in the United
States. They are now stored in Belgium, and a copy stays in the US only as a
fallback until about 30 October 2026. App versions up to 1.7.0 still send chat
images to the US (#1649).
Before that, 22 October 2026 — Three changes. First, Section 3.9 now
separates two kinds of push notification. Notifications about something a
person did (a message, a chat request, an invite, a reveal) are sent unless you
turn them off, and notices about your account are always sent, as before.
Notifications about a soulmate or a strong fit nearby, and about a badge you
earned, are now off unless you turn them on in the app's notification
settings, or, for the soulmate one, on the Soulmate step when you set up your
profile; nobody had to do anything for them, so they need your yes first.
Turning on notifications in your phone's settings is not that yes. If you used
the app before this change you are not opted in. App versions up to 1.7.0
cannot turn them on: the switch they show for them does not do it, although
turning it off there still turns them off. Until you turn them on in a later
version, you get none of these on any of your devices. Section 10 says how to
turn them off again (#1400, #2200). Second, Section 6.1 now says that other
users see a coarse activity status on your Discover card: "Active now",
"Recently", "Today", "This week" or "Inactive". It never shows an exact time,
and it is not shown on a card that is blurred for the person looking. From the
app update that does this, it is shown however long ago you were last active;
before, it was shown only for the last 24 hours (#2219). Section 3.4 points to
it. Third, Section 6.1 also says what your comfort zone does and does not
hide: people farther away than it do not see you in their Discover feed, but if
you write to someone yourself, by a chat request or, with Premium, a room
invite, that person sees you in the request or invite, and in the chat or room
if they accept, even when they are outside your comfort zone (#2218).
Before that, 16 October 2026 — Sections 3.4, 8, 9 and 10 now say what
happens when your phone stops giving Flybi your location: you turn off Flybi's
location permission in your phone's settings, or, on iPhone, switch Location
Services off. From the app update that does this, the next time you open
Flybi it deletes the location stored for you, both the copy on your profile
and the private copy, so other people no longer find you from it. Until you
open Flybi again, the location stored before stays where it was. While your
phone does not give Flybi your location, Flybi shows you nobody nearby either,
and no Stop Bi's or On the Fly rooms nearby. When your phone gives Flybi your
location again, it stores a fresh location the next time it reads it (#1697).
Before that, 15 October 2026 — Sections 3.2 and 8 now say that, in
app versions after 1.7.0, the files and settings Flybi keeps on your phone
(such as the answers to a vibe check you have not finished, or your consent
choices) are left out of your phone's own backup and do not move to a new
phone. On Android they are not backed up at all. On iPhone the app marks its
files to be left out of iCloud and computer backups, and deletes settings that
a newer backup brings back before using them. A backup made with version 1.7.0
or earlier can still hold a copy until your phone replaces it, and on iPhone
restoring it can put that copy back. On iPhone your sign-in is kept in the
keychain, which iOS manages, and can stay after you remove the app (#2104).
Earlier the same day — Section 6.1 now says that an open room is not only a
"Stop Bi": an "On the Fly" room is open too, unless you set who can join to
"Invite only", and open is its default. Everything Section
6.1 says about open rooms, including the warning about what an open-room
listing carries, applies to it as well (#1619). Before that, 14 October
2026 — Section 3.2 now says that the answers to
a vibe check you have not finished are kept on your phone, so you can pick up
where you left off after closing the app, that they are never sent to us, and
when they are deleted. The same fact is in the account row of Section 8
(#2053). Before that, 6 October 2026 — Section 3.4 now says that while the app
is open Flybi refreshes your location about every 10 minutes, and that from
the app update that fixes this, the refresh stops when you leave the app. It
also corrects what happened before:
in earlier app versions this refresh could keep running after you left the
app, so a phone (on Android in particular, where the app stays in memory) was
asked for its location about every 10 minutes while Flybi was in the
background, even if you had not allowed background location. Where the phone
had not granted background location it refused those requests, but they should
not have been made. Where the phone did allow background location, those
readings went through, under the earlier single choice that Section 3.4
describes for app versions before background location became its own choice.
From the app update that fixes this, nothing is read in the background unless
you have allowed background location, both in Flybi and in your phone's
settings (#2036). Earlier the same day, Sections 3.4 and 9 now say that your
location consent belongs to your account, not to your phone, and correct what
happened before: a new account signed in on a phone where someone else had
already said yes to location was not asked, and its location was stored with
no record of consent. From the app update that fixes this, every account is
asked for itself, and nothing is collected for an account until it has said
yes (#2002). Before that, 5 October 2026 — Section 10 now also lists two more
records a chat room keeps under your e-mail address that deleting your
account removes: when you last read the chat, and that you sent its latest
message (#1998). Earlier the same day, Section 10 now says that deleting your
account also removes the records a chat room keeps under your e-mail address
(that you hid or cleared a chat, that you were removed from a group, and your
address on the copy of its members' block lists), and the record that limits
how often you can send chat requests (#1969). It also says that for an account
deleted before that change reached our servers, those records may keep its
address until a one-off clean-up has run, which has not run yet. Before that,
4 October 2026 —
Section 3.13 now says plainly that Google
AdMob, not Flybi, chooses the ads you see and that the consent question about
personalised ads is about Google's use of your data. It also lists the ad
categories we block in AdMob, with the date they were last checked, and says
that we never sell your personal data (#1927). Also on 4 October 2026 —
Sections 3.7, 4 and 5 now describe how offensive language is handled. Nothing
you write is refused because of its words. A setting on your device, on unless
you switch it off, shows threats and slurs in other people's names, bios, tags
and room names as ******. When someone reports you, our server checks what
you have written publicly, and your messages that were already reported, for
threats, slurs and hostile statements, which can count toward the reports that
pause an account automatically until a person looks at it. Section 4 says how
that pause works and how we treat it under GDPR Art 22; Section 3.7 says what
is read and what is kept (not the words). Section 3.7 also describes what our
moderation tool shows a person who reviews a report (#1913, #1917, #1921).
Before that, 2 October 2026 — Section 10 now gives the way to delete
your account in the app as the app shows it: Profile → Account → Delete
account (#1571). Before that, 29 September 2026 — Sections 3.6, 8 and 10: "Keep this
chat". In a one-to-one chat, a Premium member can ask to keep the chat, and if
the other person agrees, its messages are kept for up to 12 months from when
each was sent instead of 30 days. This rests on the consent of both of you;
either of you can withdraw at any time, and you are both told when keeping
ends, 7 days before the chat goes back to 30 days (#1810). Earlier the same
day, Section 3.7 now also says where the
details of a closed chat room, and of a verification decision about your
account, are kept: on records that only our moderation tools can read. The
room shows only that it is closed and the fixed reason, and your profile
only the verified badge. Until this change those details were stored on the
room or on your profile, where other signed-in users could read them (#1815).
Earlier the same day, Section 3.7 now also says where the
other details of a pause on your account are kept. When it began, whether it
was automatic and when a cooldown ends are on the private record only you can
read. Which reports led to it, and how and when it was lifted, are on a record
that only our moderation tools can read. Until this change they were stored on
your profile, where other signed-in users could read them (#1809). Earlier the
same day, Sections 3.6, 6.1, 8 and 10: every chat
message, with any image in it, is now deleted 30 days after it was sent, by a
server job that runs every night. This replaces the limit of 12 months after a
conversation's last message, which no job enforced. A message is only kept
longer while a safety report about it, or about its chat, is being dealt with
(#1102). Earlier the same day, Section 3.7 now says where the
statement of reasons for a pause on your account is kept: on a private record
only you can read. Until this change it was stored on your profile, where
other signed-in users could read it (#1806). Earlier, 28 September 2026 — Sections 8 and 10 now say that a
deleted photo or image is not gone at once: our cloud provider keeps deleted
files in a recovery store for up to 7 days, which only our administrators can
reach, and then they are gone; files from a deleted account are never brought back (#1802). Earlier the same day, Sections 3.15 and
8: when you delete your account, the record of anyone you invited stops naming you; this was
marked [planned] and is now done (#1792). Earlier the same day, a new
Section 3.15, and a row in
Section 8, describe invitations: the invite code, the record that someone used
one, the free Premium it gives, and on Android the install referrer Google Play
carries from the invite link. These were in use but not described here
(#1179). Earlier the same day, Section 3.7 now describes notices sent
through the web form at flybi.app/report, which anyone can use without an
account: what we keep from a notice, that the email address is used only to
confirm receipt and to tell the sender what we decided, and that the sender's
IP address and email address are only kept as a keyed, anonymised fingerprint
for 30 days to prevent misuse (#1180). Before that, 26 September 2026 — Section 8's note on how the retention
periods are enforced was out of date: it now says which of them run as
scheduled jobs. Its Backups row described a 30-day backup rotation that did not
exist; the database is now backed up once a day and each backup is kept for 7
days, and the row says so. A Hot/Cold game's live position (Sections 3.5, 8, 10) is now
removed when the game ends by a server job as well as by the app, and with your
account. The placeholder that replaces you on other people's encounters
(Sections 8, 10) no longer carries your account's ID, and Section 2 now says
who closes an under-18 account and how. Earlier the same day, Sections 3.2 and
6.1 now describe where your personality result is kept and what other users can
see of it: the exact scores are no longer on your profile, only a rough summary
is (#1737). Earlier the same day, Section 3.9 was made precise about a device's
push token once its notifications are turned off: that takes effect the next
time the app is opened, and only the switch in the device's settings counts,
because the notification choices inside the app apply to the whole account
(#1737). Before that, 25 September 2026 — Section 3.7 now says that the statement
of reasons for a moderation decision is kept under your account, readable only
by you, so the app can show it to you (#1181). Earlier the same day, Section
3.14 now lists that we keep
whether your subscription is set to renew, which Apple and Google tell us, so
the app can show "Cancelled, active until" a date. Before that,
24 September 2026 —
Section 3.11 was changed to describe crash
diagnostics, performance monitoring and usage analytics in two parts: how they
work from the app update that adds Profile → Diagnostics (two switches,
both off until you switch them on, asked once, withdrawable in one tap, with
your user ID cleared on sign-out), and what app versions without it still do
(everything runs from launch, with no switch). Sections 3.4, 3.10, 6.2, 7, 9
and 10 are scoped the same way. Before that,
20 September 2026 — new Sections 3.7a and 3.7b describe the
automatic check of your profile and tag photos, and what a report about one
photo does: enough different people reporting the same photo hides it while a
person decides, temporarily, reversibly, and without anything happening to your
account. Section 4 says why that is not an Art 22 decision, and Section 8 gives
the retention for the records behind it. Before that,
19 September 2026 — Section 10 now says what account
deletion does with your e-mail address on chat rooms and messages (it replaces
it), and that copies in our analytics warehouse are deleted within 30 days.
Before that,
14 September 2026 — Sections 3.13 and 3.14 now describe
advertising on the free plan and Premium subscriptions as they work once each is
switched on, with who receives what (Section 6.3), transfers (Section 7),
retention (Section 8) and device access for ads (Section 9). Before that,
10 September 2026 — the location lifecycle is now a ladder
rather than two cliffs (Section 3.4). Background reading no longer stops dead
after 14 days: it narrows instead, so a dormant account is only updated
after a large move and only as a coarse area, and stops entirely at 90 days.
The automatic expiry in the
same section splits the same way — precise position deleted after 14 days of
account inactivity (a tightening on the previous 90), coarse presence deleted
after 180. Collecting and deleting remain separate mechanisms: one stops us
taking new readings, the other removes what was already taken
Applies to: the Flybi mobile application ("Flybi", "the app", "we", "us")
1. Who we are (the controller) — GDPR Art 13(1)(a)
Flybi is operated by:
- Controller: Nicholas Gerster Toft Simonsen, operating Flybi as a registered Danish enkeltmandsvirksomhed (sole proprietorship), based in Aarhus, Denmark. As a sole proprietorship, the named individual remains personally the controller.
- CVR number / registered entity: CVR 46574184 — a registered Danish enkeltmandsvirksomhed (sole proprietorship); VAT-registered (MOMS, quarterly returns) since 19 June 2026.
-
Postal address: none is published here. GDPR Art 13(1)(a) requires the identity and the contact details of the controller, not a postal address — the name, CVR number and e-mail address above and below satisfy it, and DSA Arts 11 and 12 likewise require a contact point rather than an address. Write to us by e-mail.
-
Contact e-mail:
support@flybi.app. This is the contact for support and for privacy/data-protection matters. - Privacy policy URL: https://flybi.app/privacy (the canonical URL referenced as
LegalLinks.privacyPolicyUrl; live and published — #646).
EU representative (GDPR Art 27): Not applicable — the controller is established in the EU (Denmark). Art 27 applies only to controllers not established in the Union (Art 3(2)). The Danish establishment is itself the contact point for the supervisory authority and for data subjects.
Data Protection Officer — GDPR Art 13(1)(b)
No Data Protection Officer is appointed; one is not legally required at the
current scale. The controller (Nicholas Gerster Toft Simonsen,
support@flybi.app) is the contact for privacy matters. This position is
re-assessed if scale grows or biometric/ID verification is enabled. We do not
consider a DPO mandatory under GDPR Art 37(1): we are not a public authority,
and our core activity is operating a single consumer app rather than large-scale
monitoring or large-scale special-category processing as our core business in
the Art 37 sense. At the current closed-beta size the "large scale" thresholds in
Art 37(1)(b) and (c) are not met. That will change as we grow: a proximity
service doing background location and processing special-category data crosses
those thresholds well before it feels like a large company, and we re-run the
assessment at each order of magnitude of growth.
Note that a DPO is not required for a Data Protection Impact Assessment to be required — see Section 12.
2. Who Flybi is for — 18+ only (children) — GDPR Art 8
Flybi is an 18-and-over service. You must be at least 18 to create an account. We do not knowingly process the personal data of anyone under 18.
- At registration you must confirm acceptance of our Terms/EULA, and during
onboarding we collect a date of birth to operate an 18+ age gate
(stored as
dateOfBirthon your profile — see Section 3.8). - Under GDPR Art 8 the age at which a child may self-consent to information society services is 16, which Member States may lower to no less than 13. Denmark set this at 13 via the Danish Data Protection Act (Databeskyttelsesloven) § 6(2). Because Flybi is an adults-only (18+) service, that age-of-consent threshold does not in practice apply to our user base — our binding rule is our own 18+ minimum age.
- GDPR Art 6(1)(f) legitimate-interest balancing expressly weighs against processing "in particular where the data subject is a child." Our age gate exists precisely to keep minors off an adults' service.
If we learn that a user is under 18, we will close and erase the account. It is erased by the same process that runs when you delete your own account (Section 10), started by a person on our side.
3. The data we process, why, and our legal basis — GDPR Art 13(1)(c)–(d)
The table below lists each category of personal data, the purpose, and the
lawful basis under GDPR Art 6 (and, where relevant, the special-category
condition under Art 9(2)). The field names in brackets are the actual
Firestore fields (see lib/core/constants/firestore_fields.dart) and are given
for transparency.
3.1 Account & authentication
- Data: e-mail address; authentication identifiers from your chosen sign-in
provider (e-mail/password, Google, or Apple). (
email) - Purpose: to create and secure your account and let you sign in.
- Lawful basis: Art 6(1)(b) — performance of a contract (you cannot use the service without an account). Where you sign in with Apple, we honour Apple's private-relay e-mail.
- Provision: providing an e-mail/identifier is a contractual requirement (Art 13(2)(e)); without it the service cannot be provided.
3.2 Profile & personality
- Data: display name (
displayName); biography text (bio); profile and tag photos (photoUrl, stored in Firebase Storage); your personality / Big Five self-assessment (the vibe check): the exact scores (personality), and a rough summary of them with your visibility choices (personalitySummary); displayed badges and member number (displayedBadges,signupOrdinal); locale (locale). - Personality, who sees what: when you save your vibe check in the current app, the exact scores, and the chart drawn from them, go to a private record only you can read. Your profile carries only the rough summary: low, middle or high for each trait. Other signed-in users' apps can read that summary, and we use it to suggest people you fit with; your communication style is shown only if you choose to show it. [in progress] Profiles last saved with an app version from before this change still have the exact scores on the profile record other signed-in users can read, until a one-off move takes them off, after that app version is no longer supported (#1737).
- Unfinished vibe check: while you are taking the vibe check, the answers you have given so far are kept on your phone, under your account only, so you can close the app and pick up where you left off. The answers themselves are never sent to us: when you finish, the app works out your scores from them and saves only the scores described above. They are deleted from your phone when the finished test has been saved (if you finished it on another phone, the next time you open the test on this one), when you sign out or delete your account, or when you remove the app. In app versions after 1.7.0 they are kept out of your phone's own backup and do not move to a new phone, like the other files and settings Flybi keeps on your phone. On iPhone, iOS may still keep them in the small settings file it backs up for every app; if a backup made with a version after 1.7.0 brings them back, the app deletes them before using them. A backup made with version 1.7.0 or earlier can still bring them back when it is restored or used to set up a new iPhone, and the app then keeps them (Section 8, "On your phone").
- Purpose: to present you to other users — in Flybi "the people are the content" — so others can discover and connect with you.
- Lawful basis: Art 6(1)(b) contract for the core profile needed to deliver discovery; Art 6(1)(a) consent for genuinely optional enrichment fields you choose to add (e.g. an optional bio/photo or making your personality profile visible). Your bio can reveal special-category data, so its Art 9 condition is your explicit consent (Section 3.3a).
- Provision: a minimal profile is a contractual requirement; optional fields are voluntary and may be left blank.
3.3 Interests as "tags", including secret tags
- Data: the interest tags you add to your profile, each marked as an
identity or seeking intent, and optionally flagged secret
(
isSecret); secret tags are only revealed to another user through a mutual reveal handshake (reveal_requests). - Secret tags and other people. Nobody can see whether you share a secret tag with them, or how many, until you both agree to compare. Anyone can ask you to compare, so being asked says nothing either. When you both agree, we compare your secret tags once and each of you sees the ones you share, which may be none. The same two people can compare again 30 days after the last answer, and nobody can ask someone who blocked them or hid from them. Until 26 October 2026 the app showed a count of shared secret tags on the Discover card. That count is gone: it is no longer computed, and the counts already stored are being deleted.
- Purpose: to find and surface the people who best fit you, and to power the shared-interest discovery experience.
- Lawful basis: Art 6(1)(b) contract (surfacing best-fit people is the core service), and, for the special-category condition, your explicit consent asked for on its own (Section 3.3a).
- ⚠️ Special category — Art 9. Free-text tags and "seeking" preferences reveal special-category data under Art 9(1) — sexual orientation and sex life in particular, and potentially health, religious or philosophical beliefs. This is not a borderline case: data that indirectly discloses sexual orientation is special-category data (CJEU C-184/20 OT), and the disclosure does not have to be direct.
- The condition we rely on is Art 9(2)(a) explicit consent, in addition to the Art 6 basis above. We do not rely on Art 9(2)(e) "manifestly made public" for any of it. Publishing a tag on your own profile does not make your other data — your location, your secret tags, who you have connected with — public, and Art 9(2)(e) is read narrowly (CJEU C-446/21 Schrems v Meta). For anything you have flagged secret, Art 9(2)(e) is plainly unavailable: the flag is evidence that you did not make it public.
3.3a What you write: tags, bio and chat — your explicit consent
- Why we ask. Your tags (including seeking and secret tags), your bio and your chat messages are written by you, in your own words. What you write there can say sensitive things about you, for example about your health, your religion or beliefs, your political views or your sexuality. That is special-category data under Art 9(1) even when it is only implied (Section 3.3). We cannot know in advance whose content will say such things, and we do not try to sort people by it, so we treat the processing of everyone's tags, bio and chat as processing of special-category data.
- What we ask for. The condition we rely on for it is Art 9(2)(a) — your explicit consent, on top of the Art 6 basis in Sections 3.2, 3.3 and 3.6. From the app update that adds it, Flybi asks for this consent as its own question, separate from the Terms and from every other consent: a new account is asked before it sets up its profile, and everyone who already uses Flybi is asked once, the next time they open the app. The question says what is above, says what we do with what you write, links to this section, and asks you to tick an unticked box that states your consent before you continue. Saying no is a button of the same weight.
- What the consent covers. Showing your tags and bio to other people, as your settings allow (secret tags stay hidden unless you both choose to reveal them, Section 3.3); delivering your messages to the people you chat with (Section 3.6); and comparing your tags and profile with other people's to work out the vibe between you (Sections 3.12 and 4).
- Flybi needs it. Tags, bio and chat are how Flybi works, so the app cannot be used without this consent. We say so on the question, as a fact. If you say no, Flybi keeps what you wrote but stops showing your profile to other people (the same as deactivating your account), stops working out vibes with you, and the app is on hold for you. You can change your mind at any time, log out, or delete your account and everything in it (Section 10), all from that screen.
- Withdrawing it. Withdraw at any time in Profile → Privacy & legal → Tags, bio & chat consent, one tap and a confirmation that says what follows. From then on we stop processing what you write for these purposes: Flybi stops showing your profile, with your tags and bio, to other people, no new vibe is worked out with you, and the app is on hold for you until you agree again. What you already wrote stays stored, so it comes back if you agree again; to remove it, edit it yourself before you withdraw, or delete your account (Section 10). Messages you have already sent stay in the chats they were delivered to until they are deleted as usual (Section 8). Withdrawal does not affect the lawfulness of what we did before it.
- What we record. Each answer — yes, no or a withdrawal — is recorded under your account: the decision, the version of the text you were shown, the language it was shown in, the time (set by our server, not your phone), your platform and the app version. The record is readable only by you and us, cannot be changed afterwards, and is deleted with your account. If we change what the text says about the processing, we ask again.
3.4 Location — proximity discovery, including in the background when the app is closed — see also Section 9 (ePrivacy)
Read this section carefully. It is the most intrusive processing Flybi does.
-
When we read your location. There are two cases, and from the app update that separates them they are two separate choices: you can allow the first and refuse the second, and refusing the second costs you nothing else. In app versions before that update, one choice covers both: if you turn location on there, both happen, and you should read the second case as part of what you agreed to. 1. Foreground — when you open a proximity feature (discovery, the optional soulmate scan), the app reads your device GPS at that moment, and while the app stays open in front of you it refreshes that reading about every 10 minutes. From the app update that fixes this (#2036), that refresh stops when you leave the app and is never how your location is read in the background; in earlier versions it could keep running after you left the app (see "Last updated" above). 2. Background — while the app is closed or otherwise not in use. If you have allowed background location (in app versions before the update that separates the two: if you have turned location on at all), Flybi continues to read and send your location when you are not using the app at all, including when it is fully closed. Three separate mechanisms do this: a 500 metre geo-fence around your last known position, which sends a new reading each time you leave it and then re-arms around wherever you now are; the operating system's own background location service (on iOS, Significant Location Change, which reports after roughly 500 metres of movement rather than on a clock; on Android, background location updates); and a refresh each time you bring the app back to the foreground. So readings follow your movement, not a timer. To avoid pointless writes we discard a new reading if you have not moved out of a roughly 5 km cell and your last stored point is under 20 minutes old. 3. We narrow, then stop, if you stop using Flybi. If you have not opened the app for 14 days, background reading does not stop dead — it narrows. From that point we only record a new position if you have moved a long way (roughly 39 km rather than 5 km), we record it only as a coarse area — never the precise position — and we stop refreshing an unchanged one at all, so a phone sitting still writes nothing. After 90 days without opening the app, reading stops entirely — both the geo-fence and the operating system's background service — and nothing is collected while you are away. What we already hold is then kept, as a coarse area only, until the 180-day expiry below.
The narrowing exists because the two obvious options are both wrong. The point of your location is to let people near you find you, and there is nobody to show a precise position to while you are away — but there may well be someone who wants to reach you, and switching off completely used to leave you on the map at a position that quietly stopped being true. Narrowing keeps you findable and roughly right, at a fraction of the reading. This is separate from deleting what we already hold, which happens on its own schedule (see How long we keep things). If you come back, reading resumes the moment you open the app and we do not ask you for permission again — you never withdrew it; we simply stopped doing something there was no longer a reason to do.
-
What is transmitted, and what is stored. What leaves your device is a precise latitude/longitude fix. Where it is stored depends on who can read it:
- Your precise point is kept on a private record only you can read.
- Your profile document — which every signed-in Flybi user can read —
holds only area cells:
geohash4(~39 km) andgeohash6(~1.2 km). - Distances are worked out on Flybi's servers. The server measures from the centre of the ~153 m cell your private point falls in, not from where you actually are, and other people's apps receive only a rounded distance: under 100 m, under 500 m, under 1 km, and beyond that in steps of 500 m (up to 10 km) or 1 km. They never receive your position or a cell. The Hot/Cold game gets its starting distance the same way.
- Implausible jumps are ignored. The server measures from the last position it accepted, kept in the same private record. A new position that would mean travelling faster than about 300 km/h since then is not accepted (it is still stored as you wrote it, but not used for distances). This makes it much slower for someone to move their own stored position about to narrow down where someone else is. When your position is deleted, the accepted copy goes with it.
- If the server work has to be switched off for a while (an emergency switch Flybi controls), the app instead works distances out on the phone from other people's ~1.2 km cells. Distances are then coarser (nothing under about 1 km) and the Hot/Cold game cannot be started. Your private point is never shared in either case.
Profiles last written before this change can still carry an old ~153 m
geohash7 cell until a one-off clean-up removes it; the app no longer writes
it, and our database rules refuse it.
- ⚠️ What is still being cleaned up — the position today. Until recently the precise point was also written to the profile document, where any signed-in user could read it. That was not the design we wanted and not how discovery is described elsewhere in this notice.
New and updated profiles now publish only the cells described above. Profiles that have not been written since the change may still carry the old precise copy, and that cleanup is being applied in stages — the last stage cannot run until the app update that reads the new cells has reached everyone, because removing the old field from under an older app would empty that person's feed. Until each stage completes, treat a last-known precise position on an un-updated profile as readable by any other signed-in user. [in progress]
Your e-mail address is a separate matter and is still readable on the profile document by any signed-in user. It cannot be moved yet: the chat and blocking features currently find people by e-mail address, and that has to be changed to use an internal ID first. [planned] We will update this bullet when each of these actually lands, rather than quietly dropping it.
- Purpose: proximity discovery only — to show you people within your selected radius, to compute distances, and (where you have enabled it) to keep those distances fresh while you move. Not advertising. Not profiling for third parties. Your location is not sold and not shared with anyone except the processor that stores it for us (Google/Firebase — Section 6.2, EU storage region — Section 7). What other users are shown is a coarse area and a distance, next to a coarse activity status (Section 6.1). What they can currently read, if they go looking, is more than that — see the bullet above, and the live Hot/Cold game in Section 3.5, which you opt into each time.
- ⚠️ Why this is special-category data, and our Art 9 condition. A location trail attached to your account is data revealing sexual orientation — special-category data under Art 9(1). It reveals it through the places it shows, and through what you choose to share on Flybi alongside it — your tags (Section 3.3), your bio, your chats. A pattern of locations over time can reveal more still (where you sleep, which venues, clinics and places of worship you visit — the point the Article 29 Working Party made about location patterns in its Opinion 13/2011 on geolocation services, WP185). We therefore process location on Art 9(2)(a) — your explicit consent, on top of Art 6(1)(a) consent and the separate ePrivacy device-access consent in Section 9. Contract necessity under Art 6(1)(b) and legitimate interests under Art 6(1)(f) are not available for this, and we do not claim them.
Why we ask some people again. We have rewritten how the location consent screen explains why your location is sensitive. If you said yes to the earlier wording, the app asks you once more, and nothing is collected on the strength of the earlier yes in the meantime. If you said no, we do not ask again.
Your consent is your account's, not your phone's — a correction. In app versions before the update that fixes it, the app remembered the answer to the location question on the phone, not on your account. If someone had already said yes on a phone, a new account signed in on that phone was not asked: its location was read and stored, and we had no record that its owner had agreed to anything. That was wrong. From that update: - each account is asked for itself, and its answer is recorded under that account, with the date and the version of the screen it saw; - what decides whether we collect your location is your account's recorded answer. Signing out removes your answer from the phone, and the next person to sign in is asked for theirs; - an account that has no recorded yes — including one whose location was stored on someone else's yes — is asked when it next opens the app (or at the location step, if it has not finished signing up), and nothing is collected for it until it says yes. Until it answers, the last location stored for it stays as it was and is no longer updated; the usual expiry still removes it (the precise position after 14 days of account inactivity, the remaining coarse area cell after 180 days; see "Retention" below). If it says no on the screen that asks it when it opens the app, the location stored for it is deleted. We do not fill in a yes on anyone's behalf. - Background location is its own choice. Foreground and background are two different things we do with your location, and from the app update that separates them they are asked, stored and withdrawn separately: - Flybi asks about background location on its own screen, and only on a later visit — never in the same breath as the first location question. Yes and no are equally easy to press. Your phone's "allow all the time" prompt appears only after you have said yes there; the first location question asks your phone for "while using the app" only. - Saying no, or turning it off later, leaves nearby discovery working whenever the app is open. Nothing else changes. - Profile → Location has a switch for each. Turning background off stops background reading and deletes the location stored for you; a fresh one is stored the next time you use the app with location on. Turning location off turns all of it off, including background, and switching location back on later does not switch background back on. - If you said yes to location before the update, you said yes to both at once. You keep location while using the app. Your earlier yes is not treated as a yes to background: background stops with the update, and you are asked about it separately.
In app versions before that update, one switch governs both, so there is no way to allow one and refuse the other.
What is true in every version: turning location off in Profile → Location stops both, at the same depth as turning it on, and leaves the rest of Flybi working — you keep your account, your chats and your connections. We will never require location as a condition of using Flybi, and we will never re-ask after you have refused.
-
How often it updates. If background location is on, your position refreshes roughly every 15 minutes once you have moved more than 500 m, and at least every 20–25 minutes even if you stay still. On iPhone this rides iOS's Significant Location Change service (~500 m); on Android it is a balanced-power request at the interval above, never faster than every 5 minutes. A ~500 m self-geofence around your last written position triggers a fresh reading when you leave it. Turning background location off, or location altogether, stops all three. These figures are stated because the app's own consent screens state them, and the two must not drift apart.
-
Retention — one point, no trail. We keep one location point for you: each new reading overwrites the previous one, so your profile holds your latest position and not a history. There is no location-history collection in our database. Your stored point is deleted immediately when you turn location off, when you use "Erase my stored location", and when you delete your account. A two-stage automatic expiry for points nobody has refreshed is running (a single 90-day stage since 18 August 2026, replaced by the two stages below on 10 September 2026). If you stop using Flybi without turning location off:
- After 14 days of account inactivity we delete the precise part of your stored position — the exact coordinates (and, on a profile that still carries one, the old ~153 m cell). A coarse area cell remains, so people can still find you, but nobody can be shown a specific distance to you.
- After 180 days of account inactivity the coarse cell goes too, and you stop appearing to anyone. We warn you first: a notification 7 days before, and another 24 hours before.
Opening the app at any point restores a fresh position and resets both clocks; doing nothing lets it go, which is a perfectly good outcome and costs you nothing else — your account and everything in it are untouched.
The periods are measured from your last activity, not from when the point was recorded, so a point you keep refreshing is never removed by this.
Why the split. A stored point stops being treated as precise almost immediately: after 30 minutes of inactivity the app no longer shows anyone a specific distance to you, only a coarse "in your area" reading. So holding the precise version of a dormant point buys nothing anybody can see — which is why stage 1 removes it early, and why that is a tightening on the previous 90 days. What the remaining period keeps is coarse presence, not a live position, and that is the part worth keeping longer: it is what lets someone still reach you after a quiet few months instead of finding you gone. We do not put your coordinates into analytics events, crash reports or server logs; a coarse ~39 km area cell can, however, appear as a diagnostic detail on a crash report — from the app update that adds Profile → Diagnostics, only if you have switched crash diagnostics on; in earlier versions, whenever the app sends one (Section 3.11).
-
Minimisation (Art 5(1)(c)). Storing a precise coordinate where a coarse cell would do is more than the feature needs. The intended direction is to store only a geohash (or a deliberately rounded coordinate) and compute exact distance transiently.
-
Erasure and withdrawal (Art 7(3) / Art 17(1)(b)): because consent is the only basis here, withdrawing it leaves no basis to keep what was already stored. Profile → Location therefore does both: turning the switch off withdraws consent, stops every location read — foreground and background — and deletes the stored
location/latitude/longitude/geohash4/geohash6fields from your profile and from the owner-onlyprivate/selfrecord they are mirrored into. The same screen also carries a standalone "Erase my stored location" control you can use at any time, including while location is still switched on (in that case the app will store a new point the next time it reads your location). From the app update that separates background location, turning only background off also deletes these fields; location while you use the app stays on and stores a fresh point the next time it reads your location. If the deletion cannot be written — you are offline, say — the app tells you so rather than reporting success (#1034). When your phone stops giving Flybi your location. If you turn off Flybi's location permission in your phone's settings, or, on iPhone, switch Location Services off, then from the app update that does this the next time you open Flybi it deletes the same fields, from your profile and from the private copy, so other people no longer find you from a location your phone no longer gives. An open room you created is not part of this: it keeps the area where you opened it until the room ends (Section 6.1, "Open rooms"). Your answer in Flybi stays as it was. Your phone does not tell Flybi when you change the setting, so until you open Flybi again the location stored before stays, and the periods in this section still apply to it. Switching location off on an Android phone, rather than Flybi's permission, is not something Flybi can see; there the location stored before stays until those periods end. While your phone does not give Flybi your location, Flybi does not show you anyone nearby, or any Stop Bi's or On the Fly rooms nearby, from a location stored before. When your phone gives Flybi your location again, a fresh location is stored the next time it is read (#1697). -
Re-confirmation. We re-present this disclosure and ask you to confirm your location consent again at least once every 12 months, and again whenever the frequency, precision, retention, recipients or purpose changes.
-
Provision: location is optional. Declining it disables nearby discovery but you can otherwise use the app; declining background location leaves nearby discovery working whenever the app is open. We will not gate unrelated functionality on granting location.
3.5 Location — live "Hot/Cold" game (real-time precise distance)
- What happens: the Hot/Cold game is a real-time, two-player game that runs only inside an active, mutually-accepted game between you and one other user in your direct chat. While the game is active:
- your device GPS is polled about every 5 seconds on your device to keep the warmer/colder tint responsive;
- the other player's current precise position is read live from the game's own record described below (via a real-time listener), and the distance between you is computed on-device (haversine);
- the only things posted into the chat as visible messages are distance labels and the colour tint (e.g. "Getting warmer", "🔥 Burning!") — not coordinates;
- but — and this is the part we want you to know before you accept a game — while the game runs, each player's precise position is written to a live record attached to the chat room. The app offers the game only in a one-to-one chat, where that record is readable by the two of you. Our security rules let everyone in the room read it, so a game started in a group or open room by a modified app would be readable by everyone in that room, not only the two players. Restricting the record to the two players is [planned]. Until it ships, do not start a Hot/Cold game in a room with people you would not want to know exactly where you are.
-
your position is removed when the game ends: your app removes it when you leave the game or the app, and a server job that runs every 10 minutes removes any position left on a game that has ended, and any position nobody has updated for 10 minutes. So an app that was closed abruptly, or a phone that lost its connection, leaves its last position for about 20 minutes at most.
-
the game auto-quits if you drift more than ~5 km apart, and either player can quit at any time.
- Purpose: to play the consensual real-time proximity game.
-
Lawful basis: Art 6(1)(a) consent, and Art 9(2)(a) explicit consent for the special-category dimension described in Section 3.4 — both players must actively invite and accept the game, which is a specific, freely-given, withdrawable consent to share live precise distance for that session. The game is foreground-only: it runs while the chat is open, not in the background.
-
Retention of game data. Your live position is deleted when the game ends (as described above), when you use "Erase my stored location", and when you delete your account. Deleting your account also deletes the whole game record — which names you as a player — from every chat room you played in.
3.6 Chat messages
- Data: the text and images you send in direct and group chats
(
chat_rooms/*/messages→text,imageUrl,senderEmail,sentAt); room membership and metadata; in-chat system messages (such as "X left the chat"). - Purpose: to deliver the messaging feature.
- Messages last 30 days. Chat on Flybi is for the moment. Every message — its text, any image in it, and the lines the app posts itself — is deleted 30 days after it was sent, for everyone in the conversation, by a server job that runs every night. The app says so at the top of every chat. Section 8 gives the details, including the two cases in which a message is kept longer: while a safety report or a moderator's review concerns it, and when you both chose to keep the chat.
- Keeping a chat for up to 12 months ("Keep this chat"). In a one-to-one chat, a Premium member can ask to keep it. Nothing changes unless the other person agrees; agreeing is free. While a chat is kept, its messages are kept for up to 12 months from when each was sent. Either of you can stop it at any time. Group chats cannot be kept, because everyone in them, including people who join later, would have to agree. Section 8 gives the details.
- Lawful basis: Art 6(1)(b) contract for message delivery. Message content is not screened by the disallowed-language filter (Section 5); room names are, like the other public text fields. When a message is reported, the shared chat context is processed for safety under Section 3.7. Because what you write can reveal special-category data, the Art 9 condition for message content is your explicit consent (Section 3.3a); the Art 6 basis for delivering messages stays the contract. Withdrawing that consent puts the app on hold for you; messages you already sent stay until they are deleted as usual. You also control your messages through erasure and account deletion (Section 10). The one exception is keeping a chat longer than 30 days: that rests on the consent of both of you (Art 6(1)(a)), and either of you can withdraw it at any time (Section 10). Who asked, who agreed and when are recorded with the chat, readable by the two of you only, and deleted with the chat.
- Chat games (such as "Two truths and a lie"). In a one-to-one chat either
of you can invite the other to a short game. What you write or choose for
it (three short statements and which one is made up, a short answer to a
question, which of two options you would rather, or one of your public
tags to guess) is stored with the chat (
chat_rooms/*/games), seen only by the two of you, and your hidden part stays hidden from the other person until they have made their own guess or answer. "Guess the tag" only ever offers your public tags, never a secret one. Either of you can stop a game at any time. A game is deleted 30 days after its last move, when the chat is deleted, or when either of you deletes your account. The short lines a game leaves in the chat ("The game was stopped") name no one and are chat messages like any other. Lawful basis: Art 6(1)(b) contract, the same as messages. So you can use them again in a later game, your last 30 statements (and which one was made up) are also kept on your own profile (user_profiles/{you}/private/two_truths), where only you can read them. You can remove one, or clear them all, from the game's writing sheet, and they are deleted with your account. - Note: a message you send is also received by the other participant(s). Their copy stays in their conversation even after you delete your account, until it is 30 days old like every other message (see Sections 6 and 8). The image files you sent are not retained this way: account deletion removes them from Storage, so the delivered message survives without its photo (#1021).
- ⚠️ "Clear chat history" is not deletion. The control in the app is still labelled "Clear chat history" — we are renaming it, because the label promises more than the feature does. What it actually does is record a point in time against your e-mail address on that conversation, and then hide everything before that point from your view only. No message is deleted. The other participants continue to see every message exactly as before, and if you were ever to be shown that conversation again the hidden messages are still in our database. It is best understood as a restriction of processing for you (Art 18), not an erasure (Art 17). If you want data actually deleted, use account deletion (Section 10) or ask us — Section 10 explains what each one really does. Whether you use the control or not, every message is deleted 30 days after it was sent (Section 8).
3.7 Safety: reports, blocks & moderation
- Data: user reports you submit or that concern you (
user_reports: reporter/reported identity, reason, free-text details, and a snapshot of the shared chat context); your block lists (blockedUserIds,blockedEmails: who you blocked, by account and by e-mail address), kept on a private record under your account that only you can read (private/self); a private record under your account, which only you can read and only our servers write, listing who has blocked you (private/blocked_by), so that your app can stop showing you those people and showing them to you; for each chat room, a copy of the e-mail addresses its members have blocked (server/blocks), which only our servers can read, used to keep someone out of an open room where a member blocked them; and the moderation audit trail (actionTaken,actionedBy,actionedAt,statementOfReasons,statementDeliveredAt,slaDeadline). [in progress] Until the app update that moves them, your block lists were stored on your profile, which other signed-in users' apps can read, so another user could see whom you had blocked and the e-mail addresses of the people you blocked. A list set before that update stays there until a one-off clean-up moves it, or until you next block or unblock someone (#2312). What a block does on the other side (#2330). The person you block is not told. A one-to-one chat you shared is changed for good the way deleting your account changes it (Section 10): your name, e-mail address and photos are taken out of it, and it is not restored if you unblock them. A chat request from them to you is refused. In a group room you share, you both stay: their app shows you to them like an account that has left Flybi, with no profile to open, and your app folds their messages away for you. The group-room part is done by the apps: their app keeps the list of people who blocked them described above, which it needs for this, and does not show it to them, but a modified app could read it. Moving that list to our servers is planned (#2310). When a decision is taken about your content or account, the statement of reasons you are given (what was done, why, the rule relied on, and how to contest it) is also kept under your account (moderation_statements), readable only by you, so the app can show it to you; it is deleted with your account. If we email it to you because you cannot sign in, we record when it was sent. The statement for a pause on your account (a cooldown or a suspension) is kept on a private record under your account that only you can read (private/moderation), which is where the app reads it. That record also holds when the pause began, whether it was automatic, and when a cooldown ends, which the app shows you. Which reports led to an automatic pause, and how and when a pause was lifted, are kept on a record under your account that no app can read, only our moderation tools (server/moderation). Both records are deleted with your account. Your profile, which other signed-in users' apps can read, shows only that the account is paused, so that those apps can stop showing it. [in progress] Until these changes the statement, and those details, were stored on the profile, where another signed-in user could read them with a query of their own; a pause decided before the change keeps that copy until a one-off clean-up removes it (#1806, #1809). When a chat room is closed because several people reported it, the room shows the people in it, and anyone who can find an open room, only that it is closed and why, in a fixed text that names nobody. When it was closed, whether that was automatic, which reports led to it, and how and when it was reopened are kept on a record of the room that no app can read, only our moderation tools (server/moderation), and that record is deleted with the room. Whether your account is verified shows on your profile only as the verified badge. Any other verification decision (pending, or a badge taken away), and when and how it was taken, are kept on a record under your account that no app can read, only our moderation tools (server/verification), and it is deleted with your account. [in progress] Until this change those details were stored on the room or on your profile, where another signed-in user could read them; a room closed, or a decision taken, before the change keeps that copy until the same clean-up moves it (#1815). - Purpose: to keep users safe, to action abuse, to meet our content- moderation obligations, and to defend against or bring legal claims.
- Lawful basis: Art 6(1)(f) legitimate interests (the safety of our users and the integrity of the platform — the specific legitimate interest required by Art 13(1)(d)), and Art 6(1)(c) legal obligation where the EU Digital Services Act notice-and-action duties (DSA Art 16–18) apply.
- Reports are handled under our internal notice-and-action procedure: each report is reviewed, an action is taken or declined, and a statement of reasons is recorded against the report. We do not publish a time by which a report is reviewed.
- When someone reports you: language that counts toward an automatic
pause. When a person reports your account in the app, our server reads
your display name, your bio, the names and descriptions of your tags other
than the ones you chose to keep secret, the names of rooms you created, and
the text of your chat messages that someone had already reported (the copy
taken when that report arrived, unless it was only about an image or was
dismissed). It checks that text against word lists in Danish and English and
sorts what it finds into threats, slurs, hostile statements, ambiguous words
and swearing. Threats, slurs and hostile statements count toward the number
of reports that pauses an account automatically (Section 4 says exactly
how); ambiguous words and swearing count for nothing. It runs only because a
person reported you, and it does not read chat messages nobody reported, the
chat excerpt a reporter attaches, or anything a reporter typed. What is
kept: if the language helped pause your account, only which kinds of
language counted (for example "threat") and how many reports they added, on
the record that only our moderation tools can read (
server/moderation), and, on your own private record, a mark that language counted, so the app can tell you. The words themselves are not kept, and no score about you is kept between reports: it is worked out again each time. Our server log records, for each report it checks, the report's reference, how many people reported, and which kinds of language it found, with no text, no name and no user ID, under the limit for technical logs (Section 8). Lawful basis: our legitimate interest in protecting the people who use Flybi from threats and abuse (Art 6(1)(f)). You can object to it (Section 10). - What a person sees when they review a report. When a person reviews a report about you, our moderation tool shows them which words from the same lists, swearing included, appear in your public text (as above), in the reported messages and in your messages in the chat excerpt attached to the report. It is worked out only then, because someone reported you, and nothing from it is saved. It helps that person judge the report; it decides nothing by itself.
- Notices from the web form, including from people without an account. Anyone can send a notice at flybi.app/report. We keep what they write, the reason they chose, their name and email address if they gave them (a notice about child sexual abuse may be anonymous), and when it arrived, with the other reports and under the same limit (Section 8). We use the email address only to confirm receipt and to tell them what we decided. The sender's IP address and email address are only kept as a keyed, anonymised fingerprint for 30 days to prevent misuse: the form's flood limits (one notice a minute and three an hour per connection, one a minute per email address) count against a fingerprint made with a secret key, never against the address itself, and each fingerprint is deleted 30 days after the last notice it counted.
3.7a Automatic check of your profile and tag photos
- Data: your profile photo and the photos on your tags, including the ones
you add while signing up, and the result of checking each one: how likely the
photo is to be sexually explicit or violent, whether it was marked for a
person to review, what that person decided, and when (
image_screenings). If a person removes a photo of yours, a short note saying which of your photos was removed and why, so the app can tell you (photo_notices). - Purpose: to detect offensive and potentially illegal content in these photos, so that a person at Flybi can look at the ones that may break our Terms: sexually explicit material, which our Terms forbid and the app stores do not allow in any app, and photos that may show violence.
- Scope: profile and tag photos only. Photos you send in chat are not checked; in chat, reporting and blocking are the controls (Section 3.7).
- How it works: after you upload a photo, it is checked automatically by Google Cloud Vision SafeSearch, run in our own Google Cloud project through Google's EU processing endpoint, with Google acting as our processor (Section 6.2). The check rates the photo; it does not identify you or anyone in the photo, and it creates no biometric template. The check never blocks or removes a photo for what it shows — see the last bullet below for the one thing that is removed automatically, which is about a link, not about your photo.
- A photo the check marks as likely sexually explicit or likely violent stays up, and a person at Flybi reviews it and decides. Most such photos are fine; only a photo that breaks our Terms is removed.
- If the check cannot run when you upload, it runs again later.
- When a person removes a photo, the app tells you where the photo was: on the "add a photo" screen for your profile photo, or on the tag's card for a tag photo. You see it whatever your notification settings, and by notification too if you allow them.
- Separately, a photo link that does not point at a photo uploaded through Flybi (for example, a link to another website) is removed. This is about where the link points, not about what the photo shows: we can only stand behind photos uploaded through the app. You are told in the same way. The app itself never writes such links.
- Lawful basis: Art 6(1)(f) legitimate interests (keeping our users safe from sexually explicit and violent material, and keeping Flybi available in the app stores, which require this kind of filtering), and Art 6(1)(c) legal obligation where the EU Digital Services Act applies.
- Automated decisions: none about you, and none about what your photo shows. The check only marks photos for a person to review; every decision to remove a photo for what it shows is taken by a person, and the app shows you that person's own reason (Section 4). One thing does happen automatically: a photo link that does not point at a photo uploaded through Flybi is removed, as described above. That is a decision about a link, not about your photo or about you; it affects that one link, and you can upload the photo in the app straight away. If you think a photo was removed wrongly, write to support@flybi.app — the note in the app says so too. A person will look at it.
- Retention: the check result is kept with your account, without the photo, and is erased when you delete your account (Section 8). The note that a photo was removed is deleted when you add a new photo in its place, and with your account.
3.7b Reports about one photo, and a photo hidden while it is looked at
- Data: when you report a single photo, we keep the report itself
(Section 3.7) and, separately, a durable record that you reported that
photo, so the same photo is not counted twice from one person
(
report_subjects, keyed by the photo's owner and which photo it is, with one small document per reporter holding your user ID and when you reported). We also keep a count, per account, of how many of that account's reports a person has dismissed as unfounded (report_reputation). If a photo is hidden, we keep a record of the hide under the photo's owner (photo_hides): which photo, where it is stored, the link it had before, how many people reported it, what the automatic check had said about it, and, once a person decides, the decision, who made it, when, and the reason they gave. - Purpose: to act on reports about one photo without acting on the account behind it, to stop one person hiding a photo they simply dislike, and to be able to put a photo back exactly as it was.
- What actually happens to a reported photo. When enough different people report the same photo, that photo is hidden while a person looks at it. How many is "enough" depends on what the automatic check (Section 3.7a) had already said about the photo, and it is never fewer than two different people. Then:
- It is one photo, and it is temporary. Nothing happens to your account: you keep using Flybi exactly as before, and your other photos stay up.
- A person decides. If they decide the photo is fine, it goes back, and the same people cannot hide it again by reporting it once more. If they decide it breaks our Terms, it is removed and you are told which rule it broke, in their own words, in the app.
- The photo itself is never deleted while it is hidden, and putting it back is a matter of publishing it again.
- The link to the photo changes. Hiding works by making the old link stop working, so any copy of that link — for example one you had saved — stops resolving, and a restored photo has a new link. Inside the app you will not notice.
- We do not say how long the looking takes. We will not promise a speed we cannot keep. What we do promise is that a person decides, and that the photo is hidden rather than deleted until they do.
- You are not told who reported you, and the person you report is not told it was you.
- Lawful basis: Art 6(1)(f) legitimate interests (protecting our users from sexually explicit and violent material, and acting on reports at all as one person), and Art 6(1)(c) legal obligation where the EU Digital Services Act notice-and-action duties apply.
- Automated decisions: the hide is automatic — it is the one moderation measure at Flybi, other than the link rule in Section 3.7a, that takes effect before a person has looked. It is deliberately narrow: it concerns one photo, it is reversible, it changes nothing about your account or your ability to use Flybi, and it exists only so that a photo several people say is sexually explicit is not on display while it waits. It is not a decision with legal or similarly significant effects on you within the meaning of Art 22 (Section 4). The removal of a photo is always a person's decision. If you think a photo was hidden or removed wrongly, write to support@flybi.app.
- Retention: the per-reporter records and the dismissal counts are kept with the reports they come from, under the same limit and the same reasons as the reports themselves (Section 8). The hide record lives under the photo's owner and is erased when that account is deleted.
3.8 Date of birth / 18+ age gate
- Data: your self-declared date of birth (
dateOfBirth). - Purpose: to operate the 18+ age gate and keep minors off an adults' service.
- How it is checked, plainly: the date you type during onboarding is checked in the app, on your device. We do not verify it against any document, and we do not use any age-estimation or ID service. It is a declaration we take at face value, backed by the reporting and moderation process in Section 5 — not a proof of age. [planned] a server-side check as well.
-
While you sign up: the date you pick is kept only on your phone until you tap Continue on the step that asks for it, and is then saved to your account. The copy on your phone is deleted when sign-up finishes.
-
Lawful basis: Art 6(1)(c) legal obligation and/or Art 6(1)(f) legitimate interests (age assurance / child protection).
- Minimisation note (Art 5(1)(c)): we store the full date of birth. [LEGAL REVIEW: consider storing only a verified "over-18" flag plus the verified date rather than the full DOB where the feature allows, to minimise the data held.]
3.9 Push notifications & device tokens
- Data: Firebase Cloud Messaging (FCM) device tokens (
fcmTokens) and your notification preferences (notificationPreferences). - Purpose: to send you push notifications. There are two kinds:
- About something a person did, or about your account — a chat message, a chat request or its answer, an invite to a room or a game, a secret tag reveal, activity in your Stop Bi and On the Fly rooms, and notices about your account and your data (such as the outcome of a report you made). Notifications about something a person did are on unless you turn them off in the app. Notices about your account and your data have no switch in the app: they are sent whatever you choose there, and you can still stop them in your phone's notification settings.
- Optional alerts — a soulmate nearby, a strong fit nearby (at most daily for the same person) and a badge you earned. Nobody did anything for these; Flybi noticed something it thinks you might like to know. They are off unless you turn them on in the app's notification settings, or, for the soulmate one, also on the Soulmate step when you set up your profile. You can turn them off again in the notification settings at any time. Using the app before they became optional did not turn them on.
- Lawful basis: Art 6(1)(b) contract for the first kind — delivering them is part of the service. Art 6(1)(a) consent for the optional alerts: the switch you turn on in the app is that consent, and we treat it as the consent Danish law (markedsføringsloven § 10) asks for before sending this kind of message. The operating-system notification permission is a separate technical control over whether your device displays notifications at all, and it is not consent to the optional alerts.
- Retention: a device token is deleted when you turn off Flybi's notifications in that device's settings (the app removes it the next time it is opened with a connection), when the token is refused by the messaging service as stale, and when you delete your account. The notification choices inside the app apply to your whole account rather than to one device, so they leave the token in place: some service notices, such as the warning that a stored location is about to expire, are sent whatever those choices are.
3.10 Technical, security & abuse-prevention data
- Data: rate-limit markers (
rate_limits), App Check attestation signals, and server-side logs (which may include technical identifiers such as IP address). - Purpose: to operate and secure the service and to prevent abuse.
- Lawful basis: Art 6(1)(f) legitimate interests (security, fraud and abuse prevention, service reliability). This covers server-side records only. Anything that writes to or reads an identifier from your device — crash reporting, performance monitoring, analytics — is dealt with separately in Section 3.11: from the app update that adds Profile → Diagnostics, all three are off unless you switch them on; earlier versions run them from launch.
App Check. Firebase App Check is integrated, but its enforcement is currently switched off on our server functions, including account deletion — the device-attestation providers it depends on are not yet registered with Apple and Google. So while it is listed here and in Section 6.2 as something we use, it is not protecting those paths today. Section 13 says the same.
3.11 Crash diagnostics, performance monitoring and analytics
Which version this describes. Everything below this box applies from the app update that adds Profile → Diagnostics — you can tell you have it because that screen exists. In earlier versions of the app:
- crash reporting, performance monitoring and usage analytics start automatically when you open Flybi, before you are asked anything;
- your Flybi user ID is attached to crash reports, and it is kept after you sign out — so on a shared device, later crashes can carry the previous account's ID;
- a fault in one chat feature can attach your e-mail address to a crash report;
- there is no in-app switch that turns any of them off.
If your app does not have Profile → Diagnostics, e-mail us (Section 1) and we will stop it for your account and delete what was collected, by hand. Account deletion does not reach Google's own copies of this data (Section 10).
From that update, these are off by default. Nothing is collected unless you switch it on, and the app works identically either way.
- The services: Firebase Crashlytics (crash reporting), Firebase Performance Monitoring (app and network performance), and Google Analytics for Firebase (usage analytics).
- Two separate switches. "Crash & performance diagnostics" covers Crashlytics and Performance Monitoring; "Usage analytics" covers Google Analytics. Each can be switched on or off without the other. Both start off, and nothing is pre-ticked.
- When you are asked. Once: a new account is asked right after it is created, on the first onboarding screen; everyone else is asked the first time the main app opens after updating. You can switch either on, allow both, or save with both off; closing the question without answering counts as both off. Your answer is stored on your device, so a new install asks again; apart from that, we only ask again if what this section describes changes.
- Before you answer, nothing collects. The app is built with all three services switched off at start-up (in the Android manifest and the iOS settings file), so they stay off until the app has read your answer. One exception, on Android and iOS alike: the older version switched crash reporting on, and Crashlytics remembers that on your device. So on the very first launch after updating from an older version, Crashlytics runs from the moment the app starts until the app has read your answer and switched it off — a fraction of a second on a normal start. In that window it can send crash reports the older version had already stored on your device, a report of a crash that happens during that start-up, and its automatic "session started" event (with the installation identifiers listed below). Performance monitoring and usage analytics are not affected. After that launch, nothing is sent unless you switch it on.
- Data — Crashlytics: a crash-dedup UUID, the Crashlytics Installation UUID, the Firebase Installation ID, a Firebase session ID, crash timestamp, bundle ID and app version, OS name and version, jailbreak/root status, device model, CPU architecture, RAM and disk, instruction pointers, method and function names, exception classes and messages, fatal signal names and codes, binary image names/UUIDs/sizes/base addresses, app foreground or background state, screen rotation, proximity-sensor trigger status, and version-control information.
- Data — Performance Monitoring: the Firebase Installation ID, device model, OS, orientation, RAM and disk, CPU usage, mobile carrier (MCC/MNC), radio and network type, country derived from your IP address, locale, app state, network URLs (without query parameters), response codes, payload sizes and response times, and IP addresses. Unlike crash reporting this collects from every session, not only when something fails.
-
What of your identity reaches these reports — only if you switched them on (for earlier versions, see the box above). Your Flybi user ID is set as the identifier on crash reports (with "Crash & performance diagnostics" on) and on usage analytics (with "Usage analytics" on); both switch texts say so. It is cleared when you sign out and when you switch the corresponding setting off. Crash reports can also carry a short list of technical details about what failed — error codes, counts, step names, your user ID, a chat-room ID and a coarse ~39 km area cell — and every log line the app records at "info" level or above is sent along as a breadcrumb. Only technical details on a fixed list of reviewed names are attached; any other detail is dropped before it leaves your device. E-mail addresses, names, bios, message and search text, other people's user IDs and precise coordinates are not on that list, and anything shaped like an e-mail address inside an attached detail is blanked out. The breadcrumb lines and the error message itself are not filtered through that list.
-
Lawful basis: Art 6(1)(a) consent, and — logically first — your consent under Art 5(3) ePrivacy / cookiebekendtgørelsen § 3 to write and read a persistent installation identifier on your device. There is no legitimate-interest route for that device access, and none of the ePrivacy exemptions covers crash reporting, performance monitoring or analytics: the test is what is strictly necessary from your point of view, and Flybi works the same whether or not a crash report is ever sent. We therefore do not rely on Art 6(1)(f) for any of this. Your answer is kept on your device; we do not keep a separate server-side record of it. App versions without Profile → Diagnostics don't ask for this consent yet; the update adds it. Until you have it, e-mail us (Section 1) and we will stop the collection and delete what was collected.
-
Withdrawal. From the app update that adds Profile → Diagnostics, that screen has the same two switches — one tap each. Switching one off takes effect straight away in the app: from that moment the app itself sends nothing more to that service. Switching crash diagnostics off also deletes any crash reports still waiting on your device and removes your user ID from Crashlytics; switching usage analytics off removes your user ID from Analytics. Google documents that the SDK-level switch "will apply the next time the user launches the app", so some of Google's own automatic measurements can run until you next open Flybi. We do not currently delete the Firebase installation identifier itself when you switch off. In earlier versions there is no switch: e-mail us (Section 1) and we will stop it for you. If you want diagnostics data already collected about you deleted, e-mail us too.
-
Retention. Google retains Crashlytics data for 90 days; Performance Monitoring data for 30 days where it is associated with an IP address and 60 days where it is associated with an installation. These periods are enforced by Google, not by us.
-
Recipient and role: Google LLC acts as our processor for Crashlytics, Performance Monitoring and the Analytics measurement service, under the Firebase Data Processing and Security Terms. We keep Firebase Service Data sharing and the Analytics data-sharing settings off, so Google's controller-to-controller measurement terms — under which Google would be an independent controller of shared data — do not engage.
-
Transfers: this data goes to Google LLC in the United States. The transfer relies on the EU–US Data Privacy Framework, under which Google LLC is certified, with the EU Standard Contractual Clauses in Google's terms as the fallback safeguard. See Section 7.
- If you say no, we are not blind. Apple collects crash logs from TestFlight testers under Apple's own terms and shares them with us, and Google Play's Android vitals reports crashes from users who opted in to sharing diagnostics at the OS level. Neither of those requires anything from us on your device, and neither depends on your answer here.
3.12 Best-fit / ML signals
- Data: server-computed best-fit embedding vector (
embeddingVector), connection-outcome rows used to improve who we surface (connection_outcomes), encounter records and streak stats (flybi_encounters,flybi_user_stats). - Purpose: to compute and improve who we surface to you.
- Lawful basis: Art 6(1)(b) contract (surfacing best-fit people) and Art 6(1)(f) legitimate interests (improving how well we surface people).
3.13 Advertising (free plan)
Flybi pays for itself partly with a small number of ads shown to people on the free plan. Advertising is controlled by a switch on our side and may be off; while it is off, nothing in this section happens. Premium subscribers never see ads (Section 3.14).
- Where ads appear: as a card in the discovery feed and as a row in the chat list, each marked "Ad" ("Annonce" in Danish) and laid out differently from profiles and venues. Never inside a conversation, on a profile, or full-screen.
- Who serves them: Google AdMob, a third-party ad provider. AdMob, not Flybi, chooses which ad you see, delivers it, counts that it was shown or tapped, and detects fraud. For that, Google acts as an independent controller under its own terms, not as our processor (Section 6.3). The consent question about personalised ads (below) is Google's question about Google's use of your data: the personalisation it asks about is done by Google and its advertising partners, not by Flybi.
- The categories we block: we cannot pick individual AdMob ads, but we can switch off whole categories in AdMob, and we have: gambling and betting, social casino games, partner-finding services, get-rich-quick, politics, religion, astrology and esoteric topics, cosmetic procedures and plastic surgery, weight loss, and downloadable utilities. Alcohol ads are allowed. These settings were last checked in the AdMob console on 21 September 2026.
- We never sell your personal data, to advertisers or to anyone else. We are paid for the space an ad takes up, not for data about you. What the ad software processes on your device (below) is collected by Google itself, as controller, not handed over by us.
- What the ad software processes on your device: the device's advertising identifier (on Android the advertising ID; on iOS the IDFA only if you allow tracking), app and device information such as model, operating-system version and language, your IP address, from which Google derives an approximate location (roughly the city), and which ads you saw or tapped. It also stores your consent choice on the device.
- What we do not give it: we do not pass your profile, tags, precise location, chat, age or any identifier of your Flybi account to the ad software. Flybi's own location readings (Sections 3.4 and 3.5) are never used for advertising; the approximate location above is Google's own derivation from the network connection.
- Personalised or not, your choice. In the EEA and the UK, Google's consent message asks you before the first ad is requested. Until that message says ads may be requested, the app requests no ad and does not start Google's ad software; if you close the message without answering, or it cannot be shown, you see no ads until it asks again. Personalised ads, based on a profile Google or its advertising partners hold about you, run only with your consent (Art 6(1)(a)) and, on iOS, only if you also allow tracking in Apple's App Tracking Transparency prompt. If you decline, ads are not personalised; Google still uses the data above to deliver and count the ad, limit how often you see it and detect fraud, as controller on its own legal basis. Declining does not remove ads and changes nothing else in Flybi.
- What Flybi itself records: that an ad slot was shown or tapped, with the name of the placement only, in our usage analytics (Section 3.11). No ad content, advertiser or identifier.
- Change your mind at any time: Profile → Privacy & Ads → Manage ad consent reopens the choices. On iOS you can also change tracking in Settings → Privacy & Security → Tracking.
- More about Google's use: https://policies.google.com/technologies/partner-sites
3.14 Premium subscriptions and payments
- How you pay: Premium is an optional, auto-renewing subscription bought through the App Store or Google Play. Apple or Google takes the payment and handles renewals, cancellations and refunds, as an independent controller for your payment and billing data under its own terms (Section 6.3). Flybi never sees your card or bank details.
- What we keep: a purchase record linked to your account, holding the store, the plan (1, 3 or 12 months), the store's own reference for the subscription (a Google Play purchase token or Apple's original transaction ID), its expiry date, whether it is set to renew (so the app can show that a cancelled subscription still runs until its end date), whether it was refunded or revoked, and when the record was created and updated. Other users cannot see whether your subscription is set to renew. Your profile shows that you have Premium, until when, and that it came from a purchase.
- Linking the purchase to your account: when you buy, the app gives the store a token derived one-way from your Flybi account ID, so the purchase cannot be claimed by a different account. It does not reveal your account ID.
- Checking the purchase: the app sends the store's proof of purchase to our server once. For Google Play, our server confirms it with Google's Play Developer API; for the App Store, it checks Apple's cryptographic signature on the transaction. The proof itself is not stored. Afterwards Apple and Google notify our server when a subscription renews, lapses or is refunded, and for Google Play we also re-check subscriptions periodically.
- Purpose and legal basis: providing the subscription you bought, Art 6(1)(b) contract; confirming that a purchase is genuine and belongs to your account, Art 6(1)(f) legitimate interest in preventing fraud.
- Retention: kept while your account exists and deleted with it (Section 8). Apple and Google keep their own billing records under their terms and the law that applies to them.
3.15 Invitations (referrals)
- Data, if you invite someone: a personal invite code linked to your account
(
invite_codes: the code, your user ID, how many times it has been used and may be used, whether it is active, and when it was made). The code travels inside the link you share; the app does not show it to you. - Data, if you join with an invitation: a record that you used it
(
invite_redemptions: your user ID, the code, the user ID of the person who invited you, whether it was a person's or an organisation's code, and when). - Data, for both of you: the free Premium an invitation gives (3 months
unless we announce otherwise): the new Premium end date and the fact that it
came from an invitation are written to your profile record, which other
signed-in users can read, and a line is added to your account's Premium
history (
premium_grants: when, how many months, the code, and the Premium end date before and after). - On Android, the install referrer. The first time you open the app after installing it, the app reads the install referrer once: a short text that Google Play carries from the link you tapped to the installed app. If it holds an invite code, the app keeps only that code, on your device, until you have created your account and the code has been tried. On iPhone nothing is read; you can type a code in during sign-up.
- Purpose: to give both people the free Premium the invitation offers, and to stop an invitation being used twice, by its own sender, or back and forth between two accounts.
- Lawful basis: Art 6(1)(b) contract for delivering the Premium the invitation offers, and Art 6(1)(f) legitimate interests (preventing abuse of a reward worth money) for the checks.
- Retention: the code on your device is deleted as soon as it has been tried, whether or not it worked, or when you remove the app. Your own invite code, the record that you used an invitation, and your Premium history are kept while your account exists and deleted with it (Section 8). If you invited someone and then delete your account, the record on their side stops naming you: your user ID, your invite code and your Premium end date are taken off it and replaced with a placeholder that cannot be linked back to you. The record itself stays, because it is theirs and it is what stops an invitation being used twice, and the Premium they got from your invitation is not taken back.
3.16 E-mails to support
- Data: whatever you put in an e-mail to support@flybi.app, and your e-mail address and name as your mail app sends them. If you use Profile → Send feedback / report a bug (or "Contact support"), the app opens your own mail app with a draft that already says which app version and build you use, your phone's system and its version (for example "Android 14"), your phone model and the app's language. It adds nothing about you: no user ID, no location. You can read and change the draft, and nothing is sent until you send it yourself.
- Purpose: to answer you and to find and fix the problem you tell us about. We use it for nothing else: not for advertising, and not to build a profile of you.
- Lawful basis: Art 6(1)(f) legitimate interests (answering the people who write to us and keeping the app working), and Art 6(1)(b) contract where you ask for help with your account or the service. A request to use your rights (Section 10) is handled under Art 6(1)(c) legal obligation.
- Retention: as long as we need it to answer you and fix the problem, and then no longer (Section 8). Deleting your account does not delete an e-mail you sent us: it is not stored in the app. Ask us at the same address and we will delete it.
4. Automated decisions — GDPR Art 13(2)(f) / Art 22
Flybi uses automated processing to rank and surface profiles (best-fit and
soulmate/strong-fit scans), and word lists that, on your device, show threats
and slurs in other people's text as ****** while the Hide offensive language
setting is on (Section 5). That setting acts only on what you see and takes
no decision about anyone. These help us run the service and keep it safe.
We do not make decisions producing legal effects concerning you or similarly significantly affecting you solely by automated means within the meaning of Art 22(1), with one measure we set out in full below so that you can judge it yourself: the automatic pause of an account. Every decision that you broke a rule, and every warning, removal of content for what it says or shows, cooldown, ban or termination, is taken by a human moderator, who issues a statement of reasons (DSA Art 17).
The automatic pause of an account. Your account can be paused automatically, before a person has looked, when people report it (Terms Section 6.1). Only reports about your account count, not reports about one photo, one tag or one message:
- when enough different people report your account within a short time. How many it takes is set by us, and it is never fewer than two; or
- when fewer people report it and the language in what you have written publicly, or in your messages that were already reported (Section 3.7), counts toward the reports. The logic: an explicit threat or call to violence counts as enough, together with one person's report, to reach the number that pauses an account. An unambiguous slur counts as two reports, and a hostile statement about a group as one, each once however often it appears. Slurs and hostile statements together never pause an account that fewer than two different people have reported. Ambiguous words and swearing count for nothing, and without a report from a person nothing counts at all.
Reports from people you have blocked, and from someone whose reports keep being dismissed as unfounded, do not count towards either.
What it means for you: you can still sign in, read why, contest it, read our terms and this policy, sign out and delete your account, but you cannot otherwise use Flybi, and the app stops showing your profile to others, until a person has looked. Nothing is deleted. Only a person lifts the pause, or replaces it with a decision of their own, with a statement of reasons. The statement you see says that the pause was automatic, that a person will look at it, and, where language counted, that it did.
We treat this pause as falling outside Art 22(1), and we say why rather than assert it: it is not a decision that you did anything wrong but a holding measure until a person decides; it starts only with a report from a person; it is temporary, deletes nothing and leaves you able to see why and contest it; and a person reviews every automatic pause. We also recognise that it restricts you, and that how long it lasts depends on when a person gets to it. So, in case it is a decision under Art 22(1), we rely on Art 22(2)(a) (it is part of how the service you signed up to keeps people safe, and our terms describe it), and the Art 22(3) safeguards are in place: a person reviews every automatic pause, and you can put your point of view and contest it at support@flybi.app at any time, including before that review.
The automatic photo check (Section 3.7a) takes no decision about you and none about what your photo shows: it only marks photos for a person to review, and a person decides whether a photo is removed. The one removal made without a person is of a photo link that does not point at a photo uploaded through Flybi, a technical rule about where a link points rather than a judgement of the photo or of you. It concerns one link, you can add a photo through the app straight away, and nothing else about your account changes. You can still ask a person to look at it (Section 3.7a).
One further measure takes effect before a person has looked: when enough different people report the same photo, that photo is hidden while a person decides (Section 3.7b). We treat this as falling outside Art 22(1) and we say why, rather than asserting it: it concerns one photo, it is temporary and reversible, it is not a decision about you — your account, your other photos and everything you can do on Flybi are untouched — and the decision that actually removes a photo is taken by a person, who gives their reason. The photo is not deleted while it is hidden. Even so, we tell you it happened and why, and support@flybi.app reaches a person who can put it back.
5. How we keep the service safe
We operate: an in-app report flow and block capability; a human
moderation process with statements of reasons and warn / hide / cooldown / ban
actions; the Hide offensive language setting, which is on unless you
switch it off and, on your device, shows explicit threats and unambiguous
slurs in other people's display names, bios, tag titles, tag descriptions and
room names as ****** (swearing always shows, your own text always shows to
you, chat messages are not filtered, and the setting itself stays on your
device); the automatic pause on reports, with the language check described
in Sections 3.7 and 4; an 18+ age gate; and Terms/EULA acceptance at
registration. Nothing anyone writes is refused because of its words. These
underpin the safety processing described in Sections 3.6–3.8.
Your profile and tag photos are also checked automatically after upload. A photo the check marks is reviewed by a person, who decides; nothing is removed automatically for what it shows (Section 3.7a). Photos sent in chat are not checked; there, reports and blocks are the controls.
You can also report a single photo, from the photo itself. Reports about one photo act on that photo: when enough different people report the same one, it is hidden while a person decides, and nothing about the reported account changes (Section 3.7b).
6. Who receives your data — GDPR Art 13(1)(e)
6.1 Other users
By design, your profile (name, photo, bio, public tags, approximate area, badges, a rough summary of your personality result — low, middle or high for each trait — and, if you make it visible, your communication style) is shown to other signed-in users so they can discover and connect with you. Your Discover card also shows a coarse activity status, worked out from when you last used the app: "Active now" or "Recently", "Today" or "This week", or "Inactive". It never shows an exact time, and it is not shown on a card that is blurred for the person looking (for example because you are outside their comfort radius). Chat content is shared with the people in that conversation. Secret tags are shared only via a mutual reveal.
Your comfort zone. If you set a comfort zone, people farther away than it do not see you in their Discover feed. That covers being found, not writing: if you write to someone yourself, by a chat request or, with Premium, a room invite, that person sees you in the request or invite, and in the chat or room if they accept, even when they are outside your comfort zone. Writing to them is your choice to be seen by that one person. Nobody else outside your comfort zone sees you because of it (#2218).
More than that is currently readable, and you should know it. Your profile record as stored today also carries your e-mail address and your precise last-known coordinates, and it is readable by any signed-in Flybi user, not only by the people we choose to show you to. Nothing in the app displays those fields — but "not displayed" is not the same as "not shared", and we are not going to describe it as if it were. Removing them from the readable copy is [planned]; see Section 3.4. The same is true of the exact personality scores on a profile last saved with an app version from before #1737, until the one-off move in Section 3.2 has run.
Open rooms. If you create or join an open room, that room is listed to other signed-in users so they can find and join it. Open rooms are of two kinds: a "Stop Bi", and an "On the Fly" room whose "Who can join?" setting lets in people who share your tags ("Any shared tag" or "Min. shared tags"). That is the default for an On the Fly room, so a room you open with "Go On the Fly" is open unless you have chosen "Invite only". An open On the Fly room is listed at the area where you opened it; it does not follow you. The listing shows its title and image, its join tags, and its approximate area — a geohash cell of roughly 1.2 km × 0.6 km, the same coarse grid used for profile discovery. Your precise coordinates are not in the room record: it holds only the cell, so the point you were standing on when you opened the room is not recoverable from it (#1033). Rooms you keep private are visible only to their participants and to anyone you invite; an On the Fly room set to "Invite only" is one of those.
⚠️ What an open-room listing actually carries. Everything in the room's record travels to the device of every signed-in user who lists open rooms — not just the parts the app puts on screen. That includes the e-mail addresses of the room's participants, of anyone invited to it, and of whoever created it (room membership is keyed by e-mail throughout Flybi), and the text of the last message sent in the room. The app does not display the last message or the addresses in the discovery card, but they are delivered all the same, and a determined person can read them. That copy of the last message's text is cleared from the room when the message itself is deleted at 30 days (Section 8). If you would not want your e-mail address known to strangers, do not join open rooms until we have fixed this. Re-keying membership from e-mail to an opaque ID is tracked as #696 / #600.
What a new joiner can see. When someone joins an open room, they are shown messages sent before they arrived — currently up to the most recent 200 messages of that conversation. There is no server-side limit behind that number: it is a cap the app applies, and one we can change remotely, so it is a product setting rather than a guarantee. People who were not present when you wrote something can therefore read it. The app shows none that is more than 30 days old, and every message is deleted 30 days after it was sent, unless a safety report is holding it (Section 8). A real cap — post-join only, or a short window — is [planned].
6.2 Processors (sub-processors) acting on our instructions
We use Google Firebase as our backend processor (the contracting Google entity — e.g. Google Ireland Limited and/or Google LLC, as applicable under Google's Cloud/Firebase terms). The specific services are:
- Cloud Firestore — profile, tags, chat, reports and related documents;
- Firebase Authentication — sign-in (email/Google/Apple);
- Firebase Storage — profile and tag images;
- Cloud Functions (region europe-west1, Belgium) — server-side logic including the account-erasure cascade and moderation triggers;
- Cloud Vision API (SafeSearch) — the automatic check of your profile and tag photos (Section 3.7a), through Google's EU processing endpoint. It reads the photo where it is already stored and returns only a rating;
- Firebase Cloud Messaging (FCM) — push notifications;
- Firebase Remote Config — configuration;
- Firebase App Check — anti-abuse attestation. Integrated, but its enforcement is currently switched off on our server functions, including account deletion and chat-history clearing (Section 3.10). Treat it as present but not yet doing its job.
- Google BigQuery — some Firestore collections, and our crash and usage analytics, are exported to a Google BigQuery dataset for product and cost analysis. Copies there that belong to a deleted account are deleted within 30 days (Section 10).
And, for crash, performance and usage data (Section 3.11) — which, from the app update that adds Profile → Diagnostics, run only if you have switched them on, and in earlier versions run for everyone:
- Firebase Crashlytics — crash reports;
- Firebase Performance Monitoring — app and network performance data;
- Google Analytics for Firebase — usage analytics.
Google processes this data on our behalf as a processor under the Google Cloud / Firebase Data Processing and Security Terms (an Art 28 Data Processing Agreement is in place via acceptance of Google's DPA). For the three diagnostic and analytics services above, the contracting entity is Google LLC and the data reaches the United States — see Section 7. We keep Google's data-sharing settings off so that Google does not become an independent controller of that data. No other processors (for example a third-party e-mail provider) are shipped in the current build; this list will be updated if any are added. (Current position; to be confirmed in a professional review as the project grows.)
6.3 Independent controllers: Google for ads, Apple and Google for payments
These companies decide for themselves how they use the data they receive, under their own terms and privacy policies, so they are not our processors:
- Google (AdMob), for ads on the free plan when advertising is switched on (Section 3.13), under the Google Ads Controller-Controller Data Protection Terms and https://policies.google.com/privacy.
- Apple (App Store) and Google (Google Play), for Premium payments (Section 3.14), under https://www.apple.com/legal/privacy/ and https://policies.google.com/privacy.
6.4 Authorities and legal claims
We may disclose data to public authorities (e.g. Danish Police) where required by law or to address a serious risk to life or safety, and to our advisers to establish, exercise or defend legal claims.
7. International transfers — GDPR Art 13(1)(f) / Arts 44–49
Our processing is configured for the EU/EEA: Cloud Functions run in
europe-west1 (Belgium) and Firestore/Storage are provisioned in an EU
region (e.g. eur3 / europe-west1). (Current configuration; to be confirmed
in a professional review as the project grows.)
Your photos. Until 23 October 2026 your photos were stored with Google in the United States. On that day we moved them to europe-west1 (Belgium), where every photo from the current app version is stored too. Until about 30 October 2026 we keep a copy of them in the US, only so that we can undo the move if something goes wrong; then we delete it. App versions up to 1.7.0 still send chat images to the US until those versions stop working. The safeguards below cover this too.
Three things nonetheless leave the EEA:
- Crash diagnostics, performance monitoring and analytics (Section 3.11) are processed by Google LLC in the United States — from the app update that adds Profile → Diagnostics, for people who have switched them on; earlier app versions run them for everyone (see the box at the top of Section 3.11).
- Some Google support, security or operational functions for the EU-hosted services may involve access from outside the EEA.
- Advertising and payments (Sections 3.13 and 3.14): Google LLC and Apple Inc. process that data in the United States as independent controllers, under their own transfer safeguards. Both participate in the EU–US Data Privacy Framework.
For the first two, the mechanism is the same. Google LLC is certified under the EU–US Data Privacy Framework, which the European Commission has found to provide an adequate level of protection (Art 45), and the EU Standard Contractual Clauses are incorporated into Google's Data Processing Terms as an Art 46 safeguard that stands behind it. We keep the SCCs in the contract chain deliberately, so that the transfer remains covered if the Framework is ever suspended or annulled — a legal challenge to it is pending before the Court of Justice. You can request a copy of the relevant safeguard using the contact details in Section 1.
8. How long we keep your data (retention) — GDPR Art 13(2)(a)
We keep personal data only as long as needed for the purposes above. Every period below is anchored to an event we actually record — the date you deleted your account, the time a chat message was sent, the date a report was closed — so that you can work out the period that applies to your data rather than reading a general promise.
⚠️ How these periods are enforced today, 29 September 2026. Deletion you ask for — account deletion, erasing your location — runs straight away, on our server, and you can rely on it. The time-based periods in the table below are enforced in two different ways, and each row says which. Four run on their own, as scheduled jobs: the two-stage location expiry (nightly, since 18 August 2026), the removal of Hot/Cold live positions (every 10 minutes), the deletion of a deleted account's copies in our analytics warehouse (Section 10), and the deletion of chat messages 30 days after they were sent (nightly) — or up to 12 months after, in a one-to-one chat you both chose to keep. The others do not: rows marked [not yet automatic] describe the limits we hold ourselves to and will delete to on request, not a job that runs on its own. We are telling you this instead of quietly loosening the wording, and building those jobs is the fix.
| Data | Retention |
|---|---|
| Account, profile, tags, photos, personality, stats | Kept while your account exists. Erased when you delete your account (Section 10) — see the erasure timing note below. The answers to a vibe check you have not finished are on your phone only, never on our servers, and are deleted from it when the finished test is saved, when you sign out or delete your account, or when you remove the app (Section 3.2). |
| Location (Section 3.4) | One point only. Each reading overwrites the previous one, so no trail is built. The stored point is deleted when you turn location off, when you use "Erase my stored location", and when you delete your account. From the app update that does this, it is also deleted the next time you open Flybi while your phone withholds location from it (Section 3.4). In addition, an un-refreshed point expires automatically in two stages: the precise position after 14 days of account inactivity, and the remaining coarse area cell after 180 days, with notifications 7 days and 24 hours before the second. Running since 18 August 2026; two-stage since 10 September 2026. |
| Live Hot/Cold game session data | Your live position is deleted when the game ends: by your app straight away, and by a server job every 10 minutes for any position on a game that has ended or that nobody has updated for 10 minutes. It is also deleted when you use "Erase my stored location", and when you delete your account, which deletes the whole game record from every room you played in (Section 3.5). |
| Chat messages (Section 3.6) | 30 days. Every message — its text, any image in it, and the lines the app posts itself, such as "X left the chat" — is deleted 30 days after it was sent, for everyone in the conversation. A server job runs every night and deletes every message that is more than 30 days old. Normally a message is gone within a day or two of turning 30 days old, but it can take longer: after an outage, while a large backlog is being cleared, or when deleting its image failed and is retried on a later run. The app stops showing it at 30 days whatever the job has done. The time a message was sent is set by our server when it is saved, not by anyone's phone, so it cannot be moved to make a message last longer. For a message with an image, the image stored with that message is deleted first, then the message. That does not cover an image another message still uses while it is held for a safety case (it goes when that message does), or a photo that was uploaded but never sent in a message. Kept longer while a safety case is open: a message is not deleted while a report about it, or a report that includes it in the part of the chat attached to the report, is still open (not yet decided by a moderator); while a report about the whole chat is open, or the chat is closed pending a moderator's review; or while its image is temporarily hidden pending a moderator's decision, is being taken down by a moderator, or is being kept as evidence (Section 3.7); or while a moderator has put it, or its chat, on hold as evidence, for example because the police asked for it. Once that ends, a following nightly run deletes it. A report keeps its own copy of the messages it concerns, under the limit for reports in the next row. The chat itself — who is in it, its name, its status and when it was last active — is the connection between you, not its content, and is not deleted by this; when its last message is deleted, the preview of that message on the chat is cleared too, so no deleted text is left in your chat list. On account deletion your profile is erased, but messages you sent stay in the conversations they were delivered to until they are 30 days old, like every other message, on our legitimate interest in the other participants' own record of their conversation (Art 6(1)(f)); you can object to that under Art 21 and we will weigh it. The images you sent are an exception: they are deleted from Storage by the erasure cascade, so a retained message shows the text but no longer the photo (#1021). A deleted message can remain in a database backup, and a deleted image in our cloud provider's recovery store, for up to 7 days (the Backups and Deleted photos and images rows below). Keep this chat: up to 12 months, only if you both agree. In a one-to-one chat, a Premium member can ask to keep the chat, and the other person can agree; agreeing is free. Group chats cannot be kept. While a chat is kept, each of its messages is kept for up to 12 months from when it was sent instead of 30 days, and the app shows them for that long; the chat says that it is kept. Nothing is kept longer than 12 months, and a safety case can still hold a message as described above. This rests on the consent of both of you (Art 6(1)(a)), and either of you can withdraw at any time from the chat's menu. Keeping ends when one of you withdraws, when the Premium of the person who asked ends, when the chat itself ends (for example, the moment one of you leaves it), or when one of you deletes your account. You are then both told (only the one still here, if an account was deleted), in the chat and with a notification, and after a grace of 7 days the chat goes back to 30 days: a following nightly run deletes every message in it that is more than 30 days old. Unless one of you stopped it, the notice does not say why keeping ended. If one of you deletes your account, that person's own messages in the chat that are more than 30 days old are deleted at once, and the rest are deleted when they turn 30 days old. A request to keep a chat that nobody answers lapses after 14 days. If, on a given night, our server cannot check whether one chat is still kept, it deletes nothing from that chat that is younger than 12 months that night and checks again the next night. If it cannot check which chats are kept at all, it goes on keeping only the chats that were kept at its last successful check, for at most 7 nights in a row; every other chat keeps to its 30 days, and after those 7 nights the kept chats go back to 30 days too. The record of who asked, who agreed and when is kept with the chat and deleted with it. Whose Premium the keep relies on, and why it ended, are on a record that only our server can read. |
| User reports / safety & moderation records | Our limit is 24 months from the date the report is closed (actionedAt), and these are kept beyond your account deletion, because they are needed to keep other users safe and to establish, exercise or defend legal claims (Art 17(3)(e), and our legitimate interest under Art 6(1)(f) in the safety of the people who reported). [not yet automatic] — deletion at 24 months is done on request or by hand until the scheduled job ships. Reports that led to a ban, or that concern serious harm, may be kept longer where a specific matter is live — we will tell you the period if you ask. |
| Photo check results (Section 3.7a) | The result of each check (the ratings, whether the photo was marked for review and what the reviewer decided, never the photo) is kept while your account exists and erased when you delete your account. A photo waiting for another check is listed in a queue until it has been checked, and that entry is erased with the account too. The note that a photo was removed is kept until a new photo replaces it, and is erased with the account. |
| Report-counting records and reporter reputation (Section 3.7b) | The record that you reported a particular photo, and the count of how many of your reports were dismissed, belong to the reports they were derived from and are kept under the same limit — 24 months from the date the report is closed — and for the same reasons. Like the reports, deletion at 24 months is [not yet automatic], and these records can outlive the account they concern for that period, on the same Art 17(3)(e) and Art 6(1)(f) grounds as the reports themselves. |
| Record of a hidden photo (Section 3.7b) | Kept under your own account for as long as the account exists, so that a photo that was hidden can be put back and so that a decision about it can be shown to you; erased when you delete your account. The photo itself is never deleted merely for being hidden. |
| Date of birth / age-gate record | Kept while your account exists (age-assurance evidence); erased with the account. |
| Encounter & ML/connection-outcome rows about other users | On your deletion these are stripped of your name and photo and your identifier is replaced with a placeholder, rather than the rows being deleted, so other users' history and counts survive. On an encounter, the placeholder is a random value made separately for each person who keeps the row, and the row's own ID, and the record that counts you among the people they met, are re-keyed to it: none of them carries your account's ID any more. Encounter rows anonymised before 26 September 2026 still carry the deleted account's internal ID inside the placeholder; converting them to the new form is a one-off job that is [not yet run]. See Section 10. |
| Blocks placed on you by other users | Kept as long as the blocking user's account exists, so that their block continues to work — and removed when you delete your account, since the erasure cascade scrubs you from other people's block lists, and from the private record of who blocked each person you had blocked (#2312). The record of who blocked you is under your account and goes with it. |
| Technical logs, rate-limit and security data | Our limit is 30 days from the date of the log entry, and up to 6 months for logs retained for a specific abuse or security investigation. [not yet automatic]. |
| Crash, performance and analytics data (Section 3.11) | Retained by Google: Crashlytics 90 days; Performance Monitoring 30 days where associated with an IP address and 60 days where associated with an installation. These are enforced by Google, not by us. |
| Premium purchase records (Section 3.14) | Kept while your account exists; erased when you delete your account. Apple and Google keep their own billing records under their terms. |
| Invitations (Section 3.15) | Your invite code, the record that you used an invitation and your Premium history are kept while your account exists and erased when you delete your account. An invite code read from the Android install referrer stays on your device only until it has been tried. When you delete your account, the record of someone you invited stops naming you: your user ID, your code and your Premium end date on it are replaced with a placeholder, and their Premium is not affected. |
| E-mails to support (Section 3.16) | Kept as long as we need them to answer you and fix the problem you wrote about, and no longer. They are not stored in the app, so they are not part of deleting your account: ask us at support@flybi.app to have them erased. [not yet automatic] — this is done by hand. |
| Advertising data (Section 3.13) | Held by Google under its own retention policy (https://policies.google.com/technologies/retention). Your consent choice stays on your device until you change it or remove the app. Flybi keeps no ad data beyond the placement counts in the analytics row above. |
| On your phone | The files and settings Flybi keeps on your phone (for example your consent choices, which one-time screens you have seen, the answers to a vibe check you have not finished, and a copy of data the app has loaded) stay there until they are no longer needed, you sign out or delete your account where this policy says so, or you remove the app. In app versions after 1.7.0, Flybi keeps them out of your phone's backups, and they do not move to a new phone. On Android, the backups your phone makes no longer contain them: Flybi switches off the phone's backup (Google Drive) and phone-to-phone transfer for the app, so none of it is copied. On iPhone, the app marks its files to be left out of iCloud and computer backups, but iOS may still back up the small settings file it keeps for every app, which holds for example your consent choices and the answers to a vibe check you have not finished; if a backup made with a version after 1.7.0, or a new iPhone set up from one, brings Flybi's settings back, the app deletes them before using them. A backup your phone made with version 1.7.0 or earlier can still hold a copy until your phone replaces it with a newer backup. On Android it is not put back into the updated app. On iPhone, restoring that backup, or setting up a new iPhone from it, can put the copy back, and the app then keeps it. On iPhone your sign-in is not kept in these files but in the iPhone's keychain, which iOS manages: it can stay on the iPhone after you remove the app, so reinstalling on the same iPhone may find you still signed in. On a new phone, or after reinstalling the app, you may have to sign in again and you see the one-time screens again (#2104). |
| Backups | Since 26 September 2026 the database is backed up once a day, and each backup is kept for 7 days. So something you delete, or your whole account, can remain in a backup for up to 7 days after you delete it; after that it is gone. Backups are readable only by us and are used only to restore the service after data loss. If we ever restore from one, we bring back only what was lost, and nothing from an account deleted after the backup was taken. Separately, the database keeps the previous version of a changed or deleted record for one hour (its standard version retention). |
| Deleted photos and images | When a photo or chat image is deleted — by you, by a moderator's decision, or because you deleted your account — our cloud provider (Google Cloud Storage) keeps the deleted file in a recovery store for up to 7 days, so that a file deleted by mistake can be recovered. Only our administrators can reach it, and it is used for nothing else. We never bring back files from an account that was deleted. After 7 days the file is gone. |
Timing of erasure. When you ask us to erase data, or delete your account, we act on it promptly — the deletion runs when you confirm it, not on a clean-up schedule, and well inside the one month Art 12(3) gives us to respond. That is deliberately a different clock from the periods in the table above, which is why the box above tells you which of those periods are not yet enforced by a job.
Where a period above depends on something we cannot predict — an open safety investigation, a legal claim — we keep the data for as long as that specific matter requires and no longer, and we will tell you the expected period if you ask (Art 13(2)(a)).
9. Access to your device (ePrivacy) — Art 5(3) ePrivacy Directive / cookiebekendtgørelsen § 3
Three things Flybi does count as storing information on, or gaining access to information stored in, your terminal equipment under Art 5(3) of the ePrivacy Directive 2002/58/EC, transposed in Denmark as BEK nr 1148 of 9 December 2011 § 3:
- Reading your device's location and sending it to our servers — for discovery and background updates (Section 3.4) and the live game (Section 3.5). Sensor readings are outside Art 5(3) only while they stay on the device; once the reading, or any derivation of it such as a geohash, leaves the device, Art 5(3) applies (EDPB Guidelines 2/2023 v2.0, §44).
- Writing and reading the installation identifiers used by Crashlytics, Performance Monitoring and Analytics (Section 3.11). From the app update that adds Profile → Diagnostics, the app asks you first, with two switches that both start off, and the three services are built to start switched off until you answer. Earlier versions start them at launch without asking — the rule below is the rule, and those versions do not meet it for this item; see the box at the top of Section 3.11.
- Ads on the free plan (Section 3.13). The Google Mobile Ads software reads the device's advertising identifier, and stores and reads identifiers and your consent choice on the device. When advertising is on, Google's consent message asks you before the first ad is requested, and on iOS Apple's tracking prompt is shown as well. No ad is requested, and the ad software is not started, until that message says ads may be requested. If you decline, ads are not personalised; declining does not remove ads.
All of these require your prior consent, and this is a separate legal hook that sits in front of our GDPR Art 6 basis — if we do not clear Art 5(3), no Art 6 basis can rescue the processing, and Art 5(3) has no legitimate-interest option. We do not rely on the "strictly necessary for a service you explicitly requested" exemption for any of it. In particular, that exemption cannot cover collection that continues while the app is closed, and it cannot cover crash reporting or analytics, because the test is what is strictly necessary from your point of view — Flybi works the same without them.
The operating-system permission dialog is not this consent. An OS permission prompt is a technical control over a resource; it does not name a purpose, a retention period, a recipient or a withdrawal right, and it cannot be a valid consent on its own. Our own in-app consent screen is what asks you, and the OS prompt is only triggered after you have said yes there. If you decline in Flybi, we do not show you the OS prompt at all. From the app update that separates background location, the location question asks your phone for "while using the app" only, and the "allow all the time" prompt follows only a yes on the separate background screen.
The in-app consent is per person; the OS permission is per phone. The permission you give in your phone's settings belongs to the phone and covers whoever uses Flybi on it. Flybi's own consent belongs to your account: on a phone shared by two accounts, each is asked, and neither's location is read on the other's yes. In app versions before the update that fixes this, it did not work that way — a new account on a phone where someone else had said yes was not asked (Section 3.4, "Your consent is your account's").
Withdrawal. Turn location off in Profile → Location — one tap, at the same depth as switching it on. From the app update that separates background location, the same screen also has its own switch for background location alone. You can additionally revoke the permission in your device settings. From the app update that does this, Flybi then deletes the location stored for you the next time you open it (Section 3.4, "When your phone stops giving Flybi your location"). Turning location off in-app stops every location read, foreground and background, and also erases the location already stored for you, both the copy on your profile and the private copy (Section 3.4). Withdrawing leaves the rest of Flybi working. For diagnostics and analytics, from the app update that adds Profile → Diagnostics, switch either off there (Section 3.11) — the same one tap it took to switch it on; in earlier versions there is no in-app switch, so e-mail us and we will stop it for you. For ads, Profile → Privacy & Ads → Manage ad consent reopens your choices.
Supervision. GDPR matters are supervised by Datatilsynet; Digitaliseringsstyrelsen supervises the Danish cookiebekendtgørelse — the rules in this section — and can impose penalties under it. See Section 11.
10. Your rights — GDPR Art 13(2)(b)–(d)
You have the following rights over your personal data. To exercise them, use the in-app controls described below or contact us (Section 1).
- Access (Art 15) — a copy of your data.
- Rectification (Art 16) — correct inaccurate data; you can edit most of your profile in-app.
- Erasure / "right to be forgotten" (Art 17) — delete your account from
within the app (Profile → Account → Delete account). This triggers a server-side
cascade (
deleteAccountCloud Function) that erases your profile and everything filed under it — tags and tag images, personality, badges and preferences, date of birth, location (both the profile copy and the private one), your stats and streaks, your soulmate connections and secret-tag overlaps, your encounters, reveal requests in both directions, rate-limit records, waitlist entry and your notification tokens — plus every file you uploaded to our storage (including the images you sent in chats, #1021), and finally your Firebase Authentication record, deleted last so the process can never leave you half-deleted. It also strips your name and photo from records that live on other users, removes you from other people's block lists, and deletes the Hot/Cold game records you played in (Section 3.5), and every chat game you played, with what both of you wrote in it (Section 3.6). It also replaces your e-mail address on every chat room you took part in and on every message you sent that stays in someone else's conversation, with a random token created for that one deletion, so the address is no longer readable there, including in open rooms. The other records a chat room keeps under your e-mail address are removed: that you hid the chat or cleared its history, that you were removed from a group, when you last read it, that you sent its latest message, and your address on the copy of its members' block lists the room keeps, also in rooms you were never in. So is the record that limits how often you can send chat requests, which is kept under your e-mail address. Where your identity is kept on records that belong to other people, such as their encounters, it is replaced by a "deleted user" placeholder that cannot be linked back to you: a random value, made separately for each of those people. Encounter records anonymised before 26 September 2026 still carry your account's internal ID inside the placeholder until a one-off conversion has run [not yet run] (Section 8). What it does not reach — plainly: - Copies in our analytics warehouse are deleted within 30 days, not at once. Crash reports and usage analytics are tied to your account's internal ID, and Google exports them, together with the history of your encounter records, to our BigQuery dataset once a day (Section 6.2). A recurring job deletes everything there that belongs to your account after each export, for as long as new copies can still arrive, and we keep a record that it happened and when, not what was deleted. In practice it is done within a day or two; we promise 30 days so a failed run can be fixed in time. Google's own copies inside Crashlytics, Performance Monitoring and Analytics expire on Google's schedule (Section 8).
- Deleted files stay recoverable by us for up to 7 days. Our cloud provider keeps the photos and images the deletion removes in a recovery store for up to 7 days. Only our administrators can reach it, and only to recover a file deleted by mistake; after that the files are gone. We never bring back files from an account that was deleted. The database backups are kept for 7 days too (Section 8).
- Messages you sent that were already delivered to other people stay in their conversations until they are 30 days old, when they are deleted like every other message (Section 8). If you had agreed to keep a chat, deleting your account ends that: the other person is told, the chat goes back to 30 days after 7 days, and your own messages in it that are more than 30 days old are deleted at once. And safety and moderation records are kept for the period in Section 8 under Art 17(3)(e).
- Accounts deleted earlier. Removing the chat-room records kept under your e-mail address, and the chat-request record, is new. For an account deleted before this change reached our servers, those records may still carry its address until a one-off clean-up has run. [not yet run]
A separate deactivation option lets you hide your account without deleting it.
- A web-based deletion request is also available for users who have uninstalled the app, at https://flybi.app/delete-account (which names the app/developer, as required by Google Play's account-deletion policy) (live and published — #725).
What "delete your account" does, and what "clear chat history" does — they are not the same. Deleting your account really deletes data, as described above. The control still labelled "Clear chat history" deletes nothing: it records a point in time against your e-mail address on that conversation and hides everything before it from your own view. Everyone else in the room still sees every message, and the messages remain in our database until they are deleted, 30 days after they were sent — or up to 12 months after, in a chat you both chose to keep (Section 8). We are renaming the control, because the current name promises deletion and delivers hiding. If you want data gone rather than hidden, delete your account or ask us. - Restriction (Art 18) — ask us to stop using your data while a dispute about its accuracy or our legal basis is resolved, instead of deleting it. Hiding a conversation from your own view is a form of restriction, not erasure — see above. - Objection (Art 21) — object to processing based on legitimate interests (Sections 3.7, 3.10 and 3.12); we will stop unless we have overriding legitimate grounds (e.g. ongoing safety/abuse handling). - Data portability (Art 20) — receive data you provided, based on consent or contract, in a structured, commonly used, machine-readable format. - Withdraw consent (Art 13(2)(c); Art 7(3)) — where we rely on consent, you can withdraw at any time, as easily as you gave it, without affecting the lawfulness of processing before withdrawal. We rely on consent for: - Foreground location and, separately, background location (Sections 3.4 / 3.5) — withdraw either in Profile → Location, or in your device settings. (In app versions before the update that separates them, one switch withdraws both.) Withdrawing in Profile → Location also erases the location already stored for you, and the same screen has a standalone "Erase my stored location" control. Turning off Flybi's location permission in your device settings (or, on iPhone, Location Services) erases it too, from the app update that does this, the next time you open Flybi (Section 3.4). - Crash & performance diagnostics and, separately, usage analytics (Section 3.11) — from the app update that adds Profile → Diagnostics, withdraw either there; in earlier versions, e-mail us and we will switch it off for your account. To have what was already collected deleted, e-mail us. - What you write in your tags, bio and chats (Section 3.3a) — from the app update that adds it, withdraw in Profile → Privacy & legal → Tags, bio & chat consent. Flybi then stops showing your profile to other people and stops working out vibes with you, and the app is on hold for you until you agree again; what you wrote stays stored unless you remove it or delete your account. Optional profile fields can also be removed by editing your profile. - Personalised ads and the device access they need (Sections 3.13 and 9): withdraw in Profile → Privacy & Ads → Manage ad consent, and on iOS also in Settings → Privacy & Security → Tracking. Ads then continue, not personalised. - Keeping a chat for up to 12 months (Sections 3.6 and 8): either of you can withdraw at any time from the chat's menu, Stop keeping this chat (or Not now, before you have agreed). You are both told, and after 7 days the chat goes back to 30 days. - Optional alerts — a soulmate nearby, a strong fit nearby and a badge you earned (Section 3.9): in app versions after 1.7.0, turn them off again in the app's notification settings, under Optional alerts; in 1.7.0 and earlier, turning off the switch for that alert also stops it. Your other notifications stay as they are.
Withdrawing any one of these leaves the rest of Flybi working. We do not make access to the app conditional on background location, diagnostics or analytics, and we will not re-ask after you have refused.
Access and data-portability requests are handled via the contact e-mail in
Section 1 (support@flybi.app), with a response target of within one month as
required by Art 12(3). (Current process; to be confirmed in a professional
review as the project grows.)
11. Right to complain — GDPR Art 13(2)(d)
If you believe we have processed your data unlawfully, you may lodge a complaint with the Danish supervisory authority. You do not need to raise it with us first, though we would rather you did.
Datatilsynet (Danish Data Protection Agency) — https://www.datatilsynet.dk — supervises our compliance with the GDPR. Its current postal address and complaint channel are published on datatilsynet.dk; refer to the site for the authoritative details.
Digitaliseringsstyrelsen (Danish Agency for Digital Government) — https://digst.dk — supervises the Danish cookiebekendtgørelse (BEK nr 1148 of 9 December 2011), which is the rule that governs access to information on your device: our reading of your location, and the installation identifiers used by crash reporting, performance monitoring and analytics (Section 9). Complaints about those go to Digitaliseringsstyrelsen rather than Datatilsynet. Digitaliseringsstyrelsen is also Denmark's Digital Services Coordinator under the Digital Services Act.
You may also complain to the supervisory authority in your EU/EEA country of residence.
12. Accountability records we maintain (informational)
For transparency, and because the Art 30(5) "<250 employees" exemption does not apply to us (our location processing is not occasional and is likely to result in a risk to data subjects — these are alternative triggers, any one of which removes the exemption), we maintain a Record of Processing Activities (ROPA) under Art 30(1).
A Data Protection Impact Assessment (DPIA) under Art 35 is mandatory for our location processing. The route is not "large scale" — at our current size we do not meet the Art 35(3)(b)/(c) scale triggers — but Datatilsynet's own Art 35(4) list, item 3: processing of location data in combination with at least one further criterion. We process location data and meet at least two further WP248 rev.01 criteria (systematic monitoring, and sensitive or highly personal data). That list item carries no size threshold, so a closed beta of 26 users does not escape it. The DPIA covers the foreground/background split and why background collection is necessary, the Art 9 analysis, the sampling frequency and stored precision, retention, the outing / stalking / physical-safety risk model, processors and transfers, and withdrawal and deletion mechanics. If a high residual risk remains after mitigation we will undertake Art 36 prior consultation with Datatilsynet. The ROPA and DPIA are maintained on file.
13. Security & data breaches
We protect your data with measures including encryption in transit, Firebase
Authentication, server-side security rules (firestore.rules) and rate limiting.
App Check is integrated but its enforcement is currently off on our
server functions (Section 3.10), so it is not adding protection today. No system
is perfectly secure, and Sections 3.4, 3.5, 6.1 and 10 name the specific places
where our current rules are looser than we intend them to stay.
If a personal data breach occurs, we will notify Datatilsynet without undue delay and, where feasible, within 72 hours of becoming aware of it, unless the breach is unlikely to result in a risk to your rights and freedoms (GDPR Art 33), and we maintain an internal breach register (Art 33(5)). Where a breach is likely to result in a high risk to you, we will inform affected users without undue delay (Art 34). Because a breach affecting precise location, chat and identity could be high-risk (per EDPB Guidelines 01/2021 breach-severity factors: nature/sensitivity/volume of data, ease of identification, and severity of consequences), we treat such incidents accordingly.
14. Future features (not active)
The following are not part of the live service and are listed only so this notice stays accurate as the app evolves:
- Biometric / face-comparison identity verification — deferred. If introduced, biometric data used to uniquely identify you is special-category data (Art 9) and will require Art 9(2)(a) explicit consent, a strengthened DPIA, and an update to this notice before any processing begins. We do not process biometric data today. (A non-biometric "verified" trust badge exists, decided by a human moderator; any verification artifacts are kept in a private collection not exposed in discovery.)
15. Changes to this policy
We may update this notice. We will post the new version at https://flybi.app/privacy and, for material changes (e.g. a new processing purpose or legal basis), notify you in-app or by e-mail and, where required, seek fresh consent.
*Drafting note for counsel: every legal requirement above is grounded in the
research brief and in the external legal research memo of 7 August 2026
(MEMO.md) — GDPR Arts 3, 5, 6, 7, 8, 9, 12, 13, 17, 18, 21, 22, 25, 27, 30, 33,
34, 35; ePrivacy Art 5(3) + EDPB Guidelines 2/2023 v2.0 §44, transposed as BEK nr
1148 § 3; Danish Data Protection Act § 6(2); e-handelsloven § 7. Data-flow
descriptions are taken from the live code (firestore_fields.dart,
firestore.rules, discovery_repository_impl.dart, chat_room_game_wrapper.dart,
the deleteAccount Cloud Function, and the moderation runbook). The first
revision of 7 August 2026 brought the notice into line with the memo on:
background location and the Art 9 condition (§3.4, §3.5, §9),
Crashlytics/Performance/Analytics as consent-gated device access (§3.11),
event-anchored retention (§8), the honest account of chat clearing versus
deletion (§3.6, §10), and controller contact details (§1).
The second revision of the same day reconciled the notice against a
line-by-line source-code audit (code-audit-2026-08-07.md), and the code won
every disagreement. Corrected: the reach and the gaps of the deletion cascade
(§10, §8); the App Check claim (§3.10, §6.2, §13); world-readable profile e-mail
and coordinates (§3.4, §6.1); what an open-room listing actually delivers and how
much backlog a new joiner sees (§6.1); telemetry running by default rather than
on consent, with the Flybi user ID and, in one path, an e-mail address attached
(§3.11, §7, §9, §10); published retention periods that no scheduled job enforces
(§8); the live-position record left behind by the Hot/Cold game (§3.5); the
"clear chat history" watermark (§3.6, §10); and the client-side-only age gate
(§3.8). Passages describing a design that is not yet shipped are marked
[planned]; that marker is load-bearing and must not be removed ahead of the
code.
The open questions behind those markers — founder decisions, and points the audit
listed as not determined — are tracked internally in
docs/legal/open-items-2026-08-07.md and in
#1167. They are deliberately
kept out of this file: tool/build_site.py renders this document to
https://flybi.app/privacy, and markdown passes HTML comments through to the
published page.*