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
- Readerly has no user accounts and no login.
- Your library and reading sessions are stored only on your device.
- I never receive your reading data and have no way to access it.
- The app sends your book search text or a scanned ISBN to a book database so it can find the book. Nothing about your reading is attached to that request.
- Optional: if you tap "Find Covers" or "Find Descriptions" — after an import, or in Settings — Readerly sends each book's ISBN, or its title and author when it has no ISBN, to a book database to fetch the cover and details. No export file includes cover images or descriptions, so this is the only way an imported library gets them. You are asked first and it never runs on its own. Your reviews, notes, ratings and reading dates are never sent.
- Optional: if you tap "Find Genres" after an import, Readerly sends the titles and authors of your uncategorized books to Anthropic's Claude to identify their genres. You are asked first, every time, and it never runs on its own. Your reviews, notes, ratings, reading dates and progress are never sent.
- Optional: if your import file comes from a service Readerly doesn't know, you can tap "Figure Out This File" to send its column names and a few sample values to Claude to work out how to read it. Columns holding your reviews or notes are never sent, not even a sample. You are asked first.
- Barcode scanning happens entirely on your device. Camera images are never saved and never sent anywhere.
- Readerly has no advertising, no analytics tools, and no tracking. It never asks to track you across other apps or websites, because it doesn't.
- Nothing is ever sold or shared for marketing.
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:
- The books in your library — title, author, ISBN, page count, cover image, genre, and the shelf and star rating you give them.
- Your reading sessions — dates, times, page counts, and progress.
- Your app settings and preferences (stored in iOS's standard settings storage).
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:
- The book's own details, cached. An answer about a book — its title, author, cover address, description, publisher and so on — is stored for up to 30 days and reused for anyone who asks about the same book. This is a cache of public facts about books, not of anything about you. It is keyed by the ISBN, not by your device, and one reader cannot be distinguished from another in it.
- A count, for one day. A running total of how many lookups your random ID has made today, so a daily limit can be enforced. It is a number. It expires after midnight UTC and is not a history of what you looked up.
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.
- Scanning uses Apple's VisionKit, which reads the barcode entirely on your device.
- Camera images and video frames are never stored and never transmitted anywhere — not to me, not to a book database, not to anyone.
- The only thing that leaves the camera is the barcode's number (the ISBN), which is then used exactly like a typed search: sent to a book database to look up the book, as described in sections 1 and 2.
- iOS asks your permission before the camera is used, and you can withdraw it at any time in Settings → Privacy & Security → Camera. The rest of the app works without it; you can always add books by typing.
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.
- Apple processes the payment. I never receive, see, or store your payment card number, billing address, or Apple Account details.
- The app asks Apple's StoreKit only one thing: whether this Apple Account currently has an active Readerly Pro subscription. It gets back a yes or no. That answer stays on the device.
- Your purchase is handled under Apple's privacy policy and terms.
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:
- Delete individual items — remove a book or a reading session inside the app at any time.
- Delete everything — delete the Readerly app from your iPhone. That removes the app's local database and all of the reading data in it. This is permanent, so export or note anything you want to keep first.
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:
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