Privacy Policy

Effective · Applies to rootedapproved.com and the ROOTED app for iOS and Android

ROOTED rates products against published standards and maps places to buy real food. It runs on very little of your data, and this page says exactly what that is.

The short version

1Who we are

ROOTED is published by Jack Basseer, Santa Monica, California, United States. For anything in this policy, write to team@rootedapproved.com. We are an online-only business and email is our primary contact route; requests made from inside your account count as well.

2What we collect and why

Everything below was written from the site's own code, not from a template. If it is not in this table, we do not collect it.

WhatWhenWhyWhere it goes
Email address, passwordWhen you create an accountTo sign you in and to send sign-up confirmation and password-reset emailsSupabase, our sign-in and database provider. Passwords are stored hashed; we never see them.
Name (optional)Only if you give one when you create an accountShown to you on your profileSupabase, stored as your account's name. Leave it blank and nothing is stored.
Membership statusWhen you start or change a membershipTo know whether the member features are switched on for youStripe handles the purchase. To start it, our server sends Stripe your email address and your ROOTED account ID, so the payment can be matched to your account. We store your Stripe customer ID, subscription ID and status, your membership tier, whether the membership will renew, the dates your paid period and any grace period end, and whether a payment is in dispute, in the account database.
Payment event logWhen Stripe tells our server about a payment, a renewal, a refund or a disputeSo each event is applied once, and so there is a record of why a membership changedSupabase: Stripe's ID for the event, its type, the time, what we did with it and your account ID. No card data, no amounts and no email. If an event cannot be matched to an account, we keep Stripe's customer and subscription IDs for it and retry the match for 30 days.
Payment detailsWhen you payTo charge your membershipStripe only. Card number, billing name and address are entered on Stripe's checkout page and never touch ROOTED's systems.
Assistant questionsWhen a member asks the ROOTED Assistant or the map's AI searchTo generate the answerNothing is sent until you allow it: the first time you ask, the app explains what is sent and to whom, and you choose Allow or Not now. You can withdraw it in Profile. Once allowed, the question is sent through our own server to Anthropic's Claude with up to the last eight messages of your conversation and the ROOTED product or listing records relevant to it; for a map search, what you typed and the area searched. Your name, email and account are not sent. ROOTED does not store your questions or the conversation. The answer to the first question in a conversation is kept for up to 24 hours, as the answer cache row below says.
Assistant usage countEach Assistant messageDaily and per-minute limits so a runaway script cannot run up a billTwo counters keyed to your account ID, kept on Cloudflare: the daily one for about 26 hours and the per-minute one for about two minutes, then gone.
Assistant allowance counterEach Assistant answer that uses a member's monthly allowanceTo enforce the allowance of 400 units per monthSupabase, one row per member per month: your account ID, the start date of your monthly window, the units used and the number of in-depth answers used. No question text and no answer text. Deleted with your account.
Assistant answer cacheWhen the Assistant answers the first question in a conversation, or a map searchSo that the same question, asked again by anyone, can be answered without a new request to Anthropic and without using the allowanceCloudflare, for up to 24 hours: the answer, filed under a one-way fingerprint of the question and of the ROOTED records sent with it. The question itself, your account ID, your name and your email are not stored with it, so it is not tied to you. If a question included personal details, the answer may repeat them, so please leave them out of questions.
Assistant and map-search counts (aggregate)Each Assistant question and each map searchTo see how often each feature is used and what it costs to runCloudflare: the date, which route answered, the model, token counts and speed. No account ID and no question text, so a count is not tied to you.
Your location (precise)Only if you tap "use my location" and allow itTo centre the map on youRead by your device and used on the spot. Never stored or sent to ROOTED. See the note below about map services.
Your approximate location (from IP address)The first time you open the map in a sessionTo start the map somewhere useful without asking permissionYour IP address is sent to GeoJS, which returns a city-level location. The result is kept in your browser for the session and never sent to ROOTED.
Map searchesWhen you type a city, zip code or address into the map's search box and searchTo find the place you typed so the map can move thereThe text you typed is sent to OpenStreetMap's Nominatim service, which returns that place's coordinates. It goes straight from your browser to Nominatim, never to ROOTED, with no account, name or email attached. Nominatim receives your IP address in the act of answering, like any website.
Metro requestsIf a member asks us to add their area to the mapTo count which areas to build nextYour account ID and the area's name, stored in Supabase against your account. Deleted with your account.
Newsletter emailOnly when you type it into the newsletter box and press JoinTo send the newsletterMailchimp. This is separate from your account.
Site usage (aggregate)Every page viewTo see which pages are readCloudflare Web Analytics: page URL, referrer, browser and operating system type, country and load time. It sets no cookies and does not identify or follow individual visitors.
Error reportsOnly when something in our own code throws an error in your browserTo find and fix faults we would otherwise never hear aboutSentry, our error monitoring provider: the error and where in our code it happened, your browser and operating system type, and the page path with any query string removed. We switch off Sentry’s session recording and performance tracing, and we strip your account from the report before it is sent, so an error is not tied to you. Sentry receives your IP address in the act of receiving the report and we do not store it. Reports come only from the website: the app does not send them.
Request logsEvery requestServing the site and its services, and stopping abuseNetlify (the website host), Cloudflare (our small server functions) and Supabase (sign-in and the account database) receive the usual request metadata, including IP address, for a limited time.

