Pinly ← Back to site

Privacy Policy — Pinly

Effective date: 2026-10-20 (previous version: 2026-09-10)

Summary

Your content never leaves your phone. Camera frames, saved photos, your vocabulary list, and any text you translate are processed entirely on your device — the OCR model, the Chinese-English dictionary and pinyin conversion are all bundled inside the app.

The free version shows ads; Pro has none. Ads are served by Google's Mobile Ads SDK, which sends information about your device — including its advertising ID and IP address — to Google to choose and measure ads. It never receives anything you photograph, read, save or translate. If you buy Pro, the ad software never runs. See "Advertising (free version only)" below.

Apart from ads, Pinly collects nothing about you unless you switch it on. There are no accounts. Three things can put anything on the network, all optional and all off until you choose them:

One note about the software Pinly is built on. The text recognition comes from Google's ML Kit, which ships with a component that reports usage statistics about the recognizer back to Google, on a schedule, in the background. Pinly is built with that component removed, so nothing about your use of recognition is reported to anyone. Test builds made before 10 September 2026 still contained it, and the 10 September 2026 version of this policy marked the change. Anything such a build had queued but not yet sent stays in the app's private storage, where nothing can send it any more, and is removed if you clear the app's data or uninstall. The fonts are bundled inside the app, so nothing is fetched for those either.

If you read nothing else: nothing you read, write, save or photograph leaves your phone. In the free version, Google's ad software sends device information (not your content) to serve ads; Pro switches it off entirely. Beyond that, three requests can go out, and not one of them carries anything about you — two one-time model downloads (translation, which is off until you turn it on, and handwriting, the first time you open a writing pad), and anonymous usage counts, which are also off until you turn them on and carry no content of any kind. Everything else leaves only when you explicitly translate, export or share it, to a destination you pick.

What runs entirely on your device

What's saved on your phone

DataLocationOther apps can see it?
Saved vocab listApp-private DataStore (/data/data/com.pinly/...)No (unless device is rooted or ADB backup is used)
App preferencesApp-private DataStoreNo
Photos you capturePictures/Pinly/ in your shared galleryYes — same as any photo from the system camera. Any gallery / photo app can read them. We surface this in the onboarding and in Settings → About.
Exported PDFsThe file you picked, wherever you put itNo
Opt-in crash logsApp cache (cacheDir/crashes/) until you share themNo

What's shared, and only on your tap

Advertising (free version only)

The free version of Pinly shows small banner ads on some screens and offers an optional short ad for extra photo reads when you reach the daily limit. There are no ads on the live camera, and none at all in Pro.

Who serves them. Ads come from Google AdMob through the Google Mobile Ads SDK, bundled in the app. Pinly does not choose individual ads and does not see who you are.

What Google's ad SDK collects, per Google's own disclosure for the SDK's default settings:

Google uses this for advertising, analytics and fraud prevention, and encrypts it in transit. What Google does with it is covered by Google's privacy policy: <https://policies.google.com/privacy>, and <https://policies.google.com/technologies/ads>.

What it never receives: camera frames, photos, your saved words, readings, translations or anything else you read or write in Pinly.

Your choices

One request of our own. Once a day, the free version downloads a small settings file from our own website. It lets us switch an ad off without waiting for an app update — if a screen turns out to be a bad place for one, it can be gone in minutes rather than days. The request carries nothing: no account, no identifier, no usage, not even a key. It only reads a file, the way your browser would. Pro never makes it.

Pinly's own anonymous usage counts (below) never include your advertising ID, and nothing from the ad SDK is sent to our server.

Anonymous usage counts

Off by default. Until you turn on Share anonymous usage counts in Settings → Anonymous usage data, Pinly records and transmits nothing, and this whole section does not apply to you. You can turn it back off at any time; collection stops immediately.

If you turn it on, we record a small, fixed set of counts:

Alongside each count, the app sends the technical fields the analytics service needs to group them: your Android version, your language setting, Pinly's own version number, and a random session ID that is generated fresh in memory, rotates after an hour of inactivity, and is never stored — so it groups a single sitting and cannot recognise you on a later one.

What is never included: camera frames, photos, saved words or readings, translated text, file names, your location, your device or advertising ID, your IP address as a stored identifier, or anything else that identifies you or your phone. The counts cannot be linked back to a person or a device, which also means we cannot single out your data to hand back or delete on request — turning the setting off stops any further collection.

Why it exists. Pinly's free tier has limits — a number of saved words, a number of photos kept in the app, and a number of photos read per day. (Reading itself is not limited: the live camera, the clean reading page and the text reader are unlimited for everyone.) These counts are how we find out whether those limits are set fairly, instead of guessing. That is the only purpose.

Retention. Usage counts are kept for 12 months and then deleted.

Where they go. To a server we run ourselves, on infrastructure we control. There is no third-party analytics company involved and no analytics SDK in the app. The counts are never sold, never shared for advertising, and never used for any purpose other than the one above.

