Skip to main content

Use Custom Events in Marketing Automation

Updated over a week ago

Custom events let you connect real-world actions — purchases, bookings, app interactions, CRM updates — to your Marketing Automation flows. When a custom event fires for a profile, it can trigger a flow, personalise email content with event data, branch the journey, or hold a profile until a specific action happens.

This article covers the full workflow: understanding custom event types, using them to start a flow, personalising email content with event data, and using custom events inside Check Profile and Wait for Event nodes.


In this article


Prerequisites — What you need before you start

Before you can use a custom event in a Marketing Automation flow, the event must exist in your Apsis One data model. Here's the setup chain:

Step

Where

What to do

1

Data Model (Settings → Data Model)

Create the custom event — define its name, type (Transaction, Conversion, or Signal), and data fields. See About Custom Events.

2

Web tracking or API

Implement the code that sends the event to Apsis One — either via the web tracking script on your site, or via the API from your backend/CRM. See Web Tracking: Custom Events or API: Custom Events.

3

Marketing Automation

Select the custom event in your flow's Listen node (or Check Profile / Wait for Event node). This is what this article covers.

💡 Good to know: f you don't see your custom event in the Listen node dropdown, it hasn't been created in the Data Model yet. Custom events appear in the dropdown once they're defined in the Data Model, even before any data has been collected.


Understanding custom event types

When you create a custom event in the Data Model, you choose one of three types. The type determines how the event is categorised and which data fields are available — but all three work the same way in Marketing Automation.

Type

What it represents

Typical data fields

Example events

Transaction

A completed exchange of value — usually a purchase or order

Order ID, product name, price, quantity, currency, category

"Purchase completed", "Subscription renewed", "Booking confirmed"

Conversion

A goal completion — a profile reaching a desired outcome

Conversion type, value, source, campaign ID

"Trial started", "Demo requested", "Whitepaper downloaded", "Lead qualified"

Signal

A meaningful interaction that doesn't necessarily involve a transaction or conversion

Any custom fields you define

"Survey completed", "Poll answered", "Loyalty tier changed", "Preference updated"

💡 Tip — Which type should I choose? If you're unsure, ask yourself: does the event involve money changing hands (Transaction), a measurable goal being reached (Conversion), or simply an important action worth tracking (Signal)? If it's still unclear, Signal is the most flexible type — it accepts any data fields you define.


Use a custom event to start a flow (Listen node)

The most common use of custom events in Marketing Automation is as a flow trigger — the event fires, and the profile enters the flow.

Step-by-step

  1. Create a Marketing Automation flow (or open an existing one). Click on the Listen node to open its settings.

  2. Select Events as the data source.


  3. Choose Custom Events from the event categories.


  4. Select the custom event type: Transactions, Conversions, or Signals.


  5. Select the specific custom event from the dropdown. This lists all custom events of the selected type that have been created in your Data Model.


  6. (Optional) Add a Match filter to narrow the trigger to a specific field value. For example, only trigger the flow when the product category equals "Premium".

  7. Expand the Match section, select the event data field to match on (e.g. category), choose a match type (e.g. "equals"), and enter the value.

    💡 Tip: If you skip the Match filter, the flow will trigger for every instance of the custom event — regardless of the data it carries. Use Match when you only want the flow to start for specific scenarios (e.g. only high-value purchases, only a certain product category, only bookings for a specific destination).

    (Optional) Set frequency and time frame conditions. You can require the event to have been fired a certain number of times (e.g. "at least 3 times") and optionally within a specific time frame (e.g. "within the last 30 days") before the flow starts.

    💡 Good to know: Frequency conditions are most useful for flows that should only activate after repeated behaviour — e.g. triggering a loyalty reward after 5 purchases, or flagging a support issue after 3 failed login attempts.


    (Optional) Add a Segment filter. Expand Advanced options and add a segment to further restrict which profiles can enter the flow. Only profiles who trigger the event and are members of the segment will enter.


Personalise email content with custom event data

When a custom event starts the flow, the event's data fields become available for personalisation in Email nodes within that flow. This means you can dynamically insert event-specific data — like a product name, booking destination, order total, or departure time — directly into the email your profile receives.

💡 Good to know: Event data personalisation is available in any Email node within the flow, not just the first one. The data from the triggering event travels with the profile through the entire flow. This also works with standard events (not just custom events) — any event selected in the Listen node makes its data fields available in Email nodes.

