Sync Service
This page contains information on our sync service which syncs data between our supported CMS and OMS's.
Note: This page refers to the new Chord sync service which features bidirectional sync capabilities. This does not refer to the legacy unidirectional sync service.

Overview

Chord offers a sync service which enables syncing of data between Shopify and Contentful bidirectionally. This receives webhooks from supported services and updates data in the destination service, ensuring product data is always up-to-date between services.

Sync Description

By default, product descriptions are not synced. This means that the description in your CMS and the description in your OMS need to be updated individually.
If you would like them to be synced, please reach out to us and we can enable.

Supported Services

Listed below are the Order Management Systems (OMS) and Content Management Systems (CMS) the Sync Service supports. We may add support for other services in future!

Order Management Systems (OMS)

Content Management Systems (CMS)

Syncing Products in Contentful

Contentful is a Content Management System (CMS) which allows users to manage content for their website and apps. Contentful is one of the CMSs supported by the Chord ecosystem.

Valid Data Structure

Contentful has various data models that make up a product. This includes the product itself, variants, product types, option types, and option values. Please take a moment to read over the Content Models portion of this documentation to familiarize yourself with these data models.

Publishing

By default, if a product synced to Contentful is published, the sync service will attempt to publish the Product and child data models (Product Type, Option Type(s), Option Value(s)) in Contentful. This may not always be possible due to validation constraints (for example, if Contentful has required fields that are not set, publishing will fail).

How fields are synced

Below is an overview of which fields exactly are synced and which data point they are synced to. Note that not all OMSs will accept all fields, so the exact behavior may differ.

From Contentful to OMS:

  • Product
    • ID (Contentful entry ID)
    • Publish status (determines whether a product will be published or not in the OMS)
    • Name
    • Slug
    • Vendor
    • Product Type
    • Short Description (see sync description)
    • Long Description (see sync description)
    • Main Image
    • Option Types
    • Variants
  • Variant
    • ID (Contentful entry ID)
    • Name
    • SKU
    • Global Trade Item Number
    • Shopify ID
    • Price
    • Regular Price
    • Main Image
    • Option Values
    • Weight
  • Product Type
    • ID (Contentful entry ID)
    • Name
    • Slug
  • Option Type
    • ID (Contentful entry ID)
    • Name
    • Slug
    • Presentation
    • Option values
  • Option Value
    • ID (Contentful entry ID)
    • Name
    • Slug
    • Presentation

From OMS to Contentful:

Troubleshooting

My product won't sync

There are a variety of reasons why your product may not be syncing. The most common reason is your product may not comply with our Content Models. Please make sure you have added your Option Types and Option Values correctly and have added the correct Option Types to the Product which corresponds to the Option Values listed in each Variant.

Syncing Products in Shopify

How fields are synced

Below is an overview of which fields exactly are synced and which data point they are synced to.

From Shopify to CMS:

  • Product
    • Product status (determines whether a product will be published or not in the CMS)
    • Title (synced to Name in CMS)
    • Handle (synced to Slug in CMS)
    • ID (synced to Shopify ID in CMS)
    • Vendor
    • Type or Custom Type (synced to Product Type in CMS)
    • Media (first item synced to Main Image in CMS)
    • Description (synced to Long Description in CMS, see sync description)
    • Option name(s) (synced to Option Types in CMS)
  • Variant
    • Title (synced to Name in CMS, see caveat below for details)
    • Price
    • Compare at price (synced to Regular Price in CMS)
    • SKU (synced to Slug in CMS)
    • Barcode (synced to Global Trade Item Number in CMS)
    • ID (synced to Shopify ID in CMS)
    • Image (synced to Main Image in CMS)
    • Option values (synced to Option Values in CMS)
    • Weight
  • Product Type
  • Option Type
  • Option Value

