# Products Learn how to manage your Product catalog in a Project. Only users in Teams with appropriate [permissions](https://docs.commercetools.com/merchant-center/user-permissions.md#products) can view and edit Products. The permissions are managed by the Administrators Team in your Organization. The Product list displays all Products that exist in your Project and lets you do the following: - add and remove Products within your Project - view and edit Product details - publish and unpublish Products to manage their visibility in your stores - export your current Product list to make it transferable between Organizations and Projects and import it back - search through your Products using the powerful search and filters in the view Learn more about Products in our self-paced Product data modeling module. ## Create a Product 1. Go to Products > Add product. 2. Select a Product type from the list of [Product types](https://docs.commercetools.com/merchant-center/product-types.md) created in your Project. Product Types created from your [Smart Data Modeler](https://docs.commercetools.com/merchant-center/product-types.md#use-smart-data-modeler-to-suggest-product-types-and-attributes) proposal appear in this list after you import the proposal in Smart Data Modeler. 3. Click Next. 4. Enter the details for the Product. - For Product name, enter localized names for the Product. - For Product description, enter localized descriptions for the Product. - For Product key, enter a unique identifier value for the Product. - For Product categories, select the [Categories](https://docs.commercetools.com/merchant-center/categories.md) for the Product. If the Recommended categories [setting](https://docs.commercetools.com/merchant-center/project-settings.md#miscellaneous) is enabled for your Project, Categories will be generated upon creating the Product. - For Product price mode, select the type of Price to be used for the Product at checkout. - For Tax category, select the [Tax Category](https://docs.commercetools.com/merchant-center/project-settings.md#add-a-tax-category) for the Product. 5. Enter custom [attributes](https://docs.commercetools.com/merchant-center/product-types.md) configured for your Project. Fill in at least one locale configured for your Organization. 6. Click Next. 7. Click Add variant to add Product Variants for the Product. - Optional: For SKU, enter a SKU value for the Product Variant. - Optional: For Variant key, enter a unique identifier value for the Product Variant. - Enter the details for the Attributes. - Click Save. Treat the `sku` values as immutable identifiers. Finalize SKU naming before assigning Products to Product Selections to avoid background reconciliation and data migration work. 8. Click Next. 9. Enter localized keywords for your internal storefront search. 10. Add external search information for search engine optimization (SEO). - For URL slug, enter localized slugs for the Product to be used by external search engines. - Optional: For Meta title, enter localized meta titles for the Product to be used by external search engines. To use the same names for the Product, as defined earlier, click Use localized product name. - Optional: For Meta description, enter localized descriptions for the Product to be used by external search engines. To use the same descriptions for the Product, as defined earlier, click Use localized product description. 11. As a rule, first Product Variant created is automatically set to the master Product Variant. Click the Set to master button on the desired Product Variant page to promote a Product Variant to master. 12. Click Save. You can now add images, Prices, Inventory, and store-based tailored data for the Product. ### Add images 1. Go to Products > Product list. 2. Select a Product and click the Variants tab. 3. Select a Product Variant and click the Images tab. 4. Click Add image and upload an image of your Product Variant. 5. Close the Product Variant pane to save your changes. Merchant Center supports only .jpg, .png, and .gif image formats. The maximum file size is 10 MB per image. Image filenames must not contain spaces. ### Add Prices 1. Select a Product Variant and click the Prices tab. 2. Click Add embedded price and enter the price information. - Optional: For Price key, enter a unique identifier value for the Embedded Price. - For Price, select the currency and enter the money value. - Optional: You can add additional constraints for your Embedded Price. - Optional: To make the Embedded Price available only to Customers in a specific location, select a country from the Country drop-down. - Optional: To make the Embedded Price available only to a specific group of Customers, select a Customer Group from the Customer group drop-down. - Optional: To make the Embedded Price available only for Products sold through a specific Channel, select a Channel from the Channel drop-down. - Optional: To make the Embedded Price available for a specific time period, select the dates and time for Price valid from and Price valid to. 3. If present, select a [Custom Field](https://docs.commercetools.com/api/projects/custom-fields.md) for the Price and enter a value for it. 4. To save your changes, click Save and then close the Product Variant pane. ### Add Inventory 1. Select a Product Variant and click the Inventory tab. 2. Click Add inventory and enter the Inventory details. - Optional: For Channel, select a Channel; each Channel can be assigned to an Inventory only once. - For Quantity, enter the total stock units available for the Product Variant. - Optional: For Average restock period (days), enter the number of days it takes to restock the Product Variant. - Optional: For Expected delivery, enter the expected date and time of restock of the Product Variant. 3. If present, select a [Custom Field](https://docs.commercetools.com/api/projects/custom-fields.md) for the Inventory and enter a value for it. 4. To save your changes, click Save and then close the Product Variant pane. ### Add tailored data for a Product You can tailor your product information for different brands or regions based on your business requirements. This increases visibility, customer loyalty, and orders. Tailored data is associated with a Product via the Product's key. Deleting a Product, or changing the Product key, will delete all associated tailored data. To add tailored data for a Product, do the following: 1. Go to Products > Product list and select a Product. 2. On the Product details page, select a Store from the drop-down. Image url: https://docs.commercetools.com/merchant-center/images/products/store-selection-dropdown.png Alt text: Store selection drop-down on the Product details page. 3. Enter the tailored values for Product name, Product description, Key for tailored data, and any Product Attributes. All tailored fields are optional. Fields left empty fall back to the default Product data when published. 4. Click Save tailored values in store. 5. To tailor meta information for the Product, click the Int. / Ext. Search tab, enter the tailored values for URL slug, Meta title, and Meta description. 6. Click Save. To add tailored data for a Product Variant, do the following: 1. Go to Products > Product list and select a Product. 2. Click the Variants tab and select a Product Variant. 3. Select a Store from the drop-down. 4. To tailor Attributes, enter the tailored values for the Attributes and click Save tailored values in store. 5. To tailor images, click the Images tab and click Add image by URL. Upload an image and click Save tailored values in store. For tailored Product Projections, you can only upload an image using the [Product Tailoring API](https://docs.commercetools.com/api/projects/product-tailoring.md#upload-product-tailoring-image). After saving your tailored Product Projection, you can manage the visibility of tailored values. ### Publish tailored data 1. Go to Products > Product list and select a Product. 2. To publish the tailored data, select store-based values. If fallback values is selected, the default (original) Product data is available for the Product (Variant) on your storefront. Image url: https://docs.commercetools.com/merchant-center/images/products/publish-tailored-data.png Alt text: Publish tailored data for the Store. The following diagram shows how store-based tailored values relate to and fall back to the underlying Product and Variant data. Image url: https://docs.commercetools.com/merchant-center/images/products/product-and-tailoring-relations.svg Alt text: Diagram showing how tailored Product and Product Variant fields override entered values and fall back to default data for empty fields. ## Manage Products You can perform the same action on multiple Products simultaneously or export a selection of Products from the Product list. For example, this can be useful in conjunction with the search feature to publish all the Products in a specific campaign or sale. To perform bulk Product actions, select any of the following actions from the Actions drop-down list: - Publish: publishes the selected Products. - Unpublish: unpublishes the selected Products. - Delete: deletes the selected Products. - Bulk edit Attributes: updates in bulk the Product Attributes and Variant Attributes (that have the SameForAll constraint) of one or more selected Products. - Bulk edit Categories: updates the selected Product's Categories in bulk. - Bulk assign Products to Product Selections: assigns Products to Product Selections in bulk. To select Products on different pages, you can pin up to 20 Products to the top of the table; it allows you to navigate through other pages of the Product list. ### Reorder Attributes You can reorder only the Product Attributes and Variant Attributes (which have the SameForAll constraint) that aren't assigned to an Attribute Group. To reorder Attributes, do the following: 1. Go to Products > Product list. 2. Select a Product from the Product details page. 3. In the Product Attributes section, click Reorder and drag the Attribute fields accordingly. You can reorder fields only if no filter is applied for the Attribute fields. 4. Click Save. 5. In the Update your attribute order dialog, select if you want to save the field order only for the selected Product or for all Products of the respective Product Type, and then click Confirm. ### Review modified Products Use the Review modified products page to monitor the changes made to published Products. Any changes made to unpublished Products are not displayed on this page. When you modify published Products, their status will be updated as Modified. This reflects that the changes made to the Products are staged and not published. You can review all your unpublished changes to published Products by navigating to Products > Review modified products. Image url: https://docs.commercetools.com/merchant-center/images/products/modified-products-pane.png Alt text: Layout of modified Products. You can edit, revert, or publish your changes. - To revert or publish all changes on the page, click Revert all or Publish all and confirm the action. - To revert or publish all changes to a single Product, click Revert or Publish. If one or more fields are edited or reverted, save your changes before reverting or publishing the changes. - To revert individual changes, click Revert to published. If the Products to be displayed are large in data or have a complex product model, the Review modified products page can become slow or even unresponsive. In such case, you can reduce the number of Products displayed at once to improve the performance of the page like so: 1. Go to Project Settings. 2. Open the Miscellaneous tab. 3. Enable the Reduce page size in “Review modified products” view toggle. 4. Visit the Review modified products page and select one of the reduced page size options. ### Manage Products in Categories Before adding or removing Products from Categories, you must index your product catalog. To index, go to Products > Product list and click Index my product catalog now. After this, proceed to editing Products in Categories: 1. Go to Products > Product list. 2. Select the Products and, in the Actions drop-down menu, select Bulk edit categories. 3. Select Categories to add or remove and click Next. 4. On the confirmation dialog, confirm the action. After the update is complete, the update summary is displayed. To edit or revert the change, see [Review Modified Products](https://docs.commercetools.com/merchant-center/product-list.md#review-modified-products). ## Search for Products You can perform either a basic (default) or advanced search for Products. If you are a new user, then we recommend that you use the basic search mode. To activate the advanced search mode, click the angle brackets icon (`< >`). To search for Products, you must index your Product list in your Project. The indexing time can vary depending on the size of the Product list. Only members of the [Administrators Team](https://docs.commercetools.com/merchant-center/administrators-team.md) can index a Project. ### Basic Product search With basic search, you can search for Products across all fields. You can also filter your search query by Product name, Description, Slug, SKU, Product key, Variant key, or [Product Attribute](https://docs.commercetools.com/merchant-center/products.md#search-by-product-attributes). The search query supports multiple values separated by either commas or spaces. For example, `shoe`, `hat`, `SH123`, or `shoe hat SH123`. This search method supports only prefix matching. As a result, you must specify the exact starting characters of the values in your search query. #### Search by Product Attributes You can filter your Product search by custom Product Attributes. To do this, you must first make the Product Attribute columns visible by following these steps: 1. Go to Products > Product list. 2. Click the Table settings icon, and then select Product columns. 3. Move the required Product Attributes from the Hidden columns list to the Visible columns list. After a Product Attribute column is visible and if that Product Attribute is searchable (indicated by a search icon), it will be displayed in the Search drop-down list. You can then refine your Product search by using the Product Attribute. ### Advanced Product search The advanced search mode gives you more control over your search by allowing you to compose a detailed query in a GraphQL-like query language. After entering your query, click Search products to execute it. An advanced search query consists of the following top-level objects: - `query` describes the data to be searched for and filters to be applied to results. - `filter` (optional) defines the way to filter data found via `query`. - `sort` (optional) describes the sorting of search results. - `pagination` (optional) describes the pagination of search results. In the examples below, you can see complete simple queries. Find products with a specific price: ```json { "query": { "and": [ { "exact": { "field": "variants.prices.currencyCode", "value": "EUR" } }, { "exact": { "field": "variants.prices.centAmount", "value": 2222 } } ] } } ``` Find a product with a `shirtColor` attribute value of `Green`: ```json { "query": { "fullText": { "field": "variants.attributes.shirtColor", "value": "Green", "attributeType": "set_text" } } } ``` #### Query object A query object consists of the following: - A compound expression wrapper defining relations between expressions. You can use only one compound expression per query. - A query expression defining fields and values to search across. You can use multiple different query expressions that will be combined with the compound expression. - A set of query fields within the query expression. The `field` and `value` fields are required, whereas the other fields are optional. ##### Compound expressions Compound expression wrapper has the following options: - `and`: only matches Products that match all query expressions. - `or`: matches Products that match at least one query expression. - `not`: matches Products that don't match any query expressions. - `not` expressions don't work on `nested` fields. - `not` expressions don't work on `array` fields. For example, the following query only matches Product Variants with a price of 222.20 Euro. Hence, the `currencyCode` must be `EUR` and the `centAmount` must be `2222`. ```json { "query": { "and": [ { "exact": { "field": "variants.prices.currencyCode", "value": "EUR" } }, { "exact": { "field": "variants.prices.centAmount", "value": 2222 } } ] } } ``` ##### Query expressions A query expression wraps the actual data of a query and defines how a search is conducted. ```json { "query" { "or": [ "exact": { //This is a query expression ... }, "fullText": { //This is a query expression ... } ] } } ``` You can use the following types: - `fullText` - `exact` - `prefix` - `range` - `wildcard` - `exists` ###### fullText A `fullText` query performs full-text searches of fields. Full-text searches use the fields specified in the [Query body](https://docs.commercetools.com/merchant-center/products.md#query-body) and have the option of using the `mustMatch` field. For example, the following query searches for Products that have either `green` or `handbag` in their name. Hence, Products with the name `yellow handbag` and `green shoes` match. ``` { "query": { "fullText": { "field": "name", "language": "en", "value": "green handbag", "mustMatch": "any" } } } ``` ###### exact An`exact` query searches for exact values only. Exact searches use the fields specified in the [Query body](https://docs.commercetools.com/merchant-center/products.md#query-body) and have the option of using the `caseInsensitive` field. For example, the following query returns any SKU that exactly matches the `value` field. Hence, `Chiquita_yellow_123` and `chiquita_YELLOW_123` match, but not `chiquita_yellow_1234`. ``` { "query": { "exact": { "field": "variants.sku", "value": "chiquita_yellow_123", "caseInsensitive": true } } } ``` ###### prefix A `prefix` query searches for values of fields that begin with the specified prefix. Prefix searches use the fields specified in the [Query body](https://docs.commercetools.com/merchant-center/products.md#query-body) and have the option of using the `caseInsensitive` field. For example, the following search returns Products that begin with `commerceto`. Hence, Products that begin with `commerce` do not match. ``` { "query": { "prefix": { "field": "variants.attributes.brand", "attributeType": "text", "value": "commerceto", "caseInsensitive": true } } } ``` ###### range A `range` query only matches values between specified boundaries and works with date and number values. Range queries use the following fields: - `field` - String - Required Any DateTime field, like `lastModifiedAt` - `gte` - [DateTime](https://docs.commercetools.com/api/types.md#datetime) - Optional Lower bound of the range query. If omitted, the query body must have an `lte` specified and searches from the `lte` date backwards. - `lte` - [DateTime](https://docs.commercetools.com/api/types.md#datetime) - Optional Upper bound of the range query. If omitted, the query body must have a `gte` specified and searches from the `gte` date forwards. For example, the following query searches for Products last modified between 25 August 2019 and 26 August 2019. ``` { "query": { "range": { "field": "lastModifiedAt", "gte": "2019-08-25T12:00:00.000Z", "lte": "2019-08-26T12:00:00.000Z" } } } ``` ###### wildcard A `wildcard` query searches for values of fields that match the specified wildcard expression. Wildcard searches use the fields specified in the [Query body](https://docs.commercetools.com/merchant-center/products.md#query-body) and have the option of using the `caseInsensitive` field. In wildcard searches, the following characters have a special meaning when used as a part of the `value`: - `*` for one or more characters - `$` for exactly one character. ``` { "query": { "wildcard": { "field": "name", "value": "ki*y" } } } ``` ``` { "query": { "wildcard": { "field": "name", "value": "kit$y", "caseInsensitive": true } } } ``` ###### exists A `exists` query searches for fields that have a non-`null` value. The only field required is `field`. ``` { "query": { "exists": { "field": "name" } } } ``` ##### Query body A query expression can use the following fields in its body: - `field` - String - Required The name of the field to search for. For more information, see [Searchable fields](https://docs.commercetools.com/merchant-center/products.md#searchable-fields). - `value` - String - Required The value to search for. - `language` - String - Optional An [IETF language tag](https://en.wikipedia.org/wiki/IETF_language_tag). Use only when searching for Product data in a specific language. - `attributeType` - String - Optional The Attribute type. Use only when the `field` specified is a Variant Attribute (`product.attribute.`). Allowed values are: - `text`, `set_text` - `boolean`, `set_boolean` - `ltext`, `set_ltext` - `enum` - `lenum` - `number`, `set_number` - `money`, `set_money` - `date`, `set_date` - `time`, `set_time` - `datetime`, `set_datetime` - `reference`, `set_reference` - `boost` - Number - Optional Makes a query expression count more towards the relevance score in relation to other query expressions. - `mustMatch` - String - Optional Use with `fullText` and `fuzzy` searches only. It can either be `any` or `all`. - If you use `all`, and search with a value of `yellow car`, the full text search matches Products that have both `yellow` and `car` anywhere in the searched field. - If you use `any`, the full text search matches Products that have `yellow` or `car` in the searched field. - `caseInsensitive` - Boolean - Optional Use with `exact`, `prefix` and `wildcard` searches only. If `true`, the search is treated as case insensitive. For example, a case insensitive search for `Yellow Car` matches a field with `yellow car`. ###### Searchable fields You can access any direct field of a Product Projection, Product Type or Attribute definition, or a sub-field of a referenced or nested object in some cases. The field accessed must be a [JSON data type](https://www.json.org/json-en.html). The only exception is `LocalizedString` fields, which are treated differently. You can access any field on a [ProductProjection](https://docs.commercetools.com/urn?urn=ctp%3Aapi%3Atype%3AProductProjection), which is: - a simple JSON data type, such as `id` or `key`. - a field on a referenced type or array of a type, such as `variants.sku`, or `taxCategory.name`. - a [LocalizedString](https://docs.commercetools.com/api/types.md#localizedstring). If so, use the `language` field to specify the language to be searched in. - a field on a Product Variant's [Embedded Price](https://docs.commercetools.com/api/types.md#price), accessed using the format `variants.prices.currencyCode`, where `currencyCode` is the field accessed. - a Product Variant [Attribute](https://docs.commercetools.com/urn?urn=ctp%3Aapi%3Atype%3AAttribute), accessed using `variants.attributes.`. If so, use the `attributeType` field to specify the attribute type. You can access any field on a [ProductType](https://docs.commercetools.com/urn?urn=ctp%3Aapi%3Atype%3AProductType), which is: - a simple JSON data type, such as `id` or `key`. - a [LocalizedString](https://docs.commercetools.com/api/types.md#localizedstring). If so, use the `language` field to specify the language to search in. - Any field on an [AttributeDefinition](https://docs.commercetools.com/urn?urn=ctp%3Aapi%3Atype%3AAttributeDefinition), accessed using `attributes.name` or `attributes.label`, where `name` and `label` are the fields being accessed. ###### boost field When you provide more than one query expression to a query, the `boost` field adds more importance to a query result than the others. For example, in the following query, results that have `butter` in the `name` field are more important than those that have `butter` in the `description` field. ```json { "query": { "or": [ { "fullText": { "field": "name", "language": "en", "value": "butter", "boost": 2 } }, { "fullText": { "field": "description", "language": "en", "value": "butter" } } ] } } ``` #### Filter object A query can have a `filter` section. The `filter` contains `fullText`, `exact`, or `prefix` query expressions, as described above, and filters for the field described. All sub-expressions contained in a filter are connected with `and` logic. All sub-expressions of `query` count towards the score except for `filter`. ```json { "query": { "and": [ { ... //query expressions here }, { "filter": [ { "exact": { "field": "categories.id", "value": "cd2c2b6b" } } ] } ] }, ``` #### Sort object A query can have the optional `sort` object after it. The `sort` object defines how the query is sorted and displayed in the Product List. The `sort` object contains the following: - `field` - String - Required The name of the field to sort by. For more information, see [Searchable fields](https://docs.commercetools.com/merchant-center/products.md#searchable-fields). You can also use the internal field `score`, in addition to the `internal` field set to true, to sort by the weighted score. - `order` - String - Required The sort order. Can either be `asc` (ascending) or `desc` (descending). - `mode` - String - Optional The sort mode to use. Allowed values are: - `min`: uses the minimum of all available values. - `max`: uses the maximum of all available values. - `avg`: uses the average of all available values. - `sum`: uses the sum of all available values. - `attributeType` - String - Optional The attribute type. Use only when the `field` is a Product Attribute. - `internal` - Boolean - Optional Set this to `true` when `field` is set to `score`. ```json { "query": { ... }, "sort": { "field": "name", "order": "desc" } } ``` #### Pagination object A query can have the optional pagination information that includes the following fields: - `limit` - Number - Required Set the upper limit of items to return. - `offset` - Number - Required Set the offset from which the query is evaluated. ## Import and export For more information about importing resources into the Merchant Center, see [Import data](https://docs.commercetools.com/merchant-center/import-data.md). ### Import Products To import Products into the Merchant Center, do the following: 1. Go to Products > Product list. 2. Click the Actions drop-down and select Import products. 3. In the Import products by CSV window, choose a CSV file on your computer to upload, and click Upload and preview. - Select the Publish all products in the file checkbox to update the current and staged representation of existing Products, and publish new Products. If not selected, the imported data will only update the staged representation of existing Products and new Products created by the import process are not published. 4. After the file is uploaded and validated, verify the rows and columns to be imported, and click Continue. 5. Click Start import to confirm the import process. As the import process is a background task, you do not need to wait for it to complete. To check the import status, go to Operations > Import. ### Import Inventory 1. Go to Products > Product list. 2. Click the Actions drop-down and select Import inventories. 3. In the Import inventories by CSV window, choose a CSV file on your computer to upload, and click Upload and preview. 4. After the file is uploaded and validated, verify the rows and columns to be imported, and click Continue. 5. Click Start import to confirm the import process. As the import process is a background task, you do not need to wait for it to complete. To check the import status, go to Operations > Import. ### Export Products or Inventory See [export Products](https://docs.commercetools.com/merchant-center/export-data.md#export-products) and [export Inventory](https://docs.commercetools.com/merchant-center/export-data.md#export-inventory). ### Bulk unpublish via CSV import For more information about importing resources into the Merchant Center, see [Import data](https://docs.commercetools.com/merchant-center/import-data.md). 1. Go to Products > Product list. 2. Click the Actions drop-down and select Bulk unpublish via CSV. 3. In the Bulk unpublish via CSV window, choose a CSV file on your computer to upload, and click Upload and preview. 4. After the file is uploaded and validated, verify the number of Products to be unpublished, and click Continue. 5. Click Start bulk unpublish to confirm the import process. As the import process is a background task, you do not need to wait for it to complete. To check the import status, go to Operations > Import. ### Bulk delete via CSV import For more information about importing resources into the Merchant Center, see [Import data](https://docs.commercetools.com/merchant-center/import-data.md). Only unpublished Products can be bulk deleted. This action cannot be undone. After you delete a Product, you cannot recover it. 1. Go to Products > Product list. 2. Click the Actions drop-down and select Bulk delete via CSV. 3. In the Bulk delete via CSV window, choose a CSV file on your computer to upload, and click Upload and preview. 4. After the file is uploaded and validated, verify the number of Products to be deleted, and click Continue. 5. Click Start bulk delete to confirm the import process. As the import process is a background task, you do not need to wait for it to complete. To check the import status, go to Operations > Import. ## Related pages - [Section overview page](https://docs.commercetools.com/merchant-center.md) - [Previous page: Product Types and Attributes](https://docs.commercetools.com/merchant-center/product-types.md) - [Next page: Product Selections](https://docs.commercetools.com/merchant-center/product-selections.md)