EarMemo › What it sends over the network

Does EarMemo send my data anywhere? Here is every network path it has

Three paths, and none of them carries your library. Optional Wi-Fi transfer runs a small web server on the phone and stays inside your own network. Buying Pro, restoring a purchase and the rating sheet go through Apple StoreKit, which is Apple's code talking to Apple. The Rate EarMemo button hands a URL to iOS, and the App Store app opens it. Import, playback, notes, statistics and Markdown export use none of the three.

EarMemo has no server of its own, so there is no address for your audio, notes or listening history to be sent to. Below is the full accounting, and then what you can check without taking my word for any of it.

Last updated 2026-10-21 · Written by Fan YANG, the developer of EarMemo.

Every network path in the app, all three of them

A player that keeps your library on the phone still has to do a few things that touch a network: get files in, take a payment, open a link. Here is each one, when it runs, and where the traffic ends up.

PathWhen it runsWhere the traffic goes
Wi-Fi transfer (optional, idle until you open it)Only while the Wi-Fi transfer screen is open. Leaving the screen stops the server.A plain HTTP listener on the phone, ports 8080–8090, announced over Bonjour as _earmemo-transfer._tcp. Desktop browser to phone, inside your own network; nothing it does crosses your router.
Buying Pro, Restore Purchases, and the rating sheetWhen you tap them, or when iOS decides to show the rating sheet.Apple StoreKit — Apple's framework talking to Apple. The app never sees a card number, and no identity of yours reaches the developer.
The Rate EarMemo button in SettingsOnly on that tap.It hands an apps.apple.com URL to iOS, and the App Store app makes the request. EarMemo does not.
Everything else: import, playback, chapters, speed, sleep timer, bookmarks, notes, statistics, Markdown exportWhenever you use the app.Nowhere. These read and write files on the device.

Each row checked against the shipping source on 2026-10-21.

What is not in the app at all

Four ways to check it from outside the app

A privacy claim you cannot check is just a nicer-sounding promise. These are in order of effort, and the first one needs nothing but your phone.

  1. Turn on App Privacy Report. Settings → Privacy & Security → App Privacy Report. iOS then records, per app, which domains it contacted. Use EarMemo for a few days and look at its entry: a domain EarMemo reached would be listed there.
  2. Watch your own DNS log. If you run a Pi-hole, NextDNS, or a router that logs lookups, keep it open while you import files, play, write notes and export. A name lookup is the first thing an app does before it reaches a server, and it is hard to hide from your own resolver.
  3. Put the device behind a proxy. Point it at Proxyman, Charles or mitmproxy on your computer and exercise the whole app. Purchases are the one place you will see traffic, and it is Apple's: StoreKit runs outside the app's process.
  4. Airplane mode from the first launch. Install it, switch airplane mode on, then open the app for the first time and import from the Files app, play, take notes, read your statistics. An app that depends on a server tends to stall or nag at first launch. The offline player page goes through this one in more detail.

Two more pieces of evidence sit on Apple's side rather than mine. EarMemo's App Store privacy label reads Data Not Collected, and the privacy manifest inside the app declares tracking off with an empty list of tracking domains and an empty list of collected data types. Both are declarations Apple holds developers to, which makes them a different kind of evidence from a sentence on a website.

The check that runs on my side

You cannot run this one, because you do not have the source. It is still the reason the list above stays at three: the project's own working rule is that this search has to come back empty before any networking code is written, and it sits in the instructions I build from.

$ grep -rn "URLSession\|URLRequest\|dataTask" --include="*.swift" \
    Sources ShareExtension SleepTimerWidget Shared
$   # no matches — 2026-10-21

URLSession is how an app of this kind makes an outbound request of its own, and there is none in the project. The one import Network is the Wi-Fi transfer server, and the one outbound URL the app ever opens is its own App Store page — the other three places it hands a URL to iOS all open the iOS Settings app.

What the Wi-Fi transfer server is, including the uncomfortable part

It is a small HTTP listener on the phone, bound to a port between 8080 and 8090, announced over Bonjour as _earmemo-transfer._tcp so your computer can find it without you typing an address. It starts when you open the Wi-Fi transfer screen and stops when you leave it. While it is running, anyone on the same network who opens that address can see the file list and upload — the per-launch token the page carries stops a random web page in your browser from calling the API, not a person on your network who loads the page properly. So: use it on a network you control, and leave the screen when you are done. The step-by-step is in transferring audio without iTunes.

Why this page lists paths instead of making a promise

An absolute denial would make the better slogan and the worse claim: the three paths above exist, so a sentence denying all network activity would simply be false. This site has a build check for that — a list of absolute network phrases that fails the build on sight, including the ones a page like this one is most tempted to use. What is left is an accounting you can go and check, which is worth more than a promise you cannot.

When EarMemo is the wrong choice

  • You want to read the source. EarMemo is not open source. Everything above is checkable from outside the app — the privacy report, your DNS log, a proxy — but you cannot audit the code. If that is your bar, BookPlayer is open source and a reasonable answer.
  • You want purchases to work with no connection. Buying Pro and restoring a purchase need one, because StoreKit does. Everything you already own keeps working without it.
  • You want your library on every device. There is no sync, because there is no server to sync through. Your data rides along with your own iCloud device backup if you have one enabled.
  • You want podcast subscriptions in the app. A feed has to be fetched over the network. EarMemo plays files you already downloaded.

Questions people actually ask

Does EarMemo upload my audio or my notes?

No. Audio files, notes, bookmarks, playback position and listening statistics are written to the device only. There is no developer server to receive them.

Which network paths does EarMemo have?

Three: optional Wi-Fi transfer on your local network, Apple StoreKit for purchases and restores, and handing an App Store URL to iOS when you tap Rate EarMemo. Import, playback, notes, statistics and export use none of them.

Why does iOS ask EarMemo for local network access?

Only Wi-Fi transfer needs it, so the permission is requested when you first open that screen rather than at launch. Decline it and the rest of the app is unaffected.

How can I see for myself what the app contacts?

Switch on Settings → Privacy & Security → App Privacy Report and use the app for a few days, watch your own DNS log, or route the device through a proxy such as Proxyman, Charles or mitmproxy.

Does the app contain any third-party SDK?

No. The project has no dependency file for CocoaPods, Carthage or Swift Package Manager, and every framework the app links is one of Apple's.

Does earmemo.app track visitors?

The site loads no analytics script and sets no cookie. Its one script swaps the App Store campaign token when you arrive from ChatGPT; it sends no event and stores nothing about you. The pages are served by Cloudflare, which sees the request the way any web host does.

Try it with your own files

EarMemo is free to download and free to keep using within its quota. EarMemo Pro is a single one-time purchase — no subscription, no ads, no account.

Download on the App Store

Full pricing in plain text