Table of Contents >> Show >> Hide
- What a Pendo Track Event actually is (in human terms)
- Where Track Events fit in Pendo’s event world
- The 3 main ways to send Pendo Track Events
- 1) Client-side Track Events (using pendo.track())
- Client-side example (simple, realistic, and not trying too hard)
- 2) Server-side Track Events (API call from your backend)
- Server-side payload anatomy (what fields matter and why)
- Server-side example (curl)
- 3) Sending Track Events via Twilio Segment (and avoiding double-counting)
- Event properties: the secret sauce (and the easiest way to hurt yourself)
- Track Events and “time in app”: why your engagement numbers might look weird
- How to view and analyze Track Events in Pendo
- Governance: naming conventions, a data dictionary, and other unsexy things that save you later
- Advanced: pulling Track Event data with the Aggregation API
- Non-web environments: Track Events as your “pseudo-agent”
- Honest review: what’s great, what’s annoying, and what you should watch
- Quick-start checklist (steal this for your next implementation meeting)
- Extra: Real-world experiences implementing Pendo Track Events (the part nobody puts in the docs)
- SEO tags (JSON)
If you’ve ever opened Pendo, clicked into analytics, and thought, “Cool… but where’s the real stuff my users do?”
you’re not alone. Page loads and feature clicks are greatlike counting footsteps. But Track Events are the “I just ran a marathon
while carrying groceries” level of detail. They let you capture the important actions that don’t neatly show up as a click or a page view:
a file export finishing, a subscription upgrading, an error happening, an email being sent, an API call completing, or a record being deleted
(sometimes by someone who swears they didn’t delete it).
This guide breaks down what Pendo Track Events are, how to implement them (client-side, server-side, and via Segment), what you can do with
the data, and what can go sideways. I’ll also give you an honest reviewbecause “set it and forget it” is not a real strategy, it’s a
motivational quote that has lied to us all.
What a Pendo Track Event actually is (in human terms)
A Pendo Track Event is a programmatically sent event that tells Pendo, “Hey, this specific action happened at this moment, and it belongs
to this visitor (and usually this account).” You use Track Events for behaviors that aren’t automatically captured as standard Pendo events
like Feature click events or Page load events.
Track Events can be sent from the client (your front-end) or from the server (your backend). Client-side Track Events can be triggered through
your application code while the Pendo agent is running. Server-side Track Events are sent as API calls and must include visitor and account
identifiers so Pendo can associate them correctly.
Two key realities you should know up front
-
No retroactive magic. Track Events don’t backfill. If you didn’t send the event last month, Pendo can’t “recover” it now.
Track Events start existing when your developers start sending them. -
They aren’t “free” analytics. Track Events are powerful, but they require planningnaming conventions, governance, and
(yes) developer time.
Where Track Events fit in Pendo’s event world
Pendo collects many event types: page loads, feature clicks, focus events, guide events, Track Events, and more. Under the hood, these are stored
as raw events, then processed so they become usable in reports, funnels, paths, retention, and segmentation.
A practical takeaway: when you’re troubleshooting “Are we even sending this?”, raw events are your best friend. Subscription admins can view
raw events in the app’s settings and (if your volume is high) may need to explicitly start recording to surface raw events in the UI.
The 3 main ways to send Pendo Track Events
Most teams end up using one of these approaches (or a mix, if they’re brave):
- Client-side Track Events (front-end, via the Pendo agent)
- Server-side Track Events (backend, via an API endpoint)
- Segment → Pendo (especially for cloud-mode/server-side flows)
1) Client-side Track Events (using pendo.track())
If you’re running the Pendo agent in your web app, you can trigger Track Events directly from your application code using
pendo.track(name, metadata). This is ideal when the behavior is user-driven in the UI, but the meaningful “moment” isn’t a click:
completion of a wizard, a successful export, a permission change, or a client-side error you want to monitor.
The agent automatically records context like the time and URL where the event was triggered, which keeps your payload cleaner and helps analysts
interpret what happened without detective work worthy of a true-crime podcast.
Client-side example (simple, realistic, and not trying too hard)
Best practice: use client-side Track Events “judiciously.” If you already get the insight from feature tagging, don’t create
a Track Event just because you can. Analytics clutter is like kitchen junk drawers: it starts small, and one day you can’t find the scissors.
2) Server-side Track Events (API call from your backend)
Server-side Track Events shine when the behavior happens off-screen: an email is sent, a background job completes, a webhook fires, a subscription
renews, a payment fails, or your system does something important while the user is asleepliving their best life, unaware of your queue workers.
To send server-side Track Events, you’ll use a Track Event shared secret key (this is not the same as your install snippet key or an
integration key). Your payload includes identifiers (visitorId/accountId), a timestamp, and properties that describe the event.
Server-side payload anatomy (what fields matter and why)
- type: usually
"track" - event: the Track Event name (think: “Report Exported”)
- visitorId and accountId: who did it (and which account it belongs to)
- timestamp: when it happened (typically milliseconds)
- properties: your business context (plan, reportType, errorCode, etc.)
- context: optional environment info (ip, userAgent, url, title)
Server-side example (curl)
Important: if a visitorId/accountId doesn’t exist yet in Pendo, Pendo can create a new record when it receives the first event.
Whether that record shows up as “active” can depend on application settings (more on that in the gotchas section).
3) Sending Track Events via Twilio Segment (and avoiding double-counting)
Segment is a popular bridge when you want consistent tracking across tools. Pendo’s Segment setup can support client-side and server-side flows,
but you need to be careful: it’s surprisingly easy to send the same event twice if you wire up multiple destinations without a plan.
A common pattern is: use Pendo Web (Actions) for client-side data, and Segment Webhooks (Actions) to send server-side Track Events to Pendo.
If you set up both, you typically need to disable Track Events in one destination to prevent duplicates.
Segment also introduces mapping considerations. For example, account association can depend on passing groupId in the right place
(often inside properties) so Pendo can treat it as Account ID.
Event properties: the secret sauce (and the easiest way to hurt yourself)
Track Events become valuable when you include event properties. Properties answer questions like:
“Which plan did they pick?”, “Which report type did they export?”, “Was the user in a trial?”, “Which integration was enabled?”, or
“What error code showed up when things went boom?”
In Pendo, event properties come in two flavors:
- Global event properties: collected broadly to describe environment/context (think: browser, OS, URL context).
- Custom event properties: captured on specific click events and Track Events so you can analyze the business meaning.
Size limits matter (yes, the whole payload can get tossed)
If your Track Event property map exceeds size limits (commonly 25KB by default), Pendo can discard the entire properties map and replace it with
an error property that flags a processing failure. Translation: if you shove a full JSON document into properties, you may end up with
“cool story, bro” and no data.
Practical rule: send just enough properties to support segmentation and analysis. Don’t send everything “because we might need it.”
That’s how you end up paying for data you can’t use and arguing about what “metadataVersion3_final_FINAL2” means.
Track Events and “time in app”: why your engagement numbers might look weird
By default, Track Events aren’t counted when calculating time spent in your app. There’s an application setting that can change this (often
referred to as counting Track Events as time in app). This is a big deal if you’re using Track Events heavily and then wondering why “time in app”
feels lower than expected.
How to view and analyze Track Events in Pendo
Once Track Events are flowing, you’ll typically find them under the Track Events area in the product analytics UI. From there, you can:
- See event counts, unique visitors, and unique accounts
- Filter by segments/date ranges
- Use Track Events in funnels, paths, retention, and visitor/account reports
- Inspect event properties (and troubleshoot errors when properties fail processing)
Renaming Track Events: UI-friendly, but don’t confuse it with engineering reality
You can edit a Track Event name in the Pendo UI for readability, but the event still needs to be sent using the original configured name.
In other words: you can change the label on the mailbox, but the mail carrier still needs the address.
Governance: naming conventions, a data dictionary, and other unsexy things that save you later
The fastest way to make Track Events useless is to name them like a panicked developer in a hurry:
test1, button_click_new, final_event_v2. The second fastest way is to use five different naming styles
across teams, then argue about it in Slack for two weeks.
A naming convention that doesn’t make future-you cry
- Use consistent verbs: “Created”, “Deleted”, “Exported”, “Invited”, “Upgraded”
- Add nouns with meaning: “Report”, “Workspace”, “API Key”, “Invoice”
- Use properties for variants: keep the event name stable and pass details in properties
- Maintain a data dictionary: a simple doc that lists event name, definition, owner, properties, and examples
About limits (and why you should treat event names as scarce resources)
Pendo supports up to 5,000 different named Track Events per application. Deleted Track Events don’t count toward the limit, but it’s still
worth treating event names like a finite budgetbecause they are.
Advanced: pulling Track Event data with the Aggregation API
If you need to query Track Events programmatically (for targeted extracts, debugging, or a custom workflow), Pendo’s Aggregation API is often the
go-to. It’s a POST endpoint that accepts a JSON body describing a pipelinethink “database query language with a product-analytics accent.”
Access typically uses an integration key passed via an X-Pendo-Integration-Key header. If you’re exporting at scale or need
millisecond-level event detail routinely, you may consider a bulk export solution like Data Sync instead of repeatedly querying.
Example: fetch Track Types (so you can find trackTypeId)
Once you have trackType information, you can build more targeted queries for analysis pipelines. This is especially useful for data engineering
teams who want Pendo as an input to downstream dashboards without living inside the Pendo UI 24/7.
Non-web environments: Track Events as your “pseudo-agent”
If you have a desktop app, smart TV app, POS system, or any environment where the web agent can’t run, Track Events can be used to represent
page views and feature clicks manually. This can give you analytics coverage, reporting, and segmentation based on behaviorbut it comes with
tradeoffs.
What you get
- Analytics/reporting on Track Events (including paths, funnels, retention, segmentation)
- The ability to target guides in other apps based on behavior in the non-web app
What you don’t get
- In-app messaging in that non-web environment (guides, polls, NPS, Resource Center)
- Automatic event collection (your team must send every event you want tracked)
- Retroactive analytics (forget to track it, and it’s gone)
Honest review: what’s great, what’s annoying, and what you should watch
What Track Events do really well
-
They capture “real actions,” not just clicks. Great for lifecycle moments: upgrades, exports, invites, integrations,
workflow completions, background tasks. -
They unify front-end and back-end reality. If your user experience spans UI + backend processing, Track Events keep analytics
closer to the truth. -
Event properties unlock powerful segmentation. “Users who exported a Revenue report with filters applied” is way more useful
than “users who clicked something.” - They reduce manual tagging work. Once configured, Track Events show up without ongoing UI tagging (unlike pages/features).
Where Track Events can bite you
- Developer dependency is real. You need implementation work, reviews, and maintenanceespecially if your product changes often.
-
No historical data. If you didn’t track it, you can’t analyze it later. This forces discipline (which is good) but can be
painful (which is also true). - Data bloat risk. Too many event names, too many properties, or too much payload size can create governance and performance issues.
- Duplication pitfalls with integrations. Segment + direct tracking can double-count if you don’t architect the flow carefully.
- Time-in-app metrics can surprise you. If Track Events dominate your tracking, default time calculations may not reflect what you expect.
Quick-start checklist (steal this for your next implementation meeting)
- Define 10–20 “core” Track Events that represent real outcomes (not UI micro-actions).
- Create a naming convention and write it down in a shared data dictionary.
- Decide client vs server for each event (or both, if needed and justified).
- Define event properties with types and examples (and keep them lean).
- Plan for account association (visitorId/accountId; groupId if using Segment).
- Test in raw events before announcing the analytics victory tour.
- Validate downstream reporting (funnels, paths, retention) and confirm you’re not double-counting.
Extra: Real-world experiences implementing Pendo Track Events (the part nobody puts in the docs)
Here’s what Track Events feel like in real lifebecause the gap between “it’s just one more event” and “why is this dashboard on fire?”
is roughly the width of one sprint planning meeting.
Experience #1: The “we tracked everything” phase. Many teams start with enthusiasm and ship Track Events for every tiny action:
button clicks, dropdown opens, tab switches, and “user blinked twice while hovering.” Two weeks later, analytics becomes a landfill. The best
pivot I’ve seen is when a PM and an analyst sit down and define outcome-based events: “Invite Sent,” “Integration Enabled,” “Report Exported,”
“Workflow Completed,” “Subscription Upgraded.” Suddenly, funnels become meaningful and the noise drops.
Experience #2: The naming convention debate that lasts longer than the implementation. A surprisingly common moment:
someone suggests names like report_exported, someone else insists on Report Exported, and a third person tries to introduce
namespaces like report.exported because they once read a blog post in 2014. The healthiest outcome isn’t “the perfect naming style.”
It’s consistency plus a data dictionary. Pick a style, document it, and move on before the sun burns out.
Experience #3: The “properties are a junk drawer” mistake. Teams often overload event properties because it’s tempting to dump
whatever context is availablefull objects, long strings, nested structures, and sometimes what looks suspiciously like an entire API response.
Then properties disappear due to size constraints, and everyone swears they “saw it working yesterday.” The fix is boring but effective:
keep properties small, flatten them, and limit to what you’ll actually analyze. If you need the full payload, store it in your own logs and
pass a correlation ID in the Track Event.
Experience #4: Segment integration “accidental double-tracking.” If you use Segment and also send direct Track Events, you can
accidentally create duplicate events that look like real growth (“Wow, adoption doubled overnight!”) until you realize you’ve counted the same
action twice. The best teams set a single source of truth: either Segment owns a class of events, or the app doesthen they enforce that rule.
A quick sanity check: compare event volume to business reality. If “Invoice Paid” exceeds your billing system’s paid invoices, congratulations,
you’ve invented accounting fiction.
Experience #5: The payoff moment. When Track Events are clean, stable, and property-rich, they unlock the kind of analytics
stakeholders actually trust. You can build funnels around “Created Workspace → Invited Teammate → Enabled Integration → Exported Report,” then
segment by plan, role, or account type. Support teams can correlate error events with churn risk. Growth teams can identify the steps that
separate “tourists” from “power users.” It’s the difference between “we think people like this feature” and “we can prove what engaged users
do in the first 7 days.”
