224 lines
5.1 KiB
Plaintext
224 lines
5.1 KiB
Plaintext
---
|
|
title: Events
|
|
description: Track user actions and behavior
|
|
---
|
|
|
|
## What are events
|
|
|
|
Events track user actions in your application. Use them to:
|
|
- Trigger automated workflows
|
|
- Build behavior-based segments
|
|
- Analyze user engagement
|
|
- Track conversion funnels
|
|
|
|
Common events: signups, purchases, logins, feature usage, page views.
|
|
|
|
## Tracking events
|
|
|
|
Use your **public key** for event tracking:
|
|
|
|
```javascript
|
|
fetch('{{API_URL}}/v1/track', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Authorization': 'Bearer pk_your_public_key',
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify({
|
|
email: 'user@example.com',
|
|
event: 'button_clicked',
|
|
data: {
|
|
button: 'signup',
|
|
page: '/pricing'
|
|
}
|
|
})
|
|
});
|
|
```
|
|
|
|
This creates or updates the contact and tracks the event.
|
|
|
|
### Persistent vs. Non-Persistent Data
|
|
|
|
Event data can be either **persistent** (saved to contact) or **non-persistent** (available only to workflows):
|
|
|
|
**Simple values are persistent** — Saved to contact profile:
|
|
```javascript
|
|
{
|
|
email: 'user@example.com',
|
|
event: 'subscription_created',
|
|
data: {
|
|
plan: 'premium', // Saved to contact.data.plan
|
|
mrr: 99.00 // Saved to contact.data.mrr
|
|
}
|
|
}
|
|
```
|
|
|
|
**Non-persistent values** — Available only to triggered workflows:
|
|
```javascript
|
|
{
|
|
email: 'user@example.com',
|
|
event: 'order_placed',
|
|
data: {
|
|
totalSpent: 299.99, // Persistent - saved to contact
|
|
orderId: {value: 'order-12345', persistent: false}, // Non-persistent - workflows only
|
|
receiptUrl: {value: 'https://...', persistent: false} // Non-persistent - workflows only
|
|
}
|
|
}
|
|
```
|
|
|
|
**Why use non-persistent data?**
|
|
- Temporary tokens/codes (password reset, verification)
|
|
- One-time URLs or session data
|
|
- Data that shouldn't pollute contact profiles
|
|
- Information needed only for a specific workflow
|
|
|
|
Non-persistent data is available throughout the entire workflow execution but never stored on the contact record.
|
|
|
|
## Event structure
|
|
|
|
Each event stores:
|
|
|
|
```json
|
|
{
|
|
"id": "evt_abc123",
|
|
"name": "purchase",
|
|
"contactId": "contact_xyz",
|
|
"data": {
|
|
"product": "Premium Plan",
|
|
"amount": 99.00
|
|
},
|
|
"createdAt": "2024-03-15T10:30:00Z"
|
|
}
|
|
```
|
|
|
|
## Using events
|
|
You can use events to trigger workflows, create segments, and analyze user behavior.
|
|
|
|
## Common event patterns
|
|
|
|
### Lifecycle events
|
|
|
|
```javascript
|
|
// User signs up
|
|
track({ email, event: 'signed_up', data: { source: 'homepage' } });
|
|
|
|
// User activates account
|
|
track({ email, event: 'account_activated' });
|
|
|
|
// User completes onboarding
|
|
track({ email, event: 'onboarding_completed', data: { steps: 5 } });
|
|
```
|
|
|
|
### Commerce events
|
|
|
|
```javascript
|
|
// Add to cart
|
|
track({ email, event: 'cart_added', data: { productId: '123', price: 49 } });
|
|
|
|
// Purchase
|
|
track({ email, event: 'purchase', data: { orderId: '456', total: 99 } });
|
|
|
|
// Subscription created
|
|
track({ email, event: 'subscription_created', data: { plan: 'pro', mrr: 29 } });
|
|
```
|
|
|
|
### Engagement events
|
|
|
|
```javascript
|
|
// Feature used
|
|
track({ email, event: 'feature_used', data: { feature: 'export' } });
|
|
|
|
// Page viewed
|
|
track({ email, event: 'page_view', data: { path: '/dashboard' } });
|
|
|
|
// Login
|
|
track({ email, event: 'logged_in' });
|
|
```
|
|
|
|
### Automatic events
|
|
|
|
Plunk sends these automatically:
|
|
|
|
**Email events:**
|
|
- `email.sent` — Email delivered to inbox
|
|
- `email.opened` — Email opened (first time)
|
|
- `email.clicked` — Link clicked in email
|
|
- `email.bounced` — Email bounced
|
|
- `email.complained` — Spam complaint
|
|
|
|
**Segment events** (if membership tracking enabled):
|
|
- `segment.entered` — Contact joined segment
|
|
- `segment.exited` — Contact left segment
|
|
|
|
## Event naming conventions
|
|
|
|
**Use lowercase with underscores:**
|
|
```
|
|
✓ user_signed_up
|
|
✓ purchase_completed
|
|
✗ UserSignedUp
|
|
✗ purchaseCompleted
|
|
```
|
|
|
|
**Be specific but concise:**
|
|
```
|
|
✓ trial_started
|
|
✓ subscription_cancelled
|
|
✗ user_started_a_trial
|
|
✗ sub_cancel
|
|
```
|
|
|
|
**Group related events:**
|
|
```
|
|
user_signed_up
|
|
user_logged_in
|
|
user_deleted_account
|
|
|
|
subscription_created
|
|
subscription_renewed
|
|
subscription_cancelled
|
|
```
|
|
|
|
## Managing events
|
|
|
|
### List events
|
|
|
|
```bash
|
|
curl -X GET "{{API_URL}}/events?limit=100" \
|
|
-H "Authorization: Bearer sk_your_secret_key"
|
|
```
|
|
|
|
### List unique event names
|
|
|
|
```bash
|
|
curl -X GET {{API_URL}}/events/names \
|
|
-H "Authorization: Bearer sk_your_secret_key"
|
|
```
|
|
|
|
Returns all event names tracked in your project.
|
|
|
|
### Get events for a contact
|
|
|
|
```bash
|
|
curl -X GET {{API_URL}}/events?contactId=contact_id \
|
|
-H "Authorization: Bearer sk_your_secret_key"
|
|
```
|
|
|
|
## Best practices
|
|
|
|
**Track meaningful actions** — Focus on events that indicate intent or value (signups, purchases, key features).
|
|
|
|
**Include context** — Add relevant data to understand the event better (product, amount, source).
|
|
|
|
**Be consistent** — Use the same event names and data structure across your application.
|
|
|
|
**Don't over-track** — Tracking every click creates noise. Focus on conversion events and key milestones.
|
|
|
|
**Test your tracking** — Verify events appear in dashboard before building workflows around them.
|
|
|
|
## What's next
|
|
|
|
- [Build workflows](/guides/workflows) triggered by events
|
|
- [Create segments](/guides/segments) based on event data
|
|
- [Analyze events](/guides/analytics) to understand user behavior
|