Overview
Icon for Google Analytics

Google Analytics

Track ecommerce events

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:

  • Copy to clipboardadd_to_cart - When items are added to a cart
  • Copy to clipboardremove_from_cart - When items are removed from a cart
  • Copy to clipboardadd_shipping_info - When shipping information is added to a cart
  • Copy to clipboardadd_payment_info - When payment information is added
  • Copy to clipboardpurchase - When an order is placed

Prerequisites

Installation

yarn add @variablevic/google-analytics-medusa

Configuration

Add the plugin to your Copy to clipboardmedusa-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:

  • Copy to clipboardview_item - Product views
  • Copy to clipboardbegin_checkout - Checkout initiation
  • Copy to clipboardsign_up - User registration
  • Copy to clipboardlogin - 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:

  1. 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;
};
  1. 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

  1. Clone this repository
  2. Install dependencies: Copy to clipboardyarn install
  3. Build the project: Copy to clipboardyarn build
  4. Test the plugin: Copy to clipboardyarn test

For local development and testing:

npx medusa plugin:develop

Contributing

Contributions are welcome! Please read our contributing guidelines before submitting a pull request.

License

MIT

You may also like

Browse all integrations

Build your own

Develop your own custom integraiton

Build your own integration with our API to speed up your processes. Make your integration available via npm for it to be shared in our Library with the broader Medusa community.

gift card interface

Ready to build your custom commerce setup?