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
Related Resources
Open-Source Implementation Map
No official open-source repository was found in the current Alto connector catalog for Shopify. Keep this page focused on the verified public API contract and vendor documentation until an official schema, SDK, MCP server, or public integration repository is available.
Tajo Revamp Checklist
- Verify authentication and scope requirements against the vendor documentation before each connector release.
- Document primary sync objects, external IDs, pagination strategy, and rate limits explicitly.
- Add smoke tests from public API examples rather than undocumented behavior.
- Capture webhook signature verification and replay protection when the vendor supports webhooks.
- Record gaps where no official public repository or schema exists so future maintainers know what still needs source-backed validation.