Our server does not record the IP address your phone connects from. Our hosting provider sees it in order to route the request, as any network does, and we neither store it nor link it to anything.

What we still do not collect

Permissions we request

PermissionWhy
CAMERARequired to show the live camera preview that Pinly's whole purpose depends on.
WRITE_EXTERNAL_STORAGE (max API 28)Legacy storage write for saving photos on Android 7-9. Silently ignored on Android 10+; we use scoped storage there.
POST_NOTIFICATIONS (Android 13+)Only requested if you turn on the optional daily review reminder — the system asks you directly, and the reminder is a quiet local notification. Never requested otherwise.
INTERNETFive uses, and no others: ads in the free version (see "Advertising"), the once-a-day ad settings file described there, the opt-in offline-translation model download described below (off by default), the handwriting model the first time you open a writing pad, and anonymous usage counts if you enable them (off by default). Pinly never sends your text, your strokes, or anything you read.
ACCESS_NETWORK_STATELets the model download check for a connection before starting, and lets the ad SDK check before requesting an ad. No content leaves the device.
com.google.android.gms.permission.AD_IDLets Google's ad SDK read the advertising ID to serve ads in the free version. Not used in Pro.

INTERNET is declared for ads in the free version and to fetch two models.

Offline translation (opt-in, Pro) downloads a Chinese→English model once, after you turn on the (default-off) setting and confirm a "Download (~30 MB)?" prompt. After that, translation runs on your device and your text is never transmitted.

Handwriting downloads a Chinese ink model once, the first time you open a writing pad — you tapped "Write", and the pad tells you it is fetching. After that, reading your writing happens on your device; the strokes never leave it. We fetch it rather than ship it so that people who never write anything never pay for it in download size.

Both are one-way: a model comes in, nothing about you goes out. The other network uses are ads in the free version, the ad settings file described under “Advertising”, and the anonymous usage counts described above, which are off unless you enable them. ACCESS_NETWORK_STATE just lets the model download check for a connection first. (Before 2026-06 the manifest removed INTERNET entirely; we softened that to enable offline translation, gated behind the consent prompt above.)

Google Play Billing

If you purchase Pinly Pro, the transaction is handled entirely by the Google Play Store app on your device, which communicates with Google's billing servers out-of-process via an Android Inter-Process Communication (AIDL) call. Pinly itself never touches the network for this — we only receive the result of the purchase (succeeded / canceled / failed) from the Play Store app.

Google's privacy policy covers what Google does with that data: <https://policies.google.com/privacy>.

Children's privacy

Pinly is intended for general audiences interested in learning Mandarin Chinese, and is intended for a general audience rather than directed at children. Pinly itself collects nothing by default, and the optional usage counts contain no personal or identifying information from anyone, of any age. The free version's ads are served by Google as described under "Advertising". Pinly is rated "Everyone" in Google Play.

Third-party libraries bundled in the APK

All run on-device and send nothing anywhere, except the two Google ad libraries at the end of this list, which run only in the free version.

About this website

Everything above describes the app. This page, and the site it sits on, are separate — and they are the one part of Pinly you are using right now, so they get their own paragraph.

The site is static: a few HTML files and images, no accounts, no logins, no forms, and no cookies. Nothing you do here is tied to anything you do in the app; the two cannot see each other.

We use Cloudflare Web Analytics to see whether anyone is finding the site. It records aggregate page views, the referring site, and a country — it sets no cookies, stores no device or advertising identifier, and does not follow you to other sites. That is also why you are not being asked to dismiss a cookie banner: there is nothing to consent to.

Like any web server, our host sees the IP address your browser connects from in order to send you this page. It is not stored to build a profile of you and is not linked to anything in the app.

The site loads fonts from Google Fonts, which means Google's font servers receive the request for those files. If that matters to you, a content blocker will stop it and the page still reads fine in your system's own typefaces.

Changes to this policy

If we ever change what Pinly collects or transmits, we will update this document and bump the effective date above. The architecture is on-device by default. The network uses are the five described above: ads in the free version (Google's ad SDK, which sends device data but never your content), the once-a-day ad settings file, the translation-model download, the handwriting-model download, and the anonymous usage counts. Any change beyond that would be a significant departure that we'd flag in the app's release notes too.

2026-10-08 change (takes effect with the ads build): added ads to the free version, served by Google AdMob, and the once-a-day settings file described under “Advertising”. Earlier versions of this policy said Pinly had no advertising identifiers or third-party trackers; that is still true of Pro, and of every build before ads shipped.

Contact

Questions about this policy or the app? Email hello.pinly@gmail.com. This is the support address for Pinly; we aim to respond within a few business days.

---

This privacy policy is required by Google Play for any app that collects user data — even when the answer is "no, we don't." Hosting it at a publicly-reachable URL is a Play Console launch requirement.