Learn how the changes in 2024 to Product Selections and Attribute Groups can improve the management of your Product data.
After completing this page, you should be able to:
- Explain what Product Tailoring is and how it can be used to help you cater your Products to reach wider audiences.
- Differentiate Product Search from other product-related APIs and use a simple Product Search Query.
- Identify and apply new Product list page features to manage Products more effectively.
Time to complete page: 30 minutes
Product Tailoring
You’re likely already aware that commercetools Composable Commerce lets you to manage Product information in multiple languages. But what if you want to display different descriptions or images for a Product based on the Store it’s being viewed in? With Product Tailoring, this is now possible!
Product Tailoring allows you to customize Product details for specific markets or brands, represented as Stores in your Project. Here’s how it can benefit you:
-
Enhanced targeting: Adapt Product names, descriptions, images, and attributes to better connect with specific Customer segments, enhancing their shopping experience.
-
Improved brand consistency: Align Product information with regional preferences and languages to maintain a cohesive brand presence across markets.
-
Increased visibility: Optimize Product data for different markets to boost search rankings and reach a broader audience.
-
Streamlined operations: Efficiently manage localized Product information within a unified platform, minimizing complexity and errors.
This feature makes it easier than ever to tailor your offerings and meet the unique needs of diverse markets.

As you can see in the preceding graphic, tailored data, once published, is used when viewing the Product in a Store. If some tailored data is missing, the original data is used as a fallback.
Tailored data can be managed directly in the Merchant Center. If you have at least one Store set up in your Project, all you have to do is select a Product from the Product list and select which Store you would like to use tailored data for, for example:
You can now manage tailored data for the selected Store:
Original data is visible for reference below the tailored data.
The last thing to do is to see how this Product looks when displayed within the context of the Store:
curl --get "https://api.{region}.commercetools.com/{projectKey}/in-store/key=b2c-retail-store/product-projections/key=amalia-rug" \
--header "Authorization: Bearer {bearerToken}" | jq
{
...
},
"name": {
"en-US": "Amalia Rug",
"en-GB": "Amalia Rug",
"de-DE": "Teppich \"Amalia\""
},
"description": {
"en-GB": "A B2C Retail Store bestseller! This round plush accent rug is designed to be soft...",
"en-US": "A round plush accent rug is designed to be soft and comfortable underfoot, with a thick and dense pile that provides a plush feel. The fibers are densely packed together, giving the rug a lush and luxurious feel. The rug is a great decorative accent in a bedroom, living room, or other area where a small touch of softness and comfort is desired. Because of their small size, round plush accent rugs are easy to move and reposition, making them a versatile addition to any home. They are also easy to clean and maintain, making them a practical choice for high-traffic areas. Overall, a round plush accent rug is a cozy and inviting addition to any room. Its soft texture and luxurious feel make it a popular choice for those who want to add a touch of comfort and style to their living space.",
}
...
As you can see in the response, the en-GB
description shows the tailored data from the screenshot, where the original description was used as a fallback value for the en-US
description.
Product Search
Effective product search isn’t just a technical feature—it’s a strategic advantage that directly influences customer satisfaction, conversion rates, and overall success in digital commerce.
You may already be familiar with Product-related endpoints that help manage Products (/products
), access specific Product Projections (/product-projections
), and search for Products with price selection functionality (/product-projections/search
). These tools are powerful, but what if you need to search for Products within a specific Product selection? Or prioritize certain Products in your search results? That’s where the Product Search endpoint comes in.
The Product Search endpoint offers greater flexibility and precision in defining search queries, which are specified in the body of the request. Unlike Product Projection Search, it also allows you to search across:
- Stores
- Product Selections
- Standalone Prices
Before diving in, you’ll need to check if Product Search is activated for your Project. This can be done by a simple API request to get your Project information:
curl --get https://api.{region}.commercetools.com/{projectKey} \
--header "Authorization: Bearer {bearerToken}" | jq
...
"productsSearch": {
"status": "Activated",
"lastModifiedAt": "2024-12-10T16:14:55.990Z",
"lastModifiedBy": {
"isPlatformClient": true
}
}
...
If Product Search is not activated, you can enable it by submitting an update request to your Project endpoint containing the changeProductIndexingEnabled
Update Action (make sure to note the Project version
from the previous GET
request):
curl https://api.{region}.commercetools.com/{projectKey} \
--header "Authorization: Bearer {bearerToken}" \
--header "Content-Type: application/json" \
--data-binary '{
"version": {projectVersion},
"actions": [
{
"action": "changeProductSearchIndexingEnabled",
"enabled": true,
"mode": "ProductsSearch"
}
]
}' | jq
Keep in mind that if Product Search is not used for 30 consecutive days, it is automatically deactivated and needs to be activated again as described previously.
The Product Search API is designed to be ID-first to provide high performance. This means that the query results contain only Product IDs (together with matching Product Variant SKUs when requested) by default, not the entire resource! This design prefers lower response times over completeness of data, which can still be achieved through application-side caches, GraphQL or Get ProductProjection by Id, or by providing Product Projection parameters within the Product Search API request itself.
Let’s jump straight into an example which will help to illustrate different elements of a Product Search query:
curl https://api.{region}.commercetools.com/{projectKey}/products/search \
--header "Authorization: Bearer {bearerToken}" \
--header "Content-Type: application/json" \
--data-binary '{
"query": {
"and": [
{
"fullText": {
"field": "name",
"language": "en-GB",
"value": "modern",
"caseInsensitive": true
}
},
{
"range": {
"field": "variants.availability.availableQuantity",
"gte": 50
}
},
{
"or": [
{
"wildcard": {
"field": "variants.sku",
"value": "M?P*01",
"caseInsensitive": true,
"boost": 2
}
},
{
"prefix": {
"field": "variants.sku",
"value": "BC",
"caseInsensitive": true
}
}
]
}
]
},
"markMatchingVariants": true
}' | jq
How can we interpret this query? This query is designed to find Products based on specific conditions across different fields, combining textual, numerical, and pattern-based searches. It combines three search conditions:
- Products whose
name
field in theen-GB
locale contains the word “modern”, ignoring case differences, using a fullText expression. - A range expression to only include products with a stock quantity (
variants.availability.availableQuantity
) of at least 50. - An
OR
condition, to match products wherein either thesku
of a variant matches the wildcard patternM?P*01
, boosted to prioritize these matches and show them at the top of the results, or thesku
starts with the prefixBC
. Both conditions are case-insensitive, making the matching process more flexible.
Finally, the markMatchingVariants
setting ensures that only the specific variants satisfying all conditions are highlighted in the search results, making it easier to pinpoint exactly which variants meet the criteria.
This combination of conditions demonstrates how to refine and customize search results using a mix of query expressions, compound expressions, and boosting.
You can see that this is indeed the case when looking at the response which returns Products and Variants that have the word “modern” in their English name, availability of at least 50 and a sku
either starting with BC
or matching the pattern M?P\*01
:
{
"total": 3,
"offset": 0,
"limit": 20,
"facets": [],
"results": [
{
"id": "5b827141-8e9e-49b1-a2b8-9f534e9bfd2b",
"matchingVariants": {
"allMatched": false,
"matchedVariants": [
{
"id": 1,
"sku": "MLP-01"
}
]
}
},
{
"id": "9cd5ab3a-f30d-4bcd-8779-af29176d422a",
"matchingVariants": {
"allMatched": false,
"matchedVariants": [
{
"id": 1,
"sku": "MCP-01"
}
]
}
},
{
"id": "7a86f775-6308-486b-a120-491a7f844b2d",
"matchingVariants": {
"allMatched": false,
"matchedVariants": [
{
"id": 1,
"sku": "BCOAS-08"
}
]
}
}
]
}
Let’s summarise what benefits the Product Search API offers for building storefront search experiences:
- Targeted Product indexing: It indexes a subset of Product data relevant for storefront search, such as product names, descriptions, variants, and prices, leading to faster query responses.
- Optimized for Product discovery: It's specifically designed for Product listing pages, category pages, and other discovery-focused scenarios.
- Powerful search features: It provides full-text search, filtering, faceting, and sorting capabilities, allowing for a comprehensive and user-friendly search experience.
- Lightweight responses: By default, it returns only product IDs, reducing response size and improving performance. You can then fetch detailed product information for displayed results using the returned IDs.
- Wider scopes and context: It allows you to search for Products across different Stores, and Product Selections with respect to both Embedded and Standalone Prices.
You can learn more about the Product Search API and its features in the Product Search API.
Product list page improvements
As mentioned in the 2024 release highlights, a lot of enhancements have been made to improve the way you can manage Products using the Product list page of the Merchant Center, including:
- Expanded Product Variant view with customisable columns
- Product Variant duplication
- Product Import/Export
Products can now be expanded to reveal valuable information about their variants. What information will be displayed can now be customized thanks to the new Product Variant column manager:
Specify which columns you would like to see in the summary:
Enjoy viewing the information you need all in one place:
Speaking of Product Variants, duplicating them is now very easy with a new Duplicate
button. Perfect if you want to create new Variants based on the Master Variant in a fast way, for example:
Importing/exporting of Products and Inventories can now also be done directly from the Product list page as well - just select which Products you would like to include and select the appropriate action: