MyGroceryPal privacy policy

Version 2026-10-14. Last updated 14 October 2026.

MyGroceryPal compares UK supermarket prices. This policy says what we collect, why we are allowed to collect it, who else sees it, how long we keep it, and how you change your mind.

Who we are

MyGroceryPal is the controller of the personal data described here. It is run independently in the United Kingdom.

Write to hello@mygrocerypal.co.uk about anything in this policy, including to exercise any of your rights. We have not appointed a data protection officer, because we are not required to.

This policy covers the MyGroceryPal app on iOS and Android, the website at mygrocerypal.co.uk, and the MyGroceryPal browser extension.

Your choices

Three things are optional, and two of them are off until you turn them on.

On the website, Google also asks whether its ads may use cookies, and in the app it may ask the same about its ads. Those choices are Google's to record, not ours, and changing them changes nothing above: see Advertising on the website and Advertising in the app.

If you are signed in, our servers note each day you use MyGroceryPal, whatever your analytics choice. We keep the date against your account, with the platform (app, website or extension) and app version you last used, never what you did, and use them only to count how many people come back each week and on which platform. Nothing is read from or stored on your device for it. We keep each date for 13 months, and delete them all when you delete your account. It is under our legitimate interest in knowing whether MyGroceryPal is useful; to object, email us and we will stop.

To change any of them:

Turning something off is exactly as easy as turning it on, in the same place, and takes effect at once. Withdrawing consent does not make our earlier processing unlawful, but it stops the processing from then on.

Recordings now cover the app as well as the website, so we ask again anyone who chose about recordings before 15 September 2026. That answer covers analytics and recordings together.

We keep any earlier choice to allow analytics without recordings. We change it only when you use the Product improvement control or make a new choice in the prompt.

On the website and in the app, allowing or declining analytics and recordings in the prompt does not change your crash-reporting choice. You can turn crash reporting off separately in Privacy settings.

The extension's prompt answers both of its choices at once: Accept all allows product analytics and keeps crash reports on, and Reject all refuses analytics and turns crash reports off. Choose Manage to answer them separately.

We keep a record of each choice you make, so we can show what you agreed to and when. That record is in the table below.

What we process, and why

