Troubleshoot event tracking

Modified on Tue, 18 Aug at 2:05 AM

This article helps you find out why an event you are sending is not appearing in NVECTA, and where to look at each stage. Work through the checks in order, because each one rules out a layer between the SDK on the device and the event landing on a user profile.

Before you troubleshoot, kindly validate first. Integration Code, Event, and User Validation walks through Live Stats, Event Logs, Insights and User One View to establish whether the event is arriving at all. Run that pass first: if it shows the event landing correctly, there is nothing here to fix, and if it does not, it tells you which of the checks below to start with.

SDK initialised?
Your website or app build
No Verify the integration and initialisation Part 1
Brand ID and credentials correct?
Settings → Store Integration
No Update the configuration, and confirm the environment Part 2
Event request sent?
Browser or device, then Analytics → Live Stats
No Check that the event call runs Part 3
Console configuration correct?
Settings → Events, Organization → Billing
No Enable tracking or the event, or raise the limit Part 4
Error logs clear?
Settings → Error Logs
Errors Resolve the issue named in the log Part 5
Segments → User One View · Part 6
Found The integration is working end to end
Not found Escalate with the SDK logs, event name, Brand ID, nv_uid and test time

Where to check

Pick the surface that matches the question you are asking. Configuration questions belong in Settings, volume questions in Analytics, and identity questions in Segments.

Events (configuration, status and schema)

Where: Settings → Events

Shows whether tracking is on, whether the event exists, whether it is Active, and which attributes it accepts. It does not tell you whether one specific hit arrived.

Live Stats, Insights and User One View (has the event arrived?)

Where: Analytics → Live Stats, Analytics → Insights and Segments → User One View

These are the validation surfaces: Live Stats for the last 30 minutes, Insights for volume and trends over a longer period, and User One View for a single person's profile and timeline. How to read each one is covered in Integration Code, Event, and User Validation.

Error Logs (refused hits and the reason)

Where: Settings → Error Logs

Lists the problems hit while recording events. This is what tells a refused request apart from one that never arrived.

Part 1 — Verify the SDK is initialised

If the SDK never initialises, nothing is sent, and every later check fails for the wrong reason. Start here.

Where: your website or app build, not the NVECTA console

Check initialisation per platform

If the SDK is not initialising: confirm the integration is in place for the platform you are testing. For a website, open Settings → Store Integration. Under the Direct Integration tab, cross-check that the same JS script exists on your page.

If you integrated through Google Tag Manager instead, check the tag there: the same script should sit in a published Custom HTML tag, on a trigger that covers the pages you are testing, and GTM’s Preview mode shows whether it actually fires. See the Integration via GTM guide.

For a CMS platform, check the CMS tab for your platform - Shopify, WooCommerce, Wix or Magento.

How to read the result

What you seeWhat it means
nv_ requests visible in the browser Network tabThe tracking code is installed, and the SDK is loading
No NVECTA requests on the page at allThe tracking code is missing, blocked or placed incorrectly - nothing will track until that is fixed
No initialisation line in Logcat or in the iOS logsThe SDK is not initialising in that build, so no event is ever queued

Part 2 — Verify the Brand ID and credentials

An initialised SDK can still fail to record anything useful if it is pointed at the wrong Brand ID, which is the most common reason an event appears to be missing. A Brand ID that belongs to another project, is mistyped, does not exist, or is paired with a mismatched key will be rejected outright, so the event is stored nowhere. Before you go any further, confirm these three items.

Where: your website or app build, checked against the console

Confirm the Brand ID and keys

The Brand ID and the credentials are in the same place: Settings → Store Integration, on the Direct Integration tab. The Authentication Keys panel shows the Brand ID in its top-right corner, and expanding a key row reveals that key's API key and encryption key. Compare each of those values against what your build is actually sending - a single mismatch is enough for the event to be refused.


