How to Track AJAX Forms
Track conversions when AJAX forms are submitted successfully.
Prerequisites
Ensure the SealMetrics tracker is installed on your page:
<script src="https://t.sealmetrics.com/t.js?id=YOUR_ACCOUNT_ID" defer></script>
Basic Implementation
Call sealmetrics.conv() or sealmetrics.micro() in your AJAX success callback:
// Example with fetch API
fetch('/api/submit-form', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
if (data.success) {
// Track the form submission as a conversion
if (typeof sealmetrics !== 'undefined') {
sealmetrics.conv('lead', 0, {
form_name: 'contact',
form_location: 'homepage'
});
}
}
});
jQuery AJAX Example
$.ajax({
url: '/api/submit-form',
method: 'POST',
data: formData,
success: function(response) {
// Track successful submission
if (typeof sealmetrics !== 'undefined') {
sealmetrics.conv('lead', 0, {
form_name: 'newsletter',
source: 'footer'
});
}
}
});
Conversion vs Microconversion
Choose the right method based on your goal:
| Goal Type | Method | Example |
|---|---|---|
| Lead form (valuable) | sealmetrics.conv() | Contact form, quote request |
| Newsletter signup | sealmetrics.conv() | Email subscription |
| Minor interaction | sealmetrics.micro() | Feedback form, comments |
Conversion Example (with value)
// Lead with estimated value
sealmetrics.conv('lead', 50, {
form_name: 'quote_request',
service: 'consulting'
});
Microconversion Example
// Form step completion (no monetary value)
sealmetrics.micro('form_step', {
step: 'personal_info',
form_name: 'checkout'
});
Framework Examples
React
const handleSubmit = async (e) => {
e.preventDefault();
try {
const response = await fetch('/api/contact', {
method: 'POST',
body: JSON.stringify(formData)
});
if (response.ok) {
// Track conversion
if (typeof sealmetrics !== 'undefined') {
sealmetrics.conv('lead', 0, {
form_name: 'contact'
});
}
}
} catch (error) {
console.error('Form submission failed');
}
};
Vue.js
async submitForm() {
try {
await this.$axios.post('/api/contact', this.formData);
// Track conversion
if (typeof sealmetrics !== 'undefined') {
sealmetrics.conv('lead', 0, {
form_name: 'contact'
});
}
} catch (error) {
console.error('Form submission failed');
}
}
Best Practices
- Track only on success — Don't fire tracking on form errors
- Check tracker exists — Always use
typeof sealmetrics !== 'undefined' - Include form context — Add properties like
form_nameandform_location - Avoid duplicates — Track once per successful submission
Troubleshooting
Conversion not appearing
- Check browser Network tab for beacon to
t.sealmetrics.com - Verify the tracker script is loaded before your AJAX code
- Ensure the success callback is actually firing
Duplicate conversions
If you're seeing duplicates, ensure your tracking code only fires once:
let formTracked = false;
function onFormSuccess() {
if (!formTracked && typeof sealmetrics !== 'undefined') {
sealmetrics.conv('lead', 0, { form_name: 'contact' });
formTracked = true;
}
}
Related Documentation
- Conversions - Full conversion tracking reference
- Microconversions - Event tracking
- Troubleshooting - Common issues and solutions