Skip to main content

1. Privacy Policy

Effective date: August 12, 2026

This Privacy Policy describes how ShopAI collects, uses, stores, and shares information across the ShopAI web application (shopaiweb.vercel.app) and the ShopAI iOS and Android apps. It is written to describe what these specific applications actually do — if a practice isn't described below, ShopAI does not currently do it. Where the web app and mobile app differ, this policy says so explicitly using the labels shown throughout: Web + MobileWeb onlyMobile onlyServer-side.

2. Scope

ShopAI is a grocery price-comparison product built as two separate applications that share a common design and, in places, ported code:

  • The ShopAI web app, a Next.js application hosted on Vercel at shopaiweb.vercel.app, with its own backend (Next.js API routes running on Vercel — no separate server).
  • The ShopAI mobile app, a React Native (Expo) app for iOS and Android, which talks to its own independently deployed backend (an Express server hosted on Render, referred to below as the mobile backend).

These are two separate deployments with similar logic, not one shared service — the mobile backend does not receive web traffic and the web app's Vercel backend does not receive mobile traffic, and neither maintains a shared account database (see “Information Stored Locally”). This policy covers both, and calls out platform-specific differences (for example, the mobile app uses PostHog and Sentry; the web app does not) explicitly rather than describing one and implying the other matches.

3. Information We Collect

At a high level, ShopAI involves these categories of information. Each is covered in full detail in the sections that follow:

  • Account information — name, email, ZIP code, and an optional weekly budget, provided at sign-up.
  • Shopping activity — cart contents, search history, items marked picked-up, price-comparison history, and shopping-list/planner preferences.
  • Search queries and location — the text you search for, your ZIP code, and, if permitted, precise device location.
  • Trip/route information — a starting location and selected store stops, when you use route planning.
  • Mobile analytics and crash data — product-usage events and crash reports, mobile app only (Section 6).
  • Web performance data — page-load speed metrics, web app only (Section 7).

ShopAI does not collect a password (neither app has a password field), a mailing address, payment/billing information, or a government ID. Neither app has payment or checkout functionality of any kind.

4. Information Stored Locally

Web + MobileBoth apps store your account and shopping activity only on your own device— in your browser's local storage on web, and in the app's on-device storage (AsyncStorage) on mobile. Neither app has a server-side account database. Sign-up asks only for your name, email, and ZIP code — there is no password on either platform, and your email is not verified.

Stored locally, per account, on both platforms:

  • Name, email, ZIP code, and optional weekly budget
  • Your most recent 20 search terms
  • Cart contents
  • Items you mark as picked up during a route (used for pantry reminders and personalized suggestions)
  • Price-comparison history built from products you've searched
  • Shopping-list/planner preferences (e.g. a remembered substitution choice)
  • A cache of product photo lookups (product name → image URL, not tied to your identity)

