Skip to content
gen2apps
AppsServicesWritingSupport
Start a project
AppsServicesWritingSupport
Legal

Privacy Policy

Last updated: October 14, 2026

gen2apps ("we", "us") builds focused apps for iOS and the web. We design every app to be privacy-respecting: no ads, no advertising trackers, and we never sell your data. This policy explains what we collect and why. It applies to KeepUp, Scour and our other apps and to this website. KeepUp's and Scour's app data handling and this website's own measurement are described in separate sections below.

The short version

  • KeepUp stores your habit database on your device; eligible data may also synchronize through your private iCloud account.
  • KeepUp reads selected Apple Health metrics to evaluate habit goals. Derived completion history and copies from earlier versions are described under Apple Health below.
  • KeepUp uses limited, pseudonymous product analytics. Installation and subscription identifiers can link records; this is not anonymous data.

Data you create (habits & activity)

KeepUp stores habits, activity, notes, moods, reminders and settings in the app's database. When the app starts with Premium enabled and iCloud is available, eligible data may synchronize through your private iCloud account using Apple CloudKit. Exports, shared images, widgets and paired Apple Watch features can hold separate copies of app data.

Apple Health

If you link a KeepUp habit to Apple Health, the app reads the metric you choose, such as steps, exercise time, mindful time, active energy or sleep, to evaluate that habit's goal. KeepUp does not write anything to Apple Health, and raw Health readings are not sent to us.

From version 2.7, habits that Health completes are recorded in a file on your device rather than in the app's iCloud-synced database, and no Health-related event is sent to our analytics. Versions before 2.7 recorded those completions in the app's database, which synchronizes through iCloud when that is on, and sent an event when a habit was linked to Health or completed by it. In every version, the widget and a paired Apple Watch show these completions, and exports or images you choose to share can include them. Updating the app does not by itself remove copies already synced or events already sent.

Purchases & subscriptions

Purchases and subscriptions are processed entirely by Apple, using Apple's own StoreKit, or on Android by Google Play. Whether you have Pro is decided on your device from Apple's or Google's own record of your purchase.

Apple tells our server when a subscription starts, renews, lapses or is refunded, so we can count active subscriptions, renewals and refunds. The app itself checks your purchase with Apple on your device. What Apple sends us includes the transaction identifiers it generated, the product, the purchase, renewal and expiry dates, whether the subscription is set to renew, the storefront country, the price and the currency. It does not include your name, your email, your Apple ID or any payment details — Apple never shares those with us.

RevenueCat

We use RevenueCat (RevenueCat, Inc.) as a service provider to measure purchases in KeepUp, StepKit and Scour. RevenueCat only observes purchases: you still buy through Apple or Google, and RevenueCat does not decide whether you have Pro. Since October 14, 2026, Apple's notifications about these apps' purchases go to RevenueCat first, which passes them on to our server unchanged. In app versions that include RevenueCat's software kit, the app also contacts RevenueCat when it starts and after a purchase, using the same installation identifier as our own analytics.

