Range Stats
Privacy policy v3.3.0
Effective Date: June 10, 2026
Last Updated: October 7, 2026
Range Stats ("the App") is developed and published by Fourteener Labs, LLC ("we," "us," or "our"). We are committed to protecting your privacy. This policy explains what data the App collects, how it is stored, and your choices regarding that data.
1. Data Storage
By default, all data you enter into Range Stats is stored locally on your device using Apple's SwiftData framework. This includes your firearms collection, range trip logs, ammunition records, maintenance logs, accessories, target sessions, training courses, certifications (including CCW/CHL permits), range reviews, dealer/transfer records, and photos. Range Stats 3.3.0 and later: it also includes reloading records you choose to keep (recipes, batches, and component stock) and any certificate documents you attach to a certification or training course as a photo or PDF. A PDF is chosen through the iOS file picker, so the App receives only the file you select.
No data is transmitted to Fourteener Labs servers. We do not operate any servers that receive, process, or store your personal data.
Range Stats remains local-only unless you deliberately enable Cloud Sync and complete its full privacy and safety setup on that device. You may move data manually at any time using the App's Export / Backup features.
2. Optional Cloud Sync
Cloud Sync is optional and off by default. Merely installing or updating Range Stats, signing into iCloud, restoring a device backup, or enabling iCloud Drive does not turn it on. To enable it on a device, you must deliberately switch it on in Settings and complete separate disclosures, a device-owner authentication check, an iCloud-account check, a read-only data audit, an encrypted safety-backup export, and a final authenticated Enable action.
When enabled, Range Stats uses Apple's CloudKit service to store and synchronize your Range Stats database in the private iCloud database associated with your Apple Account. Synced content can include your firearm collection, ammunition, range trips, target sessions and images, saved range names and coordinates, maintenance, accessories, training and certification information (including attached certificate photos and PDFs), reloading recipes, batches, and component records, notes, photos, documents, prices, permit or certificate numbers, and related records. This data may count against your iCloud storage. Additions, edits, and deletions can propagate to your other devices where you separately enable Cloud Sync while signed into the same Apple Account.
Firearm serial numbers, accessory serial numbers, and dealer/transfer text details (dealer name, phone, address, and transfer notes) remain encrypted by Range Stats before storage. While Cloud Sync is on, the App refuses to store those protected fields unencrypted: if encryption is ever unavailable, the change is not saved and you are told, rather than an unencrypted value being written or uploaded. Transfer dates and the transfer type are stored and synced without app-level encryption (all synced data is additionally protected by CloudKit's own encryption in transit and at rest). If you enable Cloud Sync, the key needed to read the protected fields is copied through iCloud Keychain so your other opted-in devices can decrypt them, and the App verifies against a key fingerprint in your private database before any device may introduce a new key. Cloud Sync authorization is bound to the specific Apple Account that consented (by its CloudKit user record, which does not depend on iCloud Drive being on); signing out or switching accounts returns the device to local-only storage until setup is deliberately completed again. On every launch, Range Stats opens your data locally first and connects to iCloud only after confirming that iCloud is available, that the signed-in account is the one that consented, that no account-wide deletion is pending, and that the protected-field key matches; if any check cannot be completed, the App stays local-only for that session and tries again later. Please note a behavior of iOS itself: when you sign out of iCloud on a device, or turn iCloud off for Range Stats in iOS Settings, iOS removes the synced copy of Range Stats data from that device. Range Stats cannot prevent this once Cloud Sync is active; the encrypted safety backup required during setup is the recovery path, and the in-app disclosures say so before you enable Cloud Sync. Fourteener Labs does not operate an account system for Cloud Sync, receive a separate copy of your private CloudKit database, or receive your backup password. Apple operates iCloud, CloudKit, iCloud Keychain, and the associated account infrastructure under Apple's Privacy Policy and applicable terms.
You can turn Cloud Sync off for a device in Settings; the change applies after Range Stats reopens its data container. Turning it off does not delete records already stored in iCloud, turn it off on another device, or delete the synchronized encryption key. Individual record deletions made while Cloud Sync is active may propagate to other opted-in devices. Version 3 also provides a separate "Delete Synced Data from iCloud" flow. It requires a fresh encrypted backup, confirmation that other opted-in devices are closed, an explicit permanent-deletion acknowledgement, device-owner authentication, and an available iCloud account. After Range Stats reopens in local-only mode, it deletes and verifies the App's custom private CloudKit record zones, removes the synchronized protected-field key, and erases that device's local Range Stats records. Deletion only proceeds against the same Apple Account that scheduled it, and only the device that requested it deletes the iCloud copy. Two independent signals make older Cloud Sync authorizations fail closed when a previously opted-in device reopens: a synchronized deletion marker in iCloud Keychain, and a tombstone record in your private CloudKit database that reaches devices even when their iCloud Keychain sync is turned off. A device that observes either signal erases only its own local copy and turns its Cloud Sync off; it never deletes the account's iCloud data or keys, so a device opened long after the deletion cannot remove data you have since synced again. If iCloud becomes unavailable before the deletion completes, you can erase the device's local copy immediately after device-owner authentication, and the App retries the iCloud deletion each time it opens or comes to the foreground, reporting its unverified status until CloudKit confirms; records you add after that point are never erased by the retry, and Cloud Sync cannot be turned on again until the deletion is verified. Keep the backup until you have verified the result on every device. The ordinary "Delete All Data" action is separate and must not be treated as account-wide cloud erasure.
Apple states that data stored in iCloud by third-party apps can be reviewed and deleted through iCloud storage management, even when the data is not visible in iCloud Drive. On iPhone or iPad, open Settings, tap your name, tap iCloud, then tap Storage or Manage Account Storage and select Range Stats if it appears. Available controls and labels can vary by system version. See Apple's guide to third-party app data in iCloud and Apple's iCloud storage instructions.
3. Data We Collect
Range Stats does not collect, transmit, or share any personal data with Fourteener Labs or any third parties. Specifically:
- No account required. You do not need to create an account, provide an email address, or sign in to use the App.
- No analytics or tracking. We do not use any analytics SDKs or tracking frameworks. Crash diagnostics are handled on-device via Apple's MetricKit framework (see Section 12).
- No advertising. The App contains no ads and no advertising SDKs.
- No sale of data. Your data is never sold. Fourteener Labs does not receive a copy of your records. Data leaves the device only through features you deliberately use, including optional Cloud Sync described in Section 2, AI Coaching described in Section 4, exports you share, and optional crash reporting described in Section 12.
4. AI Coaching Feature
Range Stats includes an optional AI coaching feature. You choose the AI provider it uses in Settings > AI Coaching: Google Gemini (default), Anthropic Claude, OpenAI, a custom OpenAI-compatible endpoint you configure, or Apple's on-device model (Apple Intelligence). Before any data is sent to a cloud provider for the first time, the App presents a consent prompt naming that specific provider. You must explicitly agree before any data is transmitted, and consent is requested separately for each provider you switch to.
When you use this feature with a cloud provider:
- Target session data (shot counts, accuracy scores, group measurements, and caliber/distance information) and an annotated target photo are sent to the provider you selected — and only that provider — to generate coaching feedback.
- This data is transmitted directly from your device to the selected provider's servers. It does not pass through Fourteener Labs servers.
- API keys you provide are stored securely in your device's Keychain and are never transmitted to Fourteener Labs. The App does not ship with any embedded API keys.
- Each provider's use of this data is governed by its own terms: Google Gemini API Terms, Anthropic's Terms, or OpenAI's Policies. If you configure a custom endpoint, the operator of that endpoint receives the data under whatever terms apply to it.
- If you select Apple On-Device, coaching runs entirely on your iPhone via Apple Intelligence: no API key is needed, no consent prompt is shown, and no target data or photos leave your device.
- This feature is entirely optional. If you do not use AI coaching, no data is sent to any AI provider. You may decline the consent prompt at any time and cloud coaching will remain unavailable until you agree.
5. Location Data
The App includes a range finder feature that uses your device's location services to display nearby shooting ranges on a map within a user-configurable search radius. Your location is used in real time only and is never recorded, stored, or transmitted by the App. You may also enter range locations manually without granting location access.
Location permissions can be revoked at any time in your device's Settings > Privacy & Security > Location Services.
6. Photos & Camera
You may attach photos to firearms, range trips, target sessions, training course certificates, and certification/permit documents within the App. When photos are imported or captured via the camera:
- Photo metadata is stripped at import. GPS coordinates and all other embedded photo metadata — including EXIF, TIFF, and IPTC data such as timestamps, camera make/model/serial information, and vendor-specific data — are removed from the image before it is saved to the App. This means your shooting location and camera details are not retained in stored photos even if your camera captured them. Image orientation is preserved.
- Photos are stored locally on your device and are included in your private CloudKit database only if you deliberately enable Cloud Sync.
- Automatic bullet-hole detection on target photos (including the neural detection model) runs entirely on your device — target photos are never uploaded for detection.
- Photos are never transmitted to Fourteener Labs. They leave the device only through optional Cloud Sync, AI coaching, or an export/share action you deliberately initiate.
Camera and photo library access can be managed in your device's Settings > Privacy & Security.
7. Home Screen Widgets
Range Stats offers optional Home Screen and Lock Screen widgets. Widgets display a small summary (round counts, cleaning status, accuracy trends, ammo counts, renewal countdowns, and your latest target) generated by the App and stored in the App's own protected app-group container on your device. Widget data is never transmitted off your device and is not accessible to other apps. An optional "Discreet Widgets" setting replaces firearm names with generic labels and hides dollar values in all widgets. Widget data is removed when the App is deleted.
8. Notifications
Range Stats may request permission to send local notifications for maintenance reminders and certification, permit, and training-course certificate expiration alerts. These notifications are generated entirely on your device. No notification data is sent to any server. You can manage notification permissions in your device's Settings > Notifications.
9. In-App Purchases
Range Stats offers a one-time in-app purchase ("Range Stats Pro") processed entirely through Apple's App Store. Fourteener Labs does not receive, process, or store any payment information. All purchase and billing data is handled by Apple under Apple's Privacy Policy.
10. App Lock (Face ID / Touch ID)
You may optionally protect the App with a biometric lock (Face ID, Touch ID, or your device passcode) in Settings. When enabled:
- Authentication is performed entirely on your device by Apple's LocalAuthentication framework. The App never sees, stores, or transmits your biometric data — it only receives a pass/fail result from iOS.
- Disabling the app lock requires confirming your identity first, so someone briefly holding your unlocked phone cannot switch the protection off.
- A "Lock Now" option lets you immediately re-lock the App at any time.
Separately, and regardless of whether App Lock is enabled, the most sensitive firearm record fields — serial numbers and Form 4473 / acquisition details (dealer name, phone, and address, and transfer notes) — are encrypted at rest using AES-256-GCM. The encryption key is held in your device's Keychain and is never transmitted to Fourteener Labs. If you deliberately enable Cloud Sync, a synchronizable copy of that key is placed in iCloud Keychain so your other opted-in devices can decrypt the protected fields. This applies to records created or edited in version 2.2 and later.
11. Data Export & Sharing
You may export your data as CSV, JSON, or PDF files from within the App. You may also generate Insurance Documentation Reports (per-firearm cards or full collection reports) and shareable firearm cards using the built-in export features. When you export or share:
- All export files are generated on your device.
- Export files are written with iOS file protection enabled and are automatically deleted from temporary storage after the share sheet is dismissed.
- Files are shared using iOS's standard share sheet — we do not receive copies of exported or shared data.
- Serial numbers, dealer information, and range GPS coordinates are excluded from exports by default. You may opt in to include them in Settings > Export Options.
- When an export will contain sensitive data (serial numbers, dealer contact details, or range coordinates), the App displays a warning before the export is created reminding you that the file is not encrypted and should be shared carefully.
- Backup files may optionally be encrypted with a user-supplied passphrase before export. Range Stats 3.2.0 and later: backups are encrypted by default with a key that lives only in your iCloud Keychain, so they restore on your own Apple devices without a password; you may instead protect a backup with a password of your own (needed to restore on a non-Apple device or under another Apple Account) or export it unencrypted. Backups include your photos and target scan images; when a photo library would push a backup past the size limit, the App offers a records-only backup without photos. Fourteener Labs never receives backup files, keys, or passwords.
- Scheduled backups (Range Stats 3.3.0 and later, optional, off by default): you may have the App write a password-encrypted backup to a folder you choose, daily, weekly, or monthly. iOS does not let apps run on a timer, so the file is written the next time you open Range Stats after a backup is due. So that this can happen without asking each time, the backup password you set is stored in the Keychain on that device only; it is not synced through iCloud Keychain, is not included when you move to a new device, and is erased when you change or turn off the schedule or erase the App's data. The App remembers the folder you picked and keeps the five most recent automatic backups there, removing only older files it wrote itself. Fourteener Labs never receives the password, the folder location, or the files.
12. Crash Reporting
Range Stats uses Apple's MetricKit framework for on-device crash detection. This is a privacy-preserving approach with no third-party SDKs involved:
- On-device only. Crash diagnostic data is processed on your device by Apple's MetricKit framework. No crash data is automatically transmitted to Fourteener Labs.
- Xcode Organizer. Apple may make anonymized crash reports available to us via Xcode Organizer as part of your device's standard diagnostics sharing with developers, which you control in Settings > Privacy & Security > Analytics & Improvements.
- Optional user-initiated reports. If the App detects a crash from the previous session, it may present an optional prompt asking if you'd like to email a crash report to our support team. This is entirely voluntary. If you tap "Send Report," a diagnostic summary (containing device model, iOS version, app version, and crash stack trace — no personal data or firearm information) is opened in your Mail app for you to review and send. If you decline, no data is sent.
13. Data Deletion
You can delete individual records (firearms, trips, accessories, maintenance logs, target sessions, training courses, certifications, range reviews, photos) from within the App at any time. "Delete All Data" removes records from the currently active store only. If Cloud Sync is active and you intend to erase the synchronized Range Stats dataset, use Settings > Cloud Sync > "Delete Synced Data from iCloud" and complete its backup, acknowledgement, authentication, restart, and verification steps. Reopen every previously opted-in device afterward so it can observe the deletion marker and erase its older local copy before using Cloud Sync again. Deleting the App removes its local data but does not by itself delete records already stored in your private iCloud database or data on another opted-in device. You can also use Apple's iCloud storage-management controls described in Section 2. Fourteener Labs has no server-side copy or Range Stats account to delete.
14. Children's Privacy
Range Stats is not directed at children under the age of 13. We do not knowingly collect any data from children.
15. Changes to This Policy
We may update this Privacy Policy from time to time. The "Last Updated" date at the top of this page reflects the most recent revision. Continued use of the App after changes constitutes acceptance of the updated policy.
16. Contact Us
If you have questions about this Privacy Policy, contact us at:
