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.
Files changed (193) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +285 -0
  3. package/adapters/antigravity.js +15 -0
  4. package/adapters/claude-code.js +17 -0
  5. package/adapters/cursor.js +16 -0
  6. package/commands/bootstrap.md +49 -0
  7. package/commands/build.md +48 -0
  8. package/commands/content.md +48 -0
  9. package/commands/continuity.md +60 -0
  10. package/commands/debug.md +51 -0
  11. package/commands/demo.md +96 -0
  12. package/commands/deploy.md +51 -0
  13. package/commands/plan.md +42 -0
  14. package/commands/review.md +55 -0
  15. package/commands/track.md +46 -0
  16. package/commands/ux.md +46 -0
  17. package/dist/agent-dispatch.js +161 -0
  18. package/dist/chains/builtin.js +85 -0
  19. package/dist/continuity.js +385 -0
  20. package/dist/dashboard.js +926 -0
  21. package/dist/data.js +122 -0
  22. package/dist/index.js +2434 -0
  23. package/dist/judge.js +252 -0
  24. package/dist/parallel-dispatch.js +359 -0
  25. package/dist/parallel-quality.js +172 -0
  26. package/dist/skill-chain.js +258 -0
  27. package/install.sh +513 -0
  28. package/package.json +79 -0
  29. package/skills/.content-factory-state.json +132 -0
  30. package/skills/.git 2/logs/refs/heads/main +1 -0
  31. package/skills/.git 2/logs/refs/remotes/origin/main +1 -0
  32. package/skills/.git 2/objects/02/fb0956734b5f8ba3f918b7defd04a89cfe0076 +0 -0
  33. package/skills/.git 2/objects/08/1e129d75dc6feac6c02037272e6bd1a04e3324 +0 -0
  34. package/skills/.git 2/objects/0c/5393416f3c5e01c9a655a802bff0dd52f76f0a +0 -0
  35. package/skills/.git 2/objects/10/0b9be46978a946a77188f68be725098a122001 +0 -0
  36. package/skills/.git 2/objects/10/cf041167fc9843610eb3d90259ef3396315fdc +0 -0
  37. package/skills/.git 2/objects/12/5e19538dd6e1338ffe74f6c4c165b00435bf48 +0 -0
  38. package/skills/.git 2/objects/16/a9b9d0088d5c1347628b45a2620b479d8ad57c +0 -0
  39. package/skills/.git 2/objects/17/8c2a9ef93c33ae4eec9d58e82321f9229843a1 +0 -0
  40. package/skills/.git 2/objects/25/397ae41d09104d763bdcac2695209d85cdea89 +0 -0
  41. package/skills/.git 2/objects/2f/a836b7947f2d458e1f639788bf4bb0983a3305 +0 -0
  42. package/skills/.git 2/objects/3a/baaaf0a1c0909c0828335791557125fba911e0 +0 -0
  43. package/skills/.git 2/objects/42/2924221b81f5ce3c4e4daac9a64a24f9b01f9a +0 -0
  44. package/skills/.git 2/objects/42/ec0ce707447dc11446a34c9995fb8533801731 +0 -0
  45. package/skills/.git 2/objects/46/e43ce92866d56ce74b1d750db307cfe6154a15 +0 -0
  46. package/skills/.git 2/objects/48/5e41b633c63f55b8277bcc59f44f67681f671a +0 -0
  47. package/skills/.git 2/objects/49/49c596a3a89fa240642acd95dd3258e261eb09 +0 -0
  48. package/skills/.git 2/objects/50/9d42d8412ef8eaf7f7e138476bac2e4d10ce60 +0 -0
  49. package/skills/.git 2/objects/55/0c8c389d981b463ef849aeb792d8be3ccb6ec8 +0 -0
  50. package/skills/.git 2/objects/5d/82d3b18410cdda3ace3677436f0cb599dbe2d2 +0 -0
  51. package/skills/.git 2/objects/60/0617c58e871a38b33bf29e282d132bb3c381ad +0 -0
  52. package/skills/.git 2/objects/6a/8369a99c687b7245c92ffaf0e0f0dab9014504 +0 -0
  53. package/skills/.git 2/objects/79/bea435d40ab531c1aaf6be0432c6a5b7aaed21 +0 -0
  54. package/skills/.git 2/objects/7e/5ebd79251c2f14e4aceb86c74b6b6daae6b500 +0 -0
  55. package/skills/.git 2/objects/81/98a822a60178d6d5023ddb3e222cddf048742e +0 -0
  56. package/skills/.git 2/objects/86/0a0e1943dfe53411d2e499a1f16f46a96ef758 +0 -0
  57. package/skills/.git 2/objects/86/971fb55fdc081fdbae52376f0f13e57a4e9b04 +0 -0
  58. package/skills/.git 2/objects/88/b89dd609a0a03f8d4fe8bfde20d5b8fc1d326d +0 -0
  59. package/skills/.git 2/objects/90/8737edb6b7809e32cc01590b4e08ba42a9d40d +0 -0
  60. package/skills/.git 2/objects/93/d5a8a9a7d4fb7f11491cb596a6880528725118 +0 -0
  61. package/skills/.git 2/objects/98/46a2ab81d0c3b3eb00ef88fc56989aa7e9f316 +0 -0
  62. package/skills/.git 2/objects/9b/d8dd1e49cf274eaf9c555f3ab39dce7af5715e +0 -0
  63. package/skills/.git 2/objects/a1/13329fb0cec96ae78b222d33a24c3b5bc7fa1f +0 -0
  64. package/skills/.git 2/objects/a9/e6effe626e8a3aea3a8fc3364b492191c6e7d0 +0 -0
  65. package/skills/.git 2/objects/ad/6de7e48d9782cca9353d1ff0aa1aab7fe1df85 +0 -0
  66. package/skills/.git 2/objects/af/54ae316f771ff692e299ffcd8bf2f06b413b59 +0 -0
  67. package/skills/.git 2/objects/b0/4cb8b0b00dad633e731c1472161419e738d674 +0 -0
  68. package/skills/.git 2/objects/b3/094abb0b9ed46419b269e4a4e36a459690e3b0 +0 -0
  69. package/skills/.git 2/objects/b9/435c5d4baac2cfc5c83009ddd27b46b60db5f1 +0 -0
  70. package/skills/.git 2/objects/ba/5da17dbaec5ec2dcfdfd126aead518d1171d5c +0 -0
  71. package/skills/.git 2/objects/c0/bf58703aa258ba5dd63083bebaec8f223d844c +0 -0
  72. package/skills/.git 2/objects/c4/701a34edf1fc1bad58ccc57bd03f9426acb59a +0 -0
  73. package/skills/.git 2/objects/c7/5ccce9a4e5cc74d9b3174550cf6d993ca43638 +0 -0
  74. package/skills/.git 2/objects/c7/710d59b5a35b0f1f0a0399386643a0bd94c929 +0 -0
  75. package/skills/.git 2/objects/d1/fe58237112e953e5fec52da22cf38e08be3df9 +5 -0
  76. package/skills/.git 2/objects/d2/2bbe9fd2f74c95bc5583e803f5e435f1e2cd86 +0 -0
  77. package/skills/.git 2/objects/d7/e72852ea2bff74581dbf247d400120086229f4 +0 -0
  78. package/skills/.git 2/objects/d8/d4c3b5553e4fd72807e1d4b49ef07d9ef3ac35 +0 -0
  79. package/skills/.git 2/objects/dc/75050c2876f6a02ae2a53a3c886f395b622977 +0 -0
  80. package/skills/.git 2/objects/ee/e8546f95acec500187c08a28a8b9ee02db0dec +0 -0
  81. package/skills/.git 2/objects/ef/263c059208b416c2146434f10cb2b9fabcba16 +0 -0
  82. package/skills/.git 2/objects/f3/ae597e84d9a59b88acd21c99bde2eaf686d785 +0 -0
  83. package/skills/.git 2/objects/f3/f6f5673c821d3d8e76fa267a9e882e7a5387ea +0 -0
  84. package/skills/.git 2/objects/f9/6e6d0ad02624dd11d5848594d056caef7a5e8b +0 -0
  85. package/skills/.git 2/objects/ff/278988fc1edf0db3abcf18de795f4cc0b4f3e1 +0 -0
  86. package/skills/.git 2/refs/heads/main +1 -0
  87. package/skills/.git 2/refs/remotes/origin/main +1 -0
  88. package/skills/.pytest_cache 2/v/cache/nodeids +76 -0
  89. package/skills/.pytest_cache 2/v/cache/stepwise +1 -0
  90. package/skills/_shared/helpers.md +123 -0
  91. package/skills/_shared/outputs-convention.md +24 -0
  92. package/skills/cm-ads-tracker/SKILL.md +109 -0
  93. package/skills/cm-ads-tracker/evals/evals.json +55 -0
  94. package/skills/cm-ads-tracker/references/gtm-architecture.md +321 -0
  95. package/skills/cm-ads-tracker/references/industry-events.md +294 -0
  96. package/skills/cm-ads-tracker/references/platforms-api.md +238 -0
  97. package/skills/cm-ads-tracker/templates/capi-payload.md +79 -0
  98. package/skills/cm-ads-tracker/templates/datalayer-push.js +104 -0
  99. package/skills/cm-ads-tracker/templates/gtm-variables.js +56 -0
  100. package/skills/cm-brainstorm-idea/SKILL.md +423 -0
  101. package/skills/cm-code-review/SKILL.md +151 -0
  102. package/skills/cm-content-factory/SKILL.md +416 -0
  103. package/skills/cm-continuity/SKILL.md +399 -0
  104. package/skills/cm-dashboard/SKILL.md +533 -0
  105. package/skills/cm-dashboard/ui/app.js +1270 -0
  106. package/skills/cm-dashboard/ui/index.html +206 -0
  107. package/skills/cm-dashboard/ui/style.css +440 -0
  108. package/skills/cm-debugging/SKILL.md +412 -0
  109. package/skills/cm-deep-search/SKILL.md +242 -0
  110. package/skills/cm-design-system/SKILL.md +97 -0
  111. package/skills/cm-design-system/resources/halo-modern.md +40 -0
  112. package/skills/cm-design-system/resources/lunaris-advanced.md +40 -0
  113. package/skills/cm-design-system/resources/nitro-enterprise.md +39 -0
  114. package/skills/cm-design-system/resources/shadcn-default.md +37 -0
  115. package/skills/cm-dockit/README.md +100 -0
  116. package/skills/cm-dockit/SKILL.md +302 -0
  117. package/skills/cm-dockit/index.html +443 -0
  118. package/skills/cm-dockit/package-lock.json +1850 -0
  119. package/skills/cm-dockit/package.json +14 -0
  120. package/skills/cm-dockit/prompts/analysis.md +34 -0
  121. package/skills/cm-dockit/prompts/api-reference.md +24 -0
  122. package/skills/cm-dockit/prompts/architecture.md +21 -0
  123. package/skills/cm-dockit/prompts/data-flow.md +20 -0
  124. package/skills/cm-dockit/prompts/database.md +21 -0
  125. package/skills/cm-dockit/prompts/deployment.md +22 -0
  126. package/skills/cm-dockit/prompts/flows.md +21 -0
  127. package/skills/cm-dockit/prompts/jtbd.md +20 -0
  128. package/skills/cm-dockit/prompts/personas.md +24 -0
  129. package/skills/cm-dockit/prompts/sop-modules.md +40 -0
  130. package/skills/cm-dockit/scripts/doc-gen.sh +121 -0
  131. package/skills/cm-dockit/scripts/dockit-dashboard.sh +142 -0
  132. package/skills/cm-dockit/scripts/dockit-runner.sh +607 -0
  133. package/skills/cm-dockit/scripts/dockit-task.sh +166 -0
  134. package/skills/cm-dockit/skills/analyze-codebase.md +174 -0
  135. package/skills/cm-dockit/skills/api-reference.md +237 -0
  136. package/skills/cm-dockit/skills/changelog-guide.md +195 -0
  137. package/skills/cm-dockit/skills/content-guidelines.md +190 -0
  138. package/skills/cm-dockit/skills/sop-guide.md +184 -0
  139. package/skills/cm-dockit/skills/tech-docs.md +287 -0
  140. package/skills/cm-dockit/templates/markdown/structure.md +60 -0
  141. package/skills/cm-dockit/templates/vitepress-premium/.vitepress/config.mts +110 -0
  142. package/skills/cm-dockit/templates/vitepress-premium/.vitepress/theme/custom.css +189 -0
  143. package/skills/cm-dockit/templates/vitepress-premium/.vitepress/theme/index.ts +4 -0
  144. package/skills/cm-dockit/templates/vitepress-premium/package.json +19 -0
  145. package/skills/cm-dockit/templates/vitepress-premium/tests/frontend.test.ts +45 -0
  146. package/skills/cm-dockit/tests/runner.test.ts +66 -0
  147. package/skills/cm-dockit/workflows/export-markdown.md +82 -0
  148. package/skills/cm-dockit/workflows/generate-docs.md +68 -0
  149. package/skills/cm-dockit/workflows/setup-vitepress.md +181 -0
  150. package/skills/cm-example/SKILL.md +26 -0
  151. package/skills/cm-execution/SKILL.md +268 -0
  152. package/skills/cm-git-worktrees/SKILL.md +164 -0
  153. package/skills/cm-how-it-work/SKILL.md +189 -0
  154. package/skills/cm-identity-guard/SKILL.md +412 -0
  155. package/skills/cm-jtbd/SKILL.md +98 -0
  156. package/skills/cm-planning/SKILL.md +130 -0
  157. package/skills/cm-project-bootstrap/SKILL.md +161 -0
  158. package/skills/cm-project-bootstrap/templates/AGENTS.md +42 -0
  159. package/skills/cm-project-bootstrap/templates/frontend-safety.test.js +51 -0
  160. package/skills/cm-project-bootstrap/templates/i18n-sync.test.js +38 -0
  161. package/skills/cm-project-bootstrap/templates/pr-template.md +12 -0
  162. package/skills/cm-project-bootstrap/templates/project-identity.json +29 -0
  163. package/skills/cm-project-bootstrap/templates/vitest.config.js +10 -0
  164. package/skills/cm-quality-gate/SKILL.md +218 -0
  165. package/skills/cm-readit/SKILL.md +289 -0
  166. package/skills/cm-readit/audio-player.md +206 -0
  167. package/skills/cm-readit/examples/blog-reader.js +352 -0
  168. package/skills/cm-readit/examples/voice-cro.js +390 -0
  169. package/skills/cm-readit/tts-engine.md +262 -0
  170. package/skills/cm-readit/ui-patterns.md +362 -0
  171. package/skills/cm-readit/voice-cro.md +223 -0
  172. package/skills/cm-safe-deploy/SKILL.md +120 -0
  173. package/skills/cm-safe-deploy/templates/deploy.sh +89 -0
  174. package/skills/cm-safe-i18n/SKILL.md +473 -0
  175. package/skills/cm-secret-shield/SKILL.md +580 -0
  176. package/skills/cm-skill-chain/SKILL.md +78 -0
  177. package/skills/cm-skill-index/SKILL.md +318 -0
  178. package/skills/cm-skill-mastery/SKILL.md +169 -0
  179. package/skills/cm-start/SKILL.md +65 -0
  180. package/skills/cm-status/SKILL.md +12 -0
  181. package/skills/cm-tdd/SKILL.md +370 -0
  182. package/skills/cm-terminal/SKILL.md +177 -0
  183. package/skills/cm-test-gate/SKILL.md +242 -0
  184. package/skills/cm-ui-preview/SKILL.md +291 -0
  185. package/skills/cm-ux-master/DESIGN_STANDARD_TEMPLATE.md +54 -0
  186. package/skills/cm-ux-master/SKILL.md +114 -0
  187. package/skills/cro-methodology/SKILL.md +98 -0
  188. package/skills/cro-methodology/references/COPYWRITING.md +178 -0
  189. package/skills/cro-methodology/references/OBJECTIONS.md +135 -0
  190. package/skills/cro-methodology/references/PERSUASION.md +158 -0
  191. package/skills/cro-methodology/references/RESEARCH.md +220 -0
  192. package/skills/cro-methodology/references/funnel-analysis.md +365 -0
  193. 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).