Skip to content

SaaS / B2B Software Events

This page defines domain-specific events for SaaS and B2B software products. Events are organized by growth loop stage to help you instrument the complete customer journey.


The following diagram shows how events map to each stage of the SaaS growth loop.


4 events covering lead capture and demo-driven acquisition.

EventKey PropertiesVolumeDescription
demo.requestedsource, company_size, use_case, utm_source, utm_mediumLowProspect requests a product demo
demo.completeddemo_id, duration_minutes, attendees_count, outcome (qualified / not_qualified / no_show)LowDemo session finishes
lead.capturedsource (form / chat / webinar / content), lead_score, company_name, roleLowNew lead enters the pipeline
user.signed_upmethod, source, referral_code, planLowNew user account created

11 events covering onboarding, trial management, integrations, and workspace setup.

EventKey PropertiesVolumeDescription
account.createdaccount_name, plan, team_size, industryLowNew organization/account created
onboarding.startedonboarding_version, steps_totalLowUser begins the onboarding flow
onboarding.step_completedstep_name, step_index, steps_total, time_spent_secondsMediumIndividual onboarding step finished
onboarding.completedonboarding_version, steps_completed, total_time_seconds, skipped_steps (array)LowFull onboarding flow completed
trial.startedplan_name, trial_days, sourceLowFree trial begins
trial.extendedplan_name, original_days, extended_days, reasonLowTrial period extended
trial.endedplan_name, converted (bool), days_active, features_used_countLowTrial expires or converts to paid
integration.connectedintegration_name, provider, scopes (array), auth_methodLowThird-party integration activated
integration.disconnectedintegration_name, reasonLowThird-party integration removed
workspace.createdworkspace_name, type (personal / team / enterprise)LowNew workspace or project space created
workspace.settings_updatedworkspace_id, fields_changed (array)LowWorkspace configuration modified

13 events covering feature usage, search, reporting, dashboards, API activity, and data import/export.

EventKey PropertiesVolumeDescription
feature.activatedfeature_name, feature_tier, activation_methodLowUser activates a feature for the first time
feature.usedfeature_name, action, duration_secondsHighUser performs an action within a feature
search.performedquery, results_count, filters_applied (array), search_contextHighUser runs a search
report.generatedreport_type, date_range, filters (array), rows_countMediumUser generates a report
report.exportedreport_type, export_format (csv / pdf / xlsx), rows_countLowUser exports a report
dashboard.vieweddashboard_id, dashboard_name, widgets_countHighUser opens a dashboard
dashboard.customizeddashboard_id, action (widget_added / widget_removed / layout_changed)LowUser modifies a dashboard layout
api.key_createdkey_name, permissions (array), expiry_daysLowNew API key generated
api.request_madeendpoint, method, status_code, response_time_msHighAPI call made by the customer’s integration
api.rate_limit_hitendpoint, limit, window_secondsMediumCustomer hits an API rate limit
import.startedsource (csv / api / integration), record_type, rows_totalLowBulk data import initiated
import.completedsource, record_type, rows_imported, rows_failed, duration_secondsLowBulk data import finishes
export.completedexport_type, format, rows_count, file_size_bytesLowData export completed

8 events covering subscription changes, seat management, add-ons, and usage limits.

EventKey PropertiesVolumeDescription
subscription.createdplan_name, billing_interval, mrr_cents, seats, trial (bool)LowNew paid subscription activated
subscription.upgradedfrom_plan, to_plan, mrr_delta_cents, triggerLowPlan upgraded to a higher tier
subscription.downgradedfrom_plan, to_plan, mrr_delta_cents, reasonLowPlan downgraded to a lower tier
seat.addedplan_name, new_seat_count, total_seats, mrr_delta_centsLowAdditional seat purchased
seat.removedplan_name, new_seat_count, total_seats, mrr_delta_centsLowSeat removed from subscription
addon.purchasedaddon_name, amount_cents, billing_intervalLowAdd-on module or feature purchased
usage_limit.approachingresource (api_calls / storage / seats / contacts), current_usage, limit, percentage_usedMediumUsage nears the plan limit
usage_limit.exceededresource, current_usage, limit, overage_action (blocked / throttled / billed)LowUsage exceeds the plan limit

6 events covering invitations, team growth, referrals, and reviews.

EventKey PropertiesVolumeDescription
invite.sentinvite_method (email / link / slack), role, workspace_idMediumUser invites someone to their workspace
invite.acceptedinvite_id, role, time_to_accept_hoursLowInvited user joins the workspace
team.member_addedrole, department, team_size_afterLowNew member added to the team
team.member_removedrole, reason, team_size_afterLowMember removed from the team
referral.link_sharedchannel (email / social / direct), program_idLowUser shares their referral link
review.postedplatform (g2 / capterra / trustpilot / app_store), rating, prompted (bool)LowUser posts a public review

5 events covering webhooks, SSO, audit logging, and permissions.

EventKey PropertiesVolumeDescription
webhook.deliveredwebhook_id, endpoint_url, event_type, status_code, response_time_msHighOutbound webhook delivered successfully
webhook.failedwebhook_id, endpoint_url, event_type, status_code, retry_count, error_messageLowOutbound webhook delivery failed
sso.configuredprovider (okta / azure_ad / google), protocol (saml / oidc), domainLow (admin)SSO connection configured
audit_log.entry_createdactor_id, action, resource_type, resource_id, ip_addressHighAction logged to the audit trail
permission.changedactor_id, target_user_id, resource, old_role, new_roleLow (admin)User role or permission modified

If you are just getting started, instrument these 10 events first. They cover the critical path from signup through monetisation.

import GrowthOS from '@growthos/js';
const gos = GrowthOS.init('YOUR_WRITE_KEY');
// 1. Signup
gos.track('user.signed_up', {
method: 'google_oauth',
source: 'pricing_page',
plan: 'free'
});
// 2. Identify
gos.identify('usr_42', {
email: 'alex@acme.com',
name: 'Alex Rivera',
company: 'Acme Inc',
plan: 'free'
});
// 3. Onboarding started
gos.track('onboarding.started', {
onboarding_version: 'v3',
steps_total: 5
});
// 4. Onboarding completed
gos.track('onboarding.completed', {
onboarding_version: 'v3',
steps_completed: 5,
total_time_seconds: 180,
skipped_steps: []
});
// 5. Integration connected
gos.track('integration.connected', {
integration_name: 'slack',
provider: 'slack',
scopes: ['chat:write', 'channels:read'],
auth_method: 'oauth'
});
// 6. Feature activated (first use)
gos.track('feature.activated', {
feature_name: 'automated_reports',
feature_tier: 'pro',
activation_method: 'onboarding_prompt'
});
// 7. Invite sent (viral loop)
gos.track('invite.sent', {
invite_method: 'email',
role: 'member',
workspace_id: 'ws_abc'
});
// 8. Subscription created
gos.track('subscription.created', {
plan_name: 'pro',
billing_interval: 'annual',
mrr_cents: 4900,
seats: 5,
trial: false
});
// 9. Seat added (expansion revenue)
gos.track('seat.added', {
plan_name: 'pro',
new_seat_count: 6,
total_seats: 6,
mrr_delta_cents: 980
});
// 10. Feature used (engagement)
gos.track('feature.used', {
feature_name: 'automated_reports',
action: 'scheduled_weekly_report',
duration_seconds: 45
});

StageCountKey Metric
Acquire4Demo conversion rate
Activate11Time to first value
Engage13Feature adoption breadth
Monetise8MRR growth and expansion
Advocate6Viral coefficient
Operational5System health
Total47