@variablevic/google-analytics-medusa
v0.1.1
Published
A Medusa plugin for sending ecommerce spec events to Google Analytics using the Measurement Protocol.
Maintainers
Readme
Medusa GA4 Plugin
A Google Analytics 4 plugin for Medusa that automatically tracks ecommerce events on your backend using Measurement Protocol. This plugin implements server-side tracking for key ecommerce events in your Medusa store.
Features
The plugin automatically tracks the following GA4 ecommerce events:
add_to_cart- When items are added to a cartremove_from_cart- When items are removed from a cartadd_shipping_info- When shipping information is added to a cartadd_payment_info- When payment information is addedpurchase- When an order is placed
Prerequisites
- Medusa backend
- Google Analytics 4 property
- GA4 Measurement ID
- GA4 API Secret
Installation
yarn add @variablevic/google-analytics-medusaConfiguration
Add the plugin to your medusa-config.ts:
import { defineConfig } from "@medusajs/utils";
// ... other imports and environment variables
export default defineConfig({
// ... other configurations
plugins: [
// ... other plugins
{
resolve: "@variablevic/google-analytics-medusa",
options: {
measurementId: "G-XXXXXXXX", // Your GA4 Measurement ID
apiSecret: "XXXXXXXXXX", // Your GA4 API Secret
debug: false, // Optional, enables debug mode - no events will be sent to your property when debug is active!
},
},
],
});Client-Side Setup
This plugin handles server-side events, but some GA4 ecommerce events need to be implemented on the client side due to their nature:
view_item- Product viewsbegin_checkout- Checkout initiationsign_up- User registrationlogin- User login
Additionally, to properly associate events with users, you need to set the GA client ID as metadata when creating a cart. Here's how to do it in the Next.js Starter:
- Get the GA client ID from the cookie:
export const getGaClientId = async (): Promise<string | null> => {
const cookies = await nextCookies();
const gaClientIdCookie = cookies.get("_ga")?.value;
const gaClientId = (gaClientIdCookie as string)
.split(".")
.slice(-2)
.join(".");
return gaClientId;
};- Set the client ID as cart metadata during cart creation:
const gaClientId = await getGaClientId();
const body = {
region_id: region.id,
} as Record<string, any>;
if (gaClientId) {
body.metadata = {
ga_client_id: gaClientId,
};
}
const cartResp = await sdk.store.cart.create(body, {}, headers);Events Data Format
The plugin automatically formats cart and order data according to GA4's ecommerce event specifications. Each event includes:
- Currency code
- Transaction value
- Item-level details (name, variant, quantity, price)
- Customer information when available
Development
- Clone this repository
- Install dependencies:
yarn install - Build the project:
yarn build - Test the plugin:
yarn test
For local development and testing:
npx medusa plugin:developContributing
Contributions are welcome! Please read our contributing guidelines before submitting a pull request.
License
MIT
