Analytics

Configure hourly JSONL data exports to AWS S3 or Google Cloud Storage and understand event tracking for your Neon integration.

At Neon, we prioritize providing you with the insights necessary to effectively manage your business. Our dashboard offers a wide array of reports, and if you require additional analytics reports, please don't hesitate to contact [email protected].

We deliver hourly analytics events directly to your AWS S3 or Google Cloud Storage bucket in JSONL GZ format. Events are separated by environment (e.g. Sandbox, Production, Staging), ensuring accurate tracking and analysis (sample file).

This document serves as a comprehensive guide to the analytics events and their associated attributes used within our application. These events play a vital role in tracking user interactions, behaviors, and other essential metrics, enabling you to enhance the user experience and make informed, data-driven decisions.

Configuration

AWS S3

Set the following bucket policy on your S3 bucket.

🚧

Be sure to replace BUCKET_NAME in the policy below with your actual bucket name.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::171666793654:role/NeonS3Access"
            },
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::BUCKET_NAME",
                "arn:aws:s3:::BUCKET_NAME/*"
            ]
        }
    ]
}

Google Cloud Storage

Setup Steps

  1. Create a new service account to give Neon access to upload to your Bucket.
  2. Create a JSON key for the service account. The key will need to be exported as JSON and securely uploaded to Neon. The key is stored encrypted at rest and will only be accessed for analytics exports.
  3. Configure the bucket to grant the Storage Object Admin role to the new service account.
  4. Configure the export with Neon. You'll need to provide the following.
    1. JSON account key from step 2
    2. Bucket name
    3. Prefix (optional)

Exported Files

A single gzipped JSON Lines file will be exported hourly to your bucket.

The file will be written to the following path: ${prefix}/${environment_id}/YYYY/MM/DDTHH-neon-analytics.json.gz.

  • prefix: your optional prefix
  • environment_id: Neon provided identifier for game + environment (e.g. Game 1 Production)
  • YYYY/MM/DDTHH: date and hour (in UTC)

Event Details

Analytics events are systematically logged across our application to capture diverse player actions and behaviors. Each event provides invaluable insights into how players engage with our storefront and navigate through the purchasing process. Each event object in the file will include the following top-level keys.

Event Data

  • event_time: Timestamp indicating when the event occurred.
  • event_type: Type of event triggered, providing context for the player action or behavior.
  • event_properties: Various event-specific attributes. The possible values are specified below.
  • log_version_id: Internal version identifier used to track changes in event logging schema.

Player/Session Data

Events include device and session information when available. However, this data may be unavailable or contain special server values when:

  • Users are blocking tracking
  • Events are server-initiated (e.g., checkout created via POST /checkout endpoint)

Device & Session Properties

  • device_id: Device identifier. Returns 00000000-c57a-4f9b-afe8-3fe404dc84f5 when real device info is unavailable.
  • session_id: Unique session identifier (integer). Returns -1 when no session is available.

Browser Information: (Parsed from user agent, null when unavailable)

  • os_name: Operating system name (e.g., "Apple iPhone")
  • browser_family: Browser type (e.g., "Safari")
  • browser_major_version: Browser major version (e.g., "16.3")

Geographic Data: (Inferred from IP address, null when unavailable)

  • geo_city: City (e.g., "Ottawa")
  • geo_region: State/province/region (e.g., "Kansas")
  • geo_country: Country (e.g., "United States")

Network Information:

  • ip: Public IP address. Returns null when unavailable.
📘

Frontend events can be potentially blocked by Ad-blockers

Event Type and Property Definition

Checkout Events

All checkout events will have the following properties: environment_id, checkout_id, player_id, and player_country. They will also have the following nullable fields: storefront_id, metadata, external_reference_id.

Any extra properties in addition to the standard set will be listed below.

Event Types

Event Description

Source

Extra Properties

Checkout Created

Triggered when a checkout is created.

Backend

offer_skus

Payment Method Selected

Triggered when a payment method is selected.

Frontend

payment_method

Place Order Button Clicked

Triggered when the player clicks on the "Place Order" button in checkout.

Frontend

Checkout Completion Attempted

Triggered by the backend when a player attempts to complete a checkout.

Backend

Checkout Completed

Triggered when a checkout has been successfully completed.

Backend

offer_skus purchase_id marketing_email_consent(optional)

Checkout Payment Failed

Triggered when a payment failure occurs during checkout.

Backend

payment_method(optional)

Checkout Back Clicked

Triggered when the player clicks on the back icon on the checkout page. This is not triggered when the player clicks the back button in their browser. The Neon back button only appears when there is a store URL to redirect the player back to.

Frontend

Purchase Completed Modal Displayed

Triggered when the player sees the purchase complete modal with order information.

Frontend

purchase_id

Continue Shopping Button Clicked

Triggered when the player clicks on "continue shopping" in the purchase complete modal to close the modal and redirect to the storefront.

Frontend

purchase_id

Continue Game Button Clicked

Triggered when the player clicks on "Go to the Game " in the purchase complete modal to close the modal and redirect to the game. Only applicable to mobile phones.

Frontend

purchase_id

Refund Processed

Triggered when a refund is processed for a player.

Backend

purchase_id refund_id

Saved Payment Method Added

Triggered when a new payment method is successfully added.

Backend

payment_method is_first_payment_method total_saved_cards total_saved_payment_methods is_default

Card Payment Method Deleted

Triggered when the player deletes their card as saved a payment method.

Backend

payment_method total_saved_cards total_saved_payment_methods

Save Payment Method Toggled

