Blog

What the catalog does now

17 Oct 2026

privacybench reads the privacy label each iOS developer publishes on the App Store and turns it into one score. The label is the developer’s own declaration. Apple does not audit it, and neither do we. A high score means the app says it collects a lot. It is not evidence of anything else.

The last few weeks of work were about making that catalog usable without opening the whole database to everyone. Here is what is actually on the site.

A page you can open without an account

Every scored app has a public page. It shows the score, the grade, and how many data types the label declares, including how many are used to track you. It does not list the data types themselves. That list, the purpose under each type, and the history of what was added or removed stay in the full report.

The address is the app’s name plus a short key, not the Apple track id. /app/835599320 is not a public URL. A decimal id redirects to the name key, and a stale name still resolves and then redirects to the current one.

You can also search the catalog by name, with no account and no live call to Apple. A hit opens that public page. A miss is an app we have not read yet: an account can request the full report, and a free account includes five of those checks.

The developer, not only the app

The thing a plan pays for is the developer record. For each seller name in the catalog we keep the portfolio, the site on the listing, the App Store rating, and a combined privacy score. Filters on category, portfolio size, contact and grade sit on the paid side, as do CSV, the API and a watchlist.

A free account can see the top 100 apps and the top 50 developers, in the default order, with no filters and no developer profile. Changing the filters in the page does not get around that. The cap is applied on the server.

How the pages are found

The public app pages are the ones meant for search. Each has its own title, description and canonical URL, plus breadcrumb markup. The sitemap lists those pages and not the signed-in report. /board/app is disallowed for crawlers.

English stays on the bare path: /, /app/…, /pricing, /faq, /check. Polish, Spanish, German, Ukrainian, French and Portuguese each have a prefix (/pl/, /uk/, and the rest), so a search engine can index them as separate pages. The language of the HTML follows the URL. hreflang points each version at the others, with English as the default. App names and the numbers are not translated. The ranking behind the login stays English.

If your browser asks for one of those languages, the bare URL sends you to that version. Choosing a language in the header remembers it. That choice is a temporary redirect, not a permanent move of the English address.

What a plan still is

Free is a look at the top of the catalog. Pro, Research and Business open the developer directory, the full report for every app, filtered export, and the API. Business adds the change feed, the corpus file and webhooks. Payments go through Lemon Squeezy. Cancel any time; a period that has already started is not refunded, because the data can be copied immediately.

Earlier captures are kept. A label that changes shows up as a change, and a label we could not read is left out of the ranking rather than scored as zero.