> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zudo.so/llms.txt
> Use this file to discover all available pages before exploring further.

# Account lifecycle

> Where each account is in its life as a customer: trial, onboarding, subscribed, churned or ignored.

Every account has one lifecycle status. It says where the account is in its life as a customer, and it decides which accounts Zudo scores, summarizes and shows you by default.

## The five statuses

| Status | Use it for |
| - | - |
| **Trial** | Accounts trying your product before they pay, including free plans |
| **Onboarding** | Paying customers who are still getting set up |
| **Subscribed** | Paying customers. New accounts start here unless you choose otherwise |
| **Churned** | Customers who have left |
| **Ignored** | Accounts you don't track as customers: test accounts, internal accounts |

Trial, onboarding and subscribed accounts are **live**. Zudo scores their health, includes them in the dashboard, the daily follow-up and AI pulse, and shows them in the accounts list.

Churned and ignored accounts keep all their data, but Zudo leaves them out of health scoring, the dashboard, the daily follow-up, AI pulse, the renewal pipeline and custom reports. The accounts list hides them unless you filter by status. Pickers and search still find them.

Ignored accounts are also left out of segments, flag rules and playbooks, so a test account never raises a risk or gets enrolled in a playbook. A rule that asks about status itself, such as **Lifecycle Status** is **Ignored**, still finds them. Churned accounts stay in, so you can build a win-back segment or playbook.

The difference between the two is churn. A churned account counts as churn and records when it churned. An ignored account was never a customer you track, so it never counts as churn.

## Change an account's status

On the account page, open the actions menu (**⋯**) and choose a status under **Status**. The current status has a check mark.

When you move an account to **Churned**, Zudo records today as its churn date. Moving it back to a live status clears the date.

You can also set a status when you:

* **Add an account**: pick one in the **Status** row.
* **Import accounts from CSV**: use a `status` column with `trial`, `onboarding`, `subscribed`, `churned` or `ignored`. Older sheets that say `active` or `inactive` still work, and are read as subscribed and ignored.
* **Use the API**: send `lifecycleStatus`, and `churnedAt` to record an earlier churn date. See [Update account](https://zudo.so/api/v1/docs#PATCH--accounts--accountId-).

Beside the status, the account page shows the date that goes with it: when the account churned, when it's due to churn, or when its trial ends.

Every change of status appears on the account's timeline, with who made it: a teammate, your lifecycle rules, a connection's sync, or, on a parent account, the accounts in it.

## Set statuses with rules

An admin can have Zudo set statuses from each account's traits and data, under **Settings → Organization → Lifecycle**.

Each status except subscribed has its own rules, built the same way as a [segment](/accounts/segments). An account takes the first status whose rules it matches, in this order: **Ignored**, **Churned**, **Trial**, **Onboarding**. An account that matches none is **Subscribed**.

For example, a team billing through Stripe might use:

* **Churned:** Stripe Current Subscription Status is `canceled`
* **Trial:** Stripe Current Subscription Status is `trialing`
* **Ignored:** Name contains `test`

Two dates can come from traits you pick:

* **Churn date:** when an account churns. With no date picked, an account churns the day the rules first match it. A churn date still to come keeps the account live until that day, so a customer who has given notice stays in your scores and lists while there's time to save them. The account page shows **Churns** and the date.
* **Trial end date:** when a trial ends, shown on the account. Turn on **Churn a trial that hasn't converted** to churn trials a number of days after their end date, if their rules still say trial.

Before saving, Zudo shows you how many accounts the rules will move, from which status to which, and lists them. Nothing changes until you choose **Save and apply**. After that the rules run every hour, so an account moves within the hour of its traits changing or its churn date arriving.

Rules can't use **Lifecycle Status**, **Churned Date** or the older Active, Churned and Onboarding fields, because a rule that read its own result would never settle.

## A status you set stays set

A status you choose by hand stays as you set it. Lifecycle rules and connections leave it alone, and so does a parent account's status following its accounts.

To hand the status back, open the actions menu (**⋯**) and choose **Let lifecycle rules decide**, which applies your rules to the account straight away. On a parent account, choose **Use the status of its accounts**.

## Statuses that update on their own

* **Lifecycle rules:** see [Set statuses with rules](#set-statuses-with-rules). While rules are on, they decide, and the Vitally behavior below stops.
* **Vitally:** when an account's `account_status` trait in Vitally is canceled, a live account becomes ignored. When it stops being canceled, the account becomes subscribed again. Vitally never marks an account churned. To have Vitally's status churn accounts instead, write a churn rule on the `account_status` trait.
* **Stripe:** an account Zudo creates from a Stripe customer starts as subscribed if the customer has an active or past-due subscription, trial if they're only trialing, and ignored if nothing is live. Stripe doesn't change the status of an account after that.
* **Parent accounts:** a parent's status comes from the accounts in it. It's churned only when every account that isn't ignored has churned. Otherwise it's onboarding if any account is onboarding, then subscribed, then trial. See [Parent accounts](/accounts/parent-accounts).

## Filter and automate by status

* **Accounts list:** add a **Status** filter. Saved views that filter on the older Active and Inactive statuses keep working, as subscribed and ignored.
* **Segments and playbooks:** use the **Lifecycle Status** and **Churned Date** fields in a rule. For example, a segment of accounts that churned in the last 90 days, or a playbook that starts when an account becomes onboarding.

## Accounts that existed before lifecycle statuses

Accounts used to have separate Active, Onboarding and Churned flags. Each one now has the status those flags described: churned accounts stayed churned, onboarding accounts stayed onboarding, active accounts became subscribed, and accounts that were none of the three became ignored. If some ignored accounts are really churned customers, open them and set them to **Churned**.

Churned and onboarding accounts from before lifecycle statuses count as set by hand, so turning on rules doesn't move them. Choose **Let lifecycle rules decide** on any you want the rules to take over.

The older flags are still returned by the API, derived from the status, so existing integrations keep working.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.