Step-by-step: Insert event data into an email

  1. Make sure your Listen node is configured with the custom event (steps above).

  2. Add an Email node to your flow and click Create new email to open the email editor.

  3. In the email editor, click inside a text element where you want to insert the event data.

  4. In the inline text editor toolbar, click Events.

  5. A dropdown appears showing all data fields from the custom event selected in your Listen node. Choose the field you want to insert — e.g. departure_time, product_name, order_total.

  6. The data tag is inserted into your email. It will be replaced with the actual event data when the email is sent to each profile.

  7. Click Finish and then Save as draft or Ready to Send to return to the canvas. You'll see a preview of the email in the node — the data tags will show as placeholder text in the preview.

⚠️ Important: Event data personalisation tags work just like regular data tags (personalisation tags for attributes). If the event data field is empty for a specific profile's event, the tag will render as blank in the email. Consider a fallback or designing your email to handle missing values gracefully.

What event data can I use?

The available fields depend on how you defined the custom event in the Data Model. Every field you added to the event schema is available for personalisation. Common examples:

Event type

Example fields available in email

Transaction (e.g. "Purchase completed")

Product name, price, quantity, order ID, currency, category

Conversion (e.g. "Demo requested")

Demo type, preferred date, company size, source page

Signal (e.g. "Booking confirmed")

Departure time, destination, booking reference, passenger count


Use custom events in Check Profile and Wait for Event nodes

Custom events aren't limited to the Listen node. You can also use them mid-flow to branch the journey or hold a profile until a specific action occurs.


Check Profile node — Branch based on past custom events