PurposeLawful basisWhat we collectWho processes itWhereHow long
Running the service — showing prices, saving your basket, keeping you signed in Contract, and legitimate interest for guests who have no account Your device identifier; your saved products and baskets; loyalty card numbers you add; your store and region settings; your email address and account identifier if you sign in MyGroceryPal; Auth0 for sign-in; Cloudflare in front of our servers United Kingdom. Auth0 is hosted in the United States. Until you delete your account. Guest data is held against the device identifier only.
Personalising deals Legitimate interest in showing you relevant deals, and in checking that the order we show them in helps If you are signed in, the products you view and share, and which deals and search results we showed you and in what order. Never your search text. MyGroceryPal United Kingdom 90 days
Counting returning users Legitimate interest in knowing whether MyGroceryPal is useful. You can object by email. If you are signed in, the dates you used the app, website or extension, the platform and app version you last used, and whether you created your account in the app or website, the extension or ChatGPT. Recorded whatever your analytics choice. If you allow analytics, we also record which screen asked you to sign up. MyGroceryPal United Kingdom 13 months, and deleted with your account. Where you created your account is kept until you delete it
Recording your privacy choices Legal obligation — we must be able to show what you agreed to The purpose, whether you allowed it, the policy and consent version, how and where you decided, the browser or app you used, and a truncated IP address MyGroceryPal United Kingdom 24 months from the decision, even if you delete your account
Security and abuse prevention Legitimate interest in keeping the service available Request logs, daily rate-limit counters keyed on your account or your IP address, and short-lived sign-in codes MyGroceryPal; Cloudflare United Kingdom Rate-limit counters 90 days. Sign-in codes 24 hours.
Crash reporting — diagnosing errors so the app keeps working Legitimate interest. You can object, and it stops. The error and where in the code it happened, your app version and platform, your device identifier, your analytics identifier if you allow analytics, and your account identifier if you are signed in. Not your IP address, and not your email address. Sentry Germany Deleted automatically at the end of Sentry's retention period, currently 30 days
Analytics — understanding which features get used Consent. Off until you allow it. Which screens and features you use, searches you run, an analytics identifier created by Amplitude, and your account identifier if you are signed in. Not your IP address, advertising ID, mobile carrier or device manufacturer. Amplitude European Union 12 months. On request, and when you delete your account, we send Amplitude an erasure request for everything it holds against your account identifier, and keep retrying it until it succeeds. That request only takes an account identifier, not a device identifier, so it cannot reach anything you sent before you first signed in: those events carry only an identifier Amplitude assigned before you had an account, and they are deleted after 12 months instead.
Session replay — a replay of your use of the app or your visit to the website, to find usability problems Consent. Off until you allow Product improvement, which includes analytics and masked recordings of the app and website. A recording of the screens and pages you saw and what you tapped, with all text and everything you type masked out, and loyalty card barcodes and the camera view blocked. Only some of those visits. Amplitude European Union 30 days from when Amplitude receives the recording, or 90 days if we bookmark it to look into a problem. Erased by the same request as your analytics profile.
Notifications — price drops, restocks and reminders you asked for Consent for marketing messages. Contract for messages about something you set up, such as a price alert. Your push token, your notification settings, and a record of what we sent MyGroceryPal; Expo for push delivery; Apple and Google for delivery to the handset Expo is hosted in the United States Until you turn notifications off, or delete your account
Email — email about your account, and separately email about deals and features Contract for account email. Consent for marketing email, recorded per type. Your email address, your per-type email settings, and delivery events such as bounces MyGroceryPal; Amazon Web Services (SES) London (AWS eu-west-2) Until you delete your account. A list of addresses that bounced or unsubscribed is kept indefinitely, so we do not email them again.
Feedback and product reports Legitimate interest in fixing what you tell us is wrong Your message, its type and the screen you sent it from, your app version and platform. If you are signed in, your account. If you gave one, a reply address. MyGroceryPal. A copy is emailed to us so we can read and reply to it; that mailbox is a personal Google Gmail account. United Kingdom. The emailed copy is held by Google, which may store it outside the UK. Kept. If you delete your account the message stays but is detached from you. The emailed copy is a separate record in our own mailbox.
MyGroceryPal Pro — selling the optional subscription and giving you what it includes Contract. Checking whether you can have the free trial before you buy: legitimate interests (telling you the offer that actually applies to you) Your account identifier, which RevenueCat uses as your subscriber id; which plan you bought; your purchases, renewals and cancellations as the App Store, Google Play or our website checkout reports them; the email address you give at website checkout, for receipts; whether Pro is active and until when; and the store you bought it in. When you are signed in to the app and it shows you Pro or an ad, it sends your account identifier to RevenueCat to ask whether you can still have the free trial. We never see your card or payment details. MyGroceryPal; RevenueCat. Apple or Google take an in-app payment under their own terms; Stripe takes a website payment for us, and we never see your card details. RevenueCat and Stripe are hosted in the United States Until you delete your account. When you do, we ask RevenueCat to delete its record of you too. Deleting your account cancels a subscription bought on the website, but not one bought in the App Store or Google Play: cancel that there.
Improving search Legitimate interest The search text and filters used, and how many results came back. Not linked to you, your account or your device. MyGroceryPal United Kingdom 90 days

We do not process special category data. We do not sell your data. We do not use it for advertising ourselves: ads on the website and in the app are served by Google, as Advertising on the website and Advertising in the app below explain. There is no automated decision-making that produces legal effects for you.

The device identifier

Your device has a random identifier, and it is not optional. Every request the app makes to our servers carries it. It is how our servers know that a request from someone who is not signed in comes from a real MyGroceryPal app, and which saved data belongs to it. The app cannot work without it, so it is not covered by the choices above.

It is a random value we generate on first launch. It is not your device's serial number, not an advertising ID, and not any identifier your phone gives to anyone else. On its own it tells us nothing about you.

Using that identifier for telemetry is a separate matter, and it does follow your choices. Tagging a crash report with it rides the crash reporting basis, which you can object to. Attaching it to an analytics profile happens only if you allow analytics. Turn analytics off and there is no analytics profile for it to be attached to. Object to crash reporting and no crash report is sent at all.

What we store on your device

This is everything MyGroceryPal writes to your device. On the website most of these are entries in your browser's local or session storage. Three are cookies instead: one from Auth0, always; two from Amplitude, only if you allow analytics. Cloudflare, which serves the site, may also set cookies of its own to tell people from bots. If the website shows ads, Google's ad code sets its own cookies: see Advertising on the website. Clearing site data removes all of them. In the app they are app storage, and uninstalling removes them. If the app shows an ad, Google's ad software keeps its own data and your ad choice in app storage too: see Advertising in the app.

Strictly necessary

These are needed for the service to work, so they are not covered by the choices above.

