People
Persistent user properties: set, increment, lists, and revenue.
Where events are things a user did, people properties are things a user is: plan, company, signup date, lifetime value. They live on the profile and persist across sessions, so you can segment any report by them.
The browser SDK uses the stored identity automatically. The server SDKs take the distinctId / distinct_id first, or bind once with forUser / for_user.
Method map
| Operation | Browser | Node.js | Python |
|---|---|---|---|
| set | Trodo.people.set({ plan: 'pro' }) | user.people.set({ plan: 'pro' }) | user.people.set({'plan': 'pro'}) |
| setOnce | Trodo.people.set_once({ signupDate }) | user.people.setOnce({ signupDate }) | user.people.set_once({...}) |
| increment | Trodo.people.increment({ logins: 1 }) | user.people.increment('logins', 1) | user.people.increment('logins', 1) |
| append | Trodo.people.append({ tags: 'beta' }) | user.people.append('tags', ['beta']) | user.people.append('tags', ['beta']) |
| union | Trodo.people.union({ tags: ['beta'] }) | user.people.union('tags', ['beta']) | user.people.union('tags', ['beta']) |
| remove | Trodo.people.remove({ tags: 'beta' }) | user.people.remove('tags', ['beta']) | user.people.remove('tags', ['beta']) |
| unset | Trodo.people.unset('tempFlag') | user.people.unset('tempFlag') | user.people.unset('tempFlag') |
| trackCharge | Trodo.people.trackCharge(49.99, {…}) | user.people.trackCharge(49.99, {…}) | user.people.track_charge(49.99, {…}) |
Set properties
Trodo.people.set({ email: 'user@example.com', plan: 'pro', company: 'Acme' });await trodo.forUser('user-42').people.set({ email: 'user@example.com', plan: 'pro' });trodo.for_user('user-42').people.set({'email': 'user@example.com', 'plan': 'pro'})Use setOnce / set_once for immutable traits like signup date or referral source: set only if not already present.
Increment and lists
Trodo.people.increment({ login_count: 1, credits: -10 }); // negative decrements
Trodo.people.union({ enabled_integrations: ['slack'] }); // unique valuesconst user = trodo.forUser('user-42');
await user.people.increment('login_count', 1);
await user.people.union('enabled_integrations', ['slack']);user = trodo.for_user('user-42')
user.people.increment('login_count', 1)
user.people.union('enabled_integrations', ['slack'])append allows duplicates; union keeps values unique; remove deletes values from a list.
Revenue
Trodo.people.trackCharge(49.99, { plan: 'pro', billingCycle: 'monthly' });await trodo.forUser('user-42').people.trackCharge(49.99, { plan: 'pro' });trodo.for_user('user-42').people.track_charge(49.99, {'plan': 'pro'})Clear all charges (after a refund) with clearCharges / clear_charges. Delete a profile entirely (GDPR erasure) with deleteUser / delete_user; this is irreversible.
Reserved names
Don't use these keys; they collide with server-managed fields:
$name $email $charges $phoneno