A custom attribute is data you track about your users or leads, e.g., the total number of projects they’ve created in your product. It's a single value about a single piece of information.
For example, a user's subscription plan is something you can track using custom attributes. You can then filter and message all users on that plan:
An event is something tracked repeatedly, so you can see and use information on what your customers do, and how often they do it, e.g. when was the first time they created a project, and when did they most recently create a project.
For example, when a user changes their subscription is ideal for recording as an event; it would allow you to filter all the users that have changed their plan in the last 30 days, or trigger repeatable messages as perfect notifications (like a subscription confirmation):
Custom attributes are ideal for:
Descriptive information about users, such as extended profile data, address, subscription preferences, or device data.
A single value that gets updated such as last active date or follower count.
A single value that is true or false, such as whether or not they have used a feature.
Events record each time something happens, along with the count, first and last occurrence. They're ideal for:
Activity, such as using a particular feature, or the number of times a feature has been used.
When data changes, such as when a subscription changes or the most recent time an order was placed.
Each time something happens that the customer needs notifying about, like a subscription expiring etc.
Using custom attributes and events together
You can filter your customers using events and custom attributes together. For example, if you wanted to know who downgraded to your Starter plan over the last 30 days, your filters would be:
Plan = Starter plan (a custom attribute).
Downgraded plan less than 30 days ago (an event).
Tip: You could achieve the same thing with event metadata.
Another example might be recording your customers’ purchase information. You could track the total amount a person has spent as a custom attribute, as it is a single value that gets updated over time. Whereas if you wanted to track the individual orders, you would use events, as they let you count the times a user has placed an order, and message them with their order details.