Confirm the credentials per platform

  • Website - re-check the brand identifiers in the tracking code on the page against the console.
  • Android - confirm notifyvisitors_bid and notifyvisitors_bid_e in AndroidManifest.xml, or the brand ID and encryption key passed to the registration method in your application class
  • iOS - confirm the brand ID and encryption key passed when the SDK is initialised

Confirm you are looking at the right environment

The most common cause here is a credential mix-up between environments. NVECTA is normally set up with separate staging (UAT) and Production accounts, each with its own Brand ID, encryption key and API key, so it is easy for a staging Brand ID or key to be left behind in the tracking code, or for a staging SDK configuration to be shipped, when a site or app goes live. When that happens, the events are tracked perfectly well, they simply land in the other account.

Check the live site or store build against the Production credentials and the test build against the staging ones, and rule out anything carried over from the other environment before you decide the event is missing.

For how the two accounts are provisioned, see Platform Setup.

How to read the result

What you seeWhat it means
Brand ID in the build matches the consoleThe integration is pointing at this project; move on
Brand ID matches but the key does notThe request is rejected before it is stored; expect an authentication error in the logs
Events appear in UAT but not in ProductionThe build is still pointed at the UAT account
The app callback returns "Authentication failed."The brand ID and key pair is not valid for this account

Part 3 — Verify the event request is fired

Parts 1 and 2 prove the SDK can talk to the right project. This check proves the event call itself runs. If nothing leaves the device, no amount of console configuration will help.

Where: the browser or device first, then Analytics → Live Stats to confirm arrival

Check the request per platform

  • Website - open the browser developer tools, go to Network, filter on nv_ and perform the action; the event request should appear

  • Android - check the SDK logs for the event being queued and uploaded after your event call runs

  • iOS - check the SDK logs, or the callback on the event call, to confirm the request was sent

Confirm the event call is running

If no request is generated at all, the event call in your application is not executing. The method differs per platform:

  • Website - nv('event', EVENT_NAME, EVENT_ATTRIBUTES, LIFETIME_VALUE, SCOPE)
  • Android - NotifyVisitorsApi.getInstance(activityContext).event(...)
  • iOS - notifyvisitors.trackEvents(...)

Two things catch people out here. The call may sit behind a condition that never becomes true, and it may run before the SDK has finished initialising. Also check the SCOPE value you are passing: an event set to track once per session will look intermittent rather than broken.

If the event was configured in the console against a button rather than written in code, it is a static event, and the selector is the thing to check instead of the code. Learn more.

Confirm arrival, not just departure

Perform the action, then open Analytics → Live Stats and look for the event name in the last 30 minutes. That is the quickest confirmation that the request reached NVECTA rather than merely leaving the device. Learn more.

How to read the result

What you seeWhat it means
Request in the Network tab and the event in Live StatsThe event is reaching NVECTA; the problem is further down the chain
Request fires, but the event never appears in Live StatsThe hit is being refused - continue with Part 4 and Part 5
No request at allThe event call is not executing; check the condition around it and its order against SDK initialisation
Request fires on some sessions onlyThe event scope is set to once per session, or the call sits behind a condition

Part 4 — Verify the console configuration

An event that is fired correctly can still be dropped because the project is not set up to accept it, or because the account has no room left for it. Three things decide that: two of them on the Events screen, and one on the billing page.

Where: Settings → Events, and Organization → Billing → Overview

Check that tracking is on

At the top of the Events screen, the Life Cycle Events + Attribution Tracking switch must read Active. While it is off, events are not recorded for the whole project.

Check the event itself

Open the Events tab and search for the event name, then read the Status column: it must be Active. The Basis type and Status filters above the table help you spot events that have been switched off.

If the event is not in the list at all, nothing has ever arrived under that name - compare it with the event call character for character, because spelling and case are treated literally.

For a system event such as session_start, page_view, or install, check the System Events tab instead; those can be turned off independently.

Event configuration guide: https://www.nvecta.com/support/solutions/articles/84000390131-event-configuration

