Google Analytics is back in the latest version of the mobile apps (along with performance enhancements, bug fixes, and other improvements). Long time users may recall that we removed analytics after Apple introduced its App Tracking Transparency (ATT) policy, which raised questions about how to effectively track usage while respecting user privacy. Our reintroduction of Google Analytics involves some important changes. The new implementation is designed to collect only the minimum data needed to understand how the app is used, and to avoid the categories of data collection that trigger Apple’s ATT consent requirement.
If you have already set up analytics for your Curatescape website, the apps uses the same GA4 measurement id to collect data.
There are some additional steps involved if you want to do advanced usage analysis. See draft guide below for more information (subject to change as we continue to refine the details).
Platform Tracking
The app sends usage data to GA4 automatically whenever someone uses the iOS or Android app. Each session is tagged with a Client Platform value of ios or android, which is used throughout this guide to filter reports to app-only traffic.
Preliminary Setup: Register Custom Dimensions
GA4 requires you to explicitly register event parameters before they appear as dimensions in reports. This is a one-time step. Until a dimension is registered, events will still be counted, but you won’t be able to break them down by that dimension in standard reports.
After registering custom dimensions, allow 24–48 hours for them to populate in standard reports. The Explore tool (covered below) works immediately with raw event data.
To register a custom dimension:
- In GA4, click the gear icon (Admin) in the bottom-left corner
- Under your property, click Custom definitions
- Click Create custom dimension
- Fill in the Name, Scope, and Event parameter from the table below
- Click Save
- Repeat for each row in the table
| Dimension name | Scope | Event parameter |
|---|---|---|
| Screen Name | Event | screen_name |
| Content Type | Event | content_type |
| Item ID | Event | item_id |
| Item Name | Event | item_name |
| Search Term | Event | search_term |
| Error Type | Event | error_type |
| Direction | Event | direction |
| Tour ID | Event | tour_id |
| Media Title | Event | media_title |
| Offline Status | Event | status |
| Client Platform | User | client_platform |
Client Platform must use User scope. All others use Event scope.
Separating App Traffic from Browser Traffic
In standard reports
Use the Add comparison feature to filter any report to app-only sessions:
- Open any report (e.g., Reports → Engagement → Events)
- Click Add comparison near the top of the report
- Set the condition: User property / client_platform / exactly matches / ios
- Click Apply
- Optionally add a second comparison for android
The report will display side-by-side columns for each platform, making it easy to compare iOS and Android usage or view them together against the unfiltered total.
In Explore
When building custom explorations, add a filter to any exploration:
- In the Tab settings panel, click Add filter under Filters
- Set: Client Platform / exactly matches / ios (or android, or include both)
Useful Reports
Screen views by screen
Shows how often each screen in the app is visited.
- Go to Explore → Blank exploration
- In the Variables panel, add:
- Dimension: Screen Name
- Metric: Event count
- Drag Screen Name into the Rows box
- Drag Event count into the Values box
- Under Filters, add: Event name / exactly matches / screen_view
- Add a second filter: Client Platform / exactly matches / ios or android
The screens in this app are: About, Bookmarks, Contact, Discover, Map, Search, Settings, Stories, StoryDetail, TourDetail, and Tours.
Most-viewed stories and tours
Shows which content items users view most.
- Explore → Blank exploration
- Add dimensions: Item Name, Content Type
- Add metric: Event count
- Filters:
- Event name exactly matches screen_view
- Content Type exactly matches story (or tour)
- Drag Item Name into Rows, Event count into Values
Search terms
Shows what users are searching for.
- Go to Reports → Engagement → Events
- Click search in the event list to drill into it
- Or in Explore: filter Event name = search, add Search Term as a dimension
User engagement funnel
Shows how users move from browsing to engaging with content.
- Explore → Funnel exploration
- Add steps:
- Step 1: Event name = screen_view AND Screen Name = Discover
- Step 2: Event name = screen_view AND Screen Name = StoryDetail
- Step 3: Event name = share OR bookmark
- Add a Client Platform filter to limit to app sessions
Tour navigation depth
Shows how far users progress through self-guided tours.
- Explore → Blank exploration
- Add dimensions: Tour ID, Item Name, Direction
- Add metric: Event count
- Filter: Event name exactly matches tour_navigate
Offline content downloads
Shows how often users download content for offline use, and whether downloads succeed or fail.
- Go to Reports → Engagement → Events → click offline_download
- Or in Explore: filter Event name = offline_download, add Offline Status as a dimension to see counts broken down by started, complete, and failed
App errors
Shows whether users are encountering content load failures or other recoverable errors.
- Explore → Blank exploration
- Add dimension: Error Type
- Add metric: Event count
- Filter: Event name exactly matches app_error
What the App Tracks
The following events are sent automatically by the app. All events include the Client Platform user property.
| Event | What it means |
|---|---|
| screen_view | User visited a screen |
| search | User ran a search |
| share | User shared a story or tour via the device share sheet |
| bookmark | User added or removed a story bookmark |
| story_map_open | User opened the map on a story detail screen |
| tour_map_open | User opened the map on a tour detail screen |
| audio_open | User opened an audio file |
| video_open | User opened a video |
| file_download | User opened a PDF or document attachment |
| offline_download | User initiated, completed, or failed an offline download |
| external_link_click | User tapped a link to an outside website |
| tour_navigate | User stepped forward or backward through a tour |
| app_error | A content load or delivery error occurred |