Privacy Policy
Version 2.3 • July 2026
Mobile Application & Website — Version 2.0 (Replaces all previous versions)
Operated by Tusker Trails (Pty) Ltd | Governed by the laws of South Africa
Summary
Kruger Companion does not sell your data. Your location is processed locally on your device. Conservation reports are anonymised. Data donation is voluntary. We comply with POPIA (South Africa) and align with GDPR principles.
- Optional user accounts support Cloud Sync of personal sighting logs and Camp Chat participation.
- Push notifications are optional and only sent for Camp Chat when explicitly enabled per camp.
- An optional Referral / Invite programme attributes installs or invite codes so inviting users can earn points and badges; the Top-10 leaderboard requires a separate opt-in.
- Crash reports are collected via Firebase Crashlytics to improve app stability.
- Users may permanently delete their account and all associated cloud data at any time from Account Settings in the app or at krugercompanion.co.za/delete-account.
1. Information We Collect
1.1 Location Data (GPS)
Our App requires access to your device's location services to provide core functionality, specifically:
- Displaying your current position on the map (both online and offline).
- Calculating distances to points of interest (camps, gates, picnic spots).
- Navigating along routes within the park.
Important: This location data is processed locally on your device. We do not transmit, store, or share your location history on our servers. Your movement data stays on your phone.
1.2 User Accounts
Creating an account is entirely optional. If you choose to register (via the mobile App or the Website), we collect your email address, a password hash, and a chosen username (alias) to secure your profile. Your sightings are only synced to our secure cloud database if you explicitly turn on the "Cloud Sync" feature. You may log out, disable sync, or permanently delete your account and all associated sightings at any time via the app or krugercompanion.co.za/delete-account.
What is stored at registration
| Field | Where stored | Purpose |
|---|---|---|
| Email address | Firebase Authentication only (not in Firestore) | Login, email verification, password reset |
| Password | Firebase Auth (hashed) | Authentication |
| Alias (username) | Firestore users/{uid} | Display in Camp Chat |
| newsletterOptIn (boolean) | Firestore | Optional newsletter |
| dataProcessingConsent + timestamp | Firestore | Consent at registration (required) |
| syncEnabled (boolean) | Firestore | Cloud Sync on/off |
| createdAt | Firestore | Account creation |
Important: Your email address is deliberately not stored in Firestore (data minimisation under GDPR/POPIA).
Cloud Sync (Sightings)
When you enable Cloud Sync, your personal sighting logs are stored in users/{uid}/sightings:
- Animal ID, date/time, GPS coordinates, notes, count
- Not visible to other app users
- Only the account holder can read or delete this data
Account deletion
You can permanently delete your account under Account Settings → Delete Account in the app, or on the website at krugercompanion.co.za/delete-account (also available from your dashboard when signed in). This removes:
- Firebase Auth account
- Firestore profile (
users/{uid}) - All cloud sightings (
users/{uid}/sightings/*) - Push token (
users/{uid}/private/device) - Camp Chat subscriptions
- Referral profile fields (referral count, invite code, leaderboard opt-in) and related referral attribution records tied to your account
Note: Camp Chat messages you have already sent remain visible in the chat history (with the alias used at the time of sending) until removed by an administrator. They are not automatically deleted when you delete your account.
1.3 User-Submitted Conservation Reports
If you choose to submit sighting reports, invasive species reports, environmental incident reports (trash, road damage, erosion) or disease alerts through the App, the following information is collected at the moment of submission:
- GPS coordinates of the reported location
- Photograph (if attached)
- Report type and description
- Date and timestamp
All conservation reports are anonymised before processing. No personal identifiers are attached to any report visible to our team or to third parties including SANParks.
1.4 Donated Data
The App includes an optional Donate Data feature. If you choose to activate this feature, you voluntarily share anonymised sighting coordinates, species identifications and timestamps for conservation and research purposes. Data donation is entirely voluntary and the App functions fully without it. See Section 3 for details on how donated data is shared.
1.5 Anonymous Usage Analytics
We collect anonymous, aggregated data about how the App is used — such as which features are accessed and session frequency — to improve the App. This data cannot be used to identify you personally.
1.6 Push Notifications (Camp Chat)
If you enable push notifications for a camp chat room, we collect and store:
- Expo Push Token — a device-specific identifier used to deliver notifications. Stored in
users/{uid}/private/device(not on your public profile). - Camp subscription record — which camp(s) you subscribed to, stored in
camp_chats/{campId}/subscribers/{uid}including your push token for delivery.
Push notifications are entirely optional. You enable them per camp via the "Push On" toggle in Camp Chat. You can disable them at any time.
We use the Expo Push Notification Service (operated by Expo / 650 Industries) to deliver notifications. Expo processes your push token solely to route messages to your device. Expo Privacy Policy: expo.dev/privacy
We do not use push notifications for marketing or advertising.
1.7 Camp Chat
Camp Chat is an optional community feature available to registered, email-verified users. When you participate, the following data is stored on our Firebase servers:
Messages you send:
- Message text
- Your alias (username)
- Your user ID (UID)
- Badge name at time of sending
- Timestamp
- Optional: reply reference (quoted message text and sender alias)
- Optional: emoji reactions (your UID + emoji)
Presence data:
While you are actively viewing a camp chat, a lightweight presence record (lastSeen timestamp) is written so other subscribers can receive push notifications when you are not in the chat.
Moderation data (on your profile):
- User reports from other chat participants
- Warning count, temporary ban expiry, permanent ban flag
- Link-sharing permission flag (admin-controlled)
Camp chats require email verification before you can send messages. Messages are visible to all authenticated users in that camp's chat room. Profanity is filtered client-side; repeat violations may result in temporary or permanent bans.
Camp chat messages are not automatically deleted when you delete your account. Previously sent messages remain visible with the alias used at the time of sending.
1.8 Referral / Invite Program
The App includes an optional invitation programme. Registered users may share a personal invite link, QR code, or short invite code with friends. When a new user is successfully attributed to an inviter, the inviter receives referral points. At 10 points, an "Ambassador" badge may be awarded. An optional Top-10 leaderboard (opt-in only) may show a temporary "Top Ambassador" badge while a user remains in the Top 10.
How attribution works
- Android: A Play Store link or QR code can include an install referrer (
ref=<Firebase User UID>). After install and login, attribution is recorded server-side via the Google Play Install Referrer. - iOS: App Store links/QR codes open the store only. Attribution requires the new user to enter a 6-digit invite code manually (Settings → Account, after login). Apple does not allow equivalent automatic install attribution via QR/link.
Data we store
- Inviter identifier (Firebase user ID and/or short invite code on the inviter's profile)
- Attribution record in
referrals/{newUserUid}: referrer UID, referred UID, platform (android/ios), timestamp referralCounton the inviter's profile (server-incremented only)- Optional leaderboard flags:
leaderboardOptInandleaderboardOptInAt
Sources
- Android: Google Play Install Referrer on first launch after install
- iOS: invite code entered by the new user after registration/login
- Inviter: generated invite code / share link
Purpose
- Attribute installs/registrations to an inviter
- Award referral points, badges, and (if opted in) leaderboard ranking
- Abuse prevention (e.g. blocking self-referrals; each account can be counted as referred only once)
Visibility
- Referral attribution records are not public by default.
- Leaderboard (opt-in only): authenticated users may see chat alias and referral count only — never email or UID.
- Email addresses are not shared for referral purposes.
Processing runs on Firebase / Google Cloud (including a Cloud Function such as registerReferral), aiming for the africa-south1 (Johannesburg) region where feasible — consistent with Section 3.4.
Leaderboard participation is optional and can be turned off at any time in the App. Referral-related profile fields and attribution records tied to your account are removed or anonymised when you delete your account (see Section 1.2 and Section 5).
2. How We Use Information
We use the information we collect solely for the following purposes:
- Location data — to show your position on the park map, calculate distances and provide navigation. Processed locally on your device only.
- User accounts & cloud sync — to authenticate you, sync your personal sighting logs across devices, and manage your profile preferences.
- Camp Chat — to enable community messaging between authenticated users at each camp.
- Push notifications — to alert you of new Camp Chat messages when you are not actively viewing the chat (only when explicitly enabled per camp).
- Referral / Invite programme — to attribute invites, award points and badges, run an optional leaderboard, and prevent abuse.
- Crash reporting — to diagnose and fix app stability issues via Firebase Crashlytics.
- Conservation reports — to process, anonymise and display incident data, and to share with SANParks under a formal data sharing agreement.
- Donated sighting data — to contribute anonymised records to conservation research programmes.
- Anonymous analytics — to improve App performance and features.
- Community submissions — to review and publish user-submitted experiences and ratings on our website, as described in Section 4.3.
We do not use your information for advertising profiling. We do not sell your data to any third party.
3. Third-Party Services
3.1 SANParks and Conservation Partners
If you activate the Donate Data feature, your anonymised sighting data may be shared with SANParks Scientific Services and other named conservation partners under a formal Memorandum of Understanding (MOU). Only anonymised data is shared — no personal identifiers are included. You may withdraw consent to future data donation at any time via the App settings.
3.2 OpenStreetMap / Leaflet
The App uses OpenStreetMap and Leaflet for rendering online maps. When fetching map tiles, your IP address may be received by OpenStreetMap servers. This is a standard technical requirement of how map tile services function. No other personal data is shared with OpenStreetMap or Leaflet.
OpenStreetMap Privacy Policy: openstreetmap.org/privacy
3.3 Google Cloud Infrastructure
Server-side data (anonymised conservation reports and donated data) is stored on Google Cloud infrastructure. Google acts as a data processor on our behalf and is contractually bound to process data only as we instruct. We aim to use the africa-south1 (Johannesburg) region where technically feasible. User account data, Camp Chat, and Cloud Sync are handled via Firebase — see Section 3.4.
3.4 Firebase (Google LLC)
We use Google Firebase services as our backend infrastructure:
| Service | Purpose | Data processed |
|---|---|---|
| Firebase Authentication | User login & registration | Email, password hash |
| Cloud Firestore | User profiles, camp chat, cloud sync, referrals | Alias, sightings, chat messages, push tokens, referral counts, attribution records |
| Cloud Functions | Server-side referral attribution | Referrer/referred UIDs, platform, timestamp |
| Firebase Crashlytics | Crash & error reporting | Device model, OS version, stack traces, app version |
Firebase acts as a data processor on our behalf. Data may be processed in Google Cloud data centres. We aim to use the africa-south1 (Johannesburg) region where technically feasible.
Firebase Privacy Policy: firebase.google.com/support/privacy
Google Cloud Data Processing Terms: cloud.google.com/terms/data-processing-terms
3.5 Expo (650 Industries)
We use Expo Application Services (EAS) for:
- Push Notification delivery (Expo Push API) — routes camp chat notifications to your device.
- Over-the-air (OTA) updates — delivers JavaScript bundle updates without a full app store release.
Expo Privacy Policy: expo.dev/privacy
4. Website — Cookies and Local Storage
This section applies to our website at krugercompanion.com and is separate from the mobile App.
4.1 Cookies and Tracking
We use a consent banner to let you control optional storage and analytics. Essential storage is always active; everything else requires your opt-in.
- Essential storage: We store your cookie consent preference so we do not ask you repeatedly.
- Functional storage: If you accept functional storage, we save your packing list selections, saved routes, and community voting history in your browser's localStorage for your convenience.
- Analytics cookies: If you accept analytics, we load Google Analytics (which may set cookies such as
_ga) and Umami Analytics to measure traffic and engagement. These tools do not load until you opt in.
Your choice: When you first visit our website, a consent banner lets you choose "Accept All", "Essential Only", or customize each category. You can change your preferences at any time using the cookie icon in the bottom-left corner of the screen.
4.2 Fonts
All fonts are hosted locally on our servers. No requests are made to third-party font services such as Google Fonts.
4.3 Community Features
Our website allows anonymous ratings and experience submissions. Community ratings are stored on our server without any personally identifiable information. When you use the "Share your experience" feature or submit a blog article, you are sending an email directly to us via your own email client. We do not store these submissions on our server until they are manually reviewed and published by our team.
4.4 Website Analytics
If you opt in to analytics, we use the following services:
- Google Analytics (Google LLC): Measures page views, traffic sources, and general engagement. Google may set cookies and process data in the United States. We use Google Consent Mode so no analytics data is collected until you grant consent. IP anonymisation is enabled.
- Umami Analytics: A privacy-focused analytics service that helps us understand which pages and accommodation links are most useful. Umami does not use advertising cookies.
- Anonymous click statistics: When you click "Visit Official Website" or "Book Now" on accommodation pages, we increment an anonymous counter on our server (Firebase/Firestore). No personal information is stored with these clicks.
None of these analytics services load or collect data unless you accept the Analytics category in our consent banner.
5. Data Retention
| Data type | Retention |
|---|---|
| Location data | Never transmitted to our servers. Retained locally on your device only. |
| User account & cloud sightings | Until deleted by the user via Account Settings |
| Push token | Until push is disabled or account is deleted |
| Camp chat messages | Indefinitely (community history); alias remains visible after account deletion |
| Moderation records (bans, warnings) | Until account deletion; reports reset after 7 days |
| Crashlytics crash reports | 90 days (Firebase standard) |
| Newsletter opt-in flag | Until account deletion |
| Referral attribution & referral count | Until account deletion; then removed or anonymised with the account |
| Leaderboard opt-in flags | Until opt-out or account deletion |
| Anonymised conservation reports | Maximum of 7 years, then deleted or further anonymised |
| Donated sighting data | Maximum of 7 years |
| Anonymous usage analytics | 12 months |
| Community ratings on the website | Indefinitely in anonymised form |
6. POPIA Compliance
Tusker Trails is committed to compliance with the Protection of Personal Information Act, 2013 (POPIA) of South Africa. In line with POPIA:
- We collect only the minimum personal information necessary to operate the App and website.
- All conservation and incident reports are anonymised — no personal information is attached to any report visible to third parties.
- You have the right to access, correct or request deletion of any personal information we hold about you.
- Right to deletion: Delete your account at any time via Account Settings → Delete Account in the app, or at krugercompanion.co.za/delete-account (automatic).
- Right of access: Request a copy of your personal data by emailing hello@krugercompanion.com.
- Disable push notifications: Turn off push per camp via Camp Chat → Push Off, or delete your account.
- Leaderboard opt-out: Turn off leaderboard participation at any time in the App (referral attribution for points may continue separately if you use the invite feature).
- We have appointed an Information Officer responsible for POPIA compliance. Contact details are provided in Section 10.
- We will notify affected users and the Information Regulator in the event of a data breach, as required by POPIA Section 22.
7. EU Users — GDPR Alignment
For users based in the European Union, we aim to align our data practices with the General Data Protection Regulation (GDPR). The lawful basis for processing your data is either your consent (for functional storage, analytics, data donation, accounts, Camp Chat, push notifications, and leaderboard display) or our legitimate interest / contract performance in operating the App (for essential site operation, crash reporting, community moderation, and referral attribution when you use the invite feature).
Lawful basis by feature
| Feature | Lawful basis (GDPR) |
|---|---|
| Account & Cloud Sync | Consent (at registration) |
| Camp Chat | Consent + contract performance (use of the feature) |
| Push Notifications | Consent (explicit opt-in per camp) |
| Referral attribution | Contract performance / legitimate interest (feature use; abuse prevention) |
| Referral leaderboard | Consent (explicit opt-in; withdrawable) |
| Crashlytics | Legitimate interest (app stability) |
| Moderation | Legitimate interest (community safety) |
Your rights as a data subject
- Right to deletion: Account Settings → Delete Account in the app, or krugercompanion.co.za/delete-account (automatic).
- Right of access: Request via hello@krugercompanion.com.
- Disable push notifications: Camp Chat → Push Off, or delete your account.
- Leaderboard opt-out: Disable leaderboard participation in the App at any time.
EU users may exercise all data subject rights under GDPR by contacting us at the address in Section 10.
App Store & Google Play — Data Disclosure Summary
The following summary reflects our disclosures for Apple App Store and Google Play privacy forms:
| Category | Collected? | Purpose | Shared with third parties? |
|---|---|---|---|
| Yes (optional) | Account | No (Firebase as processor only) | |
| Name / alias | Yes (optional) | Camp Chat display | No |
| Location (GPS) | Yes | Map, sightings, reports | Anonymised only for conservation reports |
| Photos | Yes (optional) | Conservation / infrastructure reports | Anonymised to Google Sheets |
| Device ID (push token) | Yes (optional) | Push notifications | Yes (Expo as processor) |
| Crash data | Yes | App stability | Yes (Firebase Crashlytics) |
| User content (chat) | Yes (optional) | Camp Chat | No |
Tracking: No — we do not use advertising tracking frameworks, IDFA, or Google Analytics in the mobile App.
8. Children's Privacy
Our App is intended for general audiences and wildlife enthusiasts. We do not knowingly collect personally identifiable information from children under 13. If you become aware that a child has provided us with personal information, please contact us and we will take steps to delete it.
9. Changes to This Privacy Policy
We may update our Privacy Policy from time to time. You are advised to review this page periodically for any changes. Material changes will be communicated via an in-app notification. The effective date at the top of this document will always reflect the most recent version.
10. Contact Us
Tusker Trails (Pty) Ltd
Email: hello@krugercompanion.com
Information Officer: Alexander Hoppenrath
Postal Address: 1120 Vienna, Austria
Kruger Companion Privacy Policy | Tusker Trails (Pty) Ltd | Effective July 2026 · v2.3