---
title: "Shopify Connector"
description: "Complete Shopify integration guide for syncing customers, orders, products, and cart events with Brevo."
url: https://tajo.io/docs/connectors/ecommerce/shopify/
markdown: https://tajo.io/docs/connectors/ecommerce/shopify.md
lang: en-US
robots: noindex
---

# Shopify Connector

Connector status: In progress Being built. Not verified yet.

| Source field | Destination field | Sample value |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

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** | No |
| **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:

1. A Shopify store with admin access
2. A Brevo account with API access
3. A Tajo account

## Installation

### Option 1: Shopify App Store (Recommended)

1. Visit the [Tajo app in Shopify App Store](https://apps.shopify.com/tajo)
2. Click “Add app”
3. Grant requested permissions
4. Connect your Brevo account

### Option 2: Manual Installation

#### Step 1: Create a Shopify App

1. Go to your Shopify admin → Settings → Apps and sales channels
2. Click “Develop apps” → “Create an app”
3. Name it “Tajo Integration”

#### Step 2: Configure API Scopes

Enable these scopes:

```
read_customers
write_customers
read_orders
read_products
read_checkouts
write_script_tags
```

#### Step 3: Install the App

```bash
# Using Tajo CLI
tajo connectors install shopify \
  --shop-url your-store.myshopify.com \
  --api-key $SHOPIFY_API_KEY \
  --api-secret $SHOPIFY_API_SECRET
```

#### Step 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

```yaml
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: 7
```

### Field 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

```yaml
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: RECENCY
```

### Product Sync

Sync products for email recommendations:

```yaml
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:

```yaml
sync:
  inventory:
    enabled: true
    low_stock_threshold: 10
    out_of_stock_events: true
```

## Events

### 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](https://tajo.io/docs/skills/data-sync/customer-sync) | Real-time customer sync |
| Order Events | Order lifecycle tracking |
| [Abandoned Cart](https://tajo.io/docs/skills/email-marketing/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

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

// Connect Shopify store
await tajo.connectors.connect('shopify', {
  shopUrl: 'your-store.myshopify.com',
  apiKey: process.env.SHOPIFY_API_KEY,
  apiSecret: process.env.SHOPIFY_API_SECRET
});
```

### Run Initial Sync

```javascript
// Full historical sync
await tajo.connectors.sync('shopify', {
  type: 'full',
  resources: ['customers', 'orders', 'products'],
  since: '2023-01-01'
});

// Check sync status
const 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:

```liquid
<!-- 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.example.com/shopify.js"></script>
```

Caution

The `example.com` address above is a placeholder until the Tajo endpoint is available.

### Custom Webhook Handler

```javascript
// Handle Shopify webhooks manually
app.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:

```bash
tajo connectors logs shopify --type webhook --last 24h
```

### Sync History

Check historical sync operations:

```bash
tajo connectors history shopify --limit 10
```

## Troubleshooting

### 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:

```yaml
connectors:
  shopify:
    debug: true
    log_level: verbose
    log_webhooks: true
```

### Test Connection

```bash
tajo connectors test shopify
# ✓ API connection successful
# ✓ Webhooks registered
# ✓ Products accessible
# ✓ Customers readable
# ✓ Orders readable
```

## Best Practices

1. **Start with test store** - Use a development store first
2. **Run initial sync during off-hours** - Large syncs can be slow
3. **Map custom attributes** - Don’t rely on default mappings only
4. **Enable cart tracking** - Critical for abandoned cart recovery
5. **Monitor webhook health** - Set up alerts for failed deliveries
6. **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

- [WooCommerce Connector](https://tajo.io/docs/connectors/ecommerce/woocommerce)
- [Customer Sync Skill](https://tajo.io/docs/skills/data-sync/customer-sync)
- [Abandoned Cart Skill](https://tajo.io/docs/skills/email-marketing/abandoned-cart)
- [Brevo Contacts API](https://tajo.io/docs/contact-management)

## Open-Source Implementation Map

No official open-source repository was found in the current Tajo 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.
