Angry Sam is loud about your vocabulary and quiet about your data. There is no account, your words and progress live on your phone, and there are no ads. To deliver word recordings, run subscriptions and make the app better we use a short list of services. This page names every one of them and says exactly what they get.
In short
- There is no account: no sign-up, no email, no password.
- Your words, progress, streak, courses, settings and the name you sign on “The Deal” stay on your device. The vocabulary, pictures and sound effects ship inside the app. Recorded word pronunciations are downloaded over the internet when needed and then kept on your device; until a recording has downloaded, offline lessons use your device’s built-in voice.
- No ads, ever. We never sell your data.
- Product measurements use separate anonymous session scopes without tracking permission. Optional analytics with permission use a pseudonymous app ID. Neither includes your name, contacts or what you type.
- Ad measurement with your device’s advertising ID happens only if you allow tracking.
- Payments go through Apple or Google. We never see your card.
- The support chat in Settings goes to the people who make Angry Sam: what you write there and any photos you attach reach our team, translated by an AI model, never with your name.
- On our website you can leave your email for one email when Android is out. Then we delete it.
Who we are
Angry Sam is made and operated by Endless River (“we”, “us”, “our”). For any question about this policy or your data, email hello@endlessriver.xyz.
What stays on your device
Your learning content and complete progress records are stored on your phone or tablet. We receive only the limited activity metadata described below, not these full records:
- your courses, the words you learn or mark as known, your answers, review schedule, streak, freezes, awards, places and Sam’s outfits;
- the words you add yourself, photos you choose for those words, and anything you type into exercises or search;
- your settings: daily goal, reminder time, roast level, voice and languages;
- the name you type when you sign “The Deal”.
Widgets and Live Activities show this data from storage on the same device. If you turn on iCloud or Google device backup, your operating system may include the app’s data in that backup under Apple’s or Google’s terms.
Pronunciation recordings downloaded online
Recorded pronunciations of the words you learn are not all built into the app. The app downloads them over encrypted HTTPS from our file storage on Google Cloud Storage when they are needed. A full recording pack for each language you learn (roughly 100 MB) starts downloading when you pick that language in onboarding or add a course, and continues while the app is open. Single recordings for the words on screen may also be fetched on demand. Large pack downloads wait while Low Data Mode or Data Saver is on.
The app adds nothing about you to these requests: no account (there isn’t one), no user, app, device or advertising identifier, no analytics ID and none of your learning data. Each file’s address shows only which language pack or word recording is being downloaded. Like any web server, Google necessarily receives your device’s IP address and standard request information, such as the time and a user-agent string with the app and operating-system version (on Android, also the device model), in order to deliver the files, and may keep them in short-term server logs for security and operations. We don’t use these requests to identify you or to build a profile.
Downloaded recordings are stored on your device and excluded from device backups. The app may clear recordings it no longer needs to free space, and deleting the app removes them all. If a recording hasn’t downloaded yet and you’re offline, the app uses your device’s built-in voice instead.
What we collect
We collect a small amount of data so the app works and gets better. None of it includes your name, email, contacts, microphone or precise location. Text and photos reach us only when you send them to us in the support chat.
A random app ID
RevenueCat uses a random app identifier to check and restore your subscription. Only when you allow tracking may that pseudonymous identifier also be used for optional identified product analytics. Without permission, analytics use a separate random scope created for each app launch and after permission is withdrawn. It is not your billing identifier and is not linked to earlier identified analytics.
Product analytics (PostHog)
Events about how the app is used: screens opened and buttons tapped; onboarding answers such as your goal, level, daily goal, reminder time and roast level; learning events such as sessions, exercises answered right or wrong, the IDs of dictionary words and your streak; paywall views and the plan you pick; your app version, language and course.
PostHog discards client IP data, IP-based location lookup is disabled, and we do not use session recording. Without tracking permission, events have no person profile, billing ID, device ID or advertising ID. Reports count events and anonymous sessions; they do not track a person across app launches. Event records still exist inside a session, so these measurements are not all pre-aggregated on your device. With permission, optional identified analytics may relate activity across launches. Withdrawal changes future collection; it does not automatically erase earlier records. We also collect minimal error classifications only with permission, without raw messages, stack traces or typed content.
Purchases (Apple or Google, and RevenueCat)
Your plan, trial status and purchase, renewal, cancellation and refund events, and the store receipt needed to confirm your subscription. Apple or Google handle payment; we never receive card details.
Support chat (Pier)
Settings → Contact support opens a chat with our team on Pier, our own support service. After onboarding the app registers with it once per launch, so that replies, announcements and the unread badge can reach you. It sends a random install token created on your device; the platform, operating-system and app version; the app’s language and your time zone; your random app ID from RevenueCat (your Support ID) and your subscription status (plan, trial, product, renewal and expiry dates, store); a short learning summary (your course, how many courses you have, your daily goal, how many words you have learned, your streak and whether you are in Explore mode); and selected events: onboarding completed, paywall viewed or closed, purchases, failed purchases and restores. If notifications are allowed for the app, it also sends a push token so our replies can reach you. Pier derives your country from your IP address and uses the address briefly to limit abuse; it does not store it.
When you write to us, Pier stores your messages, the photos you attach (made smaller on your device first) and what you tap in the chat, such as an offer, a review request or a rating. Messages are translated automatically between your language and ours by an AI model (Anthropic Claude, reached through OpenRouter), which may also draft a reply or a short summary for our team; a person on our team reads and answers every message. We are notified about new messages in Telegram, with the message, its translation and your app, country, language, platform and plan. The chat never asks for a permission and never reads your contacts, location or photo library: the system picker shares only the photos you choose.
Ad measurement (Singular), only if you allow tracking
If you tap “Allow” on the tracking prompt (or choose to allow it on Android), Singular receives your device’s advertising identifier (IDFA on iPhone, Advertising ID on Android), other device identifiers it needs, and install and selected onboarding or paywall events. This tells us which ad brought you to the app. Singular may also receive your IP address and derive an approximate location. The app never asks for your location. Without permission, Singular is never started. On iPhone, Apple’s privacy-preserving SKAdNetwork may still report aggregated ad installation and conversion results without an app-provided user identifier. Subscription lifecycle forwarding to Singular is not enabled.
Our website and the Android waitlist
Our Angry Sam pages at endlessriver.xyz/angrysam set no cookies and load no third-party trackers. They count page views and taps on the App Store links per day and page language, as plain totals: no IP address, cookie, device or visitor identifier is stored with them. Like any website, our host Vercel receives your IP address and standard request information in order to deliver the page.
If you join the Android waitlist, we store your email address, the language of the page you used, the campaign tag of the link that brought you there (for example “instagram”), if there was one, and the date. We use the address for one thing only: a single email when Angry Sam is available on Google Play. After that email is sent, we delete the address; if Android takes longer, we delete it 12 months after you signed up. We never add it to a newsletter, share it or use it for anything else. The list is kept in our database on Supabase in the EU (Paris). To send the one email we may use an email delivery service, which receives only your address and that message.
Why we use it
- To provide your subscription (performance of our contract with you): checking and restoring purchases.
- To deliver pronunciation recordings (performance of our contract with you and our legitimate interests): sending the files to your device, which requires your IP address and standard request information.
- To keep the app working and improve it (our legitimate interests): limited product measurements without person profiles when tracking is declined. Optional linking across launches and error diagnostics use your permission.
- To answer you in the support chat (performance of our contract with you and our legitimate interests): receiving, translating and answering your messages, and seeing your app version and subscription status so we can help.
- To tell you when Android is out (your consent): one email to the address you left on the waitlist. You can withdraw your consent at any time.
- To measure our advertising (your consent): Singular attribution, only after you allow tracking. You can withdraw that consent at any time.
Who receives it
| Service | What for | Data |
|---|---|---|
| Apple, Google | App Store, Google Play and payments | Purchases and store receipts under their own privacy policies |
| Google Cloud Storage | Delivering pronunciation recordings | IP address and standard request information needed to deliver the files; no app, device or advertising identifiers |
| RevenueCat | Subscription management | Random app ID, purchase and subscription events |
| PostHog | Product analytics | Anonymous session scopes, or a pseudonymous app ID with permission, and the usage events listed above |
| Singular | Ad measurement, only with your permission | Advertising and device identifiers, install and selected funnel events |
| Pier (Endless River), hosted on Vercel and Supabase | Support chat | Install token, device and app details, Support ID, subscription status, learning summary, selected events, push token, your messages and photos |
| Endless River website, hosted on Vercel and Supabase | The Android waitlist and page totals | Your email address, the page language and campaign tag; daily totals without identifiers |
| OpenRouter, Anthropic | Translating support messages, drafting replies | The text of support messages and of our replies |
| Telegram | Telling our team about new support messages | The message and its translation, your app, country, language, platform and plan |
| Expo, Apple, Google | Delivering support replies as push notifications, only if notifications are allowed | Push token and the notification text |
These companies process data for us under their terms and data-processing agreements. Ad networks may receive aggregated campaign results, and for people who allowed tracking, attribution postbacks. We don’t include SDKs that display ads, we don’t sell or rent personal data, and we don’t share it with data brokers.
Notifications, widgets and permissions
Reminders are local notifications scheduled on your device, so no server sends them. You can turn them off in the app’s Settings or in your phone’s settings. Replies from the support chat and occasional announcements from our team are push notifications that our server sends through Expo’s push service and Apple’s (or Google’s) notification service, only if notifications are allowed for the app; the chat never asks for that permission itself. Notifications and, on iPhone, tracking are optional permissions. If you add a picture to your own word, the operating system’s photo picker lets you choose a photo; a local copy stays on your device and is never uploaded to our services. Photos you attach in the support chat are uploaded to our support inbox. We do not request broad photo-library access, camera, microphone, contacts or location. On Android the app declares the advertising ID permission, which is used only after you allow tracking.
How long we keep data
Data on your device stays until you reset progress in Settings or delete the app. We keep analytics events only as long as we need them to understand how the app is used. Support chats are kept until you delete them in the chat or ask us to; deleting a chat erases its messages, photos, profile and events from Pier. Copies of notifications in our team’s Telegram are removed on request. Waitlist addresses are deleted once we send the Android launch email, and in any case 12 months after you signed up. Purchase records are kept as long as the law requires for accounting and tax. When we no longer need data, we delete it or make it anonymous.
Your choices and rights
- Tracking: change it at any time in iPhone Settings → Privacy & Security → Tracking, or in the app on Android. Turning it off stops Singular immediately.
- On-device data: erase it with Settings → Reset progress, or by deleting the app.
- Support chat: delete the whole conversation with the trash button in the chat. It is erased from Pier at once, or as soon as you are back online.
- Android waitlist: to leave it, email hello@endlessriver.xyz from that address and we’ll delete it.
- Data held by our services: you can ask to access, correct or delete it, or object to its use. Write to us in the support chat or email hello@endlessriver.xyz. We don’t know who you are: the chat tells us your Support ID (your random app ID) automatically; by email, include what you bought and when. The ID lets us find billing records, the chat and any identified analytics. Unlinked anonymous session events cannot be located by that ID.
If you live in the EEA, the UK or another region with data-protection laws, you also have the right to complain to your local data-protection authority.
Children
Angry Sam is meant for people aged 13 and over and is not directed to children. We don’t knowingly collect personal information from children under 13. If you think a child has used the app and data about them was collected, email hello@endlessriver.xyz and we’ll delete it.
International transfers and security
Our service providers may process data in the United States and other countries. Where required, these transfers rely on safeguards such as the European Commission’s Standard Contractual Clauses. All data the app sends travels over encrypted HTTPS, and we collect as little as we can.
Changes to this policy
If we change how Angry Sam handles data, we’ll update this page and the date at the top. If the change is significant, we’ll also tell you in the app.
Contact
Endless River · hello@endlessriver.xyz