From CMS to Shopify:

  • Product
    • Product status (synced from CMS publish status)
    • Title (synced from Name in CMS)
    • Handle (synced from Slug in CMS)
    • Vendor (synced from Vendor in CMS)
    • Type (synced from Product Type in CMS)
    • Description (synced from Long Description in CMS, see sync description)
    • Media (synced from Main Image in CMS)
    • Option name(s) (synced from Main Image in CMS)
    • Metafields
      • cmsId (synced from ID in CMS)
      • cmsImageId (synced from Main Image ID in CMS)
    • Tags
      • chord_origin_id: {id} (synced from ID in CMS)
      • chord_origin: {origin} (CMS ID i.e. for Contentful it will be 'contentful')
  • Variant
    • SKU (synced from SKU in CMS)
    • Barcode (synced from Global Trade Item Number in CMS)
    • Price
    • Compare at price (synced from Regular Price in CMS)
    • Image (synced from Main Image in CMS)
    • Option value(s) (synced from Option Values in CMS)
    • Weight
    • Metafields
      • cmsId (synced from ID in CMS)
      • cmsImageId (synced from Main Image ID in CMS)

Preventing/allowing products to sync with Shopify sync mode

The Sync Service allows you to prevent or allow products to sync depending on the sync mode enabled. There are two sync modes:
  • denylist mode: When this mode is enabled, all Shopify products will sync unless they have the chord-no-sync tag. This is the default mode.
  • allowlist mode: When this mode is enabled, Shopify products will only be synced if they have the chord-sync tag.
The Shopify sync mode is not user configurable. Please reach out to the Chord developer experience team if you wish to change the sync mode.

Preventing products from syncing in denylist mode

This can be helpful if you have old products, or products that are drafts and you don't want synced to your CMS.
If you have denylist mode (this is the default mode), you can prevent Shopify products from syncing by following these steps:
  1. 1.
    Log in to your Shopify account and navigate to products
  2. 2.
    Select the product you wish to disable syncing
  3. 3.
    In the tags section in the column on the right, enter chord-no-sync in the "Find or create tags" field. Press enter or click "Add chord-no-sync" in the dropdown to add the tag.
  4. 4.
    Once you have added the tag, you will see it listed along with any other tags. You have now successfully added the tag.

Allowing products to sync in allowlist mode

This can be helpful if you don't want to use Shopify for managing products, but may want to sync select products from Shopify either momentarily or permanently.
If you have allowlist mode, products are not synced by default. You can allow Shopify products to sync by following these steps:
  1. 1.
    Log in to your Shopify account and navigate to products
  2. 2.
    Select the product you wish to disable syncing
  3. 3.
    In the tags section in the column on the right, enter chord-sync in the "Find or create tags" field. Press enter or click "Add chord-sync" in the dropdown to add the tag.
  4. 4.
    Once you have added the tag, you will see it listed along with any other tags. You have now successfully added the tag.

Caveats

Slugs for Product Type, Option Type and Option Value data models

For our Product Type, Option Type and Option Value data models, we include a slug field. However, Shopify has no such field. This means that we need to generate this automatically. The sync service does this by creating a "slugified" version of the Product Type, Option Type or Option Value.
For example, if we create a product in Shopify with a Product Type of "Pants and Shorts", if there is not already a Product Type with a title of "Pants and Shorts" in the CMS, it will be created with a title of "Pants and Shorts" and a slug of "pants-and-shorts".

Slugs for Product Type, Option Type, and Option Value data models aren't overwritten

Since we've stated above that Shopify does not have a slug field for Product Type, Option Type, and Option Value data models, and that the slug is auto-generated, this also brings up the fact that Shopify will not override these slugs.
For example, if a product has a Product Type of "Pants" and a slug of "pants" and the Product Type is changed to "Shorts" in Shopify, the slug will not be affected. To change the slug, you must do this in the CMS itself.

Variant name is only set in CMS if not already set

Our data model includes a Variant Name field, but Shopify has no such field. Because of this, the sync service will populate the Variant Name field with a unique name only if the Variant doesn't already have a Name set in the CMS. This prevents custom Variant Names from being overwritten if you decide to create a custom name for it.
Copy link
On this page
Overview
Sync Description
Supported Services
Order Management Systems (OMS)
Content Management Systems (CMS)
Syncing Products in Contentful
Valid Data Structure
Publishing
How fields are synced
Troubleshooting
Syncing Products in Shopify
How fields are synced
Preventing/allowing products to sync with Shopify sync mode
Caveats