Owlmetry
CLI

Apps

Create, list, and manage apps within projects from the CLI.

Apps represent a specific platform build within a project. Each app has a platform (apple, android, web, backend) and an optional bundle identifier — required for non-backend platforms, immutable after creation. Creating an app auto-generates a client_secret API key for SDK use.

Locale demand. Each user carries two locale signals captured by the SDK: their wanted language (Locale.preferredLanguages.first, e.g. fr-FR) and the shown locale (Locale.current, constrained to what the app already ships). The SDK also reports the languages the app binary ships (Bundle.main.localizations), so the localization gap — demand for a language the app doesn't ship yet — is computed automatically: a language is flagged shipped: false when its base language isn't in the app's shipped set. The country breakdown works for every user today; the language breakdown fills in as users upgrade to the SDK that reports preferred language. Like user listings, locale demand respects the data_mode filter (production default, development, or all), so test installs don't skew which languages your real users want.

List apps

owlmetry apps list [--project-id <id>]

Lists all apps accessible to the authenticated team. Optionally filter by project.

FlagRequiredDescription
--project-id <id>NoFilter results to a specific project UUID
# All apps
owlmetry apps list

# Apps in a specific project
owlmetry apps list --project-id 550e8400-...

View an app

owlmetry apps view <id>

Shows app details including platform, bundle ID, client key, and latest_app_version (with the source it was resolved from — App Store or computed). See Latest Version Detection.

ArgumentDescription
<id>App UUID

Create an app

owlmetry apps create --project-id <id> --name <name> --platform <platform> [--bundle-id <bundleId>]
FlagRequiredDescription
--project-id <id>YesParent project UUID
--name <name>YesDisplay name for the app
--platform <platform>YesOne of: apple, android, web, backend
--bundle-id <bundleId>ConditionalRequired for apple, android, and web platforms. Not used for backend.

Platforms

PlatformDescriptionBundle ID
appleiOS, iPadOS, macOS appsRequired (e.g., com.example.myapp)
androidAndroid appsRequired (e.g., com.example.myapp)
webWeb applicationsRequired (e.g., com.example.webapp)
backendServer-side servicesNot applicable
# iOS app
owlmetry apps create \
  --project-id 550e8400-... \
  --name "My iOS App" \
  --platform apple \
  --bundle-id com.example.myapp

# Backend service
owlmetry apps create \
  --project-id 550e8400-... \
  --name "API Server" \
  --platform backend

A client API key (owl_client_*) is automatically generated when an app is created. The key is returned in the response and stored as a row in the api_keys table — there is no separate column on the app record.

Update an app

owlmetry apps update <id> --name <name>

Only the app name can be updated. Bundle IDs are immutable after creation.

Argument / FlagRequiredDescription
<id>YesApp UUID
--name <name>YesNew app name

Deleting apps

The CLI does not expose an apps delete command. App deletion is user-only — agent API keys receive a 403 from the delete endpoint. To delete an app, use the web dashboard while signed in as a user.

Locale demand

owlmetry locales --project-id <id>
owlmetry locales --app-id <id>
owlmetry locales --team-id <id>

Shows where your localization demand is: users grouped by their wanted language (e.g. fr-FR, pt-BR) with a NOT SHIPPED flag for languages the app doesn't ship yet, plus a country breakdown that works for every user today.

FlagRequiredDescription
--project-id <id>NoNarrow to a project (enables the shipped/gap flags)
--app-id <id>NoNarrow to an app (enables the shipped/gap flags)
--team-id <id>NoFilter to a team
--data-mode <mode>Noproduction (default), development, or all — filters users by their dev/prod flag

The shipped/gap flags only appear when a single app or project is in scope. The language breakdown fills in as users upgrade to the SDK that reports preferred language; until then the country breakdown is your signal. Supports --format json.

JSON output

All app commands support --format json for machine-readable output:

owlmetry apps list --format json
owlmetry apps view <id> --format json

Ready to get started?

Connect your agent via MCP or CLI and start tracking.