KeyWhat it is forHow long it lives
device_idThe device identifier described aboveUntil you clear site data or uninstall
@mygrocerypal:consent:<subject>A copy of your privacy choices, so the app can honour them before it has reached our server. <subject> is your account identifier, or guest if you are not signed in, so a choice you made on an account cannot carry over to the next guest who uses this device.Until you clear site data or uninstall
Auth0 sign-in entries. On the website, keys beginning @@auth0spajs@@ in local storage. In the app, credentials in the iOS Keychain or the Android Keystore.Keeping you signed in. Written and named by Auth0's own SDK, not by us.Until you sign out
auth0.jq9nHgG8IGKC30uNRxOav7PEl1TRIOCs.is.authenticated (website, cookie)Strictly necessary. Tells Auth0's SDK a session probably exists, so it can skip an extra check with Auth0 before it asks. Holds no token, just a marker. Written and named by Auth0's own SDK, not by us.1 day from when it was last set
AMP_2001dd3b9d, AMP_MKTG_2001dd3b9d (website, cookies)Amplitude's analytics device id, session id and opt-out state, and the referrer or campaign the page was opened with. Written only if you allow analytics, and deleted when you withdraw it. In the app the same values are app storage, not cookies.Up to 365 days
session.started.v2.<account id>Marks that this sign-in has been registered, so it is not registered twiceRemoved when you sign out or switch account
authCallbackRecoveryAt (website)Stops a failed sign-in redirect from loopingWritten once, acted on for 5 minutes
pendingOnboardingCompletion (website, session storage)Carries an unfinished sign-up across the redirect back from Auth0Until the tab closes
pendingSignUpSourceWritten only if you allow analytics. Remembers which screen sent you to sign up, across that same redirect, so it can be saved with your new account1 hour
@mygrocerypal:registeredPushTokenThe push token already registered, so it is not registered againRemoved when you turn notifications off

Your settings, and what the app remembers

None of these are sent anywhere. They exist so the app opens the way you left it.

KeyWhat it is forHow long it lives
@mygrocerypal:themePreferenceLight or darkUntil cleared
@mygrocerypal:hasCompletedOnboardingV2Whether you have been through onboardingUntil cleared
@mygrocerypal:notificationStoresWhich stores you want alerts forRemoved when you sign out
lidl-regionYour selected Lidl regionRemoved when you sign out
@mygrocerypal:dealsFilters, @mygrocerypal:selectedStorePills, @mygrocerypal:dealsOnlyFilter, @mygrocerypal:freeFromOnlyFilter, @mygrocerypal:savedFilter, @mygrocerypal:savedStoreView, @mygrocerypal:uncheckedOnlyThe filters you last choseUntil cleared
@mygrocerypal:dealsSort, @mygrocerypal:lidlSortThe sort order you last choseUntil cleared
@mygrocerypal:comparisonCollapsedWhether the price comparison panel is collapsedUntil cleared
@mygrocerypal:searchHistoryYour last 8 searches, offered back as suggestions. You can clear this in the app.Until you clear it
@mygrocerypal:brandAlertsSeenAtWhen you last looked at brand alerts, so the badge is rightUntil cleared
@mygrocerypal:hasSeenSavedRenameSheet, @mygrocerypal:firstSaveNudgeShown, @mygrocerypal:savedEmailCaptureDismissedAt, @mygrocerypal:savedEmailCaptured, mygrocerypal:intent_modal_seenTips and prompts you have already seen or dismissed, so you are not asked twiceUntil cleared
@mygrocerypal:compareSavedCtaDismissedAt, @mygrocerypal:guestPriceDropAskDismissedAt, @mygrocerypal:keywordAlertsBannerDismissedAt, @mygrocerypal:marketingNudgeDismissedAt:<type>, @mygrocerypal:storeLinkInterceptSeenAtWhen you dismissed a banner or prompt, so it is not shown again straight away7 to 90 days, then it can show again, depending which one. One of them, once dismissed, does not come back at all.
@mygrocerypal:firstOpenDate, @mygrocerypal:lastReviewPromptDate, @mygrocerypal:favouriteCount, @mygrocerypal:triggerFired:listItemAdded, @mygrocerypal:triggerFired:nthFavourite, @mygrocerypal:reviewPromptMinorVersionDecides whether and when to ask you to rate the app, so it is asked rarelyUntil cleared. Two are reset when the app updates.
@mygrocerypal:pendingDeepLink, @mygrocerypal:pendingNotificationUrlHolds a link you tapped until the app has started enough to open itRemoved as soon as it is used
mygrocerypal:pending_saveHolds something you tried to save before signing in, so it is not lost1 hour
storeLinkInterceptArmed (website, session storage)Remembers that you were about to visit a supermarket, so we can ask how it went when you come backUntil the tab closes
@mygrocerypal:installReferrerConsumed (Android)Marks the Play Store install referrer as read, so it is read onceUntil cleared

