Tibble pipelines

Discovery returns explicit identifiers. Pass that table to metadata or metrics; the package handles batching and preserves your columns.

st_publishers("Supercell") |>
  st_publisher_apps() |>
  mutate(cohort = "Supercell portfolio") |>
  st_metrics(date_from = "2026-01-01", date_to = "2026-03-31",
             countries = "US", granularity = "monthly")

Character IDs require os. Tables require app_id and os. Both native pipes and magrittr pipes work. To change ID namespaces, use explicit provider mappings:

st_apps("Clash of Clans") |>
  st_app(target_os = "ios") |>
  st_demographics(date_from = "2026-04-01", date_to = "2026-06-30")

There is no name-based merge. All mapped regional store IDs remain visible. The input_app_id and input_os columns trace each mapping to its input.

Empty data stays typed and needs no token:

tibble(app_id = character(), os = character(), cohort = character()) |>
  st_metrics(date_from = "2026-01-01", date_to = "2026-01-31")
#> # A tibble: 0 × 9
#> # ℹ 9 variables: app_id <chr>, os <chr>, cohort <chr>, country <chr>,
#> #   date <date>, metric <chr>, value <dbl>, unit <chr>, period <chr>

Long metrics have explicit units and periods. DAU, WAU and MAU use native windows; granularity changes sales aggregation only. Missing values are not zero. A failed endpoint aborts unless you explicitly request errors = "partial". In partial mode, inspect status, error and endpoint before analysis.