> For the complete documentation index, see [llms.txt](https://help.usejimo.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.usejimo.com/docs/getting-started/install-jimo/attributes-and-events.md).

# Attributes and events

Attributes describe who a user is (plan, role, signup date). Events say what they did (created a project, invited a teammate). Attributes drive the Who; events drive Show on triggers and Goals. Both are sent from your app with the SDK, and both decide how finely you can ever target. Choose them once, with care: a key you send is a row in your attribute list for good.

***

## Attributes

### Which ones

<figure><img src="https://2794860263-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKzAcDWQbK1gKbpra7bkb%2Fuploads%2FMpD1Qp8DPVpjufNQpprX%2Fn18-pick-attributes.png?alt=media&#x26;token=b27ae90e-a4c9-453d-806c-93c43a798d66" alt="A wide users table narrowed down to 10 to 15 attribute keys"><figcaption></figcaption></figure>

Ten to fifteen is a healthy install. Three is thin. Forty means the users table was exported rather than chosen from. An attribute is worth sending when:

* It changes who should see an experience: plan, role, permission level, onboarding state, trial status, a feature flag.
* It is stable enough to segment on: it changes a few times in an account's life, not on every request.
* It describes the user or their account, not the current page.
* A colleague can say what it means in one sentence.

#### Two that almost every account needs

Jimo cannot know these on its own: `created_at`, your real signup date (Jimo's own "Created" is the day it first saw the user, which is install day for existing accounts), and `last_seen`, your real last-activity date, if your product stores one.

#### What never to send

Never send passwords, tokens, payment data, government IDs, full addresses, phone numbers, birth dates, or anything about health, ethnicity, religion, politics or sexuality. Coarsen instead: `country` rather than an address, `age_band` rather than a birthday.

### How

```javascript
window.jimo.push(['set', 'user:attributes', [{
  plan: 'pro',
  role: 'admin',
  created_at: '2026-03-02T10:00:00Z',
  onboarding_done: false
}]]);
window.jimo.push(['do', 'identify', [user.id]]);
```

#### Rules that fail silently when broken

Strings, numbers, booleans and arrays only, no nested objects; dates as ISO-8601 strings, not Date objects; one `user:attributes` push with every key, not one per key; no empty strings (omit the key instead). When a value changes while the user is on the page, push `user:attributes` again, do not call identify again. Full reference: [Setup the segmentation](https://help.usejimo.com/docs/for-developers/for-developers/sdk-guides/setup-the-segmentation).

### Prepare them before the developer starts

In [Users & Segments > Data management > Attributes](/docs/analyze/users-and-segments/data-management/attributes.md), create the custom attributes you want, with their type. Each one shows the code to copy. Your developer then sends values into keys that already exist, and your segments can be built before the first value arrives. See [Create a custom attribute](/docs/analyze/users-and-segments/data-management/attributes/create-a-custom-attribute.md).

## Events

### Which ones

Three to ten. Events worth tracking are activation milestones, core feature use, collaboration, upgrades, and the end of a setup flow: the actions a user has to take to get value, and the ones people fail at. Do not track page views or low-level clicks; Jimo already targets on pages and elements.

### How

<figure><img src="https://2794860263-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKzAcDWQbK1gKbpra7bkb%2Fuploads%2FuvD2nB6wWBna0khv9qvm%2Fn19-event-timing.png?alt=media&#x26;token=21b37494-7279-4c57-9689-665ed2532b39" alt="Timeline: click, request, response, event fires"><figcaption><p>Fire on success, not on click</p></figcaption></figure>

```javascript
window.jimo.push(['do', 'event:track', ['Project Created', { template: 'blank', is_first: true }]]);
```

#### Where and how to fire it

Fire the event where the action succeeds, after the request resolves, not in the click handler. Name events in plain English, past tense, consistently. Properties follow the same value rules as attributes.

#### Where they show up

Events sent this way appear in [Success Tracker > Events](/docs/analyze/success-tracker/events.md), where you can also define no-code events from clicks and URLs without a developer. Use them in Show on, in checklist task completion, and in Goals.

## Integrations instead of code

If your user data already lives in Segment, HubSpot, Mixpanel, Amplitude or PostHog, the [integrations](/docs/integrations/integrations-list.md) can sync attributes and events into Jimo without SDK calls. [Server-side events](/docs/integrations/server-side-events.md) cover what happens outside the browser. A CSV [import](/docs/analyze/users-and-segments/data-management/imports.md) gets attributes in for a test audience before any of this is wired.

## Related

* [Users & Segments](/docs/analyze/users-and-segments.md)
* [Create a segment](/docs/analyze/users-and-segments/audience/segments/create-a-segment.md)
* [Who](/docs/publish/target-right-people-who.md)