A note on the map

The map's tiles come from CARTO, so as you pan and zoom, CARTO's servers receive requests for the area you are looking at, like any online map. To label the map with the city it is showing, the centre of the view, rounded to about a kilometre, is sent to OpenStreetMap's Nominatim service. When you search the map for a place, what you typed in the search box is sent to the same Nominatim service to find it. None of these requests carries your name, your account or your precise position, and ROOTED keeps none of it.

3What stays on your device

The website keeps a small number of settings in your browser's local storage: card style, colour theme, home-screen layout, navigation style, which Rooted U lessons you have finished, a cache of which product images loaded, and two lists that make Recommendations work: the products you saved and the products you recently viewed. It also keeps your choice about sending Assistant questions to Anthropic, if you have made one. If you are signed in, your sign-in session token is stored there too; it is sent only to Supabase and to ROOTED's own server functions, to show that a request comes from you. None of the rest is transmitted to ROOTED or anyone else, and clearing your browser data removes all of it. The app stores the same things inside the app.

4What we do not do

5Who receives your data

These are the service providers ROOTED runs on. Each receives only what its row says, only to provide that service to us, and each publishes its own privacy policy.

ProviderReceivesFor
SupabaseEmail, optional name, hashed password, membership fields, the payment event log, the Assistant allowance counter, metro requests; request metadata including IP addressSign-in and the account database
StripeName, email, payment card, billing address; your ROOTED account IDMembership payments and the billing portal
AnthropicAssistant question text, the last few turns of that conversation, and the ROOTED records relevant to itGenerating Assistant answers. Under the commercial terms we use, Anthropic does not train its models on this data.
MailchimpNewsletter email address, on sign-up onlyThe newsletter
CloudflareRequest metadata for our server functions; aggregate page-view analytics and aggregate Assistant and map-search counts; the Assistant usage counters; Assistant answers held for up to 24 hours with no account attachedRunning the image, payment, Assistant and food-data functions, and site analytics
SentryErrors thrown by our own code: the fault and where it happened, your browser and operating system type, and the page path without its query string. Not your account, not your name, not a recording of your sessionFinding and fixing faults
NetlifyRequest metadataHosting the website
CARTOMap tile requests for the area on screenThe map's base layer
OpenStreetMap FoundationThe map view's centre, rounded to about a kilometre; the text you type into the map's search boxNaming the city the map is showing, and finding the place you search for
GeoJSYour IP address, once per sessionA city-level starting point for the map

Product images are fetched through ROOTED's own image function, so the brands and retailers whose products we rate do not see your visit. The USDA food directory that feeds part of the map is read in bulk by our server; no query of yours reaches the USDA. We may also disclose information if the law requires it, and we would say so here if that ever happened.

6How long we keep it

DataKept
Account and profileWhile your account exists. Deleted when you delete your account.
Membership recordsYour membership fields and records are deleted with your account. Deleting your account cancels your membership but does not delete Stripe's record of you as a customer (name, email, billing address and saved card), and Stripe keeps its record of past transactions for as long as financial regulations require it to.
Assistant conversationsYour questions and the conversation are not stored by ROOTED: the conversation lives in the page while it is open and is gone when you close it. The one exception is the answer cache below. Messages you send to the ROOTED Assistant are processed by Anthropic. Under Anthropic's commercial terms, your messages are not used to train their models. Anthropic's retention of API data is governed by their published commercial data retention policy at platform.claude.com. Content flagged for a usage policy violation may be retained longer.
Assistant usage countersAbout 26 hours for the daily counter and about two minutes for the per-minute one.
Assistant allowance counterWhile your account exists. There is one row per month, and past months are not deleted on a schedule today. All of them are deleted when you delete your account.
Assistant answer cacheUp to 24 hours, then gone. It is not tied to an account, so deleting your account does not remove an answer sooner.
Payment event logKept as a record of what happened to a membership, and not deleted on a schedule today. When you delete your account, your account ID is removed from it and the rest of each entry stays: Stripe's ID for the event, its type, the time and what we did. An event that never matched an account keeps Stripe's customer and subscription IDs.
LocationNever stored by ROOTED. The IP-based city estimate is kept in your browser for the session only.
Map searchesNever stored by ROOTED. OpenStreetMap Foundation's handling of the requests it receives is set out in its own privacy policy.
Metro requestsDeleted automatically with your account.
Newsletter addressUntil you unsubscribe using the link in any newsletter. Deleting your account does not unsubscribe you, because the newsletter is a separate list.
Error reportsHeld by Sentry under the retention period set on our project, then deleted. They are not tied to your account.
Request logs and analyticsA limited period set by the hosting providers, for security and operations, under Netlify's, Cloudflare's and Supabase's privacy policies. Analytics are aggregate and not tied to you.
Settings on your deviceUntil you clear your browser data or uninstall the app.

