Pugpig Analytics Specification
Table of Contents
Welcome to the Pugpig Analytics Specification – a comprehensive guide to all of the events, screens and dimensions that we track in our Bolt apps.
The document is broken down into three sections:
- Events - measure specific user interactions with your Bolt app
- Dimensions and properties - describe details about the event or the user who performed the event. They are the attributes of your data.
- Screens - the screen from which an event was triggered
Scope
Tying them together is their scope. We've assigned a scope to each event, screen and dimension to indicate how the three relate to each other. The scope indicates the depth of your analytics and is split into three categories:
- Page - captures all interactions in the content view
- Collection - captures all interactions at the collection level (edition or timeline)
- Global - found globally. These dimensions send with all events
Events
Events measure specific user interactions with your Bolt app.
Lifecycle events
BoltAppFirstOpen
Tracks the first time the user opens the app.
Scope: GLOBAL
BoltAppUpdated
Tracks when a user updates the app from a previous version.
Scope: GLOBAL
BoltLaunchedWithURL
Tracks when the app is opened from a URL
Key dimensions:
GA4 Dimension | Description | Values |
---|---|---|
pugpigURL / KGURL | The URL that started the app | e.g. app.pugpig.com/t/storefront/storefront |
Scope: GLOBAL
BoltLogin
Tracks when a subscriber login is successful.
Key dimensions:
GA4 Dimension | Description | Values |
---|---|---|
Page title and screen name | The screen name where the sign in took place | e.g. /Account/WebSignIn |
Scope: GLOBAL
BoltLoginDismissed
Tracks when a user dismisses the login modal
Scope: GLOBAL
BoltLoginFailed
Tracks when a subscriber login is unsuccessful.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigError / KGError | Details the reason for the failure | e.g. KGAuthErrorSignIn |
Scope: GLOBAL
BoltLoginSelected
Tracks when a user taps a button that opens the sign in modal.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigSource / KGLabel | The screen type where the sign in tap takes place |
Deeplink Paywall Subscription Settings |
Scope: GLOBAL
BoltLogout
Tracks when a subscriber logs out
Scope: GLOBAL
BoltOnboardingActionTapped
Tracks when a user taps the call to action button from a Bolt welcome screen.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigScreenName / KGLabel | The screen name where the tap takes place | e.g. screen1 |
Scope: GLOBAL
BoltOnboardingCompleted
Tracks when a user reaches the last Bolt welcome screen and taps the button to dismiss it.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigScreenName / KGLabel | The screen name where the skip takes place | e.g. screen6 |
Scope: GLOBAL
BoltOnboardingSkipped
Tracks when a user taps the skip button from a Bolt welcome screen.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigScreenName / KGLabel | The screen name where the skip takes place | e.g. screen1 |
Scope: GLOBAL
BoltParentalGateFail
Tracks when the parental gate bypass fails
Scope: GLOBAL
BoltParentalGatePass
Tracks when the parental gate bypass succeeds
Scope: GLOBAL
BoltTrackingToggled
Tracks when a user turns analytics tracking on or off, if an analytics content screen is configured.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigToggleState / KGLabel | Details the tracking status | YES NO |
Scope: GLOBAL
Purchase and paywall events
BoltMeterDisplayShown
Tracks when the meter is shown.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigLimitCount / KGLabel | The number of free articles the user has remaining | e.g. 9 |
PugpigPageName / KGPageName | The page name where the meter was shown | e.g. Today's News |
Scope: PAGE
BoltMeterDisplayTapped
Tracks when the meter display is tapped.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The page name where the meter was tapped | e.g. Today's News |
Scope: PAGE
BoltPaywallDismissed
Tracks when a user taps to dismiss the paywall.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The page name where the paywall was dismissed | e.g. Today's News |
Scope: PAGE
BoltPaywallDisplayed
Tracks when a user sees the paywall. This happens primarily while viewing article content but can also can be happen when a user taps on cards that don't have an associated content view (i.e. audio cards).
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The page name where the paywall was displayed | e.g. Today's News |
Scope: PAGE
BoltRestorePurchases
Tracks when a purchase is restored on iOS. Restoration is automatic on Android.
Scope: GLOBAL
BoltSinglePurchase
Tracks when a single issue has been purchased via the store
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigProductSKU / KGLabel | The product SKU (stock keeping unit) | e.g. 101300 |
Scope: GLOBAL
BoltSinglePurchaseSelected
Tracks when an app store (iTunes, Google Play, Amazon) purchase is selected via the paywall.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigProductSKU / KGLabel | The product SKU (stock keeping unit) | e.g. 101300 |
Scope: PAGE
BoltStorefrontFilterTapped
Tracks when an item in the filter bar is tapped.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigFilter / KGLabel | The collection path (iOS) or the user-facing name of the filter (Android) |
e.g. /t/storefront/magazines (iOS) or Magazines (Android) |
Scope: GLOBAL
BoltStorefrontSubscribeTapped
Tracks when the subscribe button on the storefront is tapped.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigEditionID / KGLabel | Indicates the edition on which the subscribe button was tapped | e.g magazine.issue.010124 |
Scope: GLOBAL
BoltSubscriptionChosen
Tracks when subscription duration is selected on the subscribe panel (eg. one year).
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigSubscriptionID / KGLabel | The subscription ID | e.g. com.news.magazine.1year |
Scope: GLOBAL
BoltSubscriptionClicked
Tracks when the subscribe button is tapped to display a choice panel of one or many subscription durations which leads to a BoltSubscriptionChosen event.
Key dimensions:
GA4 Dimension | Description | Values |
---|---|---|
Page title and screen name | The screen name where the tap took place | e.g. /Account/Subscribe |
Scope: GLOBAL depending on where the user is when they tap
BoltSubscriptionDismissed
Tracks when the user dismisses the subscription modal.
Scope: GLOBAL
BoltSubscriptionLinked
Tracks when a user links their app store subscription via receipt postback.
Scope: GLOBAL
BoltSubscriptionPurchase
Tracks when a subscription has been purchased via the store.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigSubscriptionID / KGLabel | The subscription ID | e.g. com.news.magazine.1year |
Scope: GLOBAL
BoltVoucherRedemptionFail
Tracks when a subscriber voucher code redemption is unsuccessful.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigVoucherCode / KGLabel | The code of the voucher the user has attempted to redeem | e.g. news10 |
PugpigError / KGError | The reason that the redemption was unsuccessful | e.g. too many concurrent devices |
Scope: GLOBAL
BoltVoucherRedemptionSuccess
Tracks when a subscriber voucher code is successfully redeemed.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigVoucherCode / KGLabel | The code of the voucher that has been redeemed | e.g. news10 |
Scope: GLOBAL
Audio events
BoltAudioAddToQueue
Tracks when a user adds a track to the audio player queue.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTrackName / KGLabel | The track name | e.g. Today's Podcast |
Scope: PAGE
BoltAudioClear
Tracks when the clear queue button is tapped.
Scope: GLOBAL
BoltAudioDismiss
Tracks when the user closes the audio player.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTrackName / KGLabel | The track name | e.g. Today's Podcast |
PugpigAudioElapsedSeconds / KGAudioElapsedSeconds | The time that elapsed in the audio track before the event took place (seconds) | e.g. 1, 10, 50 |
PugpigAudioTotalSeconds / KGAudioTotalSeconds | The total duration of the audio track (seconds) | e.g 1, 10, 50 |
Scope: PAGE
BoltAudioOfflineToggle
Tracks when the “available offline” toggle is tapped.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
pugpigToggleState / KGLabel | The toggle state |
YES NO |
Scope: GLOBAL
BoltAudioPause
Tracks when a user pauses a piece of audio.
Key dimensions
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTrackName / KGLabel | The track name | e.g. Today's Podcast |
PugpigAudioElapsedSeconds / KGAudioElapsedSeconds | The time that elapsed in the audio track before the event took place (seconds) | e.g. 1, 10, 50 |
PugpigAudioTotalSeconds / KGAudioTotalSeconds | The total duration of the audio track (seconds) | e.g 1, 10, 50 |
Scope: PAGE
BoltAudioPlay
Tracks when a user begins playing a piece of audio through actively tapping the play button. This is a subset of BoltAudioStartedPlaying.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTrackName / KGLabel | The track name | e.g. Today's Podcast |
PugpigAudioElapsedSeconds / KGAudioElapsedSeconds | The time that elapsed in the audio track before the event took place (seconds) | e.g. 1, 10, 50 |
PugpigAudioTotalSeconds / KGAudioTotalSeconds | The total duration of the audio track (seconds) | e.g 1, 10, 50 |
Scope: PAGE
BoltAudioSeekBack15
Tracks when seek back by 15 seconds icon is tapped.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTrackName / KGLabel | The track name | e.g. Today's Podcast |
PugpigAudioElapsedSeconds / KGAudioElapsedSeconds | The time that elapsed in the audio track before the event took place (seconds) | e.g. 1, 10, 50 |
PugpigAudioTotalSeconds / KGAudioTotalSeconds | The total duration of the audio track (seconds) | e.g 1, 10, 50 |
Scope: PAGE
BoltAudioSeekForward15
Tracks when seek forward by 15 seconds icon is tapped.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTrackName / KGLabel | The track name | e.g. Today's Podcast |
PugpigAudioElapsedSeconds / KGAudioElapsedSeconds | The time that elapsed in the audio track before the event took place (seconds) | e.g. 1, 10, 50 |
PugpigAudioTotalSeconds / KGAudioTotalSeconds | The total duration of the audio track (seconds) | e.g 1, 10, 50 |
Scope: PAGE
BoltAudioSkipBack
Tracks when the previous track button is tapped.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTrackName / KGLabel | The track name | e.g. Today's Podcast |
PugpigAudioElapsedSeconds / KGAudioElapsedSeconds | The time that elapsed in the audio track before the event took place (seconds) | e.g. 1, 10, 50 |
PugpigAudioTotalSeconds / KGAudioTotalSeconds | The total duration of the audio track (seconds) | e.g 1, 10, 50 |
Scope: PAGE
BoltAudioSkipForward
Tracks when skip forward icon is tapped.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTrackName / KGLabel | The track name | e.g. Today's Podcast |
PugpigAudioElapsedSeconds / KGAudioElapsedSeconds | The time that elapsed in the audio track before the event took place (seconds) | e.g. 1, 10, 50 |
PugpigAudioTotalSeconds / KGAudioTotalSeconds | The total duration of the audio track (seconds) | e.g 1, 10, 50 |
Scope: PAGE
BoltAudioSpeedChanged
Tracks when a users interacts with the playback speed button in the audio player
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigAudioSpeed / KGLabel | The user's chosen playback speed | 0.5, 1 , 1.25, 1.5, 2 |
PugpigTrackName / KGTrackName | The track name | e.g. Today's podcast |
PugpigAudioElapsedSeconds / KGAudioElapsedSeconds | The time that elapsed in the audio track before the event took place (seconds) | e.g. 1, 10, 50 |
PugpigAudioTotalSeconds / KGAudioTotalSeconds | The total duration of the audio track (seconds) | e.g 1, 10, 50 |
Scope: PAGE
BoltAudioStartedPlaying
Tracks when a piece of audio begins playing (e.g. from the queue or when a user presses play).
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTrackName / KGLabel | The track name | e.g. Today's Podcast |
PugpigAudioElapsedSeconds / KGAudioElapsedSeconds | The time that elapsed in the audio track before the event took place (seconds) | e.g. 1, 10, 50 |
PugpigAudioTotalSeconds / KGAudioTotalSeconds | The total duration of the audio track (seconds) | e.g 1, 10, 50 |
Scope: PAGE
BoltAudioTrackComplete
Tracks when a track that is being played reaches the end.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTrackName / KGLabel | The track name | e.g. Today's Podcast |
PugpigAudioElapsedSeconds / KGAudioElapsedSeconds | The time that elapsed in the audio track before the event took place (seconds) | e.g. 1, 10, 50 |
PugpigAudioTotalSeconds / KGAudioTotalSeconds | The total duration of the audio track (seconds) | e.g 1, 10, 50 |
Scope: PAGE
Video events
Currently in-content YouTube videos are not sending analytics tracking. A fix for this is scheduled.
BoltVideoBuffer
Tracks when a video buffers.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the video that has buffered | e.g. breaking news |
PugpigVideoElapsedSeconds / KGVideoElapsedSeconds | The time that elapsed in the video before the event took place (seconds) | e.g. 1, 10, 50 |
PugpigVideoTotalSeconds / KGVideoTotalSeconds | The total duration of the video (seconds) | e.g 1, 10, 50 |
Scope: PAGE
BoltVideoComplete
Tracks when a video finishes.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the video that has completed | e.g. breaking news |
PugpigVideoElapsedSeconds / KGVideoElapsedSeconds | The time that elapsed in the video before the event took place (seconds) | e.g. 1, 10, 50 |
PugpigVideoTotalSeconds / KGVideoTotalSeconds | The total duration of the video (seconds) | e.g 1, 10, 50 |
Scope: PAGE
BoltVideoPause
Tracks when pause is tapped on a video (you can therefore have multiple video playing events tracked for one video if a user is pausing it and then restarting it).
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the video that the user has paused | e.g. breaking news |
PugpigVideoElapsedSeconds / KGVideoElapsedSeconds | The time that elapsed in the video before the event took place (seconds) | e.g. 1, 10, 50 |
PugpigVideoTotalSeconds / KGVideoTotalSeconds | The total duration of the video (seconds) | e.g 1, 10, 50 |
Scope: PAGE
BoltVideoPlay
Tracks when play is tapped on a video (you can therefore have multiple video playing events tracked for one video if a user is pausing it and then restarting it).
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the video that the user has played | e.g. breaking news |
PugpigVideoElapsedSeconds / KGVideoElapsedSeconds | The time that elapsed in the video before the event took place (seconds) | e.g. 1, 10, 50 |
PugpigVideoTotalSeconds / KGVideoTotalSeconds | The total duration of the video (seconds) | e.g 1, 10, 50 |
Scope: PAGE
Content interaction events
BoltCarouselTap
Tracks when a user taps on an item within a carousel.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigCarouselTitle / KGLabel | The title of the carousel | e.g. latest_news |
Scope: PAGE
BoltDeleteAllEditions
Tracks when all editions are marked for deletion.
Scope: GLOBAL
BoltEditionDeleted
Tracks whenever an edition is marked for deletion from the storefront.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigEditionName / KGEditionName | The name of a collection, sent from the JSON feed | e.g. Issue 01 |
PugpigEditionID / KGEditionID | The unique ID of a collection, sent from the JSON feed | e.g. issue01 |
Scope: COLLECTION
BoltEditionOpened
Tracks when a user opens an edition.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigEditionName / KGEditionName | The name of an collection, sent from the JSON feed | e.g. Issue 01 |
PugpigEditionID / KGEditionID | The unique ID of a collection, sent from the JSON feed | e.g. issue01 |
Scope: COLLECTION
BoltSave
Tracks when you save a card to the saved timeline.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the card the user is saving | e.g. World news |
Scope: PAGE
BoltScroll
Tracks when a users scrolls on an article. Only fires once per page (upon the user navigating away from the article). It requires configuration.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigScrollDepth / KGScrollDepth | How far the user navigated through the page | Recommended parameters: 25%, 50%, 75%, 90% and 100% |
Scope: PAGE
BoltScrubberClose
Tracks when a user closes the edition scrubber
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigEditionName / KGEditionName | The name of a collection, sent from the JSON feed | e.g. Issue 01 |
PugpigEditionID / KGEditionID | The unique ID of a collection, sent from the JSON feed | e.g. issue01 |
Scope: COLLECTION
BoltScrubberItemSelected
Tracks when a user taps on a page within the edition scrubber.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the page selected from the scrubber | e.g. Breaking news |
PugpigEditionName / KGEditionName | The name of a collection, sent from the JSON feed | e.g. Issue 01 |
PugpigEditionID / KGEditionID | The unique ID of a collection, sent from the JSON feed | e.g. issue01 |
Scope: PAGE
BoltScrubberOpen
Tracks when a user opens the edition scrubber.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigEditionName / KGEditionName | The name of a collection, sent from the JSON feed | e.g. Issue 01 |
PugpigEditionID / KGEditionID | The unique ID of a collection, sent from the JSON feed | e.g. issue01 |
Scope: COLLECTION
BoltShare
Tracks when card content or an article is shared.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigShareType / KGLabel | The platform that the user has chosen to share via (iOS only) | e.g. net.whatsapp.WhatsApp.ShareExtension |
PugpigPageName / KGPageName | The name of the page the user is sharing | e.g. World news |
Scope: PAGE
BoltShareOpened
Tracks when the share dialogue is opened from a card. This takes place in both the timeline and article views.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the card the user is removing | e.g. World news |
Scope: PAGE
BoltScrubberSectionSelected
Tracks when a user selects a section to navigate to from the scrubber.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigEditionName / KGEditionName | The name of a collection, sent from the JSON feed | e.g. Issue 01 |
PugpigEditionID / KGEditionID | The unique ID of a collection, sent from the JSON feed | e.g. issue01 |
Scope: COLLECTION
BoltUnsave
Tracks when a user removes an article or card from the saved timeline.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the card the user is removing | e.g. World news |
Scope: PAGE
BoxoutOpen
Tracks when a user expands a boxout to read the contents.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the article where the user has expanded the boxout | e.g. Breaking News |
Scope: PAGE
RecirculationModuleClick
Tracks when a user clicks on the recirculation module to view a recommended piece of content.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigDestinationURL / KGLabel | The destination URL |
Scope: PAGE
Product interaction events
BoltAddToCalendar
Tracks when add to calendar is pressed & event is not subscribed.
Scope: PAGE
BoltDarkModeToggle
Tracks when a user updates their dark mode preferences.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigToggleState / KGLabel | Indicates the state the user has updated to |
System Dark Light |
Scope: GLOBAL
BoltExternalLinkOpened
Tracks when an external link is launched.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigDestinationURL / KGLabel | The destination URL | e.g. https://x.com/pugpig |
Scope: PAGE
BoltIconChanged
Tracks when a user changes the app icon
Scope: GLOBAL
BoltNotificationOpen
Tracks when a user opens a push notification
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigCampaign / KGLabel | The PPCampaign value from the push data. In some providers you will need to declare this for every notification campaign | e.g. NewEditionPush |
Scope: GLOBAL
BoltNotificationStatusChange
Tracks when a user updates their notification opt-in status.
iOS: sent as soon as notification permissions are changed. Android: sent upon force killing and relaunching the app.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigNotificationAllowedStatus / KGNotificationsAllowedStatus | The user-level notification status that the user has been updated to |
Authorised Denied Provisional (iOS-only) Unknown |
PugpigNotificationStatus / KGLabel | The notification status that has been selected by the user |
Authorised Denied Provisional (iOS-only) Unknown |
Scope: GLOBAL
BoltSettingsSelected
Tracks when a user selects an item on the settings screen.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigItemSelected / KGLabel | The item the user has selected | e.g. Sign out |
Scope: PAGE
BoltSpreadModeToggle
Tracks when a user interacts with the landscape spread mode toggle in their app settings.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigSpreadMode / KGLabel | Details the spread mode that the user has selected when reading an edition in landscape. | Single, Double |
Scope: GLOBAL
BoltSwipeBackward
Tracks when a page is swiped backward.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigScreenName / Page title and screen name |
The page the user swiped from | e.g. /t/news/latest |
PugpigDesinationURL / KGLabel | The page the user swiped to | e.g. /t/news/sport |
Scope: PAGE
BoltSwipeForward
Tracks when a page is swiped forward.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigScreenName / Page title and screen name |
The page the user swiped from | e.g. /t/news/latest |
PugpigDesinationURL / KGLabel | The page the user swiped to | e.g. /t/news/sport |
Scope: PAGE
BoltTap
Tracks when a card is tapped or clicked. Including external link, tapping on the find out more link in event card, tapping to view tweet on the Twitter/X card.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigCollectionID / KGPageName | The name of the card the user has tapped | e.g. World news |
Scope: PAGE
BoltTabTapped
Tracks when a tab is tapped from the tab menu.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTabKey / KGLabel | The tab key the user tapped on | e.g. news, storefront |
Scope: GLOBAL
BoltTimelinePickerTapped
Tracks when a timeline is tapped on from the timeline picker.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTimelineName / KGLabel | The timeline name the user tapped on | e.g. /t/home/latest |
Scope: COLLECTION
BoltTimelinePullToRefresh
Tracks when a user initiates pull to refresh on the timeline.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigEditionName / KGEditionName | Indicates the name of the edition or timeline that the user is refreshing | e.g. Issue 01, news |
Scope: EDITION
BoltToolbarIconTapped
Tracks when the toolbar icon is tapped.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigURL / KGLabel | Indicates the URL of the icon the user tapped on | e.g. https://app.pugpig.com/t/settings |
PugpigScreenName / Page title and screen name |
The screen name where the user was when they tapped | e.g. /t/storefront |
Scope: GLOBAL
BoltTwitterLike
Tracks when a tweet is liked from the collection.
Scope: PAGE
BoltViewEvent
Tracks when add to calendar is pressed & event is subscribed (this is iOS only).
Scope: PAGE
BreakWidgetClicked
Tracks when a user selects the button to load more content on the timeline break widget.
Scope: COLLECTION
BoltTimelineSetChosen
Tracks when a collection set is selected.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigCollectionSet / KGCollectionSet | The collection set that the user chose | e.g. north america, international |
Scope: GLOBAL
SetScreen
Tracks when a user views a screen.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigScreenName | The name of the screen | e.g. latest news |
Scope: PAGE
Search events
SearchAttempt
Tracks when a user hits enter in the search panel.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigSearchTerm / KGLabel | The search term the user entered | e.g. News |
Scope: GLOBAL
SearchResultsLoaded
Tracks when the search results load following a user's search attempt.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigSearchResultCount / KGLabel | The number of results returned from a search attempt | e.g. 80 |
Scope: GLOBAL
SearchSortToggle
Tracks when a user taps on the search toggle
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigToggleState / KGLabel | Indicates what the user toggled to |
Most recent Most relevant |
Scope: GLOBAL
SearchTermClicked
Tracks when a user taps on a search result
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigURL / KGLabel | The URL of the result the user tapped on |
Scope: GLOBAL
Puzzle events
MorePuzzleInfo
Tracks when a user taps the ? button on a puzzler screen
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the puzzle the user tapped the button on | e.g. crossword |
Scope: PAGE
PuzzleCompleted
Tracks when a user successfully completes a puzzler game
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the puzzle the user completed | e.g. crossword |
Scope: PAGE
PuzzleExited
Tracks when a user exits a puzzler game
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the puzzle the user completed | e.g. crossword |
Scope: PAGE
PuzzleHintUsed
Tracks when a user taps the puzzle hint button
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the puzzle the user asked for a hint for | e.g. crossword |
Scope: PAGE
PuzzleLoaded
Tracks when a user loads a puzzle
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the puzzle the user loaded | e.g. crossword |
Scope: PAGE
PuzzleReset
Tracks when a user resets a puzzle
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigPageName / KGPageName | The name of the puzzle the user reset | e.g. crossword |
Scope: PAGE
Diagnostic events
BoltDownloadStarted
Tracks when a collection (edition or timeline) download is initiated
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTriggerMethod / KGLabel | Indicates how the download was triggered |
Heuristic Push User |
Scope: COLLECTION
BoltDownloadCompleted
Tracks when a collection (edition or timeline) download is completed
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTriggerMethod / KGLabel | Indicates how the download was triggered |
Heuristic Push User |
PugpigDownloadAssetsCount / KGDownloadAssetsCount | Total number of assets | |
PugpigDownloadAssetsNotModified / KGDownloadAssetsNotModified | Total number of 304s | |
PugpigDownloadSize / KGDownloadSize | Total number of bytes downloaded |
Scope: COLLECTION
BoltDownloadFailed
Tracks when a collection (edition or timeline) download partially or fully fails
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigTriggerMethod / KGLabel | Indicates how the download was triggered |
Heuristic Push User |
PugpigError / KGError | Indicates the reason for the failure | e.g. The request timed out |
Scope: COLLECTION
BoltEditionAutoArchived
Tracks whenever an edition is automatically archived from the storefront.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigEditionName / KGEditionName | The name of a collection, sent from the JSON feed | e.g. Issue 01 |
PugpigEditionID / KGEditionID | The unique ID of a collection, sent from the JSON feed | e.g. issue01 |
Scope: COLLECTION
BoltDiagnosticCacheEmpty
Tracks iOS' cache clearing behaviour.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigCacheDirCount / KGCacheDirCount | Last estimate count of directories before OS cleared the cache | e.g. 10 |
PugpigCacheFileCount / KGCacheFileCount | Last estimate count of files before OS cleared the cache | e.g. 10 |
PugpigCacheSize / KGCacheSize | Last estimate number of bytes before OS cleared the cache | e.g. 1000000 |
Scope: GLOBAL
BoltRenewStarted
Tracks when the app requests a refresh token from the auth server.
Scope: GLOBAL
BoltRenewCompleted
Tracks when the app receives a valid refresh token from the auth server and the user's access (or lack thereof) is renewed.
Scope: GLOBAL
BoltRenewFailed
Tracks when OAuth renewal fails.
Key dimensions:
Property / GA4 Dimension | Description | Values |
---|---|---|
PugpigError / KGError | Details the reason for the failure | e.g. PermanentError |
Scope: GLOBAL
Dimensions / Properties
Dimensions describe details about the event or the user who performed the event. They are the attributes of your data.
Name | Scope | Dimension Scope | Description | Possible Values |
---|---|---|---|---|
Account Code (Mixpanel-only) | Global | Event, User | Internal code assigned to a customer in Pugpig’s Distribution (used for Pugpig’s Mixpanel aggregate account) | |
Account External ID (Mixpanel-only) | Global | Event, User | Internal identifier assigned to each Pugpig customer (used for Pugpig’s Mixpanel aggregate account) | |
Account Name (Mixpanel-only) | Global | Event, User | The customer account name (used for Pugpig’s Mixpanel aggregate account) | |
App Name (Mixpanel-only) | Global | Event, User | The name of an app as it appears in the App Stores (used for Pugpig’s Mixpanel aggregate account) | |
Appearance | Global | Event | Share the user's dark mode preference at the time the event was fired | Light, Dark or System |
Audio Elapsed Seconds | Global | Event | The time that elapsed in the audio track before the event took place (seconds). For customers using GA4 you may want to consider setting these up as metrics, rather than dimensions. | e.g 1, 10, 100 |
Audio Total Seconds | Global | Event | The total duration of the audio track (seconds). For customers using GA4 you may want to consider setting these up as metrics, rather than dimensions. | e.g 1, 10, 100 |
Author | Page | Event | Sends the author of the content as defined by the JSON feed | e.g. Joe Bloggs |
Bolt Version | Global | Event | The version of Pugpig Bolt that the app sending the event was on | |
Category | Global | Event | Represents the screen an event fired from or the type of event | e.g. PushNotification, /ArticleView |
Collection Set | Global | Event | Reflects the collection set chosen by the user at startup or from settings. If there are no collection sets the dimension will track as “Default” | e.g. UK, Default |
Collection Type | Global | Event | Sends the collection type that the content sits within | Timeline, Edition, Dynamic |
Configuration Version | Global | Event | The configuration version that the app sending the event was using | |
Connectivity | Global | Event | The user's network connection type | None, Unknown, Wifi, Cellular |
Download Assets Count | Collection | Event | Applies to the BoltDownloadCompleted event. The total number of assets download | |
Download Assets Downloaded | Collection | Event | Applies to the BoltDownloadCompleted event. The total number of 304s | |
Download Assets Not Modified | Collection | Event | Applies to the BoltDownloadCompleted event. Total number of 200s | |
Download Size | Collection | Event | Applies to the BoltDownloadCompleted event. The total number of bytes downloaded | |
Edition Cost | Collection | Event | The cost category of an edition | Free, Paid, Sample |
Edition ID | Collection | Event | The unique ID of a collection, sent from the JSON feed | |
Edition Name | Collection | Event | The name a collection, sent from the JSON feed | |
Error | Page | Event | Stores detailed error strings to help determine the reason for a failure | |
External Article ID | Page | Event | The unique ID assigned to an article by the customer | |
Filter Group | Collection | Event | Indicates the filter group of the page in which an event took place | |
Granted Resource Id | Global | User | The ID of the Piano resource a user has access to | |
Granted Resource Name | Global | User | The name of the Piano resource a user has access to | |
Has Single Issue Purchases | Global | Event, User | Details whether the user firing the event has purchased a single issue. Available as both an event-scoped dimension or a user-scoped parameter for analytics providers that support both | |
ID | Page | Event | The unique ID of an item. Pulled from the GUID value in the RSS feed. Sends a value of None if one is not set | e.g. page-1234567 |
Notification Allowed Status | Global | Event, User | Indicates the user's notification status at the time of triggering the event. Available as both an event-scoped dimension or a user-scoped parameter for analytics providers that support both | Authorised, Denied, Provisional (iOS only), Unknown |
Orientation | Global | Event | The orientation of the user's device | Landscape, Portrait |
Page Name | Page | Event | Shares the name of the article being viewed (pulled from the feed). Note: this applies to screens in the content view only | e.g. page 1, crossword |
Page Number | Page | Event | Indicates the index of a piece of content in an timeline | ? |
PageType | Page | Event | Reflects the type of page an event occurs on. Pulled from page type in the JSON feed. | e.g. article |
Publication Code (Mixpanel-only) | Global | Event, User | Internal code assigned to a publication in Pugpig’s Distribution (used for Pugpig’s Mixpanel aggregate account) | |
Publication External ID (Mixpanel-only) | Global | Event, User | Internal identifier assigned to each publication (used for Pugpig’s Mixpanel aggregate account) | |
Publication Name (Mixpanel-only) | Global | Event, User | The publication name (used for Pugpig’s Mixpanel aggregate account) | |
Section | Page | Event | Reflects the section that a piece of content is filed under. | e.g. news, sport |
Subscriber Status | Global | Event, User | The user's subscription state. Available as both an event-scoped dimension or a user-scoped parameter for analytics providers that support both | ExistingSubscriber, iTunesSubscriber, AmazonSubscriber, GooglePlaySubscriber, InactiveSubscriber, None |
Story Cost | Page | Event | Tracks the cost category of a story | Free, Paid, Sample |
Tab Group | Collection | Event | Indicates the filter group of the page on which an event took place | |
Timeline Version | Global | Event | The timeline version that the app sending the event was using | |
URL | Page | Event | Sends the URL of the article being viewed. Note: this only applies to screens in the content view | |
User ID | Global | User | The unique ID assigned to a user sent via your authentication provider's verify response | |
Video Elapsed Seconds | Page | Event | The time that elapsed in a video before the event took place (seconds) | e.g 1, 10, 100 |
Video Total Seconds | Page | Event | The total duration of the video (seconds) | e.g 1, 10, 100 |
Screens
Bolt fires a screen view event every time a user views a page within the app. Below is a list of the most common screens that our customers use to understand how users are engaging with the app. These are attributes within the Page title and screen name dimension on GA4 and pugpigScreenName property in Mixpanel.
Name | Scope | Screen | Aggregate | Description |
Audio Player | Global | /AudioPlayer | No | Views of the Audio Player queue UI |
Collection | Collection | /t/ | Yes |
Format: /t/<timeline_id> Tracked when a user views a collection |
Collection Article View | Page | /Timeline/ArticleView/ | Yes |
Format: /Timeline/ArticleView/<timeline_id>/<article_id> Tracked when a user opens an article from any collection |
Custom Webview | Global | /Custom/ | Yes |
Format: /Custom/<name> Tracked when a user clicks through to a custom webview |
DeepLink Article View | Page | /Deeplink/ArticleView/ | Yes |
Format: /Deeplink/ArticleView/unknown/<article_id> Tracked when a user opens an article from a Deep Link |
Dynamic Timelines | Collection | /t/Dynamic/ | Yes |
Format: /t/Dynamic/<feed id> Tracked when a user views a dynamic timeline |
Launcher Screen | Page | /Launcher | No | Tracked when the launcher screen is viewed to assist with deep links into the correct place |
Onboarding Screen | Global | /Onboarding/<name> | No | Tracked when an Onboarding screen is displayed |
Saved Article View | Page | /SavedTimeline/ArticleView/ | Yes |
Format: /SavedTimeline/ArticleView/<timeline_id>/<article_id> Tracked when a user opens an article from the saved timeline |
Saved Timeline | Collection | /t/SavedTimeline | No | Tracked when a user enters the saved timeline |
Search | Global | /Search | No | Tracks when a user view the search results screen |
Settings Edit Timelines | Global | /Settings/EditTimelines | No | Tracked when the user goes to edit their timelines |
Settings Home | Global | /Settings | No | Tracked when the user goes to settings |
Settings Pages | Global | /Settings/General | No |
Format: /Settings/<key> Tracked when any page in the settings is viewed. The <key> value sent is the localised name shown in the menu so will differ by locales for now |
Sign In Page | Global | /Account/SignIn | No | Tracked when the user views the sign in page |
Storefront | Global | /t/ | Yes |
Format: /t/<tab name>/ OR /t/<tab name>/<filter group> Tracked when a user views a storefront, or a filter within that storefront |
Store Subscribe | Global | /Account/Subscribe | No | Tracked when the user views the native store (iTunes/Google Play/etc) subscribe page |
Voucher Code Page | Global | /VoucherCode | No | Tracked when the user views the voucher code page |
Web Sign In Page | Global | /Account/WebSignIn | No | Tracked when the user views the web auth sign in page |