Skip to main content

Dev checklist

Tick this off before telling the agency you're ready for staging.

πŸ”§ Technical setup​

  • GTM snippet injected in <head> + <body> (provided by agency)
  • CMP installed (if applicable) β€” loaded BEFORE GTM
  • CNAMEs load.analytics.biosphereskincare.com + analytics.biosphereskincare.com created, SSL OK
  • CSP updated (if applicable) to allow Stape subdomains

πŸ›  Global helpers​

  • pushEcommerce(eventName, ecommerce, userData) available
  • buildUserData(customer) normalizes and shapes user_data
  • { ecommerce: null } pushed before every ecommerce event

πŸ“¦ Data formatting​

  • price, value, tax, shipping as numbers (not strings)
  • quantity as integer
  • currency in ISO 4217 uppercase ('EUR')
  • Units, not cents: 42.00 not 4200
  • item_id identical to Meta Catalog feed

πŸ”΄ Phase 1 β€” Core funnel (mandatory)​

EventImplementedTested
view_item_list⬜⬜
select_item⬜⬜
view_item⬜⬜
add_to_cart⬜⬜
view_cart⬜⬜
remove_from_cart⬜⬜
begin_checkout⬜⬜
add_shipping_info⬜⬜
add_payment_info⬜⬜
purchase ⭐⬜⬜

🟑 Phase 2 β€” Acquisition​

EventImplementedTested
sign_up⬜⬜
generate_lead⬜⬜
search⬜⬜

🟣 Phase 3 β€” Optional​

EventImplementedTested
refund⬜⬜
view_promotion / select_promotion⬜⬜
page_view (SPA only)⬜⬜

πŸͺͺ user_data​

  • purchase includes full user_data (email, phone, name, address, external_id)
  • sign_up / generate_lead include minimum user_data (email)
  • begin_checkout / add_shipping_info / add_payment_info include user_data when user is identified
  • Values in plain text (not hashed)
  • Normalized: lowercase trimmed email, digits-only phone, ISO alpha-2 country

πŸ”’ Purchase (critical)​

  • transaction_id unique per order (= DB order number)
  • Push after DB commit
  • Idempotent: refresh / back button doesn't re-push
  • value = merchandise (excl. shipping/tax); tax and shipping separate
  • All cart items included
  • Complete user_data

πŸ“‹ Meta Catalog​

  • Product feed exposed over HTTPS (stable URL)
  • Format: Google/Meta XML or CSV
  • Required fields: id, title, description, availability, condition, price, link, image_link, brand
  • Feed id = dataLayer item_id (absolute consistency)
  • Real-time or hourly cron refresh

πŸ§ͺ Testing​

  • All test scenarios pass
  • Meta Purchase EMQ β‰₯ 8/10
  • Pixel/CAPI dedup 100%
  • GA4 DebugView receives every event
  • GAds conversions fire

πŸ“‘ Before Go Live​

  • Staging signed off by agency
  • GTM snippet also deployed to production
  • Production CNAMEs = staging CNAMEs (same subdomains)
  • Post–Go Live monitoring window: 14 days (EMQ, conversions, revenue)