A Klaviyo plugin for Medusa.
A Medusa plugin that integrates Klaviyo's email marketing and customer engagement platform with your Medusa store.
yarn add @variablevic/klaviyo-medusa
Then add the plugin to your file:
const plugins = [// ...{resolve: "@variablevic/klaviyo-medusa",options: {apiKey: process.env.KLAVIYO_API_KEY,},},];
| Option | Type | Description | Default |
|---|---|---|---|
| Your Klaviyo API key |
KLAVIYO_API_KEY=your_klaviyo_api_key
Once installed and configured, the plugin will automatically:
The plugin uses Medusa event subscribers to listen for relevant events and trigger synchronization workflows.
To properly manage marketing consent for Klaviyo in your storefront, you should set consent settings in the customer's metadata. This ensures compliance with privacy regulations by only subscribing customers who have explicitly given consent.
When collecting customer information (during registration, newsletter signup, or checkout), update the customer metadata with Klaviyo consent flags:
// Example implementation in your storefrontconst updateCustomerConsent = async (customerId: string,consentSettings: {email_marketing: boolean;sms_marketing?: boolean;transactional_sms?: boolean;}) => {// Call your store API endpoint that updates customer metadataawait fetch("/store/customers/me", {method: "POST",headers: {"Content-Type": "application/json",},credentials: "include",body: JSON.stringify({metadata: {klaviyo: {consent: consentSettings,},},}),});};// Usage exampleupdateCustomerConsent("cus_123", {email_marketing: true,sms_marketing: false,});
The plugin checks for these consent settings when syncing customer data to Klaviyo:
The plugin provides a Klaviyo-compatible product feed API that allows you to sync your entire product catalog with Klaviyo. This enables product recommendations, abandoned cart emails with product details, and more.
To use the product feed in Klaviyo:
Access your product feed at:
In your Klaviyo account:
The product feed includes essential product data:
You can extend the plugin by:
Example of using the Klaviyo service in your own code:
// Access the Klaviyo serviceconst klaviyoService = container.resolve("klaviyoService");// Create an eventawait klaviyoService.createEvent({metric: {name: "Custom Event",},profile: {email: "customer@example.com",},properties: {// Your custom properties},});
# Clone the repositorygit clone https://github.com/your-username/klaviyo-medusa.git# Install dependenciescd klaviyo-medusayarn# Start development serveryarn dev
MIT