Written only if you allow analytics

In the app and on the website, if you allow analytics, Amplitude's SDK loads and writes entries of its own. On the website these are two cookies: AMP_2001dd3b9d, holding an analytics device id, a session id, and whether you have opted out; and AMP_MKTG_2001dd3b9d, holding the referrer and any campaign parameters the page was opened with. Both last up to 365 days, and withdrawing consent deletes both. In the app it is ordinary app storage, not a cookie — the SDK is told not to use cookies there — and its entries are named with an AMP prefix. Until you allow analytics, none of this runs, so none of it is written at all. Withdrawing consent stops it again. The extension does not load Amplitude's SDK at all, so it writes none of these entries; it sends its own events, and only if you allow analytics there. See below.

The browser extension

The extension stores four things of its own: local:device_id, its device identifier; local:consent, the privacy choices you made in it; local:auth_session, your sign-in tokens if you sign in; and session:auth_pkce, a short-lived value that secures the sign-in exchange and is discarded straight after. Removing the extension removes all four.

On a supermarket product page the extension reads that page's web address and sends it to our servers, to look up prices elsewhere. It does not read your browsing history, and it does nothing on any other site.

The extension asks before it reports anything about how it is used. The prompt appears in its popup, the first time you open it, and covers two things: Product analytics, which is feature usage events sent to Amplitude, and Crash reports, which is errors sent to Sentry. Product analytics is off until you allow it, so nothing reaches Amplitude before you answer, and nothing reaches it at all if you say no. Crash reports are on from the moment the prompt appears, under our legitimate interest in a working extension, and you can turn them off in the same place. The extension does not record sessions.

To change either choice later, open the popup and choose Privacy choices. These are the extension's own choices, kept against its own device identifier, and separate from the ones you make in the app or on the website.

MyGroceryPal in ChatGPT

You can add MyGroceryPal to ChatGPT as an app. When ChatGPT asks us something for you, it sends the product search text or product ids for that question, and OpenAI's pseudonymous identifier for your ChatGPT account. We use them to answer that one request. We do not keep the search text, we do not link the products to you, and we do not use any of it to build a profile. Product ids join the anonymous count of which products people look at. The identifier, or the IP address the request came from, goes into the daily rate-limit counter described below.

Comparing a basket or setting an alert needs your MyGroceryPal account. Connecting signs you in through Auth0, as the app does, and gives ChatGPT a token that can do only those two things. If you have no account, connecting creates one, and we record that it was created from ChatGPT. Alerts set from ChatGPT are ordinary MyGroceryPal alerts and reach you however your notification settings say. You can disconnect in ChatGPT's settings at any time, and delete your account in the app as usual.

What you type into ChatGPT is handled by OpenAI under its own privacy policy. We only see what ChatGPT sends us.

Who else processes your data

ProcessorWhat it doesWhat it receivesWhere
Auth0 (Okta)Sign-in and account credentialsYour email address, your login, and the profile you signed up withUnited States
CloudflareServes the website and protects our serversEvery request to the website, including your IP address, your browser and the page requestedGlobal network
SentryCrash and error reportingErrors, app version and platform, your device identifier, your analytics identifier if you allow analytics, and your account identifier if signed in. Not your IP address, not your email address.Germany
AmplitudeProduct improvement: usage analytics and masked recordings of the app and website, if you allow themFeature usage events and an analytics identifier. In the app, on the website and in the browser extension, only if you allow analytics.European Union
Oracle CloudHosts our servers: the database, the search index and the price dataEverything our servers holdLondon
Amazon Web ServicesSending our email, and storing encrypted database backupsYour email address and the message; backups of everything our servers holdLondon (eu-west-2)
ExpoDelivering push notificationsYour push token and the notification textUnited States
Apple and GoogleDelivering that notification to your handsetYour push token and the notification textGlobal
RevenueCatRunning the MyGroceryPal Pro subscription, and its website checkoutYour account identifier, the email address you give at website checkout, and your subscription purchases and renewalsUnited States
StripeTaking payment for Pro bought on the websiteYour card details, email address and billing country, entered in the checkout; we never see your card detailsUnited States

Everything else runs on our own servers, hosted by Oracle in London.

Sending data outside the UK