7Deleting your account and data

You can do this yourself, without contacting anyone, on the website and in the app.

  1. Open Profile and choose Delete Account.
  2. Type DELETE to confirm, then press Delete my account.
  3. That is all. What happens next runs on our server, in this order, and takes a few seconds.

If a step fails, nothing is left half-done silently: the page tells you exactly what was completed and what to do next. After deletion, what remains is only what section 6 says: Stripe's customer record and transaction record, the payment event log with your account ID removed, your newsletter subscription if you had one, settings on your own device, and whatever short-term logs the hosting providers hold. If you would rather we do it for you, email team@rootedapproved.com from the address on the account.

8Your rights, including under the CCPA

Everyone who uses ROOTED, wherever they live, can ask us to tell them what we hold about them, correct it, or delete it. California residents have these rights under the California Consumer Privacy Act, and this section is our notice under it.

Categories of personal information

CCPA categoryExamples we collectSourceDisclosed toSold or shared
IdentifiersEmail address, name, account ID; IP address in request logsYou; your deviceSupabase, Stripe, Mailchimp, Netlify, Cloudflare (service providers); account ID also to StripeNo
Commercial informationMembership status and payment history; how much of the Assistant allowance you have usedYou; StripeStripe, SupabaseNo
Internet activityAggregate page views and feature counts; request logs; error reports from our own codeYour deviceCloudflare, Netlify, SentryNo
GeolocationCity-level estimate from IP; the map area on screen; places you type into the map's search. Precise location only on your device, with your permission, never collected by usYour deviceGeoJS, CARTO, OpenStreetMap FoundationNo
Sensitive: account credentialsYour password, hashedYouSupabaseNo
User contentAssistant questionsYouAnthropicNo
InferencesNoneNo

We use each category only for the purpose in section 2 and keep it only as long as section 6 says. We do not use or disclose sensitive personal information for any purpose other than signing you in.

Your rights

How to exercise them

Delete or correct from inside your account, or email team@rootedapproved.com. To verify a request made by email, we ask that it come from the address on the account, and we may reply to that address to confirm before acting. An authorised agent may make a request for you if they provide your signed permission and we can confirm the request with you. We answer within 45 days, and if we need longer we will tell you why. We do not offer financial incentives in exchange for personal information.

9Security

The site is served only over HTTPS with strict transport security and an enforced content security policy that limits which services the page can talk to. Passwords are hashed by Supabase and are never visible to us. From the site and the app, your profile row can be read only with your own sign-in token. One of ROOTED's server functions, the one that handles payments and account deletion, holds an administrative key to the account database; it is kept as a secret on Cloudflare and is never sent to a browser. Card details are handled entirely by Stripe. No system is perfectly secure, and if we ever learn of a breach affecting your data we will tell you.

10Children

ROOTED is not directed at children and we do not knowingly collect personal information from anyone under 13. We do not sell anyone's information, including that of anyone under 16. If you believe a child has created an account, email us and we will delete it.

11The iOS and Android app

The app is the same site inside a native shell, and everything on this page applies to it. The app asks the operating system for location permission only when you tap "use my location", and you can withdraw that permission in your device settings at any time. The app does not track you across other companies' apps or websites and contains no advertising or tracking SDK. Account deletion is available inside the app exactly as described in section 7. The app does not send error reports to Sentry.

12Changes and contact

When this policy changes, the effective date at the top changes with it and, for anything material, we will say what changed. On September 28, 2026 map searches were added to sections 2, 5, 6 and 8: what you type into the map's search box was already being sent to OpenStreetMap's Nominatim service, and this policy did not say so. On September 29, 2026 the policy was corrected to what the site's code does, and the name was made optional at sign-up: Stripe receives your ROOTED account ID; Stripe's customer record survives account deletion; Supabase receives request metadata; the sign-in token is sent to our own servers and Supabase; the app sends no error reports; and Assistant questions are sent only after you allow it. On October 6, 2026 the Assistant allowance counter, the Assistant answer cache, the aggregate Assistant and map-search counts and the payment event log were added to sections 2, 5, 6, 7 and 8, and the short version was changed to match: ROOTED now keeps the answer to a first question for up to 24 hours. Section 9 was corrected: one server function holds an administrative key to the account database, and the policy had said none did. Questions, requests and complaints: team@rootedapproved.com.