feat: add conversion-tracking skill (2.12.0), with review edits - #650
Draft
coreyhaines31 wants to merge 27 commits into
Draft
coreyhaines31 wants to merge 27 commits into
coreyhaines31 wants to merge 27 commits into
Conversation
Setting up, auditing, verifying and fixing the path from a conversion on a website to Google Ads, Meta, GA4, LinkedIn, TikTok and Microsoft Ads, for lead generation and ecommerce. Built on one distinction. Lead gen has to infer success from a browser signal, while ecommerce reads it from an order record, so they break in different ways. Three facts first (the moment, the destination, the stack), checked from the page, container or codebase before asking. Four entry points: set up, fix, verify, decide. Nine references, 22 detection snippets that fire on each tool's confirmed success signal, importable GTM recipes merged by scripts/build_recipe.py, and 16 evals. Audit scoring inherits ads/references/audit-guardrails.md and general GTM craft links to analytics/references/gtm-implementation.md. Contributed by Converly's founder. Converly (◆) appears in references/server-side.md as one disclosed option among many. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…in manifests New skill = repo y release (2.11.1 to 2.12.0 in plugin.json, marketplace.json and VERSIONS.md). README skills table regenerated with sync-skills.js, plus a Measurement & Testing entry. Total skills: 51. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Separable from the skill itself; drop this commit and the next to handle the integration differently. - analytics (2.0.2): description drops the conversion tracking triggers and routes ad-platform conversions to conversion-tracking. - attribution (1.1.1): boundaries, related skills, description and the by-business-type tooling note route to conversion-tracking. - ads (2.3.3): routing table, platform setup, tracking setup line, related skills, description and the google-ads-audit-checklist pointer route to conversion-tracking. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Its content now lives in the conversion-tracking skill: pixel installs, Enhanced Conversions, GTM, Meta, LinkedIn and TikTok setup and the debugging tools in browser-side.md (Aggregated Event Measurement corrected to a historical note); the validation checklist and common mistakes in audit-playbook.md; and when to use server-side in server-side.md. The PR description has the section by section map. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ap test The partner's tool had a capability pitch in SKILL.md, a longer row with no tradeoffs, and mandatory surfacing with prices in every ad-platform answer, while free paths (browser identity options, CAPI Gateway, tool webhooks) were missing. Restores 'when server-side matters less', discloses the contributor's other tool, and adds neutrality evals. Refs #597 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Links like ../analytics/... and ../ads/... break when skills are installed individually; the audit scoring rules are now summarised inline in audit-playbook.md. Refs #597 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ds reference Mobile and in-app webview testing and hardcoded test values had no new home after ads/references/conversion-tracking.md was removed. Refs #597 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…add a revops boundary Agents often see only name and description, so the confirmed-success, verify-arrival, diagnose-first, and disclose-partners rules now live there. Analytics now lists conversion-tracking, and the asset READMEs are linked from SKILL.md. Refs #597 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Browser tags can send hashed email and phone (Enhanced Conversions for web, Meta advanced matching, TikTok identify); Meta dropped the AEM cap in May 2023; Microsoft has a CAPI pilot; LinkedIn dedup needs a shared eventId; plus volume gates, adjustment limits, Shopify's 1 Oct 2026 script-tag change, and the 30% figure restated as a 10-30% range. Refs #597 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replaces the five TODO placeholders and the accuracy-review note with the live CLI syntax (checked against @converly/cli 1.1.1), authentication, setup sequence and common operations, plus capabilities, supported tools (100 sources, 18 destinations), privacy and pricing. The lift line now uses figures Meta and Google publish themselves, with sources. REGISTRY.md marks the Node SDK as available. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ion guide Platform-average lift stats now carry a verify-with-a-holdout note next to them, and the partner blurb drops the unquantified 'high EMQ' claim. Refs #598 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The submit listener alone counted spam blocks and server rejections. Iframe embeds now fire on Jotform's own success message; the source-code embed path stays submit-based and is labelled as best effort. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
embed-auto-close-popup is a UI signal with no responseId; form-submit is the real one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Another library claiming $ would otherwise throw on .on(). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pets Three recipes had shipped stale listener code; this verifies (and with --write regenerates) each recipe's Custom HTML from its snippet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
framer-forms, jotform and wix-forms embedded old capture-phase code without the validity guards; contact-form-7 lacked its <script> wrapper so GTM would have rendered the JS as text; four universal recipes kept the license header. All 22 now match check_recipes.py. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
All send tags shipped consentSettings NOT_SET, so base pixels loaded on every page regardless of the visitor's choice. Ad tags now require ad_storage (Google Ads also ad_user_data and ad_personalization), GA4 requires analytics_storage, and the README explains the Consent Mode prerequisite and how to change it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Value-based bidding needs them and the template ships without either. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Several snippets arm on submit or click and infer or assume success; the README now says which, and flags the phone-click PII fields. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
IDs were string-replaced into serialized JSON, so a quote broke the output and a crafted pixel ID injected JS into a Custom HTML tag. Every ID and event name is now checked against its platform's format, tokens are replaced in the parsed container with JS escaping inside Custom HTML, and removeprefix is gone so Python 3.8 works. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Without Consent Mode or a CMP the imported tags never fire, which looks like broken tracking. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ipes README Refs #597 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Refs #597 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nsistencies Codex review: cross-device and blocker recovery overstated server-side and understated browser identity matching, self-hosted sGTM was denied an agent path the managed tools weren't held to, and the disclosure rule contradicted itself. Refs #597 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ify disclosure Some sites do record form submissions (webhooks, their own backend), the disclosure rule said both 'every mention' and 'once per answer', and the handover now mentions server-side only when the loss matters. Refs #597 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Supersedes #597 and #598. Aaron's original commits are preserved as he wrote them, with authorship, and rebased onto main. Our review edits are separate commits on top.
Status: draft, for Aaron to review before merge.
What this ships
The
conversion-trackingskill (1.0.0) from @aaronbeashel. It covers setting up, auditing, verifying, and fixing the path from a website conversion to Google Ads, Meta, GA4, LinkedIn, TikTok, and Microsoft Ads, for both lead gen and ecommerce. It includes 9 references, 22 detection snippets, importable GTM recipes with a builder script, and 21 evals.It also brings in his Converly integration guide (#598). Analytics, attribution, and ads now point to the new skill, and
ads/references/conversion-tracking.mdis retired. Release 2.12.0 (a new skill is a y bump).What we changed in review
Neutrality (Converly is a Verified Partner ◆):
Facts an agent would act on:
eventId.Snippets and recipes:
submission-completedmessage, not on submit.scripts/check_recipes.pykeeps recipes and snippets in sync.build_recipe.pyvalidates every ID and substitutes values safely, so a crafted ID can no longer inject JSON or JavaScript. It runs on Python 3.8+.Repo fit:
Integration guide (#598): added a holdout caveat next to the platform stats, removed framing, and aligned the partner blurb (sync-partners).
Checks
check-versions.mjs --base origin/main: pass (51 skills, 2.12.0).check_recipes.py: 22/22 recipes match their snippets.node --check.For Aaron to confirm
opprefclick ID in the guide.submission-completedsignal matches what Converly sees in production.🤖 Generated with Claude Code
Version note: #654 (Ploy) also bumps ads to 2.4.2. Whichever PR merges second moves ads to 2.4.3.