Got Plenty is operated by Dusan Zivkovic, an individual developer based in Serbia, with public contact address Ibarska 14, 11010 Belgrade, Serbia ("we", "us", or "our"). We are responsible for the personal information described in this policy. Contact us at contact@rocketbyte.dev.
Your inventory is stored on your device and syncs through Apple iCloud when available. Got Plenty does not require a separate Got Plenty account. Your full private inventory and photos are not uploaded to our servers. If you choose to create a shopping link, we receive and temporarily host the selected shopping snapshot as described below. You can separately choose whether to send usage analytics and crash reports to Google Firebase to help us improve the app.
01Information stored on your device
Got Plenty stores the information you enter, including home and room names, item names, preferred brands, purchase notes, item photos, shopping list entries and purchase status. It also stores timestamps, inventory check progress and history, and app preferences so you can continue using the app between sessions.
This information is used to organize your inventory, check what needs restocking, and manage your shopping list. When iCloud is available, homes, rooms, items, item photos, shopping list entries, purchase status, and inventory timestamps sync through a private CloudKit database associated with your Apple Account. Devices using the same Apple Account can receive this inventory. Check-session progress, Undo history, selected-home preferences, and privacy choices remain local to each device. Sync depends on connectivity, iCloud availability, and available storage, and may be delayed. Private iCloud inventory is not shared between different Apple Accounts. Optional shopping-list links share a separate snapshot and do not grant access to your private inventory. Apple processes iCloud data under its own terms and privacy policy. Device backups are separate and depend on your settings.
For the optional one-time Got Plenty Pro purchase, Apple processes payment through the App Store. Got Plenty uses Apple's StoreKit transaction and ownership information to verify, restore, or revoke Pro access. We do not receive your payment card details. Restoring a purchase does not upload or synchronize your inventory.
02Optional shopping-list sharing
Pro users can create a shopping-list copy containing outstanding entries from one or multiple homes. The preview shows the home names, item names, preferred brands, purchase notes and Low/Out status that the link will contain. The link also includes a shared date. Photos, room names, inventory record identifiers and check history are excluded. Creating a link is optional and separate from your advertising and analytics choices.
The app uploads a compressed snapshot over HTTPS to our NAS located in Serbia through Cloudflare. A short, randomly generated bearer link lets recipients retrieve that immutable copy before it expires seven days after the server records its creation, subject to connectivity and service availability. Our SQLite database stores the snapshot, random link identifier, creation time and expiry time. The snapshot contains the listed home and item text and status; it is not end-to-end encrypted, so our service and its operator can access it. Compression and encoding are not encryption. No purchase proofs or purchase identifiers are sent for sharing. Creation is currently gated in the official app using StoreKit; our public API does not yet independently verify Pro ownership.
To protect shopping-link creation from unauthorized clients, replayed requests and abuse, updated versions of Got Plenty use Apple App Attest when you choose to create a link. The app asks Apple’s service for an installation-specific key and attestation, then sends the key identifier, attestation proof and signed request assertions to our service over HTTPS through Cloudflare. Apple processes the technical information needed to provide App Attest under its own terms and privacy policy. The private key remains protected by Apple’s device service and is not sent to us. Opening a shared list does not require App Attest registration.
Our service verifies these proofs and stores the installation’s key identifier, public key, app environment, assertion counter, registration and last-successful-creation timestamps, and a short rate-limit window and count. It also keeps a fingerprint of the registration proof and its challenge identifier so a safely retried registration does not reset the counter. Temporary challenge records contain a random value, purpose, key identifier and expiry. These records let us recognize and protect requests from the same app installation; they do not authenticate your identity or verify that you own Pro. App Attest records and proofs are not used for advertising or analytics, and are not sent to Firebase or AdMob. They have a separate retention period from the seven-day shopping snapshot, described in section 9. App Attest is part of the optional sharing function and does not depend on your Usage Analytics or Crash Reports choices.
Anyone holding the link can read or forward the shared copy before expiry, without paying, signing in or installing the app. Free recipients can view every included home without accessing or importing the sender’s private inventory. Sharing through Messages, email or another service provides the link to the service and recipients you choose; those services handle it under their own policies. Review home names and notes and avoid sensitive information you do not want recipients to keep. The service does not authenticate a sender or guarantee the accuracy of shopping contents.
Links expire seven days after creation and return no snapshot from that point. Expired database rows are deleted on creation, at service startup and by a cleanup task approximately every minute while the service is running; cleanup resumes on startup following downtime. SQLite secure deletion and WAL checkpointing reduce residual application database contents, but expiry cannot recall recipient screenshots, exported copies, messages, provider records or filesystem backups outside this process. No application-level snapshot backup is configured. Removing a list from Shared Lists removes only local history; there is no in-app early revocation endpoint. Contact support with the affected link if you need us to locate and remove a hosted snapshot early; providing the link also discloses access to its contents.
The app caches up to 30 received copies and 30 created links with personal checkmarks in device-local storage excluded from app backup. Cached copies close at expiry and are removed on app activation, history opening or subsequent writes. For a shared shopping list, browser local storage holds personal checkmarks and expiry, keyed by the random link identifier. The browser removes expired marks when that list expires or when a shopping page is next opened. Browser storage may remain until the browser runs this cleanup or you clear it. Checkmarks are never uploaded, synchronized between recipients or used for ads or analytics. An already loaded copy can be checked offline until expiry; initially opening a short link requires the service.
The public API applies request/body/connection limits and a bounded database capacity. For rate limiting, Nginx briefly keeps client IP-derived keys in memory; we do not keep an IP-address table or access logs. Cloudflare processes delivery/security information under its own terms. The checklist contains no ads, analytics SDKs, cookies or third-party assets. It fetches only the selected snapshot from our own API. Optional sharing does not alter advertising or analytics choices.
03Optional usage analytics
If you enable Usage Analytics, Got Plenty uses Google Analytics for Firebase to understand which features are used and where the app can be improved. We send actions such as completing setup, adding or updating items, checking inventory, using search, and managing the shopping list. Event details use fixed categories, count ranges, progress ranges and yes/no values, including whether an item has a photo, brand or note.
We do not include home or room names, item names, brand text, notes, search text, photos, or your inventory record identifiers in these events. We include the app language and technical app context. Firebase also processes an app instance identifier, app and device information, session information, and approximate location derived from IP addresses. Got Plenty does not request precise location access.
When Usage Analytics is enabled, Google Analytics may also automatically measure in-app purchase events through StoreKit, including the product identifier, product name and price, associated with its app instance identifier. We use this information to understand purchases and improve the app. This measurement follows your Usage Analytics choice; you can buy or restore Pro with Usage Analytics off. It is separate from Apple’s payment processing and the on-device ownership check, and does not give us your payment-card or bank-account details. Google describes automatic purchase measurement at (https://support.google.com/analytics/answer/10285841).
04Optional crash reports
If you enable Crash Reports, Got Plenty uses Google Firebase Crashlytics to diagnose crashes and technical failures. Reports can include crash traces, app state, app and operating system versions, device information, timestamps, installation identifiers, and fixed diagnostic codes. When both analytics and crash reporting are enabled, reports may include recent analytics events to help explain a crash.
Got Plenty does not deliberately attach your inventory text or photos to crash reports. Custom failure reports use fixed operation codes rather than the original error text.
05Advertising in the Free version
The Free version uses Google AdMob to show ads on the Home screen. Got Plenty Pro removes ads and prevents new ad requests while Pro ownership is verified. The app does not send your inventory names, brands, notes, search text, photos, or inventory record identifiers to AdMob.
The app requests non-personalized ads and disables publisher first-party ID. Non-personalized ads do not use your past activity to choose ads, but they still involve data processing. Google's Mobile Ads SDK may process IP addresses and approximate location, app or device identifiers where available, ad impressions and interactions, and technical performance information to deliver and measure ads and prevent fraud. Got Plenty does not request permission to access Apple's advertising identifier. Ads may open external services governed by their own privacy policies.
Before requesting ads, Got Plenty uses Google's User Messaging Platform (UMP) to update advertising privacy information and present any required message. The message and available choices depend on your region and the configured privacy requirements. We request ads only when UMP indicates that a request is permitted. Where available, open Settings on the Home screen, then Privacy & Diagnostics, then Ad privacy choices to review, withdraw, or change your advertising choices. Declining consent may result in limited ads or no ads, depending on the applicable choices and Google's eligibility rules. If privacy setup fails, ads remain paused and the core app stays usable. Pro users are not prompted to complete the advertising consent flow, but can still manage earlier choices where the privacy entry point is available.
Ad requests are separate from optional Firebase Usage Analytics and Crash Reports. Turning those optional features off does not turn off Free-version ads. Purchasing Pro stops new ad requests; it does not delete advertising data already received by Google. Google explains its advertising data practices at (https://policies.google.com/technologies/ads) and its partner-service processing at (https://policies.google.com/technologies/partner-sites).
06Your choices and permissions
On first use, Got Plenty asks you to choose whether to enable analytics and crash reports. Both switches initially appear off. Optional telemetry does not start until you turn on the relevant switch and save your choices by tapping Continue. You can leave both switches off and use the core app. If an earlier version saved an enabled choice through the previous preselected-switch flow, this version asks you to choose again with both switches off before starting telemetry. Existing choices with both options off remain off. These choices are stored on each device; they are separate from accepting the Terms of Service.
To change your choices later, open the gear menu on the Home screen and select Privacy & Diagnostics. Turning an option off stops future sending for that option. Turning analytics off also resets local analytics data; turning crash reporting off requests deletion of unsent crash reports. These actions do not erase reports already received by Google.
Camera access is optional and is used only when you choose to take an item photo. You can also select individual photos through Apple's photo picker. Selected or captured images are processed on your device, stored with your inventory, and included in iCloud sync when available. Got Plenty does not need access to your entire photo library. You can manage camera permission in iOS Settings, remove an item photo in Got Plenty, and use the app without photos.
07How information is shared and protected
We use Apple for iCloud sync and in-app purchases, Google Firebase for optional analytics and crash reporting, and Google AdMob for Free-version ads. We do not sell your inventory or provide inventory or shared-list content to advertising services. Optional shopping snapshots are uploaded through Cloudflare and stored temporarily on our NAS to provide the short-link feature. Apple processes Pro purchases; no Apple purchase credential is sent to our sharing service. Firebase Analytics advertising storage, ad user data, ad personalization, and identifier-for-vendors collection are disabled independently of the AdMob integration.
Where applicable data protection law requires a legal basis, the purposes and bases are as follows:
- Requested app and sharing functions: We process information necessary to provide the functions you request, including hosting and delivering a selected shopping snapshot, to perform our agreement with you. We process App Attest installation records and proofs for our legitimate interests in securing that optional service, verifying app requests and preventing replay and abuse, subject to your rights and the applicable balancing requirements. These security records are not used for advertising or analytics. A sender must have a lawful basis for any other person’s information they choose to share.
- Optional usage analytics and crash reporting: We rely on your separate consent for each option. You can withdraw that consent in Privacy & Diagnostics.
- Website delivery, security and abuse prevention: We rely on our legitimate interests in operating the website, delivering requested links, protecting the service and addressing abuse, subject to your rights and the applicable balancing requirements. This includes technical information from recipients who do not have a contract with us.
- Support: We process correspondence necessary to respond to a request about our agreement with you on that contractual basis. For other enquiries, we rely on our legitimate interest in answering correspondence and resolving reported problems.
- Advertising: We rely on the advertising choices collected through Google’s privacy message, including consent where required for storing or accessing advertising identifiers and related information. Necessary service security and fraud prevention may rely on legitimate interests where the law permits, subject to the applicable balancing requirements; this does not override a consent requirement or a refusal. Google and the advertising partners identified in the privacy message explain their own processing purposes and legal bases in their notices. Limited or non-personalized ads may still process information.
- Legal obligations and claims: We process information where necessary to meet an applicable legal obligation, and rely on our legitimate interest in establishing, exercising or defending legal claims where appropriate. A legal hold may require keeping relevant records longer.
Our providers and their roles are:
- Apple: iCloud stores and syncs your private inventory through your Apple Account, the App Store processes purchases, and App Attest provides device-backed app-integrity proofs for optional shopping-link creation. Apple provides these services under its own terms and Privacy Policy (https://www.apple.com/legal/privacy/).
- Google Analytics for Firebase: Google processes optional usage analytics on our behalf under the Google Ads Data Processing Terms (https://business.safety.google/adsprocessorterms/). Analytics is a separate service from Crashlytics. We do not enable optional Analytics account sharing for Google products and services, modelling contributions and business insights, or business recommendations. Google technical support may access Analytics information when needed to provide support.
- Google Firebase Crashlytics: Google processes optional crash diagnostics on our behalf under the Firebase Data Processing and Security Terms (https://firebase.google.com/terms/data-processing-terms). Firebase explains the service’s privacy and security practices at (https://firebase.google.com/support/privacy).
- Google AdMob and User Messaging Platform: Google provides advertising and advertising privacy messages. Google and we act as independent controllers for personal information processed through Google’s publisher advertising services; advertising partners may also act as independent controllers as explained in the privacy message. Their processing is governed by the applicable advertising terms and privacy notices (https://policies.google.com/technologies/partner-sites). Our separate Analytics and Crash Reports switches do not control this advertising processing.
- Cloudflare, Inc. and its affiliates: Cloudflare hosts and protects our public website through Cloudflare Pages, manages our domain DNS, and delivers our NAS sharing API through Cloudflare Tunnel when that service is available. Cloudflare processes service data on our behalf under its customer Data Processing Addendum (https://www.cloudflare.com/cloudflare-customer-dpa/). It also processes service, network and security information for the purposes explained in its Privacy Policy (https://www.cloudflare.com/privacypolicy/).
- Hostinger Mail: Hostinger hosts our support mailbox and handles incoming and outgoing support messages, attachments and delivery information. Hostinger processes mailbox content on our behalf under its Data Processing Addendum (https://www.hostinger.com/legal/dpa), which covers email services and the service providers it uses. Hostinger also processes account, service and security information as explained in its Privacy Policy (https://www.hostinger.com/legal/privacy-policy).
Hosted shopping snapshots are stored on our NAS in Serbia. Hostinger, Apple, Google, Cloudflare and their service providers may process information outside Serbia, including in the United States and other countries where they operate; using the app or contacting support does not mean that all information stays in Serbia. For processing on our behalf, the provider terms linked above describe the applicable contractual safeguards, including standard contractual clauses for international transfers where they apply. Google explains its transfer arrangements at (https://policies.google.com/privacy/frameworks); Apple describes its international processing in its Privacy Policy. You can contact contact@rocketbyte.dev for information about safeguards relevant to your information and how to obtain a copy.
We require providers processing personal information on our behalf to protect it consistently with this policy and applicable law, including protection equal to that required by Apple’s App Review Guidelines. Providers’ independent processing remains subject to their own applicable legal duties and notices. These arrangements do not authorize us to process information for an unrelated purpose.
We use reasonable safeguards appropriate to the information processed. Local data also depends on your device's security and backup settings. No storage or transmission method can be guaranteed completely secure.
08Website and support contact
Our public website is hosted by Cloudflare Pages. Shared shopping snapshots remain on our self-hosted NAS in Serbia and are delivered through Cloudflare Tunnel when available. The sharing service is temporarily unavailable during the NAS outage; the public website does not receive or store shopping snapshots. Cloudflare receives technical request information such as your IP address, request URL, browser or device information, and network/security metadata to deliver and protect the website. Our NAS origin servers have access logging disabled. Cloudflare processes technical delivery and security information under its terms and privacy policy. First-party aggregate counters are suspended on the Cloudflare-hosted website; it does not load the counter script or send click events to the NAS. The previous counter operation is described below for existing retained totals. The browser checklist does not use analytics scripts, advertising scripts or account forms, and does not itself set cookies. The browser checklist uses local storage for personal checkmarks as described above. The website and checklist read your browser language preferences to select a supported interface language. If you choose a language with the language switcher, we save only that language code in browser local storage so the choice is remembered across visits. This preference stays in your browser, is not uploaded to the sharing API, and is not used for advertising or analytics. It remains until you change it or clear this site’s browser storage. Item names, home names and notes are displayed as shared and are not sent to a translation service. Published legal documents remain in English. Cloudflare may process information as described in its privacy policy (https://www.cloudflare.com/privacypolicy/).
Before the hosting move on 12 November 2026, our marketing website recorded daily totals for public page requests and App Store button clicks on our NAS. Counts are grouped only by website, public page path, fixed button position and a broad referral category such as Google, social, internal or direct. The counter does not store individual event records, IP addresses, raw user-agent strings, raw referrer URLs, query strings, fragments, cookies, visitor identifiers or fingerprints. The web server classifies recognizable bots and referral sources before passing only the categories to the counter. Our ordinary hosting and security providers still process technical delivery information as explained above. Shared shopping lists, their contents, link tokens and API requests are excluded from measurement.
The counter sets no analytics cookies and sends no data to Google. A small first-party script counts designated button clicks; it does not read device characteristics for profiling or link visits to a person. Daily totals are retained for up to 400 days and then deleted. Reloads and repeat clicks count again, so these figures are not unique visitors, completed installs, purchases or visitor conversion rates. We use these limited statistics for our legitimate interest in understanding and improving our own public pages, without combining them with app telemetry or customer records.
While counting is suspended, no statistics control is shown and no new first-party counts are collected. When counting was active, you could exclude future requests from this browser using the statistics control in the website footer. Only if you use that control, we save a host-scoped preference cookie containing the single value “off”, for up to one year, so the web server can honor your choice. It is not a visitor identifier, is not renewed on visits, and can be removed by enabling statistics again or clearing browser cookies. We also honor Do Not Track and Global Privacy Control signals. Aggregate counts cannot be traced back to a particular visitor. The website switch is separate from the app’s Firebase and advertising choices, which remain unchanged. Website GA4 collection ended on 9 November 2026; previously sent information remains subject to the earlier Google retention settings.
If you email contact@rocketbyte.dev, your message is delivered to our Hostinger Mail mailbox. We and Hostinger process your email address, any name you provide, message, attachments and technical delivery information to receive and respond to your request. We use support correspondence to answer enquiries, resolve problems and handle privacy or legal requests. We retain incoming messages and sent replies in Hostinger, together with any working copies needed to handle the request. Please avoid sending unnecessary personal information or copies of your household inventory.
09Retention and deletion
- Inventory: You can delete individual items, rooms, or homes; deleting a home also removes its associated rooms, items, and shopping list. These deletions sync to iCloud and your other connected devices. Deleting the app removes its local data but does not itself delete inventory already synced to iCloud; reinstalling with the same Apple Account can retrieve it. You can manage or delete Got Plenty's iCloud data in Apple's iCloud storage settings. Changes that have not finished syncing may be lost if you remove local data or lose the device. Offloading the app can retain local data. Photos in your photo library and existing device backups are separate copies that you manage through Apple or your backup provider.
- Shared shopping links: The hosted snapshot is inaccessible after seven days and is removed by the expiry process described above. Local cached copies and checkmarks expire separately as described above. Removing local history does not immediately remove the hosted copy, and expiry cannot erase copies held by recipients, communication services or backups outside the application.
- App Attest security records: Our server stops accepting an installation key after 90 days without a successful signed shopping-link creation and removes the key record, counters, rate-limit information and registration fingerprint during cleanup. Successful signed creation starts a new 90-day inactivity period. Temporary challenges expire after two minutes and are deleted after successful use or during cleanup. Cleanup runs at startup, during relevant requests and approximately every minute while the service is running; after downtime, it resumes on startup. These periods are separate from the seven-day lifetime of a shared snapshot. Full attestation and assertion proofs are processed for verification rather than kept as a proof archive; the registration fingerprint and challenge identifier are retained with the key record. Device-local installation state is excluded from iCloud sync and device backup. Removing the app clears that local state but does not immediately remove the server record; server expiry and deletion still follow the inactivity period. These application cleanup periods do not promise deletion of independent provider security records or backups.
- Analytics: Our Google Analytics retention settings are 14 months for user-level and event-level data, with reset on new activity disabled. Google applies retention-setting changes after a 24-hour waiting period and removes expired data through its scheduled deletion process. Aggregated reporting can remain available beyond that period. See Google's retention documentation (https://support.google.com/analytics/answer/7667196).
- Crash reports: Google states that Crashlytics retains crash traces and associated identifiers for 90 days before starting removal from live and backup systems.
- Advertising: Google handles advertising data under its advertising and privacy policies. Changing ad availability or purchasing Pro does not itself delete previously processed advertising data.
- Website requests: We do not retain Nginx access logs. Cloudflare may retain network and security information under its service terms and privacy policy.
- Support correspondence: We retain routine support correspondence while a request is open and delete it within 12 months after resolution. We review resolved correspondence monthly and remove messages, attachments and working copies we control when they are no longer needed, including clearing relevant deleted-mail copies rather than treating archiving as deletion. Relevant records may be kept longer only where necessary for an ongoing dispute, establishing or defending a legal claim, or a legal retention obligation; we review those records and delete them when that reason ends. This schedule applies to the support copies we control in Hostinger and other working copies. It does not apply to copies held by the sender or independent provider security records and backups, which are handled under the provider’s retention and deletion processes. It does not promise immediate erasure from every provider backup.
You can contact contact@rocketbyte.dev to request deletion of information we hold. For hosted sharing requests, include the affected link only if you intend to give us access to its contents so we can locate the snapshot. Removing the hosted row cannot remove recipient copies. Older self-contained prototype links contain data inside the link and cannot be remotely revoked; this version no longer creates or opens those links. Other records can be harder to identify: because Got Plenty has no user accounts and telemetry does not include your inventory identifiers, we may be unable to associate a particular analytics or crash record with you. We will explain any limits and help with requests where the relevant information can be identified. Deleting the app does not itself delete telemetry already sent to Google.
10Your privacy rights
Depending on applicable law, you may have rights to access, correct, delete, restrict or object to processing of your personal information, obtain a portable copy, and complain to a data protection authority. Where processing relies on consent, you may withdraw it at any time without affecting earlier lawful processing. We rely on your consent for optional analytics and crash reporting. Contact contact@rocketbyte.dev to exercise applicable rights or ask about a transfer safeguard. You may complain to the Commissioner for Information of Public Importance and Personal Data Protection in Serbia (https://www.poverenik.rs/) or another supervisory authority competent under the law that applies to you.
11Children
Got Plenty is a general-purpose household organization app and is not directed at children. If you believe a child has provided personal information to us without the permission required by applicable law, contact us so we can investigate and take appropriate action.
12Policy updates
We may update this policy when the app or our practices change. We will publish the updated policy with a new effective date and provide additional notice or obtain new consent where required by law.