Check the subscription and event limits

Two separate limits apply here, and either one can be the reason an event never appears.

The first is the number of distinct event names the project is allowed to hold. The Events tab shows this as a Total Events counter to the right of the filters.

Once the count reaches the limit, new event names are refused while the events already in the list carry on tracking, which is why a brand new event can be the only one missing.

The second is the event volume included in your subscription. Open Organization → Billing → Overview and look at the Events card: it shows a Total Events Limit, and under Events usage, how much of that limit the account has consumed.

Your plan and the current billing cycle are shown at the top of the same page. If usage has reached 100%, the allowance for the cycle is exhausted, and nothing is wrong with the integration itself.

In either case, retire what you no longer need or ask your account manager to raise the allowance.

How to read the result

What you seeWhat it means
Switch Active and the event listed as ActiveConfiguration is fine; move on to the error logs
Life Cycle Events + Attribution Tracking switched offNothing is being recorded for the project
Event present but Status is not ActiveThe event is being ignored deliberately; re-activate it
Event missing from the listThe name has never been received - compare it with the event call
Total Events counter at its limitNew event names are being refused

Part 5 — Check the error logs

If the request is leaving the device and the configuration is correct, the platform is refusing the hit. The error logs are where the reason is recorded.

Where: Settings → Error Logs

Look through the log for the event you are chasing and check for authentication failures, an invalid or malformed payload, attribute validation errors, API or server errors, and rate limiting. Each has a different fix, and this is the only surface that tells you which one you are dealing with.

The Android and iOS SDKs report the same class of problem straight back to your code. The callback on the user call returns a status and a message, and those messages map onto what you would otherwise read in the log:

Callback messageWhat it means
Analytics/Events Status is InActiveEvent tracking is switched off for the project - go back to Part 4
SDK not initialized properly. Check for credentials in your application classCredentials are missing or wrong - go back to Part 1 and Part 2
Authentication failed.The brand ID and key pair is not valid for this account
Required parameter(s) missing (userID or email or mobile)The call that identifies the user is incomplete, so the event has no profile to attach to

How to read the result

What you seeWhat it means
No entries for your eventThe platform is not refusing it, so the hit is probably not arriving - go back to Part 3
Payload or validation errorsThe event name or an attribute breaks the naming rules, or a value is the wrong type
Rate limitingRequests are arriving faster than the allowance; batch or space out the calls

Part 6 — Search by nv_uid

The last check answers a different question: not whether the event arrived, but whether it landed on the right person. Read the nv_uid from the SDK, then look that user up in the console.

Where: Segments → User One View

Retrieve the nv_uid

  • Website - the SDK stores it in the first-party _nv_uid cookie on your own domain
  • Android - NotifyVisitorsApi.getInstance(activityContext).getNvUid()
  • iOS - notifyvisitors.getNvUid()

Find the profile and the event

In User One View, search by NV UID and open the profile, then confirm the event appears on that user with the attributes you expect.

Finding a user and reading the profile in detail - identity, devices, platforms, activity and attributes - is covered in Integration Code, Event, and User Validation.

How to read the result

What you seeWhat it means
Profile found, and the event is on itThe integration is working end to end
Profile found but the event is not on itThe event is arriving without identity attached, or it was refused - re-check Part 4 and Part 5
No profile for that nv_uidIdentity is not reaching NVECTA, so only anonymous traffic is being collected

Conclusion

These six checks follow an event from the SDK on the device to the profile it belongs on, and each one rules out a layer. Most cases are settled in the first three: the SDK never initialised, the build was pointed at the wrong Brand ID, or the event call never ran. Once the request is confirmed to leave the device and the console configuration is correct, the error logs almost always name the reason.

Run the pass in UAT first, fix what it finds, then repeat it in Production before you build segments or campaigns on the event. If all six checks pass and the event is still missing, raise it with support and include the SDK logs, the event name, the Brand ID, the nv_uid you tested with and the time of the test.

Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article