Skip to main content
Outlit tracks two independent dimensions of your customer relationships as part of the customer context graph: contact journey (how engaged each person is) and account billing (the commercial relationship). These are separate because a contact can be highly engaged while their company hasn’t paid yet, or a company can be paying while a specific team member is inactive.

How does Outlit model the customer journey?

Outlit tracks contacts and accounts separately:

Contact Journey (per person)

Account Billing (per company)


What are the contact journey stages?

Each person (contact) progresses through stages based on their product engagement:
Contact stages track product engagement, not billing. A contact can be Engaged even if their company hasn’t paid, or Inactive even if their company is actively paying.

How stages progress

Contacts move forward through Discovered, Signed Up, Activated, and Engaged. They can never move backwards—an Engaged contact can’t become Activated again. The one exception is Inactive: contacts return to Engaged when their activity again meets the configured engagement threshold.

How does Outlit detect stages automatically?

Discovered vs Signed Up

The difference is determined by the identifiers you provide:
When you identify a visitor with only an email (no userId), they’re marked as Discovered:
Typical triggers: newsletter signup, contact form submission, lead magnet download.
If a Discovered contact later provides a userId (e.g., they sign up after submitting a lead form), they automatically advance to Signed Up.

Automatic engagement and inactivity

Outlit derives Engaged and Inactive from tracked product activity. Activity signals can come from the browser SDK, server SDK, and connected product integrations. Engagement is based on consistent activity in a configured rolling window; inactivity is based on no qualifying activity for the configured inactivity period.

How is activation derived?

Identify the user and send the same ordinary activation event consistently from the browser SDK, server SDK, or a verified product integration.

Track the selected activation event

Choose an ordinary event that represents the product’s meaningful value moment, then track it after the action succeeds:
Configure onboarding_completed (or your equivalent event) as the activation event in Outlit. Core derives Activated from that ordinary event. It also derives Engaged and Inactive from the broader stream of tracked product activity.

What are the account billing statuses?

Each account (company) has a billing status that’s separate from individual contact journeys:

How does Stripe integration work?

If you’ve connected Stripe to Outlit, billing status is handled automatically: When a subscription status changes in Stripe, Outlit automatically updates the matching account’s billing status. Individual contact journey stages are not affected.
Stripe integration links accounts through synced customer and contact identity. Company-domain accounts and personal-email customers are handled differently, so billing status should be read as account context, not as a contact journey stage.

Best practices

Send facts, not authoritative state. Discovered and Signed Up are auto-detected from identity. Activated is derived by Core from the customer-selected ordinary activation event. Engaged and Inactive are derived from tracked product activity captured by the browser SDK, server SDK, and verified product integrations. Verified billing integrations provide billing status. Understand the separation. Contact journey and account billing are independent. Jane can be Engaged while her company is on None, or Inactive while her company is Paying. Jane’s activity can change independently from her company’s billing status. Track activation at the right time. Send the selected ordinary activation event when the action is confirmed complete, not when the user clicks a button. Wait for the backend to confirm success before tracking. Include useful properties. Properties help you analyze stage transitions. Include context like which onboarding flow was completed, time-to-activate, and which steps were skipped.

Frequently Asked Questions

Contact journey tracks individual people’s product engagement (Discovered through Inactive). Account billing tracks the commercial relationship (None through Churned). They’re independent — Jane can be Engaged while her company is on a free plan, or Inactive while her company is actively paying.
No journey stage is set through an authoritative SDK command. Discovered and Signed Up are derived from identity, Activated is derived from your selected ordinary activation event, and Engaged and Inactive are derived from tracked product activity. Billing statuses sync from verified billing integrations.
Contacts generally progress forward through Discovered, Signed Up, Activated, and Engaged. The only cycle is Engaged ↔ Inactive, which is driven by activity and inactivity.

Next Steps

Identity Resolution

How Outlit connects anonymous visitors to known contacts

Server-Side Tracking

Track ordinary product events from your backend

Browser Integration

Set up browser tracking

API Reference

Direct API for identify and product events