Loading...
Loading...
The Conversion Tracking skill provides end-to-end management of Google Ads conversion measurement infrastructure.
npx skill4agent add itallstartedwithaidea/agent-skills conversion-trackingflowchart TD
A[Conversion Strategy Definition] --> B[Conversion Action Setup]
B --> C[Primary Conversions\nPurchase, Lead, Sign-up]
B --> D[Secondary Conversions\nAdd-to-Cart, Page View]
C --> E[Google Tag Implementation]
D --> E
E --> F[Base Tag: gtag.js]
E --> G[Event Snippets]
E --> H[Google Tag Manager]
F --> I[Enhanced Conversions]
G --> I
I --> I1[Email Hashing]
I --> I2[Phone Hashing]
I --> I3[Address Matching]
J[CRM / Backend Data] --> K[Offline Conversion Import]
K --> K1[Click ID Matching: GCLID]
K --> K2[Enhanced Conversions for Leads]
K --> K3[Store Sales Import]
I1 --> L[Conversion Validation Engine]
I2 --> L
I3 --> L
K1 --> L
K2 --> L
K3 --> L
L --> M{Validation Status}
M -->|Healthy| N[Attribution Model Configuration]
M -->|Issues Detected| O[Debugging Pipeline]
O --> P[Tag Diagnostics]
O --> Q[Data Discrepancy Analysis]
O --> R[Cross-Platform Reconciliation]
N --> S[Data-Driven Attribution]
N --> T[Conversion Value Rules]
N --> U[Conversion Window Optimization]async function validateConversionTracking(customerId) {
const conversionActions = await getConversionActions(customerId);
const tagDiagnostics = await runTagDiagnostics(customerId);
const recentConversions = await getRecentConversions(customerId, 7);
const issues = [];
for (const action of conversionActions) {
if (action.status !== 'ENABLED') continue;
const validation = {
actionName: action.name,
category: action.category,
tagInstalled: tagDiagnostics[action.id]?.installed ?? false,
firingCorrectly: tagDiagnostics[action.id]?.recentFires > 0,
conversionCount7d: recentConversions[action.id]?.count ?? 0,
conversionLag: calculateConversionLag(recentConversions[action.id]),
duplicateRate: detectDuplicates(recentConversions[action.id]),
valueAccuracy: validateConversionValues(recentConversions[action.id])
};
if (!validation.tagInstalled) {
issues.push({ action: action.name, severity: 'critical', issue: 'Tag not detected on website' });
}
if (!validation.firingCorrectly) {
issues.push({ action: action.name, severity: 'critical', issue: 'Tag installed but not firing' });
}
if (validation.duplicateRate > 0.05) {
issues.push({ action: action.name, severity: 'high', issue: `${(validation.duplicateRate * 100).toFixed(1)}% duplicate conversion rate detected` });
}
}
return { conversionActions, issues, overallHealth: issues.length === 0 ? 'healthy' : 'needs_attention' };
}function generateEnhancedConversionTag(config) {
const { conversionId, conversionLabel, dataSource } = config;
return `
<!-- Google tag (gtag.js) - Enhanced Conversions -->
<script async src="https://www.googletagmanager.com/gtag/js?id=${conversionId}"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${conversionId}');
gtag('set', 'user_data', {
'email': hashUserEmail(),
'phone_number': hashUserPhone(),
'address': {
'first_name': document.getElementById('first_name')?.value,
'last_name': document.getElementById('last_name')?.value,
'street': document.getElementById('street')?.value,
'city': document.getElementById('city')?.value,
'region': document.getElementById('region')?.value,
'postal_code': document.getElementById('postal_code')?.value,
'country': document.getElementById('country')?.value
}
});
gtag('event', 'conversion', {
'send_to': '${conversionId}/${conversionLabel}',
'value': getTransactionValue(),
'currency': 'USD',
'transaction_id': getOrderId()
});
</script>`;
}
async function setupOfflineConversionImport(customerId, crmConfig) {
const { crmType, conversionActionName, uploadFrequency } = crmConfig;
const pipeline = {
source: crmType,
gclidCapture: {
method: 'hidden_form_field',
fieldName: 'gclid',
storageMethod: 'crm_custom_field',
expirationDays: 90
},
conversionMapping: {
crmStage: crmConfig.qualifiedStage,
googleAdsAction: conversionActionName,
valueField: crmConfig.dealValueField
},
uploadSchedule: {
frequency: uploadFrequency,
lookbackWindow: '30_days',
deduplication: 'gclid_plus_timestamp'
}
};
return pipeline;
}function configureAttribution(customerId, config) {
const { preferredModel = 'DATA_DRIVEN' } = config;
return {
model: preferredModel,
requirements: {
dataDriven: {
minConversions30d: 300,
minClicks30d: 3000,
eligible: config.conversions30d >= 300 && config.clicks30d >= 3000
}
},
conversionValueRules: [
{ condition: 'audience_is_returning_customer', valueMultiplier: 1.5 },
{ condition: 'device_is_mobile', valueMultiplier: 0.8 },
{ condition: 'geo_is_tier1_market', valueMultiplier: 1.2 }
],
conversionWindows: {
clickThrough: config.salesCycleDays || 30,
viewThrough: Math.min(config.salesCycleDays || 30, 30),
engagedView: 3
}
};
}| Platform | Supported |
|---|---|
| Claude Code | ✅ |
| Cursor | ✅ |
| Codex | ✅ |
| Gemini | ✅ |