Getting events in
Events arrive from your product through a CDP or analytics tool:- Segment —
track,identifyandgroupcalls forwarded to Zudo - PostHog — the same, from your PostHog project
What an event becomes
A single inbound event feeds several things at once.Account matching
Events carry a group identifier — your own id for the customer. Zudo matches it against the account’sexternalId, then vitallyId. An event that matches nothing is held rather than dropped, so it lands correctly once the account exists.
Traits
Agroup call’s properties become product traits on the account, and an identify call’s become traits on the contact. These are first-class Zudo traits: they work in segments, smart-trait formulas and custom reports exactly like traits synced from Vitally or typed by a person. See trait name precedence for what happens when two sources claim the same name.
Indicators
Indicators are predicates over the event stream — “active in the last 7 days”, “has ever exported”, “logins last 30 days”. They are the main reason to send events at all.Activity and health
Product activity counts as contact with the account. A customer using the product daily is engaged even if nobody has emailed; an account with no events and no email is quiet in a way that shows up in its health score.Seeing events on an account
Open an account and pick Events on the timeline filter. Two things appear.
The stream reaches back as far as raw events are kept, 7 days unless your organization has a longer window — see
Retention below. Daily counts reach further, because rollups are kept indefinitely. The line under the
chart states the window in force.
Every event your organization receives
Settings → Events lists the product events arriving from all your Segment, PostHog and zudo.js connections, newest first. Use it to check that events are arriving, and that they land on the accounts you expect.
- unattributed in the account column means Zudo couldn’t match the event to an account. Hover it to see why: the event’s group id matches no account’s External ID, or the event carried no group and its user isn’t linked to an account.
- via graph means the event carried no group of its own, and Zudo matched it to the account through its user’s identity link.
- pending means Zudo hasn’t processed the event yet. It becomes processed once it has.
Retention
Raw events are kept for 7 days by default and rolled up into daily per-account, per-event-name counts that are kept indefinitely. Recent debugging works against the raw stream; long-range questions work against the rollups. That split matters when you query: ask for raw events to see exactly what arrived this morning, and rollups for anything older than the raw window.What pruning removes
When a raw event passes the window it is deleted from Zudo’s database. Everything derived from it stays:- Daily counts — kept indefinitely, which is what the chart on an account draws
- Traits on the account and its contacts
- Identity links matching a user to an account
- Indicator values, activity and health signal
Changing the window
The window is set per organization and can be anywhere from 1 to 365 days. Ask support if you want longer than the default; raw payloads are the heavy part of the store, so a longer window is a storage question rather than a switch you flip yourself. EveryGET /product-events response carries retentionNote, which states the window that applied to it — so you never have to guess which one your organization is on.
Reading events over the API
Identity calls (
$identify, $group, $alias and their PostHog equivalents) are excluded from the raw feed unless you ask for them by name or pass includeIdentity=true — they describe who someone is rather than what they did, and they would otherwise drown the feed.
Full reference at zudo.so/api/v1/docs.
Events are ingested asynchronously. An event sent now appears in the raw feed within a minute or two; indicators and
rollups are recomputed on a nightly job, so a brand-new event does not immediately move an indicator.
