Privacy Policy — Piscary
Publisher: Morgane Garnier — sole trader (micro-enterprise), trading as KreaRise SIREN: 994 232 130 Registered office: 18 chemin de Meaux, 93360 Neuilly-Plaisance, France Contact: contact@piscary.app Last updated: October 20, 2026 Policy version: 2026-10-20 (v9)
Piscary is a mobile fishing logbook whose interface is available in thirteen languages (French, English, Spanish, German, Italian, Brazilian Portuguese, Polish, Dutch, Swedish, Norwegian, Finnish, Danish, Czech). This policy describes, honestly and specifically to this app, what data we process, why, on what legal basis, for how long, with whom, and what your rights are. We are established in the European Union and apply the General Data Protection Regulation (GDPR). It replaces all previous versions.
1. How to read this policy
- App versions. This text describes the current version of the app. Older versions remain installed on some devices: when one of them behaves differently, the text says so (for example “versions 1.0.6 and 1.0.7” or “from version 1.0.8”). To find your version: Me → Settings → About.
- Data controller: the publisher named at the top of this page. Any request about your data goes through contact@piscary.app.
- Each processing activity has its own sheet (section 4): data, purpose, legal basis, duration, recipients. Durations are gathered in section 8.
2. Account, age and terms of use
An account is required to use Piscary: it lets you find your logbook on several devices, post and follow other anglers, save your spots and your trips, and tie the Pro subscription to a person. You can create your account with a verified email address and a password, or with your Google or Apple account.
The app is still local-first: your data is first saved on your device — so you can log a catch with no network, at the water’s edge — then synced to your account when the network is back. In practice, your catch journal, photos, trips, spots, gear and preferences are kept on the device (offline display and upload queue) and on our servers. Your challenges and badges are computed from your catches; your total points and pinned records are synced with your profile.
Minimum age: 13. Piscary is not intended for children under 13 (see “Children”). Under 15 — the age of digital consent in France; elsewhere, the age set by your country (between 13 and 16 in the European Union) —, the options that rely on your consent also require the agreement of a parent or legal guardian: usage measurement (4.15), recognition improvement (4.9) and personalized advertising (consent form and, on iPhone, the tracking prompt, 4.13). Without that agreement, leave them off or decline them: your account and every feature of the app remain available.
Terms of use. Up to version 1.0.7, the checkbox accepting the terms and the minimum age existed only for email sign-up, and the acceptance was not recorded on our servers. From version 1.0.8, acceptance of the terms of use is requested whatever the sign-up method (email, Google, Apple) and is recorded on our servers with its date and the version of the terms accepted, so that we can demonstrate it.
3. What other users see about you
| Item | Who sees it |
|---|---|
| Profile: username (@), display name, profile photo, total points, level, number of followers and following, Pro badge | All signed-in accounts (leaderboard, angler search, feed, angler page), even if your account is private |
| Profile location (optional, from 1.0.10: a country, or a city and its country, typed by you; never coordinates) | The signed-in accounts that can see your profile; if your account is private, only the followers you have approved; never an account you blocked or that blocked you |
| “Public” catches: species, length, weight, date, notes, photo, place name | All signed-in accounts. If your account is private: only the followers you have approved |
| Location of a public catch | By default the location stays private: others only see the town or region (the “public place name”). If you choose Public for the location, the precise name and exact coordinates are visible to the accounts that see the catch |
| Private catches (default setting) | You only |
| Fishing trips (“sessions” in the app, with their GPS trace) | You only. A trip is private by default. The sharing settings of a trip currently have no effect: no feature lets another user see your trips |
Public link to a catch (“Copy link”, piscary.app/c/…) |
Anyone with the link, no account needed: species, length, weight, date (no time), catch-and-release indication, notes, place name (never coordinates), display name and profile photo, catch photo. Nothing is shown for a private catch or a private account |
| Likes and comments | The accounts that see the catch; a comment shows your name and profile photo |
| Spots, favorites, gear, preferences | You only |
A user you block no longer sees your content, and you no longer see theirs. You can change a catch’s visibility and location at any time, and make your account private (Me → tap your photo to Edit profile → Privacy → Private account).
4. The processing activities, one by one
4.1 Account and sign-in
- Data: email address and password (hashed server-side: we never have access to it
in plain text), or an identifier provided by Google or Apple with your name and email
address (Apple may offer you a relay address); username chosen at sign-up or the
provisional username
pecheur_xxxxxx; technical account identifier; date of the app’s last opening; session token, kept in the device’s secure storage (Keychain on iOS, Keystore on Android). - Purpose: create and secure your account, sign you back in, send you the confirmation or password-reset code.
- Legal basis: performance of the contract (the account you ask for).
- Duration: as long as the account exists; an inactive account is deleted after 36 months (see 4.18).
- With whom: Supabase (hosting and authentication, EU); Resend (email sending); Google or Apple if you use them to sign in.
4.2 Profile, leaderboard and search
- Data: username, display name (first name from Google or Apple, or typed by you), profile photo, total points, pinned records, follower counters, “private account” indicator, Pro badge; and, if you fill it in (from 1.0.10), a free-text profile location (a country, or a city and its country, 80 characters at most), which you can clear at any time.
- Purpose: present you to other anglers, feed the leaderboard and angler search (see section 3 for who sees what).
- Legal basis: performance of the contract (the social features you use).
- Duration: as long as the account exists. Leaderboard snapshots are used to show rank changes; they are deleted after 14 days.
- With whom: Supabase; the other signed-in accounts, as described in section 3.
4.3 Catch journal and photos
- Data: for each catch: species, name, date and time, length, weight, technique, lure, notes, fate of the catch (released or not), private and public place name, GPS coordinates if you add them, privacy setting, weather and conditions recorded at the time of the catch, photos.
- Photos: resized and compressed before upload (at most 1,080 px wide and 1,500 px high), with a 320 px thumbnail. The photo’s metadata (EXIF) is not uploaded: the app reads it on your device, before upload, only to suggest the place and date of the catch; you can decline. For a public catch, a copy of the photo is placed in a storage space served by a content delivery network, so that it displays quickly.
- Measuring a fish (LiDAR, compatible iPhone, from 1.0.10): the iPhone’s camera and depth sensor measure the length between the two points you place. All the computing happens on your device: no image or depth data is stored or sent; only the length, if you confirm it, fills the catch’s “length” field.
- Purpose: keep your fishing logbook, sync it, share it if you decide to.
- Legal basis: performance of the contract.
- Duration: until you delete the catch or the account. Orphaned files are deleted automatically (hourly run). When a catch goes back to private, its public copy is removed within about an hour, plus the delivery network’s cache delay. Piscary may also, for media older than 5 years, reduce their resolution or delete them after informing you in the app, without affecting the catches themselves.
- With whom: Supabase (database and storage); the accounts that see the catch (section 3).
4.4 Trips (GPS trace)
- Data: when you start a trip (called a “session” in the app: Add → Start a session), the app records your GPS route: about one point per second, with the best accuracy the device allows (around 5 meters), after filtering out outliers. Added to this are the start and end times, the distance, a title and notes if you enter any, the starting place, the weather at the start and end, and the challenges unlocked.
- Background: tracking continues with the screen off, only during the trip. On iOS, the system shows its location indicator (blue bar); on Android, a persistent notification signals it. The app only asks for the “while using the app” location permission, never “always”, and stops when you end the trip.
- Purpose: draw and measure your trips, find them in your journal.
- Legal basis: performance of the contract (the feature you start yourself).
- Duration: the trace is stored on the device (up to 20,000 points) then synced; it is kept until you delete the trip or the account.
- With whom: Supabase only. No one else sees your trips (section 3).
4.5 Synced spots, favorites and preferences
- Data: your saved spots (name, coordinates, type of water body), your favorite species, the selected spot, your preferences (theme, language, units, alerts) and your choice about “Help improve recognition”.
- Purpose: find your settings and spots on all your devices.
- Legal basis: performance of the contract.
- Duration: until the account is deleted.
- With whom: Supabase; visible to you only. The number of saved spots is limited in the free version.
4.6 Gear
- Data: rods, reels, lures and combos that you enter, with their specifications and optional photos.
- Purpose: keep your tackle box and link it to your catches.
- Legal basis: performance of the contract.
- Duration: until the account or the item is deleted.
- With whom: Supabase (private storage); visible to you only.
4.7 Location, fishing conditions, maps and place names
The app asks for the system location permission “while using the app”. Without it, you can pick a place by hand. From version 1.0.8, the system window opens from the “Up to you” screen, at first launch, when you confirm it: you answer in that window, and “My location” stays on your device (it is not synced to your account).
- Current position (“balanced” accuracy, about 100 m): used to pre-fill the place of a catch or spot, show “My position” on the map and compute local conditions.
- Weather, tides and flows (conditions score). The coordinates of the spot you look up are sent to our servers (authenticated connection), rounded to a grid of about 5 km, then, if the area is not already cached, passed on to Open-Meteo with no account identifier: Open-Meteo only sees our server. The cache is shared between users and purged after 7 days.
- Rivers. In France, Hub’Eau / Eaufrance is queried directly by the app: it receives the coordinates of the spot or catch, the date and the IP address of your connection, never an account identifier. From version 1.0.8, these coordinates are rounded to the nearest kilometre before they are sent: the exact position of your spot no longer leaves the phone. In the United States (USGS) and in England (Environment Agency), our servers query the service, with an area and not your identity.
- Species reported around a point (GBIF). The list goes through our servers; a species’ density layer on the map is loaded directly from GBIF, which receives your IP address and the displayed area.
- Place and water-body names. When you search for a place, the text typed and, if there is one, the map center are sent to our servers, which answer from our own database of place and waterway names (OpenStreetMap data via Overture Maps): no third-party geocoder is queried. To suggest the right water body when you add a spot, the exact coordinates of the point are also sent to our servers. None of this is stored: the answer is recomputed on every request.
- Proximity features (“Around you”, catches of the anglers you follow on the map, map layers): the displayed area or your position is sent to our servers for the time of the request, without storage.
- Reverse geocoding (turning coordinates into a town name): done by the system’s service — Apple on iOS, Google on Android — under its own policy. No third-party geocoder is called as a fallback.
- Maps. Map display and offline maps rely on Mapbox (see section 6); the app turns Mapbox telemetry off and offers no way to turn it back on. Areas downloaded for offline use stay on your device only (Map → Offline). The fishing categories of waterways are served by our own server (OVH, France): your IP address appears in its technical access logs.
- GPS and date of your photos. Read on the device to suggest a place and a date (see 4.3); this metadata does not leave with the photo.
- Legal basis: performance of the contract (the feature you use); your location permission remains revocable at any time in the system settings.
- Duration: cached conditions data: 7 days at most, with no link to an account; the rest is not stored.
4.8 Species recognition (“Identify a fish”)
- What happens: when you start an identification (Add → “Identify a fish”), the chosen photo is resized (1,024 px), without its metadata, then sent to our servers, which pass it on to the image-analysis server hosted by OVH in Gravelines (France). It computes a visual signature (a series of numbers), which we compare to our species database; three suggestions come back to you.
- What we keep: apart from the recognition-improvement option (4.9), neither our servers nor the analysis server keep the photo or its signature. We record, linked to your account, the suggestions made and your choice, to measure the quality of the service. The analysis server’s technical logs (which see our server’s address, not your phone’s) do not contain the photo.
- Quota: 5 identifications per day in the free version, 3 more per rewarded video watched (4.13), cap of 50 per day; the Pro plan lifts the free limit.
- From version 1.0.8, a photo is sent to recognition only on your explicit action (“Identify” action). Up to version 1.0.7, choosing a photo when adding a catch also sent it automatically, within the quota, to suggest a species.
- Legal basis: performance of the contract (the feature you ask for).
- Duration: suggestions and choices: as long as the account exists.
- With whom: Supabase; OVH (image analysis).
4.9 Recognition improvement (consent-based, off by default)
- How to turn it on or off: from version 1.0.8, at first launch, on the “Up to you” screen (“Help improve recognition” switch, off to start with, or the “Accept all” button); then at any time: Me → Settings → Privacy → “Help improve recognition”. Off until you turn it on.
- Data: if you turn it on, two sources feed the recognition database: (1) the visual signature of the photos of your synced catches (numbers, not a photo), linked to the species you entered; (2) when you confirm or correct an identification, the submitted photo is kept in a private space with its signature and the species you chose.
- Human review: to prevent an error from entering the database, the publisher may view these photos (through temporary links) and validate or reject the signature.
- Legal basis: consent.
- Duration: photo left unanswered: deleted within 24 hours (up to 48 hours in practice); rejected signature: deleted within 90 days; photo of a validated signature: kept until you withdraw your consent.
- Withdrawal: by turning the setting off, the kept photos are deleted and the signatures (numbers) remain with no link to your account. Deleting your account erases the photos and signatures still linked to it.
- With whom: Supabase (database and private storage), OVH.
4.10 Social features
- Data: follows (and follow requests if an account is private), likes on catches and comments, comments (text, date, author), catch posts (see section 3).
- Purpose: run the feed, the leaderboard and exchanges between anglers.
- Legal basis: performance of the contract.
- Duration: until the content or the account is deleted.
- With whom: Supabase; the accounts that see the content; the resulting notifications go through Expo (4.12).
- Public link to a catch: see section 3; the
piscary.app/c/…page queries our servers and only shows the listed items.
4.11 Reports and blocks (moderation)
- Data: if you report a catch, a comment, a profile or a public spot, or if you block a user: your identifier, the item concerned, the reason and the details you give.
- Purpose: community safety, removal of objectionable content (handled within 24 hours), compliance with app store rules.
- Legal basis: legitimate interest (safety of users and of the platform).
- Duration: the reports and blocks you make are deleted with your account. A report targeting a deleted account is kept with no link to that account as long as it is useful for moderation.
- With whom: Supabase; the publisher receives an email alert (sent by Resend) for each report.
4.12 Notifications
- Local notifications: if you turn it on, an “ideal fishing window” alert is scheduled on your device, without going through our servers.
- Remote notifications (only if you allow them in the system). They tell you about a real gesture from another angler: like, comment (with an excerpt), follow, follow request, request accepted. Never commercial notifications. To do this, we store the device’s notification token, its platform and its language. The notification (which contains the name or username of the other angler and, for a comment, an excerpt) goes through the Expo service, which relays it to Apple (APNs) or Google (FCM).
- Token removal. From version 1.0.8, the token is removed from our servers when you sign out. Up to version 1.0.7, this removal did not succeed: the token stayed linked to your account, and the device could keep receiving its notifications after sign-out, until another account signed in on it (the token is then linked to that account) or the account was deleted. You can turn notifications off at any time in the system settings. The token is also removed when Expo reports that the device no longer exists, and deleted with your account.
- Legal basis: consent (the system’s notification permission).
- Duration: until sign-out (version 1.0.8), at the latest until the account is deleted.
- With whom: Supabase; Expo; Apple or Google.
4.13 Advertising (free users)
- What: the app shows advertising via Google AdMob, only to free users; Piscary Pro subscribers see none. Four formats exist: an ad when the app opens, an interstitial ad at the end of a trip, a “Sponsored” card in the feed (“Social” tab, after the 10th catch, then every 12), and a rewarded video that you choose to watch to earn 3 identifications.
- Content: whichever mode applies, ad content is limited by a maturity ceiling requested from Google: “parental guidance” (PG) up to version 1.0.7, “teen” (T) from version 1.0.8. Adult content (sexual content, alcohol, gambling) is always excluded, and so are dating and sexual-health ads.
- Ad personalization.
- Versions 1.0.6 and 1.0.7 (Android): ads are requested in non-personalized mode: no profile-based targeting, no cross-app tracking.
- From version 1.0.8, on Android: the app no longer forces non-personalized mode; Google decides based on your consent. In the EEA, the UK and Switzerland you answer the consent form (below): if you accept, ads may be personalized (based on your interests, using Android’s advertising ID); if you refuse, limited ads may still be shown (neither personalized nor based on the advertising ID or cookies: Google only relies on technical data, such as the IP address for approximate location and fraud prevention). Elsewhere, Google’s local rules apply. You can turn personalization off at any time in Android’s settings (Settings → Google → Ads).
- On iPhone: the first time you open the app with a free account, before any ad, iOS asks you “Allow Piscary to track your activity across other companies’ apps and websites?” (App Tracking Transparency). If you tap Allow, Google may use your device’s advertising identifier (IDFA) to personalize ads and measure their effectiveness: this is tracking as Apple defines it. If you tap Ask App Not to Track — or until you answer — ads are requested in non-personalized mode, without the IDFA; the app works the same way. This prompt never appears for a Pro subscriber (who has no ads), and only once: iOS does not ask again. The app-open ad only appears from the third opening, the end-of-trip ad after the account’s first seven days, the feed card after the 10th catch; the rewarded video only when you ask for it. You can change your mind: iOS Settings → Privacy & Security → Tracking → Piscary.
- Data processed by Google: to serve ads and fight fraud, the AdMob SDK may process
device identifiers — the advertising ID (Android: the app declares the
AD_IDpermission; iPhone: only if you allowed tracking) —, your IP address, an approximate location derived from the IP, technical information (model, diagnostics) and your interactions with ads. Google acts as the advertising provider (policies.google.com/privacy). Piscary builds no advertising profile: personalization is done by Google. - Consent: in the EEA, the UK and Switzerland, a consent form (Google UMP) is shown before any ad request. You can review it: Me → Settings → Privacy → “Manage ad consent”. Even if you refuse, Google may use technical data (IP address, invalid-traffic detection) to limit ads.
- Legal basis: consent (UMP form) in the EEA, the UK and Switzerland; consent too (iOS prompt) for the advertising identifier on iPhone; legitimate interest (financing the free version) elsewhere.
- Duration: on Google’s side, under its policy; we keep none of this data.
- With whom: Google (AdMob, UMP).
4.14 Piscary Pro subscription (optional)
- Data: purchase and subscription data (product, dates, subscription status) and an identifier linked to your account (the technical identifier, not your email), processed by RevenueCat to manage your entitlements and restore your purchases. Our server receives your subscription status from RevenueCat and records its end date on your profile; a Pro badge may be displayed on your profile.
- Payment: handled by Apple or Google; we never have access to your bank card details.
- Legal basis: performance of the contract.
- Duration: as long as the account exists; RevenueCat keeps the purchase history on its side (see section 10).
- With whom: RevenueCat; Apple or Google; Supabase.
4.15 Usage measurement (usage statistics, PostHog)
- Why: to know which features are used and where the app is hard to use. These statistics are not anonymous: after sign-in, they are linked to your account identifier (a technical identifier, not your email), to measure journeys rather than simple totals.
- What is sent: the screens opened (their name, never their parameters), lifecycle
events (install, update, open, move to background), a closed list of actions
(account creation, catch saved, spot created, trip started, species page viewed,
subscription screen shown, plan chosen, purchase or restore, etc.) with counters and
short labels (for example
annual,saltwater, or the number of your catches), and two properties of your measurement profile: Pro or not, and language. PostHog may also derive an approximate location (city, country) from the IP address of your connection. - What is never sent: the name of your spots, their coordinates, your photos, your notes, your username, your email address, or any text you type. A filter rejects any value that looks like free text or an email address. No session replay, no capture of your gestures.
- Up to version 1.0.7: measurement is on by default, from the very first launch, even before the account is created. You can turn it off: Me → Settings → Privacy → “Help improve the app”. When you turn it off, one last “measurement turned off” event is sent, then nothing more.
- From version 1.0.8: measurement is off by default and subject to your prior consent: nothing is sent to PostHog until you have accepted. The question is asked once, on the “Up to you” screen (“Help improve the app” switch, off to start with, or the “Accept all” button): at the very first launch, or at the first launch of 1.0.8 if the app was already installed — unless you had already turned measurement off, in which case that refusal is kept. Closing the screen counts as a refusal. Until you accept, and as soon as you refuse, no event is sent (not even “measurement turned off”) and the measurement identifier stored on your device is erased. You can change your mind at any time in the same setting.
- Legal basis: consent (from version 1.0.8).
- Duration: 25 months at most in PostHog. Deleting your account does not automatically erase your measurement profile at PostHog: see section 10.
- With whom: PostHog, hosted in the European Union (
eu.i.posthog.com).
4.16 Diagnostics and crashes (Sentry)
- Data: when the app crashes or hits an error, a technical report is sent: crash trace, device model, system and app version, language, Pro or not, breadcrumb trail (names of the screens visited and addresses of recent network requests), error message; plus a performance measurement on about 10% of sessions. Server error messages may contain a technical identifier or, in some cases, a username.
- What the app does not attach: your email address, your account identifier, your catch coordinates. It is configured to attach no IP address and no user identifier to reports; like any Internet service, Sentry nevertheless sees the device’s IP address at the time of transmission.
- “Send feedback” form (Settings): your message and, if you enter it, your email address (optional), with no screenshot.
- Purpose: fix bugs and keep the app stable; never advertising or behavioral tracking. Active only in the published app.
- Legal basis: legitimate interest (stability and security of the service).
- Duration: 90 days at most at Sentry.
- With whom: Sentry, European Union region (Germany).
4.17 Emails
- Data: your email address.
- Purpose: account confirmation email, password-reset code, warning before an inactive account is deleted; and, on the publisher’s side, moderation alerts (4.11).
- Legal basis: performance of the contract; legitimate interest for moderation alerts.
- Duration: the address is only kept on your account; Resend only keeps sending logs.
- With whom: Resend (email sending); through Supabase for account emails.
4.18 Technical security, rate limiting and inactive accounts
- Rate limiting: to prevent abuse, our functions count calls per account; for public catch pages, per identifier derived from the IP address, hashed (the IP address is never written in plain text). These counters are deleted after one day.
- Host logs: Supabase and the image-analysis server keep technical access logs (IP address, time, request) for security and diagnostics.
- Inactive accounts: we record the date of the app’s last opening. An account with no sign-in for 35 months receives a warning email; with no return within 30 days, it is deleted (36 months in all). Opening the app again cancels the deletion. A technical log of automatic deletions (identifier of the deleted account, date) is kept to justify them.
- Legal basis: legitimate interest (security); limitation of data retention.
- Duration: see section 8.
4.19 On your device: storage, widget, backups, export
- Local storage: journal, photos, trips, gear, fishing permits, settings and caches are in the app’s
private space (
Piscaryfolder). Uninstalling the app erases it. - System backups. On iOS, these files (journal, trips, photos) are part of device backups, including iCloud if you have turned it on for your device. On Android, the system’s automatic backup may keep some technical preferences of the app and its components, but not your journal or your photos. These backups depend on your settings and on those of Apple or Google.
- iOS widget: it shows on the home screen the name of the selected place and the day’s conditions score. This information is read from a space shared only between the app and its widget, on the device; the widget makes no network request.
- Export of your data: Me → Settings → Privacy → “Export my data” prepares on your device a file containing your profile, settings, catches and gear (photos are referred to by path, not included) and, from version 1.0.11, your fishing permits (without their images). It is sent nowhere until you share it. Trips, spots and social data are not in it: to obtain everything, see “Your rights”.
4.20 On-demand translation (from 1.0.10)
- What happens: under a description or a comment written in another language, a link translates the text on your device. The text being translated does not leave your device; it replaces the text in place, and “See original” brings it back.
- On iPhone (iOS 18 and later): translation is done by iOS (Apple’s Translation framework). Languages are iOS’s own, shared with the Translate app: if one is missing, iOS offers to download it, with its own window and under Apple’s policy. Piscary sends nothing to Apple for this. Before iOS 18, translation is not offered.
- On Android: translation is done by Google’s ML Kit library (“Translate with Google”). The first time a language is translated, the app downloads that language’s model from Google (about 30 MB, over Wi-Fi); Google then sees the device’s IP address. At most three models are kept. For its diagnostics and usage analytics, ML Kit sends Google, encrypted: device and app information (model, operating system, app name and version), an installation-specific identifier, performance metrics, the feature’s configuration, the size of the processed text, the chosen or detected languages, the event type and error codes. According to Google, this data is not passed on to third parties.
- Purpose: understand exchanges between anglers who write in different languages.
- Legal basis: performance of the contract (a feature you trigger); for ML Kit’s diagnostics (Android), Google’s and our legitimate interest in a working service.
- Duration: languages stay on the device until they are replaced or the app is uninstalled (on iPhone, iOS manages them); on Google’s side, according to its policy.
- With whom: Apple (iOS); Google (ML Kit, Android).
4.21 Fishing licenses and permits (from version 1.0.11)
- Data: the fishing licenses and permits you add, whatever the country, and your boating license if you store it there: the image of the document (photo, image from your library, or pages of a PDF converted to images — the PDF itself is neither kept nor uploaded), the country, area, type, name, validity dates and, only if they appear on the document or you enter them, the permit number and the holder’s name.
- Reading the document: to fill in the form for you, the document’s text is read on your device (the PDF’s own text, or the image read by Apple Vision on iPhone and Google ML Kit on Android), along with the position of the QR code, to show it large during an inspection (and, on iPhone, its content, kept in memory for Apple Wallet). This text is neither stored nor uploaded: only the fields you keep are saved, after you check them. As for translation (4.20), ML Kit sends Google diagnostics and usage statistics, never the text it reads.
- Purpose: let you show your permit during an inspection, even without signal, find it again on another device, and remind you before it expires.
- Legal basis: performance of the contract.
- Retention: until you delete the permit or your account. The images of a deleted permit, or of a removed page, are erased from our servers automatically.
- Shared with: Supabase (private storage, EU); visible to you only, never on your public profile, in the feed, the leaderboard or the map.
- Reminders: expiry reminders (a month before, then the day before) are scheduled on your device; no server sends them.
- Apple Wallet (iPhone, optional): if you tap “Add to Apple Wallet”, the QR code’s content (read on your device), the permit’s name, country, end date, number and holder are sent to our server function (Supabase, EU), which builds and signs the pass and sends it back to you; nothing is kept. The pass then lives in your iPhone’s Wallet app, under your control.
- Usage analytics: with your consent (4.15), only the permit type, the image source (photo, image, PDF) and the validity choice are measured; never the country, name, number or holder.
- What we do not do: we do not verify your permits and do not pass them on to any authority, federation or club. A copy in the app does not always replace the original: depending on the country, the rules may require the official document.
5. What we do not do
- No advertising tracking without your consent: on iPhone, the advertising identifier is used only if you tap “Allow” on the iOS prompt (versions before 1.0.8: no personalization); on Android, personalization follows your consent and can be turned off in Android’s settings. Piscary builds no advertising profile and combines it with nothing else.
- No sale of data, no data brokers.
- No third-party advertising analytics tool in the app (no Google Analytics, Firebase Analytics, Facebook SDK) and no automated decision about you: nothing we measure is used to target you.
- No recording of your screen or gestures: no session replay. Usage measurement is limited to what is described in 4.15.
- No commercial or advertising notifications.
6. Third-party services and processors
| Service | Role | Data received | Location |
|---|---|---|---|
| Supabase | Hosting: database, authentication, file storage, server functions | All data in sections 4.1 to 4.12 and 4.21 | EU (Germany) |
| OVH | Image-analysis server (species recognition) and maps (fishing categories) | Photo sent to recognition, for the time of the computation; IP address in map access logs | France (Gravelines) |
| Open-Meteo | Weather, tides, modeled flows | Area (grid of about 5 km), through our servers; no identifier | See its policy |
| Hub’Eau / Eaufrance | River flow and temperature (France) | Coordinates (rounded to the nearest kilometre from 1.0.8), date, IP address, direct call from the app | France |
| USGS, Environment Agency | River flow (United States, England) | Area or station, through our servers | United States, United Kingdom |
| GBIF | Species reported around a point | Area through our servers; IP address and displayed area for density tiles (direct call) | EU |
| Mapbox (Mapbox, Inc.) | Map display and offline maps | IP address, area viewed, technical information (model and system, app version), random technical identifier used to count active users; telemetry turned off | United States |
| Apple, Google | Apple or Google sign-in; system reverse geocoding; notifications (APNs, FCM); subscription payment | Under their policies | United States |
| Google ML Kit | On-device translation of descriptions and comments, Android (from 1.0.10; on iPhone, iOS translates) | See 4.20: language downloads (IP address); the library’s diagnostics and usage analytics, never the translated text | United States |
| Google AdMob | Advertising (free users); personalized only with your consent, from 1.0.8 | See 4.13 | United States |
| RevenueCat | Pro subscription management | Purchases, account-linked identifier | United States |
Expo (expo.dev) |
Delivery of remote notifications | Notification token and notification text | United States |
| PostHog | Usage measurement (consent from 1.0.8) | See 4.15 | EU |
| Sentry | Diagnostics and crashes | See 4.16 | EU (Germany) |
| Resend | Email sending | Email address | United States |
Attribution. Weather, marine and hydrological data are provided by Open-Meteo (CC BY 4.0 license); place and waterway names come from OpenStreetMap (via Overture Maps, ODbL license); the classification of waterways into 1st and 2nd fishing category comes from the Directions départementales des territoires (Licence Ouverte 2.0) and from prefectoral orders; species reports come from GBIF (datasets under CC0 and CC BY licenses). These sources are credited in the app; the map displayed carries the credits of Mapbox and OpenStreetMap.
7. Transfers outside the European Union
Supabase, Sentry, PostHog and OVH process data in the European Union. Mapbox, Google, Apple, RevenueCat, Resend, Expo and USGS are established or process data outside the Union (notably in the United States). These transfers rely on appropriate safeguards: an adequacy decision of the European Commission (Data Privacy Framework) or the European Union’s standard contractual clauses.
8. Retention periods
| Data | Duration |
|---|---|
| Account, profile, catches, photos, trips, spots, gear, fishing permits, preferences, comments, likes, follows | Until you delete them or until the account is deleted. Inactive account: deletion at 36 months (4.18) |
| Orphaned photos (deleted catch) | Automatic deletion, hourly run |
| Media older than 5 years | Resolution reduction or deletion possible, after notice in the app |
| Public copy of a catch put back to private | Removed within about an hour, plus the cache delay |
| Cached weather, tide and flow data | 7 days at most, with no link to an account |
| Rate-limiting counters | 1 day |
| Leaderboard snapshots | 14 days |
| Recognition suggestions and your choice | As long as the account exists |
| Photo left unanswered (recognition improvement) | 24 hours (48 hours at most in practice) |
| Rejected signature | 90 days |
| Validated photo and signature (recognition improvement) | Until consent is withdrawn or the account is deleted |
| Notification token | Until sign-out (from version 1.0.8), at the latest until the account is deleted |
| Reports and blocks you make | Deleted with your account |
| Report targeting a deleted account | Kept with no link to that account, as long as needed for moderation |
| Log of automatic deletions of inactive accounts | As long as it is needed to justify these deletions |
| Usage statistics (PostHog) | 25 months at most |
| Crash reports (Sentry) | 90 days at most |
| Technical access logs (host, image-analysis server) | Duration limited by the settings of these services (capped in size) |
| Technical backups of the host | A few days, with automatic rotation |
| Purchase history at RevenueCat | As long as the customer record exists at RevenueCat |
9. Your rights and how to exercise them
You have the rights of access, rectification, erasure, restriction, objection, portability and withdrawal of consent (GDPR, articles 15 to 21 and 7.3).
- Rectify: your profile, catches, trips, gear and fishing permits can be edited directly in the app.
- Erase: you can delete an item, or delete your account from the app (section 10).
- Access your data and take it with you: the app’s export (4.19) covers your profile, settings, catches, gear and fishing permits. For all your data (trips, spots, social data, recognition history), write to contact@piscary.app from your account’s address; we answer within one month (extendable for a complex request, with notice).
- Object, restrict a processing: write to contact@piscary.app.
- Withdraw a consent, at any time, as easily as you gave it:
- usage measurement: Me → Settings → Privacy → “Help improve the app”;
- recognition improvement: Me → Settings → Privacy → “Help improve recognition”;
- advertising: Me → Settings → Privacy → “Manage ad consent”;
- notifications and location: system settings.
- Complaint: you can lodge a complaint with the CNIL (cnil.fr), the French supervisory authority, or with the authority of your country of residence.
10. Deleting your account
From the app: Me → ⚙ (Settings) → Account → Delete account, then confirm: with your password or, for an account created with Google or Apple, by signing in again with that provider. Deletion is immediate and permanent. It runs through a server function that erases your authentication account, profile, catches, trips, spots, gear, fishing permits, photos and images (all storage spaces), comments, likes, follows, reports and blocks, notification tokens, and the recognition signatures and photos linked to your account. For an account created with “Sign in with Apple”, you can also remove Piscary’s access yourself in your Apple ID settings. You can also write to contact@piscary.app (answer within 30 days at most).
What deletion does not automatically erase:
- your Piscary Pro subscription, which is not cancelled: cancel it with the App Store or Google Play;
- your customer record at RevenueCat and, if you had accepted usage measurement, your measurement profile at PostHog: on request to contact@piscary.app, we ask these providers to delete them;
- the host’s technical backups, which expire on their own within a few days;
- reports that targeted your account, kept with no link to it;
- data on your device, erased when you uninstall the app.
11. Children
Piscary is not intended for children under 13 and does not knowingly collect data about them. Between 13 and the age of digital consent in your country (15 in France), see section 2: consent-based options require a parent’s agreement. If you believe a child has given us personal data, write to contact@piscary.app to have it deleted.
12. Security
All exchanges with our servers and third-party services go over HTTPS (encryption in transit). Access to account data is protected by Supabase’s Row Level Security rules: you only access your own data and the content shared with you. The authentication session is stored in the system’s secure storage. Irreversible actions (deleting the account, erasing your data, exporting) require confirmation by password or by signing in again.
13. The piscary.app website
This policy also applies to the piscary.app website.
- Website audience measurement: Ahrefs Web Analytics, cookie-free, to count visits to the public pages.
- Test sign-up list: the form that may be displayed on the site collects the email address of a tester’s Google Play account, only to add them to the test, then delete it. It is stored in our database (Supabase, EU).
- Website hosting: Vercel Inc. (see the Legal notice); its host keeps technical access logs.
14. YouTube
Piscary publishes its own videos on its YouTube channel via the YouTube API Services, without collecting any data about you. See the YouTube Terms of Service and the Google Privacy Policy. Revoke access: Google security settings. Contact: contact@piscary.app.
15. Changes and history
This policy may be updated. The date and version at the top of the document show the text in force; in case of an important change, you are informed in the app. For any question: contact@piscary.app.
| Version | Changes |
|---|---|
| 2026-10-20 (v9) | Expo: the app no longer checks for updates to its code at launch (every update goes through the App Store or Google Play); that line is removed |
| 2026-10-19 (v8) | iPhone: the tracking permission request (App Tracking Transparency) appears the first time you open the app with a free account, before any ad; minimum age lowered to 13, with a parent’s agreement for consent-based options before the age of digital consent (15 in France); timing of ads clarified |
| 2026-10-19 (v7) | Version 1.0.13: if you refuse advertising consent, limited ads (neither personalized nor based on the advertising ID or cookies) may be shown |
| 2026-10-18 (v6) | Version 1.0.12: interface available in thirteen languages |
| 2026-10-13 (v5) | Version 1.0.11: fishing licenses and permits (section 4.21) — document image, country, dates, optional number and holder, visible to you only; expiry reminders scheduled on the device; added to the export and to account deletion; form filled from the document’s text, read on the device (Apple Vision, Google ML Kit); optional Add to Apple Wallet, pass signed by our server with nothing kept |
| 2026-10-12 (v4) | Version 1.0.10: optional profile location and who sees it; LiDAR fish measurement, computed on the device; on-device on-demand translation, by iOS on iPhone and by Google ML Kit on Android (section 4.20) and Google ML Kit added to third-party services; actual size of uploaded photos (at most 1,080 × 1,500 px) |
| 2026-10-06 (v3) | Advertising from 1.0.8: personalized ads on Android according to your consent, and on iPhone if you allow tracking (App Tracking Transparency prompt); non-personalized ads in versions 1.0.6 and 1.0.7 and on iPhone if you refuse; refusing ad consent no longer triggers any subscription offer |
| 2026-10-06 (v2) | Complete rewrite: one sheet per processing activity (legal basis, duration, recipients), GPS trips, spots, profile visibility and public links, species recognition, advertising (four formats), non-anonymous usage measurement and consent from 1.0.8, notification token, Sentry, Mapbox, GBIF, widget, backups, website; account deletion path corrected |
| 2026-10-01 | Previous version |