thereaderlyapp.com

Privacy Policy for Readerly

Last updated: 25 August 2026

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 keeps your reading data on your iPhone. There is no account to create, no server to sign in to, and no copy of your library sitting on a computer I control. I cannot see what you read.

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

Everything you enter in Readerly is written to a private database (Apple's SwiftData) inside the app's own storage on your iPhone. That includes:

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. It stays in the app's private storage, which other apps cannot read. It is not uploaded anywhere.

About device backups. Readerly does not sync or upload your data. 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 talks to two kinds of destination: book databases, which identify books and supply covers, and Anthropic's Claude, which is the optional AI help described in sections 4 and 5 and only ever runs after you agree to it. There are no others — no analytics service, no advertising network, no crash reporter, and no server of mine that holds your library.

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. Two 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.

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 — images.isbndb.com and covers.openlibrary.org

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 stores only the web address of a cover, not the picture itself; the image is fetched and cached by iOS when a cover appears on screen. These image requests go directly from your device and carry no 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. Also the date formats and shelf names it could not read.

What is never sent: any column holding your writing. A column whose values look like prose — a review, a note, a comment — has its values withheld, and only its name is sent. This is decided by looking at the content, not by guessing from the column's title, so it works even if your file calls that column something unexpected.

Nothing about your reading is sent: not your dates, ratings, progress, or session history. The request describes the shape of your file, not what is in it.

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.

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", Readerly makes no network requests at all.

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 an optional auto-renewing subscription that unlocks the Insights dashboard. It is sold entirely through Apple's In-App Purchase system.

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, no advertising SDKs, no crash-reporting services, and no other third-party services in the app.

Children's privacy

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

Because the app collects no personal information from anyone — of any age — and stores everything locally on the device, there is no personal information about a child for me to hold, disclose, or delete. If you are a parent or guardian and have a question, please get in touch at the address below.

Your data, and how to delete it

Because your data lives on your device, you are always in control of it:

There is nothing to request from me, because I hold nothing. There is no account to close and no server-side copy to erase.

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:

[email protected]

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: 25 August 2026