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:

Track Conversion
<!-- 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

Day 1: Referral

User clicks link in ChatGPT

source: chatgpt
Day 1: Browse

User explores site

visitor_id stored
Day 7: Return

User returns directly

visitor_id matched
Day 7: Convert

aos.track('signup')

→ attributed to chatgpt

Server-Side Tracking

For important conversions (purchases, subscriptions), consider server-side tracking for reliability:

Server-Side Conversion
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?
AttractOS uses first-touch attribution. When a visitor arrives via an LLM referral, we store their "first source" in localStorage. Any future conversion from that visitor is attributed to that original source.
Can I track conversions that happen on a different page?
Yes. As long as the AttractOS script is on both pages and the visitor uses the same browser, the conversion will be attributed. The visitor ID persists in localStorage.
What if a visitor clears their browser storage?
If localStorage is cleared, attribution is lost for that visitor. Consider using server-side tracking via our API for critical conversion events to ensure they're always captured.
Can I send conversion value with the event?
Yes. Pass a numeric value parameter: aos.track('purchase', { value: 99.99 }). This appears in your dashboard and API responses, letting you calculate revenue per LLM source.
Bot Traffic by AttractOS