Use a Check Profile node to evaluate whether a profile has (or hasn't) fired a specific custom event — and route them accordingly.

Example: After sending a promotional email, wait 5 days, then check if the profile has a "Purchase completed" event. If yes → send a thank-you email. If no → send a reminder with a discount code.

  1. Add a Check Profile node to your flow.

  2. Select EventsCustom Events → choose the event type and specific event.

  3. Optionally add a Match filter and frequency/time frame conditions — e.g. "Purchase completed at least 1 time within the last 5 days".

  4. Connect the Yes and No outputs to different paths.

Wait for Event node — Hold until the event fires

  1. Use a Wait for Event node to pause a profile's journey until a specific custom event fires — or until a timeout period expires.

  2. Example: After sending a booking confirmation, hold the profile for up to 7 days waiting for a "Payment received" event. If the event fires → continue to confirmation flow. If it times out → send a payment reminder.

  3. Add a Wait for Event node to your flow.

  4. Select EventsCustom Events → choose the event type and specific event.

  5. Optionally add a Match filter to wait for a specific value.

  6. Set the timeout — how long the node should wait before releasing the profile down the "not matched" path.

  7. Connect both outputs: Event matched and Timed out.

💡 Tip: The Wait for Event node is one of the most powerful nodes for custom event workflows. It lets you build flows that respond to real-world actions happening outside Apsis One — like payments, deliveries, app logins, or CRM status changes — without requiring you to know exactly when they'll happen.


Use cases

Post-purchase follow-up (Transaction event)

Trigger: Listen node → Custom Events → Transactions → "Purchase completed"


Flow: Listen → Time (1 day) → Email ("Thanks for your order! Your [product_name] is on its way.") → Time (7 days) → Email ("How's your [product_name]? Leave a review.") → End Flow


Personalisation: Product name, order ID, and price pulled from the event data into both emails.


Why it works: Combines real-time triggering with event data personalisation for a fully automated, product-specific follow-up sequence.

Booking confirmation with payment wait (Signal event + Wait for Event)

Trigger: Listen node → Custom Events → Signals → "Booking confirmed"


Flow: Listen → Email ("Booking confirmed! Departure: [departure_time], Destination: [destination]") → Wait for Event ("Payment received", 3-day timeout) → Payment received: Email ("Payment received — you're all set!") → End Flow / Timed out: SMS ("Your payment is still pending") → Time (2 days) → Email ("Final reminder: complete your payment") → End Flow


Why it works: The Wait for Event node bridges two separate real-world actions (booking and payment) within a single flow, with graceful fallback for incomplete payments.

Lead scoring and sales handoff (Conversion event + Check Profile)

Trigger: Listen node → Custom Events → Conversions → "Demo requested"


Flow: Listen → Time (2 days) → Check Profile → Event: "Page view" on pricing page at least 2 times within 2 days → Yes: Notification node (alert sales: "Hot lead — visited pricing page after demo request") → Update Profile (add tag "Sales qualified") → End Flow / No: Email ("Here's a recap of what we covered in the demo") → End Flow

Why it works: Combines a custom event trigger with standard event evaluation and internal notifications — bridging marketing and sales seamlessly.

Loyalty tier upgrade with conditional branching (Transaction event + Match + Frequency)

Trigger: Listen node → Custom Events → Transactions → "Purchase completed" → Match: none (all purchases)Frequency: at least 5 times within 365 days


Flow: Listen → Check Profile → Attribute: "Loyalty tier" equals "Gold" → Yes: Email ("You're already Gold — thank you!") → End Flow / No: Update Profile (set "Loyalty tier" to "Gold") → Email ("Congratulations! You've reached Gold status 🎉") → Notification node (alert CRM team) → End Flow


Why it works: Uses frequency conditions to trigger only after 5 purchases in a year, then checks current status to avoid redundant upgrades. Combines event frequency, attribute checking, profile updating, and internal notifications in one flow.


Technical deep dive

How custom events are processed in real time

When a custom event is sent to Apsis One (via web tracking or API), it is processed immediately. If a Marketing Automation flow has a Listen node configured for that event, any matching profile enters the flow within seconds of the event firing. There is no batch delay — custom event triggers are real-time.


Event data lifecycle in a flow

The data carried by the triggering event stays available throughout the entire flow journey for that profile. This means:

  • An Email node at position 2 in the flow has access to the same event data as an Email node at position 5.

  • If the flow includes Time nodes with multi-day delays, the event data is still available when the profile eventually reaches a downstream Email node.

  • Each profile's event data is independent — if two profiles enter the flow from different event instances, each sees their own event data in emails.

Event versions

Custom events can have multiple versions if you change the event schema in the Data Model (e.g. adding or removing fields). When you select a custom event in a node, you may be prompted to choose a version. Key points:

  • Always use the latest version unless you have a specific reason to target an older schema.

  • If you update an event's schema, existing flows that reference the old version will continue to work — but they won't see the new fields until you update the node to the latest version.

  • Each version has a unique version ID, visible in the Data Model.

Custom events vs. standard events

Custom events

Standard events

Defined by

You — in the Data Model

Apsis One — built into the platform

Data fields

You define them (flexible)

Fixed per event type (e.g. email opens always include activity ID, timestamp)

Source

Your website (web tracking), your app, or your backend/CRM (API)

Apsis One platform (email sends, form submissions, page views, subscription changes)

Real-time trigger

Yes

Yes

Email personalisation

Yes — all custom fields available

Yes — standard event fields available

Typical use

External actions: purchases, bookings, app events, CRM changes

Platform actions: email engagement, form submissions, subscription changes


API identifiers and permission settings

When sending custom events via the API, the event is associated with a profile using an identifier (email, mobile, or CRM ID). The Data Model includes permission settings that control which identifiers can be used by external systems to read or write profile data. If your API integration can't send events, check the identifier permissions under the custom event's settings in the Data Model.


Troubleshooting

Problem

Likely cause

Solution

Custom event doesn't appear in the Listen node dropdown

The event hasn't been created in the Data Model, or you're looking under the wrong type (Transaction/Conversion/Signal)

Go to Settings → Data Model and verify the event exists. Check which type it was created under. If it's new, it may take a moment to appear.

Flow is active but no profiles are entering

The event isn't being sent from your website/app/API, or a Match filter is too restrictive

Verify that events are actually being sent — check your web tracking or API logs. If events are firing, temporarily remove the Match filter to see if profiles enter. Also check Flow Settings → Subscriptions.

Event data personalisation shows blank in the email

The event data field is empty for that specific event instance, or the wrong event version is selected

Check the event data being sent — is the field populated? Verify the event version in the Listen node matches the version your system is sending. Consider a fallback in your email design.

Event data fields don't appear in the email editor

The Listen node isn't configured with a custom event, or the Email node was created before the Listen node was set up, or the version ID is not correct.

Configure the Listen node with the custom event first, then create the email. The editor pulls available fields from the Listen node's event configuration.

Profile enters the flow multiple times from the same event type

Entry Limit is set to Unlimited or more than 1, and the event fires multiple times

Review Flow Settings → Entry Limit. If you only want one journey per profile, set it to 1. If multiple entries are intentional (e.g. per purchase), this is expected behaviour.

Wait for Event node never triggers

The event isn't firing, the Match filter doesn't match the actual event data, or the event version doesn't match

Check API/web tracking to verify the event is being sent. Verify the Match filter values exactly match what's being sent (case-sensitive). Check the event version.

API can't send events — permission error

Identifier permissions in the Data Model are restricting write access

Go to the custom event settings in the Data Model and check the identifier permissions. Ensure the identifier your API uses (email, mobile, or CRM ID) has write permission enabled.


What's next?

Did this answer your question?