Privacy Policy
This policy covers the GapfyreSWE mobile app on the App Store and Google Play.
Effective 7 September 2026. Last updated 23 October 2026.
In short. There are no accounts and no sign-in. Your quiz history, your answers and your settings are stored on your own device and are never sent to us — we operate no server that receives them, and nothing about your studying is ever sent anywhere unless you choose to send it yourself — a link you open to ask an assistant about a question, a drill you share with someone (§7), or a backup file you export (§3). The one request the app makes of its own is an anonymous download of updated questions from this website, which our host, Cloudflare, serves (§4). Two third parties are involved in what you do in the app, and neither is us: RevenueCat, if you buy Pro, and Google AdMob, which serves the single banner advert on the free tier. Those adverts are non-personalised: they are chosen without building a profile of you, the app does not use the advertising identifier, and you will never see an App Tracking Transparency prompt. There is no analytics SDK. Buying Pro removes the advert.
1. Who we are
Gapfyre is made by Sam Munro, an individual developer based in the United Kingdom. For the purposes of the UK GDPR and the Data Protection Act 2018, Sam Munro is the data controller for the limited personal data described in this policy.
You can reach us at support@gapfyre.com about anything in this document.
2. What this policy covers
It covers one app:
- GapfyreSWE — a software engineering quiz app (
com.gapfyre.swe) on the App Store and Google Play.
This site publishes the app's policy, terms and support pages, a page that opens a drill someone has shared with you, and a guide for AI assistants that build drills; the app itself is not distributed here. Where something is true of only one platform, this policy says so.
3. What stays on your device
The app keeps a record of how you are getting on so it can show your progress and your statistics. That record includes:
- the questions you have been asked and the answers you selected, including which were right and wrong;
- your quiz rounds and when they took place;
- your settings — the topics you have hidden, your preferred AI assistant, your saved filters, your YouTube search keyword, and a cached flag recording whether your Pro subscription is currently active.
All of this is written to your device's own storage and stays there. On iOS it is held in the app's UserDefaults, and on Android in SharedPreferences. It is not synchronised, not uploaded, not backed up to any service of ours, and not readable by us. We operate no server that receives it and no account it could be attached to.
Backups. Settings → Export backup writes all of this except the Pro flag into one file and hands it to your device's share sheet (on the web, it downloads), so you can keep a copy or move your record to another phone. The file goes wherever you send it — your Files app, a cloud drive, an email to yourself — and is then held by that service under its own policy, not ours; it never passes through a server of ours. Restore backup reads a file you choose or paste, on your device, and shows you what it holds before replacing anything.
Deleting the app removes this data from your device. That does not need to involve us, because there is nothing on our side to delete. It does not delete a backup file you have exported; delete that where you saved it.
4. What is collected, and by whom
Three parts of the app are not self-contained. Buying and restoring the Pro subscription is one, and is covered first; the download of updated questions is another, and follows it (below); the banner advert on the free tier is the third, and has a section to itself (§5).
The subscription runs through RevenueCat. RevenueCat is a subscription infrastructure provider that sits in front of Apple's and Google's billing systems so that the app does not need a server of its own to verify a purchase.
If — and only if — you purchase Pro, start a free trial, or tap Restore purchases, RevenueCat processes the following on our behalf:
| Data | Why | Linked to you? |
|---|---|---|
| Purchase history — your subscription status, renewal and expiry dates, and the store's receipt or purchase token | To determine whether your device currently holds the Pro entitlement, and to restore it on a new device | Not linked to a name, email or account, because there is no account. See below. |
| A pseudonymous app user ID generated by RevenueCat | To tie a purchase to the installation that made it, so it can be restored | Randomly generated by RevenueCat. We never set it to anything that identifies you. |
| Basic device and technical information — device type, operating system version, app version, country and currency, and the IP address inherent in making a network request | To deliver the correct store products and prices, and to operate the service securely | Associated with the pseudonymous ID above, not with your identity |
We do not pass RevenueCat your name, your email address, or any identifier of our own — the app calls RevenueCat without supplying a user ID, so RevenueCat generates an anonymous one. We never see your payment card, bank details or billing address: those go to Apple or Google, who process the payment. We receive only an answer to the question "does this device have an active Pro subscription?"
RevenueCat acts as our data processor. Its own privacy policy is at revenuecat.com/privacy.
How this appears in the app stores
For transparency, this is what the two stores are told, and it matches the tables in this section and the next:
- Apple App Privacy: Purchases — collected for App Functionality and Analytics, not linked to your identity, and not used for tracking. Identifiers (Device ID) and Usage Data (Advertising Data) — collected for Third-Party Advertising, not linked to your identity, and not used for tracking.
- Google Play Data safety: Purchase history — collected, not shared, required for the app to function, encrypted in transit, used for App functionality and Analytics. Device or other IDs — collected and shared with Google for Advertising, optional in the sense that buying Pro ends it, encrypted in transit.
The download of updated questions, described next, is not listed in either form. Apple counts data as collected only if it is kept for longer than it takes to answer the request, and Google excludes data processed only in real time to answer a request; we keep nothing from these requests. If that ever changed — if we added logging or analytics to this website — this policy and both forms would change first.
"Not used for tracking" is a specific claim under Apple's definition, and it is why the app shows no App Tracking Transparency prompt: nothing collected here is joined to data from other companies' apps or websites to target advertising or measure it, and the app never reads the advertising identifier (IDFA). See §5.
"Analytics" appears against purchases because RevenueCat aggregates subscription figures — how many subscriptions are active, how many renewed — into a dashboard we can see. Those are counts, not a profile of you, and they are the only numbers we ever receive about anyone's use of the app. We receive nothing at all about which questions you answer, on either tier.
Updated questions
The questions ship inside the app, so it works fully offline. So that a correction or a new set of questions can reach you without waiting for an app update, the app also checks our website, gapfyre.com, for newer ones. It does this when it starts and when you come back to it, and no more than once every 6 hours. You can also ask it to check straight away with Check now in Settings → Question updates. A newer set is downloaded only if there is one, and only the parts that have changed, which is usually a few tens of kilobytes. Once downloaded it is used the next time the app loads; sometimes the app reloads itself when you return to the home screen to do that, never during a quiz, and the home screen then says "Questions updated."
The app sends nothing of yours in this request. It is an anonymous download of public files: no account, no identifier of ours, no cookies, and nothing about your quiz history, your answers or your settings. As with any request to any website, the server that answers it sees your IP address, the files asked for, the time, and the basic technical details your device's web view sends. That is enough to tell that a device running the app asked for updates, and when, and no more.
gapfyre.com is hosted by Cloudflare, which handles these requests on our behalf and keeps its own operational logs for a short time under its privacy policy. We run no analytics on the site and keep no request logs of our own. The only view we have is the aggregate request counts that Cloudflare's dashboard shows for any website: totals, not a record of any device.
The app works the same without this. With no connection, or if a download fails, you keep the questions you have. You can turn the check off at any time in Settings → Question updates; while it is off the app makes no request at all, and keeps the questions it has.
5. Advertising on the free tier
The free tier of the app shows one banner advert, at the bottom of the screen. It is served by Google AdMob. Three things about it are worth stating precisely, because each is a decision rather than a default:
- The adverts are non-personalised. Every request the app makes is flagged as non-personalised, which means Google selects the advert from general, contextual signals — roughly, your coarse location and the fact that this is an educational app — rather than from a profile of your interests or your history across other apps and sites. We do not send Google anything about you, because we have nothing to send: your quiz history and your answers never leave your device, and no interest, topic or score is attached to an ad request.
- The app does not use the advertising identifier. On iOS that means no IDFA and, consequently, no App Tracking Transparency prompt — Apple requires that prompt before an app may access the identifier or track you across other companies' apps, and this app does neither. On Android, Google's SDK may still use a resettable device identifier for the limited purposes below; you can reset or delete it in Settings → Google → Ads.
- It is not shown everywhere. There is no advert while you are answering a question, none on the first-run welcome screen, and none on the screen where Pro is bought. There are none anywhere in the web version, which carries no advertising code at all.
Serving an advert at all involves Google receiving some data, and it would be dishonest to list a banner without saying what:
| Data | Why | Linked to you? |
|---|---|---|
| A resettable device identifier and general device information — device type, operating system version, screen size, language | To return an advert that fits the screen, to limit how often the same advert is repeated, and to detect fraudulent clicks | Not linked to a name, email or account, because there is none. You can reset the identifier in your device settings. |
| Coarse location, inferred from the IP address inherent in making a request | To serve an advert that is legal and sensible in your country, and in the correct language | Country-level. The app requests no location permission and has no access to your precise location. |
| Ad interactions — that an advert was shown, and whether it was tapped | To count what we are owed and to bill the advertiser | Reported to us only as totals: impressions, taps and earnings. We never see who did either. |
For this processing Google acts as an independent controller rather than as our processor, so its own terms govern what it does with the data. Google's privacy policy is at policies.google.com/privacy, and how Google uses data from apps that use its services is described at policies.google.com/technologies/partner-sites.
How to turn adverts off: buy Pro. The banner disappears as soon as the purchase is confirmed, on that device and on any other device where you restore the purchase, and no further ad requests are made. That is the only relationship between the two — nothing about your subscription is sent to Google, and nothing about the adverts is sent to RevenueCat.
6. What we do not do
These are worth stating plainly, because they are all things a quiz app could easily do and this one does not:
- No accounts. There is no sign-in, no registration, no profile and no password. You never tell us who you are.
- No analytics. The app contains no analytics SDK. We do not know which questions you answered, which topics you use, how long you spend in the app, or whether you opened it at all. The advertising SDK is not one: it is never told what you are studying, and what it reports back to us is a count of impressions and taps, not a record of anyone's session.
- No personalised advertising. There is one banner advert on the free tier and it is non-personalised: it is not chosen from a profile of you, and buying Pro removes it. See §5. There is no advertising of any kind in the web version, and no interstitial, full-screen, video or rewarded advert anywhere — one banner is the whole of it.
- No tracking. We do not track you across apps or websites, and we do not allow the advert to. The app does not use the Advertising Identifier (IDFA), and for that reason you will never see an App Tracking Transparency prompt.
- No user-generated content on our side. There is nothing to post, comment on or upload to us, so there is nothing of yours for others to see. You can import a drill an AI assistant wrote and share a drill with a friend, but both happen on your device and through the apps you choose; neither passes through a server of ours (§7).
- No selling or sharing. We do not sell personal data, and we do not share it for cross-context behavioural advertising. Non-personalised advertising is, by definition, not cross-context behavioural advertising: the advert is chosen without a profile built from your activity elsewhere.
- No location, contacts, camera, microphone, photos or health data. The app requests none of these permissions.
- No calls home about you. Apart from RevenueCat, the AdMob banner and the anonymous check for updated questions (§4), the app makes no network requests of its own — and none of the three carries anything about your studying. The questions ship inside the app, so it works fully offline; on the free tier an offline device simply shows no advert, and without a connection you keep the questions you have.
7. Links that leave the app
The app has three things that can take you, or something you chose, outside it: two links that open in your device's browser while you review your answers, and sharing a drill. Each is something you choose to tap; none happens on its own, and nothing is sent anywhere unless you tap.
Find videos on YouTube
This opens a YouTube search built from the keywords of the question you were reviewing, plus any search keyword you have set in Settings. YouTube receives that search term and, as with any website you visit, your IP address and whatever your browser and your own YouTube account send it. Your quiz history is not included.
Dig deeper
This opens a new conversation at the AI assistant you chose, pre-filled with the context of the question you were looking at, so you can ask about it properly. The text sent contains up to 6,000 characters and includes: the question, any code shown with it, every answer option, which option you selected, whether you got it right, and the explanation the app gave.
It goes to whichever assistant you picked — Claude (claude.ai), ChatGPT (chatgpt.com), Copilot (copilot.microsoft.com), Grok (grok.com) or Gemini (gemini.google.com). It is carried in the URL that opens in your browser — except for Gemini and Copilot, which cannot read it from a link, so for those two the app copies it to your clipboard when you tap and you paste it in yourself. Either way it is subject to that provider's own privacy policy and terms, not ours, from the moment the link opens. If you are signed in to that provider, the conversation will appear in your account there. We have no involvement in and no visibility of what happens next.
Turning this off. You are asked to choose an assistant when you first open the app, and you can change or remove that choice at any time in Settings. Choosing None removes the "Dig deeper" links, and the button that opens an assistant to build a drill, from the app entirely. This is the one control that matters most for your privacy, because this link is the only feature that sends anything about your answers anywhere. Sharing a drill sends only the drill itself, and only when you tap Share.
Sharing and importing drills
A drill is a named list of questions, or a selection of topics, that you have saved to practise from. It lives on your device like the rest of your record (§3).
Sharing. Share on a hand-picked drill's page opens your device's own share sheet — the iOS or Android one, not ours — with a short message and a link to gapfyre.com/d. The link carries the drill: its name, which questions or topics it covers, and how many are asked per round. It carries nothing about your answers, your scores, your history or your settings. It goes to whichever app and person you choose; we do not receive it and cannot see it. Where a device has no share sheet, the same text is copied to your clipboard instead. Copy drill file copies the drill as text, and nothing else.
Opening a shared link. The drill is written into the part of the link after the #, and a browser does not send that part to the website, so gapfyre.com never sees it. What loads is a small page, which Cloudflare serves and logs like any page (§4, Updated questions). The page's script runs in your browser, loads nothing from anyone else, makes no further requests and reads the drill only to show you its name and size and to offer to open the app. A link an AI assistant writes for you carries the drill the same way, after the # and in plain text, and is read the same way. So that a link opened on a computer can reach your phone, the page also shows it as a QR code to scan with the phone's camera. The code is drawn in your browser by the page's own script, a copy of Project Nayuki's MIT-licensed QR Code generator served by gapfyre.com with the page; making it sends the link nowhere. Where your browser has a share sheet (on a Mac, the one with AirDrop and Messages), a Share button opens it with the same link, which goes only to the app and person you choose. If the app is installed, the link can open it directly; the app then reads the drill on your device and shows it to you before anything is saved, and makes no network request to do so.
Importing. The Import drill screen takes text you paste, or a drill from a shared link. It reads the clipboard only when you tap Paste from clipboard, checks the text on your device, and saves nothing until you tap Save. It also links to a plain-text guide for AI assistants at gapfyre.com/drill/spec.txt, which opens in your browser if you tap it. The screen has a short form: what you are practising for, an optional web address for a job spec or tech-stack page, the text of a spec for a page that needs a login, and a language and a level. You can also use your device's Share button in a browser or another app and choose this app: the page address or text is placed in that form on your device, and goes nowhere until you tap the button below. If you have chosen an assistant in Settings, a button opens it in your browser with a message made of the guide's address and rules plus exactly what you typed or chose in that form, and nothing else: no answers, no history, no settings. (Gemini and Copilot do not read a message from a link, and a message with a long pasted spec is too long for one, so in those cases the assistant opens without it and the same text is copied to your clipboard for you to paste.) With no assistant chosen, Copy the request copies the same text. We do not receive it. The assistant, not us, may open the web address you gave it, and what you tell it is between you and that assistant under its own privacy policy. What you typed is kept on your device while you are away at the assistant, so the form is as you left it, and is saved with the drill so you can rebuild it; it is not part of a drill you share, and is deleted with the drill or with the app. The assistant may read our guide and search the public index of questions at gapfyre.com/drill/search; those requests come from the assistant, not from the app or from you, and they ask only for public question text. We keep no logs of them and do not connect them to anyone; Cloudflare handles them as it does every request to the site.
We collect nothing through any of this, which is why neither store privacy form changes.
8. Android backup
On Android, the app allows Android's own backup system (android:allowBackup="true"). If you have device backup enabled in your Google account settings, Android may include the app's stored settings and quiz history in your device backup and restore them when you set up a new device. That backup is between you, your device and Google under Google's privacy policy — we do not operate it, cannot access it and are not sent a copy. You can turn device backup off in your Android settings.
iOS behaves comparably: app data may be included in your iCloud or encrypted local backup according to your own iOS backup settings.
9. Legal bases for processing
Where the UK GDPR or EU GDPR applies to you, our legal bases are:
- Performance of a contract (Art. 6(1)(b)) — processing your purchase and subscription status through RevenueCat so that we can provide the Pro features you paid for, and restore them when you ask.
- Legitimate interests (Art. 6(1)(f)) — keeping the subscription service secure and working, and understanding aggregate subscription counts in order to run the app sustainably. We consider this proportionate given that the data is pseudonymous and no profile of you is built.
- Legitimate interests (Art. 6(1)(f)) — funding a free tier by showing one non-personalised advert, and preventing click fraud against it. Personalised advertising would require your consent, which is why the app does not do it: the adverts are contextual, no profile is built, and there is a paid way to remove them entirely. Where local law nonetheless requires consent for the device identifier used to cap repetition and detect fraud, that identifier is one you can reset or delete in your device settings at any time.
- Legitimate interests (Art. 6(1)(f)) — delivering corrected and new questions without requiring an app update. The request carries none of your data, and the host sees only what any website request reveals.
Data that never leaves your device is not processed by us at all, so no legal basis is required for it.
10. How long data is kept
- On your device: for as long as you keep the app installed. Deleting the app deletes it. There is no copy elsewhere unless you export a backup (§3), which is kept wherever you saved it for as long as you keep it.
- At RevenueCat: subscription records are retained for as long as needed to operate and support the subscription and to meet tax, accounting and legal obligations, in line with RevenueCat's retention practices. You can ask us to delete your RevenueCat record — see below.
- At Apple and Google: your purchase and billing records are kept by them under their own policies, and we cannot delete them. The same is true of the ad-serving data described in §5: Google holds it as an independent controller under its own retention practices, we hold no copy of it, and we cannot delete it on your behalf. Resetting your advertising identifier in your device settings breaks the link to anything held against the old one.
- At Cloudflare: the request logs from downloads of updated questions (§4) and from visits to the shared-drill page and the drill guide (§7) are kept by Cloudflare for a short operational period under its own policy. We hold no copy of them and cannot delete them on your behalf.
11. Your rights, and how to use them
Depending on where you live, you may have rights to access, correct, delete, restrict or object to the processing of your personal data, to data portability, and to complain to a regulator. Because we hold almost nothing about you, most of these resolve quickly:
- To delete everything on your device: delete the app. You do not need to ask us, and we cannot do it for you.
- To take your record with you: use Settings → Export backup, which gives you all of it as a JSON file (§3).
- To access or delete your subscription record: email support@gapfyre.com. We can look up and delete your RevenueCat customer record. To find it we will need something that identifies the purchase — usually the store's order or transaction ID from your App Store or Google Play receipt. Deleting the record does not cancel your subscription or refund it: cancel through your store account, as described on our support page.
- To stop the "Dig deeper" links transmitting anything: set your AI assistant to None in Settings.
- To stop the app checking for updated questions: turn it off in Settings → Question updates. See §4.
- To stop the adverts: buy Pro, which removes them outright. Short of that, you can reset or delete your advertising identifier in your device settings — Settings → Privacy & Security → Tracking on iOS, where this app is already absent because it never asks; Settings → Google → Ads on Android, which also offers "opt out of Ads personalisation", though the adverts here are non-personalised in any case.
We will respond within one month. There is no charge. If you are in the UK you may complain to the Information Commissioner's Office; if you are in the EEA, to your national supervisory authority.
If you are a California resident: we do not sell or share personal information as those terms are defined by the CCPA/CPRA, and we do not use personal information for cross-context behavioural advertising. We will not discriminate against you for exercising any privacy right.
12. Children's privacy
The app is educational and general-audience, but it is not directed at children under 13, and we do not knowingly collect personal data from children. There are no accounts, no profiles and no way for a user to contact another user, so there is little for a child to disclose. If you believe a child has provided personal data through a purchase made on your device, contact support@gapfyre.com and we will delete the associated record.
The app is not directed at children, so it is not declared as a child-directed app to Google's ad services and adverts are not tagged for users under the age of consent. Ad content is restricted to Google's General audience rating, the most restrictive of the four, so what appears in the banner is material suitable for a general audience. If you are setting the app up for a child, buying Pro removes advertising entirely.
Note that the "Dig deeper" links open third-party AI assistants, most of which set their own minimum age. If you are setting the app up for a child, choosing None as the AI assistant in Settings removes those links.
13. Changes to this policy
If this policy changes we will update the date at the top of this page. If a change is significant — if the app begins collecting something it does not collect today — we will say so clearly here and, where the change requires it, in the app before it takes effect. Previous versions are available on request.
What changed on 7 October 2026
The import screen gained a form (what you are practising for, an optional web address, the text of a job spec, a language and a level), and the message to your assistant now contains what you typed there, where before it was the same for everyone. It is described in §7. It is sent only when you tap the button, to the assistant you chose, and is not sent to us. The app can now also receive a page address or text shared to it from another app; that fills the form and sends nothing. It is kept on your device and is not part of a shared drill.
What changed on 6 October 2026
The app gained a way to import a drill an AI assistant has built, to share a drill with someone, and to open one from a link, described in §7. Three statements were reworded to stay true: that nothing about your studying is ever sent anywhere, that Dig deeper is the only feature that transmits anything about your quiz activity, and that there is no user-generated content. The first two now say that what you choose to send is the exception, and the third that nothing reaches us. The site also gained a page that opens a shared drill and a guide and search for AI assistants; both are static or read-only and keep no logs of ours. The Import screen also gained a button that opens your chosen assistant with a fixed message about building a drill. What has not changed is everything about your studying: your quiz history, your answers and your settings still never leave your device, the app still makes no network request of its own for any of this, and there is still no analytics of any kind.
What changed on 30 September 2026
The app began checking gapfyre.com for updated questions, described in §4. It is the first time the app has made a request to anything of ours, so the statement that the app makes no network requests of its own stopped being true and has been rewritten. What has not changed is everything about your studying: your quiz history, your answers and your settings still never leave your device, the request carries none of them, and there is still no analytics of any kind.
What changed on 9 September 2026
The free tier began showing a banner advert, and this is the change that section promises to state plainly rather than leave to a moved date. Before this, nothing about your device reached anyone except when you bought a subscription. Now, on the free tier, Google AdMob receives what §5 sets out in full — a resettable device identifier, general device information, coarse location from your IP address, and whether an advert was shown or tapped — for as long as the app is showing you adverts.
Three earlier statements in this policy stopped being true and have been rewritten rather than quietly dropped: that there was no advertising and no advertising SDK, and that RevenueCat was the only thing the app talked to over a network. What has not changed is everything about your studying: your quiz history, your answers and your settings still never leave your device, no advert is chosen from anything you have answered, and there is still no analytics of any kind. The adverts are non-personalised, the app still reads no advertising identifier and still shows no App Tracking Transparency prompt, and buying Pro removes advertising entirely.
14. Contact
Questions, requests or complaints about privacy: support@gapfyre.com.