Triggered when the player checks or unchecks the "Save payment method" checkbox toggle during checkout.

Frontend

is_saved_checkbox

Saved Payment Methods Displayed

Triggers when the player gets displayed their cards in the checkout.

Frontend

Promo Code Applied

Triggers when a player applies a promo code to their checkout purchase.

Backend

promo_code promo_code_id

Promo Code Removed

Triggers when a player removes a promo code from their checkout purchase.

Backend

promo_code promo_code_id

Promo Code Failed

Triggers if an error is encountered while trying to apply a promo code.

Backend

promo_code promo_code_id(optional)

Payment Failed

Triggers when there is any kind of failure in fulfilling a payment. (i.e Checkout and Subscriptions payments).

Backend

payment_method error_type

Payment Method Validation Passed

Triggers when client-side input validation passes in the payment form.

Frontend

is_saved_payment_method payment_method

Payment Method Validation Failed

Triggers when client-side input validation fails in the payment form.

Frontend

invalid_fields payment_method

External Payment Redirected

Triggers when the player is redirected from checkout to an external payment method.

Frontend

payment_method(optional)

External Payment Returned

Triggers when the player returns to the checkout success page from an external payment method.

Frontend

payment_method(optional)

Payment Error Modal Closed

Triggers when a player closes the payment error modal.

Frontend

error_type action_type

Storefront Events

All storefront events will have the following properties: environment_id, storefront_id, player_country. They will also have the following nullable fields: player_id, metadata.

Any extra properties in addition to the standard set will be listed below.

Event TypesEvent DescriptionSourceExtra Properties
Storefront OpenedTriggered when the storefront is opened.Frontend
Storefront Property Sign In ClickedTriggered when a player initiates a sign-in from the main menu on the web store.Frontend
Product Price Sign In ClickedTriggered when a player initiates a sign-in from an item on the web store.Frontend
Auth Code CreatedTriggered on the backend when an auth code is created. This happens when the player begins the auth flow that uses the auth API.Backend
Lock Button ClickedTriggered when the player clicks on a locked item in the web store.Frontendoffer_sku
Product ClickedTriggered when the player clicks on a product to open product detail modal. If the storefront is setup to send the player to the checkout when a product is clicked, this event is not triggered.Frontendoffer_sku
Storefront ClosedTriggered when the store is closed or the player redirects to another page.Frontend

Property Definition

  • storefront_id: Unique identifier of the storefront, if one exists (e.g. Knight Fighter Sandbox Storefront → d53dcb72-b171-480e-a376-98922851fba4).
  • environment_id: Unique identifier for your environment (e.g. Knight Fighter Sandbox → 91b56100-271f-4447-8a5e-2ad37259869d).
  • player_id: Identifier of a player. This maps to the accountId field in our APIs.
  • offer_sku: Unique SKU value associated with a particular offer within the storefront.
  • offer_skus: SKUs for offers associated with this event.
  • metadata: Additional contextual data sent with Auth or Checkout APIs.
  • checkout_id: Unique identifier assigned to each checkout process initiated by a player.
  • purchase_id: Purchase identifier uniquely identifies each purchase transaction within our system.
  • refund_id: Unique identifier for a processed refund transaction within our system.
  • player_country: Player country in ISO 3166-1 alpha-2 (i.e., "US").
  • marketing_email_consent: A boolean value that shows if a player agreed to get a marketing consent.
  • payment_method: A string indicating the type of payment method used. Example values: "apple_pay", "google_pay", "paypal", "credit_or_debit_card", "toss_pay", "pix", "free", "line_pay", "sepa", "paysafecard", "grabpay", "modo", "naver_pay", "kakao_pay", "naver_or_kakao_pay", "unknown", "ovo", "oxxo", "boleto", "dana", "cash_app_pay", "klarna", "paypay", "upi", "wechat_pay", "alipay", "ideal", "bancontact", "przelewy24", "eps", "palm_pay", "opay", "providus_bank", "samsung_pay", "pix_dlocal", "blik", "neon_pay". New values may be added in the future.
  • is_first_payment_method: A boolean indicating whether this is the first payment method saved for the player.
  • total_saved_cards: A number representing the total count of saved cards for the player.
  • total_saved_payment_methods: A number representing the total count of saved payment methods for the player.
  • is_default: A boolean indicating whether this payment method is set as the default.
  • is_saved_checkbox: A boolean value indicating if a player toggled the "save payment method" checkbox while on checkout.
  • promo_code: A string representing the human-readable promotional code applied by the player (e.g., "20OFF", "WELCOME10").
  • promo_code_id: A unique identifier assigned to each promotion or discount campaign in our system, used to reference the specific promo internally.
  • error_type: A string indicating the type of error encountered while processing a payment. Example values: "insufficient_funds", "limit_exceeded", "fraudulent", "high_risk", "lost_or_stolen", "incorrect_cvc", "unauthorized", "invalid_cvc", "incorrect_number", "incorrect_zip", "invalid_exp_year", "invalid_number", "invalid_iban", "expired_card", "unexpected_country", "invalid", "invalid_exp_month", "declined", "failed", "unknown". New values may be added in the future
  • is_saved_payment_method: A boolean value that indicates if a payment is being done by a saved payment method.
  • invalid_fields: An array with any fields that have not passed validation tests. Example values: billingAddress, phoneNumber, emailAddress, name
  • action_type: A string indicating if the player closed a modal via the "try again" or "close" button. Example values: "try_again" (player clicks "Try Again" button), "close" (player closes the modal).
  • external_reference_id: Additional contextual string sent with checkout APIs or backend events.