# Catalogue and search

Find an app by name in the iOS catalogue, then read the filtered catalogue table.

Press `⌘K` (or `Ctrl+K`) anywhere in the app to search the catalogue. Type an app name, press Enter, and you land on that app's case file.

The catalogue is iOS only. Every row in it is an App Store listing.

## Search from anywhere

The search overlay is shared. It opens from three places:

- The `⌘K` / `Ctrl+K` shortcut, or `/` when your cursor is not already in a text field.
- The **Search** pill in the Apps view switch at the top of `/apps`, `/apps/search` and `/apps/categories`.
- The search field on the catalogue page.

Inside the overlay:

| Key | What it does |
| --- | --- |
| Typing | Reads the catalogue again after each change |
| `↓` / `↑` | Moves the highlight down and up the results |
| `Enter` | Opens the highlighted app |
| `Esc` | Closes the overlay |

Matching is on the app name, from the start of the name. Searching `calm` finds apps whose name begins with `calm`, not every listing that mentions calm somewhere in its description. Punctuation and wildcards you type are stripped before the lookup.

You get up to eight results at a time, ordered by rating count, highest first. An empty search box shows the most rated apps in the catalogue as suggestions.

Each row shows the app icon, the app name, and then whatever else was collected: the developer, the rating count, and the category. A developer stored only as a numeric ID is left off the row rather than printed as a number.

> No match means the catalogue does not hold an app with that name yet, not that the app does not exist. See [Request an app](/docs/request-an-app).

## The catalogue table

`/apps/search` is the full list. It shows 24 apps at a time, ordered by observed rating count, highest first. Listings with no rating count collected sit at the end.

Above the table, one line states what you are looking at: how many apps are in view, how many categories the catalogue holds, and the date of the snapshot the rows came from.

The columns are:

| Column | What it holds |
| --- | --- |
| `#` | Position in the current page, not a chart rank |
| App | Icon, name and developer |
| Category | The App Store category on the listing; click it to filter |
| Rating | The observed star rating and rating count |
| Installs (ratings proxy) | An estimate derived from the rating count |
| Released | The listing's release date |
| Updated | When the store listing was last re-read |

**Installs is an estimate, not a measured download count.** It is derived from how many people rated the app. A listing with no collected rating count shows a dash instead of a number. [Revenue and download estimates](/docs/revenue-and-download-estimates) explains the arithmetic.

`Updated` says *Store listing not re-read yet* when the listing has never been re-read. That is an absence of a reading, not an absence of updates.

## Filters and the URL

Every filter lives in the address bar, so a filtered view is a link you can send.

- `?search=` narrows by app name.
- `?category=` narrows to one exact category. The active category shows as a chip; the `×` on it clears the filter.
- **All categories** opens the [category browser](/docs/categories).
- **Next page** follows a cursor. Changing any filter starts the list again from the top.

## What the page does not do

Opening the catalogue never waits on the App Store. Rows are served from stored observations with the snapshot date attached. When an iOS listing's store metadata is missing or stale, the page asks the shared backend queue for it in the background and re-reads itself a few times while you stay on the page. If the metadata has not landed by then, the page stops asking rather than blocking.

## Related

- [Categories](/docs/categories)
- [Open a case file](/docs/open-a-case-file)
- [Request an app](/docs/request-an-app)
- [Revenue and download estimates](/docs/revenue-and-download-estimates)
