> ## Documentation Index
> Fetch the complete documentation index at: https://docs.frontic.com/llms.txt
> Use this file to discover all available pages before exploring further.

# commercetools

![commercetools](https://mintcdn.com/frontic/zwqcoY8MRIYLLSYv/images/connectors/commercetools.png?fit=max\&auto=format\&n=zwqcoY8MRIYLLSYv\&q=85\&s=832a3799166de1187fb6f9539e8d6f0d)

The commercetools connector syncs your products and categories from a commercetools project into Frontic. Master and variant SKUs are denormalized into separate records with parent links preserved, and prices are pre-filtered to the currencies on each channel - so your Data Sync receives clean, currency-resolved payloads.

&#x20;Auth

OAuth 2.0 (client credentials)

&#x20;Update methods

Polling

&#x20;Resources

Products, Categories

## What you get

> [card] Products
>
> Master products with variants split into separate records by SKU, parent links preserved, prices pre-filtered per currency.

> [card] Categories
>
> Power category pages, attach category context to other records, drive navigation.

The commercetools connector follows the standard integration model - see [how integrations work](https://docs.frontic.com/connectors/overview.md) for Connection, Channels, and Data Feeds. This page covers the commercetools-specific configuration and data shape.

## Set up the API client

Before adding the integration in Frontic, create a dedicated API client in commercetools Merchant Center:

**1. Open API clients**

In Merchant Center, go to **Settings → Developer settings → API clients** and click **Create new API client**.

**2. Pick the read-only scopes**

Under **Scopes**, select **View** for these resources - Frontic only reads from commercetools, so view scopes are enough:

* View project settings
* View stores
* View tax categories
* View products
* View published products
* View attribute groups
* View product selections
* View categories
* View standalone prices
* View types
* View key-value documents

The connector uses **Manage** scopes for none of these. Don't grant write scopes the integration won't use.

**3. Save and copy the credentials**

After creating, commercetools shows the credentials **once**. Copy the **project key**, **client ID**, **client secret**, **API URL**, and **auth URL** - you'll paste them all into the Frontic connection form. If you lose the secret you'll need to create a new client.

## Connection settings

**Project Key** `string` *required*

Your commercetools project key. Visible at the top of Merchant Center and on the API client credentials screen.

**Client ID** `string` *required*

The API client's ID created above.

**Client Secret** `string` *required*

The client secret paired with the Client ID.

**API URL** `string` *required*

The commercetools API endpoint for your project's region (e.g. `https://api.europe-west1.gcp.commercetools.com`).

**Auth URL** `string` *required*

The OAuth token endpoint for your project's region (e.g. `https://auth.europe-west1.gcp.commercetools.com`).

The connection populates the channel's currency dropdown from your commercetools project's enabled currencies.

## Channels

A commercetools channel in Frontic carries the locales and currencies the connector pulls per record.

**Channel Name** `string` *required*

A label for the channel in Frontic.

**Available Translations** `multiselect` *required*

commercetools locale codes the connector pulls per record.

**Fallback Translation** `select` *required*

The translation used when a value is missing in another locale.

**Currencies** `multiselect` *required*

Currencies (from your commercetools project's enabled set) the connector pulls. Product prices are pre-filtered to these.

The **Refresh** button re-fetches commercetools currencies and locales - use it after enabling new ones in commercetools.

## Data Feeds

The commercetools connector exposes two feed types:

| Feed | What it pulls |
| - | - |
| **Products** | Master products as parents and variants as separate records (one per SKU), with prices and translations resolved per channel. |
| **Categories** | The full category tree, parent links preserved. |

The standard **Settings → Updates → Schema** setup wizard applies - see [Data Feeds in the overview](https://docs.frontic.com/connectors/overview.md#data-feeds). For commercetools specifically:

* **Updates step** - Polling is supported.
* **Manual refresh** - every commercetools feed exposes a Refresh action that re-runs the feed against the source.

## What the data looks like

### Variants

A commercetools product with multiple variants becomes a parent record + one record per variant SKU, linked via `parentId`. A simple product (single variant) is emitted as a self-parented record. See [Product Models](https://docs.frontic.com/commerce-concepts/product-models.md) for how this shape composes at the API layer.

### Currency-resolved prices

Product prices are pre-filtered to the currencies declared on the channel. Variants inherit the per-currency price layout, so map them into the [Price composite](https://docs.frontic.com/reference/storage-field-types.md#composites) without per-region picking logic in your Value Composer.

### Attributes split into options and properties

commercetools attributes arrive as `{ name, value }` pairs in the source payload. The connector's attribute extractor unwraps the envelope and splits attributes by role, stamping each list onto the feed record under the reserved `$`-prefix namespace:

* **`$options`** - variant-defining attributes
* **`$properties`** - descriptive attributes that don't drive variant selection

Map either list straight into your storage's [Option](https://docs.frontic.com/reference/storage-field-types.md#composites) and property fields in the Value Composer, instead of unwrapping commercetools' `name`/`value` structure per field.

### Product type caching

Product types are cached on the integration's Instance - large catalogs sync faster because attribute definitions aren't refetched per record.

## Good to know

* **Read-only.** The commercetools connector pulls from commercetools; it doesn't push back. Edits happen in the Merchant Center.
* **Custom attribute groups.** commercetools attribute groups come through on the raw payload. Map them in your Data Sync if you need them as first-class fields.

## What isn't supported today

Commercetools has several segmentation and pricing primitives the connector doesn't currently use. The data still comes through on the raw record where commercetools includes it, but the connector doesn't filter or resolve by these dimensions:

* **Stores.** The connector pulls products from the project root, not via the [Store-scoped endpoints](https://docs.commercetools.com/api/projects/products#in-store-endpoints). Records that exist in only some stores arrive un-filtered. Use Frontic [scopes](https://docs.frontic.com/project-settings/scopes.md) and a [base query](https://docs.frontic.com/api-builder/listings.md#base-query) on your listings to segment instead.
* **Inventory channels and distribution channels.** Channel-specific prices (`priceChannel`) and channel-specific stock (`distributionChannel`) aren't applied during ingest. The connector pulls the master prices and filters by the channel's currencies; channel-tier-specific prices show up on the raw payload but aren't unwrapped.
* **Complex pricing.** Customer-group prices, country-specific prices, and validity-windowed prices on top of currency aren't resolved. The Price composite Frontic stores reflects the master / fallback price for each currency on the channel.

If your storefront depends on any of these dimensions, [get in touch](mailto:support@frontic.com) - we're actively collecting use cases to shape native support and your scenario helps us prioritise.

## Related

> [card] [Product Models](https://docs.frontic.com/commerce-concepts/product-models.md)
>
> How commercetools master products and variants compose at the API layer.

> [card] [Akeneo](https://docs.frontic.com/connectors/akeneo.md)
>
> Akeneo's connector - same `$options` / `$properties` split.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.