Last updated: 2026-07-28
Mark Eggenstein
Alemannenstr. 96
79117 Freiburg
Germany
Email: privacy.policy.reader@eggnstone.com
(hereinafter "we", "us", or "our")
We are a sole proprietorship and are not required to appoint a Data Protection Officer under Art. 37 GDPR / § 38 BDSG. Data protection enquiries reach the controller directly at the address above.
PDFreflow ("the App") is a document reader that reflows PDF, EPUB, TXT and HTML files for comfortable reading on small screens. This policy covers every platform on which we make the App available, and our website www.pdfreflow.com. We take the protection of your personal data seriously and process it in accordance with the EU General Data Protection Regulation (GDPR/DSGVO), the ePrivacy Directive, and applicable national data protection laws.
The short version: your documents and your reading are processed on your device and are not transmitted to us. Nothing reaches us unless you switch it on (crash reports, usage analytics) or actively send it (feedback, an optional document upload). Three points deserve your attention:
The App is currently in public beta. Where the beta behaves differently from the finished product, this policy says so.
The App stores the following data exclusively on your device. This data is never transmitted to us or any third party:
This local data processing is necessary for the App to function and does not require consent under GDPR, as no personal data leaves your device.
The one exception is the feedback function: if — and only if — you use it, some of this data is transmitted, as described in Section 3.5. Nothing else in the App ever sends a document, a reading position or a setting anywhere.
Only with your explicit consent, we collect crash reports via Google Firebase Crashlytics to maintain app stability. This includes:
Purpose: Identifying and fixing bugs to improve app stability.
Legal basis: Your consent (Art. 6(1)(a) GDPR). You may withdraw consent at any time by switching crash reports off under "About" in the App.
Data processor: Google Ireland Limited, Gordon House, Barrow Street, Dublin 4, Ireland (privacy policy: https://policies.google.com/privacy). Data may be transferred to the USA; see Section 7.
Retention: Crash data is retained for 90 days in Firebase, after which it is automatically deleted.
Only with your explicit consent, we collect usage data via Google Firebase Analytics. The data is pseudonymous, not anonymous: it carries no name, email address or account, but it is tied to identifiers for your install and device, so it remains personal data under the GDPR and all the rights in Section 9 apply to it. This includes:
Purpose: Understanding how the App is used to prioritize improvements.
Legal basis: Your consent (Art. 6(1)(a) GDPR).
Data processor: Google Ireland Limited (see above); transfers as described in Section 7.
Retention: Event-level data is retained for 2 months; aggregated reporting data is retained for 14 months. You can request earlier deletion by contacting us.
The App offers one-time, non-subscription in-app purchases; subscription products are not offered. If you make such a purchase, we use RevenueCat to manage and validate it. The following data is processed:
We do not receive your payment details (credit card, bank account). Payment is handled exclusively by Apple or Google.
RevenueCat is only contacted on iOS and Android, and only from the moment you first open the purchase screen or restore a purchase. On other platforms, and until then, no data is sent to RevenueCat. During the public beta no purchases are offered, so in the beta build this processing does not take place at all.
Purpose: Processing purchases, validating receipts, granting and restoring entitlements, preventing fraud.
Legal basis: Performance of a contract (Art. 6(1)(b) GDPR).
Data processor: RevenueCat, Inc., 633 Taraval St #100, San Francisco, CA 94116, USA (https://www.revenuecat.com/privacy). Data is transferred to the USA on the basis of Standard Contractual Clauses; see Section 7.
Retention: For as long as the purchase entitlement exists and as long as required by tax and accounting law (typically up to 10 years for transaction records).
The App offers a voluntary feedback function (available from the main screen and from a text passage in the reading view). Data is only transmitted when you actively choose to send feedback. Depending on how you use it, the following is transmitted to us:
Replies: We may answer your feedback within the App. If you have sent feedback at least once, the App checks for waiting replies when you start it and after you send feedback; this check transmits the app-install identifier described in Section 3.2. Replies are stored under that identifier and are deleted together with the related feedback records. If you answer one of our replies, your feedback additionally includes a reference to that reply, so both sides of the conversation can be related.
Feedback records are stored in Google Cloud Firestore and uploaded documents in Google Firebase Storage, both operated for us by Google as a processor (see Section 6). As with any internet communication, Google transiently processes your device's IP address in order to deliver the request.
Who can reach an uploaded document. We do not publish uploaded documents, do not share them with third parties, do not make them visible to other users of the App, and do not offer any way to browse or search the uploads. Your written feedback and the reported text passage are readable only by us.
Uploaded files are stored under a name derived from the file's own content (its SHA-256 fingerprint), which is also how we avoid keeping the same document twice. The storage permits uploads only: it grants no public read access, and uploaded documents can be neither listed nor downloaded without our administrative credentials. Where the App needs to know whether a document has already been uploaded, it asks a service of ours that answers only yes or no, so the file itself is never served in order to answer that question. If you are unsure, send the feedback without the upload — the report is still useful to us.
Purpose: Understanding, reproducing, and fixing rendering bugs and other defects you report, and improving the App.
Legal basis: Your consent (Art. 6(1)(a) GDPR), given by sending the feedback or initiating the upload.
Important: Please do not upload documents containing sensitive personal data, confidential information, or material whose copyright does not permit you to share it. By uploading, you confirm that you are entitled to share the file with us for debugging purposes.
Retention: Uploaded documents are deleted once the related issue has been resolved, and in any case no later than 12 months after upload. Feedback records (message, text passage, technical context) are deleted no later than 24 months after submission. You may request earlier deletion at any time by contacting us.
The App offers a choice of reading fonts. Some of them are built into the App and need no network access (currently Cardo, Linux Libertine, OpenDyslexic and OpenDyslexic Alta). The remainder — the fonts from the Google Fonts library, such as Roboto, Poppins, Mulish, Libre Baskerville and Crimson Text — are not shipped inside the App. The first time such a font is actually used, the App downloads it from Google's font server (fonts.gstatic.com) and then stores it on your device, so the download happens once per font and not again.
Because this is an ordinary web request, Google necessarily receives your device's IP address, the name of the font requested and the time of the request. No identifier from this App is sent with it, and the request carries none of your reading data.
Note that this happens independently of the consent settings in Section 5, and that it can also occur shortly after you start the App, because the App loads your chosen reading font ahead of time so that opening a book is not delayed.
How to avoid it entirely: pick one of the built-in fonts named above. If your chosen font is already stored on your device, no further request is made either.
Purpose: Displaying your chosen reading font.
Legal basis: Our legitimate interest in offering a wide choice of reading fonts without inflating the App's download size (Art. 6(1)(f) GDPR). You may object under Art. 21 GDPR; selecting a built-in font gives immediate effect to such an objection.
Recipient: Google Ireland Limited / Google LLC (see Sections 6 and 7). Google's use of this server data is governed by its own privacy policy: https://policies.google.com/privacy
Retention: We receive and store nothing at all in this process; the downloaded font file remains on your device until you clear the App's storage.
One qualification, stated plainly: on Android, while — and only while — you have enabled usage analytics (Section 3.3), the Firebase Analytics SDK is technically able to read your device's Google Advertising ID, and the SDK declares the corresponding permission. We do not use that identifier: we run no ads, build no advertising profiles, and export nothing to any ad product. If you would rather it were not read at all, leave usage analytics switched off — with analytics disabled, the SDK collects nothing.
On first launch, the App presents a consent screen. Both crash reporting (Firebase Crashlytics) and usage analytics (Firebase Analytics) require your explicit opt-in: both are switched off in the App's configuration by default and are not enabled until you actively allow them. Neither sends anything before you decide. You may:
The feedback function (Section 3.5) is not covered by this screen: it transmits nothing until you open it and send something, and each upload is a separate, explicit decision.
We do not sell your data and we disclose it to no one except the service providers listed below, each of which processes it on our behalf and on our instructions under a data processing agreement pursuant to Art. 28 GDPR. Beyond these, data is disclosed only where we are legally obliged to do so.
Both agreements are incorporated by reference into the provider terms we accepted — Google's Cloud Data Processing Addendum and RevenueCat's Data Processing Addendum — and neither requires a separate signature.
Apple (App Store / TestFlight) and Google (Google Play) act as independent controllers, not as our processors, when they distribute the App and process your payment. What they collect is governed by their own privacy policies, not by this one. We receive from them only the purchase confirmation described in Section 3.4.
When you visit www.pdfreflow.com — including this document, if you are reading it in a browser — the pages are delivered by Firebase Hosting (Google Ireland Limited). Google processes your IP address, the requested address, the time of the request and your browser's user agent in server log data, which is technically necessary to deliver the page and to defend against attacks. Legal basis: our legitimate interest in operating a secure website (Art. 6(1)(f) GDPR). The website sets no tracking cookies and embeds no advertising, analytics or social-media third-party content.
Some of the providers above process data outside the European Economic Area, in particular in the USA. In those cases the transfer is safeguarded as follows:
Despite these safeguards, we must point out that data in a third country may be subject to access by that country's authorities, and that the level of protection there may not correspond in every respect to that within the EU. Where a transfer rests on your consent, it also rests on Art. 49(1)(a) GDPR.
Each section above states the retention period for the data it describes. In summary:
You may ask us to delete your data earlier at any time; see Section 9.
You have the right to:
To exercise any of these rights, contact us at privacy.policy.reader@eggnstone.com.
How we find your data — this matters, because the App has no user account. Everything we hold is filed under the pseudonymous app-install identifier described in Section 3.2, and nothing links it to your name or your email address. If you write to us from an email address we have never seen, we have no way of telling which records are yours, and under Art. 11(2) GDPR we may then have to decline the request. To make a request we can actually act on, send it through the App's feedback function ("Feedback" on the main screen): your message reaches us already tagged with your install identifier, so we can find and delete exactly your records. Mention in the message that it is a data protection request and tell us what you want done.
Two consequences worth knowing: if you have cleared the App's storage or reinstalled the App, the old identifier is gone and neither you nor we can connect you to data submitted earlier. And an uploaded document is stored under its content fingerprint rather than under your identifier, so where several people have uploaded the same file, deleting it on your request removes it for all of them.
We do not use your personal data for automated decision-making or profiling that produces legal effects concerning you or similarly significantly affects you within the meaning of Art. 22 GDPR. The App's layout analysis runs on your device and decides how a document is displayed — it makes no decisions about you.
We implement appropriate technical and organizational measures to protect your data:
Please also read the explanation in Section 3.5 of how uploaded document files are addressed and who can retrieve them; it describes a deliberate limitation of this protection.
The App is not directed at children under 16 years of age. We do not knowingly collect personal data from children. If you believe a child has provided us with personal data, please contact us so we can delete it.
We may update this Privacy Policy from time to time. We will notify you of material changes by displaying a notice within the App. The "Last updated" date at the top indicates the most recent revision.
If you have questions about this Privacy Policy or our data practices, please contact:
Mark Eggenstein
Alemannenstr. 96
79117 Freiburg
Germany
Supervisory authority:
If you are unsatisfied with our response, you may lodge a complaint with
Der Landesbeauftragte für den Datenschutz und die Informationsfreiheit Baden-Württemberg
https://www.baden-wuerttemberg.datenschutz.de
or any EU/EEA data protection authority.