com.shopnav.app) and to shopnav-mvp.vercel.appShopNav helps you build grocery lists, compare prices across nearby stores, plan multi-stop trips, and (optionally) scan receipts to improve local price accuracy. This policy explains, in plain English, what ShopNav collects, why, who processes it, and how you can delete it. If anything here is unclear, email edgarbirlew@gmail.com.
ShopNav is operated by Edgar Birlew, sole proprietor, Atlanta, Georgia, USA. There is no separate legal entity. All questions and rights requests go to edgarbirlew@gmail.com.
Required for the core feature: finding nearby stores and pulling weekly ads. You can type a ZIP or (see §2.2) grant a one-time location fix. The ZIP is stored on your device in localStorage and, if you sign in, is saved with your profile on the ShopNav server.
Only requested if you tap "Use my location" to auto-fill your ZIP, or start a route. When you do, the operating system prompts you and, if you consent, ShopNav takes one foreground GPS reading, uses it to look up the enclosing ZIP, then discards the raw coordinates. ShopNav does not read location in the background. The Android manifest declares ACCESS_FINE_LOCATION and ACCESS_COARSE_LOCATION; on iOS the same is covered by NSLocationWhenInUseUsageDescription. You can deny the prompt and type a ZIP instead — the app still works.
Only used when you tap Scan receipt or Scan barcode. The image is sent to the ShopNav server, which forwards it to Anthropic's Claude API for text or barcode extraction. On Android the manifest declares CAMERA. On iOS the same is covered by NSCameraUsageDescription and NSPhotoLibraryUsageDescription. If you never scan anything, no image data leaves your device.
If you upload, scan, or forward a receipt to your ShopNav inbox, the extractor keeps the following structured fields: store chain and branch, purchase date, product descriptions, quantities, package sizes, and unit prices. The following are explicitly discarded before storage: full payment-card numbers (only the last four digits are kept if visible on the printed receipt), full loyalty numbers, cashier names, and home addresses printed on the receipt. Extracted line-item data is used for two things: (a) your personal savings history in-app, and (b) improving aggregate local price signals for other ShopNav users in your ZIP. Aggregates never surface individual receipts.
Stored in your browser or app storage under keys like shopnav.mystores.v1, shopnav.myrecipes.v1, shopnav.excluded.v1, shopnav.tripDone.v1, and shopnav.zip.v1. If you sign in, a copy is also stored on the ShopNav server so the same list is available on other devices. If you use the Share list feature, the app generates an opaque share token; anyone with the resulting link can read that snapshot until you disable sharing.
Sign-in is optional — you can use ShopNav without an account. If you sign in, ShopNav stores whichever of these you used:
ShopNav never stores or handles passwords — all three methods use one-time codes or OAuth. When you sign in, ShopNav sets a first-party shopnav_session HTTP-only cookie with a 30-day sliding window; the app then uses that cookie to associate future requests with your profile.
On first launch, ShopNav generates an opaque random ID (e.g. d_ab12cd34) and stores it in localStorage under shopnav.device.id. It is used to keep your list and preferences continuous across launches before you sign in, and to bucket analytics events. It is not the Android Advertising ID, not the iOS IDFA, and not derived from any hardware identifier. Clearing app storage or web-site data removes it.
ShopNav sends first-party analytics events to its own backend at /api/telemetry/event. Each event contains: an event name (for example pageview, list_add_item, route_computed), the device ID from §2.7, a per-session ID generated at launch, a timestamp, the URL path, and a small properties object populated by the app (never the full contents of your list or receipt). Events are stored in ShopNav's own backend for aggregate reporting and are not forwarded to Google Analytics, Firebase, Meta, Mixpanel, Amplitude, Segment, Sentry, or any other third-party analytics or crash-reporting service.
When a JavaScript error or unhandled promise rejection occurs, ShopNav writes the error message and stack trace to localStorage on your device only. Those local errors are not transmitted anywhere unless you explicitly open the in-app Send feedback form, in which case the three most recent messages are shown to you and included in the feedback you send. ShopNav does not use Firebase Crashlytics, Sentry, Bugsnag, or any similar third-party crash pipeline.
The ShopNav backend runs on Vercel. Vercel automatically records standard HTTP request logs (IP address, user-agent, timestamps, request path, response status). ShopNav does not process or read these beyond what Vercel exposes for debugging; they are subject to Vercel's own retention.
To make the Data Safety declaration unambiguous, ShopNav specifically does not collect any of the following:
ShopNav does not sell personal data and does not share it for advertising or marketing. It does send data to the third-party services below strictly for the purposes above, each acting as a processor:
Delete your account any time from Account → Delete account in-app, or from /delete-account/ on the web. Deletion removes the profile row, all receipt records tied to the profile, saved stores, points, savings, and every sign-in index (email, phone, Google subject ID). Active session cookies for that account are invalidated server-side at the same moment.
All ShopNav backend traffic uses HTTPS (TLS 1.2 or higher). Third-party API keys are stored server-side only and are never included in the mobile app bundle or the website JavaScript. Access to production data is limited to Edgar Birlew as the sole operator. ShopNav has not yet been independently audited against MASVS or any other formal standard; report suspected security issues to edgarbirlew@gmail.com.
ShopNav is a general-audience shopping app. It is not directed to children under 13 and it does not knowingly collect personal information from anyone under 13. ShopNav does not participate in Google Play's Families program. If you believe a child under 13 has provided personal information, email edgarbirlew@gmail.com and the account will be deleted.
Depending on where you live, you may have the right to access, correct, or delete personal data ShopNav holds about you, to receive a portable copy of it, or to object to certain processing. To exercise these rights, either use the in-app Account → Delete account control or email edgarbirlew@gmail.com from the account's email address. ShopNav responds to verifiable requests within 30 days. If you are in the European Economic Area, the United Kingdom, or Switzerland, you also have the right to lodge a complaint with your local data protection authority.
ShopNav's servers run in the United States. If you use ShopNav from outside the United States, your data is processed in the United States.
Any material change to this policy will be posted here and the effective date at the top will be updated. Continued use of ShopNav after the update constitutes acceptance.
ShopNav · Edgar Birlew (sole proprietor) · Atlanta, Georgia, USA · edgarbirlew@gmail.com