Auth0, Expo, RevenueCat and Stripe are hosted in the United States, and Cloudflare, Apple and Google run global networks. Auth0, Cloudflare, RevenueCat and Stripe transfers rely on the standard contractual clauses with the UK Addendum in each provider's data processing terms. Expo's rely on its certification under the UK Extension to the EU-US Data Privacy Framework. The emailed copy of your feedback sits in a personal Google Gmail mailbox, which Google may store outside the UK under its own consumer terms, not processor terms. Amplitude is on its European Union instance and Sentry is in Germany, so telemetry does not leave Europe. Ask us if you want more detail about any of these arrangements.

How long we keep things

Crash reports are answered by retention, not by deletion

We want to be straight about this one. Sentry gives us no way to delete one person's crash reports on request, so we are not going to promise one.

Instead: a crash report carries no name, no email address and no IP address. The only identifiers on it are your device identifier, your analytics identifier if you allow analytics, and, if you were signed in, your account identifier. Every report is deleted automatically at the end of Sentry's retention period, currently 30 days, whether you ask or not. If you object to crash reporting, nothing further is sent from that moment and what exists ages out.

Affiliate links

Some links out of MyGroceryPal earn us a commission. We label those, and it never changes the price you pay or the order we show prices in.

Once you follow any of these links you are on that company's site, under its privacy policy rather than ours.

Advertising on the website

The website may show ads served by Google AdSense. The browser extension shows no ads; the app's are covered in Advertising in the app below.

Google's ad code loads on the website's Deals feed, search results, aisle and brand pages and product pages, once you have answered our privacy prompt either way, and on Profile › Privacy when you choose Change ad choices. The first time, Google's consent message, certified under the IAB Transparency and Consent Framework, asks whether ads may use cookies and similar technologies. If you decline, Google shows only limited, non-personalised ads. To change your answer at any time, open Profile › Privacy and choose Change ad choices.

We and Google are joint controllers for the data Google's ad code collects on our pages. Google alone decides how that data is used afterwards, under its own privacy policy. We receive only aggregate reports of impressions and earnings, never anything that identifies you.

Advertising in the app

The app may show ads in the Deals feed, among search results, on aisle and brand pages and at the foot of product pages, served by Google AdMob.

Nothing is asked of Google until you have answered our own privacy prompt either way. Then, before the first ad, Google's consent message, certified under the IAB Transparency and Consent Framework, asks where the law requires it whether ads may use your data. Its answer decides whether an ad is requested at all; if you decline, Google shows only limited, non-personalised ads, or none. On iPhone and iPad, from version 2.3.10, if Google's consent message allows personalised ads, the app then asks Apple's permission to track you across other companies' apps. Only if you allow both may Google personalise ads using your device's advertising identifier; otherwise the app asks Google for non-personalised ads only. You can change the tracking answer at any time in your iPhone's Settings, under Privacy & Security › Tracking. Earlier versions of the app never ask and request non-personalised ads only. On Android, Google may read your phone's advertising ID where your choice allows it; you can reset or delete that ID in your phone's settings.

To serve, measure and protect ads, Google's ad software collects your IP address, information about your device and the app, an advertising identifier where allowed, and your ad choice. To change your answer at any time, open Profile › Privacy and choose Change ad choices; the option appears wherever Google's consent message applies to you.

We and Google are joint controllers for the data Google's ad software collects in the app. Google alone decides how that data is used afterwards, under its own privacy policy: policies.google.com/technologies/partner-sites. We receive only aggregate reports of impressions and earnings, never anything that identifies you.

Your rights

Under the UK GDPR you have the right to:

There is no self-service data export yet. Email hello@mygrocerypal.co.uk and we will put your data together by hand and send it to you. We will answer within one calendar month of your request, as the law requires. If a request is unusually complex we may extend that by up to two further months, and we will tell you why inside the first month if we do. There is no charge.

To help us find your data, send your request from the email address on your account. If you have never signed in, give us the device identifier instead. We may ask you to confirm who you are before we release anything.

Complaints

If you are unhappy with how we have handled your personal data, tell us first at hello@mygrocerypal.co.uk, with "complaint" in the subject line. We will acknowledge it within 30 days and answer it properly as soon as we can. This is our complaints procedure under section 103 of the Data (Use and Access) Act 2025.

You can complain to the Information Commissioner's Office at any time, and you do not have to come to us first. The ICO is at ico.org.uk/make-a-complaint, or 0303 123 1113. You also have the right to a judicial remedy.

Children

MyGroceryPal is not aimed at children, and we do not knowingly collect data from anyone under 13. If you think a child has given us personal data, email us and we will delete it.

Changes to this policy

The version number at the top of this page changes whenever the policy changes materially. If a change affects something you consented to, we will ask you again about that specific thing rather than assume your old answer still stands. Minor corrections do not trigger a new request.