codymaster 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +50 -0
- package/README.md +285 -0
- package/adapters/antigravity.js +15 -0
- package/adapters/claude-code.js +17 -0
- package/adapters/cursor.js +16 -0
- package/commands/bootstrap.md +49 -0
- package/commands/build.md +48 -0
- package/commands/content.md +48 -0
- package/commands/continuity.md +60 -0
- package/commands/debug.md +51 -0
- package/commands/demo.md +96 -0
- package/commands/deploy.md +51 -0
- package/commands/plan.md +42 -0
- package/commands/review.md +55 -0
- package/commands/track.md +46 -0
- package/commands/ux.md +46 -0
- package/dist/agent-dispatch.js +161 -0
- package/dist/chains/builtin.js +85 -0
- package/dist/continuity.js +385 -0
- package/dist/dashboard.js +926 -0
- package/dist/data.js +122 -0
- package/dist/index.js +2434 -0
- package/dist/judge.js +252 -0
- package/dist/parallel-dispatch.js +359 -0
- package/dist/parallel-quality.js +172 -0
- package/dist/skill-chain.js +258 -0
- package/install.sh +513 -0
- package/package.json +79 -0
- package/skills/.content-factory-state.json +132 -0
- package/skills/.git 2/logs/refs/heads/main +1 -0
- package/skills/.git 2/logs/refs/remotes/origin/main +1 -0
- package/skills/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
- package/skills/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
- package/skills/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
- package/skills/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
- package/skills/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
- package/skills/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
- package/skills/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
- package/skills/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
- package/skills/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
- package/skills/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
- package/skills/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
- package/skills/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
- package/skills/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
- package/skills/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
- package/skills/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
- package/skills/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
- package/skills/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
- package/skills/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
- package/skills/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
- package/skills/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
- package/skills/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
- package/skills/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
- package/skills/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
- package/skills/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
- package/skills/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
- package/skills/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
- package/skills/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
- package/skills/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
- package/skills/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
- package/skills/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
- package/skills/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
- package/skills/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
- package/skills/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
- package/skills/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
- package/skills/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
- package/skills/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
- package/skills/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
- package/skills/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
- package/skills/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
- package/skills/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
- package/skills/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
- package/skills/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
- package/skills/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
- package/skills/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +5 -0
- package/skills/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
- package/skills/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
- package/skills/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
- package/skills/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
- package/skills/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
- package/skills/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
- package/skills/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
- package/skills/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
- package/skills/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
- package/skills/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
- package/skills/.git 2/refs/heads/main +1 -0
- package/skills/.git 2/refs/remotes/origin/main +1 -0
- package/skills/.pytest_cache 2/v/cache/nodeids +76 -0
- package/skills/.pytest_cache 2/v/cache/stepwise +1 -0
- package/skills/_shared/helpers.md +123 -0
- package/skills/_shared/outputs-convention.md +24 -0
- package/skills/cm-ads-tracker/SKILL.md +109 -0
- package/skills/cm-ads-tracker/evals/evals.json +55 -0
- package/skills/cm-ads-tracker/references/gtm-architecture.md +321 -0
- package/skills/cm-ads-tracker/references/industry-events.md +294 -0
- package/skills/cm-ads-tracker/references/platforms-api.md +238 -0
- package/skills/cm-ads-tracker/templates/capi-payload.md +79 -0
- package/skills/cm-ads-tracker/templates/datalayer-push.js +104 -0
- package/skills/cm-ads-tracker/templates/gtm-variables.js +56 -0
- package/skills/cm-brainstorm-idea/SKILL.md +423 -0
- package/skills/cm-code-review/SKILL.md +151 -0
- package/skills/cm-content-factory/SKILL.md +416 -0
- package/skills/cm-continuity/SKILL.md +399 -0
- package/skills/cm-dashboard/SKILL.md +533 -0
- package/skills/cm-dashboard/ui/app.js +1270 -0
- package/skills/cm-dashboard/ui/index.html +206 -0
- package/skills/cm-dashboard/ui/style.css +440 -0
- package/skills/cm-debugging/SKILL.md +412 -0
- package/skills/cm-deep-search/SKILL.md +242 -0
- package/skills/cm-design-system/SKILL.md +97 -0
- package/skills/cm-design-system/resources/halo-modern.md +40 -0
- package/skills/cm-design-system/resources/lunaris-advanced.md +40 -0
- package/skills/cm-design-system/resources/nitro-enterprise.md +39 -0
- package/skills/cm-design-system/resources/shadcn-default.md +37 -0
- package/skills/cm-dockit/README.md +100 -0
- package/skills/cm-dockit/SKILL.md +302 -0
- package/skills/cm-dockit/index.html +443 -0
- package/skills/cm-dockit/package-lock.json +1850 -0
- package/skills/cm-dockit/package.json +14 -0
- package/skills/cm-dockit/prompts/analysis.md +34 -0
- package/skills/cm-dockit/prompts/api-reference.md +24 -0
- package/skills/cm-dockit/prompts/architecture.md +21 -0
- package/skills/cm-dockit/prompts/data-flow.md +20 -0
- package/skills/cm-dockit/prompts/database.md +21 -0
- package/skills/cm-dockit/prompts/deployment.md +22 -0
- package/skills/cm-dockit/prompts/flows.md +21 -0
- package/skills/cm-dockit/prompts/jtbd.md +20 -0
- package/skills/cm-dockit/prompts/personas.md +24 -0
- package/skills/cm-dockit/prompts/sop-modules.md +40 -0
- package/skills/cm-dockit/scripts/doc-gen.sh +121 -0
- package/skills/cm-dockit/scripts/dockit-dashboard.sh +142 -0
- package/skills/cm-dockit/scripts/dockit-runner.sh +607 -0
- package/skills/cm-dockit/scripts/dockit-task.sh +166 -0
- package/skills/cm-dockit/skills/analyze-codebase.md +174 -0
- package/skills/cm-dockit/skills/api-reference.md +237 -0
- package/skills/cm-dockit/skills/changelog-guide.md +195 -0
- package/skills/cm-dockit/skills/content-guidelines.md +190 -0
- package/skills/cm-dockit/skills/sop-guide.md +184 -0
- package/skills/cm-dockit/skills/tech-docs.md +287 -0
- package/skills/cm-dockit/templates/markdown/structure.md +60 -0
- package/skills/cm-dockit/templates/vitepress-premium/.vitepress/config.mts +110 -0
- package/skills/cm-dockit/templates/vitepress-premium/.vitepress/theme/custom.css +189 -0
- package/skills/cm-dockit/templates/vitepress-premium/.vitepress/theme/index.ts +4 -0
- package/skills/cm-dockit/templates/vitepress-premium/package.json +19 -0
- package/skills/cm-dockit/templates/vitepress-premium/tests/frontend.test.ts +45 -0
- package/skills/cm-dockit/tests/runner.test.ts +66 -0
- package/skills/cm-dockit/workflows/export-markdown.md +82 -0
- package/skills/cm-dockit/workflows/generate-docs.md +68 -0
- package/skills/cm-dockit/workflows/setup-vitepress.md +181 -0
- package/skills/cm-example/SKILL.md +26 -0
- package/skills/cm-execution/SKILL.md +268 -0
- package/skills/cm-git-worktrees/SKILL.md +164 -0
- package/skills/cm-how-it-work/SKILL.md +189 -0
- package/skills/cm-identity-guard/SKILL.md +412 -0
- package/skills/cm-jtbd/SKILL.md +98 -0
- package/skills/cm-planning/SKILL.md +130 -0
- package/skills/cm-project-bootstrap/SKILL.md +161 -0
- package/skills/cm-project-bootstrap/templates/AGENTS.md +42 -0
- package/skills/cm-project-bootstrap/templates/frontend-safety.test.js +51 -0
- package/skills/cm-project-bootstrap/templates/i18n-sync.test.js +38 -0
- package/skills/cm-project-bootstrap/templates/pr-template.md +12 -0
- package/skills/cm-project-bootstrap/templates/project-identity.json +29 -0
- package/skills/cm-project-bootstrap/templates/vitest.config.js +10 -0
- package/skills/cm-quality-gate/SKILL.md +218 -0
- package/skills/cm-readit/SKILL.md +289 -0
- package/skills/cm-readit/audio-player.md +206 -0
- package/skills/cm-readit/examples/blog-reader.js +352 -0
- package/skills/cm-readit/examples/voice-cro.js +390 -0
- package/skills/cm-readit/tts-engine.md +262 -0
- package/skills/cm-readit/ui-patterns.md +362 -0
- package/skills/cm-readit/voice-cro.md +223 -0
- package/skills/cm-safe-deploy/SKILL.md +120 -0
- package/skills/cm-safe-deploy/templates/deploy.sh +89 -0
- package/skills/cm-safe-i18n/SKILL.md +473 -0
- package/skills/cm-secret-shield/SKILL.md +580 -0
- package/skills/cm-skill-chain/SKILL.md +78 -0
- package/skills/cm-skill-index/SKILL.md +318 -0
- package/skills/cm-skill-mastery/SKILL.md +169 -0
- package/skills/cm-start/SKILL.md +65 -0
- package/skills/cm-status/SKILL.md +12 -0
- package/skills/cm-tdd/SKILL.md +370 -0
- package/skills/cm-terminal/SKILL.md +177 -0
- package/skills/cm-test-gate/SKILL.md +242 -0
- package/skills/cm-ui-preview/SKILL.md +291 -0
- package/skills/cm-ux-master/DESIGN_STANDARD_TEMPLATE.md +54 -0
- package/skills/cm-ux-master/SKILL.md +114 -0
- package/skills/cro-methodology/SKILL.md +98 -0
- package/skills/cro-methodology/references/COPYWRITING.md +178 -0
- package/skills/cro-methodology/references/OBJECTIONS.md +135 -0
- package/skills/cro-methodology/references/PERSUASION.md +158 -0
- package/skills/cro-methodology/references/RESEARCH.md +220 -0
- package/skills/cro-methodology/references/funnel-analysis.md +365 -0
- package/skills/cro-methodology/references/testing-methodology.md +330 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"skill_name": "cm-ads-tracker",
|
|
3
|
+
"test_data_only": true,
|
|
4
|
+
"evals": [
|
|
5
|
+
{
|
|
6
|
+
"id": 1,
|
|
7
|
+
"prompt": "Tôi cần setup tracking cho shop bán quần áo online của tôi. Tôi đang chạy quảng cáo Facebook và TikTok, website dùng WordPress + WooCommerce. Pixel Facebook của tôi là 1234567890123456, TikTok Pixel ID là C8ABC12345DEF, GTM container là GTM-XWQR456. Tôi muốn track: mua hàng (purchase), thêm vào giỏ (add to cart), xem sản phẩm, và điền form liên hệ. Mục tiêu là biết kênh nào đem về doanh thu nhiều nhất, và xử lý được trường hợp khách click cả 2 kênh trước khi mua.",
|
|
8
|
+
"expected_output": "Complete tracking strategy document with: GTM tags/triggers/variables for Facebook + TikTok, event mapping table for all 4 conversion events, first-touch + last-touch attribution setup, cross-channel deduplication via order_id, UTM naming convention for both platforms, WooCommerce dataLayer push specifications, implementation checklist",
|
|
9
|
+
"files": [],
|
|
10
|
+
"expectations": [
|
|
11
|
+
"Document includes Facebook Pixel ID 1234567890123456 and TikTok Pixel ID C8ABC12345DEF",
|
|
12
|
+
"Document includes GTM container configuration with at least 4 conversion tags (Purchase, AddToCart, ViewContent, Lead)",
|
|
13
|
+
"Document explains first-touch cookie storage mechanism",
|
|
14
|
+
"Document addresses cross-channel attribution deduplication using order_id or event_id",
|
|
15
|
+
"Document includes UTM naming convention table for Facebook and TikTok",
|
|
16
|
+
"Document includes WooCommerce-specific dataLayer.push specifications",
|
|
17
|
+
"Document includes a QA/implementation checklist",
|
|
18
|
+
"Document is saved as a file (docx or md) in the workspace"
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"id": 2,
|
|
23
|
+
"prompt": "Help me set up Google Ads and Facebook tracking for my lead generation website. It's a custom HTML site for a real estate company. I have: Google Ads Conversion ID = AW-9876543210 with label = AbCdEfGhIj, Facebook Pixel = 9988776655443322, no GTM yet. Main conversions: phone call clicks, contact form submissions, and 'schedule a tour' button clicks. I want to understand which campaigns bring the most qualified leads and handle the case where the same lead converts through both Google and Facebook campaigns.",
|
|
24
|
+
"expected_output": "Full tracking strategy with GTM setup from scratch, Google Ads + Facebook event configuration, phone call click tracking setup, form submission tracking, cross-platform lead deduplication strategy, attribution comparison between Google and Facebook for lead gen, UTM conventions",
|
|
25
|
+
"files": [],
|
|
26
|
+
"expectations": [
|
|
27
|
+
"Document includes Google Ads Conversion ID AW-9876543210 and Facebook Pixel ID 9988776655443322",
|
|
28
|
+
"Document covers GTM installation from scratch (container snippet placement)",
|
|
29
|
+
"Document includes phone call click tracking setup (click trigger on tel: links)",
|
|
30
|
+
"Document includes form submission tracking for contact form and schedule tour button",
|
|
31
|
+
"Document addresses lead deduplication across Google and Facebook",
|
|
32
|
+
"Document includes lead gen specific attribution window recommendations",
|
|
33
|
+
"Document includes UTM naming conventions for Google Search and Facebook campaigns",
|
|
34
|
+
"Document is saved as a file in the workspace"
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": 3,
|
|
39
|
+
"prompt": "Tôi đang chạy quảng cáo trên Facebook, TikTok, Google Ads và cả Zalo Ads cho website landing page bán khóa học online (Shopify). GTM: GTM-KLP987, Facebook Pixel: 1122334455667788, TikTok: BCP98765QWER, Google Ads: AW-1122334455/XyZabc123, GA4: G-ABCD1234. Tôi muốn biết: kênh nào khách biết đến đầu tiên (first touch), kênh nào chốt sale (last touch), và cách xử lý khi khách click quảng cáo từ nhiều kênh trước khi mua. Conversion chính: mua khóa học, đăng ký trial, và xem trang pricing.",
|
|
40
|
+
"expected_output": "Multi-platform tracking strategy with all 5 platforms (FB, TikTok, Google Ads, Zalo, GA4), full attribution model including first-touch cookie, last-touch standard, cross-channel deduplication, Shopify-specific implementation notes, event taxonomy for course business (Purchase, Trial Signup, ViewContent for pricing), UTM conventions for all 4 ad platforms",
|
|
41
|
+
"files": [],
|
|
42
|
+
"expectations": [
|
|
43
|
+
"Document includes all provided tracking IDs: GTM-KLP987, Facebook Pixel 1122334455667788, TikTok BCP98765QWER, Google Ads AW-1122334455, GA4 G-ABCD1234",
|
|
44
|
+
"Document covers first-touch attribution via first-party cookie mechanism",
|
|
45
|
+
"Document covers last-touch attribution approach",
|
|
46
|
+
"Document addresses multi-platform overlap/deduplication scenario",
|
|
47
|
+
"Document mentions Shopify-specific implementation considerations",
|
|
48
|
+
"Document includes UTM naming conventions for all 4 ad platforms including Zalo Ads",
|
|
49
|
+
"Document includes event taxonomy for online course business (Purchase, Trial, ViewContent)",
|
|
50
|
+
"Document addresses GA4 integration alongside paid platform tracking",
|
|
51
|
+
"Document is saved as a file in the workspace"
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
# GTM Architecture Reference — Full Container Build Spec
|
|
2
|
+
|
|
3
|
+
## Core Design Principle: Channel-Agnostic DataLayer
|
|
4
|
+
|
|
5
|
+
The website never knows which ad platforms are active. It only fires standardized `dataLayer.push()` calls. GTM reads these and routes them to the appropriate platform tags. This architecture means:
|
|
6
|
+
- Adding/removing an ad platform = zero developer work
|
|
7
|
+
- All platforms receive identical, consistent data
|
|
8
|
+
- One source of truth for all conversion parameters
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## GTM Container Structure
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
GTM Container
|
|
16
|
+
├── Variables (19 standard + custom)
|
|
17
|
+
│ ├── DataLayer Variables (event data)
|
|
18
|
+
│ ├── URL Variables (UTM + click IDs)
|
|
19
|
+
│ ├── Cookie Variables (first-touch data)
|
|
20
|
+
│ └── Constant Variables (Pixel IDs)
|
|
21
|
+
│
|
|
22
|
+
├── Triggers (2 base + N conversion triggers)
|
|
23
|
+
│ ├── All Pages (PageView)
|
|
24
|
+
│ ├── Custom Event: cro_purchase
|
|
25
|
+
│ ├── Custom Event: cro_lead
|
|
26
|
+
│ ├── Custom Event: cro_view_content
|
|
27
|
+
│ ├── Custom Event: cro_add_to_cart
|
|
28
|
+
│ ├── Custom Event: cro_initiate_checkout
|
|
29
|
+
│ ├── Custom Event: cro_registration
|
|
30
|
+
│ ├── Click Trigger: tel: links (phone calls)
|
|
31
|
+
│ └── [additional custom event triggers as needed]
|
|
32
|
+
│
|
|
33
|
+
└── Tags (base + conversion per platform)
|
|
34
|
+
├── SYSTEM: First-Touch Cookie Capture (All Pages, once)
|
|
35
|
+
├── [Platform] Base Pixel (All Pages)
|
|
36
|
+
├── [Platform] [Event] Conversion (per conversion trigger)
|
|
37
|
+
└── GA4 Configuration + Events
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Variables — Complete Specification
|
|
43
|
+
|
|
44
|
+
### DataLayer Variables
|
|
45
|
+
These read values from `dataLayer.push()` calls made by the website.
|
|
46
|
+
|
|
47
|
+
| Variable Name | Variable Type | DataLayer Variable Name | Default Value |
|
|
48
|
+
|---|---|---|---|
|
|
49
|
+
| DL - event | Data Layer Variable | event | undefined |
|
|
50
|
+
| DL - event_id | Data Layer Variable | event_id | undefined |
|
|
51
|
+
| DL - transaction_id | Data Layer Variable | transaction_id | undefined |
|
|
52
|
+
| DL - value | Data Layer Variable | value | 0 |
|
|
53
|
+
| DL - currency | Data Layer Variable | currency | VND |
|
|
54
|
+
| DL - content_ids | Data Layer Variable | content_ids | undefined |
|
|
55
|
+
| DL - content_type | Data Layer Variable | content_type | product |
|
|
56
|
+
| DL - content_name | Data Layer Variable | content_name | undefined |
|
|
57
|
+
| DL - contents | Data Layer Variable | contents | undefined |
|
|
58
|
+
| DL - num_items | Data Layer Variable | num_items | 1 |
|
|
59
|
+
| DL - email_hashed | Data Layer Variable | email_hashed | undefined |
|
|
60
|
+
| DL - phone_hashed | Data Layer Variable | phone_hashed | undefined |
|
|
61
|
+
| DL - lead_id | Data Layer Variable | lead_id | undefined |
|
|
62
|
+
| DL - search_string | Data Layer Variable | search_string | undefined |
|
|
63
|
+
|
|
64
|
+
### URL Variables
|
|
65
|
+
These read from the current page URL query string.
|
|
66
|
+
|
|
67
|
+
| Variable Name | Variable Type | Query Variable |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| URL - utm_source | URL | utm_source |
|
|
70
|
+
| URL - utm_medium | URL | utm_medium |
|
|
71
|
+
| URL - utm_campaign | URL | utm_campaign |
|
|
72
|
+
| URL - utm_content | URL | utm_content |
|
|
73
|
+
| URL - utm_term | URL | utm_term |
|
|
74
|
+
| URL - fbclid | URL | fbclid |
|
|
75
|
+
| URL - ttclid | URL | ttclid |
|
|
76
|
+
| URL - gclid | URL | gclid |
|
|
77
|
+
|
|
78
|
+
### Cookie Variables
|
|
79
|
+
These read from first-party cookies stored in the user's browser.
|
|
80
|
+
|
|
81
|
+
| Variable Name | Variable Type | Cookie Name |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| Cookie - ftc_raw | 1st-Party Cookie | _ftc |
|
|
84
|
+
| Cookie - fbp | 1st-Party Cookie | _fbp |
|
|
85
|
+
| Cookie - fbc | 1st-Party Cookie | _fbc |
|
|
86
|
+
|
|
87
|
+
### JavaScript Variables
|
|
88
|
+
These compute values dynamically.
|
|
89
|
+
|
|
90
|
+
| Variable Name | Code Logic |
|
|
91
|
+
|---|---|
|
|
92
|
+
| JS - ftc_source | Read _ftc cookie, parse JSON, return .src |
|
|
93
|
+
| JS - ftc_medium | Read _ftc cookie, parse JSON, return .med |
|
|
94
|
+
| JS - ftc_campaign | Read _ftc cookie, parse JSON, return .cmp |
|
|
95
|
+
| JS - page_path | return window.location.pathname |
|
|
96
|
+
| JS - page_title | return document.title |
|
|
97
|
+
|
|
98
|
+
### Constant Variables
|
|
99
|
+
|
|
100
|
+
| Variable Name | Value |
|
|
101
|
+
|---|---|
|
|
102
|
+
| CONST - FB Pixel ID | [user's Facebook Pixel ID] |
|
|
103
|
+
| CONST - TikTok Pixel ID | [user's TikTok Pixel ID] |
|
|
104
|
+
| CONST - GTM Container ID | [user's GTM Container ID] |
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Triggers — Complete Specification
|
|
109
|
+
|
|
110
|
+
### Base Triggers
|
|
111
|
+
|
|
112
|
+
**Trigger: All Pages**
|
|
113
|
+
- Type: Page View
|
|
114
|
+
- Fires on: All Pages
|
|
115
|
+
- Used by: Base pixels, GA4 config, First-Touch Cookie capture
|
|
116
|
+
|
|
117
|
+
**Trigger: DOM Ready — All Pages**
|
|
118
|
+
- Type: DOM Ready
|
|
119
|
+
- Fires on: All Pages
|
|
120
|
+
- Used by: Scripts that need DOM to be loaded
|
|
121
|
+
|
|
122
|
+
### Custom Event Triggers (Conversion)
|
|
123
|
+
|
|
124
|
+
For each conversion event, create one Custom Event trigger:
|
|
125
|
+
|
|
126
|
+
| Trigger Name | Type | Event Name (exact match) |
|
|
127
|
+
|---|---|---|
|
|
128
|
+
| CE - cro_purchase | Custom Event | cro_purchase |
|
|
129
|
+
| CE - cro_lead | Custom Event | cro_lead |
|
|
130
|
+
| CE - cro_view_content | Custom Event | cro_view_content |
|
|
131
|
+
| CE - cro_add_to_cart | Custom Event | cro_add_to_cart |
|
|
132
|
+
| CE - cro_initiate_checkout | Custom Event | cro_initiate_checkout |
|
|
133
|
+
| CE - cro_add_payment_info | Custom Event | cro_add_payment_info |
|
|
134
|
+
| CE - cro_registration | Custom Event | cro_registration |
|
|
135
|
+
| CE - cro_search | Custom Event | cro_search |
|
|
136
|
+
| CE - cro_phone_call | Custom Event | cro_phone_call |
|
|
137
|
+
| CE - cro_click_button | Custom Event | cro_click_button |
|
|
138
|
+
| CE - cro_download | Custom Event | cro_download |
|
|
139
|
+
| CE - cro_subscribe | Custom Event | cro_subscribe |
|
|
140
|
+
|
|
141
|
+
### Click Triggers (for Phone Call tracking)
|
|
142
|
+
|
|
143
|
+
**Trigger: Click - Phone Number**
|
|
144
|
+
- Type: Click — Just Links
|
|
145
|
+
- Fires on: Click URL — starts with — tel:
|
|
146
|
+
- Used by: Phone call conversion tags
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Tags — Complete Specification
|
|
151
|
+
|
|
152
|
+
### Tag 1: First-Touch Cookie Capture (CRITICAL — fires first)
|
|
153
|
+
|
|
154
|
+
- Name: SYSTEM - First Touch Cookie Capture
|
|
155
|
+
- Type: Custom HTML
|
|
156
|
+
- Trigger: All Pages (with firing priority 999, fires before other tags)
|
|
157
|
+
- Logic:
|
|
158
|
+
1. Check if _ftc cookie already exists → if yes, exit (do nothing)
|
|
159
|
+
2. If no cookie: read UTM params, click IDs, referrer from current URL
|
|
160
|
+
3. Build _ftc JSON object with src, med, cmp, cnt, trm, fbclid, ttclid, gclid, ref, ts
|
|
161
|
+
4. Write cookie: document.cookie = "_ftc=" + JSON.stringify(data) + "; max-age=7776000; path=/; SameSite=Lax"
|
|
162
|
+
5. (7776000 seconds = 90 days)
|
|
163
|
+
|
|
164
|
+
This tag must fire BEFORE any conversion tags. Use Tag Sequencing in GTM if needed.
|
|
165
|
+
|
|
166
|
+
### Tags 2-3: Facebook Base Pixel
|
|
167
|
+
|
|
168
|
+
- Name: FB - Base Pixel - All Pages
|
|
169
|
+
- Type: Custom HTML (or Facebook official GTM template if available)
|
|
170
|
+
- Pixel ID: {{CONST - FB Pixel ID}}
|
|
171
|
+
- Standard event: PageView
|
|
172
|
+
- Trigger: All Pages
|
|
173
|
+
|
|
174
|
+
### Tags 4-N: Facebook Conversion Events
|
|
175
|
+
|
|
176
|
+
One tag per conversion event:
|
|
177
|
+
|
|
178
|
+
**FB - Purchase Event**
|
|
179
|
+
- Type: Custom HTML
|
|
180
|
+
- Content: fbq('track', 'Purchase', { value: {{DL - value}}, currency: {{DL - currency}}, content_ids: {{DL - content_ids}}, content_type: {{DL - content_type}}, contents: {{DL - contents}}, num_items: {{DL - num_items}} }, { eventID: {{DL - event_id}} })
|
|
181
|
+
- Trigger: CE - cro_purchase
|
|
182
|
+
|
|
183
|
+
**FB - Lead Event**
|
|
184
|
+
- fbq('track', 'Lead', { content_name: {{DL - content_name}}, value: {{DL - value}}, currency: {{DL - currency}} }, { eventID: {{DL - event_id}} })
|
|
185
|
+
- Trigger: CE - cro_lead
|
|
186
|
+
|
|
187
|
+
**FB - AddToCart Event**
|
|
188
|
+
- fbq('track', 'AddToCart', { content_ids: {{DL - content_ids}}, content_type: {{DL - content_type}}, value: {{DL - value}}, currency: {{DL - currency}}, content_name: {{DL - content_name}} }, { eventID: {{DL - event_id}} })
|
|
189
|
+
- Trigger: CE - cro_add_to_cart
|
|
190
|
+
|
|
191
|
+
**FB - ViewContent Event**
|
|
192
|
+
- fbq('track', 'ViewContent', { content_ids: {{DL - content_ids}}, content_type: {{DL - content_type}}, value: {{DL - value}}, currency: {{DL - currency}}, content_name: {{DL - content_name}} }, { eventID: {{DL - event_id}} })
|
|
193
|
+
- Trigger: CE - cro_view_content
|
|
194
|
+
|
|
195
|
+
**FB - InitiateCheckout Event**
|
|
196
|
+
- fbq('track', 'InitiateCheckout', { value: {{DL - value}}, currency: {{DL - currency}}, num_items: {{DL - num_items}} }, { eventID: {{DL - event_id}} })
|
|
197
|
+
- Trigger: CE - cro_initiate_checkout
|
|
198
|
+
|
|
199
|
+
### TikTok Tags
|
|
200
|
+
|
|
201
|
+
**TikTok - Base Pixel - All Pages**
|
|
202
|
+
- Type: Custom HTML
|
|
203
|
+
- Content: ttq.load('[PIXEL_ID]'); ttq.page();
|
|
204
|
+
- Trigger: All Pages
|
|
205
|
+
|
|
206
|
+
**TikTok - Purchase Event**
|
|
207
|
+
- ttq.identify({'sha256_email': {{DL - email_hashed}}, 'sha256_phone_number': {{DL - phone_hashed}}});
|
|
208
|
+
- ttq.track('CompletePayment', { content_ids: {{DL - content_ids}}, content_type: {{DL - content_type}}, value: {{DL - value}}, currency: {{DL - currency}}, contents: {{DL - contents}} }, { event_id: {{DL - event_id}} });
|
|
209
|
+
- Trigger: CE - cro_purchase
|
|
210
|
+
|
|
211
|
+
**TikTok - SubmitForm Event** (for lead gen)
|
|
212
|
+
- ttq.track('SubmitForm', {}, { event_id: {{DL - event_id}} });
|
|
213
|
+
- Trigger: CE - cro_lead
|
|
214
|
+
|
|
215
|
+
**TikTok - AddToCart Event**
|
|
216
|
+
- ttq.track('AddToCart', { content_id: {{DL - content_ids}}[0], content_type: {{DL - content_type}}, content_name: {{DL - content_name}}, value: {{DL - value}}, currency: {{DL - currency}} }, { event_id: {{DL - event_id}} });
|
|
217
|
+
- Trigger: CE - cro_add_to_cart
|
|
218
|
+
|
|
219
|
+
**TikTok - ViewContent Event**
|
|
220
|
+
- ttq.track('ViewContent', { content_id: {{DL - content_ids}}[0], content_type: {{DL - content_type}}, content_name: {{DL - content_name}} }, { event_id: {{DL - event_id}} });
|
|
221
|
+
- Trigger: CE - cro_view_content
|
|
222
|
+
|
|
223
|
+
### Google Ads Tags
|
|
224
|
+
|
|
225
|
+
**Google Ads - Purchase Conversion**
|
|
226
|
+
- Type: Google Ads Conversion Tracking
|
|
227
|
+
- Conversion ID: AW-[CONVERSION_ID]
|
|
228
|
+
- Conversion Label: [LABEL]
|
|
229
|
+
- Conversion Value: {{DL - value}}
|
|
230
|
+
- Order ID: {{DL - transaction_id}}
|
|
231
|
+
- Enable Enhanced Conversions: YES
|
|
232
|
+
- user_data: { email_address: [raw email from DL], phone_number: [raw phone from DL] }
|
|
233
|
+
- Trigger: CE - cro_purchase
|
|
234
|
+
|
|
235
|
+
**Google Ads - Lead Conversion**
|
|
236
|
+
- Type: Google Ads Conversion Tracking
|
|
237
|
+
- Conversion ID: AW-[CONVERSION_ID]
|
|
238
|
+
- Conversion Label: [LEAD_LABEL]
|
|
239
|
+
- Conversion Value: [fixed lead value]
|
|
240
|
+
- Enable Enhanced Conversions: YES
|
|
241
|
+
- Trigger: CE - cro_lead
|
|
242
|
+
|
|
243
|
+
**Google Ads - Phone Call Conversion**
|
|
244
|
+
- Type: Google Ads Conversion Tracking
|
|
245
|
+
- Conversion Label: [CALL_LABEL]
|
|
246
|
+
- Conversion Value: [fixed call value]
|
|
247
|
+
- Trigger: Click - Phone Number
|
|
248
|
+
|
|
249
|
+
### GA4 Tags
|
|
250
|
+
|
|
251
|
+
**GA4 - Configuration**
|
|
252
|
+
- Type: Google Tag (GA4)
|
|
253
|
+
- Measurement ID: G-XXXXXXXXXX
|
|
254
|
+
- Trigger: All Pages
|
|
255
|
+
|
|
256
|
+
**GA4 - purchase event**
|
|
257
|
+
- Type: Google Tag — GA4 Event
|
|
258
|
+
- Event Name: purchase
|
|
259
|
+
- Parameters: transaction_id, value, currency, items
|
|
260
|
+
- Trigger: CE - cro_purchase
|
|
261
|
+
|
|
262
|
+
**GA4 - generate_lead event**
|
|
263
|
+
- Type: GA4 Event
|
|
264
|
+
- Event Name: generate_lead
|
|
265
|
+
- Parameters: value, currency, content_name
|
|
266
|
+
- Trigger: CE - cro_lead
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## Tag Firing Order (Priority Settings)
|
|
271
|
+
|
|
272
|
+
To ensure data is ready before tags fire:
|
|
273
|
+
|
|
274
|
+
| Priority | Tag | Reason |
|
|
275
|
+
|---|---|---|
|
|
276
|
+
| 999 | First-Touch Cookie Capture | Must run first to capture UTM before other tags |
|
|
277
|
+
| 10 | All Base Pixels | Fire early on page load |
|
|
278
|
+
| 5 | All Conversion Tags | Fire after dataLayer data is populated |
|
|
279
|
+
| 1 | GA4 Events | Can fire last |
|
|
280
|
+
|
|
281
|
+
Set tag priority in GTM tag settings > Advanced Settings > Tag firing priority.
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## QA Testing Protocol
|
|
286
|
+
|
|
287
|
+
### GTM Preview Mode Testing Steps
|
|
288
|
+
|
|
289
|
+
1. Open GTM Preview → enter your website URL
|
|
290
|
+
2. Perform each conversion action (or simulate dataLayer.push in console)
|
|
291
|
+
3. Verify in the preview panel:
|
|
292
|
+
- Correct trigger fired (left panel shows event name)
|
|
293
|
+
- Correct tags fired (center panel shows tag names in green)
|
|
294
|
+
- Variables populated correctly (right panel shows variable values)
|
|
295
|
+
4. Check no tags fired when they shouldn't (no conversion tags on non-conversion pages)
|
|
296
|
+
|
|
297
|
+
### Console Test for dataLayer.push
|
|
298
|
+
|
|
299
|
+
In browser DevTools console, test a purchase push manually:
|
|
300
|
+
dataLayer.push({
|
|
301
|
+
event: 'cro_purchase',
|
|
302
|
+
event_id: 'test-uuid-12345',
|
|
303
|
+
transaction_id: 'TEST-ORDER-001',
|
|
304
|
+
value: 500000,
|
|
305
|
+
currency: 'VND',
|
|
306
|
+
content_ids: ['PROD-123'],
|
|
307
|
+
content_type: 'product',
|
|
308
|
+
content_name: 'Test Product',
|
|
309
|
+
contents: [{content_id: 'PROD-123', content_name: 'Test Product', content_type: 'product', quantity: 1, price: 500000}],
|
|
310
|
+
num_items: 1,
|
|
311
|
+
email_hashed: 'test-hash-email',
|
|
312
|
+
phone_hashed: 'test-hash-phone'
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
Then verify all platform tags fired in GTM Preview.
|
|
316
|
+
|
|
317
|
+
### Platform Pixel Verification Tools
|
|
318
|
+
- Facebook: Facebook Pixel Helper Chrome extension → check Events tab
|
|
319
|
+
- TikTok: TikTok Pixel Helper Chrome extension
|
|
320
|
+
- Google Ads: Google Tag Assistant Chrome extension
|
|
321
|
+
- GA4: GA4 DebugView in Google Analytics → enable by running ?gtm_debug=x
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# Industry Event Taxonomy — Complete Reference
|
|
2
|
+
|
|
3
|
+
This file maps every major industry to the correct standard events across Meta, TikTok, and Google Ads, with exact parameter requirements and priority ranking.
|
|
4
|
+
|
|
5
|
+
## How to Use This Reference
|
|
6
|
+
|
|
7
|
+
1. Identify the user's industry (or the closest match)
|
|
8
|
+
2. Use the Priority Events to configure the algorithm-training conversion actions
|
|
9
|
+
3. Use the Supporting Events for audience building and funnel visibility
|
|
10
|
+
4. Map each event to the DataLayer Event Name and Platform Event Names
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Event Priority Scoring
|
|
15
|
+
|
|
16
|
+
- P1 (Must Have): Trains ad algorithm directly, highest ROI impact
|
|
17
|
+
- P2 (Should Have): Audience building, middle-funnel, retargeting signal
|
|
18
|
+
- P3 (Nice to Have): Funnel visibility, micro-conversion data
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 1. E-COMMERCE — Fashion / Apparel
|
|
23
|
+
|
|
24
|
+
### Industry Signals
|
|
25
|
+
- High purchase frequency, low AOV
|
|
26
|
+
- Strong visual creative performance (video > image)
|
|
27
|
+
- Key platform: TikTok Shop integration, Facebook Catalog Ads
|
|
28
|
+
|
|
29
|
+
### Event Stack
|
|
30
|
+
|
|
31
|
+
| Priority | Action | DL Event | Meta Event | TikTok Event | GA4 Event |
|
|
32
|
+
|---|---|---|---|---|---|
|
|
33
|
+
| P1 | Purchase | cro_purchase | Purchase | CompletePayment | purchase |
|
|
34
|
+
| P1 | Add to Cart | cro_add_to_cart | AddToCart | AddToCart | add_to_cart |
|
|
35
|
+
| P2 | Initiate Checkout | cro_initiate_checkout | InitiateCheckout | InitiateCheckout | begin_checkout |
|
|
36
|
+
| P2 | View Product | cro_view_content | ViewContent | ViewContent | view_item |
|
|
37
|
+
| P3 | Search | cro_search | Search | Search | search |
|
|
38
|
+
| P3 | Add to Wishlist | cro_add_to_wishlist | AddToWishlist | AddToWishlist | add_to_wishlist |
|
|
39
|
+
| P3 | Add Payment Info | cro_add_payment_info | AddPaymentInfo | AddPaymentInfo | add_payment_info |
|
|
40
|
+
|
|
41
|
+
### Required Parameters for Each Event
|
|
42
|
+
|
|
43
|
+
**cro_purchase (P1)**
|
|
44
|
+
- value: numeric (order total)
|
|
45
|
+
- currency: VND or USD
|
|
46
|
+
- content_ids: array of product IDs
|
|
47
|
+
- content_type: "product"
|
|
48
|
+
- contents: [{content_id, content_name, quantity, price}]
|
|
49
|
+
- num_items: total quantity
|
|
50
|
+
- transaction_id / order_id: unique order ID
|
|
51
|
+
- event_id: UUID (for CAPI dedup)
|
|
52
|
+
- email_hashed, phone_hashed
|
|
53
|
+
|
|
54
|
+
**cro_add_to_cart (P1)**
|
|
55
|
+
- value: item price
|
|
56
|
+
- currency: VND
|
|
57
|
+
- content_ids: [product_id]
|
|
58
|
+
- content_type: "product"
|
|
59
|
+
- content_name: product name
|
|
60
|
+
- quantity: 1 or selected quantity
|
|
61
|
+
|
|
62
|
+
**cro_view_content (P2)**
|
|
63
|
+
- content_ids: [product_id]
|
|
64
|
+
- content_type: "product"
|
|
65
|
+
- content_name: product name
|
|
66
|
+
- value: product price
|
|
67
|
+
- currency: VND
|
|
68
|
+
|
|
69
|
+
### Algorithm Optimization Note
|
|
70
|
+
For Purchase campaign optimization: Meta needs 50+ Purchase events/week to exit learning phase. If traffic is low, start with AddToCart as the optimization event, then switch to Purchase after volume builds.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 2. E-COMMERCE — Electronics / High-AOV
|
|
75
|
+
|
|
76
|
+
### Industry Signals
|
|
77
|
+
- Low purchase frequency, high AOV (3-50M VND)
|
|
78
|
+
- Long consideration phase (7-30 days)
|
|
79
|
+
- Key platform: Google Shopping + Search (intent-based), Facebook Retargeting
|
|
80
|
+
|
|
81
|
+
### Event Stack
|
|
82
|
+
|
|
83
|
+
Same as fashion e-commerce, but additional:
|
|
84
|
+
- ViewContent is critical (longer consideration = more product page views)
|
|
85
|
+
- AddToWishlist is more meaningful (save-for-later behavior)
|
|
86
|
+
- InitiateCheckout is a strong intent signal
|
|
87
|
+
|
|
88
|
+
### Attribution Window Adjustment
|
|
89
|
+
Extend Facebook window to 7-day click + 1-day view.
|
|
90
|
+
Google window 30-day for search.
|
|
91
|
+
Customer typically researches 3-7 days before buying.
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 3. LEAD GENERATION — Real Estate
|
|
96
|
+
|
|
97
|
+
### Industry Signals
|
|
98
|
+
- Very high lead value (qualified leads = 500K-5M VND)
|
|
99
|
+
- Long sales cycle (weeks to months)
|
|
100
|
+
- Multiple touchpoints before conversion
|
|
101
|
+
- Key conversions: phone call, appointment booking, contact form
|
|
102
|
+
|
|
103
|
+
### Event Stack
|
|
104
|
+
|
|
105
|
+
| Priority | Action | DL Event | Meta Event | TikTok Event | GA4 Event |
|
|
106
|
+
|---|---|---|---|---|---|
|
|
107
|
+
| P1 | Form Submit (contact) | cro_lead | Lead | SubmitForm | generate_lead |
|
|
108
|
+
| P1 | Phone Call Click | cro_phone_call | Contact | Contact | phone_call_click |
|
|
109
|
+
| P1 | Schedule Appointment | cro_schedule | Lead | SubmitForm | generate_lead |
|
|
110
|
+
| P2 | View Project Page | cro_view_content | ViewContent | ViewContent | view_item |
|
|
111
|
+
| P2 | Download Brochure | cro_download | Lead | Download | file_download |
|
|
112
|
+
| P3 | Floor Plan View | cro_view_content | ViewContent | ViewContent | view_item |
|
|
113
|
+
| P3 | 360 Tour Start | cro_click_button | — | ClickButton | — |
|
|
114
|
+
|
|
115
|
+
### Required Parameters
|
|
116
|
+
|
|
117
|
+
**cro_lead (P1)**
|
|
118
|
+
- event_id: UUID (for CAPI dedup)
|
|
119
|
+
- lead_id: unique generated lead identifier
|
|
120
|
+
- content_name: form type ("contact-form" or "appointment-booking" or "download-brochure")
|
|
121
|
+
- value: estimated lead value (e.g., 500000 for 500K VND per qualified lead)
|
|
122
|
+
- currency: VND
|
|
123
|
+
- email_hashed, phone_hashed (critical for CAPI match rate)
|
|
124
|
+
|
|
125
|
+
**cro_phone_call (P1)**
|
|
126
|
+
- event_id: UUID
|
|
127
|
+
- content_name: "phone-call"
|
|
128
|
+
- phone_number: which number was clicked (for tracking by listing/project)
|
|
129
|
+
|
|
130
|
+
### Lead Gen Attribution Note
|
|
131
|
+
Use SHORTER attribution windows: 1-day click for Facebook (real estate buyers search Google, then see Facebook retargeting, then call — so the Facebook touch is typically last-same-day).
|
|
132
|
+
For Google Search: 30-day window (search intent is direct).
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 4. LEAD GENERATION — Finance / Insurance / B2B
|
|
137
|
+
|
|
138
|
+
### Industry Signals
|
|
139
|
+
- High lead quality requirement (only qualified forms matter)
|
|
140
|
+
- Strict data privacy (hash ALL personal data)
|
|
141
|
+
- Multiple form steps (use step-specific events)
|
|
142
|
+
|
|
143
|
+
### Event Stack
|
|
144
|
+
|
|
145
|
+
| Priority | Action | DL Event | Meta Event | TikTok Event | GA4 Event |
|
|
146
|
+
|---|---|---|---|---|---|
|
|
147
|
+
| P1 | Final Form Submit | cro_lead | Lead | SubmitForm | generate_lead |
|
|
148
|
+
| P2 | Form Step 1 Started | cro_form_start | — | ClickButton | form_start |
|
|
149
|
+
| P2 | Download Report/Guide | cro_download | Lead | Download | file_download |
|
|
150
|
+
| P2 | View Pricing/Plans | cro_view_content | ViewContent | ViewContent | view_item |
|
|
151
|
+
| P3 | Request Demo | cro_lead | Lead | SubmitForm | generate_lead |
|
|
152
|
+
| P3 | Calculator Used | cro_click_button | — | ClickButton | — |
|
|
153
|
+
|
|
154
|
+
### Multi-Step Form Tracking
|
|
155
|
+
For forms with 3+ steps, fire a unique event at each step:
|
|
156
|
+
- cro_form_step_1: basic info submitted (email, phone)
|
|
157
|
+
- cro_form_step_2: financial/qualification info
|
|
158
|
+
- cro_lead: final form completed
|
|
159
|
+
|
|
160
|
+
This gives visibility into where leads drop off in the funnel.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 5. EDUCATION — Online Courses / Edtech
|
|
165
|
+
|
|
166
|
+
### Industry Signals
|
|
167
|
+
- Two-stage funnel: Free signup → Paid enrollment
|
|
168
|
+
- Content marketing heavy (free resources as lead magnets)
|
|
169
|
+
- Key conversions: trial signup, webinar registration, course purchase
|
|
170
|
+
|
|
171
|
+
### Event Stack
|
|
172
|
+
|
|
173
|
+
| Priority | Action | DL Event | Meta Event | TikTok Event | GA4 Event |
|
|
174
|
+
|---|---|---|---|---|---|
|
|
175
|
+
| P1 | Course Purchase | cro_purchase | Purchase | CompletePayment | purchase |
|
|
176
|
+
| P1 | Trial / Free Signup | cro_registration | CompleteRegistration | CompleteRegistration | sign_up |
|
|
177
|
+
| P2 | Initiate Checkout | cro_initiate_checkout | InitiateCheckout | InitiateCheckout | begin_checkout |
|
|
178
|
+
| P2 | Webinar Registration | cro_lead | Lead | SubmitForm | generate_lead |
|
|
179
|
+
| P2 | View Course Page | cro_view_content | ViewContent | ViewContent | view_item |
|
|
180
|
+
| P3 | Download Syllabus | cro_download | Lead | Download | file_download |
|
|
181
|
+
| P3 | Newsletter Subscribe | cro_subscribe | — | Subscribe | — |
|
|
182
|
+
|
|
183
|
+
### Required Parameters
|
|
184
|
+
|
|
185
|
+
**cro_registration (Trial/Signup) — P1**
|
|
186
|
+
- event_id: UUID
|
|
187
|
+
- content_name: "trial-signup" or "free-account"
|
|
188
|
+
- value: 0 (free signup) or lead value estimate
|
|
189
|
+
- currency: VND
|
|
190
|
+
- email_hashed, phone_hashed
|
|
191
|
+
|
|
192
|
+
**cro_purchase (Enrollment) — P1**
|
|
193
|
+
- All standard purchase parameters
|
|
194
|
+
- content_name: course name
|
|
195
|
+
- content_ids: [course_id]
|
|
196
|
+
- value: course price
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## 6. SaaS / SOFTWARE
|
|
201
|
+
|
|
202
|
+
### Industry Signals
|
|
203
|
+
- Freemium to paid conversion is the key event
|
|
204
|
+
- Trial quality matters more than trial volume
|
|
205
|
+
- Key metric: free-to-paid conversion rate
|
|
206
|
+
|
|
207
|
+
### Event Stack
|
|
208
|
+
|
|
209
|
+
| Priority | Action | DL Event | Meta Event | TikTok Event | GA4 Event |
|
|
210
|
+
|---|---|---|---|---|---|
|
|
211
|
+
| P1 | Free Trial Signup | cro_registration | CompleteRegistration | CompleteRegistration | sign_up |
|
|
212
|
+
| P1 | Paid Plan Purchase | cro_purchase | Purchase | CompletePayment | purchase |
|
|
213
|
+
| P2 | View Pricing Page | cro_view_content | ViewContent | ViewContent | view_item |
|
|
214
|
+
| P2 | Demo Request | cro_lead | Lead | SubmitForm | generate_lead |
|
|
215
|
+
| P3 | Feature Used (key) | cro_click_button | — | ClickButton | select_content |
|
|
216
|
+
| P3 | Newsletter Subscribe | cro_subscribe | — | Subscribe | — |
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 7. F&B — RESTAURANT / FOOD DELIVERY
|
|
221
|
+
|
|
222
|
+
### Industry Signals
|
|
223
|
+
- High frequency, low AOV
|
|
224
|
+
- Local targeting critical
|
|
225
|
+
- Phone calls and online orders are primary conversions
|
|
226
|
+
|
|
227
|
+
### Event Stack
|
|
228
|
+
|
|
229
|
+
| Priority | Action | DL Event | Meta Event | TikTok Event | GA4 Event |
|
|
230
|
+
|---|---|---|---|---|---|
|
|
231
|
+
| P1 | Online Order | cro_purchase | Purchase | CompletePayment | purchase |
|
|
232
|
+
| P1 | Phone Call | cro_phone_call | Contact | Contact | phone_call |
|
|
233
|
+
| P1 | Table Reservation Form | cro_lead | Lead | SubmitForm | generate_lead |
|
|
234
|
+
| P2 | View Menu Page | cro_view_content | ViewContent | ViewContent | view_item |
|
|
235
|
+
| P2 | View Location Page | cro_view_content | ViewContent | ViewContent | view_item |
|
|
236
|
+
| P3 | Loyalty Signup | cro_registration | CompleteRegistration | CompleteRegistration | sign_up |
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## 8. TRAVEL / HOTEL / TOURISM
|
|
241
|
+
|
|
242
|
+
### Industry Signals
|
|
243
|
+
- High AOV, long consideration phase
|
|
244
|
+
- Search-based intent (dates, destination)
|
|
245
|
+
- Booking funnel has multiple steps
|
|
246
|
+
|
|
247
|
+
### Event Stack
|
|
248
|
+
|
|
249
|
+
| Priority | Action | DL Event | Meta Event | TikTok Event | GA4 Event |
|
|
250
|
+
|---|---|---|---|---|---|
|
|
251
|
+
| P1 | Booking Complete | cro_purchase | Purchase | CompletePayment | purchase |
|
|
252
|
+
| P1 | Search (date+dest) | cro_search | Search | Search | search |
|
|
253
|
+
| P2 | Initiate Booking | cro_initiate_checkout | InitiateCheckout | InitiateCheckout | begin_checkout |
|
|
254
|
+
| P2 | View Property/Tour | cro_view_content | ViewContent | ViewContent | view_item |
|
|
255
|
+
| P3 | Save to Wishlist | cro_add_to_wishlist | AddToWishlist | AddToWishlist | add_to_wishlist |
|
|
256
|
+
| P3 | Inquiry / Contact | cro_lead | Lead | Contact | generate_lead |
|
|
257
|
+
|
|
258
|
+
### Travel-Specific Parameters for ViewContent
|
|
259
|
+
Add destination, check_in_date, check_out_date, num_adults to contents object.
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Universal Event Parameters Reference
|
|
264
|
+
|
|
265
|
+
### Meta / Facebook
|
|
266
|
+
All events support these shared parameters:
|
|
267
|
+
- value (float): monetary value
|
|
268
|
+
- currency (string): ISO 4217 e.g. "VND", "USD"
|
|
269
|
+
- content_name (string): human-readable description
|
|
270
|
+
- content_ids (array): product/content IDs
|
|
271
|
+
- content_type (string): "product" or "product_group"
|
|
272
|
+
- contents (array): [{id, quantity, item_price}]
|
|
273
|
+
|
|
274
|
+
### TikTok
|
|
275
|
+
All 14 standard events support:
|
|
276
|
+
- value (float): total monetary value
|
|
277
|
+
- currency (string): e.g. "VND" — supported by TikTok
|
|
278
|
+
- content_id (string): single product ID
|
|
279
|
+
- content_ids (array): multiple product IDs
|
|
280
|
+
- content_type (string): "product" or "product_group"
|
|
281
|
+
- content_name (string): name of product/content
|
|
282
|
+
- quantity (int): number of items
|
|
283
|
+
- price (float): per-item price
|
|
284
|
+
- description (string): optional description
|
|
285
|
+
- search_string (string): for Search events only
|
|
286
|
+
- status (string): for CompleteRegistration — "registered"
|
|
287
|
+
|
|
288
|
+
### Google Ads Enhanced Conversions
|
|
289
|
+
Pass user_data with:
|
|
290
|
+
- email_address: raw email (Google hashes it)
|
|
291
|
+
- phone_number: raw phone with country code
|
|
292
|
+
- address.first_name, address.last_name, address.country, address.postal_code
|
|
293
|
+
|
|
294
|
+
Note: Google hashes this data server-side with SHA256. Do NOT pre-hash for Enhanced Conversions (unlike Meta where you pre-hash).
|