Migrating to sensortowerR 1.0.0

knitr::opts_chunk$set(collapse = TRUE, comment = "#>", eval = FALSE, purl = FALSE)

Why 1.0.0?

Through versions 0.1 – 0.9 the public surface grew organically to 78 exported functions. Many did the same thing with slightly different argument names (five ways to fetch revenue, three ways to get top charts, two app-lookup paths), and 11 internal helpers had leaked into the namespace. Version 1.0.0 consolidates the API around four core verbsst_metrics(), st_rankings(), st_app() / st_apps(), st_filter() — and standardizes parameter names across every retained function.

The old names still exist as .Defunct() stubs that error with the exact replacement call, so you won't get a cryptic "object not found" — you'll get a one-line migration hint right in your REPL.

The one rule that affects every script

Revenue is now returned in dollars by default. Previously every revenue column was raw integer cents. If you have pipelines that did revenue / 100 by hand, remove that division. If you have pipelines that rely on integer cents, pass revenue_unit = "cents" to restore the old values:

# Old behavior (integer cents)
sales_cents <- st_metrics(app_id = "...", revenue_unit = "cents")

# New default (numeric dollars)
sales_dollars <- st_metrics(app_id = "...")

Function-by-function translation

Metrics (revenue, downloads)

| v0.9.x | v1.0.0 | |---|---| | st_sales_report(os = "ios", ios_app_id = id, ...) | st_metrics(app_id = id, os = "ios", ...) | | st_unified_sales_report(unified_app_id = id, ...) | st_metrics(app_id = id, os = "unified", ...) (default) | | st_batch_metrics(app_list = ids, ...) | st_metrics(app_id = ids, ...) | | st_smart_metrics(app_ids = ids, ..., use_cache = TRUE) | st_metrics(app_id = ids, ..., cache = TRUE) (default) |

Argument renames: - start_date / end_datedate_from / date_to - date_granularitygranularity - measuremetrics (vector) - regionscountries - app_list / ios_app_id / android_app_id / unified_app_idapp_id

Rankings

| v0.9.x | v1.0.0 | |---|---| | st_top_charts(measure = "revenue", category = 6014, ...) | st_rankings(entity = "app", category = 6014, ...) | | st_top_publishers(...) | st_rankings(entity = "publisher", ...) | | st_category_rankings(category = 6014, ...) | st_rankings(entity = "category", category = 6014, ...) |

App lookup and discovery

| v0.9.x | v1.0.0 | |---|---| | st_app_info(term = "Royal Match") | st_apps(query = "Royal Match") | | st_app_lookup(app_id = id) | st_app(app_id = id) | | st_app_details(app_ids = ids, os = "ios") | st_app(app_id = ids, os = "ios") |

Filters

All nine filter-builder functions collapse into a single st_filter():

| v0.9.x | v1.0.0 | |---|---| | st_filter_by_date(start = ..., end = ...) | st_filter(date_from = ..., date_to = ...) | | st_filter_by_genre(genre_id = 123) | st_filter(genre = 123) | | st_filter_by_monetization(model = "free") | st_filter(monetization = "free") | | st_filter_by_publisher(publisher_id = 456) | st_filter(publisher = 456) | | st_filter_by_sdk(sdk_name = "unity") | st_filter(sdk = "unity") | | st_custom_fields_filter(custom_fields = list(...)) | st_filter(custom_fields = list(...)) | | st_custom_fields_filter_by_id(filter_id = "5f...") | st_filter(filter_id = "5f...") | | st_combine_filters(list(a, b)) | c(a, b) (S3 method) | | st_create_simple_filter(field, value) | st_filter(custom_fields = setNames(list(value), field)) |

The returned st_filter object is accepted everywhere a raw filter ID string was accepted before — st_apps(filter = ...), st_rankings(filter = ...), st_get_filtered_apps(filter = ...).

Parameter renames in retained functions

Functions that were already clean in 0.9.x (st_active_users(), st_retention(), st_publisher_apps(), st_publisher_portfolio(), st_session_metrics(), st_yoy_metrics(), st_demographics(), st_game_summary(), st_app_enriched()) keep their identities but have their parameters standardized:

| Old | New | |---|---| | ios_app_id, android_app_id, unified_app_id, unified_id | app_id | | app_store, platform | os | | region, regions | country (scalar) / countries (vector) | | start_date, end_date | date_from, date_to | | date_granularity | granularity | | measure, metric | metrics | | token, api_key | auth_token | | n, max_results | limit |

Removed exports (now internal)

These were implementation details that were accidentally exported. If you were using them externally, they're still accessible via sensortowerR:::name() — but the public API replacements are:

| Removed | Replacement | |---|---| | clean_numeric_column(), format_vector() | Use typed formatters: format_currency(), format_downloads(), etc. | | find_column(), select_columns_safe(), select_robust(), require_column() | Relied on v0.9 column conventions — v1.0 output schemas are stable, so these aren't needed | | validate_columns(), validate_top_charts_data(), get_column_spec(), map_region_columns(), try_column_operation() | Implementation details; no replacement |

Checking your scripts

The fastest way to find v0.9 calls that need updating:

# From the terminal
system("grep -rn 'st_sales_report\\|st_unified_sales_report\\|st_batch_metrics\\|st_smart_metrics' your_project/")

Or just run your script — the .Defunct() stubs will error with the exact replacement call for each removed function.



Try the sensortowerR package in your browser

Any scripts or data that you put into this service are public.

sensortowerR documentation built on April 25, 2026, 5:06 p.m.