Shopify Connector
Shopify Connector
Connect your Shopify store to Brevo for complete customer data synchronization, abandoned cart recovery, and automated marketing campaigns.
Overview
| Property | Value |
|---|---|
| Platform | Shopify |
| Category | E-commerce |
| Setup Complexity | Easy |
| Official Integration | Yes |
| Data Synced | Customers, Orders, Products, Carts, Events |
| Available Skills | 12 |
Features
- Real-time customer sync - Customer data synced instantly to Brevo contacts
- Order tracking - Order events for post-purchase flows
- Product catalog sync - Products available for recommendations
- Cart abandonment - Track and recover abandoned carts
- Browse behavior - Page view and product interest tracking
- Multi-store support - Connect multiple Shopify stores
Prerequisites
Before you begin, ensure you have:
- A Shopify store with admin access
- A Brevo account with API access
- A Tajo account
Installation
Option 1: Shopify App Store (Recommended)
- Visit the Tajo app in Shopify App Store
- Click “Add app”
- Grant requested permissions
- Connect your Brevo account
Option 2: Manual Installation
Step 1: Create a Shopify App
- Go to your Shopify admin → Settings → Apps and sales channels
- Click “Develop apps” → “Create an app”
- Name it “Tajo Integration”
Step 2: Configure API Scopes
Enable these scopes:
read_customerswrite_customersread_ordersread_productsread_checkoutswrite_script_tagsStep 3: Install the App
# Using Tajo CLItajo connectors install shopify \ --shop-url your-store.myshopify.com \ --api-key $SHOPIFY_API_KEY \ --api-secret $SHOPIFY_API_SECRETStep 4: Configure Webhooks
Tajo automatically registers these webhooks:
| Webhook | Purpose |
|---|---|
customers/create | New customer sync |
customers/update | Customer data changes |
customers/delete | Customer removal |
orders/create | Order placed events |
orders/updated | Order status changes |
checkouts/create | Cart created |
checkouts/update | Cart updated |
Configuration
Basic Setup
connectors: shopify: enabled: true shop_url: "your-store.myshopify.com" api_version: "2024-01"
# Data sync options sync: customers: true orders: true products: true carts: true inventory: false # Optional
# List assignment lists: all_customers: 5 buyers: 6 abandoned_cart: 7Field Mapping
Map Shopify fields to Brevo contact attributes:
Default Mappings
| Parameter | Type | Description |
|---|---|---|
email required | string | Customer email (unique identifier) |
first_name optional | string | Maps to FIRSTNAME attribute |
last_name optional | string | Maps to LASTNAME attribute |
phone optional | string | Maps to SMS attribute for WhatsApp/SMS |
accepts_marketing optional | boolean | Controls subscription status |
orders_count optional | integer | Total number of orders |
total_spent optional | number | Lifetime customer value |
tags optional | array | Customer tags from Shopify |
Custom Attribute Mapping
field_mapping: # Standard fields email: email first_name: FIRSTNAME last_name: LASTNAME phone: SMS
# E-commerce metrics orders_count: ORDER_COUNT total_spent: TOTAL_SPENT last_order_date: LAST_ORDER_DATE
# Custom fields customer_type: CUSTOMER_TYPE preferred_language: LANGUAGE loyalty_tier: VIP_TIER
# Computed fields average_order_value: AOV days_since_last_order: RECENCYProduct Sync
Sync products for email recommendations:
sync: products: enabled: true include_variants: true include_images: true categories_as_tags: true
# Filter products filter: status: active exclude_tags: ["hidden", "wholesale-only"]Inventory Tracking
Enable stock-level synchronization:
sync: inventory: enabled: true low_stock_threshold: 10 out_of_stock_events: trueEvents
Customer Events
| Event | Trigger | Use Case |
|---|---|---|
customer_created | New customer signup | Welcome series |
customer_updated | Profile changes | Data sync |
customer_tags_added | Tags assigned | Segment updates |
Order Events
| Event | Trigger | Use Case |
|---|---|---|
order_placed | Checkout complete | Order confirmation |
order_fulfilled | Order shipped | Shipping notification |
order_cancelled | Order cancelled | Cancellation email |
order_refunded | Refund processed | Refund confirmation |
Cart Events
| Event | Trigger | Use Case |
|---|---|---|
cart_created | Items added to cart | Browse tracking |
cart_updated | Cart modified | Cart value tracking |
cart_abandoned | No checkout in 30min | Recovery emails |
Skills Enabled
The Shopify connector enables these skills:
| Skill | Description |
|---|---|
| Customer Sync | Real-time customer sync |
| Order Events | Order lifecycle tracking |
| Abandoned Cart | Cart recovery emails |
| Welcome Series | New customer onboarding |
| Post-Purchase | Order follow-up |
| Win-Back | Re-engage inactive customers |
| Browse Abandonment | Product interest follow-up |
| Replenishment | Reorder reminders |
Code Examples
Initialize Connector
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
// Connect Shopify storeawait tajo.connectors.connect('shopify', { shopUrl: 'your-store.myshopify.com', apiKey: process.env.SHOPIFY_API_KEY, apiSecret: process.env.SHOPIFY_API_SECRET});Run Initial Sync
// Full historical syncawait tajo.connectors.sync('shopify', { type: 'full', resources: ['customers', 'orders', 'products'], since: '2023-01-01'});
// Check sync statusconst status = await tajo.connectors.status('shopify');console.log(status);// {// connected: true,// lastSync: '2024-01-15T10:30:00Z',// customersCount: 15420,// ordersCount: 8234,// productsCount: 342// }Track Cart Events
Add the Tajo script to your Shopify theme:
<!-- Add to theme.liquid before </head> -->{% if customer %}<script> window.tajoConfig = { customerId: "{{ customer.id }}", customerEmail: "{{ customer.email }}", customerName: "{{ customer.first_name }}" };</script>{% endif %}<script src="https://cdn.tajo.io/shopify.js"></script>Custom Webhook Handler
// Handle Shopify webhooks manuallyapp.post('/webhooks/shopify', async (req, res) => { const hmac = req.get('X-Shopify-Hmac-SHA256');
// Verify webhook signature if (!verifyShopifyWebhook(req.body, hmac)) { return res.status(401).send('Unauthorized'); }
const topic = req.get('X-Shopify-Topic');
// Forward to Tajo await tajo.connectors.handleWebhook('shopify', { topic, payload: req.body });
res.status(200).send('OK');});Monitoring
Dashboard Metrics
Monitor your Shopify connection in the Tajo dashboard:
- Sync Status: Real-time connection health
- Customers Synced: Total contacts from Shopify
- Orders Tracked: Order events processed
- Cart Recovery: Abandoned cart performance
- Error Rate: Failed sync attempts
Webhook Logs
View webhook delivery status:
tajo connectors logs shopify --type webhook --last 24hSync History
Check historical sync operations:
tajo connectors history shopify --limit 10Troubleshooting
Common Issues
API Rate Limits
Shopify has API rate limits of 2 requests/second. Use batch sync for large historical imports.
| Issue | Cause | Solution |
|---|---|---|
| Webhook not received | App permissions | Reinstall app with correct scopes |
| Customer not synced | Missing email | Shopify requires email for customers |
| Products missing | Product status | Check product is “active” status |
| Cart not tracked | Script not loaded | Verify script in theme.liquid |
Debug Mode
Enable verbose logging:
connectors: shopify: debug: true log_level: verbose log_webhooks: trueTest Connection
tajo connectors test shopify# ✓ API connection successful# ✓ Webhooks registered# ✓ Products accessible# ✓ Customers readable# ✓ Orders readableBest Practices
- Start with test store - Use a development store first
- Run initial sync during off-hours - Large syncs can be slow
- Map custom attributes - Don’t rely on default mappings only
- Enable cart tracking - Critical for abandoned cart recovery
- Monitor webhook health - Set up alerts for failed deliveries
- Use batch imports - For historical data over 10,000 records
Security
- OAuth 2.0 - Secure token-based authentication
- Webhook verification - HMAC signature validation
- Encrypted storage - API credentials encrypted at rest
- Scoped access - Minimum required permissions only