# Event taxonomy (https://www.getfounderhq.com/docs/analytics/protocol-reference/event-taxonomy)

FounderHQ owns every name that starts with `$`. Your own event and
property names never start with `$`, so the two sets can never collide.

Every table below is generated from `@founderhq/events-core`. They match
the shipped SDKs exactly.

## Reserved event names

These are the only `$` event names FounderHQ accepts. Send any other `$`
name and the event comes back with a `drop` result.

| Name |
| --- |
| `$identify` |
| `$groupidentify` |
| `$set` |
| `$pageview` |
| `$pageleave` |
| `$session_start` |
| `$screen` |
| `$autocapture` |
| `$rageclick` |
| `$dead_click` |
| `$outbound_click` |
| `$web_vitals` |
| `$application_installed` |
| `$application_updated` |
| `$application_opened` |
| `$application_backgrounded` |
| `$push_notification_opened` |

Your own events use plain names: `trial.started`, `invite_sent`,
`Report Exported`. Pick one convention and keep it.

## Event properties

The SDKs fill these in for you. Set them yourself only when you send
events from your own client.

| Name |
| --- |
| `$display_name` |
| `$current_url` |
| `$pathname` |
| `$host` |
| `$referrer` |
| `$referring_domain` |
| `$search_engine` |
| `$browser` |
| `$browser_version` |
| `$browser_webdriver` |
| `$os` |
| `$os_version` |
| `$device_type` |
| `$device_id` |
| `$device_manufacturer` |
| `$device_name` |
| `$device_model` |
| `$platform` |
| `$session_id` |
| `$window_id` |
| `$pageview_id` |
| `$screen_id` |
| `$viewport_width` |
| `$viewport_height` |
| `$screen_width` |
| `$screen_height` |
| `$screen_name` |
| `$lib` |
| `$lib_version` |
| `$timezone` |
| `$locale` |
| `$browser_language` |
| `$app_build` |
| `$app_name` |
| `$app_namespace` |
| `$app_version` |
| `$deep_link_url` |
| `$max_scroll_percentage` |
| `$last_scroll_percentage` |
| `$page_duration_ms` |
| `$active_duration_ms` |
| `$leave_reason` |
| `$outbound_url` |
| `$outbound_domain` |
| `$prev_pageview_id` |
| `$prev_pageview_max_scroll_percentage` |
| `$prev_pageview_duration_ms` |
| `$prev_pageview_pathname` |
| `$geoip_country_code` |
| `$geoip_country_name` |
| `$geoip_city_name` |
| `$geoip_continent_code` |
| `$geoip_continent_name` |
| `$geoip_time_zone` |
| `$geoip_subdivision_1_code` |
| `$geoip_subdivision_1_name` |
| `$ip_hash` |
| `$ip_truncated` |
| `$ip` |
| `$attribution_channel` |
| `$attribution_source` |
| `$purchase_attribution_token` |
| `$groups` |
| `$group_set` |
| `$account_context_token` |
| `$account_span_id` |
| `$bot` |
| `$bot_category` |

## Campaign properties

Campaign keys stay unprefixed, because they arrive unprefixed in the URL.
FounderHQ reads all 24 from the landing URL and uses them to answer
"which channel introduced this contact".

| Name |
| --- |
| `utm_source` |
| `utm_medium` |
| `utm_campaign` |
| `utm_term` |
| `utm_content` |
| `gclid` |
| `gad_source` |
| `gclsrc` |
| `dclid` |
| `gbraid` |
| `wbraid` |
| `fbclid` |
| `msclkid` |
| `twclid` |
| `li_fat_id` |
| `mc_cid` |
| `igshid` |
| `ttclid` |
| `rdt_cid` |
| `epik` |
| `qclid` |
| `sccid` |
| `irclid` |
| `_kx` |

## Session properties

FounderHQ derives these and attaches them to the session, not to
individual events. You do not send them.

| Name |
| --- |
| `$entry_current_url` |
| `$entry_pathname` |
| `$entry_utm_source` |
| `$entry_utm_medium` |
| `$entry_utm_campaign` |
| `$entry_utm_term` |
| `$entry_utm_content` |
| `$entry_referring_domain` |
| `$channel_type` |
| `$session_duration` |
| `$is_bounce` |
| `$pageview_count` |
| `$end_pathname` |

## Cookieless measurement allowlist

When a visitor has not granted tracking, the SDK sends the small cookieless
event described in [Wire protocol](/analytics/protocol-reference/envelope).
Only the names below are allowed. FounderHQ removes anything else on the
client and rejects anything extra at ingest.

## Cookieless event names

| Name |
| --- |
| `$pageview` |
| `$pageleave` |

## Cookieless base properties

| Name |
| --- |
| `$pathname` |
| `$referring_domain` |
| `utm_source` |
| `utm_medium` |
| `utm_campaign` |
| `utm_term` |
| `utm_content` |
| `$platform` |

## Cookieless page-leave properties

| Name |
| --- |
| `$page_duration_ms` |
| `$max_scroll_percentage` |
| `$leave_reason` |

The page-leave properties are valid on `$pageleave` only. Put any of them
on a `$pageview` and the event is refused.
