Conversion Tracking
Track custom conversion events and attribute them to LLM sources using aos.track('event_name'). When a user who arrived via ChatGPT, Claude, or another AI service completes a conversion (signup, purchase, download), AttractOS automatically attributes it to their original referral source.
Basic Usage
After installing the tracking script, use aos.track() to record conversion events:
<!-- Basic conversion -->
<button onclick="aos.track('signup')">
Sign Up
</button>
<!-- With event value -->
<button onclick="aos.track('purchase', { value: 49.99 })">
Buy Now
</button>// React/Next.js
function SignupButton() {
const handleClick = () => {
aos.track('signup');
};
return <button onClick={handleClick}>Sign Up</button>;
}
// With value
function PurchaseButton({ price }) {
const handlePurchase = () => {
aos.track('purchase', { value: price });
};
return <button onClick={handlePurchase}>Buy for ${price}</button>;
}# Server-side conversion (Python)
import requests
def track_conversion(site_key, visitor_id, event_name, page_path, value=None):
payload = {
't': 'conversion',
'k': site_key,
'p': page_path,
'e': event_name,
'v': visitor_id, # From client-side localStorage
}
if value:
payload['val'] = value
response = requests.post(
'https://attractos.com/api/t',
json=payload
)
return response.json() Event Naming
Use descriptive, lowercase event names with underscores. Keep them consistent across your site.
| Event Name | Description | Example Value |
|---|---|---|
signup | User creates an account | — |
purchase | Completed purchase | 99.99 |
subscription_start | Started paid subscription | 29.00 |
trial_start | Started free trial | — |
download | Downloaded resource/app | — |
demo_request | Requested a demo | — |
form_submit | Submitted contact form | — |
Event names are limited to 100 characters. Avoid spaces—use underscores instead.
Attribution Flow
User clicks link in ChatGPT
source: chatgpt User explores site
visitor_id stored User returns directly
visitor_id matched aos.track('signup')
→ attributed to chatgpt Server-Side Tracking
For important conversions (purchases, subscriptions), consider server-side tracking for reliability:
curl -X POST "https://attractos.com/api/t" \
-H "Content-Type: application/json" \
-d '{
"t": "conversion",
"k": "YOUR_SITE_KEY",
"p": "/checkout/success",
"e": "purchase",
"v": "VISITOR_ID_FROM_CLIENT",
"val": 149.99
}'// Get visitor ID from client
const visitorId = localStorage.getItem('aos_visitor_id');
// Send to your backend with order data
await fetch('/api/complete-purchase', {
method: 'POST',
body: JSON.stringify({
orderId: '12345',
visitorId,
total: 149.99,
}),
});
// Backend tracks conversion
// (see Python example)# Backend (e.g., after Stripe webhook)
import requests
def record_purchase(visitor_id, order_total, page_path='/checkout/success'):
response = requests.post(
'https://attractos.com/api/t',
json={
't': 'conversion',
'k': 'YOUR_SITE_KEY',
'p': page_path,
'e': 'purchase',
'v': visitor_id,
'val': order_total,
}
)
return response.status_code == 200 Tip: Pass the visitor ID (localStorage.getItem('aos_visitor_id')) from client to server during checkout to enable server-side attribution.
Dashboard Metrics
Your conversions dashboard shows:
- Total conversions — All conversion events in the period
- By event type — Breakdown by event name (signup, purchase, etc.)
- By source — Which LLM sources drive the most conversions
- Total value — Sum of all conversion values
- Value by source — Revenue attributed to each AI service
- Conversion rate — Conversions / Referrals per source
Frequently Asked Questions
How does conversion attribution work?
Can I track conversions that happen on a different page?
What if a visitor clears their browser storage?
Can I send conversion value with the event?
value parameter: aos.track('purchase', { value: 99.99 }). This appears in your dashboard and API responses, letting you calculate revenue per LLM source.