Medusa plugins
G

Google analytics medusa

A Medusa plugin for sending ecommerce spec events to Google Analytics using the Measurement Protocol.

Need customizations for this plugin?

Get in touch
npm install @variablevic/google-analytics-medusa
Category
analytics
Built by
variablevic
Type
unknown
Last updated
5 months ago
Monthly downloads
4

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:

  • - When items are added to a cart
  • - When items are removed from a cart
  • - When shipping information is added to a cart
  • - When payment information is added
  • - When an order is placed

Prerequisites

Installation

yarn add @variablevic/google-analytics-medusa

Configuration

Add the plugin to your :

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:

  • - Product views
  • - Checkout initiation
  • - User registration
  • - 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:
  3. Build the project:
  4. Test the plugin:

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