medusa-storefront-analytics
v1.5.3
Published
Layered storefront analytics (GTM dataLayer) with reusable domain events for reviews, forms, and more.
Maintainers
Readme
medusa-storefront-analytics
Layered analytics for Medusa storefronts. Core defines adapters; providers implement GTM; events expose domain helpers.
Layers
events/reviews.ts → emitReviewSubmitted(adapter, { productId, productName, rating })
events/forms.ts → emitContactFormSubmitted, emitLeadCaptured
providers/gtm.ts → createGtmAnalyticsAdapter() → dataLayer pushes
core/types.ts → StorefrontAnalyticsAdapter interface
core/compose.ts → composeAnalyticsAdapters([gtm, custom])Review submitted event
import { createGtmAnalyticsAdapter, emitReviewSubmitted } from "medusa-storefront-analytics";
const analytics = createGtmAnalyticsAdapter();
emitReviewSubmitted(analytics, {
productId: "prod_123",
productName: "Kids Hoodie",
rating: 5,
reviewTitle: "Great fit",
isUpdate: false,
});dataLayer pushes:
event: "review_submitted"withproduct_id,product_name,rating,review_titleevent: "form_submit"(legacy) withform_type: "product_review_submit"for existing GTM tags
Storefront wiring
// lib/adapters/analytics.ts
import { createGtmAnalyticsAdapter } from "medusa-storefront-analytics";
export const storefrontAnalytics = createGtmAnalyticsAdapter();<SubmitReviewModal analytics={storefrontAnalytics} ... />Compose multiple backends
import { composeAnalyticsAdapters, createGtmAnalyticsAdapter } from "medusa-storefront-analytics";
export const storefrontAnalytics = composeAnalyticsAdapters([
createGtmAnalyticsAdapter(),
{ trackReviewSubmitted(p) { console.log("review", p); } },
]);