Mobile onlyThe mobile app additionally stores, locally only: a randomly generated analytics device identifier and your analytics opt-out preference (see Section 6), general shopper preferences, and (present in the code but currently unreachable — see Section 6's note on disabled features) a Virtual Fridge item list that the shipped app has no screen to create.

Web onlyThe web app additionally uses one browser session-storage key (cleared when you close the tab) to limit an in-app prompt to once per visit.

None of the information in this section is transmitted to a ShopAI server as a stored record — it stays on your device until you clear it (see Section 13) or, for the mobile app, until you uninstall it.

5. Information Sent to ShopAI

Web + MobileBoth apps send information to their respective backend only at the moment you actively use a feature that needs it — this is processed to return you a result and is not written to a persistent ShopAI database (neither backend operates one; see Section 11):

  • Search: your search text and ZIP code, and — only if you grant location permission — your device's precise coordinates.
  • Route planning: your starting location (coordinates or ZIP code) and the store stops you select.
  • Product photo lookup: a product's name (and occasionally a store product-page URL).

Mobile onlyOn the mobile app, requesting location permission is described to you as: “ShopAI uses your location to start your shopping route from where you are” (the permission prompt text on iOS). Only foreground location is requested on both iOS and Android — neither app requests background/always-on location.

What each backend does with this at the moment of the request is covered in Section 9 (Third-Party Services). Precisely, and worth calling out: on both platforms, the backend's own diagnostic logging writes the raw search text and ZIP code (not coordinates) into that platform's server logs — see Sections 6 and 7 for exactly where.

6. Mobile Analytics and Crash Reporting

Mobile onlyThis entire section applies to the mobile app only. The web app uses neither PostHog nor Sentry.

PostHog (product analytics)

The mobile app sends product-usage events to PostHog (hosted at PostHog's US region endpoint, us.i.posthog.com, per the app's configuration) to understand feature usage. Every event is tied to a randomly generated identifier created on your device at first launch (not your name, email, or ShopAI account — see deviceId.ts), stored locally and reused until the app is reinstalled. To describe this precisely rather than simply calling it “anonymous”: this identifier is not directly tied to your name or email within ShopAI's own code, but it is a persistent, per-install identifier, and PostHog, like any service reached over the network, receives your device's IP address with every event — PostHog's default behavior is to use IP address for coarse geolocation (city/region/country) unless an app disables that, which this app does not. PostHog also auto-captures standard device/app metadata with every event: app version, OS name and version, and device type.

The specific events sent (verified against src/services/analytics/events.ts, the app's own source of truth):

  • App opened; screen viewed (screen name only — no data entered on that screen)
  • Sign-up completed / sign-in completed (method only, e.g. “email” — never the email address itself) / sign-out
  • Search started / search completed (duration, result count, cache hit, store count — never the search text) / search failed (duration, a sanitized error category — never a raw error message)
  • Product viewed (store and category only), store selected, comparison completed (counts and a savings estimate, no product names)
  • Shopping list created/item added, route started/completed (counts only)
  • App error shown (a flag only — no stack trace; see Sentry below for that)
  • Analytics opt-out toggled

None of these events include your raw search text, email, name, ZIP code, or exact location — that much matches ANALYTICS.md's own claim, and this page verified it directly against the event-schema code rather than assuming the documentation is current.

Your choice:Profile → Privacy → “Help improve ShopAI” lets you opt out at any time. PostHog analytics is on by default(not an opt-in consent gate) — ShopAI's own position, stated in its engineering documentation, is that first-party product analytics like this does not require Apple's App Tracking Transparency prompt because it is not shared with third parties for cross-app ad targeting; this is ShopAI's determination, not a citation of settled Apple policy, and it has not been independently reviewed by a lawyer as part of this audit.

Sentry (crash and error reporting)

The mobile app sends crash and render-error reports to Sentry, initialized with default settings (session tracking on; no custom filtering configured in code). A report to Sentry includes the error's type, message, and stack trace, the React component tree at the time of the error, and Sentry React Native SDK's standard automatic context: device model, OS version, app version, locale, and recent breadcrumbs (a trail of recent app activity Sentry attaches to help debug the crash).

Precise finding, not in ANALYTICS.md:the app's network client (apiClient.ts) logs every search request and response with console.log, including the raw search text, ZIP code, and coordinates sent to the backend. Sentry's React Native SDK, by default, captures recent console output as breadcrumbs, and this app does not configure a breadcrumb filter to strip that. In practice, this means a crash report generated shortly after a search could include your recent search text, ZIP code, and location as breadcrumb context, even though no code deliberately sends search content to Sentry as a named property. This is worth being precise about rather than describing Sentry data as limited to “just crash/stack-trace data.”

Sentry does not have its own opt-out toggle in the app today — the Profile → Privacy opt-out described above only controls PostHog and this app's own captureException wrapper call, which does check that same opt-out flag before reporting to Sentry, so opting out does stop future Sentry reports as well as PostHog events.

No session replay or screen recording

Neither PostHog nor Sentry is configured in this app to record your screen, session replay video, or touch/gesture capture — only the discrete events and error reports described above.

Camera, photo, barcode, and voice — present in code, not active in the shipped app

The mobile app's codebase contains screens for camera-based product-quality scanning, barcode scanning, list/receipt photo OCR, and voice dictation. As of this app's current build configuration (src/config/features.ts), every one of these is disabled and has no reachable entry point in the app's navigation — verified in code, not just documentation. The currently active iOS build target requests only location permission (no camera, microphone, photo-library, or speech-recognition permissions are declared). If any of these features are re-enabled in a future release, this Privacy Policy will need to be updated before that release ships, since it would introduce camera/photo/audio data collection this page does not currently describe.

7. Web Performance Monitoring

Web onlyThis entire section applies to the web app only. The mobile app does not use Vercel Speed Insights.

The web app uses Vercel Speed Insights to measure real-user page performance: Largest Contentful Paint (LCP), Interaction to Next Paint (INP), Cumulative Layout Shift (CLS), First Contentful Paint (FCP), and Time to First Byte (TTFB), per page, collected automatically from your browser. This does not include your name, email, search text, ZIP code, or any account or search information — it measures how fast pages load and respond, not what you did on them.

Vercel, the web app's hosting provider, also automatically records operational metrics for the web app's backend (request duration, invocation counts, error rates per API route) as part of standard infrastructure monitoring — not a separate analytics product ShopAI configured.

Separately, the web app's backend writes its own timestamped diagnostic log lines (perfLog, used for engineering debugging of search and route-planning speed) to Vercel's server logs. These log lines do include the raw search text and ZIP code you enter, alongside timing numbers. They are not sent to a separate analytics or advertising vendor, but they are not stripped of that content either — they are standard server request logs, governed by Vercel's own platform log retention, not a ShopAI-operated analytics database.

Server-sideFor completeness: the mobile app's backend (on Render, not Vercel) has the equivalent diagnostic logging with the same behavior — it also writes raw search text and ZIP code to Render's server logs during a mobile search request. Vercel Speed Insights itself only runs on the web app; the mobile app has no directly comparable page-load metric since it isn't a browser.

8. How We Use Information

  • Locally stored account information lets each app recognize you between visits and pre-fill your ZIP code for search — this happens entirely on your device; the backend sees your ZIP code only at the moment you run a search.
  • Search text and location are used, at the moment of each search, to query grocery retailers' pricing and product data and return results to you.
  • Trip origin and store stops are used, when you plan a route, to request driving directions and render a map.
  • A product's name is occasionally used to look up a fallback photo when a retailer's own listing doesn't include one.
  • Mobile onlyMobile analytics events are used to understand feature adoption and engagement; crash reports are used to find and fix bugs.
  • Web onlyWeb performance data is used to understand and improve page load speed for real visitors.

ShopAI does not use your information for advertising and does not build an advertising profile — neither app has an advertising integration of any kind.

9. Third-Party Services

ShopAI relays information to the following third parties, only as needed to provide the feature you're using, and does not share information with any of them for advertising:

ServicePlatformWhat's sentWhy
Kroger (official retailer API, incl. Harris Teeter)BothSearch text, ZIP/locationLive pricing and product data
Aldi, Sprouts, Trader Joe'sBothSearch text, ZIP/locationLive pricing and product data, via direct queries to each retailer's public store systems
AlbertsonsWebSearch text, ZIP/locationLive pricing and product data. (Listed in the mobile app's store roster too, but currently marked unavailable/non-functional there.)
Whole Foods Market, PublixMobileSearch text, ZIP/locationLive pricing and product data (mobile-only retailers; not queried by the web app)
OpenStreetMap NominatimBothZIP code or addressConverts it to map coordinates for store distance/routing
OSRM (router.project-osrm.org, a public routing service)BothTrip origin and store-stop coordinatesComputes driving directions
OpenFreeMap (map tiles) and unpkg.com (map library assets)BothMap viewport coordinates (reflecting your live location during active navigation), device IP addressLoads the visual map for the Route feature — standard behavior for any map tile service
Open Food FactsBothA product's nameFallback product photo when a retailer doesn't provide one
PostHogMobileAnalytics events and device identifier described in Section 6; device IP address (inherent to any network request)Product analytics
SentryMobileCrash/error reports described in Section 6, including console-log breadcrumbsCrash and error reporting
VercelWebAll web-app traffic, as its hosting provider; plus performance data described in Section 7Hosting, and Speed Insights performance monitoring
RenderMobileAll mobile-app backend traffic, as its hosting providerHosting the mobile app's backend

ShopAI does not integrate any advertising network, social media SDK, or data broker, and does not use Google Analytics, Meta Pixel, or any similar advertising-tracking product on either platform.

A note on cookies:Both backends use cookies internally, server-side, to maintain their own sessions with some of the grocery retailers above so they don't have to re-authenticate on every search. These cookies are exchanged only between ShopAI's servers and the retailer's servers — Web onlyon the web app, they are never set in, or readable from, your browser. Mobile onlyThe mobile app doesn't use cookies in its own UI/storage at all — this session-cookie mechanism is purely server-to-server, on the backend, regardless of platform.

10. How Information Is Shared

ShopAI does not sell your information.

ShopAI does not share your account information (name, email, ZIP code, search history) with any third party, because that information never leaves your device in the first place — see Section 4. The information shared with outside parties is what's described in Section 9: search text and location shared with grocery retailers and mapping/routing services at the moment you use a feature that needs them; and, on mobile only, analytics events and crash reports shared with PostHog and Sentry as described in Section 6.

11. Data Retention

  • Locally stored data (Section 4) persists until you clear it (Section 13) or, on mobile, until you uninstall the app. Neither app sets a retention period for this, because neither app stores it — your device does.
  • Search, trip, and product-photo requests processed by either backend are not written to a persistent ShopAI database — both backends are stateless (no database), aside from a short-lived in-memory product-photo cache (kept for up to 30 days, then discarded).
  • Server logs (including the diagnostic log lines described in Sections 6 and 7) are retained according to Vercel's (web) or Render's (mobile) own platform log retention settings, which this document does not independently specify a duration for.
  • Mobile onlyPostHog and Sentry retain the events/reports described in Section 6 according to their own platform retention policies and ShopAI's account-level settings on each — this document does not specify a duration, since none is established in this codebase.

12. Data Security

Web onlyThe web app is served over HTTPS with HTTP Strict Transport Security enabled, so data in transit between your browser and its servers is encrypted. Mobile onlyThe mobile app's backend is configured to be reached over HTTPS in release builds.

Data stored locally on your device (browser local storage on web, AsyncStorage on mobile) is notencrypted by ShopAI — it is stored the way your browser or operating system stores any app's local data, and its protection depends on your own device and platform security. Neither app operates a server-side database, so there is no ShopAI-controlled data store to describe encryption-at-rest for.

13. Your Choices and Data Requests

Because your account and shopping data are stored only on your own device, you are already in direct control of most of it:

  • To review it: Web onlyon the web, it's under your browser's local storage for shopaiweb.vercel.app (visible in developer tools). Mobile onlyOn mobile, it's in the app's own storage on your device.
  • To delete it: Web onlyclear your browser's site data for shopaiweb.vercel.app. Mobile onlyUninstall the app, or use its own data if a future release adds an in-app reset.
  • Mobile onlyTo stop analytics/crash data going forward: turn off Profile → Privacy → “Help improve ShopAI”, which stops both future PostHog events and future Sentry crash reports from that device.

Clearing local storage or uninstalling the app removes information from your device only. It does notdelete information already sent to third parties (PostHog, Sentry, grocery retailers, mapping services) — ShopAI does not currently have an automated mechanism to request deletion from those services on your behalf. If you'd like to raise a specific request, contact us at the email in Section 17 and we will do what we reasonably can; PostHog's and Sentry's own privacy policies may separately describe rights you can exercise directly with them.

Neither app currently offers an in-app “delete my account” action, because neither maintains a server-side account to delete.

14. Children's Privacy

ShopAI is not directed at children under 13, and ShopAI does not knowingly collect information from children under 13. Neither app's sign-up flow verifies a user's age.

15. International Users

ShopAI's infrastructure runs primarily in the United States (the web app's hosting on Vercel and the mobile backend's hosting on Render; PostHog is configured to use its US-region endpoint). If you use ShopAI from outside the United States, information described in this policy may be processed in the United States and in other countries where ShopAI's third-party service providers listed in Section 9 operate.

Neither app implements region-specific data handling today — there is no GDPR-style consent banner, no data-residency control, and no verified international-transfer mechanism (such as Standard Contractual Clauses) in this codebase. This section describes where processing happens as best this audit can determine; it is not a claim of GDPR, UK GDPR, or other international-compliance status, which would require legal review beyond what the code shows.

16. Changes to This Privacy Policy

ShopAI may update this Privacy Policy as either application changes. The effective date at the top of this page reflects the version you're currently reading.

17. Contact Information

Questions about this Privacy Policy or ShopAI's data practices can be directed to:

deeptanshu.devatha@gmail.com

Effective date: August 12, 2026