[{"data":1,"prerenderedAt":74},["ShallowReactive",2],{"help-article-the-analytics-event-registry":3},{"data":4},{"title":5,"excerpt":6,"content":7,"help_category":8,"seo":11},"The Analytics Event Registry","The m18t Events Manager is a brand-scoped registry where you name and design analytics events and their payload contracts before you instrument them in","\u003Cp>\u003Cstrong>What you&#39;ll learn\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>What the Events Manager is: a registry where you name and design analytics events \u003Cem>before\u003C\u002Fem> you instrument them in PostHog or GA.\u003C\u002Fli>\n\u003Cli>The fields that describe an event — module, name, CRUD verb, source, trigger, status, payload contract.\u003C\u002Fli>\n\u003Cli>Why this is event-storming discipline, not a marketing-campaign tool.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Why name events before you write the tracking code\u003C\u002Fh2>\n\u003Cp>Analytics instrumentation usually happens backwards. A developer sprinkles \u003Ccode>track(&#39;button_clicked&#39;)\u003C\u002Fcode> calls through the code, a second developer adds \u003Ccode>track(&#39;Button Clicked&#39;)\u003C\u002Fcode>, and six months later the analytics dashboard is a graveyard of near-duplicate event names nobody agreed on. The vocabulary was never designed; it accreted.\u003C\u002Fp>\n\u003Cp>The Events Manager flips that order. It&#39;s a registry where you decide what events your product emits — their names, their shapes, what triggers them — and only \u003Cem>then\u003C\u002Fem> go instrument them in \u003Ca href=\"\u002Fhelp\u002Fprogrammatic-read-write\">PostHog\u003C\u002Fa> or Google Analytics. The registry is the source of truth for the event vocabulary; the tracking code conforms to it. This is the event-storming practice made into a real table you can query.\u003C\u002Fp>\n\u003Cp>One thing to clear up immediately, because the URL is misleading: the page lives under \u003Ccode>\u002Fstudio\u002Fmartech\u002Fevents\u003C\u002Fcode>, but \u003Cstrong>these are not marketing campaigns.\u003C\u002Fstrong> There&#39;s no email blast, no audience, no campaign timeline. (The old &quot;Campaign Timeline&quot; label is gone — the page is titled &quot;Events Manager&quot;.) An &quot;event&quot; here means a named thing your software does — \u003Ccode>user.registered\u003C\u002Fcode>, \u003Ccode>content.published\u003C\u002Fcode>, \u003Ccode>subscription.renewed\u003C\u002Fcode> — the kind of event you&#39;d send to a product-analytics tool.\u003C\u002Fp>\n\u003Cp>Events are strictly brand-scoped. Every event belongs to a real brand; there&#39;s no workspace-wide &quot;all-brands&quot; event. Switch brands in the sidebar and the registry re-shards.\u003C\u002Fp>\n\u003Ch2>The shape of an event record\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Slug\u003C\u002Fstrong> in a dotted convention — \u003Ccode>auth.user.login\u003C\u002Fcode>, \u003Ccode>content.post.published\u003C\u002Fcode>. Reads like a path; uniqueness is per brand.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Module\u003C\u002Fstrong> — the functional area (auth, billing, content, ai, onboarding, …), colour-coded in the list.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Event name\u003C\u002Fstrong> — the human-readable name (&quot;User Registered&quot;).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>CRUD verb\u003C\u002Fstrong> — Create, Read, Update, or Delete, the kind of operation the event represents.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Source\u003C\u002Fstrong> — who or what causes it: User, Visitor, Platform, or Admin.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Trigger key\u003C\u002Fstrong> — an identifier for the logic that fires it (e.g. \u003Ccode>USER_REGISTERED\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Status\u003C\u002Fstrong> from the shared \u003Ca href=\"\u002Fhelp\u002Fthe-status-set\">status set\u003C\u002Fa>, so you can track which events are still planned versus instrumented and live.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Payload contract\u003C\u002Fstrong> — a small JSON object describing the event&#39;s data shape, e.g. \u003Ccode>{ &quot;email&quot;: &quot;string&quot;, &quot;brand&quot;: &quot;string&quot; }\u003C\u002Fcode>. This is the load-bearing contract that downstream consumers (emails, automation, your analytics tool) reference. The form validates it as JSON and pretty-prints it. Keep it small and free of personal data.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Related product model\u003C\u002Fstrong> — an optional link to a \u003Ca href=\"\u002Fhelp\u002Fthe-product-development-concept\">Product Manager\u003C\u002Fa> model the event concerns.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Linked controllers and emails\u003C\u002Fstrong> — see \u003Ca href=\"\u002Fhelp\u002Ftying-events-together\">Tying Events to Emails &amp; Code\u003C\u002Fa>.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>How to add an event\u003C\u002Fh2>\n\u003Col>\n\u003Cli>Open \u003Cstrong>Events Manager\u003C\u002Fstrong> (\u003Ccode>\u002Fstudio\u002Fmartech\u002Fevents\u003C\u002Fcode>).\u003C\u002Fli>\n\u003Cli>Click \u003Cstrong>Add Event\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>Pick the \u003Cstrong>brand\u003C\u002Fstrong> — events must belong to a real brand, so this gates the form.\u003C\u002Fli>\n\u003Cli>Fill in the \u003Cstrong>slug\u003C\u002Fstrong> (dotted), \u003Cstrong>module\u003C\u002Fstrong>, and \u003Cstrong>event name\u003C\u002Fstrong> (these three are required).\u003C\u002Fli>\n\u003Cli>Set the \u003Cstrong>CRUD\u003C\u002Fstrong> verb, \u003Cstrong>source\u003C\u002Fstrong>, and an optional \u003Cstrong>trigger key\u003C\u002Fstrong>.\u003C\u002Fli>\n\u003Cli>Define the \u003Cstrong>payload contract\u003C\u002Fstrong> as JSON — what data the event carries. The editor flags invalid JSON before you save.\u003C\u002Fli>\n\u003Cli>Set the \u003Cstrong>status\u003C\u002Fstrong> to reflect where the event is: \u003Ccode>planning\u003C\u002Fcode> while you&#39;re designing it, advancing as you instrument and ship it.\u003C\u002Fli>\n\u003Cli>Save.\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch2>Variations\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Filtering and reading the table.\u003C\u002Fstrong> Filter by module and status in the bar; \u003Cstrong>Advanced Filters\u003C\u002Fstrong> adds CRUD-type and source. The footer tallies events by CRUD verb and by source, so you can sanity-check coverage at a glance.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Linking to your product spec.\u003C\u002Fstrong> If you maintain a \u003Ca href=\"\u002Fhelp\u002Fthe-product-development-concept\">Product Manager\u003C\u002Fa> spec, attach the relevant model and the controllers that emit the event. That turns the registry into part of your living architecture, not a side list.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Folding into PD.\u003C\u002Fstrong> There&#39;s an active plan to fold events into the Product Manager workspace as a native PD entity. Until that lands, the registry stays at \u003Ccode>\u002Fstudio\u002Fmartech\u002Fevents\u003C\u002Fcode> for historical reasons. Nothing you enter is lost in that move.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>FAQ\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Are these marketing campaigns or email campaigns?\u003C\u002Fstrong>\nNo. Despite the \u003Ccode>martech\u003C\u002Fcode> in the URL, an event here is a named action your software performs — the kind you&#39;d track in PostHog or GA. There&#39;s no audience, blast, or campaign timeline.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Does adding an event here start tracking it automatically?\u003C\u002Fstrong>\nNo. The registry is the design surface — it names and documents the event. You still instrument the actual tracking in your analytics tool. The registry is what that code should conform to.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>What is the payload contract for?\u003C\u002Fstrong>\nIt documents the event&#39;s data shape so every downstream consumer — an email that fires on it, an automation, your analytics schema — agrees on the fields. Keep it minimal and PII-free.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Why must an event belong to a specific brand?\u003C\u002Fstrong>\nEvents are strictly brand-scoped to avoid leaking one brand&#39;s event data into another under m18t&#39;s tenancy model. There&#39;s no &quot;all-brands&quot; event.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Can I connect an event to the code that emits it?\u003C\u002Fstrong>\nYes — link it to the Product Manager controllers that trigger it, and to the emails it should dispatch. See \u003Ca href=\"\u002Fhelp\u002Ftying-events-together\">Tying Events to Emails &amp; Code\u003C\u002Fa>.\u003C\u002Fp>\n\u003Cp>\u003Cstrong>What&#39;s next\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ca href=\"\u002Fhelp\u002Ftying-events-together\">Tying Events to Emails &amp; Code\u003C\u002Fa> — wire events to controllers and emails.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fhelp\u002Fthe-email-repository\">The Email Repository\u003C\u002Fa> — the emails events trigger.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fhelp\u002Fthe-product-development-concept\">The Product Development Concept\u003C\u002Fa> — the controllers and models events link to.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fhelp\u002Fthe-status-set\">The Status Set\u003C\u002Fa> — the status vocabulary events share.\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"\u002Fhelp\u002Fprogrammatic-read-write\">Programmatic Read &amp; Write\u003C\u002Fa> — read and create events via the MCP endpoint.\u003C\u002Fli>\n\u003C\u002Ful>\n",{"slug":9,"title":10},"emails-and-events","Emails & Events",{"meta_title":12,"meta_description":6,"keywords":13,"canonical_url":14,"og_title":5,"og_description":6,"og_image":15,"robots":16,"json_ld":17},"The Analytics Event Registry | m18t Help","analytics event registry, events manager, event storming, payload contract, event vocabulary, brand-scoped events, PostHog events, product analytics","https:\u002F\u002Fm18t.com\u002Fhelp\u002Fthe-analytics-event-registry","https:\u002F\u002Fm18t.com\u002Fog-default.png","index, follow",{"@context":18,"@graph":19},"https:\u002F\u002Fschema.org",[20,33,58],{"@type":21,"headline":5,"description":6,"articleSection":10,"inLanguage":22,"datePublished":23,"dateModified":23,"image":15,"author":24,"publisher":28,"mainEntityOfPage":31},"Article","en","2026-06-25",{"@type":25,"name":26,"url":27},"Organization","m18t","https:\u002F\u002Fm18t.com",{"@type":25,"name":26,"url":27,"logo":29},{"@type":30,"url":15},"ImageObject",{"@type":32,"@id":14},"WebPage",{"@type":34,"mainEntity":35},"FAQPage",[36,42,46,50,54],{"@type":37,"name":38,"acceptedAnswer":39},"Question","Are these marketing campaigns or email campaigns?",{"@type":40,"text":41},"Answer","No. Despite the martech in the URL, an event here is a named action your software performs — the kind you'd track in PostHog or GA. There's no audience, blast, or campaign timeline.",{"@type":37,"name":43,"acceptedAnswer":44},"Does adding an event here start tracking it automatically?",{"@type":40,"text":45},"No. The registry is the design surface — it names and documents the event. You still instrument the actual tracking in your analytics tool. The registry is what that code should conform to.",{"@type":37,"name":47,"acceptedAnswer":48},"What is the payload contract for?",{"@type":40,"text":49},"It documents the event's data shape so every downstream consumer — an email that fires on it, an automation, your analytics schema — agrees on the fields. Keep it minimal and PII-free.",{"@type":37,"name":51,"acceptedAnswer":52},"Why must an event belong to a specific brand?",{"@type":40,"text":53},"Events are strictly brand-scoped to avoid leaking one brand's event data into another under m18t's tenancy model. There's no \"all-brands\" event.",{"@type":37,"name":55,"acceptedAnswer":56},"Can I connect an event to the code that emits it?",{"@type":40,"text":57},"Yes — link it to the Product Manager controllers that trigger it, and to the emails it should dispatch. See Tying Events to Emails & Code.",{"@type":59,"itemListElement":60},"BreadcrumbList",[61,65,69,72],{"@type":62,"position":63,"name":64,"item":27},"ListItem",1,"Home",{"@type":62,"position":66,"name":67,"item":68},2,"Help","https:\u002F\u002Fm18t.com\u002Fhelp",{"@type":62,"position":70,"name":10,"item":71},3,"https:\u002F\u002Fm18t.com\u002Fhelp\u002Fcategories\u002Femails-and-events",{"@type":62,"position":73,"name":5,"item":14},4,1786312172281]