thereaderlyapp.com

Privacy Policy for Readerly

Last updated: 14 September 2026

Usage-sharing test withdrawn. An optional PostHog usage-sharing feature was briefly included in privately installed test builds on 14 September 2026. It has been removed from replacement builds and was not released through the App Store. The policy below describes Readerly without that feature. The historical test and any previously shared data are covered in section 9.

Readerly is an iPhone app for tracking the books you read. It is made by Jovanne "Joe" Villarino, an independent developer.

The short version: Readerly stores your library on your iPhone. There is no account to create. Optional online features send the information described below only when you choose to use them. An earlier private recommendation test is unavailable in replacement builds; section 6 explains its historical data handling.

This policy explains that in full — what stays on your device, what the app sends over the internet and to whom, and how Apple fits in when you subscribe.

The short version

What Readerly stores on your device

Your library and Profile information are written to a private database (Apple's SwiftData) inside the app's own storage on your iPhone. That includes:

Profile information is included when you choose to export your Readerly data. You can remove your photo in Edit Profile. Erasing the library in Settings also erases the local Profile, goals, custom lists, derived literary data, and retained recommendation records.

Importing a library. Readerly can import a CSV export from another reading service, such as Goodreads or The StoryGraph. You choose the file yourself, it is read on your device, and the books in it are written straight into the same local database as everything else. The file is never uploaded anywhere.

Reading the file makes no network requests, and no export file from any service contains cover images. Afterwards the app may offer two optional steps, each of which you have to tap: looking up missing covers and book details in a book database, and finding genres with Claude. Both are described below. Decline them and the import stays entirely on your device — with plain placeholder covers, because there was never a cover in the file to show.

This data belongs to you. The database stays in the app's private storage. Only the specific fields described below leave the device when you use an online feature; the database and import file are not uploaded.

About device backups. Readerly does not sync or upload your library database. However, if you back up your iPhone — to iCloud or to a computer — that backup is made by iOS itself and may include Readerly's data along with the rest of your apps. Those backups are controlled by you and by Apple, under Apple's terms and privacy policy, not by Readerly.

What Readerly sends over the internet

Readerly uses book databases to identify books and supply covers, Anthropic's Claude for the optional AI help described in sections 4 and 5, and a private Readerly feedback inbox hosted on Cloudflare with operator email delivery through Proton Mail when you submit feedback. There is no analytics service, advertising network, crash reporter, or server-side copy of your library database.

1. Book lookup — ISBNdb, through a small server I operate

When you search for a book, scan a barcode, or run one of the optional lookup passes, Readerly asks ISBNdb — a commercial book database — to identify the book. That request goes first to a small server I operate (a Cloudflare Worker), which forwards it to ISBNdb and returns the answer.

Why it goes through my server. ISBNdb requires a paid API key. A key placed inside an iPhone app can be extracted from it, so the key lives on the server instead, where it can also be rate-limited. This is the same server, and the same arrangement, described in section 4 for Claude.

What is sent: either the text you typed, or a scanned ISBN, or — for a lookup pass — one book's ISBN, or its title and author when it has no ISBN. That is the whole payload. Your ratings, reviews, notes, reading dates, progress and shelves are never sent, and there is no account, name, email or advertising identifier to send.

What identifier is attached. One thing is: a random ID generated on your device the first time a network feature is used — the same one described in section 4. It contains nothing about you or your phone, exists so requests can be counted against a daily limit, and is destroyed when you delete the app.

What my server keeps. Three things, and it is worth being exact because an earlier version of this policy said I kept nothing:

What it does not keep: your search text, a list of the books you asked about, or anything tied to your library.

And no log of what you asked. No logging service is attached to the server, nothing streams its output anywhere, and its code contains no logging statements at all — so no request and no IP address is written down. Cloudflare, which runs the machine the server sits on, keeps aggregate figures for it — how many requests, which status codes came back, how much processor time was used — for around three months. Those are totals, not requests: nothing you sent is in them. Like any company carrying internet traffic, Cloudflare necessarily handles the connection itself, including the address it arrives from. That is how the internet works rather than something the server records.

2. Book lookup fallback — openlibrary.org

When ISBNdb is unreachable, is rate-limited, or simply has never heard of a book, Readerly asks Open Library instead — a free public service that needs no key. That request goes directly from your device and carries no identifier at all, not even the random ID. It sends the same thing: an ISBN, or a title and author.

This is also the only source in builds of the app configured without the server above, where Open Library is used on its own.

Books that neither source can identify simply keep the plain placeholder cover and no description. Nothing is invented for them.

Either way, the pass never starts on its own. It tells you how many books it would ask about before you agree, and you can stop it while it runs.

3. Cover images — ISBNdb, Open Library and Internet Archive

Book cover artwork is downloaded from whichever database supplied it — ISBNdb's image service (images.isbndb.com) or Open Library's (covers.openlibrary.org) — so your library shows real covers. Readerly normally stores the web address of a cover and lets iOS cache its image. Earlier private recommendation tests also saved cover bytes locally. Open Library can redirect older artwork to its Internet Archive cover storage at archive.org and ia*.us.archive.org. These image requests go directly from your device and carry no Readerly install identifier.

About the book databases

Neither database is run by me. ISBNdb is a commercial service operated by ISBNdb.com LLC; Open Library is a free public service operated by the Internet Archive. Like any website you connect to, their servers necessarily see the incoming connection itself — including, for the direct requests, your device's IP address — as a technical requirement of answering it. How each handles that is governed by their own privacy policy, not this one.

Requests routed through my server reach ISBNdb from the server rather than from your phone, so what ISBNdb sees there is my server's address, not yours.

4. Genre categorization — Anthropic's Claude (optional, consent required)

Reading services do not export a usable genre. A real Goodreads export of 213 books contained no genre at all once shelf names were filtered out; a StoryGraph export of 675 contained 81, most of which were plot tropes rather than genres. So Readerly can offer to identify genres for you using Claude, an AI service operated by Anthropic, PBC.

This never happens automatically. After an import, Readerly shows a button. Tapping it opens a confirmation that names Anthropic and states exactly what will be sent. Nothing leaves your device unless you then confirm.

What is sent: the title and author of each book that has no genre. That is the whole payload.

What is never sent: your reviews, your private notes, your star ratings, your reading dates, your progress, your session history, your shelves, your search history, your camera images, or any name, email or account — the app has no account to send.

How it is sent. The request goes to a small server I operate (a Cloudflare Worker), which forwards it to Anthropic. This exists so the API key is not inside the app, and so the number of requests can be limited. The only identifier attached is a random ID generated on your device the first time the feature is used. It contains nothing about you or your phone, is used solely to count requests against a daily limit, and is destroyed when you delete the app. My server stores none of what you send: it keeps a running count of requests against that random ID and nothing else — not your titles, not your authors, and no log of the request itself.

What comes back. One genre per book, chosen from a fixed list of about thirty-five categories built into the app. Anything outside that list is discarded rather than saved, so the feature cannot introduce arbitrary text into your library. Books Claude does not recognize are simply left uncategorized — Readerly does not guess.

AI-generated content. Genres identified this way are produced by AI and can be wrong. You can change any book's genre yourself at any time, which overrides the suggestion permanently.

What Anthropic does with the request on their side — including how long they keep it — is governed by their own privacy policy and commercial terms, not this one. It is not something I control, and I will not claim a retention period on their behalf: for that, read their policy at anthropic.com/legal/privacy. What I can tell you is what is sent, which is above, and that under those commercial terms data sent through their API is not used to train their models.

Declining costs you nothing else. Every other feature works normally; the affected books stay uncategorized, exactly as they arrived.

5. Reading an unfamiliar export file — Claude (optional, consent required)

Readerly recognizes the export formats of the major reading services. If you import from somewhere it doesn't know — or from a spreadsheet you made yourself — it can offer to work out what your columns mean.

This never happens automatically, and it never happens for a file Readerly already understands. A Goodreads or StoryGraph export makes no request at all.

What is sent: your file's column names, and up to three short sample values per unrecognized column. It also sends a bounded set of actual date strings and shelf names it could not read. Short samples may include ratings, reading-status labels or other user-entered values from unresolved columns.

How samples are limited. Recognized review and private-note columns are excluded from column sampling. For other columns, sampled values that look like prose cause that column's samples to be withheld; its name may still be sent. These filters cannot identify every short personal value in an unfamiliar column.

The request describes the file's structure using these limited samples. It does not upload the full export, the app's library database or its reading-session history. Samples are used to interpret the import, not to personalize recommendations.

What comes back. Which column holds which field, what format your dates are in, and what your shelf names mean. Every answer is checked against your actual file before it is used, and anything Readerly cannot verify is discarded.

You see what it decided. The import preview lists each thing it worked out in plain language — "Read your 'Pgs' column as Page count" — before you import anything. If it looks wrong, don't import.

6. Earlier private recommendation tests

A recommendation feature in earlier privately installed test builds has been deferred and is unavailable in replacement builds. It is not a current app feature. Updating preserves existing local data and does not retract information that an external provider already processed.

What those tests sent. Each match required separate permission. Approved requests sent library titles, authors, book identifiers, genres, formats, shelves and exact star ratings when available through Readerly's Cloudflare Worker to Anthropic's Claude. Later test versions also included bounded public catalog descriptions and subjects, saved literary analysis, a chosen mood, repeat-book exclusions, and up to 100 revealed recommendation outcomes with optional first impressions and linked library ratings or shelves. The Worker used this evidence to compare literary themes and choose a catalog book. These preferences were personal, not described as anonymous.

Private notes, quotes, written reviews, Profile name or photo, exact reading dates, progress positions, reading sessions and the local database file were excluded. A random install ID went to the Worker for request limits and counters; it was not forwarded to Anthropic or the book catalogs. Catalog services received public subject searches or book identifiers, not ratings or the full literary dataset. Cover requests went directly to Open Library or Internet Archive and carried no Readerly install identifier.

Storage and retention. Derived literary evidence, saved analysis, recommendations, artwork, reveal progress and feedback remain in the app's local data unless erased. Local derived-data maintenance makes no network requests. These records are included in a library export and removed by Erase Library; export first if you want to keep a copy. The separate inspection and history screens from the test feature are no longer available in replacement builds.

Readerly's Worker did not log or save incoming taste payloads, library evidence, recommendation text or personal literary profiles; these existed in memory while a request was processed. It could cache public catalog metadata and literary features derived from public sources, keyed by the work, source fingerprint and analysis version. Those shared entries contain no ratings, library associations, record of ownership, incoming app descriptions or features derived from personal library requests. Daily quota and spending counters were separate. Cloudflare processed request and connection information to operate the service.

Anthropic processed supplied evidence under its commercial API terms. Its commercial retention policy describes standard API input/output deletion within 30 days, with exceptions including legal obligations and policy enforcement. Readerly does not promise zero retention or a special agreement. Anthropic's API data-handling guidance states that retained data is not used for training without express permission; Readerly did not opt library data into training. Updating or deleting the app cannot retract an earlier request. Contact Support about historical data or a deletion request; the provider's retention and deletion terms still apply.

7. Send Feedback — private Readerly inbox

In Settings → Send Feedback, you can report a bug, request a feature, or send general feedback. Choose a category, write a subject and message, and optionally select one screenshot with Apple's system photo picker. You can preview, replace or remove the screenshot before submitting.

What is sent. Only the category, subject, message, optional screenshot and a random submission reference used to avoid duplicate retries. Readerly does not automatically attach your library, notes, quotes, reading history, taste dataset, retained recommendation records, Profile photo, install identifier, app version or device diagnostics. The app creates a resized JPEG without the original photo metadata or filename. Anything visible in the screenshot or written in your message is part of the feedback, so review it before sending.

Your choice. Selecting a category, typing or choosing a screenshot does not upload anything. Upload starts only when you tap Submit Feedback. A failed submission keeps the draft open for retry. The form does not collect an email address or provide an in-app reply thread; use the support email below if you need a reply.

Who can access it. Feedback is stored in a private inbox operated by Readerly on Cloudflare and an email copy, including your chosen screenshot, is delivered to Readerly's operator at Proton Mail to handle your request. Cloudflare processes the email for delivery and Proton Mail processes the operator's email copy. It is not published or forwarded to an AI provider. Access to the Cloudflare inbox requires a separate administrative credential that is not included in the app. The inbox records a submission timestamp and reference; it does not store your IP address or a device identifier. Cloudflare handles connection information to operate the service.

Retention and deletion. Active inbox records, including screenshots, expire after 30 days and may be deleted sooner. Cloudflare's database recovery history can retain deleted content for up to another 30 days. Operator email and downloaded copies have separate retention: they are kept only while needed to handle your request and are deleted separately when no longer needed or when you request deletion. The Cloudflare inbox's automatic expiry does not delete those copies. Save the reference shown after a successful submission and include it when contacting [email protected] to request earlier deletion. Deleting the app or erasing your local library does not retract feedback already submitted. Recovery copies are not used as an ongoing inbox.

8. Get This Book — optional external print-book search

Book details offer Get This Book without requiring a subscription or adding the book to your library. Opening this sheet does not contact a retailer. Only tapping its labeled Amazon link opens a print-book search in your browser or the associated app.

The link contains a valid ISBN for an identified physical edition, or the book's title and known author. It includes no ratings, shelves, feedback, notes, install identifier or other private Readerly data. These links have no affiliate tags. The retailer and your browser or associated app handle the visit under their own privacy policies, including any account you use there. Readerly does not receive purchase details and does not automatically buy or save the book.

9. Withdrawn usage-sharing test

The earlier private test build offered Share Usage and sent nothing to PostHog until the reader agreed. When enabled, it sent selected app actions (such as opening the app, visiting a tab, importing, saving reading progress, or using the purchase flow), event times, app/build and major iOS versions, and random installation and visit identifiers to PostHog's United States Cloud. The installation identifier linked that installation's actions over time; the history was pseudonymous, not guaranteed anonymous.

Those events did not include names, book details, library contents, notes, reading-session contents, payment information, screenshots or screen recordings. The project was configured to discard event IP addresses and disable location enrichment. Network infrastructure still receives connection information.

Stopping the old build. If you still have a test build with Settings → Usage Sharing, turn sharing off there or install its replacement. Turning sharing off clears unsent events and attempts to cancel any request in progress. Replacement builds contain no usage collector or sender and cannot upload an old queue. A prior local usage file may remain in the app's private storage; it is excluded from device backups and library exports. Removing the feature does not remove your library.

Previously shared history. Updating the app, switching sharing off or deleting the app does not delete events already received by PostHog. That history remains until explicitly deleted, subject to PostHog's data-availability limits; Readerly does not promise a fixed automatic deletion schedule. PostHog processes it under its privacy policy. To request deletion, contact [email protected]. If you still have the old test build, save the usage reference ID from Usage Sharing before updating or deleting the app and include it in your request. If you already updated, contact Support for help; without that reference, locating a particular installation's history may not be possible. The app does not submit a deletion request automatically.

If you use none of the above

If you never search for a book, never load a cover, and never tap "Find Genres" or "Figure Out This File", and never submit feedback or follow an external book link, Readerly's library and local derived-data maintenance make no network requests. StoreKit may still communicate with Apple for subscription status.

Camera and barcode scanning

Readerly can scan a book's barcode so you don't have to type in its details.

Subscriptions and Apple

Readerly Pro is optional and unlocks the part of the Insights dashboard that isn't free. It is sold entirely through Apple's In-App Purchase system, as an auto-renewing monthly or annual subscription.

Third-party code in the app

Readerly includes two open-source libraries — Pow and Lottie — used only to draw animations on screen. They collect no data, and neither makes any network requests.

There are no analytics SDKs, advertising SDKs or crash-reporting services. The online services the app uses are described above.

Children's privacy

Readerly is a general-audience reading tracker and is not directed at children under 13.

The optional online features and their disclosures apply to anyone who uses them. Readerly does not knowingly seek personal information from children under 13. If you are a parent or guardian and have a question about information sent through an online feature, please get in touch at the address below.

Your data, and how to delete it

You can manage your local reading data on your device:

There is no account to close or stored server-side library to erase. Questions about a request already sent to an external provider can be directed to the support address below; that provider's retention and deletion terms still apply. For submitted feedback, include your submission reference when requesting deletion; the retention and recovery-copy limits in section 7 apply.

One important note: deleting the app does not cancel a subscription. Subscriptions are managed by Apple — cancel in Settings → your name → Media & Purchases → Subscriptions on your iPhone.

Contact

Questions about this policy or about privacy in Readerly:

support@thereaderlyapp.com

Changes to this policy

If Readerly changes in a way that affects this policy — for example if a future version added a new network service — I will update this page and change the "Last updated" date at the top. Significant changes will be noted in the app's release notes. Because the app has no accounts, there is no mailing list to notify; please check back here.

Last updated: 14 September 2026