How the chain works
Zudo walks your list from the top for each account. The first source that has a value for that account wins. Three rules govern the walk:- A source reporting zero is an answer and stops the walk. This is what keeps a churned account at $0 — without it, an account that churned to nothing would fall through and a stale trait would resurrect its revenue.
- A source holding something that isn’t a number falls through. A metadata field reading
enterpriseresolves to nothing and the next source gets a turn, rather than being read as “pays zero”. - An account no source can answer for keeps the value it already has. Zudo never zeroes an account just because the chain came up empty — which is what protects manually created and imported accounts that have no billing source at all.
Available sources
Traits are listed by name and source: a synced trait shows its connection, as in Amount · HubSpot, and one of your own shows Custom, as in Contract value · Custom.
The two Stripe sources read your Stripe connection’s figures. If you also run Vitally with its Stripe integration, Vitally keeps its own copy of the same Stripe fields. That copy is used only for an account your Stripe connection doesn’t know. For an account Stripe does know, a field that’s empty in Stripe stays empty, even if Vitally still holds an old value for it. So removing
manual_mrr from a customer in Stripe hands the account to the next source.
Each entry shows how many accounts it can actually answer for. That number is the point of the display: “Stripe metadata” is a reasonable-sounding first choice that might resolve for four accounts out of four hundred.
Using one of your own traits
If your revenue isn’t in a billing tool Zudo connects to, keep it in a custom trait and make that trait a source. This suits accounts you add by hand or import, and contracts invoiced outside a billing platform.- In Settings → Organization → Traits, add a trait of type Number, such as “Contract value”.
- Fill it in for each account: on the account’s Traits tab, from a playbook’s Update a trait step, or through the API.
- Under Settings → Organization → Accounts, add it from Add a source… in MRR sources, and save.
An MRR figure typed when an account was created or imported is a manual figure, so it
beats your trait until you click use sources on that account.
Nothing configured
With an empty list, MRR comes from whatever Vitally reports — the behaviour that predates this setting. Existing orgs see no change until they configure one.A typed figure always wins
A figure entered by hand on an account beats every source in the list and is not part of it. It is an explicit human correction, not a data source to be ranked. When an account’s MRR was set this way, the account page labels it Set manually with a use sources link that clears the override and hands the account back to the chain.Blank is not the same as zero. Leaving the MRR field empty when creating an account means “no opinion”, so a billing
source can still fill it in later. Typing
0 means zero, and it sticks.