RevenueCat receives that installation identifier, the products bought, the transaction identifiers Apple or Google generated (on Android, Google's purchase token), the purchase, renewal and expiry dates, the price, currency and storefront country, and the technical details its software kit sends, such as the app and operating system versions, the device model, the language and the IP address a request comes from. It does not receive your name, your email, your Apple Account or Google Account, payment details, or anything you create in the apps. RevenueCat processes this data on our behalf; its own policy is at revenuecat.com/privacy.

KeepUp product analytics

KeepUp sends product interaction events to our backend hosted on Google Cloud/Firebase. Events describe app opens, onboarding, purchase screens, feature use, notification taps, sharing, completing a habit: that a habit reached its goal that day, never which habit, its name or its goal, and never for a habit linked to Apple Health; and saving a mood: at most once a day, where in the app it was saved and whether a note came with it, never the mood itself or anything written in the note. They include an installation identifier, event and screen information, app/build and OS versions, device model, and, when available, App Store storefront and device region. We also receive the app's reported Premium status and a known Apple original transaction identifier for subscription history.

The installation identifier is generated and retained locally, but is also sent with events and stored on our backend. These records are pseudonymous, not anonymous. An original transaction identifier can associate installation records with subscription history. Reinstalling the app does not erase records already held on our servers.

From version 2.8.1, when a purchase or a restore does not go through, the purchase or restore event also carries technical diagnostics so we can find out why: which ways of asking Apple's purchase system were tried, what each returned and how long it took, whether a system screen covered the app, the type and code of any error (never its message), how many app windows were open and whether the app was active, the iPhone model (such as "iPhone12,8", never the name you gave your phone), whether purchases are allowed on the device, which App Store environment the app was talking to, the renewal state of any KeepUp subscription on the Apple Account, and any lines Apple's purchase system wrote in the app's own log, reduced to letters and punctuation, with every number removed except an error code and with any address, link or identifier taken out. They never include payment details, your Apple Account or anything you typed.

KeepUp uses its own event client rather than a third-party analytics SDK. The events are processed on Google Cloud/Firebase as our hosting provider and are not shared with any analytics or advertising company. Purchase records and the installation identifier are also processed by RevenueCat, as described under Purchases above.

KeepUp for Android

KeepUp for Android stores your habits, activity, notes, moods, reminders and settings on your phone. There is no KeepUp account and no cloud sync: Android's own backup (to your Google Account, if you have it on) can carry the app's database to a new phone, and the backup file you export from Settings goes wherever you choose to save it.

If you link a habit to Health Connect, KeepUp reads the metric you choose (steps, exercise, active energy or sleep) to see whether that habit's goal is met. It never writes to Health Connect. Those readings and the completions they produce stay in a file on your phone that is left out of Android backups and exports, and no Health-related event is sent to our analytics.

The Android app sends the same product interaction events as the iPhone app (above), with an installation identifier generated on the phone, the app's version and build, the Android version, the phone's model and maker, that it is Android, and the Google Play billing country. KeepUp Pro on Android is bought through Google Play. To confirm a purchase, the app sends Google's purchase token for it to our server, which checks it with Google; Google also tells our server when a subscription starts, renews, is cancelled, expires or is refunded. We receive the product, its dates and state and Google's order number, never your payment details or your Google Account. RevenueCat receives the purchase token and the installation identifier as described under Purchases above.

Scour

Scour reads your photo library on your iPhone. Photos, thumbnails, the text Scour recognises and anything it finds in them never leave the device, and neither does which kind of sensitive data was found.

Scour sends product interaction events to the same backend: app opens, that a scan started or finished, that photos were deleted (as a count), and the purchase screen (shown, closed, a purchase tapped, completed, cancelled, waiting for approval or failed, and restores). Library size is rounded to a band before it is sent. Events include an installation identifier generated on the device, the app's version and build, the iOS version, the device family (such as "iPhone", never the exact model or its name) and the App Store storefront country. From the version after 1.1.0 they also include whether Scour Pro is active on the install and, when Pro was bought, Apple's original transaction identifier for that purchase. Scour Pro is a one-time purchase processed by Apple; Apple tells our server about the purchase and any refund, as described under Purchases above, and the original transaction identifier lets us connect that record to the install. RevenueCat also receives the purchase and the installation identifier, as described under Purchases above; it never sees your photos or what Scour found. These records are pseudonymous, not anonymous.

StepKit

StepKit keeps your steps, walks, walk routes, goals and Apple Health data on your iPhone and Apple Watch; none of it is sent to us.

StepKit sends product interaction events to the same backend: app opens, that onboarding was finished, the StepKit Pro screen (shown, closed, a plan tapped, a purchase completed, cancelled, waiting for approval or failed, the one-time option opened, and restores) and that a share sheet was opened. From version 1.0.3, StepKit's widgets also send one event a day saying that a StepKit widget is on your screen and was refreshed that day; it does not say which widget or whether you looked at it, and it never includes your steps. Events include an installation identifier generated on the device, the app's version and build, the iOS version, the iPhone model (such as "iPhone12,3", never the name you gave your phone; before version 1.0.3 only the device family, such as "iPhone") and the App Store storefront country. From version 1.0.2 they also include whether StepKit Pro is active on the install and, once known, Apple's original transaction identifier for the Pro purchase. StepKit Pro is a subscription or a one-time purchase processed by Apple; Apple tells our server about it as described under Purchases above, and the original transaction identifier lets us connect that record to the install. RevenueCat also receives the purchase and the installation identifier, as described under Purchases above. These records are pseudonymous, not anonymous. They never include payment details or your Apple Account.

StepKit for Android

StepKit for Android keeps the same promise: your steps, walks, walk routes and goals stay on your phone. Steps come from your phone's step sensor, which needs Android's Physical activity permission. If you turn on Health Connect sync, StepKit reads your steps and walking distance from Health Connect, including days from before you installed it, so your history starts there. It never writes to Health Connect, and what it reads never leaves your phone.

A walk's route uses your phone's location only while a walk you started is running, and only if you allowed Location. Maps are drawn with OpenFreeMap tiles made from OpenStreetMap data: like any map, the tile server sees your IP address and which area of the map your phone loads, not your route or your steps.

The Android app sends the same product interaction events as the iPhone app (above), from the app and once a day from its widgets, with an installation identifier generated on the phone, the app's version and build, the Android version, the phone's model and maker (such as "Pixel 8" and "Google"), that it is Android, and the Google Play billing country. StepKit Pro on Android is bought through Google Play. To confirm a purchase, the app sends Google's purchase token for it to our server, which checks it with Google; Google also tells our server when a subscription renews, is cancelled, expires or is refunded. We receive the product, its dates and state and Google's order number, never your payment details or your Google Account. RevenueCat receives the purchase token and the installation identifier as described under Purchases above.

Website analytics

This website counts visits with Cloudflare Web Analytics, a script served by Cloudflare, which already delivers the site. It writes no cookies and stores nothing on your device. It reports page views and page-load performance by page, referring site, country, browser and device type, and it does not recognise you between visits or build a profile of you.

When you follow a link from this site to the App Store, it passes through gen2apps.com/go/… on our own server, which counts the click before sending you on. The count records which app and the language of the page you came from, and nothing else about you.

Earlier in September 2026 the site used Google Analytics in a cookie-free mode; it has been removed. If we ever move to cookie-based measurement, this page will say so and the site will ask for your consent first. You can block the measurement script with any content blocker; the site works the same either way.

Feature requests

KeepUp versions before 2.7 have a suggestion screen. When you submit a suggestion there, we store its text, app, device identifier and submission time. The feature-request identifier is separate from the analytics installation identifier: Apple's vendor identifier is used when available, with a locally generated fallback. It supports submission limits and vote deduplication. Suggestions are read by us and are not shown to other users. Please do not include sensitive habit, Health or personal information in a suggestion.

Contacting us

If you use the contact form on this website, we store the message, the email address you give us so we can reply, your name if you provide one, and which app the message is about. We also keep the browser's user-agent string and a one-way hash of your IP address — the hash exists to rate-limit the form, and the address itself is never stored. Messages are kept so support requests can be answered and looked up later; email us to have one deleted.

KeepUp's "Send Feedback" option opens an email in your own mail app, addressed to us and ready for you to edit or discard. Nothing is sent unless you send it. Below your message it lists the iOS version, device model, KeepUp version and build, whether you have Pro, your App Store country when available, and the app's installation identifier, so we can match the report to the app's diagnostics. It never includes your habits or notes. We receive your email address because the message comes from it, and we keep feedback emails only to answer and follow up on them; email us to have one deleted.

Newsletter ("the drop list")

If you subscribe to our newsletter from this website, we collect the email address you provide, along with the fact that you signed up from gen2apps.com, so we can send you occasional updates about new apps and major releases. We use this address for that purpose only — not for advertising, and not shared with other companies for their own marketing. Your address is stored in our own database, on infrastructure we control, and is shared with an email delivery provider only at the moment we actually send a newsletter. Every email includes a one-click unsubscribe link, or you can email hello@gen2apps.com to be removed.

What we do not do

  • We do not sell or rent your personal data.
  • We do not include third-party advertising or ad-tracking SDKs anywhere. Our apps' product analytics, RevenueCat's purchase measurement and the website's measurement are described separately above.
  • KeepUp's habit database is separate from its analytics and feature-request services. Text you explicitly submit as a suggestion is sent to our servers.

Your choices

  • Health: revoke access anytime in iOS Settings → Privacy & Security → Health.
  • iCloud sync: turn it off in your device's iCloud settings.
  • KeepUp export / delete: you can export app data. Local data, iCloud copies, subscriptions and server-held records have separate lifecycles. Deleting or reinstalling the app does not automatically delete server-held analytics or subscription records, or cancel a subscription. Contact hello@gen2apps.com with questions about server-held information.
  • Website analytics: nothing is stored on your device to turn off; any content blocker stops the page-view script. The App Store click count happens on our server when you follow the link.

Children

Our apps are not directed to children under 13, and we do not knowingly collect personal information from them.

Changes

We may update this policy as our apps evolve. Material changes will be reflected here with a new "Last updated" date.

Contact

Questions? Email hello@gen2apps.com.

This policy is provided for transparency and may be updated as features change. For specific legal questions, please reach out.

gen2apps

A small indie studio shipping focused apps for iOS. Crafted with care, one at a time.

Apps

  • KeepUp
  • Scour
  • StepKit
  • All apps →

Studio

  • About
  • Manifesto
  • Writing
  • Support
  • Privacy
  • Terms
  • hello@gen2apps.com
© 2026 gen2apps.com — All rights reserved Built with care