# Welcome Welcome. # Site errors The site errors endpoint lets you retrieve the most recent errors for a site or look up errors from a specific process run. Get [#get] Use a GET request to list errors for a site. See [Sites](/docs/platform-api/sites) for how to identify sites. ```shell curl https://platform-api.productsup.io/platform/v2/sites/123/errors ``` ```json { "success": true, "Errors": [ { "id": "1802017", "pid": "537cb0659a7dc", "error": "10012", "data": {"FTP Host":"sftp://example.org","User":"sftpuser"}, "site_id": "123", "datetime": "2003-11-15 00:00:00", "type": "Error", "classification": "medium", "links": [{...}] }, ... ] } ``` HTTP request [#http-request] `GET https://platform-api.productsup.io/platform/v2/sites//errors` `GET https://platform-api.productsup.io/platform/v2/sites//errors?pid=&limit=&offset=` URL parameters [#url-parameters] | Name | Type | Description | | :------- | :------ | :-------------------------- | | `siteId` | integer | Site to retrieve errors for | Optional query parameters [#optional-query-parameters] | Name | Example | Default | Description | | :------- | :---------- | :------- | :------------------------------------------ | | `pid` | `abc456def` | (latest) | Process ID. Defaults to the latest process. | | `limit` | `10` | `50` | Maximum number of results | | `offset` | `20` | `0` | Results begin at this position | Response fields [#response-fields] | Field | Type | Description | | :-------- | :------ | :----------------------------------------------------------- | | `success` | boolean | Indicates request status | | `Errors` | array | List of [errors](#platform-api-site-errors-get-error-fields) | Error fields [#error-fields] | Field | Type | Description | | :--------------- | :------ | :----------------------------------------------------------------------- | | `id` | integer | Internal identifier | | `pid` | string | Process identifier | | `error` | integer | Error identifier | | `data` | array | Additional information about the error | | `site_id` | integer | Site identifier | | `message` | string | User-facing error message | | `datetime` | string | Date and time the error occurred | | `type` | string | Type of error (`Error`, `Warning`, or `Info`) | | `classification` | string | Severity of the error (`low`, `medium`, or `high`) | | `links` | array | See [link fields](#platform-api-site-errors-get-links-fields-and-values) | Links fields and values [#links-fields-and-values] | Name | Description | | :----- | :----------------------------------------------------------------------- | | `self` | Link to the [error endpoint](#platform-api-site-errors-get-http-request) | # Cursor pagination import { Callout } from "fumadocs-ui/components/callout"; The Platform API uses cursor-based pagination for large result sets, available on GET requests only. HTTP request [#http-request] ```shell GET https://platform-api.productsup.io/platform/v2/....?limit=number1&previous=number2&cursor=number3 ``` The response includes a `meta` object containing pagination details: ```json { "success": true, "Entities": [ { } ], "meta": { "cursor": { "current": 0, "prev": 0, "next": 1, "count": 1 } } } ``` Cursor parameters [#cursor-parameters] | Parameter | Type | Default | Description | | :--------- | :------ | :------ | :------------------------------------------------------------- | | `limit` | integer | 50 | Maximum number of entities per page | | `cursor` | integer | 0 | Cursor identifier to return entities with IDs after this value | | `previous` | integer | 0 | Return the previous entity ID, or 0 if none exists | Response fields [#response-fields] | Field | Type | Description | | :----- | :---- | :----------------------------------------------------------------- | | `meta` | array | See [cursor fields](#platform-api-cursor-pagination-cursor-fields) | Cursor fields [#cursor-fields] | Field | Type | Description | | :-------- | :------ | :-------------------------------------------------- | | `current` | integer | The current ID of the cursor | | `prev` | integer | The previous entity ID | | `next` | integer | The ID of the next entity page starter | | `count` | integer | Number of entities returned in the current response | # API specification The following resources are available for the Platform API: * [OpenAPI specification file for Platform API](/platform-api/openapi.yaml) OpenAPI specification files can be used with tools such as Swagger UI, Postman, or any OpenAPI-compatible client generator to explore and interact with the API. # Introduction import { Callout } from "fumadocs-ui/components/callout"; The Platform API is a REST API that provides programmatic access to account management features such as managing projects and sites, listing site errors, triggering processes, and more. The Platform API does not have a PHP library. Productsup maintains an OpenAPI specification file which you can use to generate a client. See [API specification](/docs/platform-api/resources) to download it. Version [#version] Current stable version: 2. Always use the latest version of the API unless otherwise instructed. What you can do [#what-you-can-do] | Resource | Operations | | :---------------------------------------------------- | :----------------------------------------- | | [Projects](/docs/platform-api/projects) | List, create, edit, and delete projects | | [Sites](/docs/platform-api/sites) | List, create, copy, edit, and delete sites | | [Site tags](/docs/platform-api/site-tags) | List, create, and delete site tags | | [Site errors](/docs/platform-api/site-errors) | Retrieve errors for a site or process run | | [Channels](/docs/platform-api/channels) | List channels and retrieve channel details | | [Channel history](/docs/platform-api/channel-history) | Retrieve channel export history | | [Import history](/docs/platform-api/import-history) | Retrieve import history for a site | | [Product data read](/docs/platform-api/product-read) | Read product data from a site stage | | [Process](/docs/platform-api/process) | Trigger import and export processes | | [Status](/docs/platform-api/status) | Check the processing status of a site | System status [#system-status] The [Productsup status page](https://status.productsup.io/) provides real-time and historical data on system performance. It also publishes messages for service interruptions. Subscribe on the page to receive notifications through your preferred channel. # Status import { Callout } from "fumadocs-ui/components/callout"; The status endpoint returns the current processing state of a site for a given process identifier (PID). You obtain a PID when you call the [Process endpoint](/docs/platform-api/process#platform-api-process-data-post). The platform validates only the PID format — it does not check whether the PID exists. If you pass a valid but non-existent PID, the status will always be `queued`. Get [#get] ```shell curl -i -L -X GET \ 'https://platform-api.productsup.io/platform/v2/sites//status/' ``` ```json { "success": true, "status": "failed", "links": [ { "errors": "https://platform-api.productsup.io/platform/v2/sites//errors?pid=" }, { "self": "https://platform-api.productsup.io/platform/v2/sites//status/" } ] } ``` HTTP request [#http-request] `GET https://platform-api.productsup.io/platform/v2/sites//status/` URL parameters [#url-parameters] | Field | Type | Description | | :------- | :------ | :---------------------------- | | `siteId` | integer | Site to which the PID belongs | | `pid` | string | Process identifier to check | Response fields [#response-fields] | Field | Type | Description | | :-------- | :------ | :---------------------------------------------------------------------------------------------------------------- | | `success` | boolean | Indicates request status | | `status` | string | See [status values](#platform-api-status-get-status-value-explanation) | | `links` | array | Link to this resource and, when status is `failed`, to the [site errors](/docs/platform-api/site-errors) resource | Status values [#status-values] | Value | Description | | :-------- | :------------------------------------------------------------------------------------------- | | `queued` | The PID is valid but the site has not started processing yet. | | `running` | The platform is currently processing the site's content. | | `success` | Processing completed without errors. | | `failed` | Processing completed with errors. Use the `errors` link in the response to retrieve details. | # API errors The Platform API uses standard HTTP status codes to communicate request outcomes. | Status code | Name | Description | | :---------- | :-------------------- | :--------------------------------------------------------------------------------------- | | 200 | OK | The request succeeded. | | 201 | Created | The resource was created. | | 400 | Bad Request | The request could not be processed. Check the request format and parameters. | | 401 | Unauthorized | Authentication failed. Verify your `X-Auth-Token` header. | | 403 | Forbidden | You do not have permission to access this resource. | | 404 | Not Found | The requested resource does not exist. | | 409 | Conflict | The request conflicts with the current state of the resource. | | 422 | Unprocessable Entity | The request was well-formed but contains semantic errors. | | 429 | Too Many Requests | The rate limit has been exceeded. See [rate limiting](/docs/platform-api/rate-limiting). | | 500 | Internal Server Error | An unexpected error occurred. Retry after a short delay. | | 503 | Service Unavailable | The service is temporarily unavailable. Retry after a short delay. | For `5xx` errors and transient failures such as `408` (Request Timeout) and `429` (Too Many Requests), implement retries with exponential backoff. See [rate limiting](/docs/platform-api/rate-limiting#platform-api-rate-limiting-retry-and-backoff) for guidelines. # Product data read import { Callout } from "fumadocs-ui/components/callout"; The product data read endpoint lets you retrieve product data from a site at a specific processing stage. This endpoint is rate-limited to 60 requests per minute. Depending on the complexity of the filter, the database size, and the number of columns, requests can take several minutes. Do not send concurrent requests — send consecutive requests only. Get [#get] ```shell curl "https://platform-api.productsup.io/product/v2/site/123/stage/intermediate/0\ ?filter=id+%3C%3E+%27%27\ &limit=5000\ &offset=0\ &fields%5B0%5D=id\ &fields%5B1%5D=gtin\ &hidden=0" ``` ```json { "success": true, "products": [{ "id": "123", "gtin": "42" }] } ``` HTTP request — get product data [#http-request--get-product-data] `GET https://platform-api.productsup.io/product/v2/site//stage//` URL parameters [#url-parameters] | Field | Type | Description | | :---------- | :------ | :------------------------------------------------------------------------------------------------- | | `siteId` | integer | Site identifier | | `stageName` | string | See [stage names](#platform-api-product-data-read-get-stage-names) | | `stageId` | integer | Export or channel ID for export and channel stages. Set to `0` for import and intermediate stages. | Stage names [#stage-names] Each stage represents a point in the processing pipeline where product data is available. Transformations accumulate as data moves through the stages. | Name | Description | | :------------- | :-------------------------------------------------------------- | | `import` | Data as it arrives immediately after an API upload | | `intermediate` | Data after generic transformations, applied to all product data | | `export` | Data after export-specific transformations | | `channel` | Data after channel-specific transformations | Exports and channels serve similar purposes. Productsup no longer creates new exports — use channels for new configurations. Query parameters [#query-parameters] | Name | Type | Default | Description | | :------- | :--------- | :--------- | :------------------------------------------------------------------- | | `limit` | integer | `5000` | Maximum number of products to return | | `offset` | integer | `0` | Number of products to skip | | `fields` | array | all fields | Array of field names to include in the response | | `hidden` | `0` or `1` | `0` | Set to `1` to include hidden fields (fields not included in exports) | | `filter` | string | none | SQL-syntax condition to filter products | Response fields [#response-fields] | Field | Type | Description | | :--------- | :------ | :--------------------------------------------------------------- | | `success` | boolean | Indicates request status | | `products` | array | List of product records, each containing at least an `id` column | HTTP request — get product data properties [#http-request--get-product-data-properties] `GET https://platform-api.productsup.io/product/v2/site//stage///properties` ```shell curl https://platform-api.productsup.io/product/v2/site/123/stage/intermediate/0/properties/ ``` ```json { "success": true, "columns": ["id", "gtin", "price", ...], "products": 42 } ``` Use the same URL parameters as the main product data endpoint. The response includes the available columns and the total product count for the stage. | Field | Type | Description | | :--------- | :------ | :--------------------------------------- | | `success` | boolean | Indicates request status | | `columns` | array | Columns available in the data set | | `products` | integer | Total number of products in the data set | Response status codes [#response-status-codes] | Code | Message | Details | | :--- | :---------------- | :----------------------------------------------------------------------------------------------------------------- | | 200 | — | Request succeeded | | 429 | Too many attempts | The API is rate-limiting your request. See [rate limiting](/docs/platform-api/rate-limiting) for more information. | # Channels import { Callout } from "fumadocs-ui/components/callout"; Channels are the export destinations for your data — for example, Google Shopping or Amazon. Get [#get] Use a GET request to list all channels for a site or retrieve a specific channel. ```shell curl https://platform-api.productsup.io/platform/v2/sites/123/channels ``` ```shell curl https://platform-api.productsup.io/platform/v2/sites/123/channels/321 ``` ```json { "success": true, "Channels": [ { "id": "321", "site_id": "123", "channel_id": "111", "name": "Criteo DE", "export_name": "Criteo", "active": true, "filename": "criteo_de_1.csv", "filenames": [ { "type": null, "filename": "criteo_de_1.csv" }, { "type": null, "filename": "criteo_de_2.csv" } ], "feed_destinations": { "4711": { "destination_id": 12, "name": "Criteo feed - EU bucket", "destination_name": "Google Merchant Center FTP", "active": true, "urls": [ "https://transport.productsup.io/abc123/channel/321/criteo_de.csv" ] }, "4712": { "destination_id": 12, "name": "Criteo feed - US bucket", "destination_name": "Google Merchant Center FTP", "active": false, "urls": [] }, "4713": { "destination_id": 47, "name": "Amazon S3", "destination_name": "Amazon S3", "active": false, "urls": [] } }, "links": [...] }, { "id": "541", "site_id": "123", "channel_id": "222", "name": "Zanox DE", "export_name": "FZanox", "active": false, "filename": null, "filenames": [], "feed_destinations": {}, "links": [...] } ] } ``` Get all channels for a site [#get-all-channels-for-a-site] `GET https://platform-api.productsup.io/platform/v2/sites//channels` | Field | Type | Description | | :------- | :------ | :------------------------ | | `siteId` | integer | Site to list channels for | Get a channel by its identifier [#get-a-channel-by-its-identifier] `GET https://platform-api.productsup.io/platform/v2/sites//channels/` | Field | Type | Description | | :---------- | :------ | :---------------------------------------------------- | | `siteId` | integer | Site the channel belongs to | | `channelId` | integer | Channel to retrieve; use the site channel relation ID | Response fields [#response-fields] | Field | Type | Description | | :--------- | :------ | :------------------------------------------------------------ | | `success` | boolean | Indicates request status | | `Channels` | array | List of [channels](#platform-api-channels-get-channel-fields) | Channel fields [#channel-fields] | Field | Type | Description | | :------------------ | :------ | :------------------------------------------------------------------------------------------------------------------------------------------ | | `id` | integer | ID of the site channel relation | | `site_id` | integer | ID of the referenced site | | `channel_id` | integer | ID of the channel | | `name` | string | Name of the export as configured on the channel | | `export_name` | string | Generic name of the export in the Productsup system | | `active` | boolean | Whether the channel is set as the main export for the site | | `filename` | string | First entry of `filenames`, for integrations that expect a single filename. Returns `null` when the channel has no filename configured | | `filenames` | array | Files the channel is configured to export. See [filename fields](#filename-fields) | | `feed_destinations` | object | Destinations the channel exports to, keyed by the ID of the configured destination. See [feed destination fields](#feed-destination-fields) | | `links` | array | See [link fields](#platform-api-channels-get-links-fields-and-values) | Filename fields [#filename-fields] A channel can be configured with several files, and a delta channel has one file per delta type, so `filenames` lists all of them: ```json "filenames": [ { "type": "new", "filename": "criteo_de_new.csv" }, { "type": "modified", "filename": "criteo_de_modified.csv" } ] ``` | Field | Type | Description | | :--------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------- | | `type` | string | Delta type this file holds, one of `new`, `modified`, `unchanged`, `deleted` or `skipped`. `null` for files that are not delta specific | | `filename` | string | The filename as configured | Filenames are returned as configured, which means a filename can be a Twig template such as `{{ Site.id ~ "_" ~ Export.name }}.csv`. The platform resolves the template when it writes the file, not when you call this endpoint, so use the template to recognize the pattern of your exported files rather than as a literal name. Feed destination fields [#feed-destination-fields] `feed_destinations` is an object keyed by the numeric ID of the configured destination. Each value describes one destination: ```json "feed_destinations": { "4711": { "destination_id": 12, "name": "Criteo feed - EU bucket", "destination_name": "Google Merchant Center FTP", "active": true, "urls": [ "https://transport.productsup.io/abc123/channel/321/criteo_de.csv" ] } } ``` | Field | Type | Description | | :----------------- | :------ | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `destination_id` | integer | ID of the destination type this destination is configured from, for example `12` for Google Merchant Center FTP. Several destinations of one channel can share the same `destination_id` | | `name` | string | Name given to this destination in the platform, for example `Criteo feed - EU bucket`. Falls back to `destination_name` when the destination has no name of its own | | `destination_name` | string | Name of the destination type, for example `Google Merchant Center FTP`. Returns `null` when the destination type cannot be resolved | | `active` | boolean | Whether this destination is active. Independent of the channel's own `active` field and of the other destinations | | `urls` | array | Feed URLs Productsup serves for this destination, one per file the channel exports. Empty for destinations that do not serve files | Only destinations hosted by Productsup serve their files over a URL. Destinations that push to storage of your own — FTP, SFTP, Amazon S3, Google Cloud Storage, Microsoft Azure Blob Storage or an HTTP endpoint — deliver the file to that location instead, so `urls` is empty for them. An empty `urls` means the destination is not served by Productsup, not that the destination is misconfigured or has produced no files. A channel can have several destinations of the same type, for example two Google Merchant Center FTP destinations. Each one is a separate entry with its own key and its own `active` flag. Match destinations on `destination_id` rather than on the object key when you look for a destination type. When a channel has no destinations, `feed_destinations` serializes as an empty object (`{}`), not an empty array. Code that assumes an array here breaks on channels without destinations. Links fields and values [#links-fields-and-values] | Name | Description | | :----- | :------------------------------------------------------------------------------------------- | | `self` | Link to [channel detail](#platform-api-channels-get-get-a-channel-by-its-identifier) | | `site` | Link to [site](/docs/platform-api/sites#platform-api-sites-get-get-a-site-by-its-identifier) | # Rate limiting import { Callout } from "fumadocs-ui/components/callout"; The Platform API enforces rate limits at the account and route level. Different endpoints have different limits. | Endpoint | Description | Rate limit | | :-------------------------------------------------------------- | :------------------------------------------------------------ | :------------------------------- | | `/platform/v2/process/{siteIdentifier}` | Process endpoint | 1 request per site per 5 minutes | | `/product/v2/site/{siteIdentifier}/stage/{stageName}/{stageId}` | Product data read endpoint | 60 requests per minute | | `/*` | All other endpoints (limit applies per endpoint individually) | 5 requests per second | Implement a retry and exponential backoff mechanism to handle rate limit responses correctly. See [retry and backoff](#platform-api-rate-limiting-retry-and-backoff). Rate limit HTTP headers [#rate-limit-http-headers] Every response from the Platform API includes rate limit headers: ``` HTTP/2 200 X-RateLimit-Limit: 5 X-Ratelimit-Remaining: 1 X-Ratelimit-Retry-After: 1651174223 ``` | Name | Description | | :------------------------ | :---------------------------------------------------------- | | `X-RateLimit-Limit` | Maximum number of requests allowed per second | | `X-Ratelimit-Remaining` | Requests remaining in the current rate-limiting window | | `X-Ratelimit-Retry-After` | Unix timestamp when the current rate-limiting window resets | When you exceed the rate limit, the API returns a `429` response: ``` HTTP/2 429 X-RateLimit-Limit: 5 X-Ratelimit-Remaining: 1 X-Ratelimit-Retry-After: 1651174223 {"success":false,"message":"Too many attempts."} ``` Retry and backoff [#retry-and-backoff] Implement retries for the following response status codes: * `5xx` Server errors * `249` Custom error * `408` Request timeout * `429` Too many requests — use the response headers to determine when to retry Implementation guidelines [#implementation-guidelines] * Implement at least five retry attempts per failed request. * Use an [exponential backoff mechanism](https://en.wikipedia.org/wiki/Exponential_backoff) between retries. Exponential backoff reduces load on the platform during error periods, increases the likelihood of successful retries, and outperforms fixed-delay mechanisms during error surges. For a PHP reference implementation, see the `exponentialDelay()` method in the [Guzzle RetryMiddleware class](https://github.com/guzzle/guzzle/blob/7.9/src/RetryMiddleware.php#L55). # Channel history import { Callout } from "fumadocs-ui/components/callout"; The channel history endpoint provides information about the most recent exports of a channel. Creating and deleting channel history records is not supported. Get [#get] Use a GET request to retrieve the export history for a channel. ```shell curl https://platform-api.productsup.io/platform/v2/sites/123/channels/321/history ``` ```json { "success": true, "Channels": [ { "id": "321", "site_id": "123", "channel_id": "1", "name": "Google Merchant Center DE", "export_name": "Google Merchant Center", "links": [...], "history": [ { "id": "333", "site_id": "123", "site_channel_id": "444", "export_time": "2015-09-30 10:18:56", "export_start": "2015-09-30 10:18:54", "product_count": "18697", "pid": "560b96899e334", "product_count_new": "0", "product_count_modified": "0", "product_count_deleted": "0", "product_count_unchanged": "0", "uploaded": "0" }, ... ] } ] } ``` HTTP request [#http-request] `GET https://platform-api.productsup.io/platform/v2/sites//channels//history` | Field | Type | Description | | :---------- | :------ | :---------------------------------------------------------------- | | `siteId` | integer | Site the channel belongs to | | `channelId` | integer | Channel to retrieve history for; use the site channel relation ID | Response fields [#response-fields] | Field | Type | Description | | :--------- | :------ | :------------------------------------------------------------------- | | `success` | boolean | Indicates request status | | `Channels` | array | List of [channels](#platform-api-channel-history-get-channel-fields) | Channel fields [#channel-fields] | Field | Type | Description | | :------------ | :------ | :--------------------------------------------------------------------------- | | `id` | integer | ID of the site channel relation | | `site_id` | integer | ID of the referenced site | | `channel_id` | integer | ID of the channel | | `name` | string | Name of the export as configured on the channel | | `export_name` | string | Generic name of the export in the Productsup system | | `links` | array | See [link fields](#platform-api-channel-history-get-links-fields-and-values) | | `history` | array | See [history fields](#platform-api-channel-history-get-history-fields) | Links fields and values [#links-fields-and-values] | Name | Description | | :----- | :-------------------------------------------------------------------------------------------------------------- | | `self` | Link to [channel detail](/docs/platform-api/channels#platform-api-channels-get-get-a-channel-by-its-identifier) | | `site` | Link to [site](/docs/platform-api/sites#platform-api-sites-get-get-a-site-by-its-identifier) | History fields [#history-fields] | Field | Type | Description | | :------------------------ | :------- | :--------------------------------------------------------------------------------------------------------------- | | `id` | integer | Internal identifier | | `site_id` | integer | Identifier of the referenced site | | `site_channel_id` | string | Internal ID for the combination of an [export](/docs/platform-api/channels) and [site](/docs/platform-api/sites) | | `export_time` | dateTime | Time when the process finished | | `export_start` | dateTime | Time when the process started | | `product_count` | integer | Number of products exported | | `pid` | string | Internal identifier for the process | | `product_count_new` | integer | Number of new products (delta exports only) | | `product_count_modified` | integer | Number of updated products (delta exports only) | | `product_count_deleted` | integer | Number of deleted products (delta exports only) | | `product_count_unchanged` | integer | Number of unchanged products (delta exports only) | | `uploaded` | integer | Indicates whether the export was uploaded to its destination | # Platform API changelog import { Callout } from "fumadocs-ui/components/callout"; As of 31 March 2025, the Platform API's product data write endpoints are no longer available. Use the Platform API for account management and [Stream API](/docs/stream-api) for product data uploads in new integrations. Existing integrations using the write endpoints continue to be supported. 3 August 2026 [#3-august-2026] * Added the `active` and `filename` fields to the channel resource. See [channel fields](/docs/platform-api/channels#platform-api-channels-get-channel-fields). * Changed the shape of `feed_destinations` on the channel resource. Each destination is now an object with `name`, `active`, and `urls` instead of a bare array of URLs. Replace `feed_destinations[][0]` with `feed_destinations[].urls[0]`. * Changed `name` on a feed destination to the name the destination was given in the platform, falling back to the name of its destination type. The destination type's name moved to the new `destination_name` field. See [feed destination fields](/docs/platform-api/channels#feed-destination-fields). * Fixed `filename` on the channel resource returning an empty string for channels whose filenames are configured as channel files. It now returns the configured filename, or `null` when the channel has none. * Added `filenames` to the channel resource, listing every file the channel is configured to export with its delta type. `filename` remains the first of them. See [filename fields](/docs/platform-api/channels#filename-fields). * Changed the keys of `feed_destinations` from the destination type ID to the ID of the configured destination, and added `destination_id` to each entry. A channel can have several destinations of the same type, and those previously overwrote each other so that only one of them was returned. Match destinations on `destination_id` if you looked up a destination type by key. * Added reference documentation for `feed_destinations`. See [feed destination fields](/docs/platform-api/channels#feed-destination-fields). 31 March 2025 [#31-march-2025] * Updated documentation to reflect the sunsetted Platform API data write endpoints. 2 September 2024 [#2-september-2024] * Added tag endpoints. See [site tags](/docs/platform-api/site-tags). 24 May 2024 [#24-may-2024] * Exposed error `type` and `classification` fields in the site errors endpoint. See [site errors](/docs/platform-api/site-errors). 5 September 2023 [#5-september-2023] * Added the copy site endpoint. See [copy site](/docs/platform-api/sites#platform-api-sites-copy). 23 May 2023 [#23-may-2023] * Introduced new rate limits across all endpoints. See [rate limiting](/docs/platform-api/rate-limiting). 1 June 2023 [#1-june-2023] * Added status page link. 15 February 2023 [#15-february-2023] * Fixed empty file creation when rows were written due to a one-hour delay between the last upload and commit. 31 January 2023 [#31-january-2023] * Fixed the products endpoint returning an empty response body. 20 January 2023 [#20-january-2023] * Exposed datetime in the site errors endpoint. See [site errors](/docs/platform-api/site-errors). 10 January 2023 [#10-january-2023] * Fixed a bug in `deleteNotMatchingFeedHeadersIds`. # Site tags import { Callout } from "fumadocs-ui/components/callout"; Site tag endpoints let you manage and customize tags on your Productsup sites. Tags provide a flexible way to identify and reference sites using your own key-value pairs. List [#list] Use a GET request to list all tags for a site or retrieve a specific tag by its ID. List all tags for a site [#list-all-tags-for-a-site] `GET https://platform-api.productsup.io/platform/v2/sites//tags` ```shell curl --location 'https://platform-api.productsup.io/platform/v2/sites//tags' \ --header 'X-Auth-Token: TOKEN' ``` | Field | Type | Description | | :------- | :------ | :-------------------- | | `siteId` | integer | Site to list tags for | Get a tag by its identifier [#get-a-tag-by-its-identifier] `GET https://platform-api.productsup.io/platform/v2/sites//tags/` ```shell curl --location 'https://platform-api.productsup.io/platform/v2/sites//tags/' \ --header 'X-Auth-Token: TOKEN' ``` | Field | Type | Description | | :------- | :------ | :---------------------- | | `siteId` | integer | Site the tag belongs to | | `tagId` | integer | Tag to retrieve | Create [#create] Use a POST request to create a new tag for a site. `POST https://platform-api.productsup.io/platform/v2/sites//tags` ```shell curl --location 'https://platform-api.productsup.io/platform/v2/sites//tags' \ --header 'X-Auth-Token: TOKEN' \ --header 'Content-Type: application/json' \ --data '{ "site_id": "", "key": "", "value": "", "readonly": 0 }' ``` Request body fields [#request-body-fields] | Field | Type | Description | | :--------- | :------ | :----------------------------------------------------------------------- | | `site_id` | string | Site the tag belongs to | | `key` | string | Name of the tag | | `value` | string | Value of the tag | | `readonly` | integer | Set to `1` to prevent end users from editing this tag in the platform UI | A tag's key must be unique per site. Creating a tag with a key that already exists for that site returns an error. Delete [#delete] Use a DELETE request to remove a tag from a site. `DELETE https://platform-api.productsup.io/platform/v2/sites//tags/` ```shell curl --location --request DELETE 'https://platform-api.productsup.io/platform/v2/sites//tags/' \ --header 'X-Auth-Token: TOKEN' ``` | Field | Type | Description | | :------- | :------ | :---------------------- | | `siteId` | integer | Site the tag belongs to | | `tagId` | integer | Tag to delete | # Sites import { Callout } from "fumadocs-ui/components/callout"; A site is the smallest entity in the platform hierarchy, below projects. Each site has one data source and can have multiple exports and channels. Get [#get] Use a GET request to list all sites in your account or retrieve a specific site. Get all sites for your account [#get-all-sites-for-your-account] `GET https://platform-api.productsup.io/platform/v2/sites` ```shell curl https://platform-api.productsup.io/platform/v2/sites ``` ```json { "success": true, "Sites": [ { "id": "123", "title": "site 1", "created_at": "2015-01-01 11:22:33", "project_id": "321", "links": [...] }, ... ] } ``` Get all sites for a specific project [#get-all-sites-for-a-specific-project] `GET https://platform-api.productsup.io/platform/v2/projects//sites` | Field | Type | Description | | :---------- | :------ | :------------------------ | | `projectId` | integer | Project to list sites for | Get a site by its tag [#get-a-site-by-its-tag] `GET https://platform-api.productsup.io/platform/v2/sites/:` | Field | Type | Description | | :--------- | :----- | :---------------------------- | | `tagName` | string | Name of the tag for the site | | `tagValue` | string | Value of the tag for the site | See [Site tags](/docs/platform-api/site-tags) for more information about managing tags. Get a site by its identifier [#get-a-site-by-its-identifier] `GET https://platform-api.productsup.io/platform/v2/sites/` | Field | Type | Description | | :------- | :------ | :--------------- | | `siteId` | integer | Site to retrieve | Response fields [#response-fields] | Field | Type | Description | | :-------- | :------ | :--------------------------------------------------- | | `success` | boolean | Indicates request status | | `Sites` | array | List of [sites](#platform-api-sites-get-site-fields) | Site fields [#site-fields] | Field | Type | Description | | :------------------ | :----- | :------------------------------------------------------------------------------------------ | | `id` | string | Site identifier | | `title` | string | Name of the site | | `status` | string | See [site status values](#platform-api-sites-get-site-status-information) | | `project_id` | string | Identifier of the project this site belongs to | | `import_schedule` | string | A [cron entry](#platform-api-sites-get-cron-entry) that sets the scheduling for data import | | `id_column` | string | Name of the column used as an identifier | | `processing_status` | string | Status of the site's latest job (`Running` or `Done`) | | `created_at` | date | Date of creation | | `links` | array | See [link fields](#platform-api-sites-get-links-fields-and-values) | Links fields and values [#links-fields-and-values] | Name | Description | | :-------- | :----------------------------------------------------------------------------------------------------------- | | `self` | Link to the [current site](#platform-api-sites-get-get-a-site-by-its-identifier) | | `tags` | Link to the list of tags belonging to the site | | `project` | Link to the [project](/docs/platform-api/projects#platform-api-projects-get-get-a-project-by-its-identifier) | Site status values [#site-status-values] | Value | Description | | :-------------- | :---------------------------------------------------------------------------------------------- | | `active` | The site is fully operational. Data can be pushed via the API and the site imports and exports. | | `paused_upload` | The site can receive data and import it, but does not export. | | `disabled` | The site blocks any data sent via the API. Neither imports nor exports run. | Cron entry [#cron-entry] The scheduling format consists of an optional timezone and one or more scheduling expressions. If no timezone is provided, the platform uses its default timezone. All PHP timezones are supported. Separate the timezone and schedule entries with newline characters. To remove a schedule, supply an empty value. ``` TZ=Europe/Berlin H 2,6,19,22 * * 2,4,6 # Run at 02:XX, 06:XX, 16:XX, and 19:XX on Tuesday, Thursday, and Saturday H * * * * # Run at a random minute every hour 1 3,8,21 */2 * * # Run at 03:01, 08:01, and 21:01 every second day ``` When submitting the schedule via the API, encode newlines as `\n`: ``` TZ=Europe/Berlin\nH 2,6,19,22 * * 2,4,6\nH * * * *\n1 3,8,21 */2 * * ``` The `H` value in the minute position assigns a random minute. Use `H` for all schedules to avoid bottlenecks caused by multiple jobs starting at the same time. The cron format is limited to what the platform supports. To retrieve the string representation of a schedule you configured manually in the platform, send a GET request to the site and inspect the `import_schedule` attribute. Create [#create] Use a POST request to create a new site. ```shell curl -d '{"title":"example site","reference":"myReferenceKey:myReference1234","id_column":"uniqueIdentifier","import_schedule":"8 * * * *"}' \ https://platform-api.productsup.io/platform/v2/projects/321/sites ``` ```json { "success": true, "Sites": [{ "id": 125, "title": "example site", "created_at": "2015-07-30 12:54:52", "project_id": 321, "import_schedule": "8 * * * *", "links": [...] }] } ``` Create site [#create-site] `POST https://platform-api.productsup.io/platform/v2/sites` `POST https://platform-api.productsup.io/platform/v2/projects//sites` URL parameters [#url-parameters] | Field | Type | Description | | :---------- | :------ | :---------------------------------------------------------------------------- | | `projectId` | integer | Project under which to add the site. Required unless set in the request body. | HTTP headers [#http-headers] | Name | Value | | :------------- | :----------------- | | `Content-Type` | `application/json` | Request body fields [#request-body-fields] | Field | Type | Description | | :---------------- | :------ | :---------------------------------------------------------------------------------------------------------------------------------------- | | `title` | string | Name of the site | | `reference` | string | Textual site reference, consisting of `tagName:tagValue`. Must be unique per account. | | `project_id` | integer | Project under which to add the site. Required unless provided in the URL. | | `id_column` | string | Column used as an identifier when importing data. Defaults to `id` if omitted. Pass an empty string to leave the identifier column unset. | | `status` | string | See [site status values](#platform-api-sites-get-site-status-information) | | `import_schedule` | string | A [cron entry](#platform-api-sites-get-cron-entry) that sets the scheduling for data import | The `id` and `created_at` fields must be empty in the request body. Providing values for these fields either overwrites them or causes an error. References and site tags [#references-and-site-tags] A reference lets you use a textual identifier of your choice for a site, so you do not need to store the numeric site ID. A reference consists of a `tagName` and a `tagValue` in the format `tagName:tagValue`. See [Site tags](/docs/platform-api/site-tags) for examples of managing tags. The reference for a site must be unique across your account. Response fields [#response-fields-1] | Field | Type | Description | | :-------- | :------ | :------------------------------------------------------ | | `success` | boolean | Indicates request status | | `Sites` | array | List of [sites](#platform-api-sites-create-site-fields) | Edit [#edit] Use a PUT request to edit an existing site. ```shell curl -d '{"id":1,"project_id":1,"title":"My test site","import_schedule":"TZ=Europe/Berlin\nH 2,6,19,22 * * 2,4,6"}' \ https://platform-api.productsup.io/platform/v2/projects/1/sites/1 ``` ```json { "success": true, "Sites": [{ "id": 1, "title": "My test site", "created_at": "2015-07-30 12:54:52", "project_id": 1, "import_schedule": "TZ=Europe\/Berlin\nH 2,6,19,22 * * 2,4,6\nH * * * *", "links": [...] }] } ``` Update site [#update-site] `PUT https://platform-api.productsup.io/platform/v2/sites/` `PUT https://platform-api.productsup.io/platform/v2/projects//sites/` URL parameters [#url-parameters-1] | Field | Type | Description | | :---------- | :------ | :----------------------------- | | `projectId` | integer | Project that contains the site | | `siteId` | integer | Site to edit | HTTP headers [#http-headers-1] | Name | Value | | :------------- | :----------------- | | `Content-Type` | `application/json` | Request body fields [#request-body-fields-1] | Field | Type | Description | | :---------------- | :------ | :----------------------------------------------------------------------------------------------------------- | | `id` | integer | Site to edit | | `project_id` | integer | Project that contains the site | | `title` | string | Name of the site | | `id_column` | string | Column used as an identifier when importing data. Pass an empty string to leave the identifier column unset. | | `status` | string | See [site status values](#platform-api-sites-get-site-status-information) | | `import_schedule` | string | A [cron entry](#platform-api-sites-get-cron-entry) that sets the scheduling for data import | Response fields [#response-fields-2] | Field | Type | Description | | :-------- | :------ | :------------------------------------------------------ | | `success` | boolean | Indicates request status | | `Sites` | array | List of [sites](#platform-api-sites-update-site-fields) | Delete [#delete] Delete site [#delete-site] `DELETE https://platform-api.productsup.io/platform/v2/sites/` ```shell curl -X DELETE https://platform-api.productsup.io/platform/v2/sites/125 ``` ```json {"success":true} ``` URL parameters [#url-parameters-2] | Field | Type | Description | | :------- | :------ | :------------- | | `siteId` | integer | Site to delete | Response fields [#response-fields-3] | Field | Type | Description | | :-------- | :------ | :---------------------------------- | | `success` | boolean | Indicates the success of the action | Copy [#copy] Use a POST request to copy a site's configuration to a new site. ```shell curl --location --request POST 'https://platform-api.productsup.io/platform/v2/sites/1/copy' \ --header 'Content-Type: application/json' \ --header 'X-Auth-Token: value' \ --data-raw '{ "site_name": "example copy site", "project_id": "2", "copy_export": true, "copy_schedule_and_trigger": true, "copy_shared_setting": true }' ``` ```json { "success": true, "Sites": [{ "id": "2", "title": "example copy site", "created_at": "2023-07-27 12:54:52", "project_id": "2", "import_schedule": "8 * * * *", "links": [...] }] } ``` Copy site [#copy-site] `POST https://platform-api.productsup.io/platform/v2/sites//copy` URL parameters [#url-parameters-3] | Field | Type | Description | | :------- | :------ | :------------------------------------------- | | `siteId` | integer | The site whose configuration you are copying | HTTP headers [#http-headers-2] | Name | Value | | :------------- | :----------------- | | `Content-Type` | `application/json` | Request body fields [#request-body-fields-2] | Field | Type | Description | | :-------------------------- | :------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `site_name` | string | Name of the new site | | `project_id` | string | Project to copy the site into. Defaults to the project of the source site. | | `copy_export` | boolean | Copy all export configurations to the new site. Defaults to `false`. | | `copy_schedule_and_trigger` | boolean | Copy all schedules and triggers to the new site. Defaults to `false`. | | `copy_shared_setting` | boolean | Copy the data flow configuration to the new site. Applies only to sites that subscribe to elements from another site (consumer sites). Defaults to `false`. | Response fields [#response-fields-4] See [response fields](#platform-api-sites-get-response-fields) and [site fields](#platform-api-sites-get-site-fields). # Projects Projects group your [sites](/docs/platform-api/sites) within your account. Each account can have multiple projects, and each project can contain multiple sites. Get [#get] Lists all projects for your account, or a single project when you provide a project identifier. Both requests return the same response structure. When you request a specific project, the response contains only that project. Get all projects for your account [#get-all-projects-for-your-account] `GET https://platform-api.productsup.io/platform/v2/projects` ```shell curl https://platform-api.productsup.io/platform/v2/projects ``` ```json { "success": true, "Projects": [ { "id": "1", "name": "default project", "created_at": "2013-03-21 12:47:57", "links": [...] }, ... ] } ``` Get a project by its identifier [#get-a-project-by-its-identifier] `GET https://platform-api.productsup.io/platform/v2/projects/` ```shell curl https://platform-api.productsup.io/platform/v2/projects/1 ``` ```json { "success": true, "Projects": [{ "id": "1", "name": "default project", "created_at": "2013-03-21 12:47:57", "links": [...] }] } ``` URL parameters [#url-parameters] | Field | Type | Description | | :---------- | :------ | :------------------ | | `projectId` | integer | Project to retrieve | Response fields [#response-fields] | Field | Type | Description | | :--------- | :------ | :----------------------- | | `success` | boolean | Indicates request status | | `Projects` | array | List of projects | Project fields [#project-fields] | Field | Type | Description | | :----------- | :------ | :------------------------- | | `id` | integer | Internal ID | | `name` | string | Name of the project | | `created_at` | date | Date of creation | | `links` | array | List of relevant resources | Link fields and values [#link-fields-and-values] | Name | Description | | :------ | :------------------------------------------------- | | `self` | Link to the project detail endpoint | | `sites` | Link to the list of sites belonging to the project | Create [#create] To create a new project, send a POST request with the project name in the request body. `POST https://platform-api.productsup.io/platform/v2/projects` ```shell curl -d '{"name":"test project"}' \ https://platform-api.productsup.io/platform/v2/projects ``` ```json { "success": true, "Projects": [{ "id": 125, "name": "test project", "created_at": "2015-07-30 12:54:52", "links": [...] }] } ``` HTTP headers [#http-headers] | Name | Value | | :------------- | :----------------- | | `Content-Type` | `application/json` | Request body fields [#request-body-fields] | Field | Type | Description | | :----- | :----- | :------------------ | | `name` | string | Name of the project | Leave `id` and `created_at` empty. Providing values for these fields either overwrites them or causes the request to return an error. Response fields [#response-fields-1] | Field | Type | Description | | :--------- | :------ | :----------------------------- | | `success` | boolean | Indicates request status | | `Projects` | array | Details of the created project | The response uses the same [project fields](#platform-api-projects-get-response-fields-project-fields) and [link fields](#platform-api-projects-get-response-fields-link-fields-and-values) as the Get endpoint. Edit [#edit] To edit an existing project, send a PUT request with the project identifier in the URL and the updated fields in the request body. `PUT https://platform-api.productsup.io/platform/v2/projects/` ```shell curl -d '{"name":"example project"}' \ https://platform-api.productsup.io/platform/v2/projects/125 ``` ```json { "success": true, "Projects": [{ "id": 125, "name": "example project", "created_at": "2015-07-30 12:54:52", "links": [...] }] } ``` URL parameters [#url-parameters-1] | Field | Type | Description | | :---------- | :------ | :----------------------- | | `projectId` | integer | Existing project to edit | HTTP headers [#http-headers-1] | Name | Value | | :------------- | :----------------- | | `Content-Type` | `application/json` | Provide the request data as a JSON object. Request body fields [#request-body-fields-1] | Field | Type | Description | | :----- | :------ | :------------------------- | | `id` | integer | ID of the existing project | | `name` | string | Name of the project | Response fields [#response-fields-2] | Field | Type | Description | | :--------- | :------ | :----------------------------- | | `success` | boolean | Indicates request status | | `Projects` | array | Details of the updated project | The response uses the same [project fields](#platform-api-projects-get-response-fields-project-fields) and [link fields](#platform-api-projects-get-response-fields-link-fields-and-values) as the Get endpoint. Delete [#delete] To delete a project, send a DELETE request with the project identifier in the URL. `DELETE https://platform-api.productsup.io/platform/v2/projects/` ```shell curl -X DELETE https://platform-api.productsup.io/platform/v2/projects/125 ``` ```json {"success":true} ``` URL parameters [#url-parameters-2] | Field | Type | Description | | :---------- | :------ | :---------------- | | `projectId` | integer | Project to delete | Response body fields [#response-body-fields] | Field | Type | Description | | :-------- | :------ | :---------------------------------- | | `success` | boolean | Indicates the success of the action | # Site stream data sources import { Callout } from "fumadocs-ui/components/callout"; The data source management endpoint lets you link Stream API streams to sites programmatically. You can create, update, delete, and inspect data source connections. This endpoint supports [unified authentication](/docs/platform-api/authentication#unified-authentication). List stream data sources [#list-stream-data-sources] ```shell curl --header 'X-Auth-Token: value' \ --header 'Content-Type: application/json' \ --request GET 'https://platform-api.productsup.io/platform/v2/sites/1/streams' ``` ```json { "success": true, "Sources": [ { "id": 1, "site_id": 1, "description": "stream api", "source": "", "import_type": 1, "import_id": 331, "status": "active", "settings": [ "stream : 1" ] } ], "meta": { "cursor": { "current": 0, "prev": 0, "next": 1, "count": 1 } } } ``` `GET https://platform-api.productsup.io/platform/v2/sites//streams` | Field | Type | Description | | :------- | :------ | :-------------- | | `siteId` | integer | Site identifier | See [cursor parameters](/docs/platform-api/pagination#platform-api-cursor-pagination-http-request-cursor-parameters) for pagination query fields. HTTP headers [#http-headers] | Name | Value | | :------------- | :----------------- | | `Content-Type` | `application/json` | Response fields [#response-fields] | Field | Type | Description | | :-------- | :------ | :------------------------------------------------------------------------------------------------------- | | `success` | boolean | Indicates request status | | `Sources` | array | List of [data sources](#platform-api-site-stream-data-sources-list-stream-datasources-datasource-fields) | | `meta` | array | See [cursor fields](/docs/platform-api/pagination#platform-api-cursor-pagination-cursor-fields) | Data source fields [#data-source-fields] | Field | Type | Description | | :------------ | :------ | :-------------------------------------------------------------------------------------------------------------------------- | | `id` | integer | Data source identifier | | `site_id` | integer | Identifier of the site this data source belongs to | | `description` | string | Description of the data source | | `status` | string | See [status values](#platform-api-site-stream-data-sources-list-stream-datasources-datasource-status-information) | | `source` | string | URL of the data source | | `import_type` | integer | See [import type values](#platform-api-site-stream-data-sources-list-stream-datasources-datasource-import-type-information) | | `import_id` | integer | Import method identifier | | `settings` | array | All settings related to the data source | Status values [#status-values] | Value | Description | | :------- | :------------------------------------------------- | | `active` | The data source is fully operational | | `paused` | The data source is paused and data is not imported | Import type values [#import-type-values] | Value | Description | | :---- | :------------------- | | `1` | Main data feed | | `2` | Additional data feed | Response status codes [#response-status-codes] | Code | Message | Details | | :--- | :------------------------------------------------ | :------------------------------------------ | | 200 | — | List returned successfully | | 401 | Unauthorized | Invalid authentication token | | 403 | You don't have the rights to access this resource | Insufficient permissions to access the site | | 404 | The requested resource could not be found | The site does not exist | Create stream data source [#create-stream-data-source] ```shell curl --header 'X-Auth-Token: value' \ --header 'Content-Type: application/json' \ --request POST 'https://platform-api.productsup.io/platform/v2/sites/1/streams' \ --data-raw '{"import_type":1,"description":"stream api","stream_id":1,"status":"active"}' ``` ```json { "success": true, "Sources": [ { "id": 1, "site_id": 1, "description": "stream api", "source": "", "import_type": 1, "import_id": 331, "status": "active", "settings": ["stream : 1"] } ] } ``` `POST https://platform-api.productsup.io/platform/v2/sites//streams` | Field | Type | Description | | :------- | :------ | :-------------- | | `siteId` | integer | Site identifier | HTTP headers [#http-headers-1] | Name | Value | | :------------- | :----------------- | | `Content-Type` | `application/json` | Request body fields [#request-body-fields] | Field | Type | Description | | :------------ | :------ | :-------------------------------------------------------------------------------------------------------------------------------------------- | | `stream_id` | integer | Stream identifier | | `import_type` | integer | See [import type values](#platform-api-site-stream-data-sources-list-stream-datasources-datasource-import-type-information). Defaults to `1`. | | `description` | string | Description of the data source | | `status` | string | See [status values](#platform-api-site-stream-data-sources-list-stream-datasources-datasource-status-information). Defaults to `active`. | See [response fields](#platform-api-site-stream-data-sources-list-stream-datasources-response-fields) and [data source fields](#platform-api-site-stream-data-sources-list-stream-datasources-datasource-fields) for the response structure. Response status codes [#response-status-codes-1] | Code | Message | Details | | :--- | :------------------------------------------------ | :---------------------------------------------------- | | 201 | — | Data source created and linked to the site | | 401 | Unauthorized | Invalid authentication token | | 403 | You don't have the rights to access this resource | Insufficient permissions to access the site or stream | | 404 | The requested resource could not be found | The site or stream does not exist | | 422 | The stream datasource for the site already exists | The stream is already linked to this site | Update stream data source [#update-stream-data-source] ```shell curl --header 'X-Auth-Token: value' \ --header 'Content-Type: application/json' \ --request PUT 'https://platform-api.productsup.io/platform/v2/sites/1/streams/1' \ --data-raw '{"import_type":1,"description":"stream api","status":"active"}' ``` `PUT https://platform-api.productsup.io/platform/v2/sites//streams/` | Field | Type | Description | | :--------- | :------ | :---------------- | | `siteId` | integer | Site identifier | | `streamId` | integer | Stream identifier | HTTP headers [#http-headers-2] | Name | Value | | :------------- | :----------------- | | `Content-Type` | `application/json` | Request body fields [#request-body-fields-1] | Field | Type | Description | | :------------ | :------ | :-------------------------------------------------------------------------------------------------------------------------- | | `import_type` | integer | See [import type values](#platform-api-site-stream-data-sources-list-stream-datasources-datasource-import-type-information) | | `description` | string | Description of the data source | | `status` | string | See [status values](#platform-api-site-stream-data-sources-list-stream-datasources-datasource-status-information) | See [response fields](#platform-api-site-stream-data-sources-list-stream-datasources-response-fields) and [data source fields](#platform-api-site-stream-data-sources-list-stream-datasources-datasource-fields) for the response structure. Response status codes [#response-status-codes-2] | Code | Message | Details | | :--- | :------------------------------------------------ | :---------------------------------------------------- | | 200 | — | Data source updated successfully | | 401 | Unauthorized | Invalid authentication token | | 403 | You don't have the rights to access this resource | Insufficient permissions to access the site or stream | | 404 | The requested resource could not be found | The site or stream does not exist | | 422 | The stream datasource for the site doesn't exist | The stream is not linked to this site | Delete stream data source [#delete-stream-data-source] ```shell curl --header 'X-Auth-Token: value' \ --header 'Content-Type: application/json' \ --request DELETE 'https://platform-api.productsup.io/platform/v2/sites/1/streams/1' ``` ```json { "success": true, "message": "Resource was deleted successfully!" } ``` `DELETE https://platform-api.productsup.io/platform/v2/sites//streams/` | Field | Type | Description | | :--------- | :------ | :---------------- | | `siteId` | integer | Site identifier | | `streamId` | integer | Stream identifier | HTTP headers [#http-headers-3] | Name | Value | | :------------- | :----------------- | | `Content-Type` | `application/json` | Response fields [#response-fields-1] | Field | Type | Description | | :-------- | :------ | :----------------------- | | `success` | boolean | Indicates request status | | `message` | string | Confirmation message | Response status codes [#response-status-codes-3] | Code | Message | Details | | :--- | :------------------------------------------------ | :---------------------------------------------------- | | 200 | — | Data source deleted successfully | | 401 | Unauthorized | Invalid authentication token | | 403 | You don't have the rights to access this resource | Insufficient permissions to access the site or stream | | 404 | The requested resource could not be found | The site or stream does not exist | | 422 | The stream datasource for the site doesn't exist | The stream is not linked to this site | # Process import { Callout } from "fumadocs-ui/components/callout"; The process endpoint lets you control when data flows in and out of the platform. It supports triggering jobs in the following combinations: * **Import:** import data from all data sources into a site. * **Export:** export data to one or all configured channels. * **Combined:** run an import followed consecutively by exports to all channels. This endpoint supports [unified authentication](/docs/platform-api/authentication#unified-authentication). Site and process relationship [#site-and-process-relationship] * Each site can have only one process running at a time. One additional process can be queued per site. * Processes operate directly on sites, not on Streams. Data import from Streams to sites [#data-import-from-streams-to-sites] * You can set up a site to receive data from a [Stream via a data source](/docs/platform-api/site-stream-data-source). * When you trigger a data import on a site linked to a Stream, the process includes all data uploaded to the Stream before the process started. * Data uploaded to the Stream after the process starts is not included in the current run. It is processed in the next scheduled run. Post [#post] Trigger a processing action on a site. ```shell curl --location --request POST 'https://platform-api.productsup.io/platform/v2/process/' \ --header 'Content-Type: application/json' \ --header 'X-Auth-Token: accountId:yourToken' \ --data-raw '{"action": "import"}' ``` ```json { "success": true, "process_id": "" } ``` `POST https://platform-api.productsup.io/platform/v2/process/` URL parameters [#url-parameters] | Field | Type | Description | | :------- | :------ | :----------------------------- | | `siteId` | integer | Site to trigger processing for | HTTP headers [#http-headers] | Name | Value | | :------------- | :----------------- | | `Content-Type` | `application/json` | Request body fields [#request-body-fields] | Field | Type | Required | Description | | :------- | :------ | :------- | :------------------------------------------------------------------------------------------------- | | `action` | string | Yes | See [action values](#platform-api-process-data-post-response-body-fields-action-value-explanation) | | `id` | integer | No | Export or channel ID. Required only for `export` and `channel` action types. | Action values [#action-values] | Value | Description | | :----------- | :----------------------------------------------- | | `import` | Trigger an import on the site | | `export` | Trigger an export. Requires an export ID. | | `channel` | Trigger a channel export. Requires a channel ID. | | `export-all` | Trigger all exports and channels | | `all` | Trigger an import, then all exports and channels | Response body fields [#response-body-fields] | Field | Type | Description | | :----------- | :------ | :------------------------------------------------------- | | `success` | boolean | Indicates whether the job was successfully scheduled | | `process_id` | string | Process identifier (UUID 32 format, returned on success) | | `message` | string | Failure reason, returned when `success` is `false` | Response status codes [#response-status-codes] | Code | Message | Details | | :--- | :---------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------- | | 200 | — | The process was successfully called or scheduled | | 429 | Too many attempts | The API is rate-limiting your request. See [rate limiting](/docs/platform-api/rate-limiting). | | 429 | Cannot trigger a new process, a process is already in the current queue | The job queue for this site already contains a queued job. Wait for it to start before retrying. | | 500 | Could not trigger job because a lock is already acquired | A previous request for this site holds a lock. The lock releases once that request returns a response. | | 500 | Error occurred while interacting with the job server | An infrastructure issue occurred. One retry is reasonable. Continuous retries worsen the problem. | # Authentication import { Callout } from "fumadocs-ui/components/callout"; All requests to the Platform API require valid authorization. Your authentication token is built from the client ID and client secret that we provide. The token follows this format: `client_id:client_secret`. Send this value as the `X-Auth-Token` HTTP header with each request. ```shell curl -H "X-Auth-Token: 1234:simsalabim" https://platform-api.productsup.io/ ``` Replace `1234` and `simsalabim` with the client ID and secret you received from our team. The client ID and client secret are account specific. You can only access projects, sites, and other resources that belong to your account. Unified authentication [#unified-authentication] The Platform API and Stream API use separate tokens for authentication. However, some endpoints support **unified authentication**, which lets you use a single token to call both APIs. Endpoints that support unified authentication: * [Process endpoint](/docs/platform-api/process) * [Site stream data sources endpoint](/docs/platform-api/site-stream-data-source) Contact your Productsup account manager to request Stream Platform API access, create new or additional tokens, or revoke existing ones. # Import history import { Callout } from "fumadocs-ui/components/callout"; The import history endpoint provides metadata about the most recent imports for a site. Import history is always scoped to a single site. Creating and deleting import history records is not supported. Get [#get] Use a GET request to list import history for a site. ```shell curl https://platform-api.productsup.io/platform/v2/sites/123/importhistory ``` ```json { "success": true, "Importhistory": [ { "id": "11111111", "site_id": 1234, "import_time": "2015-01-01 11:22:33", "product_count": "18370", "pid": "47e6b828-3210-3568-8ec3-85ed3e2d944c", "links": [...] }, ... ] } ``` HTTP request [#http-request] `GET https://platform-api.productsup.io/platform/v2/sites//importhistory` | Field | Type | Description | | :------- | :------ | :---------------------------------- | | `siteId` | integer | Site to retrieve import history for | Response fields [#response-fields] | Field | Type | Description | | :-------------- | :------ | :----------------------------------------------------------------------------- | | `success` | boolean | Indicates request status | | `Importhistory` | array | List of [import history records](#platform-api-import-history-get-site-fields) | Import history fields [#import-history-fields] | Field | Type | Description | | :-------------- | :------ | :-------------------------------------------------------------------------- | | `id` | integer | Internal ID | | `site_id` | integer | ID of the referenced site | | `import_time` | date | Date of the import | | `product_count` | integer | Total number of products imported | | `pid` | string | Process ID (UUID 32 format) | | `links` | array | See [link fields](#platform-api-import-history-get-links-fields-and-values) | Links fields and values [#links-fields-and-values] | Name | Description | | :----- | :------------------------------------------------------------------------------------------- | | `site` | Link to [site](/docs/platform-api/sites#platform-api-sites-get-get-a-site-by-its-identifier) | # Deleting Products import { Callout } from 'fumadocs-ui/components/callout'; We have two different endpoints that let clients delete product data: * `/streams/{streamId}/products` — supports the deletion of one, several, or all products via the request body * `/streams/{streamId}/products/{productId}` — supports the deletion of a single product via URL Delete products via the request body [#delete-products-via-the-request-body] Delete a single product: ```shell curl --location --request DELETE 'https://stream-api.productsup.com/streams/124773/products' \ --header 'Content-Type: application/x-ndjson' \ --header 'Accept: application/vnd.api+json' \ --data-raw '{"id":34SKJDF42DF}' ``` Delete multiple products: ```shell curl --location --request DELETE 'https://stream-api.productsup.com/streams/124773/products' \ --header 'Content-Type: application/x-ndjson' \ --header 'Accept: application/vnd.api+json' \ --data-binary @- < Delete all products: ```shell curl --location --request DELETE 'https://stream-api.productsup.com/streams/124773/products?all=true' \ --header 'Accept: application/vnd.api+json' ``` You can delete one or several products by: * Sending a request to the endpoint `/streams/{streamId}/products` * Sending a request body with list of `id`-attributes for the products that you want to remove. In case you want to delete all products, you need to add the query parameter and value `all=true` to the URL. In this case, you can omit the request body. Note that by default the Platform does not import from an empty Data Source. When deleting all the data in the Stream API and an import is run it will fail unless new data has been pushed. Follow [these instructions](/docs/stream-api/import-setup#set-up-an-import) to enable importing from an empty Data Source. Delete a product via the URL [#delete-a-product-via-the-url] Delete a single product: ```shell curl --location --request DELETE 'https://stream-api.productsup.com/streams/124773/products/475-SHIRT-XL' \ --header 'Accept: application/vnd.api+json' ``` Delete single products by making a request to `/streams/{streamId}/products/{productId}`. # Streams import { Callout } from 'fumadocs-ui/components/callout'; This section introduces a concept called *Streams*. Streams are spaces where we can receive ongoing flows of structured data. Using Streams gives our clients the following possibilities: * Importing and merging data into a single site from different systems using multiple Streams. * Importing data from a single Stream into multiple sites in order to reuse the data without uploading it multiple times. * Allowing the clients to create and merge Streams by themselves. Stream creation [#stream-creation] You can create a maximum of 100 Streams per account. If you need more Streams, reach out to your Client Success Manager. Stream naming [#stream-naming] Stream names should be unique, and their length can be from 3 to 255 characters. Stream deletion [#stream-deletion] If you delete a Stream via API, it remains in our system for 7 days. During this period, you can no longer access the data of the deleted Stream, but its name remains reserved. When 7 days have passed, the system completely deletes the Stream, and its name becomes available for new Streams. Data retention [#data-retention] We retain the data you upload to a Stream for 3 months (90 days) until you import it. Once an import runs, we store the imported data permanently and the window no longer applies. | State | Retention | | :------------------------- | :------------------------------------------------------------ | | Uploaded, not yet imported | We remove it automatically 90 days after upload. | | Imported | We store it permanently. The 90-day window no longer applies. | This policy applies to every Stream, both new and existing. A Stream that continuously receives and imports data is never affected, because you consume its data well within the 90-day window. The window only removes data that has sat unimported for longer than 90 days. The 90-day window is counted per upload, from the time you send each item to the Stream — not from when you create the Stream. We permanently delete uploaded data that you don't import within 90 days. To retain data, make sure an import runs within the window. See [Import setup](/docs/stream-api/import-setup) for how to import data from a Stream. Stream formats [#stream-formats] Streams support different structured data types. For now, you can use the following formats for the input, but we may add more formats in the future: * Classic JSON * [Newline Delimited JSON](https://github.com/ndjson/ndjson-spec) (NDJSON) Stream types: Chunked & Referenced [#stream-types-chunked--referenced] The Stream API supports two Stream types to handle data: * Chunked * Referenced Chunked type [#chunked-type] The chunked type provides high throughput and upload speeds. We maintain the following hard-limits on payloads: * The maximum size of a single product is 1 MB. * The platform automatically rejects any product exceeding 1 MB. * You must split large data into chunks of up to 1 MB. * The total payload size shouldn't exceed 200 MB, either uncompressed or compressed. The chunked type supports the NDJSON format, which structure lets the platform keep the object deserialization simple and lets process more data. Referenced type [#referenced-type] The referenced type fits the clients who send extremely large quantities of data. Your request payload sent compressed or uncompressed, can't be greater than 200 MB. The referenced type supports both JSON and NDJSON format, though it's not as optimized as the chunked type for throughput and speed. Which is the best type for your use case? [#which-is-the-best-type-for-your-use-case] Answer the following questions to determine which Stream type is best for you. * Do you plan to send single product updates? Single product updates mean the platform will send requests for individual products. **If yes, use the chunked type.** * Do you plan to send frequent product updates? Frequent product updates mean that the platform pushes multiple updates per minute: single-product or batched updates. **If yes, use the chunked type.** * Do you work with delta-supporting destinations? Some destinations, such as GMC or Facebook Marketplaces, support delta updates. **If yes, use the chunked type.** As we continuously improve our systems, our latest end-to-end delta functionality lets you achieve a near-real-time pipeline and a much smoother integration. * Do you have a large catalog of over 10 million products and send delta updates? **If yes, use the chunked type.** The platform imports delta changes faster from the chunked Streams. * Are you going to send only full catalog updates? **If yes,** continue with the following questions to get more precise recommendations: * Is your catalog size over 10 million products? **If yes, use the referenced type.** * Do you import your data no more than 1-2 times per day? **If yes, use the referenced type.** If you don't have a definite answer, please use the **chunked type**. # Stream API import { Callout } from 'fumadocs-ui/components/callout'; The Stream API is the latest addition to the APIs Productsup offers to its clients that follows JSON API standards. Streams support a high throughput or number of items that undergo product changes. Streams can leverage how clients use their data in the Productsup Platform. The Stream API does not have a PHP library, we maintain an Open API Specification file which can be used to generate a client. Glossary [#glossary] | Term | Description | | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Stream | An account-bound space where you can send items via the Stream API. See [Streams](/docs/stream-api/streams) for more information. | | Batch | A collection of information about a group of products that you send to Productsup. | | Site | A location in the Productsup Platform where you import data from a Stream via Data Source. | | Product | Generic term to indicate data that is sent to the Stream API. The Productsup API does not require you to send only product information. It lets you send different types of data, as long as it follows some minimal requirements. | | Data Source | A location in the Productsup Platform where you import data from a Stream via Data Source. | | Productsup Platform | A connection between a Stream and a site. It lets clients select where to import data from. You can set this up in the Productsup platform. | | Personal Access Token | Means of authentication against our API. Also referred to as PAT. | Status Page [#status-page] Our status page provides real-time information on system performance and security. You will find live and historical data on system performance. The Status page will also contain messages on any service interruptions. You can subscribe on the page to updates and receive notifications via your preferred communication channel. [Status page](https://status.productsup.io/) # Batches import { Callout } from 'fumadocs-ui/components/callout'; You can access this API endpoint upon request only. If you need access to it, reach out to your Client Success Manager. This information about the `batches` response does not include everything. We recommend that you take a look at the Open API Spec as well. Once you send product data to the API, it responds with a status and a batch identifier or Batch ID. Use the Batch ID to check the processing status of a specific payload. Example using a chunked stream: ```shell curl --location --request GET 'https://stream-api.productsup.com/streams/124773/batches/b15e8bb1-bd53-470a-9597-785003536978' \ --header 'Accept: application/vnd.api+json' ``` We keep track of 3 overall statuses of a batch: * `uploaded` - when products were fully or partially uploaded to a stream * `processed` - when products were fully or partially processed and imported to a site * `failed` - when all products from a batch were invalid either during upload or processing stage. Each batch transits through 2 stages: `upload` and `processing` and each stage can be found with one of 3 statuses: * `success` - no invalid products were encountered * `warning` - at least 1 invalid product was encountered * `failure` - all products were invalid Partial uploads [#partial-uploads] When you upload a batch which contains some invalid products, a `chunked` stream accepts it as a partial upload and responds with a `202 Accepted` HTTP status code. The property `data.attributes.stages.upload` of the batch object then includes the status of the upload stage, a number of successfully uploaded products, details of how many invalid products were encountered, and a list of unique error messages captured with example raw product data. A `referenced` stream does not validate products on upload and will always indicate that an upload was either a `success` or `failure`. Processing [#processing] When you run an import process, the property `data.attributes.stages.processing` of the batch object gets updated with the status of the processing stage, which also includes a number of successfully imported products, a number of errors encountered, and a list of unique error messages captured with example raw product data. Invalid batch [#invalid-batch] Chunked type [#chunked-type] | Error | Response Code | Description | | ----------------------------------------------------- | ------------- | ------------------------------------------------------------------ | | Empty Product Attributes | 422 | When sending a product where all attributes are empty | | Empty Payload line | 422 | When sending an empty line | | Missing "id" attribute | 422 | When the id attribute is not found in the product details | | Product payload is too large | 422 | When the payload size is too big, max line length is 2097152 bytes | | Control character error, possibly incorrectly encoded | 422 | When there is an error in data coding like missing an open quote | | Syntax error | 422 | When missing a comma between attributes for example | | Empty Payload | 422 | When the payload is empty | Empty Product Attributes of Chunked type: ```shell curl --location --request POST 'https://stream-api.productsup.com/streams/streamId/products' \ --header 'Content-Type: application/x-ndjson' \ --header 'Authorization: Bearer token' \ --data-raw '{}' ``` Empty Payload line of Chunked type: ```shell curl --location --request POST 'https://stream-api.productsup.com/streams/streamId/products' \ --header 'Content-Type: application/x-ndjson' \ --header 'Authorization: Bearer token' \ --data-raw ' ' ``` Empty Payload of Chunked type: ```shell curl --location --request POST 'https://stream-api.productsup.com/streams/streamId/products' \ --header 'Content-Type: application/x-ndjson' \ --header 'Authorization: Bearer token' \ --data-raw '' ``` Referenced type [#referenced-type] | Error | Response Code | Description | | ------------- | ------------- | ------------------------- | | Empty Payload | 422 | When the payload is empty | Empty Payload of Referenced type (example 1): ```shell curl --location --request POST 'https://stream-api.productsup.com/streams/streamId/products' \ --header 'Content-Type: application/json' \ --header 'Accept: application/vnd.api+json' \ --header 'Authorization: Bearer token' \ --data-raw '[{ }]' ``` Empty Payload of Referenced type (example 2): ```shell curl --location --request POST 'https://stream-api.productsup.com/streams/streamId/products' \ --header 'Content-Type: application/json' \ --header 'Accept: application/vnd.api+json' \ --header 'Authorization: Bearer token' \ --data-raw '[]' ``` Empty Payload of Referenced type (example 3): ```shell curl --location --request POST 'https://stream-api.productsup.com/streams/streamId/products' \ --header 'Content-Type: application/json' \ --header 'Accept: application/vnd.api+json' \ --header 'Authorization: Bearer token' \ --data-raw '[ ]' ``` Empty Payload of Referenced type (example 4): ```shell curl --location --request POST 'https://stream-api.productsup.com/streams/streamId/products' \ --header 'Content-Type: application/json' \ --header 'Accept: application/vnd.api+json' \ --header 'Authorization: Bearer token' \ --data-raw '' ``` # Uploading Data import { Callout } from 'fumadocs-ui/components/callout'; See the chapter on [Stream types](/docs/stream-api/streams#stream-types-chunked--referenced) for more information on the differences between both types and also payload recommendations. In general, our main recommendation is to go with the Chunked Stream type. This type is optimized for high throughput and speed. There is a single endpoint to upload data to Productsup: `/streams/{streamId}/products` The endpoint to upload data is not REST compatible, therefore the methods POST, PATCH, and PUT all produce the same behavior. We maintain strict rate limits on all our upload endpoints. See [Rate limits](/docs/stream-api/rate-limiting) for more information. We recommend you implement a [retry and exponential backoff mechanism](/docs/stream-api/rate-limiting#retry-and-backoff-mechanisms). Request body [#request-body] Example 1: Chunked Stream - NDJSON with one product ```shell curl --location --request POST 'https://stream-api.productsup.com/streams/124773/products' \ --header 'Content-Type: application/x-ndjson' \ --header 'Accept: application/vnd.api+json' \ --data-raw '{"id":"34SKJDF42DF","name":"Product 1","company":"My Company"}' ``` Example 2: Chunked Stream - NDJSON with multiple products ```shell curl --location --request POST 'https://stream-api.productsup.com/streams/124773/products' \ --header 'Content-Type: application/x-ndjson' \ --header 'Accept: application/vnd.api+json' \ --data-binary @- < Example 3: Referenced Stream - NDJSON with multiple products ```shell curl --location --request POST 'https://stream-api.productsup.com/streams/224773/products' \ --header 'Content-Type: application/x-ndjson' \ --header 'Accept: application/vnd.api+json' \ --data-binary @- < Example 4: Referenced Stream - JSON with one product ```shell curl --location --request POST 'https://stream-api.productsup.com/streams/224773/products' \ --header 'Content-Type: application/json' \ --header 'Accept: application/vnd.api+json' \ --data-raw '[{"id":"34SKJDF42DF","name":"Product1","company":"My Company"}]' ``` Example 5: Referenced Stream - JSON with 3 products ```shell curl --location --request POST 'https://stream-api.productsup.com/streams/224773/products' \ --header 'Content-Type: application/json' \ --header 'Accept: application/vnd.api+json' \ --data-binary @- < Example 6: Referenced Stream - JSON with compressed products ```shell curl --location --request POST 'https://stream-api.productsup.com/streams/224773/products' \ --header 'Content-Type: application/json' \ --header 'Accept: application/vnd.api+json' \ --header 'Authorization: Bearer pup_token' \ --header 'Content-Encoding: gzip' \ --data-binary '@/path/to/compressed_file' ``` Example 7: Chunked Stream - JSON with compressed products ```shell curl --location --request POST 'https://stream-api.productsup.com/streams/224773/products' \ --header 'Content-Type: application/x-ndjson' \ --header 'Accept: application/vnd.api+json' \ --header 'Authorization: Bearer pup_token' \ --header 'Content-Encoding: gzip' \ --data-binary '@/path/to/compressed_file' ``` The type of the Stream dictates the allowed payload format: * Chunked Streams accept `application/x-ndjson` * Referenced Streams accept `application/json` or `application/x-ndjson` Accompany every request with the correct Content-Type header. The platform does not support the mixing of different content types in a single Stream. Productsup supports gzip compression for both types of Streams to improve performance further. Use the Content-Encoding header to specify gzip compression for request payloads. Nested structures or non-scalar values are not supported in neither NDJSON nor JSON content-types; we recommend: * Flattening any nested structure into a single level object * Non-scalar should be concatenated or spread over multiple attributes Response depending on stream status [#response-depending-on-stream-status] The stream status feature is essential for maintaining and protecting our system's performance. It lets our data source actively monitor stream status, enabling administrators and automated processes to manage streams and prevent potential system overload responsibly. | Status | Description | | ------------------ | ----------------------------------------------------------------------------------------------------------------------- | | active | Default value | | disabled | Stream is disabled and rejects uploads. HTTP app returns 403 Forbidden status, and the platform doesn't trigger import. | | locked | Stream is temporarily locked. HTTP app returns 423 Locked status, and the platform prohibits data upload and import. | | locked\_upload | Stream is temporarily locked for uploading. HTTP app returns 423 Locked status. | | locked\_processing | Stream is temporarily locked for importing. | Product attribute requirements [#product-attribute-requirements] Incompatible nested JSON payload: ```json { "name": "Alice", "age": 30, "address": { "street": "123 Main St", "city": "Springfield", "zip": "12345" }, "contact_details": { "email": "alice.springfield@example.com", "phone_numbers": [ { "type": "mobile", "number": "+1-555-555-5555" }, { "type": "home", "number": "+1-555-555-1155" } ] }, "hobbies": ["reading", "hiking", "chess"] } ``` Compatible flattened JSON payload: ```json { "name": "Alice", "age": 30, "address_street": "123 Main St", "address_city": "Springfield", "address_zip": "12345", "contact_email": "alice.springfield@example.com", "contact_phone_mobile": "+1-555-555-5555", "contact_phone_home": "+1-555-555-1155", "hobbies": "reading,hiking,chess" } ``` Compatible flattened NDJSON payload: ```json {"name":"Alice","age":30,"address_street":"123 Main St","address_city":"Springfield","address_zip":"12345","contact_email":"alice.springfield@example.com","contact_phone_mobile":"+1-555-555-5555","contact_phone_home":"+1-555-555-1155","hobbies":"reading,hiking,chess"} ``` To accommodate to our clients data sets, we don't enforce a specific standard set of attributes or naming conventions. Stream API accepts only flat JSON objects and attributes with scalar values. We recommend the following rules for naming and handling attributes: * Ideally attributes are lowercase and do not contain any spaces or special characters. * Nested structures or non-scalar values are not supported in neither NDJSON nor JSON content-types; we recommend: * Flattening any nested structure into a single level object * Non-scalar should be concatenated or spread over multiple attributes Internally, we rely on the SQLite format so we are bound to its technical limits. All data is stored in the SQLite TEXT data type. * When you add new attributes in future requests: * New attributes horizontally expand existing data with empty values * When attributes are not part of the upload anymore: * If any existing row has a value for that attribute, the attribute remains in existence. * Any new row uploaded without the attribute will have an empty value If an attribute clean up is needed, we recommend you to remove all rows and start with a clean dataset. ID-attribute tips [#id-attribute-tips] The `id`-attribute is the only mandatory attribute. We always require that an `id`-attribute is present. *This is our golden rule*. The `id`-attribute is a unique identifier to your specific data row and the platform uses the id-attribute to create new rows, apply permutations, and delete specific rows. Boolean and null value handling [#boolean-and-null-value-handling] Boolean and null values undergo automatic conversion when stored: | Value | Type | Value after conversion | | ----- | ------- | ---------------------- | | true | boolean | `1` | | false | boolean | `''` (empty string) | | null | null | `''` (empty string) | To avoid unexpected conversions and maintain data integrity, we **strongly recommend** sending boolean values as string literals `'true'` or `'false'`. Recommended boolean handling: ```json { "id": "123", "name": "Product Name", "in_stock": "true", "on_sale": "false" } ``` Site Stream Data Sources [#site-stream-data-sources] The data source management endpoint allows you to link your streams to sites programmatically. You can create Stream API datasources and link them to sites, update them, delete or get more information about existing links. The authentication for this endpoint is unified, i.e. the new Stream API Personal Access Token authentication can be used to access functionality from the Platform API. # Import Setup import { Callout } from 'fumadocs-ui/components/callout'; You don't need any special platform knowledge to set up an import with the Stream API. But if you need help, take the following steps. Prerequisites [#prerequisites] To set up the import with Stream API, you need to have: * User access to the Productsup platform * A site in the Productsup platform ready for data import * The Stream ID and Stream name(s). If you don't have any of the listed components, contact your Client Success Manager. Set up an import [#set-up-an-import] To create Stream API Data Sources via our API, use the [Site Stream Data Source endpoint](/docs/stream-api/uploading-data#site-stream-data-sources). . Open your site in the platform and go to **Data Sources** in the main menu. . Select **Add Data Source**. . In the search field, enter *Stream API* and find *Stream API Data Source*. . Select **Add** to add the data source. . Give your data source a custom name, as desired, to identify it among multiple data sources. . Select **Next** and get to **Data Source Configuration** page. . Select the Stream you want to import from. You can use the label **Stream** to find it later. . Change the description, as needed. . Select **Save** and get back to the **Data Sources** page. . If your Stream already contains data, select **Import** in the upper-right corner to import the data. . View your imported data in **Data View**. Empty data sources [#empty-data-sources] By default, the platform doesn't perform the import if a data source is empty, as it leads to a failure. But certain API scenarios may need to import an empty data source. For example, you may need to purge all data. To import an empty data source, take the following steps: . Open your site in the platform and go to **Data Sources** in the main menu. . Edit the **Stream API** data source. . Go to the tab **Advanced Settings**. . Go to **Options**. . Check the checkbox **Allow this datasource to have no products**. . Select **Save Options**. To inactivate the import of an empty data source, repeat the steps above and, in Step 6, uncheck the checkbox **Allow this datasource to have no products**. Platform recommendations [#platform-recommendations] Don't activate the option **Allow this datasource to have no products** without a necessity and agreement with the API Team, as we don't anticipate to have an empty data source. We recommend setting up the error event [Number of imported items decreased](https://help.productsup.com/en/29564-29566-monitor-events-overview.html#idm45706619541280) in [Monitor](https://help.productsup.com/en/29564-29565-data-quality-and-monitor-errors.html) of in the main menu of our platform. Set a threshold in percentage within which your product numbers can decrease. If the product number is less than the threshold, the platform takes an action. For example, the platform stops the import and sends you a notification via email or Slack. # Rate Limiting import { Callout } from 'fumadocs-ui/components/callout'; Different endpoints of the Stream API are subject to different rate limits. Rate limits are calculated based on the client's authentication token and URL path of the accessed endpoint. As visible in the following table, *products* and *batches* endpoints get rate limited by client's authentication token and by the unique stream ID from the URL. Meaning that each *stream* gets rate limited independently. | Endpoint | Description | Limit | | ----------------------------- | --------------------------------------------------------------------- | ---------------------------------------- | | /streams/\{streamId}/products | Products endpoint for pushing data | 30 requests per second per `{streamId}` | | /streams/\{streamId}/batches | Batches endpoint for reading the processing status of a batch | 100 requests per second per `{streamId}` | | /\* | All other endpoints (the limit applies to each endpoint individually) | 5 requests per second | We recommend you implement a [retry and exponential backoff mechanism](#retry-and-backoff-mechanisms). This ensures that systems operate correctly when the Stream API rate-limits them. Rate limit HTTP headers [#rate-limit-http-headers] The response headers of all HTTP requests sent to the Stream API show your current rate limits: ``` $ curl -I https://stream-api.productsup.com HTTP/2 200 ratelimit-limit: 5 ratelimit-observed: 1 ratelimit-remaining: 4 ratelimit-reset: 1651174223 ``` | Name | Description | | ------------------ | -------------------------------------------------------------------- | | ratelimit-limit | The maximum number of requests allowed per second. | | ratelimit-observed | The number of requests remaining in the current rate limit window. | | ratelimit-reset | The time at which the current rate limit window resets in Unix time. | When you exceed the rate limit, an error response returns: ``` HTTP/2 429 ratelimit-limit: 5 ratelimit-observed: 5 ratelimit-remaining: 0 ratelimit-reset: 1651174223 {"errors":[{"status":"429","title":"Too Many Requests"}]} ``` Timeouts [#timeouts] If the Stream API takes more than 10 seconds to process an API request, it will terminate the request. You will receive a timeout response and a Server Error message. Productsup reserves the right to change the timeout window at any time to protect the API's speed and reliability. The only exception to our default timeout is the [data upload endpoint](/docs/stream-api/uploading-data), which timeout we don't maintain. Retry and backoff mechanisms [#retry-and-backoff-mechanisms] We recommend implementing retries for the following response status codes: * 5xx Server Errors. * 249 Custom Error. * 408 Request Timeout. * 429 Too Many Requests. Implement response headers with rate-limiting for this status code. Key implementation points [#key-implementation-points] * Implement at least five retry attempts per originally failed request * Use an [exponential backoff mechanism](https://en.wikipedia.org/wiki/Exponential_backoff) Reasons to use exponential backoff [#reasons-to-use-exponential-backoff] Use the exponential backoff to: * Avoid overloading the platform during error periods. * Increase the likelihood of converting failed requests into successful ones. * Have more effectiveness during error surges than with a simple fixed-delay mechanism, such as retrying every second. Implementation reference [#implementation-reference] For PHP implementation, you can reference the `exponentialDelay()` method in Guzzle HTTP clients' [RetryMiddleware class](https://github.com/guzzle/guzzle/blob/7.9/src/RetryMiddleware.php#L55). We use this method in our internal integrations with great success. # Stream Management import { Callout } from 'fumadocs-ui/components/callout'; The stream management endpoints bring independence and flexibility to our customers. They let customers integrate stream management into their workflow. Stream creation [#stream-creation] Create a stream if you have access to only one organization: ```shell curl --location --request POST 'https://stream-api.productsup.com/streams' \ --header 'Content-Type: application/vnd.api+json' \ --header 'Accept: application/vnd.api+json' \ --data-raw '{ "data": { "type": "stream", "attributes": { "name": "My product stream", "type": "chunked" } } }' ``` Create a stream if you have access to multiple organizations: ```shell curl --location --request POST 'https://stream-api.productsup.com/streams' \ --header 'Content-Type: application/vnd.api+json' \ --header 'Accept: application/vnd.api+json' \ --data-raw '{ "data": { "type": "stream", "attributes": { "name": "My product stream", "type": "chunked" } }, "relationships": { "account": { "data": { "type": "account", "id": ID_OF_ORGANIZATION_WHERE_STREAM_SHOULD_BE_CREATED } } } }' ``` When you create a stream, you have two required attributes and one optional: * `name` (required) is the arbitrary value you can use to identify your stream. This attribute is also visible in the UI when you select a stream in Data Sources. * `type` (required) is a stream type, such as `chunked` or `referenced`. See [Stream types: chunked and referenced](/docs/stream-api/streams#stream-types-chunked--referenced). * `relationships` (optional) is an attribute that lets you determine which organization you want to create a stream for. Apply this attribute only if you have access to multiple organizations. By default, the platform will create a stream in your first or only existing organization. *Please note that we still use the term "account" in the relationships-attribute instead of the term "organization", they do refer to the same entity.* List Stream [#list-stream] List all Streams: ```shell curl --location --request GET 'https://stream-api.productsup.com/streams' \ --header 'Accept: application/vnd.api+json' ``` List Streams next page: ```shell curl --location --request GET 'https://stream-api.productsup.com/streams?page[offset]=10&page[limit]=10' \ --header 'Accept: application/vnd.api+json' ``` List a specific Stream: ```shell curl --location --request GET 'https://stream-api.productsup.com/streams/124773' \ --header 'Accept: application/vnd.api+json' ``` You can either list all Streams the user has access to or a specific, individual Stream. The list of all Streams is paginated to a maximum of 10 Streams per page. To traverse the paginated list you can use the pagination links which can be found in the top-level `links` object of the response. We support the following query parameters for traversing: * `page[offset]` - The offset determines the start record. * `page[limit]` - The limit determines the number of records to display. * We maintain from 1 to 10 Streams per page. Update Stream [#update-stream] Update a specific Stream: ```shell curl --location --request PATCH 'https://stream-api.productsup.com/streams/124773' \ --header 'Content-Type: application/vnd.api+json' \ --header 'Accept: application/vnd.api+json' \ --data-raw '{ "data": { "id": "124773", "type": "stream", "attributes": { "name": "My product Stream with an updated name" } } }' ``` We only allow updating the name of a Stream. Due to technical limitations, it's impossible to change the Stream type. If you need to change the type, we recommend you create a new Stream with the correct type and remove the old Stream. If you have access to multiple accounts, you can't move the existing Stream to another account. If you need to move the Stream to another account, we recommend you create a new Stream in the new account. Remove Stream [#remove-stream] Remove a Stream: ```shell curl --location --request DELETE 'https://stream-api.productsup.com/streams/124773' ``` Remove Streams if you no longer need them, or if a client needs to switch between the type of Streams. When you delete a stream, you are deleting all contained data as well. If you removed a client(s) while switching between Stream types, you must push the full catalog to the new Stream. When you remove a Stream, **all data** inside the Stream is **unrecoverable** after deletion. # API Standards import { Callout } from 'fumadocs-ui/components/callout'; JSON API Standard [#json-api-standard] The Stream API follows the [JSON API standard](https://jsonapi.org/). This implies that all requests and responses are following the defined structure and are using the content-type *application/vnd.api+json*. Productsup does not accept the content-type set with the JSON API Standard to request bodies for product uploads. The reason for this is because: * The `application/vnd.api+json` content-type has too much overhead for product data * The `application/x-ndjson` offers better performance when extracting single products from a request * The `application/json` is our legacy standard, as Productsup does not want to force existing clients to change their entire integration The non-acceptance does not imply that Productsup never supports sending data in `application/vnd.api+json` format. However, there is a need to understand the value first. The product data upload endpoints are the **only** exception to the JSON API Standard. Implementation recommendations [#implementation-recommendations] Compression support [#compression-support] Enable gzip compression with the following header: ```bash Content-Encoding: gzip ``` Curl option to enable gzip compression: ```bash --header 'Content-Encoding: gzip' ``` The Stream API supports gzip compression for product uploads to improve performance. Use the Content-Encoding header to specify gzip compression for request payloads. Gzip compression can significantly reduce the payload size, leading to shorter upload times and better performance. See [uploading data](/docs/stream-api/uploading-data) to learn how to use gzip compression with a product upload request with the [two stream types](/docs/stream-api/streams#stream-types-chunked--referenced). Client header [#client-header] We recommend using the User-Agent header to send additional information about your integration to the Stream API. The default format of the User-Agent header looks as follows: `ProductName/Version (System Information) AdditionalDetails` ``` ReactorNetty/1.1.23 Productsup/ Go-http-client/2.0 Productsup/ Java/21.0.3 Productsup/ python-requests/2.31.0 Productsup/ ``` We recommend adding the integration specific name in the `AdditionalDetails` section of the User-Agent header. Use the format `Productsup/`, where replace `` with a desired name. You can append the string to the `AdditionalDetails` section. See above for examples. # Authentication Your Productsup main contact can support with getting Stream API Access. Additionally, they can also be contacted for creating new / additional tokens and revoking tokens. Example authentication request (actually lists streams): ```shell curl --location --request GET 'https://stream-api.productsup.com/streams/124773' \ --header 'Authorization: Bearer ' ``` Stream API authentication layer is set up based on the concept of PAT. The Productsup platform links PATs to user accounts. In the future, they will let you finely control user permissions. However, there are currently no specific authorizations other than full access. Each request you make to the Stream API needs authentication. To receive authentication, you must send an authorization header with a bearer token. The following is an example of the header format: `Authorization: Bearer ` # Export Template Management import { Card, Cards } from 'fumadocs-ui/components/card'; Export Template Management (ETM) helps you build and maintain reusable export templates for any channel or marketplace. With ETM, you can standardize your export setup, improve data quality with **Analyzer Tests**, and reduce repetitive manual work by reusing templates across sites and projects. Use the **Developer Portal** for visual configuration, or automate workflows through the **ETM API**. Getting started [#getting-started] Start here to understand how ETM works and get access to the Developer Portal. Reference [#reference] In-depth documentation for each building block. Developer guides [#developer-guides] Integration guides for working with the ETM API directly. API reference [#api-reference] Browse every endpoint of the Export Template Management API. # Productsup Connect import { Callout } from 'fumadocs-ui/components/callout'; import { Card, Cards } from 'fumadocs-ui/components/card'; **Productsup Connect** is our suite of tools for importing, enriching, and exporting data from the Productsup platform. Whether pulling product data from systems, enhancing it with external services, or pushing it to channels and APIs — these tools let you build integrations that fit your needs. Connectors and integrations can be built by Productsup, system integrators, or clients with development resources. Some tools (like Stream API) require client development work; others can be fully implemented by Productsup or partners on your behalf. This page outlines each tool, when to use it, and links to further documentation. Tools by Use Case [#tools-by-use-case] Tool Comparison [#tool-comparison] | Tool | Direction | Delta Support | Client Dev Required? | Format Flexibility | Best For | | -------------------------------------------------------------------------------- | ------------------- | -------------- | -------------------- | ------------------- | -------------------------------------------------------- | | [**Import Connector**](/docs/productsup-connect/use-cases/import) | Pull (scheduled) | No | Optional | Flexible | APIs/files when you don't need deltas | | [**Stream API**](/docs/productsup-connect/use-cases/import/stream-api) | Push | Yes | Yes | Rigid (NDJSON/JSON) | Real-time updates at scale | | [**Webhook API**](/docs/productsup-connect/use-cases/import/webhook-api) | Push (event-driven) | Yes | Optional | Flexible | Webhook/callback integrations | | [**Data Service Connector**](/docs/productsup-connect/use-cases/data-enrichment) | Internal | N/A | Optional | Custom logic | Enriching/transforming data | | [**Export Connector**](/docs/productsup-connect/use-cases/export) | Export (push) | Yes (optional) | Optional | Flexible | Custom API delivery, custom file formats | | [**ETM API**](/docs/productsup-connect/use-cases/export/etm-api) | N/A | N/A | Optional | Structured | Managing export schemas programmatically | | [**Export API**](/docs/productsup-connect/use-cases/export/export-api) | Export (pull) | N/A | Optional | Structured | Exposing data via REST for third parties | | [**Platform API**](/docs/platform-api) | Account management | N/A | Yes | Structured (REST) | Managing projects, sites, channels, triggering processes | # Glossary import { Callout } from "fumadocs-ui/components/callout"; The glossary contains terms used to describe the Productsup platform features and processes. The list of terms is in alphabetical order. Some terms have several definitions. Pay attention to spelling and capitalization as some terms with different capitalization mean different things. As a rule, the names of features and UI elements are in title case. Some definitions contain links to the Help Center documents to give you more details. **activity** . **activity**: A change or changes a user has performed in a site, project, or organization, as registered in Activity Log. . **Activity**: A feature in Productsup that lets you track activity in your organization, project, or site. See [View your Activity Log and Summary](/docs/help-center/get-started/manage-your-organization-projects-and-sites/view-your-activity-log-and-summary). **Activity Log** A tab in the Activity feature that displays changes connected with your users' activity in Dataflow and Data View. See [View your Activity Log and Summary](/docs/help-center/get-started/manage-your-organization-projects-and-sites/view-your-activity-log-and-summary#section-idm4518380338987233453183092944). **Activity Summary** A tab in the Activity feature that displays the number of monthly maintained and exported items to provide an overview of an organization’s, project’s, or site’s scale of activity. See [View your Activity Log and Summary](/docs/help-center/get-started/manage-your-organization-projects-and-sites/view-your-activity-log-and-summary#section-idm4563999991192032637778997619). **Analyzer** A feature in Data View that provides attribute data analytics, such as value statistics and the correspondence between attribute values and channel requirements. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view). **analyzer tests** Tests in Analyzer that check if attribute values meet a particular channel’s requirements. One test is one section in the Tests panel in the Analyzer sidebar menu. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view). **API export** A type of export or export template in Productsup that uses an API-based destination to deliver data to the desired channel. API exports are a great choice for handling huge data feeds that get very frequent data changes, thus requiring very frequent updates in the channel. API exports also make it possible to get feedback about the submission of your feed to the channel directly in the Productsup platform. **attribute** A characteristic of an item, such as title, id, or price. Attributes are represented as columns in Data View and as fields in the different stages in Dataflow. There are mandatory and optional attributes. Never use *column* or *field* to refer to an attribute. **Attribute insights** Statistics on attribute values that can give you insights into attribute contents, such as the number of unique values and their usage frequency, value length, percentage, and number of empty values, etc. Prev. *Top Values*. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view). **authentication** . **authentication**: an entity in Authentication that lets the Productsup platform connect with a third-party system and upload data from it or send data to it. . **Authentication**: a feature that authenticates Productsup to receive data from or send data to third-party systems. **blank export** An export type representing a customizable blank canvas that uses one of these blank export templates. * Blank Export (empty) * Blank Export (with ID) * Delta Blank Export * Export2Datasource Blank You can use blank exports to download the exported data as a file for overview or for sending data to the channels that don’t have a dedicated export template in the platform. See [Build your exports from scratch](/docs/help-center/export-data-feeds/add-export/build-your-exports-from-scratch). **bulk action** A way to make changes across multiple exports, dataflows, sites, projects, etc. located in Overview at the organization level. Prev. *bulk option*, *bulk operation*. See [Use bulk options to perform actions across multiple sites](/docs/help-center/get-started/manage-your-organization-projects-and-sites/use-bulk-options-to-perform-actions-across-multiple-sites). **category-specific attributes** Attributes in the export stage in Dataflow that are relevant only for particular product categories. Once a user configures the attributes relevant for all product categories, they can use the Classifications dropdown in Dataflow to choose the needed category and set up the attributes relevant for it. Prev. *category export*, *category-specific export*. **category-specific attributes export** A CSA export (category-specific attributes export) is a type of export that deals with channels expecting a different set of attributes for each product category. CSA exports consist of two parts: attributes required for products of all categories and category-specific attributes. **channel** The target system of the export process, where customers want their data. It can be marketplaces (Amazon, eBay, OTTO), search engines (Google, Bing), social media (Pinterest, Instagram, Facebook), etc. Never use *export* or *destination* to refer to an export. **connection** A line connecting two attributes between two stages in Dataflow that sends data from one attribute in a preceding stage to another attribute in the following stage. Connections can be: * **indirect connections** (light-green and light-blue): a connection between two attributes of two stages in Dataflow one of which already has a connection to another attribute. This indicates that the attribute in the following stage appends the data of the attribute in the preceding stage or otherwise uses it in a rule box. * **warning connections** (red): a connection between two attributes of two stages in Dataflow where the attribute in the preceding stage is no longer present in the imported data, or if a rule box applied to this connection is missing the required attribute values. **connector** A connector is an under-the-hood application that imports, modifies, or exports data in the Productsup platform. For example, a connector uses the settings of the following platform entities: * Data source settings to fetch data from a defined location and import it into Productsup. * Destination settings to send data to the needed location. * Data service settings to modify data in your site. Connectors are managed in the Developer Portal. **Content Portal** A separate self-service portal designed to let Productsup users share the latest product information with non-platform users. See [Content Portal](/docs/help-center/content-portal). **core readiness score** A view option at the export stage in Data View that shows how many mandatory attributes are export-ready. Prev. *readiness report*, *export readiness*. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view#section-idm4580797893995233726544664701). **Data Map** A feature in Productsup that visualizes the import, intermediate, and export stages of a site in a flowchart. **dataflow** . **dataflow**: an entity in the platform that describes the way attributes are connected from import to export, together with all applied rule boxes and rule box conditions. A dataflow can be copied or shared among sites. . **Dataflow**: the platform feature that lets you map your attributes between stages and optimize your data with rule boxes. **data feed** A data set containing all information about the customer's products, orders, offers, or other types of data imported from data sources into a Productsup site. Prev. *product data*, *product content*, *product catalog*. **data service** . **data service**: an entity in the platform that lets you enhance and restructure your data. You can add a data service in Data Services. . **Data Services**: the platform feature that lets you select and set up a needed data service. Data services use their dedicated connectors to modify data in Productsup. Always use the full term without shortening it to *services*. See [Enhance your import data through Data Services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services). **data source** . **data source**: an entity in the platform that lets you import your data. A data source can be a flat file, a PIM system, a cloud storage, or a shopping or marketing platform. You can add a data source in Data Sources. There are main and additional data sources. . **Data Sources**: the platform feature that lets you add and manage your data sources. Types of data sources: * **Main data source**: a data source containing your data, where each line represents an item and each column represents an attribute. Each new main data source that you add imports more items to your site and extends it vertically. See [Add a main data source to import your products](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-a-main-data-source-to-import-your-products). * **Additional data source**: a data source containing additional information about the items that are already a part of your main data source. An additional data source links new information to the items in the main data source using a unique item identifier. Each additional data source extends the data in your site horizontally. See [Enhance your products with additional data sources](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources). Data sources use their dedicated connectors to import data into Productsup. **Data View** A feature in the platform that visualizes your data feed and lets you edit attribute values using rule boxes. **delta updates** A way of storing or transmitting only data differences instead of all data, which reduces loading times. The platform generates delta updates for new, changed, unchanged, and deleted items. * *New*: new items. * *Changed*: items that have been exported before, but their data has changed. * *Deleted*: items that aren’t being exported anymore because of skip rule boxes or deletions. * *Unchanged*: items that have been exported before and haven't had any changes. Prev. *delta files*. You can still use *delta files* to refer to the actual files generated by an export. **destination** A method of uploading your data to the desired channel, which can be: * Physical storage spaces (cloud, FTP server, Productsup Server). * Upload mechanisms (API). To upload data to the needed location/mechanism, destinations use connectors. **Developer Portal** A separate portal used to manage export templates (attributes, analyzer tests, destinations) and connectors. This portal is part of the [Productsup Connect](https://www.productsup.com/productsup-connect/) program. **enhanced readiness score** A view option at the export stage in Data View that shows how many mandatory and optional attributes are export-ready. Prev. *optimization report*. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view#section-idm4506157683907233726544844012). **error** A type of event registered in Error Log after a site run finishes. Errors indicate failed attempts to import or export data. **export** . to **export** (v): to send data from the platform to the selected destination. . an **export** (n): * an entity in the platform that a user adds in a site to prepare and send data to the desired channel via a destination. When adding an export, a user chooses an export template (Google Merchant Center, Delta Blank Export, etc.). * a partial site run dedicated to the process of applying data transformations at the export stage and sending the processed data from the platform to the active destinations. . the **export stage**: the final stage in Dataflow or Data View. . **Exports**: the platform feature that lets you add and manage your exports. See [Add export](/docs/help-center/export-data-feeds/add-export). UUID-2aabf34f-a1a6-750c-3c28-2d08e3c320d4 **export template** A ready-to-use template for creating exports in Productsup (Google Merchant Center, Delta Blank Export, Facebook Dynamic Ads, etc.). It contains the attributes, analyzer tests, and destinations that a user needs to send their data to a relevant channel. You can see export templates only on the ADD EXPORTS page in Productsup or in the Developer Portal. Never use *channel*, *export*, *channel schema*, *export channel*, or *destination* to refer to an export. UUID-78b846fe-11af-f9ae-facb-1d2e3cda5d50 **exported items** The total monthly number of exported items per site, project, or organization available in Activity. Prev. *exported products*. See [View your Activity Log and Summary](/docs/help-center/get-started/manage-your-organization-projects-and-sites/view-your-activity-log-and-summary#section-idm4563999991192032637778997619). **event** Something that occurs in a site causing errors or warnings available in Error Log and triggering monitoring actions in Monitoring. In the context of the Monitoring feature, you can refer to it as a *monitoring event* instead of *event* to be more specific. **file export** A type of export or export template in Productsup that generates a CSV, TSV, XLSX, XML, JSON, or other file with your data and sends it to a physical export destination to deliver data to the desired channel. Once the destination receives the file, you need to manually add the export file in your channel to upload its data. It may often be a quick one-time job, but in some cases, that may mean uploading the export file to the channel every time you want to update your data. File exports are a great choice for handling data feeds that don’t get updated very frequently. They are also often easier to set up and maintain than API exports. **import** . to **import** (v): to upload data to the platform. . an **import** (n): a partial site run dedicated to the process of uploading data from data sources to the platform. . the **import stage**: the first stage in Dataflow or Data View. Never use *data source* to refer to an import. **integrations** A collective name for data sources and exports in Productsup. **intermediate** The middle stage between import and export in Dataflow or Data View. **issue** Unsuccessful product validation attempts, data improvement messages, errors, or other problems of varying severity that occurred on the channel side after a site run completed. You can see a quick overview of the most recent issues in the site dashboard or go to Feedback Service to view the export run history with the details of all related issues and how they affected your feed. **item** A product or other entity sold or used by our customers on marketing and distribution channels. Items are represented as lines in Data View and as pages in the Preview mode in Dataflow. Never use *product*, *row*, *line*, or *SKU* to refer to an item. UUID-9fa5e029-5846-69be-a7de-27b07fc8c080 **level** A layer in the Productsup data structure. There are three levels: * Organization * Project * Site Never use *stage* to refer to a level. **list** A tool in the platform that lets you substitute current values in an attribute with other relevant values, for example, in-house product categories with Google categories. You can create a list in **Lists** and apply it to an attribute using a rule box. **main export** A type of export that an export template creates in users' sites. This is relevant only in the context of billing and export clustering. Main export templates work as standard export templates but also have one or more sub-exports associated with them. For example, *Upljft - Basic catalog* is the main export template for sub-exports *Upljft - Country feed* and *Upljft - Language feed*. This system helps to avoid overages by clustering multiple similar sub-exports that send data to the same channel but for different countries, languages, etc. Prev. *main channel*. See [Usage Data Dashboard and overage calculations](/docs/help-center/get-started/user-management/usage-data-dashboard-and-overage-calculations#section-idm4566155912553633230374234816). **maintained items** The average monthly number of imported items per site, project, or organization available in Activity. The platform calculates the average number of items in the import and intermediate stages and displays the higher of the two numbers. Prev. *administered lines*, *imported rows*, *maintained products*. See [View your Activity Log and Summary](/docs/help-center/get-started/manage-your-organization-projects-and-sites/view-your-activity-log-and-summary#section-idm4563999991192032637778997619). **monitoring action** An entity in Monitoring that sends users notifications or stops site runs if a certain error occurs in a site. Prev. *error event*, *monitoring event*. See [Monitor events overview](/docs/help-center/dashboard-and-monitor/ensure-data-quality-in-monitoring/monitor-events-overview). **Onboarding Portal** A separate self-service portal designed to let suppliers and vendors upload their data, map it to the relevant retailer’s or distributor’s data model, and send it to the needed target systems via the Productsup platform. **organization** The Productsup instance of the customer’s company containing all information related to their company, such as all projects, their sites, users, data feeds, monitoring actions, etc. Prev. *account*. You can use the term *account* when referring to user accounts or when it doesn’t relate to the organization level in PUP, such as an *FTP account*. **platform-generated attributes** The attributes automatically generated for technical purposes. All platform-generated attributes start with three underscores (\_\_\_), which means the platform doesn't export them. The types of platform-generated attributes: * Whitelist. See [Platform-generated attributes for whitelisted products](/docs/help-center/map-and-optimize-your-data/lists/whitelist-feature#section-idm2473753000176920). * Skipped. See [Platform-generated attributes for skipped products](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/include-or-exclude-products#section-idm2465176963221348). * Segment. See [Platform-generated segment attributes](/docs/help-center/map-and-optimize-your-data/data-view/use-segments-to-apply-rule-boxes-to-specific-product-groups#section-idm4561389377145634303599415787). UUID-3c03a9ae-86bd-aed7-5593-c647600762e2 By default, the platform hides all platform-generated attributes in Data View but shows them in Dataflow. See [Hide or show attributes](/docs/help-center/map-and-optimize-your-data/dataflow/work-with-the-dataflow-toolbar#section-idm4549589984585632758596962454). Prev. *system attributes*. **project** A sublevel of an organization containing sites arranged into a structure. A project is a container level for sites. See [Add a project](/docs/help-center/get-started/manage-your-organization-projects-and-sites/add-a-project). **regular expression** A sequence of characters that uses specific syntax or structure rules to define a search pattern. Using a regex, you can search your data for specific text pattern matches instead of exact text matches. An example of a regex is `/([A-Z])\w+/`. See [Rule box category Use regular expressions](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-use-regular-expressions). **rule box** Rule boxes are a universal tool that lets you change your attribute data any way you want it. For example, you can use a rule box to add a discount or VAT to your prices, rotate an image, remove emojis from a product description, replace one word with another, or change your current attribute values to the values of another attribute if they meet a condition. Never use just **box** or **rule**. Always use the full term **rule box**. Use sentence case and write it in 2 words. See [Add a rule box](/docs/help-center/add-a-rule-box). **rule box condition** A feature in Dataflow that lets you create and set up conditions to determine the cases when the platform should apply rule boxes to an attribute. See [Apply rule boxes based on conditions](/docs/help-center/add-a-rule-box/apply-rule-boxes-based-on-conditions). **run** A complete process of importing data into Productsup, processing it, and exporting it to the chosen export destinations. * **full run**: same as run. * **partial run**: either import or export run. **site schedule** An entity in Scheduling that automatically runs a site at a desired interval. **segment** A subset of your items that has a certain value in an attribute. You can apply rule boxes to segments instead of all items in your data feed. However, we recommend using rule box conditions instead. See [Use segments to apply rule boxes to specific product groups](/docs/help-center/map-and-optimize-your-data/data-view/use-segments-to-apply-rule-boxes-to-specific-product-groups). **site** The lowest level of the organization structure consisting of imported data, all modifications applied to it, and exports used to send your data to the desired channels. Most of the work in the platform occurs at this level. **shared dataflow** An import-intermediate or intermediate-export mapping with all connections between the stages, user-generated attributes, rule boxes, and rule box conditions shared with other sites. If a user makes changes in the shared dataflow, these changes affect all sites where this shared dataflow is used. See [Share dataflow with other sites](/docs/help-center/map-and-optimize-your-data/dataflow/share-dataflow-with-other-sites). **single sign-on** An authentication scheme that allows a user to log in with a single ID to any of several related yet independent software systems. See [Set up single sign-on (SSO)](/docs/help-center/get-started/user-management/set-up-single-sign-on-sso). **stage** A step in data processing (import, intermediate, and export) in Dataflow or Data View. Never use *column* or *level* to refer to a stage. **standard export** A type of export that an export template creates in users' sites. This is relevant only in the context of billing and export clustering. Standard export templates create the default export with no special behavior. Users can add an export to their sites using these export templates. Prev. *standard channel*. See [Usage Data Dashboard and overage calculations](/docs/help-center/get-started/user-management/usage-data-dashboard-and-overage-calculations#section-idm4561994411726433230365022264). **string** A type of attribute value that contains text, also referred to as alphanumeric values. **sub-export** A type of export that an export template creates in users' sites. This is relevant only in the context of billing and export clustering. Sub-export templates help cluster multiple similar exports that send data to the same channel but for different countries, languages, etc. A sub-export template must belong to a main export template. For example, *Upljft - Basic catalog* is the main export template for sub-exports *Upljft - Country feed* and *Upljft - Language feed*. See [Usage Data Dashboard and overage calculations](/docs/help-center/get-started/user-management/usage-data-dashboard-and-overage-calculations#section-idm4672546242467233230380858193). **trigger event** An entity in Scheduling that runs a site if another site finishes a full or partial run. A trigger event is the specific event in a site that sets off a trigger in another site. See [Set up scheduling and triggering processes in Scheduling](/docs/help-center/dashboard-and-monitor/set-up-scheduling-and-triggering-processes-in-scheduling#section-idm4498060010569633567718011303). **Twig** A template engine for the PHP programming language. See [Create the right prompt for the AI Twig generator](/docs/help-center/best-practices/create-the-right-prompt-for-the-ai-twig-generator). **unique item identifier** One or several attributes that you choose as unique identifiers for the items in your site while setting up data sources. For example, an SKU, a GTIN, or a combination of the two. Prev. *product identifier*. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier). **user** A person who works for Productsup or a customer’s company and uses the Productsup platform. **user account** An entity in the platform that gives a user access to the platform. When an admin invites a user to an organization and gives them access to projects and sites, they create a user account that the user later logs in to. **user-generated attribute** An attribute in the intermediate or export stage of a site that a user can create manually using the button **Drop or Click to add new attribute**. UUID-dee32fdb-4876-4579-7a70-b7c837b9c33c A user-generated attribute can start with three underscores (\_\_\_), but doesn’t have to. Prev. *custom attribute*, *user-defined attribute*. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export#section-idm4605326417364832706742715884). **user profile** The part of the user account that a user can customize for themselves by changing their password, name, avatar, system language, and other personal preferences. **value** Any contents of an attribute. There can be: * numeric values (numbers) * alphanumeric values (strings) **warning** A type of event registered in Error Log after a site run finishes. Warnings indicate changes in your import or export data that don’t necessarily involve risk or signalize failed runs but could potentially require your attention. See [Error log codes and troubleshooting overview](/docs/help-center/get-started/manage-your-organization-projects-and-sites/error-log-codes-and-troubleshooting-overview#section-idm4561627972396834076900327913). # Productsup Platform and Stream APIs To successfully integrate with Productsup, you must have all systems in sync. Productsup provides APIs to upload and update data and manage other processes within the Productsup platform to build a seamless integration. At the moment, the following APIs are available for you: * Stream API, a high-performance product upload or content API. See [Stream API](https://api-docs.productsup.io/#stream-api). * Write data * Platform API, an organization management API. See [Platform API](https://api-docs.productsup.io/#platform-api). * Project and site management * Get information about previous import runs * Check errors per site run * Find information about exports and their history * Check the status of a site * Trigger a site run * Read data See the [Productsup Platform and Stream API](https://api-docs.productsup.io/) documentation for more information. Productsup maintains a specification file for Stream API, which you can use to generate a client. See [OpenApi](https://api-docs.productsup.io/spec/stream-api-oas3-definition.yaml). Authentication is crucial to accessing the API. You can request a token from [support@productsup.com](http://support@productsup.com). # API specification The following resources are available for the Export API: * [OpenAPI specification file for Export API](/export-api/openapi.yaml) OpenAPI specification files can be used with tools such as Swagger UI, Postman, or any OpenAPI-compatible client generator to explore and interact with the API. Prefer browsing the API directly? See the [API reference](/docs/export-api/api-reference) for every endpoint rendered from this same specification. # Export API import { Card, Cards } from 'fumadocs-ui/components/card'; The Export API makes exported channel data available via a programmable interface. Paginate without a filter to retrieve all products, or create a filter to retrieve a specific product set. Onboarding requirements [#onboarding-requirements] The Export API is in a selected customer onboarding stage. Before onboarding, we want to understand your usage patterns so we can adapt the Export API resources accordingly. The Export API is no longer in alpha. To start the onboarding process, contact your Productsup Customer Success Manager or our Technical Support Team via [support@productsup.com](mailto:support@productsup.com). They will: * Share the onboarding questions for you to answer. * Unlock the Export API Destination once your answers are reviewed. In this section [#in-this-section] # Platform setup import { Callout } from 'fumadocs-ui/components/callout'; This page explains how to set up the Export API Destination in the platform and get data flowing to the Export API infrastructure. How to access data in the Export API [#how-to-access-data-in-the-export-api] The Export API data resides on a separate infrastructure. The Export API behaves like any other Destination: once you set up the Destination for a specific channel, trigger an export. The export executes the Export API Destination and pushes data to the Export API infrastructure. From that point on, the data is available for querying. How to set up a sandbox environment for the Export API [#how-to-set-up-a-sandbox-environment-for-the-export-api] This section requires a [sandbox project](/docs/help-center/best-practices/use-your-sandbox-project-for-testing-purposes) in the platform. If you don't have one, contact your Client Success Manager. . Log in to the [Platform](https://platform.productsup.com/). . Go to your sandbox project. . Ensure you have a site with data available — an existing or new sandbox site works. The following prerequisites must be satisfied: 1. The site must have a data source to import data from. 2. Mapping of columns in the data view must be set up. 3. A channel must be created for the Export API (any channel works). . Validate, using the data view, that you have data available in your channel. The Export API Destination must be unlocked by Productsup. See [Onboarding requirements](/docs/export-api#onboarding-requirements) for more details. . Contact Productsup to have your Export API Destination set up — your Client Success Manager or our Tech Support team can help. . Once the Export API Destination is added, it appears in the Destinations list of your channel. . Retrieve the URL and Token by editing the Export API Destination. See [Destination settings](/docs/export-api/setup#destination-settings). . Verify that the Export API Destination is active; if not, set it to active. . Run an export of the current channel to populate the Export API. . Follow up with: 1. [How to integrate the Export API](/docs/export-api/integration) — authentication and API URL details. 2. [Filtering](/docs/export-api/filtering) — how to filter and query data. How to set up the Export API Destination [#how-to-set-up-the-export-api-destination] The Export API Destination must be unlocked by Productsup. See [Onboarding requirements](/docs/export-api#onboarding-requirements) for more details. . Log in to the [Platform](https://platform.productsup.com/). . Set up a channel and go to the Channel settings page. . Select **Add Destination**. . Select the Destination called *Export API*. . Select **Save**. The page reloads and shows the Destination settings page. . The Destination is now set up and ready to test. . Go back to the Channel settings page and select **Export this export** to trigger the export for this channel and execute the Destination. . Verify that the data is available in the Export API. Destination settings [#destination-settings] The Destination settings page shows two read-only properties containing the information you need to access your data via the Export API. * **Export API URL** — The full URL to access the product set exported by this Destination. * **Export API Token** — The authentication token required to make requests to the Export API. The URL and Token are unique to each Destination. If you have multiple channels, each with its own Export API Destination, each has its own URL and Token. Two toggles on this page control additional filtering options for the export. * **Exclude Skipped Products** — When enabled, products skipped by ruleboxes are not visible in the export. * **Exclude Internal Attributes** — When enabled, internal attributes (prefixed by `___`) are not visible in the export. These toggles let you fine-tune the exported dataset for cleaner and more relevant output. # API overview import { Callout } from 'fumadocs-ui/components/callout'; The Export API is accessed via authenticated HTTP calls. This page covers the endpoint details, authentication, response formats, and known limitations you need before making your first request. We provide an OpenAPI 3 specification file in the [API specification](/docs/export-api/resources) section, and a full generated [API reference](/docs/export-api/api-reference) for every endpoint. We currently do not have a client library for the Export API. Endpoint details [#endpoint-details] | Property | Value | | -------- | ---------------------------------------------------------------------------- | | Hostname | `export-api.productsup.com` | | Protocol | `https` | | Route | `/sites/{siteId}/channels/{channelId}/destinations/{destinationId}/products` | The full route and token are available on the [Destination settings](/docs/export-api/setup#destination-settings) page. Authentication [#authentication] Send the authentication token as the value for the `X-EA-Auth-Token` header: ```shell curl -i -X GET \ -H "X-EA-Auth-Token:{AUTH_TOKEN}" \ '{URL}' ``` Find the token on the Destination settings page. See [How to set up the Export API Destination](/docs/export-api/setup#how-to-set-up-the-export-api-destination). The token must consist only of alphanumeric characters, hyphens (`-`), and underscores (`_`). A token with any other character returns a `401 Unauthorized` response with the message `Provided token format is invalid`. API limits [#api-limits] Each page returns a maximum of 1,000 products. The default `limit` is 100 if omitted. Requesting a `limit` above 1,000 does not return an error — it is silently capped to 1,000. Use the `limit` and `offset` parameters to paginate through larger result sets; see [Pagination](/docs/export-api/filtering/pagination). Response formats [#response-formats] The response format is controlled by the `Accept` header: | Accept header | Format | | ------------------------------- | ------------------------------------------------------------------------------------------------- | | `application/json` (or omitted) | A raw JSON array of product objects: `[{...}, {...}]` | | `application/vnd.api+json` | A JSON:API-style envelope: `{"data": [...], "meta": {"total": ..., "limit": ..., "offset": ...}}` | The envelope's `meta.total` gives you the total number of matching records, ignoring `limit` and `offset` — useful for knowing when you've paginated through the full result set. Error responses [#error-responses] | Status | Cause | | ------------------ | ----------------------------------------------------------------------------------------------------------- | | `401 Unauthorized` | Authentication token is missing, has an invalid format, or (on legacy routes) the destination ID is missing | | `403 Forbidden` | The token is valid but is not authorized for the requested destination | | `404 Not Found` | No exported data is available for the destination, or the route itself doesn't exist | The `404` response body differs by cause: no exported data returns `{"message": "..."}`, while an invalid route returns `{"error": "..."}`. # Introduction import { Card, Cards } from 'fumadocs-ui/components/card'; import { Step, Steps } from 'fumadocs-ui/components/steps'; The Connector Development Environment (CDE) lets you build connectors that import, export, and transform data on the ProductsUp platform. Your connector code runs in a Docker container alongside a sidecar API — the Container API — that handles all data I/O, logging, and storage. Get started [#get-started] Follow these steps to go from zero to a running connector. Learn the key concepts [#learn-the-key-concepts] Understand what connectors are, which type to pick, how configurations reach your code as environment variables, and how the Container API sidecar works. [Read key concepts](/docs/connector-development/get-started/key-concepts) Follow the quickstart [#follow-the-quickstart] Create a datasource connector end-to-end: clone a demo repo, configure it in the Dev Portal, build, deploy, and see data flow into ProductsUp. [Go to the quickstart](/docs/connector-development/get-started/quickstart) Explore connector types [#explore-connector-types] Learn about the 8 connector types — datasource, export, export-delta, data-service, download, transform, write, and upload — and when to use each. [See connector types](/docs/connector-development/connector-types) Set up in the Dev Portal [#set-up-in-the-dev-portal] Configure your connector step by step: VCS, application settings, authentication, secrets, and individual configuration fields. [Dev Portal guide](/docs/connector-development/dev-portal) *** Key areas [#key-areas] # Troubleshooting import { Callout } from 'fumadocs-ui/components/callout'; Build errors [#build-errors] Build failures stop the pipeline before your connector can be deployed. Check the build logs in the Dev Portal under [Monitoring → States](/docs/connector-development/dev-portal/monitoring#states). Docker build failed [#docker-build-failed] **Error:** `Build docker image failed, with exit code ` The Dockerfile couldn't be processed. Common causes: * Dockerfile syntax error or referencing files that don't exist * Missing build dependencies * Base image not available * `ENTRYPOINT` used instead of `CMD` — only `CMD` is supported **Fix:** Check your Dockerfile locally with `docker build .` to reproduce the error. Ensure all `COPY` paths exist and the base image is accessible. Git clone failed [#git-clone-failed] **Error:** `Git clone failed with exit code ` The Dev Portal couldn't pull your code. Common causes: * Repository URL is wrong or unreachable * Branch doesn't exist * Credentials expired (token or deploy key) * Repository is private but no credentials configured **Fix:** Go to [VCS config](/docs/connector-development/dev-portal/connector-setup/vcs-config) and run **Test connection** to verify. For basic auth, check that the token hasn't expired. For deploy keys, confirm the public key is added to the repository. Health check failed [#health-check-failed] **Error:** `Checking image health took too long` or `Image health check exited with code ` The health check runs your command with the health check arguments inside the built container. It must complete within **5 seconds** and exit with code `0`. Common causes: * The command doesn't exist in the container (e.g. typo in command or arguments) * The command takes longer than 5 seconds to start * Missing runtime dependencies inside the image * Wrong command namespace (e.g. `container:run:import` instead of `connector:run:import`) **Fix:** Run the health check locally: ```bash docker run --rm your-image php ./bin/console connector:run:import --help ``` If it doesn't return within 5 seconds or exits with a non-zero code, that's your issue. VCS secret missing [#vcs-secret-missing] **Error:** "VCS secret from Vault is missing" The credentials for your Git repository aren't stored. This happens when you switch authorization types without saving new credentials. **Fix:** Go to [VCS config](/docs/connector-development/dev-portal/connector-setup/vcs-config), re-enter your credentials, and save. Runtime errors [#runtime-errors] These errors occur while your connector is running and interacting with the Container API. Check the [Logs](/docs/connector-development/dev-portal/monitoring#logs) and [stdout/stderr](/docs/connector-development/dev-portal/monitoring#stdout--stderr) in the Dev Portal. 400 Bad Request — Invalid output data [#400-bad-request--invalid-output-data] **Endpoints:** [Write to output file](/docs/connector-development/container-api/api-reference/write_to_output_file), [Stream to output](/docs/connector-development/container-api/api-reference/stream_to_output) **Trigger:** Writing malformed data to the output or feedback file. ```json { "message": "Validation failed", "errors": { "data": "This value should be an array of items." } } ``` **Fix:** Ensure you're sending an array of associative arrays in the `data` field: ```php // Correct $this->containerApi->appendManyToOutputFile([ ['id' => '1', 'name' => 'Product A'], ]); // Wrong — not wrapped in an array $this->containerApi->appendManyToOutputFile( ['id' => '1', 'name' => 'Product A'] ); ``` 400 Bad Request — Invalid batch size [#400-bad-request--invalid-batch-size] **Endpoints:** [Read input file (batch)](/docs/connector-development/container-api/api-reference/read_input_file_next_batch), [Stream from input](/docs/connector-development/container-api/api-reference/stream_from_input) **Trigger:** Reading input with a batch size outside the valid range. **Fix:** Batch size must be between 1 and 999: ```php // Correct $this->containerApi->yieldBatchFromInputFile(100); // Wrong — 0 and 1000+ are invalid $this->containerApi->yieldBatchFromInputFile(0); $this->containerApi->yieldBatchFromInputFile(1000); ``` 404 Not Found — Requested file not provided [#404-not-found--requested-file-not-provided] **Endpoints:** [Read input file](/docs/connector-development/container-api/api-reference/read_input_file_next), [Read input file (batch)](/docs/connector-development/container-api/api-reference/read_input_file_next_batch), [Stream from input](/docs/connector-development/container-api/api-reference/stream_from_input) **Trigger:** Requesting an input file type that doesn't exist for your connector type. **Fix:** Make sure you're using the right methods for your connector type: | Connector type | Valid input methods | | -------------- | ----------------------------------------------------------------------------------------------------- | | Export | `yieldFromInputFile()`, `yieldBatchFromInputFile()` | | Export delta | `yieldFromNewFile()`, `yieldFromModifiedFile()`, `yieldFromUnchangedFile()`, `yieldFromDeletedFile()` | | Data source | No input — data source connectors write output, they don't read input | An export connector calling `yieldFromNewFile()` or a data source connector calling `yieldFromInputFile()` will get a 404. 409 Conflict — File size limit exceeded [#409-conflict--file-size-limit-exceeded] **Endpoints:** [Write to output file](/docs/connector-development/container-api/api-reference/write_to_output_file), [Stream to output](/docs/connector-development/container-api/api-reference/stream_to_output), [Run storage upload](/docs/connector-development/container-api/api-reference/run_storage_upload_unspecified_file) **Trigger:** The total output file size has reached the maximum allowed limit. **Fix:** Break large datasets into smaller chunks. The PHP SDK automatically chunks writes at 200,000 attributes per request, but the total file size is still limited. If you're hitting this limit, consider: * Writing fewer columns per product * Splitting the import across multiple runs * Contacting support to raise the limit 429 Too Many Requests — Rate limit exceeded [#429-too-many-requests--rate-limit-exceeded] **Endpoints:** [Add log](/docs/connector-development/container-api/api-reference/add_log), [Add notification](/docs/connector-development/container-api/api-reference/add_notification) **Trigger:** Too many log or notification calls in a short window. The limits are 300 log lines per minute and 7,200 per connector run. **Fix:** * Don't log inside tight loops — log summaries instead * Use `info()` for important messages, not for every product * Batch diagnostic information into fewer messages * Use stdout for verbose debugging during development 500 Internal Server Error — Invalid file [#500-internal-server-error--invalid-file] **Endpoints:** [Read input file](/docs/connector-development/container-api/api-reference/read_input_file_next), [Read input file (batch)](/docs/connector-development/container-api/api-reference/read_input_file_next_batch) **Trigger:** The input file is corrupted or in an unexpected format. **Fix:** This is usually a platform-side issue. Check that the site has valid data and try re-running. If it persists, check the [Container API failure logs](/docs/connector-development/dev-portal/monitoring#container-api-failures) for details. Sync errors [#sync-errors] Connector version not built [#connector-version-not-built] **Error:** "This version is not built yet" **Trigger:** Trying to sync a connector that hasn't been built successfully. **Fix:** Trigger a build first. Check the build status in the [Release configuration](/docs/connector-development/dev-portal/build-and-deploy) page. Sync forbidden [#sync-forbidden] **Error:** "Sync to dev is forbidden" **Trigger:** The connector version is not in the correct state for syncing, or required configuration is missing. **Fix:** Ensure all required configuration steps are complete (VCS config, application config, and type-specific config). The sidebar in the Dev Portal shows which steps are complete with green checkmarks. PHP SDK exceptions [#php-sdk-exceptions] The SDK throws typed exceptions you can catch in your code: | Exception | When | | ------------------------- | ----------------------------------- | | `ApiFailureException` | Any Container API call fails | | `FileNotFoundException` | Input file not available (404) | | `BadRequestException` | Invalid request data (400) | | `NoMoreResultException` | End of input reached when iterating | | `LogFailed` | Logging call failed | | `NotificationFailed` | Notification call failed | | `StoreFileFailed` | Storage write failed | | `UploadToTransportFailed` | Transport server upload failed | All SDK exceptions implement `ContainerApiException`, so you can catch that as a base type for generic error handling. Notification delivery [#notification-delivery] Failed to send notification [#failed-to-send-notification] **Error:** `Failed to sent notification.` **Trigger:** The notification service can't reach its delivery backend when publishing a notification you sent via [Add notification](/docs/connector-development/container-api/api-reference/add_notification). **Impact:** The connector run continues normally. Notifications are not essential to connector execution, so a delivery failure doesn't affect the run's outcome or exit code. The specific notification that failed is dropped. **Recovery:** Automatic. Subsequent notifications recover on the next attempt — typically within a minute, and at the latest on the next run. **Fix:** None required from the connector developer. If the message persists across multiple runs for the same connector, contact platform support. # What makes product data "good" import { Callout } from "fumadocs-ui/components/callout"; Good product data isn't about having *more* of it. It's about having data a channel will actually accept, and that performs once it's live. Those are two different bars, and clearing both is the real goal of all the [transforming](/docs/fundamentals/why-data-has-to-be-transformed) you do. So what does "good" actually look like? It comes down to a handful of qualities. Complete [#complete] Every field the channel requires is present. A missing identifier, price, or image is one of the most common reasons a product gets rejected outright, and a channel won't list what it can't fully describe. Complete doesn't mean *every* field, just every field that matters for where the product is going. Accurate [#accurate] The values are true. The price in your feed matches the price on your site, the stock count reflects reality, the image is actually the product. Inaccurate data is worse than missing data, because it gets your products shown, then punished: wrong prices trigger channel penalties, and mismatches erode the trust shoppers and platforms place in your listings. Consistent [#consistent] The same fact is expressed the same way across your whole catalog. If color is `Slate / Cyan` on one product and `slate-cyan` on the next, automated systems can't group, filter, or trust your data. Consistency is what lets a channel's algorithms make sense of thousands of products at once, which leans directly on the [attributes and identifiers](/docs/fundamentals/understanding-product-data) underneath. Well-formatted [#well-formatted] Values match the channel's expected format, units, and structure. That's currency written the way the channel wants, dates in its format, sizes split or combined the way it expects, titles within its character limits. This is exactly the shape that [transformation](/docs/fundamentals/why-data-has-to-be-transformed) produces, and what each [channel's requirements](/docs/fundamentals/how-channels-decide-what-they-want) spell out. Built on stable identifiers [#built-on-stable-identifiers] A good catalog has a reliable [unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for every product. It's the thread that ties a product together across your shop, Productsup, and every channel, so updates land on the right item and the same product is never counted twice. When identifiers wobble, everything built on top of them gets shaky. Rich enough to perform [#rich-enough-to-perform] Passing the minimum gets you listed. Going beyond it gets you found. Detailed titles, full descriptions, proper categories, and high-quality images all feed the search and ranking systems on the other side, so the richer and more descriptive your data, the better your products surface against everyone else's. Good data doesn't just clear the bar, it competes. Tuned to the channel's audience [#tuned-to-the-channels-audience] Here's the subtle part. Two channels can ask for the *same* field and still want it filled differently, because they reach different people in different ways. A product description written for Meta, where shoppers scroll a polished feed, won't necessarily land on TikTok, where the tone is faster and more native to short video. The data is "complete and accurate" in both places, but the version that performs is the one written for that channel's audience. So good data isn't strictly one-size-fits-all. The strongest setups tune the same attribute per channel: a tighter, punchier title here, a keyword-rich one there, an image styled for one platform's look over another's. Productsup is built for exactly this, since each export gets its [own stage](/docs/fundamentals/how-a-feed-moves-through-productsup) where you can shape a shared field to fit one channel without touching the rest. It's the same reason [channels decide what they want](/docs/fundamentals/how-channels-decide-what-they-want) so differently in the first place. The hidden optimizations [#the-hidden-optimizations] Some of the biggest wins come from changes nothing forces you to make. The classic example is the title on Google Shopping. The spec only asks for a title, so a plain product name passes every check. But Google matches shopper searches against that title, so a title built as brand plus product plus color plus size, like `Northpeak Trail Runner GTX Running Shoes, Slate, Size 42`, gets matched to far more searches than `Trail Runner GTX` alone. Same product, much better reach. These optimizations are easy to miss because they never look like a problem. Your readiness score stays green either way, since nothing is missing or malformed. They're about taking facts you already have, like brand and color sitting in their own attributes, and combining them into the fields that drive discovery. You build these with [rule boxes in Dataflow](/docs/fundamentals/how-a-feed-moves-through-productsup), and getting them right is often what separates a feed that merely works from one that sells. Example: building a better title [#example-building-a-better-title] The hard part isn't building the title, it's knowing what order and which fields work best for your category. A good title for running shoes looks nothing like a good title for laptops. A quick way to get there is to ask an LLM, since these models have effectively read the channels' own guidance and millions of live listings: . **Ask for the structure.** Prompt something like: *"How should a product title for running shoes be structured for Google Shopping to get matched to the most searches?"* You'll get a recommended order, for example brand, then product type, then model, then gender, then color, then size. . **Turn it into a template.** Write that order as a formula that pulls from your attributes: `{brand} {product_type} {model}, {gender}, {color}, Size {size}`. . **Build it in a rule box.** A *Text Template* rule box fills each slot from your data using Twig. If you'd rather not write the Twig yourself, the platform's [AI Twig generator](/docs/help-center/best-practices/create-the-right-prompt-for-the-ai-twig-generator) can produce it from a plain description and a couple of examples. The result is a title like `Northpeak Trail Runner GTX Running Shoes, Men's, Slate, Size 42` instead of a bare `Trail Runner GTX`. Run the same exercise per category, since the ideal structure changes from one to the next, and you've got a repeatable recipe for titles that compete. Don't guess, test [#dont-guess-test] The catch with these optimizations is that you can't always tell in advance which version wins. Is the keyword-heavy title actually better, or does the shorter one convert more? Rather than guess, you can measure it with [Feed Experimentation](/docs/help-center/add-a-rule-box/feed-experimentation). It splits a subset of your products into two variant groups, lets you apply different rule logic to each (one title style versus another, say), and tracks how each performs so you can keep the version that genuinely does better. It's the difference between believing a change helped and knowing it did. Fresh [#fresh] Even perfect data goes stale. Prices change, products sell out, new items arrive. Data that was good last week can be wrong today, so keeping it current is part of keeping it good. That's a topic of its own in [keeping data up to date](/docs/fundamentals/keeping-data-up-to-date). How you know it's good, and how you keep it that way [#how-you-know-its-good-and-how-you-keep-it-that-way] You don't have to eyeball all this. The platform measures it for you. [Analyzer tests and the readiness score](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view) check your data against each channel's rules and give you a clear green-or-not answer on completeness and formatting, which is the measurable side of "good" covered in [why data has to be transformed](/docs/fundamentals/why-data-has-to-be-transformed). To make sure it *stays* good run after run, [Monitor](/docs/help-center/dashboard-and-monitor/ensure-data-quality-in-monitoring/set-up-monitor-for-your-feeds) watches your feeds and flags problems like a sudden drop in items or unmapped values before they reach a channel. Good product data is **complete**, **accurate**, **consistent**, **well-formatted**, built on **stable identifiers**, **rich** enough to rank, **tuned** to each channel's audience, and **fresh**. The first bar is getting accepted; the second is performing once you're listed. Analyzer tests and the readiness score tell you when you've cleared the first, richer and channel-tuned data clears the second, and Monitor keeps you there over time. # What is feed management? import { Callout } from "fumadocs-ui/components/callout"; Product data flows from your sources, through Productsup where it is shaped, out to every channel you sell on. You've got products to sell, and you want them showing up everywhere shoppers are looking: Google, Amazon, Facebook, a dozen retailer sites. Here's the catch. None of those places want your product information in quite the same way. Feed management is how you deal with that. It's the work of collecting your product data, reshaping it to fit each place you sell, and keeping it fresh as prices, stock, and details change. That's the whole idea. The rest of this page fills in what's actually going on. A product feed, in plain terms [#a-product-feed-in-plain-terms] A *feed* is just a structured list of your products and the facts that describe them: the title, the price, the color, the sizes, the image link, whether it's in stock. Every marketplace, ad platform, and retailer reads a feed to figure out what you sell and how to show it. Feeds come in a few common file formats: | Format | What it is | | :----- | :------------------------- | | CSV | Comma-separated values | | JSON | JavaScript Object Notation | | TXT | Plain text files | | XLS | Excel spreadsheets | | XML | Extensible Markup Language | Don't worry too much about the formats right now. The point is that a feed is a file full of product facts, and something on the other end needs to read it. Why it needs "managing" [#why-it-needs-managing] Picture a catalog with a few thousand products. Now picture selling them across twenty channels. Each channel wants the same products described a little differently, with different field names, different formats, and different rules about what's required. One channel wants a single `size` field. Another wants every size split into its own row. One reads price as `149.00 EUR`, another wants the amount and currency separate. Google has its rules, Amazon has theirs, and they don't ask each other for advice. Doing all that by hand, for thousands of products, across dozens of channels, every time something changes? That doesn't scale. That's the problem feed management solves. Where Productsup fits in [#where-productsup-fits-in] Productsup is feed management software that runs the whole thing for you. It boils down to three stages: * **Import.** Pull your product data in from wherever it lives: a file, your shop platform, a PIM, an API. * **Optimize.** Reshape and clean the data so each product is ready for where it's going. Map fields, apply rules, fix values. * **Export.** Send the prepared data out to each channel in the exact format it expects, on a schedule that keeps it current. You set this up once. After that, the platform handles the collecting, reshaping, and refreshing on its own, so the right data lands in the right place in the right shape. Where you'll use it [#where-youll-use-it] "Feed management" covers a lot of ground, because the same core work shows up in a few different jobs. Here are the big ones: * **Advertising.** Get your products into ad platforms like Google Shopping, Meta, and TikTok, formatted the way each one wants so your campaigns actually run. * **Marketplaces.** List and sell on places like Amazon, eBay, and Idealo, each with its own strict rules about categories, identifiers, and required fields. * **Onboarding.** Bring in product data from suppliers, vendors, and third-party providers, then clean it up so it's consistent before it goes anywhere. * **Distribution.** Push your product content out to retailers and partners so they can list your products on their own sites and channels. Different goals, same underlying job: get good product data into the right shape for wherever it's headed. Feed management means getting your product data into shape for every channel you sell on, and keeping it that way. Productsup automates the import, optimization, and export so you're not doing it by hand. # How channels decide what they want import { Callout } from "fumadocs-ui/components/callout"; Every channel has its own idea of what a "good" product looks like, which is why your data has to be [reshaped for each one](/docs/fundamentals/why-data-has-to-be-transformed). But channels aren't all unique snowflakes. They fall into families, and once you can spot the family, the differences get a lot less intimidating. Here's how to think about what a channel is really asking for. Channels that share a schema [#channels-that-share-a-schema] A lot of channels borrow the same playbook. Google Merchant Center and Meta (Facebook and Instagram) are close cousins: both expect a product feed built around the same core fields, things like `id`, `title`, `description`, `link`, `image_link`, `price`, `availability`, `brand`, and `gtin`. The field names and rules line up so closely that if you've built a feed for one, you're most of the way to the other. Many advertising channels lean on this Google-style schema, so getting it right once pays off across a whole family of destinations. Channels built on industry standards [#channels-built-on-industry-standards] Other channels don't invent their own schema at all. Instead they adopt a shared **industry standard**, which is especially common in B2B, retail, and industrial sectors. Standards like **ETIM** (technical and electrical products), **eCl\@ss** (cross-industry), **GS1/GPC**, and **UNSPSC** are large, agreed-upon vocabularies that classify products and define which attributes each kind of product should carry. When a marketplace or retailer says "send us eCl\@ss-classified data," you're conforming to that public standard rather than a one-off spec, and the same data can satisfy any partner who speaks it. What every channel shares [#what-every-channel-shares] Strip away the surface differences and there's a common backbone underneath. Almost every channel wants the same handful of things: a stable **identifier**, a **name or title**, a **price**, an **availability** status, an **image**, and some notion of **category**. The core facts, the [attributes](/docs/fundamentals/understanding-product-data) that describe your product, barely change from one channel to the next. What changes is how those facts are named, formatted, and grouped. Where they differ [#where-they-differ] The variation shows up in the details: * **Field names** for the same fact (`title` versus `name`, `image_link` versus `picture`). * **Formats and units** for prices, dates, sizes, and weights. * **Required, recommended, and optional** fields, and which is which. * **Accepted values**, like a fixed list of categories, a set of allowed condition states, or a minimum image size. The hard part: matching the channel's categories [#the-hard-part-matching-the-channels-categories] Of all the differences, categorization is usually the toughest. Your own product categories almost never line up with a channel's taxonomy or a standard's class system, so you have to translate between them: your "Trail shoes" might need to become Google's `Apparel & Accessories > Shoes`, or an ETIM class code. Get it wrong and products land in the wrong place or get rejected. Productsup handles this with the [Classification Mapping list](/docs/help-center/map-and-optimize-your-data/lists/set-up-the-classification-mapping-list) for mapping to a classification system, and [Partner Taxonomy Mapping](/docs/help-center/map-and-optimize-your-data/lists/replace-attributes-with-partner-taxonomy-mapping-list) for mapping to a partner's categories. The subtle part: every product wants something different [#the-subtle-part-every-product-wants-something-different] Here's the idea that trips people up. Even within a single schema, your products don't all need the same attributes. A t-shirt needs size and color. A laptop needs screen size and memory. A bottle of wine needs volume and vintage. So "required" isn't one fixed checklist for your whole catalog. It depends on what each product actually is. Industry standards make this explicit: a product's **class** defines its own set of attributes, so two products in the same feed can legitimately carry completely different fields. Channels express the same idea through **conditionally mandatory attributes**, a field that stays optional until a condition makes it required. For example, a marketplace might require a `cell_composition` attribute only for products that contain batteries. See [Conditionally mandatory attributes](/docs/export-template-management/attributes/conditionally-mandatory-attributes) for how that works. The takeaway: a feed isn't one tidy rectangle where every row fills the same cells. Different products carry different attributes by design, often driven by their category or class, and that's exactly what the channel expects. How Productsup keeps it manageable [#how-productsup-keeps-it-manageable] You don't track all of this by hand. An [export template](/docs/export-template-management/export-templates/overview) already encodes a channel's spec, including its attributes, accepted values, and the [analyzer tests](/docs/export-template-management/analyzer-tests/overview) that validate them, conditionally mandatory fields included. Add the template, map your data to it, and the [readiness score](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view) tells you whether you've met what that particular channel decided it wants. Channels fall into families. Some share a schema (Google Merchant Center and Meta are close cousins), and others adopt industry standards like ETIM or eCl\@ss. They all want the same backbone, identifier, title, price, availability, image, and category, but differ in field names, formats, required fields, and accepted values. The hard parts are mapping your categories to the channel's taxonomy and handling the fact that each product needs its own attribute set based on what it is. Export templates, analyzer tests, and the readiness score turn all of that into a clear target. # Understanding product data import { Callout } from "fumadocs-ui/components/callout"; A single product broken down into its attributes: fields paired with values, like the columns and cells of a spreadsheet. Before you import, map, or export anything, it helps to know what you're actually working with. Product data sounds technical, but it's a simple idea once you picture it. This page walks through what product data is made of, the file formats it shows up in, and how it gets in and out of Productsup. What "product data" really means [#what-product-data-really-means] Product data is all the information that describes a product. Nothing fancier than that. Think of a single pair of running shoes in an online store. Behind the photo and the "Add to cart" button sits a pile of facts: the name, the brand, the price, the sizes, the color, what it's made of, the link to the image. Put those facts together and you've got that product's data. One product is easy to picture. The trouble is scale. A normal catalog has thousands or even millions of products, and every one of them needs to show up correctly everywhere it's sold, whether that's a Google ad, an Amazon listing, or a retailer's site. Productsup exists to manage all of that at once, so the right facts reach the right place in the right format. Attributes: the building blocks [#attributes-the-building-blocks] Each single fact about a product is called an **attribute**. An attribute is two things paired together: a **field** (what the fact is) and a **value** (the fact itself). If product data were a spreadsheet, and that's a genuinely useful way to picture it, then each **column** is a field and each **cell** holds a value: | Field | Value | | :----------- | :---------------------- | | title | Trail Runner GTX, Men's | | brand | Northpeak | | price | 149.00 EUR | | color | Slate / Cyan | | availability | in stock | Read down a column and you see one kind of fact for every product. Read across a row and you see everything known about one product. Almost everything you'll do in Productsup comes back to working with these fields and values. The kinds of attributes you'll meet [#the-kinds-of-attributes-youll-meet] Not every attribute behaves the same way, and channels treat them differently. It helps to recognize a few broad types: * **Identifiers.** Values that uniquely name a product, like an ID, a GTIN or barcode, or an MPN. This is how systems tell one product from another. * **Descriptive attributes.** The human-facing stuff: title, description, brand, color, material. These help shoppers and search engines understand the product. * **Commercial attributes.** Price, sale price, currency, availability. These change often and have a big say in where and how a product shows up. * **Media attributes.** Links to images and videos. Channels tend to be picky about size, format, and quality. * **Categorization.** The product type or category, which tells a channel where the product belongs in its catalog. Why identifiers matter most [#why-identifiers-matter-most] Of all the attributes, the **unique identifier** is the one to get right first. It's the thread that ties the same product together across every system: your shop, Productsup, and each channel you sell on. When an identifier is stable and consistent, a channel can confidently match an update to the right product, whether that's a price change, a stock update, or a new image. When identifiers go missing or keep changing, systems lose track of which product is which. That's the root cause of a surprising number of feed problems. Why structure matters [#why-structure-matters] Two catalogs can hold the exact same facts and still behave completely differently, depending on how those facts are **structured**. One channel expects a single `size` field. Another wants sizes split into their own rows. One wants price as `149.00 EUR`, another wants the amount and the currency in separate fields. Here's the key idea to carry into the rest of the platform: your data rarely shows up in the shape every channel wants. Knowing what your data is made of is step one. Reshaping it to fit each destination is what the rest of Productsup helps you do. The file formats product data travels in [#the-file-formats-product-data-travels-in] Product data has to live in a file format so systems can read and write it. You'll run into four common ones. They all hold the same kind of information, but they're built differently, and that affects what they're good at. CSV [#csv] A plain table of rows and columns, with values separated by commas. It's the simplest format there is. The first line names the fields, and every line after it is one product: ```csv title="products.csv" id,title,brand,price,color,availability TR-GTX-42,Trail Runner GTX,Northpeak,149.00 EUR,Slate,in stock TR-GTX-43,Trail Runner GTX,Northpeak,149.00 EUR,Cyan,out of stock ``` | Advantages | Disadvantages | | :---------------------------------------------- | :----------------------------------------------------------- | | Easy to read, edit, and open in almost anything | Only handles flat tables, so no nesting | | Small file size, fast to process | No built-in way to mark data types or structure | | Works with practically every tool | Commas, quotes, and line breaks inside values cause breakage | CSV is also the most performant format to import and export. It carries the least verbose overhead and the simplest structure, so there's less for the platform to parse on the way in and less to build on the way out. Best when your data is a clean, flat table and you want something lightweight. JSON [#json] A text format that stores data as key-value pairs. It's the default language of most modern APIs. At its simplest, it's flat, one value per field, just like a CSV row: ```json title="product.json" { "id": "TR-GTX-42", "title": "Trail Runner GTX", "brand": "Northpeak", "price": "149.00 EUR", "color": "Slate", "availability": "in stock" } ``` But JSON's real strength is nesting. A field can hold a list (the square brackets) or an object (the curly braces), so one product can carry its own price object, a list of images, and a list of variants: ```json title="product.json" { "id": "TR-GTX", "title": "Trail Runner GTX", "brand": "Northpeak", "price": { "amount": 149.00, "currency": "EUR" }, "images": [ "https://example.com/tr-gtx-slate.jpg", "https://example.com/tr-gtx-cyan.jpg" ], "variants": [ { "sku": "TR-GTX-42", "size": 42, "color": "Slate", "availability": "in stock" }, { "sku": "TR-GTX-43", "size": 43, "color": "Cyan", "availability": "out of stock" } ] } ``` | Advantages | Disadvantages | | :------------------------------------------- | :------------------------------------------------------- | | Handles nesting and hierarchy with ease | Harder for non-technical people to read and edit by hand | | Plays naturally with web APIs and apps | Larger than CSV for the same flat data | | Keeps data types like numbers and true/false | Easy to break with a missing bracket or comma | Best for complex, nested data and anything moving through an API. XML [#xml] A tagged text format where every value sits inside labeled tags. It's older, verbose, and still everywhere in retail and feed specs. Flat, it's one tag per field: ```xml title="product.xml" TR-GTX-42 Trail Runner GTX Northpeak 149.00 EUR Slate in stock ``` Like JSON, XML can also nest. Tags hold other tags, so a list becomes repeated child tags and an object becomes a tag with its own attributes or children: ```xml title="product.xml" TR-GTX Trail Runner GTX Northpeak https://example.com/tr-gtx-slate.jpg https://example.com/tr-gtx-cyan.jpg ``` | Advantages | Disadvantages | | :------------------------------------------------- | :---------------------------------- | | Handles deep nesting and complex structures | Very wordy, so files get large fast | | Can be strictly validated against a schema | Harder to read with all the tags | | Long-standing standard many channels still require | Slower to process than CSV or JSON | Best when a channel's spec demands it or you need strict validation. JSON and XML can both nest data, and that's where the work hides. When a channel doesn't support nested structures, the hardest part is flattening that data back into plain rows and columns it can read. These formats also carry more overhead to read and write than CSV, simply because their structure is more complex. Why nested data is harder to import [#why-nested-data-is-harder-to-import] Nesting also makes data harder to bring *in* automatically, not just send out. Productsup works in [flat lists of attributes](/docs/fundamentals/how-a-feed-moves-through-productsup), so importing nested JSON or XML means flattening it into columns, and there's rarely one obvious way to do that. Every nested piece is a decision. Take that list of images: it could land as a single `images` column with comma-separated URLs, or as separate enumerated fields like `image_1`, `image_2`, `image_3`. Both are valid. Which one is right depends on your data and what the channels downstream expect. That's why understanding the data you actually have matters so much before you import a single row. If you're unsure how a feed is structured or how best to bring it in, you can work with a Productsup implementation specialist to evaluate your data and map out the right approach. Some JSON and XML feeds are genuinely complex, with deep nesting or structures that don't map cleanly to rows and columns. In those cases it can be worth putting the business logic into a [custom connector](/docs/connector-development), which can interpret the structure and ingest the data in the best possible shape rather than forcing a one-size-fits-all flatten. Excel (XLS / XLSX) [#excel-xls--xlsx] A spreadsheet file, the same thing you'd open in Excel or Google Sheets. Closely related to CSV, but with extra spreadsheet features baked in. | Advantages | Disadvantages | | :------------------------------------------------- | :------------------------------------------ | | Familiar and friendly for non-technical people | A proprietary format, not plain text | | Supports multiple sheets, formatting, and formulas | Heavier and slower to process at scale | | Great for manual review and quick edits | Formulas and formatting can mangle raw data | Best when a human needs to eyeball or hand-edit the data. API vs. flat files [#api-vs-flat-files] Beyond the format, there's the question of *how* the data actually moves. You've got two broad options, and they apply to both importing data into Productsup and exporting it out. A **flat file** is a file you hand over: a CSV, XML, or spreadsheet that gets uploaded, fetched from a URL, or dropped on an FTP server. An **API** connection is a live, direct link between two systems that pass data back and forth on request, no file in the middle. | | Flat files | API | | :----------- | :--------------------------------- | :--------------------------------------------- | | How it works | A file is produced, then picked up | Systems talk directly, on demand | | Freshness | As fresh as the last file run | Can be near real time | | Setup effort | Low, mostly point at a file | Higher, needs credentials and config | | Best for | Big batch updates, simple setups | Frequent changes, live stock and pricing | | Feedback | Little to none | Channels can report back on what they received | Neither one is "better." Flat files are simple and great for big batch updates that don't change minute to minute. APIs shine when data changes constantly and you want updates to land fast, like live inventory or pricing. Plenty of setups use both: a flat file for the bulk catalog, an API for the fast-moving fields. Product data is a set of **attributes**, fields paired with values, that describe each product. Identifiers keep products distinct, and structure decides whether a channel can use what you send. That data travels in formats like CSV, JSON, XML, and Excel, and it moves either as flat files or over live API connections, depending on how fresh it needs to be. # Data processing performance import { Callout } from "fumadocs-ui/components/callout"; A large volume of product data feeding a processing engine, with a speed gauge and fast throughput. Two sites can run the exact same products, and one finishes in seconds while the other grinds for a long time. The difference comes down to how much work the platform has to do and what shape your data is in. This page covers what actually affects processing speed, so you know which knobs matter when things feel slow. What "processing" means here [#what-processing-means-here] Every time your site runs, the platform does three things: it imports your data, optimizes it, and exports it to your channels. Each of those stages takes time, and that time scales with two things: how much data you've got, and how much work you're asking the platform to do to it. Keep those two ideas in mind and most performance questions answer themselves. Catalog size is the biggest factor [#catalog-size-is-the-biggest-factor] The single largest driver is how much data you're moving. A useful way to think about it is total cells: your number of products multiplied by your number of attributes. | Catalog | Rough scale (cells) | | :----------- | :--------------------- | | Small | Under 1 million cells | | Medium | 1 to 10 million cells | | Large | 10 to 50 million cells | | After Review | 50 million+ cells | A site with 400,000 products and 80 attributes each is processing about 32 million values every run. More cells means more to read, transform, and write, so the bigger your catalog, the more every other choice on this page matters. What's inside each cell counts too [#whats-inside-each-cell-counts-too] Cell count isn't the whole story. The size of what's inside each cell matters just as much. A cell holding a short value like `in stock` is nothing to move around. A cell holding a long HTML product description, tags and all, is a different beast. Big cell contents cost you twice: * **Reading and writing.** The more text a cell holds, the longer it takes to read in and write back out. A catalog full of long descriptions moves slower than the same number of products with short ones. * **Transforming.** Running a rule over a huge chunk of content, like a search-and-replace across a large block of HTML, is far slower than the same rule on a short string. Do that across millions of rows and it really stacks up. So if your feed leans on large text fields like rich HTML descriptions, expect it to run slower than its product count alone would suggest. Trimming markup you don't need, early on, pays off across every run. File format makes a real difference [#file-format-makes-a-real-difference] The format your data arrives and leaves in changes how much work the platform spends reading it on import and writing it on export, before any optimization even happens. That cost lands twice: once when the platform reads the file coming in, and again when it writes the file going out. | Format | Processing cost | Reading and writing | | :----- | :-------------- | :------------------------------------------------------------------------------------ | | CSV | Lowest | Quick to read in and quick to write out, since flat rows have almost nothing to parse | | Excel | Low to medium | Reads and writes much like CSV, but the file itself is heavier to open | | JSON | Medium | Nesting has to be walked when reading and rebuilt when writing | | XML | Highest | Verbose tags are slow to parse on the way in and bulky to generate on the way out | CSV is the most performant choice for both import and export. It carries the least overhead and the simplest structure, so there's less for the platform to chew through on the way in and less to build on the way out. If you've got the choice and your data is flat, CSV is the fast lane. How much you ask the platform to do [#how-much-you-ask-the-platform-to-do] Importing data is one thing. Reshaping it is where time really adds up. Every rule box and optimization you apply runs once per product, so the cost multiplies with your catalog size. A few things to watch: * **Heavy transformations.** Complex rules, big lookups, and chained logic all take longer than a simple copy. * **Data services.** Calls that enrich or check your data add real time, especially the ones that reach outside the platform. * **Images and media.** Processing or validating image links is slower than handling plain text. None of this means you should avoid optimizing your data. It just means that if a site feels slow, the number and complexity of your rules is one of the first places to look. How often, and how much, you run [#how-often-and-how-much-you-run] Running your whole catalog from scratch every time is the slowest way to work. If only a handful of products changed, reprocessing everything is wasted effort. This is where running only the changes helps. When the platform can tell what's new or different since the last run, it processes just that slice instead of the entire catalog, which is far faster. Pair that with a sensible schedule, and you're spending time only where it's actually needed. API vs. flat files, from a speed angle [#api-vs-flat-files-from-a-speed-angle] The way data moves also shapes performance. Flat files are great for big batch updates: one file, processed in bulk. APIs can push changes through closer to real time, which is ideal for fast-moving data like stock and pricing, though they often come with rate limits that cap how much you can send at once. Neither is faster in every case. It depends on whether you're moving a lot at once or a little, often. How to improve performance [#how-to-improve-performance] The three stages of a site run each give you ways to trim the work. Here's where to look in each one. Import [#import] The goal here is to bring in less, and bring it in cleanly. . **Import only what you need.** Drop attributes you'll never use and filter out products you don't sell. Every column and row you skip is work the rest of the pipeline never has to do. . **Prefer CSV for the source.** If you control the feed, a flat CSV reads in faster than nested JSON or XML. . **Pull only the changes when you can.** If your source can hand over just what's new or updated, take it instead of re-importing the whole catalog each time. . **Match the schedule to reality.** Don't import every hour if your source only updates once a day. Data transformation [#data-transformation] This is where work multiplies across every product, so small savings add up fast. . **Optimize once, reuse everywhere.** Apply shared rules at the intermediate level so every export inherits them, instead of repeating the same logic per channel. . **Keep rule boxes lean.** Remove ones you no longer use, and reach for a simple rule before a complex one. Heavy regex and big lookups cost the most. . **Go easy on external data services.** Calls that reach outside the platform are some of the slowest steps, so use them where they earn their keep and skip them where they don't. . **Drop products early.** Exclude what you won't export near the start, so you're not transforming rows that never leave. Export [#export] The aim is to send each channel only what it asks for, only when it needs it. . **Export only the channel's attributes.** Channels ignore fields they don't recognize, so there's no point building them. . **Send only the changes.** When a channel supports delta updates, push what changed instead of the full feed every run. . **Pick the lightest format the channel allows.** CSV writes out faster than XML. . **Right-size the frequency.** Use API exports for frequent small updates and flat files for big batch runs, and schedule each export to match how often the channel actually needs fresh data. Processing speed comes down to volume and effort. Big catalogs, heavy formats like XML, and lots of complex rules all slow things down, while CSV, lean optimizations, and running only what changed all speed things up. When a site feels slow, start with the size of the data and the amount of work you're asking for. # Keeping data up to date import { Callout } from "fumadocs-ui/components/callout"; Product data is never really finished. Prices change, products sell out, new items launch, descriptions get rewritten. A feed that was perfect yesterday can be wrong today, which means getting your data right once isn't enough. You have to keep it right. The good news is this is mostly a job you set up once and let the platform run for you. Freshness is its own kind of "good" [#freshness-is-its-own-kind-of-good] You can have data that's complete, accurate, and perfectly formatted, and it can still be wrong tomorrow. That's why freshness is part of [what makes product data good](/docs/fundamentals/what-makes-product-data-good). A channel showing a price that no longer matches your shop, or an item that's actually sold out, gives shoppers a bad experience and can earn you penalties or suspensions from the channel. Keeping data current protects both your sales and your standing. A site run, on repeat [#a-site-run-on-repeat] Remember the journey from [how a feed moves through Productsup](/docs/fundamentals/how-a-feed-moves-through-productsup): every **site run** imports your latest source data, optimizes it, and exports it to your channels. Keeping data fresh really just means running that process regularly, so the newest prices and stock levels flow all the way through to every channel. You don't do this by hand. You set it on a schedule. Scheduling: runs on a cadence [#scheduling-runs-on-a-cadence] The **Scheduling** feature lets you set **site schedules** so your site runs automatically at the interval you choose, no clicking required. Set one up in [Set up scheduling and triggering processes](/docs/help-center/dashboard-and-monitor/set-up-scheduling-and-triggering-processes-in-scheduling). The key is to match the cadence to how often your data actually changes. Fast-moving stock and pricing might need hourly runs, while a stable catalog might be fine once a day. Don't over-schedule, though: every run is a full run that costs processing time, so running far more often than your data changes just burns resources, as covered in [data processing performance](/docs/fundamentals/data-processing-performance). Triggering: keeping linked sites in sync [#triggering-keeping-linked-sites-in-sync] Schedules handle "run at this time." **Trigger events** handle "run after that happens." You can have one site's run automatically kick off another's, so when an upstream site finishes, the sites that depend on it refresh right away instead of waiting for their own clock. It's how you keep a chain of linked sites consistent, and it's set up in the same [Scheduling](/docs/help-center/dashboard-and-monitor/set-up-scheduling-and-triggering-processes-in-scheduling) feature. Sending only what changed [#sending-only-what-changed] Refreshing often raises a fair worry: isn't resending your whole catalog every run wasteful? It would be, which is why many channels support **delta updates**. Instead of the full feed each time, the platform works out what's new, changed, or deleted since the last run and sends only that slice. It's faster, lighter, and easier on a channel's API limits, the same efficiency idea from [data processing performance](/docs/fundamentals/data-processing-performance). Delta only works if the platform can reliably tell which item is which from one run to the next, and that comes back to the [unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier). When identifiers are stable, a price change lands on exactly the right product. When they wobble, the platform can't tell a changed item from a brand-new one, which is one more reason [identifiers matter so much](/docs/fundamentals/understanding-product-data). Catching problems before the channel does [#catching-problems-before-the-channel-does] Fresh data only helps if the run actually succeeds. If an import quietly fails or a source file shows up half-empty, an automated run could push bad or stale data without you noticing. **Monitor** watches for exactly this, flagging things like a sudden drop in item count, a failed import, or unmapped values before they reach a channel. Set it up in [Monitor](/docs/help-center/dashboard-and-monitor/ensure-data-quality-in-monitoring/set-up-monitor-for-your-feeds), and keep an eye on the overall picture from your [dashboard](/docs/help-center/dashboard-and-monitor/dashboard-at-the-organization-project-and-site-level). Product data goes stale, so keeping it fresh is its own job. **Scheduling** runs your site automatically on a cadence that matches how often your data changes, **triggering** keeps linked sites in sync, **delta updates** send only what changed to save time and API calls, and **Monitor** makes sure a broken run never quietly ships bad data. Set it up once, and your channels stay current on their own. # Why data has to be transformed import { Callout } from "fumadocs-ui/components/callout"; Your source attributes on the left, mapped and transformed into the attributes a channel expects on the right, with two fields merging into one. Your product data almost never arrives in the shape a channel will accept. The data that runs your own shop just fine is, to Google or Amazon, full of wrong field names, wrong formats, and missing required bits. So before it can go anywhere, it has to be reshaped. That reshaping is what we mean by **transformation**, and the good news is Productsup doesn't just give you the tools to do it. It also tells you when you've got it right. The same product, a dozen different ways [#the-same-product-a-dozen-different-ways] Channels rarely agree on anything. One wants a single `size` field, another wants sizes split into their own rows. One reads `149.00 EUR`, another wants the amount and currency in separate fields. One calls the product name `title`, the next calls it `name`, and a third demands it be under 150 characters with no promotional words. The facts about your product don't change. What changes is the exact shape, naming, and rules each channel insists on. That's the gap. Your raw data sits on one side, the channel's strict requirements on the other, and the two almost never line up out of the box. This is the core reason [feed management](/docs/fundamentals/what-is-feed-management) exists, and it builds right on the [attributes](/docs/fundamentals/understanding-product-data) your data is made of. What "transforming" actually involves [#what-transforming-actually-involves] Transforming means renaming fields, reformatting values, splitting or combining them, filling in what's missing, and filtering out products that don't qualify, all without touching your original source data. In Productsup you do this by [mapping attributes and applying rule boxes in Dataflow](/docs/fundamentals/how-a-feed-moves-through-productsup), with [data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services) handling the heavier jobs. That's the *doing*. But it raises two fair questions: how do you know what each channel actually wants, and how do you know when you're finished? Three features answer that, and they work together. Export templates: the channel's rulebook, built in [#export-templates-the-channels-rulebook-built-in] You don't have to reverse-engineer a channel's spec. An **export template** is a ready-made blueprint for a specific channel, and it comes pre-loaded with exactly what that channel demands: * **Attributes** the channel requires, like `id`, `price`, and `availability`, marked mandatory or optional. * **Analyzer tests** that check whether your values actually meet the channel's standards. * **Destinations** that define where and how the finished feed is sent. So when you [add an export](/docs/help-center/export-data-feeds/add-export), the template hands you the target shape up front. There are thousands of them for channels like Google Merchant Center, Amazon, and Meta, and teams can build or customize their own through [Export Template Management](/docs/export-template-management). See [About export templates](/docs/export-template-management/export-templates/overview) for the full picture. Analyzer tests: automatic checks against the spec [#analyzer-tests-automatic-checks-against-the-spec] Knowing the target shape is one thing. Knowing whether your data hits it is another, and that's the job of **analyzer tests**. Each one is a small validation attached to an attribute: must contain a valid URL, must not be empty, must stay under a character limit, must use an allowed value. They run against your real data and flag exactly which values fail and why. You see the results in [Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view), where you can open the Analyzer on any attribute to see what's passing and what needs work. For more on how these tests are built and the kinds available, see [About analyzer tests](/docs/export-template-management/analyzer-tests/overview) and [Types of analyzer tests](/docs/export-template-management/analyzer-tests/types-of-analyzer-tests). The readiness score: a finish line you can see [#the-readiness-score-a-finish-line-you-can-see] Individual tests tell you about individual attributes. The **readiness score** rolls them up into a single answer to "is my data ready for this channel?" It comes in two flavors: * **Core readiness score** shows how many of the channel's **mandatory** attributes are export-ready. * **Enhanced readiness score** widens that to include the **optional** attributes too. The platform paints ready attributes green and problem ones orange or red, and shows the percentage of values meeting requirements under each attribute, so transformation stops being guesswork and gets an actual target. You can watch the score climb as you fix things, and the same numbers surface on your [dashboard](/docs/help-center/dashboard-and-monitor/dashboard-at-the-organization-project-and-site-level) for an at-a-glance read across exports. Both scores rely on analyzer tests, so they're available for exports whose templates include them. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view) for how to use them. How it all fits together [#how-it-all-fits-together] So the loop looks like this: add the export template to set the target shape and its tests, then transform your data by mapping attributes and applying rule boxes and data services, and watch the analyzer tests pass and the readiness score climb. When the score is green, your data is genuinely channel-ready, which is the whole point of [what makes product data good](/docs/fundamentals/what-makes-product-data-good) and the reason [channels are so particular about what they accept](/docs/fundamentals/how-channels-decide-what-they-want). Your data has to be transformed because no channel accepts it as-is. **Export templates** give you each channel's required attributes, analyzer tests, and destination up front. **Analyzer tests** check your values against those rules and flag what fails. The **readiness score** (core for mandatory attributes, enhanced for optional ones too) turns all of that into one clear target, so you can transform with confidence and know exactly when your feed is ready to ship. # How a feed moves through Productsup import { Callout } from "fumadocs-ui/components/callout"; Your product data doesn't go straight from your shop to a channel. Inside Productsup it travels through a few clear stages: it comes in from your data sources, gets cleaned up and standardized in the middle, and then goes out to each channel in the shape that channel wants. Once you can picture that journey, the whole platform makes a lot more sense. Let's walk it end to end. It starts with data sources [#it-starts-with-data-sources] A **data source** is how your product data gets into a site. You point Productsup at where your data lives, whether that's a file on an FTP server, a shop platform, a PIM, or an API, and it pulls the data in. There are a few different ways to connect, covered in [Product import methods](/docs/help-center/import-data-feeds/import-your-data-into-productsup/product-import-methods) and [Import data from internal systems](/docs/help-center/import-data-feeds/import-data-from-internal-systems). Under the hood, every data source is powered by a **connector**: a small piece of integration code that knows how to talk to one specific system. Productsup ships with hundreds of them, and if the one you need doesn't exist yet, you (or a partner) can build it. See [Connector types](/docs/connector-development/connector-types) and [Create a connector](/docs/connector-development/dev-portal/create-a-connector) for how that works, and [Productsup Connect](/docs/productsup-connect) for the bigger picture on integrations. Merging more than one source [#merging-more-than-one-source] A site isn't limited to a single source. You can combine data, and there are two ways to do it depending on what you're adding. * **More items?** Add another [main data source](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-a-main-data-source-to-import-your-products). Main data sources stack up rows, so each one brings more products into the site. * **More details about the items you already have?** Add an [additional data source](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources). These extend your feed sideways, adding new attributes (like pricing or stock from a separate system) to products that are already there. The trick that makes the second one work is the **unique item identifier**. Productsup uses it to match the extra data to the right product, so an ID, GTIN, or SKU has to line up across your sources. That's why [setting a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) matters so much, and it's the same idea covered in [Understanding product data](/docs/fundamentals/understanding-product-data). Three stages, each a flat list of attributes [#three-stages-each-a-flat-list-of-attributes] As your data moves through the platform, it lives in **stages**. Here's the key thing to hold onto: every stage is just a flat list of attributes. Think columns in a table, a field paired with a value, exactly like in [Understanding product data](/docs/fundamentals/understanding-product-data). No nesting, no hierarchy, just a clean grid of fields. The data gets reshaped from one stage to the next, but the shape itself is always that same flat list. There are three kinds of stage, and they're where [Dataflow](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) does its work. The import stage [#the-import-stage] This is your raw data, exactly as it arrived from the data source. You can't edit it here. It's the untouched starting point, and everything downstream builds on it. The intermediate stage [#the-intermediate-stage] This is the shared middle ground, and its attribute list isn't something you build by hand. The platform assembles it for you as the sum of every attribute from every export enabled in the site. Turn on a Google export and an Amazon export, and the intermediate stage holds the combined set of fields those two channels need. Left alone, that would mean a lot of duplicates, because different channels ask for the same fact under different names. One wants `title`, another wants `titel`, a third calls it `name`, but they all mean the product's title. To avoid three near-identical attributes, those export fields are **aliased** to a single intermediate attribute. The title shows up once in the intermediate stage, you optimize it once, and each export derives its own `title`, `titel`, or `name` from that single source. That's what makes the intermediate stage so useful: any optimization you make here flows through to every export. It's the place for the cleanup that's true no matter where a product is headed, like fixing a title format or normalizing a category. Doing the work once here, instead of repeating it per channel, is one of the simplest ways to keep a site fast (more on that in [Data processing performance](/docs/fundamentals/data-processing-performance)). The export stages [#the-export-stages] Here's where it branches. Each channel you sell on gets its **own** export stage, holding the exact attributes that channel requires. Sell on five channels and you've got five export stages, each with its own rules and its own required fields. You pick which export you're looking at from the dropdown, and optimizations you make in one export stay in that export. This is how the same products end up correctly formatted for Google, Amazon, and a retailer all at once, which is the whole reason [data has to be transformed](/docs/fundamentals/why-data-has-to-be-transformed) in the first place. Mapping and optimizing in Dataflow [#mapping-and-optimizing-in-dataflow] So how does data actually move from one stage to the next? Through **Dataflow**, and the core action is **attribute mapping**: you connect an attribute in one stage to an attribute in the next, and the data flows along that link. Map your import `title` to the intermediate `title`, then on to each export's title field, and you've built a path from source to channel. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) for the full walkthrough. Mapping moves the data. **Rule boxes** change it along the way. A rule box is a small transformation you drop onto an attribute: trim whitespace, swap a value, build a new field from two others, exclude a product. You can apply them in [Dataflow](/docs/help-center/map-and-optimize-your-data/dataflow/optimize-your-data-in-dataflow) or in [Data View](/docs/help-center/map-and-optimize-your-data/data-view/optimize-your-data-in-data-view-with-rule-boxes), and there's a whole library to pick from in [Add a rule box](/docs/help-center/add-a-rule-box). Apply them in the intermediate stage to hit every export, or in a single export stage to fix just that one. When you want to see the effect on real values, [Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view) shows you the data at any stage. Data services for the heavier lifting [#data-services-for-the-heavier-lifting] Rule boxes handle the everyday changes. When you need something bigger, that's a job for **data services**. A data service is a tool that enriches or restructures your feed in ways a single rule box can't: generating unique IDs, crawling landing pages, converting currencies, splitting one product into variants or merging variants into one, even AI tasks like removing image backgrounds. See [Enhance your import data through Data Services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services) and [Restructure your data in Data Services](/docs/help-center/map-and-optimize-your-data/data-services) for what's on offer. Like data sources and exports, data services run on **connectors**, so the same Connect tooling lets you build a custom one. See the [data service connector type](/docs/connector-development/connector-types/data-service) if you've got a transformation that needs to live in code. Export [#export] At the end of the line, the prepared data leaves the platform. Each export sends its stage out through an **export connector**, in the format and to the destination that channel expects, whether that's a file dropped on a server or a live API push. You add channels in [Add export](/docs/help-center/export-data-feeds/add-export), point them at a destination in [Set up an export destination](/docs/help-center/export-data-feeds/set-up-an-export-destination), and if no template fits you can [build your export from scratch](/docs/help-center/export-data-feeds/add-export/build-your-exports-from-scratch). Some channels take the full feed every run; others support delta updates that send only what changed. Either way, the relevant export connector handles the handoff. See [Export data feeds](/docs/help-center/export-data-feeds) for the full picture, and the [export connector type](/docs/connector-development/connector-types/export) if you're building your own. Data comes in through **data sources** (powered by connectors), where multiple main sources add items and additional sources add attributes matched by a unique identifier. It then flows through three kinds of **stage**, each a flat list of attributes: a read-only **import** stage, a shared **intermediate** stage, and one **export** stage per channel. **Dataflow** maps attributes from stage to stage, **rule boxes** and **data services** transform them, and **export connectors** send the finished feed out to each channel. # Get access to the Developer Portal import { Callout } from 'fumadocs-ui/components/callout'; To start using ETM in the Developer Portal, you need to request access by reaching out to your Productsup Customer Success Manager or our Technical Support Team via [support@productsup.com](mailto:support@productsup.com). . Go to the [Productsup Developer Portal](https://dev-portal.productsup.com/). . If you already have access, sign in with your credentials. You can't create or manage export templates without access to ETM in the Developer Portal. Developer Portal access covers interactive work in the interface. The ETM API uses separate machine-to-machine credentials — see [Authentication](/docs/export-template-management/developer-guides/authentication). # Key concepts Export templates [#export-templates] An export template is a ready-to-use blueprint for creating exports in Productsup for channels, such as Google Merchant Center, Amazon, or Facebook. Each export template is pre-loaded with the specific requirements for that channel, including: * **Attributes:** The specific data characteristics the channel requires, such as **price**, **id**, and **availability**. * **Analyzer tests:** Automated checks to ensure your data meets the channel's standards. * **Destinations:** The specific locations or mechanisms, such as FTP servers or API endpoints, where the platform sends data. In the Developer Portal, you can create and set up a new export template that appears in the platform and becomes available to platform users. See [About export templates](/docs/export-template-management/export-templates/overview) for more information. Attributes [#attributes] An attribute is a characteristic of an item, for example, **title**, **id**, **color**, or **price**. Every channel expects to receive a number of specific attributes per product or item. There are 2 types of attributes: * **Mandatory** — a requirement on the channel side. * **Optional** — a nice-to-have. See [About attributes](/docs/export-template-management/attributes/overview) for more information. Analyzer tests [#analyzer-tests] An analyzer test is a validation mechanism that checks if attribute values meet particular requirements, for example, contain a valid URL or don't exceed 150 characters. You add analyzer tests to attributes in an export template. In the Productsup platform, users can see analyzer test results in Data View to check if their attribute values meet channel requirements. See [About analyzer tests](/docs/export-template-management/analyzer-tests/overview) for more information. Revisions and publishing [#revisions-and-publishing] Changes to an export template do not become available in the Productsup platform immediately. Every change is stored as a draft until you publish it, which creates a new revision of the export template. The platform reads the latest published revision. This applies to both ways of working with export templates: * In the Developer Portal, select **Publish** to publish your draft changes. * Through the Export Template Management API, send a commit request to publish your draft changes. Analyzer tests added through the API are the exception: they take effect immediately and need no publishing. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes) for more information. # Introduction import { Callout } from 'fumadocs-ui/components/callout'; Export Template Management (ETM) is a set of features in the Productsup Developer Portal, backed by the standalone ETM API. Together, the Developer Portal and the API help you create, update, and manage custom, reusable export templates to be able to create exports in the Productsup platform and send data to desired target channels, such as Google Merchant Center or Amazon. {/* ## The Developer Portal The Developer Portal is the interface where third-party developers manage their integrations. It acts as a back office for partners, giving you the tools to: * Create and manage export templates, attributes, and analyzer tests (Export Template Management). * Create and manage connectors (Connector Development). This documentation focuses on Export Template Management in the Developer Portal. To learn more about connectors, see [CDE documentation](https://cde.productsup.com/docs/developers/guide/index.html). ## The Productsup platform The Productsup platform enables businesses to import, transform, and export product data across multiple channels. It helps you manage complex product catalogs, optimize data quality, and distribute information to marketplaces, social platforms, and e-commerce systems. Beyond traditional commerce, Productsup also supports **agentic commerce** and **large language models (LLMs)**. This means you can deliver product data not only to established e-commerce platforms but also to emerging AI-driven environments, ensuring your integrations remain future-ready. By using ETM in the Developer Portal or the ETM API, you have full control over the structure and quality of the data and ensure that your data flows seamlessly through the Productsup platform to your chosen target channels. */} The publish workflow [#the-publish-workflow] Changes to an export template are saved as drafts and aren't live in the Productsup platform until you publish them. This lets you configure settings, attributes, and analyzer tests safely without risking unwanted changes reaching production. This applies to new export templates too. Until you publish an export template for the first time, platform users cannot see it at all. Publishing works the same way whichever route you use, but you request it differently: * **Developer Portal** — select **Publish** at the top of the interface when your export template is ready. * **ETM API** — send a `POST` request to `/V1/export-templates/{templateId}/commit`. A successful response from a write endpoint means your change was stored as a draft, not that it is live. Analyzer tests are the exception — they take effect immediately. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes) for the Developer Portal walkthrough, and [Publishing changes](/docs/export-template-management/developer-guides/publishing-changes) for the API workflow. Developer Portal vs ETM API [#developer-portal-vs-etm-api] Both the Developer Portal and the ETM API let you create and manage export templates, attributes, and analyzer tests. Use the Developer Portal for interactive, one-off configuration work. Use the ETM API when you need to automate template management, integrate ETM into a CI/CD workflow, or manage templates at scale. If you have questions or face issues, contact [support@productsup.com](mailto:support@productsup.com). # Conditionally mandatory attributes import { Callout } from 'fumadocs-ui/components/callout'; import { Steps, Step } from 'fumadocs-ui/components/steps'; Many channels require an attribute only in specific cases. For example, a marketplace may require the attribute **cell\_composition** only for products that contain batteries. A conditionally mandatory attribute covers this case: it stays optional by default and becomes mandatory as soon as any of its conditions is met. How conditions work [#how-conditions-work] Every conditionally mandatory attribute has at least one condition. A condition compares the value of another attribute of the same export template, called the trigger attribute, to a value you define: | Setting | Description | | :-------------------- | :------------------------------------------------------------------------------------------------------------------------------------- | | **Trigger Attribute** | Another attribute of the same export template whose value activates the condition. An attribute can't trigger itself | | **Operator** | *equals*, *not equals*, or *is present* | | **Trigger Value** | The value the platform compares the trigger attribute's value to. Not used with the *is present* operator | | **Description** | An optional hint that tells users where to find or set the trigger attribute, for example, `Product > Compliance > Batteries Required` | When any condition of an attribute is met, the attribute becomes mandatory. The attribute stays optional only while none of its conditions are met. With the *is present* operator, the condition is met whenever the trigger attribute has any non-empty value, so you don't enter a trigger value. Set an attribute as conditionally mandatory [#set-an-attribute-as-conditionally-mandatory] To make an attribute conditionally mandatory in the Developer Portal, take these steps: On the export template setup page, go to the section *Attributes and analyzer tests*, and select the name of the attribute you want to set up. In **Type**, select *Conditional*. The *Conditions Editor* appears with one empty condition. Set up the condition by choosing a **Trigger Attribute** and an **Operator**. For **equals** and **not equals**, also enter a **Trigger Value** (the **is present** operator doesn't need one). You can also enter a **Description** to help users find the trigger attribute. To add another condition, select **Add Condition**. The attribute becomes mandatory as soon as any condition is met. Select **Save**. Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). Manage conditionally mandatory attributes via the API [#manage-conditionally-mandatory-attributes-via-the-api] Attributes in the Export Template Management API carry an optional `type` field with the values `optional`, `mandatory`, or `conditionally_mandatory`, plus a `conditions` array. The `type` field takes precedence over the legacy `mandatory` boolean when you send both. This example makes an existing attribute conditionally mandatory: ```bash curl -X PATCH "https://export-template-api.productsup.com/V1/export-templates/{templateId}/attributes/{attributeId}" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "type": "conditionally_mandatory", "conditions": [ { "triggerAttribute": "batteries_required", "triggerValue": "true", "operator": "equals", "description": "Product > Compliance > Batteries Required" } ] }' ``` Each condition accepts these fields: | Field | Required | Description | | :----------------- | :---------- | :----------------------------------------------------------------------------------------------------------------------------------- | | `triggerAttribute` | Yes | The name of another attribute of the same export template whose value activates the condition | | `triggerValue` | Conditional | The value the trigger attribute's value is compared to. Required for `equals` and `not_equals`; omit or leave empty for `is_present` | | `operator` | No | `equals`, `not_equals`, or `is_present`. Defaults to `equals` | | `description` | No | A human-readable hint that tells users where to find or set the trigger attribute | The API validates these rules: * An attribute with the type `conditionally_mandatory` needs at least one condition. * Attributes with the types `optional` and `mandatory` can't have conditions. * The trigger attribute must be an existing attribute of the same export template. * An attribute can't reference itself as a trigger attribute. * A trigger value is required unless the operator is `is_present`. The same `type` and `conditions` fields are available when you create attributes via `POST /V1/export-templates/{id}/attributes`, when you use the bulk endpoints, and in the `attributes` array of `POST /V2/export-templates`. All endpoints that return attributes include the `type` and `conditions` fields in their responses. Related [#related] * [About attributes](/docs/export-template-management/attributes/overview) * [Make attributes mandatory](/docs/export-template-management/attributes/make-attributes-mandatory) * [Change attribute settings](/docs/export-template-management/attributes/change-attribute-settings) # Order attributes import { Callout } from 'fumadocs-ui/components/callout'; When you add new attributes to an export template, they land on top of the attribute list. The Productsup platform uses this order to display attributes in each export created with this export template. This order is also used to send attributes to the channel. If you want to change the attribute order, take these steps: . On the export template setup page, go to the section *Attributes and analyzer tests*, and select **Order attributes**. . Grab an attribute, move it to the desired place, and drop it. Order attributes in the attribute list . Once you have arranged the attributes according to your needs or channel requirements, select **Save**. Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). # Make attributes mandatory import { Callout } from 'fumadocs-ui/components/callout'; By default, the Developer Portal adds all attributes as optional. To make them mandatory, take these steps: . On the export template setup page, go to the section *Attributes and analyzer tests*, and check the boxes next to all attributes you want to make mandatory. Selecting attributes in the attributes list . Select **Set as mandatory**. The *Mandatory* column displays **Yes** for all attributes you have chosen to be mandatory. Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). Alternatively, you can see the next section for another way to set an attribute as mandatory or optional. # Delete attributes from an export template import { Callout } from 'fumadocs-ui/components/callout'; In case of setup mistakes or changing channel requirements, you can delete attributes from an export template. You can only delete optional attributes. If an attribute is set as mandatory, you need to make it optional before deleting it. See [Change attribute settings](/docs/export-template-management/attributes/change-attribute-settings) to make an attribute optional. You can remove optional attributes from an export template in 2 ways: * Deleting attributes one by one. * Deleting attributes in bulk. If you delete an attribute from an export template, all exports added in the Productsup platform using this export template will lose the deleted attribute in Dataflow and Data View. It can cause errors with rule box setups or on the channel side. To delete a single attribute: . On the export template setup page, go to the section *Attributes and analyzer tests*, and select the name of the attribute you want to delete. Delete one attribute . Select **Delete** at the bottom of the menu. . Select **Delete** once again to confirm the action. Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). To delete attributes in bulk: . On the export template setup page, go to the section *Attributes and analyzer tests*, and check the boxes next to all attributes you want to delete. Deleting multiple attributes at once . Select **Delete**. . Select **Delete** once again to confirm the action. Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). # Add attributes to an export template You can add attributes to each export template. Once you do so and publish the changes, the new attributes appear in each export created in the Productsup platform using this export template. . Go to [Export templates](https://dev-portal.productsup.com/channel-templates) in the Developer Portal. . Use the search bar to find the export template where you need to add attributes. . Select the needed export template to open the export template setup page: Export template setup page . In the section *Attributes and analyzer tests*, select **Add attributes**. 1. To add one attribute, enter its name in the text field and select **Add**. 2. To add multiple attributes, enter their names in the text field, separating each new attribute with a new line. Once you have added all attributes, select **Add**. Add attributes to export template . You have successfully added new attributes. See the next sections to set up and order attributes in an export template. Added attributes list # About attributes Every channel, such as Google Merchant Center or Amazon, expects to receive a number of specific attributes per product, order, shipment, or other item relevant to the channel. This is why all export templates in the Developer Portal can have attributes associated with them. An attribute is a characteristic of an item, for example, **title**, **id**, **color**, or **price**. There are 3 types of attributes in the Developer Portal: * **Mandatory** attributes are a requirement on the channel side. * **Optional** attributes are a nice-to-have. * **Conditionally mandatory** attributes are mandatory only when another attribute has a specific value. This attribute type is in beta. See [Conditionally mandatory attributes](/docs/export-template-management/attributes/conditionally-mandatory-attributes). On the export template setup page, mandatory attributes display **Yes** in the *Mandatory* column, while optional attributes display **No**: Attributes and analyzer tests section at the bottom of the export template setup page Although optional attributes aren't a requirement, we always recommend that our customers send as many attributes as possible, both mandatory and optional. On the channel side, there are requirements for both the list of mandatory and optional attributes and the values accepted for each of those attributes. To avoid your items being rejected by the channel, you can use analyzer tests that validate attribute values before sending them to the channel. See [Analyzer tests](/docs/export-template-management/analyzer-tests/overview) for more information. # Change attribute settings import { Callout } from 'fumadocs-ui/components/callout'; If you need to change an attribute's name, its mandatory or optional status, assign an analyzer test, or use other advanced attribute settings, take these steps: . On the export template setup page, go to the section *Attributes and analyzer tests*, and select the name of the attribute you want to set up. Edit an attribute . Find the needed settings and change them: 1. To rename the attribute, enter the new name in **Attribute name**. 2. To add an analyzer test to an attribute, select **Add Analyzer Test v2**. See [Add an analyzer test to an attribute](/docs/export-template-management/analyzer-tests/add-an-analyzer-test) for more information and setup steps. 3. To change attribute status, use the toggle **Mandatory?** and choose *Yes* or *No*. . Once ready with the settings, select **Save**. Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). # Publishing changes import { Callout } from "fumadocs-ui/components/callout"; Writing to an export template does not make the change live. Every write is a draft until you commit it, and only committed changes reach the Productsup platform. This covers attributes, attribute tags, export template tags, marketing data, custom form fields, and template settings. A successful `2xx` from a write endpoint means the change is stored in Export Template Management — not that platform users can see it. Analyzer tests are the one exception. See [What does not need publishing](#what-does-not-need-publishing). The model [#the-model] An export template has two states of change: | State | What it means | | :-------- | :-------------------------------------------------------------------------------------------------------------------------------------------- | | Draft | The change is stored in Export Template Management. `unpublishedChanges` is `true`. The platform still serves the previously committed state. | | Committed | A commit created a new revision. The platform picks that revision up and rebuilds its copy of the template from it. | Nothing moves a draft to committed except an explicit commit. There is no auto-commit, no timeout, and no partial propagation — a draft stays a draft indefinitely. Commit changes with the API [#commit-changes-with-the-api] Call the commit endpoint once you have finished writing: ```shell curl -X POST "https://export-template-api.productsup.com/V1/export-templates/{templateId}/commit" \ -H "Authorization: Bearer " ``` A `201 Created` response means a new revision exists. Batch your writes and commit once at the end rather than committing after each call — a commit is per template, not per change. A missing commit produces the symptom "the API returned success, but nothing changed in the platform." Check `unpublishedChanges` before assuming a write was lost. Publish changes in the Dev Portal [#publish-changes-in-the-dev-portal] The Dev Portal calls the same endpoint behind the **Publish** button on the export template page. Saving a step in the interface stores a draft; it does not publish. When a template has uncommitted changes, the interface shows an unpublished-changes warning. Both routes are equivalent. If you mix them — writing over the API and working in the interface on the same template — either **Publish** or a commit call publishes everything currently in draft, regardless of which route created it. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes) for the interface walkthrough. What does not need publishing [#what-does-not-need-publishing] Analyzer tests take effect immediately. These three operations bypass the draft cycle entirely: | Operation | Endpoint | | :----------------------------------- | :------------------------------------------------------------------ | | Add an analyzer test to an attribute | `POST /V2/attributes/{attributeId}/analyzer-tests` | | Update an analyzer test | `PATCH /V2/attributes/{attributeId}/analyzer-tests/{assignmentId}` | | Remove an analyzer test | `DELETE /V2/attributes/{attributeId}/analyzer-tests/{assignmentId}` | Adding, changing, or removing an analyzer test is live as soon as the request succeeds, and it does not set `unpublishedChanges`. There is nothing to commit. If an analyzer test does not appear to take effect, check whether the attribute you added it to is published. Analyzer tests are stored against the attribute, so a test on an attribute that is still a draft has nothing to run against yet. The full-replace endpoint mixes both behaviours. `PUT /V2/export-templates/{templateId}` writes attributes as a draft and analyzer tests immediately, so the analyzer tests in your payload apply before you publish and the rest does not. Check for uncommitted changes [#check-for-uncommitted-changes] `GET /V2/export-templates/{templateId}` returns an `unpublishedChanges` boolean: ```shell curl "https://export-template-api.productsup.com/V2/export-templates/{templateId}" \ -H "Authorization: Bearer " ``` ```json { "id": 12345, "name": "Example channel", "unpublishedChanges": true } ``` `true` means at least one write has not been committed. Commit, and the flag clears. Worked example [#worked-example] Adding a template tag takes two calls. The first stores the tag; the second publishes it: ```shell # 1. Write the tag — stored as a draft curl -X POST "https://export-template-api.productsup.com/V1/export-templates/{templateId}/export-template-tags" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"key": "example_tag_key", "value": "example_value"}' # 2. Commit — the tag becomes live curl -X POST "https://export-template-api.productsup.com/V1/export-templates/{templateId}/commit" \ -H "Authorization: Bearer " ``` Stop after the first call and the tag exists in Export Template Management, is returned by the tag endpoints, and is invisible to the platform. Propagation is asynchronous [#propagation-is-asynchronous] A commit creates the revision; the platform consumes it on its next synchronization run. Allow a short delay between the commit and the change appearing in the platform. A `201` from the commit endpoint confirms the revision was created, not that propagation has finished. Propagation is one-way, and it rebuilds the platform's copy of the template from Export Template Management on every commit. Anything changed directly on the platform side, outside the ETM API, is overwritten on the next commit. Make the change in Export Template Management so it survives. A commit always creates a revision, even when the template has no pending draft. Use it to force the platform to re-read a template whose state has drifted. Next steps [#next-steps] * **[Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes)** — publishing from the Dev Portal interface * **[Commit export template changes](/docs/export-template-management/api-reference/v1/export-template/export_changes_commit)** — endpoint reference * **[Key concepts](/docs/export-template-management/getting-started/key-concepts)** — export templates, attributes, and analyzer tests # Analyzer tests import { Callout } from "fumadocs-ui/components/callout"; import { Steps, Step } from "fumadocs-ui/components/steps"; Analyzer test templates are the supported validation system for export attributes. You pick from a curated catalog of templates, supply a small JSON configuration, and the assignment runs against every row of the export. Each template is parameterised and safe to expose to all authenticated users — no admin role required, and updates to the engine apply automatically without per-assignment migration. Prerequisites [#prerequisites] You need a valid access token. See [Authentication](/docs/export-template-management/developer-guides/authentication) for how to obtain one with the Client Credentials flow. Pass it as a Bearer token in every request: ```bash -H "Authorization: Bearer " ``` Quick start [#quick-start] List available templates [#list-available-templates] ```bash curl "https://export-template-api.productsup.com/V2/analyzer-test-templates" \ -H "Authorization: Bearer " ``` This endpoint is the source of truth for the template catalog. Its response includes the live configuration schema for each template, so any new optional field (e.g. `skipEmpty`) appears here automatically once deployed. Assign a template to an attribute [#assign-a-template-to-an-attribute] ```bash curl -X POST "https://export-template-api.productsup.com/V2/attributes/123/analyzer-tests" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '[{"templateId": "numeric_check", "configuration": {"value": 0, "operator": ">="}}]' ``` The analyzer test is live as soon as the request succeeds. Analyzer tests need no publishing step, unlike other export template changes — see [Publishing changes](/docs/export-template-management/developer-guides/publishing-changes). View results [#view-results] ```bash curl "https://export-template-api.productsup.com/V1/export-templates/{templateId}/attributes" \ -H "Authorization: Bearer " ``` The response includes an `analyzerTests` array for each attribute showing all assigned validations. How tests aggregate [#how-tests-aggregate] Each assignment runs **independently** against every row. A row fails validation on an attribute if **any** assignment on that attribute flags it. If you need "value must be in range A AND format B", create one assignment for each constraint and the row will fail if either fires. If you need disjunction ("matches pattern A OR pattern B"), express it inside a single regex pattern using regex alternation. Available templates [#available-templates] Numeric check [#numeric-check] Validates numeric values against a threshold using comparison operators. **Use cases:** * Price must be non-negative. * Stock quantity within range. * Rating between 1 and 5. **Configuration:** ```json { "value": 0, "operator": ">=" } ``` | Field | Type | Required | Description | | ---------- | ------ | -------- | ----------------------------------------------------------------------------------------------------- | | `value` | number | yes | Numeric threshold to compare against. | | `operator` | string | yes | One of `>`, `<`, `>=`, `<=`, `=`, `!=`. The validation passes when `column [operator] value` is true. | Empty values are interpreted as `0`. To skip empty rows entirely, pair this template with a separate `not_empty_validation` assignment. **Example — validate price is at least 0:** ```bash curl -X POST "https://export-template-api.productsup.com/V2/attributes/123/analyzer-tests" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '[{"templateId": "numeric_check", "configuration": {"value": 0, "operator": ">="}}]' ``` Length check [#length-check] Validates string length. **Use cases:** * Product title max 100 characters. * Description minimum length. * SKU exactly 10 characters. **Configuration:** ```json { "value": 100, "operator": "<=" } ``` | Field | Type | Required | Description | | ---------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------- | | `value` | integer | yes | Length threshold (must be ≥ 0). | | `operator` | string | yes | One of `>`, `<`, `>=`, `<=`, `=`, `!=`. The validation passes when `length(column) [operator] value` is true. | Empty values have `length() = 0`. Comparisons behave naturally: `length(empty) <= 100` is true (passes), `length(empty) >= 1` is false (fails). **Example — title must be at most 100 characters:** ```bash curl -X POST "https://export-template-api.productsup.com/V2/attributes/456/analyzer-tests" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '[{"templateId": "length_check", "configuration": {"value": 100, "operator": "<="}}]' ``` Enum check [#enum-check] Validates that a value is in (or not in) a predefined list. **Use cases:** * Availability status must be from approved list (whitelist). * Brand must NOT be a placeholder value (blacklist). * Color must come from an approved palette. **Configuration:** ```json { "allowedValues": ["in stock", "out of stock", "preorder"], "operator": "IN", "caseSensitive": false, "skipEmpty": false } ``` | Field | Type | Required | Default | Description | | --------------- | ------------------------ | -------- | ------- | -------------------------------------------------------------------------------------------------------------------------- | | `allowedValues` | array of strings/numbers | yes | — | List of values to compare against. | | `operator` | string | no | `"IN"` | `"IN"` (whitelist — pass if value is in the list) or `"NOT IN"` (blacklist — pass if value is NOT in the list). | | `caseSensitive` | boolean | no | `true` | When `false`, comparison wraps both sides in `mb_lower()` so case differences don't fail the test. | | `skipEmpty` | boolean | no | `false` | When `true`, empty/null values are treated as valid. The dedicated empty-column test still flags empty rows independently. | Default `skipEmpty: false` means empty values fail enum checks because they are not in any allowed list. Set to `true` for tests that should pass empty rows and rely on a separate `not_empty_validation` to flag missing values. This avoids double-counting empties against both the enum test and the empty test. **Example — availability whitelist with case-insensitive matching:** ```bash curl -X POST "https://export-template-api.productsup.com/V2/attributes/789/analyzer-tests" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '[{"templateId": "enum_check", "configuration": {"allowedValues": ["in stock", "out of stock", "preorder", "backorder"], "operator": "IN", "caseSensitive": false, "skipEmpty": true}}]' ``` **Example — brand blacklist with placeholder values:** ```bash curl -X POST "https://export-template-api.productsup.com/V2/attributes/790/analyzer-tests" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '[{"templateId": "enum_check", "configuration": {"allowedValues": ["N/A", "Generic", "No brand", "Does not exist"], "operator": "NOT IN", "caseSensitive": false}}]' ``` Regex pattern [#regex-pattern] Validates a value against a regular expression. **Use cases:** * Date format validation (`YYYY-MM-DD`). * Product code format (e.g. `ABC-12345`). * Phone number format. * Detect HTML tags or broken encoding. **Configuration:** ```json { "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "shouldMatch": true, "skipEmpty": false } ``` | Field | Type | Required | Default | Description | | ------------- | ------- | -------- | ------- | ------------------------------------------------------------------------------------------------------------------ | | `pattern` | string | yes | — | PCRE pattern. With or without delimiters. | | `shouldMatch` | boolean | no | `true` | When `true`, the value must match the pattern to pass. When `false`, the value must NOT match the pattern to pass. | | `skipEmpty` | boolean | no | `false` | When `true`, empty/null values are treated as valid. | **Pattern delimiters** The pattern can be supplied with or without delimiters: * **Without delimiters** — e.g. `"^\\d{4}$"` is automatically wrapped in `/` delimiters. * **With delimiters** — e.g. `"/^\\d{4}$/u"` is used as-is. Accepted delimiter characters: `/`, `#`, `~`, `|`, `@`, `!`. Useful when your pattern itself contains `/` (e.g. URL patterns), so you can write `"#https?://[^/]+#"` instead of escaping every slash. **JSON escaping** Backslashes need to be escaped in JSON strings. When writing patterns: * In JSON request: `"pattern": "^\\d{4}$"` (double backslash in source). * Actual regex executed: `^\d{4}$` (single backslash). | Regex want | JSON write | After parse | | ------------------------ | ---------- | ----------- | | `\d` | `\\d` | `\d` | | `\w` | `\\w` | `\w` | | `\s` | `\\s` | `\s` | | `\\` (literal backslash) | `\\\\` | `\\` | **`skipEmpty` and `shouldMatch` interaction** | `shouldMatch` | `skipEmpty` | Behaviour on empty value | | ------------- | ----------------- | --------------------------------------------------------------------------------------------- | | `true` | `false` (default) | Empty value fails (pattern doesn't match an empty string for most patterns). | | `true` | `true` | Empty value passes (skip-empty short-circuits). | | `false` | `false` (default) | Empty value passes (pattern doesn't match an empty string, so "must not match" is satisfied). | | `false` | `true` | Empty value passes. | Setting `skipEmpty: true` is most useful when `shouldMatch: true` (i.e. "value must be a valid format"), since you want empty rows to be handled by the empty-column test rather than failing the format check too. **Example — date format validation:** ```bash curl -X POST "https://export-template-api.productsup.com/V2/attributes/101/analyzer-tests" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '[{"templateId": "regex_pattern", "configuration": {"pattern": "^\\d{4}-\\d{2}-\\d{2}$", "shouldMatch": true, "skipEmpty": true}}]' ``` **Example — flag descriptions containing HTML tags:** ```bash curl -X POST "https://export-template-api.productsup.com/V2/attributes/102/analyzer-tests" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '[{"templateId": "regex_pattern", "configuration": {"pattern": "#<[^>]+>#", "shouldMatch": false}}]' ``` `shouldMatch: false` means "valid when does NOT match". A description containing HTML triggers the test; clean text passes. The `#` delimiters avoid escaping the `/` that would otherwise be needed in a URL-style pattern. Not empty / null validation [#not-empty--null-validation] Validates that a value is not empty or null. **Use cases:** * Mandatory attributes must contain a value. * Detect optional fields that became empty unexpectedly. **Configuration:** ```json {} ``` No configuration parameters. **Example — title is required:** ```bash curl -X POST "https://export-template-api.productsup.com/V2/attributes/201/analyzer-tests" \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '[{"templateId": "not_empty_validation", "configuration": {}}]' ``` Composing multiple templates [#composing-multiple-templates] You can assign multiple templates to a single attribute. Each assignment is evaluated independently, and a row is flagged for that attribute if **any** assignment fires. Example: price range [#example-price-range] Validate price is between 0 and 999,999. Two assignments — a row fails if either bound is violated: ```json [ { "templateId": "numeric_check", "configuration": {"value": 0, "operator": ">="} }, { "templateId": "numeric_check", "configuration": {"value": 999999, "operator": "<="} } ] ``` Example: required field with format [#example-required-field-with-format] Date must be present AND match `YYYY-MM-DD`: ```json [ { "templateId": "not_empty_validation", "configuration": {} }, { "templateId": "regex_pattern", "configuration": { "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "shouldMatch": true, "skipEmpty": true } } ] ``` The format test sets `skipEmpty: true` so empty rows are flagged once (by the not-empty test), not twice. Example: title constraints [#example-title-constraints] Title must be between 10 and 100 characters: ```json [ { "templateId": "length_check", "configuration": {"value": 10, "operator": ">="} }, { "templateId": "length_check", "configuration": {"value": 100, "operator": "<="} } ] ``` API reference [#api-reference] | Method | Endpoint | Description | | -------- | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `GET` | `/V2/analyzer-test-templates` | [List all available templates](/docs/export-template-management/api-reference/v2/analyzer-tests/v2_analyzer_test_templates_list) with their configuration schemas. | | `POST` | `/V2/attributes/{attributeId}/analyzer-tests` | [Assign one or more templates](/docs/export-template-management/api-reference/v2/analyzer-tests/v2_assign_analyzer_test_template) to an attribute. | | `PATCH` | `/V2/attributes/{attributeId}/analyzer-tests/{assignmentId}` | [Update an existing assignment](/docs/export-template-management/api-reference/v2/analyzer-tests/v2_update_analyzer_test_assignment). | | `DELETE` | `/V2/attributes/{attributeId}/analyzer-tests/{assignmentId}` | [Remove an assignment](/docs/export-template-management/api-reference/v2/analyzer-tests/v2_unassign_analyzer_test_template) from an attribute. | | `GET` | `/V1/export-templates/{templateId}/attributes` | [List export template attributes](/docs/export-template-management/api-reference/v1/export-template-attribute/export_template_attributes_list) including their `analyzerTests` array. | | `GET` | `/V2/export-templates/{id}/schema/full` | [Get the JSON Schema](/docs/export-template-management/api-reference/v2/export-template/v2_export_template_schema) describing all attributes and their assigned analyzer tests for a given export template. | Common assignment-body fields [#common-assignment-body-fields] In addition to `templateId` and `configuration`, the following optional fields can be supplied when creating or updating an assignment: | Field | Type | Description | | ----------------- | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | `name` | string (≤ 255) | Display name shown in the Developer Portal UI. | | `color` | string (hex, e.g. `#ff0000`) | Display color for the assignment chip in the UI. | | `caption` | string (≤ 255) | Caption shown when the test fails. Defaults to `"Invalid value"`. | | `group` | string (≤ 30) | Grouping label for display purposes (UI only). | | `hint` | string (≤ 2000) | Long-form hint shown to the user when the test fails. | | `errorId` | integer | ID of the associated monitorable error from `pds_error`. | | `requiredColumns` | array of strings | List of column names the test depends on. | | `mandatory` | boolean | **Deprecated.** All analyzer tests are now mandatory. The field is accepted for backward compatibility but has no effect. | Error responses [#error-responses] | Status | Meaning | | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `400 Bad Request` | Invalid configuration, missing required fields, or template-specific validation failure (e.g. unknown operator, empty `allowedValues`, invalid regex syntax). | | `401 Unauthorized` | Missing or invalid authentication. | | `403 Forbidden` | Insufficient permissions. | | `404 Not Found` | Attribute, assignment, or template does not exist. | See the [API reference](/docs/export-template-management/api-reference) for complete error response schemas and examples. Permissions [#permissions] All authenticated users can: * List available templates. * Assign templates to attributes. * View, update, and unassign their assignments. Best practices [#best-practices] Start simple [#start-simple] Begin with the minimum validation that catches obvious bad data, then add complexity. **Step 1 — validate price is non-negative:** ```json [ {"templateId": "numeric_check", "configuration": {"value": 0, "operator": ">="}} ] ``` **Step 2 — add an upper bound:** ```json [ {"templateId": "numeric_check", "configuration": {"value": 0, "operator": ">="}}, {"templateId": "numeric_check", "configuration": {"value": 999999, "operator": "<="}} ] ``` Skip empty for format tests [#skip-empty-for-format-tests] If a value-format test (e.g. "must match URL pattern") should not also flag empty rows — because the empty-column readiness test or `not_empty_validation` already covers them — set `skipEmpty: true`: ```json { "templateId": "regex_pattern", "configuration": { "pattern": "^https?://.+$", "shouldMatch": true, "skipEmpty": true } } ``` This avoids the same row failing twice (once for being empty, once for not matching the URL pattern), which would distort readiness math without changing what gets flagged. Use case-insensitive enum when source data varies [#use-case-insensitive-enum-when-source-data-varies] If your source data has inconsistent capitalisation, enable case-insensitive matching once instead of listing every variant: ```json { "templateId": "enum_check", "configuration": { "allowedValues": ["in stock", "out of stock", "preorder"], "operator": "IN", "caseSensitive": false } } ``` Avoid conflicting constraints [#avoid-conflicting-constraints] Each assignment runs independently and a row fails if any fires. Conflicting constraints will fail every row. **Avoid:** ```json // All values fail — can't be both > 100 AND < 50 [ {"templateId": "numeric_check", "configuration": {"value": 100, "operator": ">"}}, {"templateId": "numeric_check", "configuration": {"value": 50, "operator": "<"}} ] ``` **Prefer:** ```json // Valid range: between 50 and 100 [ {"templateId": "numeric_check", "configuration": {"value": 50, "operator": ">="}}, {"templateId": "numeric_check", "configuration": {"value": 100, "operator": "<="}} ] ``` If you need disjunction within a single value-format check (`pattern A OR pattern B`), express it inside one regex using regex alternation (`(?:A|B)`), not as separate assignments. Test with sample data [#test-with-sample-data] After assigning templates, run the analyzer against a representative sample of the export's data and check the readiness output. Aim for the same per-attribute readiness numbers you saw under V1 if you're migrating an existing V1 catalog. Next steps [#next-steps] * **[API reference](/docs/export-template-management/api-reference)** — full request and response schemas for every endpoint. * **[About analyzer tests](/docs/export-template-management/analyzer-tests/overview)** — conceptual overview from the user-facing side. * **[Attributes](/docs/export-template-management/attributes/overview)** — how attributes work on an export template, the surface analyzer tests attach to. For help, contact your Productsup Customer Success Manager or our Technical Support Team via [support@productsup.com](mailto:support@productsup.com). # Authentication import { Callout } from "fumadocs-ui/components/callout"; The ETM API authenticates with the OAuth 2.0 **Client Credentials** flow against Productsup's authentication server. You exchange a `client_id` and `client_secret` for a short-lived JWT, then send that JWT as a bearer token on every API request. This is a machine-to-machine flow — no end-user credentials and no shared backend secret are involved. Get your client credentials [#get-your-client-credentials] Each integration gets its own `client_id` and `client_secret`. They are scoped to your organization, so a token created from them can only reach your own export templates. To request a pair, contact your Productsup Customer Success Manager or our Technical Support Team via [support@productsup.com](mailto:support@productsup.com). The `client_secret` is a server-side credential. Never ship it in browser or mobile code, never commit it to a repository, and never expose it to end users. Store it in your secret manager or as an environment variable. Request an access token [#request-an-access-token] Send a form-encoded `POST` to the authentication server token endpoint: ```shell curl -X POST "https://auth.productsup.com/realms/External-Applications/protocol/openid-connect/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials" \ -d "client_id=" \ -d "client_secret=" ``` A successful request returns `200 OK`: ```json { "access_token": "...", "expires_in": 300, "token_type": "Bearer", "not-before-policy": 0, "scope": "" } ``` | Field | Description | | :------------- | :------------------------------------------ | | `access_token` | The JWT to send on API requests. | | `expires_in` | Remaining lifetime of the token in seconds. | | `token_type` | Always `Bearer`. | Client Credentials does not issue a `refresh_token` — see [Token lifetime and re-authentication](#token-lifetime-and-re-authentication). A `401 Unauthorized` from this endpoint means the `client_id` or `client_secret` is wrong. A `400 Bad Request` with `unsupported_grant_type` means the client is not configured for Client Credentials — contact support. The example above sends the secret in the request body (`client_secret_post`). The token endpoint also accepts HTTP Basic (`client_secret_basic`), which is what most OAuth client libraries use by default. Either is fine. Configure your client from OpenID Connect discovery [#configure-your-client-from-openid-connect-discovery] If your HTTP client is OIDC-aware, point it at the discovery document instead of hardcoding endpoints: ``` https://auth.productsup.com/realms/External-Applications/.well-known/openid-configuration ``` It resolves the token endpoint, the supported grant types, and the JWKS URI for verifying token signatures. No scope is required for ETM — omit `scope` from the token request. Use the token in API requests [#use-the-token-in-api-requests] Pass the token in the `Authorization` header: ```shell curl "https://export-template-api.productsup.com/V1/export-templates" \ -H "Authorization: Bearer " ``` Every ETM API endpoint requires this header. The API host is `https://export-template-api.productsup.com`. Token lifetime and re-authentication [#token-lifetime-and-re-authentication] An access token is valid for the number of seconds in `expires_in`. * **Cache the token in memory** and reuse it until it expires. Do not request a new token per API call; that adds a round trip to the authentication server on every request and will hit rate limits at scale. * **Re-authenticate by repeating the token request.** Client Credentials issues no refresh token, because your client already holds the credentials needed to mint a fresh one. * **Refresh early.** Request a new token shortly before the current one expires, rather than waiting for the first failure. * **Treat `401 Unauthorized` from the ETM API as an expired or revoked token.** Request a new token and retry the call once. If the retry also returns `401`, stop and check your credentials — retrying in a loop will not recover. Next steps [#next-steps] * **[Publishing changes](/docs/export-template-management/developer-guides/publishing-changes)** — why a successful write is not yet live, and how to commit it * **[Analyzer tests](/docs/export-template-management/developer-guides/analyzer-tests)** — assign reusable validators to export template attributes * **[API reference](/docs/export-template-management/api-reference)** — every endpoint, request, and response # API reference import { Card, Cards } from "fumadocs-ui/components/card"; import { Callout } from "fumadocs-ui/components/callout"; Browse Export Template Management endpoints, grouped by API version. **V2** is the modern, template-based surface — use it where it covers what you need (export templates, analyzer tests, async operations). **V1** covers the broader feature set — use it for everything V2 doesn't cover yet (metadata, revisions, tags, attribute aliases, export fields, marketing, custom form fields). Both surfaces are actively supported. Pick the one that has the operations you need. Write operations on an export template are stored as drafts. They reach the Productsup platform only after you commit them with `POST /V1/export-templates/{templateId}/commit`. Analyzer tests are the exception — they take effect immediately. Every operation page states which of the two applies. See [Publishing changes](/docs/export-template-management/developer-guides/publishing-changes). Every operation page below renders live request and response schemas from the upstream OpenAPI spec. Download the [ETM OpenAPI specification](https://export-template-api.productsup.com/docs/api/swagger.json) (JSON) to import into Postman, generate clients, or feed into any OpenAPI-aware tool. Authentication uses the OAuth 2.0 Client Credentials flow — see [Authentication](/docs/export-template-management/developer-guides/authentication). V2 [#v2] V1 [#v1] Export templates and metadata [#export-templates-and-metadata] Attributes [#attributes] Marketing and custom forms [#marketing-and-custom-forms] # Delete analyzer tests from an attribute import { Callout } from 'fumadocs-ui/components/callout'; . Go to [Export templates](https://dev-portal.productsup.com/channel-templates) in the Developer Portal. . Use the search bar to find the export template where you want to delete analyzer tests. . Select the needed export template to open the export template setup page. . In the section *Attributes and analyzer tests*, select the attribute where you want to delete an analyzer test. . There are 2 options to delete analyzer tests: . In the *Analyzer Tests v2* panel, select the cross icon **x** next to the analyzer test you want to remove. If you have more than one analyzer test, you may want to see more details on each analyzer test before deleting it. If so, see the next sub-step. Deleting an analyzer test in the edit attribute sidebar . In the *Analyzer Tests v2* panel, select **Add Analyzer Test v2** to open the *Configure Analyzer Test* pop-up, where you can see more details about the added analyzer tests. To delete an analyzer test in this pop-up, select the trash can icon next to an analyzer test. Once ready, select **Save**. Deleting an analyzer test in the Configure Analyzer Test pop-up Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). # About analyzer tests Every channel, such as Google Merchant Center or Amazon, expects that all attribute values it receives meet certain requirements. To ensure that, you can create analyzer tests and add them to the attributes in your export template. See [Attributes](/docs/export-template-management/attributes/overview) and [Export templates](/docs/export-template-management/export-templates/overview) for more information. An analyzer test is a validation mechanism that checks if attribute values meet particular requirements, for example, contain a valid URL or don't exceed 150 characters. In the Productsup platform, users can see analyzer tests in Data View, where they select a particular attribute to check if its values meet channel requirements. See [Analyze your data in Data View](https://help.productsup.com/en/29493-29501-analyze-your-data-in-data-view.html). Analyzer test in Data View in the Productsup platform # Types of analyzer tests There are several types of analyzer tests that should cover a wide variety of attribute value requirements. When creating a new analyzer test, you can choose one type or combine multiple analyzer test types to create complex validation schemes. Here are the available types: * **Length validation**: checks the length of alphanumeric values. * **Numeric validation**: compares numbers. * **Enum validation**: checks pre-defined values. * **Regex pattern validation**: performs pattern-based search and matches. * **Not empty/null validation**: makes sure attribute values aren't empty. Analyzer test types un the Configure Analyzer Test pop-up # Add an analyzer test to an attribute import { Callout } from 'fumadocs-ui/components/callout'; To add an analyzer test to an attribute, take these steps: . Go to [Export templates](https://dev-portal.productsup.com/channel-templates) in the Developer Portal. . Use the search bar to find the export template where you need to add analyzer tests. . Select the needed export template to open the export template setup page: Export template setup page . In the section *Attributes and analyzer tests*, select the attribute where you want to add an analyzer test. Select an attribute to add analyzer tests . Choose **Add Analyzer Test v2**. Add Analyzer Test v2 button in the edit attribute sidebar . See the next sections to set up your analyzer test based on the desired analyzer test type: * [Length validation](#length-validation) * [Numeric validation](#numeric-validation) * [Enum validation](#enum-validation) * [Regex pattern validation](#regex-pattern-validation) * [Not empty/null validation](#not-empty-null-validation) Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). Length validation [#length-validation] Length validation is an analyzer test type that checks if the length of an alphanumeric value (a string) stays within a desired limit. These analyzer tests use the following operators: >, \<, >=, \<=, =, and !=. For example, you can use length validation to make sure that: * **Title** values don't exceed 100 characters. * **Description** values are at least 70 characters long. * **SKU** values are exactly 10 characters long. To add a length validation analyzer test: . Take the steps from [Add an analyzer test to an attribute](#add-an-analyzer-test-to-an-attribute) to open the *Configure Analyzer Test* pop-up. . In the *Configure Analyzer Test* pop-up, select **Length Validation**. Length validation analyzer test . In the *CONFIGURATION* section, toggle **Mandatory** to *Yes* if the analyzer test represents a mandatory requirement for the attribute. Toggle it to *No* if this isn't a critical validation requirement. . In **Value**, provide the number of characters that the analyzer test should check your values against. . In **Operator**, choose the condition that should be fulfilled for an attribute value to meet the length requirement: 1. *>* means the attribute length should be greater than the provided number of characters. 2. *\<* means the attribute length should be less than the provided number of characters. 3. *>=* means the attribute length should be greater than or equal to the provided number of characters. 4. *\<=* means the attribute length should be less than or equal to the provided number of characters. 5. *=* means the attribute length should be exactly equal to the provided number of characters. 6. *!=* means the attribute value can be of any length but shouldn't be equal to the provided number of characters. . Once you set up the analyzer test, select **Save**. Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). Numeric validation [#numeric-validation] Numeric validation is an analyzer test type that compares attribute values to a desired number using such operators as >, \<, >=, \<=, =, and !=. For example, you can use numeric validation to make sure that: * **Price** values are equal to or greater than 0. * **Stock** values are within a desired range. * **Rating** values are between 1 and 5. To add a numeric validation analyzer test: . Take the steps from [Add an analyzer test to an attribute](#add-an-analyzer-test-to-an-attribute) to open the *Configure Analyzer Test* pop-up. . In the *Configure Analyzer Test* pop-up, select **Numeric Validation**. Numeric validation analyzer test . In the *CONFIGURATION* section, toggle **Mandatory** to *Yes* if the analyzer test represents a mandatory requirement for the attribute. Toggle it to *No* if this isn't a critical validation requirement. . In **Value**, provide the number that the analyzer test should compare your numeric values against. . In **Operator**, choose the condition that should be fulfilled for an attribute value to meet the requirement: 1. *>* means the number in the attribute should be greater than the provided number. 2. *\<* means the number in the attribute should be less than the provided number. 3. *>=* means the number in the attribute should be greater than or equal to the provided number. 4. *\<=* means the number in the attribute should be less than or equal to the provided number. 5. *=* means the number in the attribute should exactly equal the provided number. 6. *!=* means the attribute can have any number, but it shouldn't equal the provided number. . Once you set up the analyzer test, select **Save**. Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). Enum validation [#enum-validation] Enum validation is an analyzer test type that compares attribute values to a list of pre-defined values and allows or blocks attribute values in case of matches. It is useful for attributes that should only contain a limited number of specific values. For example, you can use enum validation to make sure that: * **Availability** contains only *in stock* or *out of stock* values. * **Category** doesn't contain names of discontinued categories. * **Color** only contains values from a pre-defined list; for example, it should be *blue* instead of *navy*, *indigo*, or *cobalt*. To add an enum validation analyzer test: . Take the steps from [Add an analyzer test to an attribute](#add-an-analyzer-test-to-an-attribute) to open the *Configure Analyzer Test* pop-up. . In the *Configure Analyzer Test* pop-up, select **Enum Validation**. Enum validation analyzer test . In the *CONFIGURATION* section, toggle **Mandatory** to *Yes* if the analyzer test represents a mandatory requirement for the attribute. Toggle it to *No* if this isn't a critical validation requirement. . In **Allowed Values**, enter the pre-defined values that the analyzer test should compare your attribute values to. You can enter multiple values one by one. To add a pre-defined value, enter it in the text field, and select the plus icon **+** at the end of the field. . In **Operator**, choose whether the provided pre-defined values should or shouldn't be in the attribute values: 1. *IN* means the attribute should contain the pre-defined value. The entire value must match the pre-defined value, not just a part of it. . *NOT IN* means the attribute shouldn't contain the pre-defined value. . In **Case Sensitive**, choose whether you want your attribute values to exactly match the pre-defined values or if varying capitalization is acceptable. By default, enum validation is case-sensitive, so if an attribute value is *In Stock*, while the pre-defined value is *in stock*, the value will fail the analyzer test. If you don't want to toggle the **Case Sensitive** setting off, you can add all variants of spelling the needed value in **Allowed Values**. For example, instead of just adding *in stock*, you can also add *In Stock*, *IN STOCK*, *in Stock*, etc. . Once you set up the analyzer test, select **Save**. Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). Regex pattern validation [#regex-pattern-validation] Regex pattern validation is an analyzer test type that scans attribute values and checks if they match a regular expression. A regular expression (regex) is a sequence of characters that uses specific syntax or structure rules to define a search pattern. Using a regex, you can search your data for specific text pattern matches instead of exact text matches. For example, the regex `/([A-Z])\w+/` finds and matches all words that start with an uppercase letter and are longer than 1 letter. You can use regex pattern validation to make sure that: * **Date values** follow the format *DD-MM-YYYY*. * **Product code** values follow the format *AAA-11111*. * **Phone number** values are valid and follow the needed format. * **Weight** values use the needed format for numbers and units. To add an analyzer test for regex pattern validation: . Take the steps from [Add an analyzer test to an attribute](#add-an-analyzer-test-to-an-attribute) to open the *Configure Analyzer Test* pop-up. . In the *Configure Analyzer Test* pop-up, select **Regex Pattern Validation**. Regex pattern validation analyzer test . In the *CONFIGURATION* section, toggle **Mandatory** to *Yes* if the analyzer test represents a mandatory requirement for the attribute. Toggle it to *No* if this isn't a critical validation requirement. . In **Pattern**, enter the regular expression that defines a pattern you want to search for in your attribute values: * You can enter the regex both with and without forward slashes: `([A-Z])\w+` and `/([A-Z])\w+/`. . In **Should Match**, choose whether the attribute values should or shouldn't match the regex to pass the analyzer test. . Once you set up the analyzer test, select **Save**. Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). Not empty/null validation [#not-emptynull-validation] Not empty/null validation is an analyzer test type that makes sure an attribute value isn't empty or doesn't contain a `null` value. It is very useful for mandatory attributes. For example, you can use this analyzer test type to make sure that: * Mandatory attributes contain values that aren't empty or `null`. * Optional attribute values aren't empty or `null`. To add an analyzer test for not empty/null validation: . Take the steps from [Add an analyzer test to an attribute](#add-an-analyzer-test-to-an-attribute) to open the *Configure Analyzer Test* pop-up. . In the *Configure Analyzer Test* pop-up, select **Not Empty/Null Validation**. Not empty/null validation analyzer test . In the *CONFIGURATION* section, toggle **Mandatory** to *Yes* if the analyzer test represents a mandatory requirement for the attribute. Toggle it to *No* if this isn't a critical validation requirement. . Once you set up the analyzer test, select **Save**. Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). Combine analyzer tests for complex validation scenarios [#combine-analyzer-tests-for-complex-validation-scenarios] If you need to set up a multi-step validation scheme for your attributes, you can combine multiple analyzer tests. For example, you can set up multiple analyzer tests in these cases: | Scenario | Analyzer test setup | | :---------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | | **Price** values should be between 0 and 999,999. | One analyzer test for numeric validation checks that the value is greater than or equal to 0. Another numeric validation checks that the value is less than or equal to 999,999. The combination method is *AND*. | | **Date** values shouldn't be empty and should follow the format *DD.MM.YYYY*. | One analyzer test for not empty/null validation checks that the value isn't empty. Another analyzer test for regex pattern validation checks that the value matches the regex `^\\d{4}-\\d{2}-\\d{2}$`. The combination method is *AND*. | Once you add your first analyzer test, take these steps: . At the bottom of the *Configure Analyzer Test* pop-up, select **Add Another Test**. Combination operator in the Configure Analyzer Test pop-up . Choose how to combine analyzer tests in **Combine with**: 1. Choose *AND* if attribute values have to pass both the previous and the new analyzer test. This is the default combination operator. 2. Choose *OR* if attribute values have to pass either the previous or the new analyzer test. For your convenience, you can collapse the analyzer tests you aren't working on by selecting them: Collapsible analyzer test panels . Set up all added analyzer tests, and select **Save** at the bottom of the pop-up. Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). # Best practices for adding analyzer tests You can use analyzer tests as you see fit, but to achieve your goals, we recommend following this simple set of best practices. Start simple [#start-simple] Add basic analyzer tests first and build up to more complex validations. For example, for **price** values, you can start with an analyzer test checking that all values are positive numbers, and then add a limit that your prices shouldn't exceed. Don't make all analyzer tests mandatory [#dont-make-all-analyzer-tests-mandatory] Try to make analyzer tests mandatory only in critical cases. For example, an analyzer test for not empty/null validation can be mandatory for a mandatory attribute, while a length validation analyzer test for the same attribute can remain optional. Avoid conflicts [#avoid-conflicts] You can create conflicting analyzer tests in the Developer Portal. For example, one analyzer test checks if a numeric value is greater than 100, and another one, combined with the *AND* operator, checks that it is less than 50. No number can be greater than 100 and less than 50 at the same time. This constitutes conflicting analyzer tests in an attribute, which causes all items to fail analyzer tests for this attribute. To avoid conflicts, consider the combination method carefully when adding multiple analyzer tests to an attribute. Use the *AND* combination method for all analyzer tests that an attribute should pass in parallel, while reserving *OR* combinations for analyzer tests that can have variations. Test, test, and test [#test-test-and-test] After setting up your analyzer tests, make sure to test them with sample data to see if they work as expected. You can safely troubleshoot the setup before moving on to work with real data. # Developer Portal **What is it?** The Developer Portal is the primary interface for building and managing Connectors and Export Templates. While these tools can also be managed programmatically, the Developer Portal provides a user-friendly UI for development and configuration. # Publish export template changes While the Dev Portal lets you save progress on each step of creating or modifying an export template, these changes remain in a "Draft" status and aren't officially published in the Productsup platform. The *Publish* feature lets you move your draft configurations into live, making export templates and any changed configurations available in the Productsup platform. This way, you can safely configure settings, attributes, and analyzer tests without risking making unwanted or unfinished changes become available in production. When you are confident that your export template is ready for use, select **Publish** at the top of the interface. When an export template has changes that you have not published yet, the interface displays a warning at the top of the export template page. Publishing covers every unpublished change on the export template, including changes made through the Export Template Management API. Changes made through the API [#changes-made-through-the-api] If you configure export templates through the Export Template Management API instead of the Dev Portal, publishing works the same way, except that you request it yourself. Each API write stores a draft, and the change becomes available in the Productsup platform only after you commit it. Analyzer tests are the exception — they take effect immediately and need no commit. To publish all unpublished changes on an export template, send a `POST` request to `/V1/export-templates/{templateId}/commit`. See [Publishing changes](/docs/export-template-management/developer-guides/publishing-changes) for more information. # About export templates An **export** represents the final stage of your data journey in Productsup where your optimized data leaves the platform to reach its target channel. The Exports feature in Productsup allows adding and setting up new exports, viewing the list of added exports, tracking export history, and checking the number of exported items. See [Export data feeds](https://help.productsup.com/en/29544-29544-export-data-feeds.html) to learn more about Exports in Productsup. To send data to the desired channel, Productsup users need to add and set up exports. Users don't need to build exports from scratch, even though this option also exists. They can choose from more than 2,500 export templates within the platform to speed up the setup process. Here is how the Search export template page in the Productsup platform page looks: Search export template page An export template is a ready-to-use blueprint for creating exports in Productsup for channels, such as Google Merchant Center, Amazon, or Facebook. Each export template is pre-loaded with the specific requirements for that channel, including: * **Attributes:** The specific data characteristics the channel requires, such as **price**, **id**, and **availability**. * **Analyzer tests:** Automated checks to ensure your data meets the channel's standards. * **Destinations:** The specific locations or mechanisms, such as FTP servers or API endpoints, where the platform sends data. In the Developer Portal, you can create and set up a new export template that appears in the platform and becomes available to platform users. An export template becomes available to platform users only after you publish it. Everything you configure before that — including the export template itself — stays a draft that only you can see. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). # Set up an export template import { Callout } from 'fumadocs-ui/components/callout'; After you create an export template, you must configure it by adding [attributes](/docs/export-template-management/attributes/overview) and [analyzer tests](/docs/export-template-management/analyzer-tests/overview). Additionally, you should configure the advanced settings of the export template: . Go to [Export templates](https://dev-portal.productsup.com/channel-templates) in the Developer Portal. . Search for an export template and select it in the list. . Select the **Advanced settings** tab. See the next sections to configure these settings. Set up visibility [#set-up-visibility] Use the *Visibility* section to define who can see and use this export template within the Productsup platform. The Visibility section . Go to the **Visibility** section. . Use **Global** to decide if the export template should be global or not: * Toggle it to *Yes* to make the export template available to all Productsup users. * Toggle it to *No* to restrict access or make it available only to specific organizations, projects, or sites. Enter the specific IDs in **Organization ID**, **Project ID**, and **Site ID** to grant access to specific entities. Define technical settings and delta updates [#define-technical-settings-and-delta-updates] Use the Technical settings section to define the file format parameters and activate delta updates to optimize data transmission. Select technical settings Delta updates allow you to store or transmit only data differences instead of the full dataset. This reduces loading times by generating updates specifically for new, changed, unchanged, and deleted items. . Go to the **Technical settings** section. . In **Default file name**, change the default *pdsfeed.csv* name, if needed, to a desired file name and extension. . Toggle **XML Export?** to *Yes* to allow data export in the XML format. If you select Yes, additional fields appear to let you convert XML to XSLT: * Enter your XML code in **XSL Template** if you need to transform it using XSLT. * Toggle **Allow XSL Override** to *Yes* to let the platform substitute XML with XSLT during export. * Toggle **Allow empty XML tags** to *Yes* to include empty tags in the XML output. . Select all allowed delimiters for the data in **Valid delimiters**. . Toggle **Delta export?** to *Yes* to enable delta updates. If you select *Yes*, additional fields appear to let you define the delta file names instead of the default ones: * In **New file name**, enter a file name for new items. * In **Changed file name**, enter a file name for changed items. * In **Deleted file name**, enter a file name for deleted items. * In **Unchanged file name**, enter a file name for unchanged items. * In **Skipped file name**, enter a file name for skipped items. . Select **Save** to apply changes at the bottom of the page. Saving is not publishing. **Save** stores your changes as a draft, and platform users don't see them until you publish the export template. When you have finished configuring the export template, select **Publish** at the top of the interface. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). # Create an export template import { Callout } from 'fumadocs-ui/components/callout'; To create and configure a new export template, take these steps: . Go to [Export templates](https://dev-portal.productsup.com/channel-templates) in the Developer Portal. Export template menu . Select **Add export template**. . Enter a name for your export template and then select **Add export template**. . See the following sections to complete the setup. After creating an export template, you can see it in the *Export templates* page with the *Unpublished* and *Non-global* statuses. This means that the export template isn't available in the Productsup platform yet. To make it visible to users, you must complete the setup and select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). Unpublished exptort template Once created, it is impossible to delete an export template as its deletion may affect all Productsup sites. Find an existing export template [#find-an-existing-export-template] The Export template page contains all created export templates. To find the needed one: . Go to [Export templates](https://dev-portal.productsup.com/channel-templates) in the Developer Portal. Export template menu . Start typing the name of the needed export template in Search for an export template and find it in the list of search results. . Use Filter to narrow down your search to one of the following categories: * **All export templates**: both global and non-global. * **Global export templates**: available to all Productsup users. * **Non-global export templates**: not available in the platform. You can make the export template global after you complete its configuration if you want to let all Productsup users have access to it. Make sure to double-check the setup before making an export template global. Select a type of export template Change export template name and add a logo [#change-export-template-name-and-add-a-logo] You can customize the export template by uploading a specific logo to help users immediately identify the target channel for which it is designed. To change an export template name or logo: . Go to [Export templates](https://dev-portal.productsup.com/channel-templates) in the Developer Portal. . Search for an export template and select it in the list. . In the *Export template* tab, edit the name in **Export template** name. . Select **Save**. . Select **Upload logo** to change the logo. The logo must be in one of the accepted formats, such as JPG, PNG, or GIF. The file size must not exceed 5 MB, and the recommended dimensions are 100x100 px. Add logo Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). To learn how to add specific attributes or analyzer tests to your export template, see [Attributes](/docs/export-template-management/attributes/overview) and [Analyzer tests](/docs/export-template-management/analyzer-tests/overview). Add metadata [#add-metadata] You can enhance your export template by adding descriptive metadata that helps users find and understand its purpose and nature. You can add a description, define the export type, and distinguish the export template by category and country. To add a description: . Go to [Export templates](https://dev-portal.productsup.com/channel-templates) in the Developer Portal. . Search for an export template and select it in the list. . Select **External metadata** from the side menu. Select External metadata . Enter a description in **Description**. . Select which type of export this export template performs: *File* or *API*. . Select the channel category for the export template in the **Categories** dropdown. . Select the designated countries for the export template in the **Countries** dropdown. . Select **Save**. Your changes don't become available in the platform until you select **Publish**. See [Publish export template changes](/docs/export-template-management/export-templates/publish-export-template-changes). # FAQ - Frequently Asked Questions Introduction [#introduction] Here is a list of questions that our platform users ask frequently. See if you can find an answer to your question here. If not, feel free to contact [rpxsupport@productsup.com](mailto:rpxsupport@productsup.com) and let us know if posting answers to your questions in this FAQ would be helpful. Q1: Could you help us import the list of products? [#q1-could-you-help-us-import-the-list-of-products] **A1**: Certainly! The Productsup Retail platform streamlines your data by mapping your product attributes to specific retailer requirements using **Import Mappings**. * **The Process:** You provide an Excel file containing your product attributes and values. * **Optimization:** Since requirements vary by retailer, include as much data as possible to satisfy mandatory fields and ensure a smooth export. * **Support:** For assistance with your import file or mapping, contact **[rpxsupport@productsup.com](mailto:rpxsupport@productsup.com)**. NOTE: To ensure data is mapped correctly, your Excel column headers should match the Retail platform's field names exactly. If you use custom attribute names, you must manually link them to the correct platform attributes within your **Import Mappings**. It is impossible to provide an extensive list of all product attributes you may need to send your product data to relevant retailers successfully, but here this list is a good start: | Attribute | Description | | :------------------------- | :------------------------------------------------------------------------------------- | | **EAN** | The European Article Number (GTIN) used to identify products globally. | | **ID** | The unique internal identifier for the product. | | **Category** | The classification or group the product belongs to. | | **Brand** | The registered brand name of the product. | | **Product name** | The official name of the product. | | **Volume** | The product's capacity, typically measured in liters or milliliters. | | **Brand + Name + Volume** | A combined attribute providing a quick overview of core product details. | | **Subtitle** | A concise summary (approx. 10 words) of main characteristics. | | **Short Description** | A brief product overview (under 200 words). | | **Long Description** | An in-depth description (under 500 words) including slogans or extra details. | | **Full Description** | A consolidated field containing both the short and long descriptions. | | **Rest of Description** | A field for additional information with no character limit. | | **USP** | Unique Selling Points that highlight competitive advantages; multiple entries allowed. | | **Cross-sell products** | Suggested items that retailers can bundle or sell with the current product. | | **Disclaimer** | Specific product warnings or legal disclaimers. | | **SEO keywords** | Terms used to optimize product searchability on digital platforms. | | **Instructions** | Guidelines for the proper or optimal use of the product. | | **Height / Width / Depth** | Product dimensions in centimeters, rounded to one decimal point (e.g., 2.5 cm). | | **Weight** | Product mass in grams or kilograms (e.g., 3.75 kg). | | **Link** | A direct URL to the product page on your official website. | | **ImageLink** | A direct URL to the product’s primary image asset. | Q2: Could I export information from the Retail platform to clients? [#q2-could-i-export-information-from-the-retail-platform-to-clients] **A2**: Certainly! To export, provide an Excel file mapping your EAN codes to specific retailers. For a detailed guide, see [How To Export Products](https://retail-docs.productsup.com/en/articles/5996711-how-to-export-products). * **Completeness:** The platform will notify you if data is missing. A high **completeness score** ensures faster processing and reliable delivery to retailers. * **Support:** If you need assistance with scheduling or preparing your exports, contact **[rpxsupport@productsup.com](mailto:rpxsupport@productsup.com)**. NOTE: Based on the master data you provide, the platform creates product variants for different retailers. Different retailers will require the same information in different formats or fields, and product variants take care of this. Q3: If I make a change in my master data, how can I make sure that this change is also applied to all available variants? [#q3-if-i-make-a-change-in-my-master-data-how-can-i-make-sure-that-this-change-is-also-applied-to-all-available-variants] **A3**: When you save changes to a **Master Data** product, a pop-up allows you to apply those updates to all existing variants simultaneously. NOTE: If you edit a **Product Variant** directly, changes apply only to that specific variant and cannot be synced back to the Master Data or other variants. Q4: How can I see which of my registered products don’t have added assets (images) yet? [#q4-how-can-i-see-which-of-my-registered-products-dont-have-added-assets-images-yet] **A4**: To identify products without assets, go to **Products**, select your items, and choose **Export products** > **Generic export**. In the downloaded file, check the `meta_assets` column; empty fields indicate a missing file. To upload new assets, navigate to the **Media** section. Q5: I would like to check if I have the right variants for my registered products/EAN codes. And I'd also like to see if I should add or remove any variants. How can I best do this? [#q5-i-would-like-to-check-if-i-have-the-right-variants-for-my-registered-productsean-codes-and-id-also-like-to-see-if-i-should-add-or-remove-any-variants-how-can-i-best-do-this] **A5**: The most efficient way to review your data is by generating an Excel data sheet: * **Generic Export:** Go to **Products**, filter by **Variant Name**, and select **Export products**. Choose **Generic export** to download an `.xlsx` file. Products listed without variants only contain master data. * **Creating Variants:** If a product is missing a required variant, navigate to the specific product page and select **Add variant**. * **GTIN Filter:** Alternatively, use the **GTIN filter** next to the search bar. Enter an EAN code and use the checklist to see existing variants. If a selected variant returns no result, it has not yet been created. # Get in touch with our support team If you require assistance with the Retail platform, you can reach out to our support team and send us an email at [rpxsupport@productsup.com](mailto:rpxsupport@productsup.com) Learn and be curious [#learn-and-be-curious] Besides the option to contact support, the *Learn and be curious* window lets you access additional resources about the Retail platform: * **Help Center**. This is our [help.productsup.com](https://help.productsup.com/en) where you can look up help documents to try solving issues on your own without contacting our support team. * **Platform Academy**. This is our [e-learning portal](https://educationsso.productsup.com/#/dashboard) where you can find various courses and learning plans to help you learn more about the Retail and Productsup platforms. # Product overview Introduction [#introduction] To let you view all the product data available in your workspace, go to **Products** from the main menu. In Products overview, you can view, add, and edit all products. To find specific products, use the search bar. View attribute columns in Products3 [#view-attribute-columns-in-products3] The **Products** feature provides an overview of all your products and product variants and shows the following attribute columns by default: * You can see the product image thumbnail on the left-hand side of each product row. Select it to see the full image. You can add images and other product assets in **Media**. | Attribute / Property | Purpose | | :---------------------------- | :--------------------------------------------------------------------------------------------------------------------- | | **GTIN** | International identifier for trade items developed by GS1. | | **Product Name** | The specific name of the product or its variant. | | **Brand** | Stores the product's brand. | | **Variant Name** | Indicates the variant type (*Master Data* for general entries; retailer names like *Amazon SP* for specific mappings). | | **Category** | Defines the product type and category (e.g., dairy, cleaning supplies). | | **Completeness Score** | Percentage of filled vs. empty attributes within the product's data model. | | **Data model** | The specific set of attributes assigned to the product. | | **Shared** | Indicates if data is shared with other data models. | | **Assets included in export** | Lists assets associated with the product for export. | | **Channel** | The specific retailer or channel where the product is exported. | | **Status** | Current lifecycle stage (e.g., *Concept*, *Published*, *Live*). | | **Updated At** | Date of the most recent data update. | | **Created at** | Date the product entry was created. | | **Hierarchy Position** | Position in a packaging hierarchy (*Base*, *Middle*, *Top*); empty if not linked. | To sort the order of the products alphabetically using the arrow icons next to each column name. You can also filter some of the attribute columns using the funnel icon. If you select the funnel icon, you can choose which values a product should have in this attribute for the product overview page to show or hide it. When you choose the needed filter, select **Apply**. To remove the filter, select **Clear**.\ When you select products, the **Export products** button becomes active and lets you export selected products to a chosen retailer.\ Hide or show the columns and change their order [#hide-or-show-the-columns-and-change-their-order] To change the view of columns in the Product overview page . Select the **Products table configurations** button next to the search bar.\ . Drag and drop the columns in the list to the needed order. . Select the checkbox next to the column name to make the column visible in the products overview, or deselect the checkbox to hide the column.\ Delete and restore deleted products [#delete-and-restore-deleted-products] The **Actions** column lets you remove the product by selecting the trash can icon. If you scroll away, the **Actions** column remains visible.\ If you accidentally deleted products, now you can quickly recover them yourself within the next 30 days.\ To restore deleted products: . Select the **Deleted Products** icon in the upper ribbon.\ . In the **Deleted Products** page, select needed deleted products. . Select the **Restore** icon next to the product you want to restore.\ NOTE: You have only 30 days after you delete a product to restore it. The column **Permanently deleted in** shows the number of days left for each product before the final deletion without the possibility to restore it. # The functionality 'Templates' *The Templates feature is only available for admin users. To see this feature in your left-side navigation bar, you need to switch to the admin mode:* . *Open the account panel in the bottom-left corner of your view.* . *Select **On** in the **Admin mode** toggle.* When you first send your product data to the Retail platform, we create templates to map all your product attributes to the attributes required by the retailers you want to send your products to. A template lists all your product attributes and ties each attribute to the name of the corresponding attribute from the list expected by a specific retailer.\ If you want to send your data to another retailer, you can create and set up a template using the Templates feature.\ Prerequisites [#prerequisites] To use the Templates feature, you need: * An *.xlsx* or .*xls* file with all your relevant product data. The Excel file should have a row-based structure, which means each row within the file should represent one product or product variant. Create a template [#create-a-template] To create a new template, take these steps: . Go to **Templates** in the admin mode and select **CREATE TEMPLATE**.\ ​ . Give your template a name in **Name**. [](https://downloads.intercomcdn.com/i/o/914544889/585ec8dfabdce66aeb7a7faa/create+a+template.png?expires=1764876600\&signature=9afa1b4ac32d72faf25db1da1e110645a002c40345d99703cbb7d52123092379\&req=fSEjE816lYlWFb4f3HP0gOSaIXp6TKMleQkAxhF7LqH5NP%2BgnA9liFGcUf8p%0A7uo%3D%0A) . Enter the number of the row containing your attribute names in **The attributes titles are in row**. The expected input is a digit . Enter the number of the first row containing your attribute values in **The attributes data starts from row**. The expected input is a digit. . If you want to import data from one or more specific sheets, enter the names of those sheets in **Sheets**. . Select **Upload file** and choose the needed Excel file from your device. . Once the platform parses your file, it displays the attribute names from your file in the *Key* column. To map your attributes to the attribute names expected by a specific retailer, you can enter the corresponding attribute names in the *Label* column. . If your retailer's data requirements specify which attributes your product data must provide, make sure to mark the relevant attributes as required using the **Required** toggle. . Optionally, you can enter additional information about each attribute in **Description** and specify a desired maximum length for the values of each attribute in **Maximum length**. . Select **Create template** at the bottom of the screen to save your new template. *TIP:* If you need to remove an attribute from the template, select the padlock icon next to the needed attribute. If you want to add another attribute to the template, go to the bottom of the attribute list, provide an attribute name in **Key**, and the mapped attribute name in **Label**. Select the plus **(+)** icon to add the attribute to the template. Edit an existing template [#edit-an-existing-template] To edit an existing template, take these steps: . Go to **Templates** in the admin mode and select **CREATE TEMPLATE**. . Select the needed template to open template settings. [](https://downloads.intercomcdn.com/i/o/914601513/43529c1762df7eeeafe89a18/edit+a+template.png?expires=1764876600\&signature=b97eb48ad3d7ce938366c5c1f208d2ebea0288a6f6b00c5e7d09ed79f4db405a\&req=fSEjEMl%2FmIBcFb4f3HP0gAkyDkW18AxywAvZxRHVqx3sE%2Bii4as5Cix%2BOhNe%0AxFI%3D%0A) . Your next steps depend on your desired editing options: * To change the name of the template, use **Name**. * To upload a completely new Excel file for this template, enter the needed row numbers in the fields **The attributes titles are in row** and **The attributes data starts from row**. Then, select **Upload file**. * To change the names of the uploaded or mapped attributes, use the *Key* and the *Label* columns. * To add new attributes, scroll to the bottom of the list and add a new attribute using **Key**, **Label**, **Description**, **Maximum length**, and **Required** and selecting the plus (**+**) icon. * To change which fields are mandatory and which ones are optional, use the **Required** toggle. * To enter additional information about attributes, use **Description**. * To specify a desired maximum length for attribute values, use **Maximum length**. * To remove attributes from the template, use the padlock icon. . When you are happy with the updated template settings, select **Update template** at the bottom of the screen to save your changes. Troubleshoot errors when uploading an Excel file [#troubleshoot-errors-when-uploading-an-excel-file] When trying to upload your Excel file, you can get this error message:\ \ To fix the issue: * Check if your Excel file contains no additional text at the beginning of the file, such as a table header. Remove this text from your file to let the platform parse it. * See if the attribute names in your Excel file match the ones you have in your import mapping. Switch off the admin mode and go to **Mappings** to check it. # User guide for product information Introduction [#introduction] We recommend to ensure your product data is up-to-date and complete to avoid implementation delays or claims. Product attributes [#product-attributes] Provide comprehensive attributes like ID, dimensions, and weight for each product. Use **Mappings and Templates** to meet specific retailer needs and track progress through the **Your Overall Completeness** dashboard panel. NOTE: Always include clear descriptions and high-quality images, as missing or irrelevant visuals severely impact conversion rates. Attributes containing text [#attributes-containing-text] Ensure all text-based attributes are error-free and spell-checked. Use a personalized tone that aligns with each brand's voice—avoid dry or uninspired language. Aim to engage your audience by clearly communicating your product's unique value to maximize sales. Key takeaways [#key-takeaways] * Maintain accurate, complete product data that aligns with your brand and customer expectations. * Ensure product images are clear, current, and engaging to uphold company and retailer standards. * Use compelling writing and high-quality data to make your products stand out. * Submit detailed data initially to avoid implementation delays caused by requests for missing info. * The Retail platform team can assist in refining and polishing your product copy. # Map import and export - How to Introduction [#introduction] The Import Mapping feature lets you manage your import mappings for basic and advanced attributes. * **Basic attributes** are standard attributes for everyday use. * **Advanced attributes** are additional attributes capable of containing other attributes within their structure for complex use cases. Create an Import mapping [#create-an-import-mapping] When you create a new import mapping or select an existing one, the *Import Mapping* page opens, displaying the following tabs: * **Basic tab** displays all basic attributes from your import file and lets you add not-mapped attributes. * **Advanced tab** displays and lets you add the Tab and Group advanced attributes. * **Settings tab** contains the configuration options that help define how the platform recognizes certain patterns in your data. Map import for basic attributes [#map-import-for-basic-attributes] To map import for the basic attributes: . Go to the **Basic** tab from your selected import mapping. . Enter the names of the attributes in the **Import source** column in the fields corresponding to the attributes in the **Target data model attribute** column. For example, enter *GTIN* in the field corresponding to **GTIN** in the **Target data model attribute**. . Select **Save**.\ Map import for advanced attributes [#map-import-for-advanced-attributes] The Advanced tab displays the Tab and Group attributes. * **Tab attributes** create separate tabs for certain values, helping you organize different sets of information under distinct sections. This is useful for displaying different categories or aspects of a product in a clear and accessible way. * **Group attributes** bundle related attributes together, making it easy to organize similar product features or information into a single section. The advanced attributes help organize complex product data, making it easier to manage and navigate. *NOTE: Your Admin should create Tab and Group fields before you map them.* The advanced fields have a hierarchical structure for organizing data, such as: * **Tab Attribute** * **Input Source**: “input” * **Child Attribute 1** * **Input Source**: “child input” * **Group Attribute** * **Child Attribute** * **Input Source**: “child group input” * **Child Attribute 2** * **Input Source**: “child 2 input” To map import for the advanced attributes: . Go to the **Settings** tab from your selected import mapping.\ . In the **Regex** drop-down, select from the existing regex options or select *Custom* to create your regular expression: * *DataDump/Pup Standard \[*]\_ is for the import file with headers containing indexes in square brackets `[_]`*.* * *GS1 pull api /*/\_ is for the import file with headers containing indexes in between two slashes \_`/*/`\*. * *Custom for the import file with headers containing indexes in other than* `[*]` *or* `/*/` *format, for example, between two underscores* `_*_`*.* . In **Select delimiter**, enter any delimiter. The delimiter replaces the numbered index in the input source. . Select **Save**. . In the **Path validator** section, test if the platform correctly extracts the paths based on the provided regular expression and delimiter entered in the **Path configuration**: * In **Test source**, enter a header from your import file. * Check the result in the following fields: * **Source result** shows the expected source input, which fills in the paths or information within your mapped items after applying the regex and delimiter. * **Path result** shows the index of the tab if the path is correct. . Copy the source result. . Go to the **Advanced** tab. . Enter the source result in the corresponding tab or group attribute. For example, the imported Excel file consists of the following data: | GTIN | New tab | Child of tab\[0] | Child of tab\[1] | Child of group\[0] | Child of group\[1] | | :------- | :----------- | :--------------- | :--------------- | :----------------- | :----------------- | | 12345678 | Tab 1, Tab 2 | Tab 1 | Tab 2 | Group 1 | Group 2 | If you have the following path configurations and then enter **Child of tab \[0]** from the file in the **Test source**, you can see the following **Source** and **Path results**: You need to enter the result in the Advanced tab: . Copy the source result **Child of tab**. . Go to the **Advanced** tab and enter the result in the Import source for Tab and Group of the corresponding attribute.\ . Go to **Import** and create an import for your file. Set up export advanced attributes [#set-up-export-advanced-attributes] To export advanced attributes, you need to create export mapping: . Go to **Mappings** from the main menu. . Select **Export**.\ . Search for the necessary data model or channel by filtering the columns **Datamodel** and **Module**. Check if the mapping type is **Unsupported**. Or create a new mapping by selecting **Create mapping**. . Select the attribute in the drop-down in the **Attribute** column. . Select a source from the drop-down in the **Source** column. Enter the target in the **Target** field or copy the target from **Select a field definition** by selecting the arrows icon.\ . To match the format of the imported Excel file, add **\[\{\{INDEX}}]** to sources. This will ensure that the export headers are in the same format as your import file headers, such as **\[\*]**. The platform will replace **\*** with the corresponding numbered index and the exported structure will be the same as in the import file.\ . Select the **plus (+)** icon to add the attribute to the unsupported item. . Select **Save**. . Go to **Products** from the main menu. . Select the needed products. . Select **Export products** at the top right corner of the page.\ . In the **Export products** pop-up window: - Select **Mapping export** and select **Next**. * Choose **Generic (.xlsx)** in **Channel** and select **Next**. - Select sources to export and select **Next**. - Select the contacts you want to share the file with if needed, and select **Next**. - Check the data in the overview and select **Start**. . Go to **Exports** from the main menu. . In the **Actions** column, select **Download export** for **Generic (.xlsx)**.\ . Open the downloaded file and ensure that the exported file contains the needed structure. # Export products - How to Introduction [#introduction] Start an export and choose your export type . Go to **Products** and select the products you want to export. Select them by checking the boxes next to the product names. . In the taskbar, select the option **Export products**. . In the pop-up window, choose the export type you want to start and select **Next**. A generic export doesn't use mapping, while a mapping export uses an export mapping. Set up Generic export [#set-up-generic-export] Generic export modeule creates an output file with all product data available for the selected products.\ For a generic export, the next field asks you what language you want your product data to have in your export. You can also select **Use overwritten names** if applicable. Next, you see an overview of your export featuring all the chosen products. You can start the export process by selecting **Export**. Go to **Exports** to see the export progress or download the export file. Set up a Mapping export [#set-up-a-mapping-export] A mapping export creates an output file only with the attributes relevant to a selected retailer. If you select the mapping export type, you see an overview of five steps you need to take to perform your export: * **Step 1: Select channel**\ Choose a channel and a language for your product export and select **Next**. In **Channel**, choose a relevant retailer or internal channel to send your products to.\ In **Select language**, choose a different option if the language chosen in your settings isn't relevant to your current export. Possible options are Dutch, French, Swedish, Danish, Finnish, Norwegian, German, Portuguese, and Spanish.\ ​ * **Step 2: Settings**\ Choose what content you want to export, and specify if you want to schedule an export. Then, select **Next**.\ ​\ In **Select sources to export**, check the boxes next to the types of product information you want to export: 1. **Product attributes** exports text data associated with your products. 2. **Product assets** exports images and other files associated with your products. In **Only export products updated**, select which products you want to export: 1. *since always (export all products)* sends all your selected products to the chosen channel. 2. *since last export* only exports products added or updated since the last export. 3. *between dates* exports all products added or updated between two selected dates. If you choose this option, open the calendar in **Select a date range** to choose the needed timeframe for product updates. In **Schedule the export**, check the box if you want to schedule your export to repeat or delay it as needed. If you check this box, the platform takes you to the tab *Step 3 – Schedule*, where you can set up a desired export schedule as the next step. If you leave this box unchecked, the platform takes you straight to *Step 4 – Contact* when you select **Next**.\ ​\ TIP: If you make a mistake or need to change something in a previous step, you can select **Previous** to go back to the completed steps and make changes. * **Step 3: Schedule**\ Set up a desired scheduled export to delay or repeat it as needed. Then, select **Next**.\ You can open this tab only if you check the box **Schedule the export** in the tab *Step 2 – Settings*.\ ​\ In **Type a name for the scheduled export**, enter a name for the scheduled export to make it easier to find it in the platform later.\ ​\ In **Ignore product status**, check the box if you need to export products that have any status (the Retail platform originally exports only products with the status *Published*). This can be useful if you, for example, run a scheduled import from an FTP destination in the Productsup platform, and the updated products change their statuses from *Published* to *Concept*, although they are fully ready for export. In **How often do you want to schedule it?**, choose a *Daily*, *Weekly*, and *Monthly* scheduling interval. You can only select one of these options. After selecting an interval, enter the preferred times or days when you want to run the export. For example, you can select *Daily*, enter `2` in **Every ... day(s)**, and choose *14:00* next to **at**.\ ​ * **Step 4: Contact**\ Enter an email and a message the platform should send to the retailer or other contacts along with the product data. Then, select **Next**.\ ​\ In **Contact**, enter the email addresses of the organizations or people you wish to send your product data to. The platform automatically prefills the retailer email in this field, but you can remove it if necessary. You can add up to ten email addresses in this field. In **Custom message**, you can add a message the platform should send to the given email addresses along with the product data.\ ​ * **Step 5: Overview**\ Check all the provided information, and select **Start** to send the data to the provided emails or schedule a later export.\ ​\ NOTE: If you spot a mistake, you can make changes by selecting **Edit** next to the needed setting or choosing **Previous** to go back to the needed step. If you are ready with the export settings, you can select **Start** to begin the export process. # Marketing Generic tab in Products Introduction [#introduction] If you go to Products and select any of your products on the list, you can access a list of all aspects related to this product. In *Product navigation*, you can choose between different aspects of the product to view its related information: * Attributes * Assets * Story * Hierarchy \ The attributes overview page lets you add, check, or edit values of the current product in the following groups of attributes: * All attributes * Article numbers * Descriptions * General * Ingredients / allergen information * Marketing generic * Measures & weights * Name / contact * Other NOTE: The attribute groups shown on the attributes overview page depend on your data model. You may see a different list of attribute groups here if your data model differs. All attribute groups let you provide product information in multiple languages. Every attribute has as many language variants as there are languages added in the settings of your workspace. Marketing generic attribute group [#marketing-generic-attribute-group] You can use the *Marketing generic* attribute group to provide different marketing-related information related to the current product and let different data model pick up their corresponding relevant attribute values.\ TIP: You can restrict the ability to edit a field by selecting the padlock icon next to it. You can't lock empty fields. The Marketing generic tab lets you provide marketing-related data about your products in the following fields: * **Description** stores the description of the product. Retailers and consumers can use this field to learn about the product, for example, what category and brand it belongs to, what color it is, and what sizes are available. The field has no character limit, so your organization can decide how long product descriptions should be. * Product marketing bullet point 1 lets you add a short marketing text that summarizes the key properties of the product. The *Marketing generic* attribute group provides three more fields for this purpose in case you need to add multiple marketing texts to one product: * **Product marketing bullet point 2** * **Product marketing bullet point 3** * **Product marketing bullet point 4** * **SEO keywords** lets you provide relevant keywords used to search for the product in search engines and search bars. * **Short description** lets you write down a concise description of the product. This field doesn't have a character limit, but since retailers can use it to quickly represent products on smaller screens or in smaller fields, it is most useful to keep the values in this attribute short and crisp. * **Title** stores the name of the product. Retailers, partners, and consumers can use this name to search for this product. NOTE: The attributes shown in this tab depend on your data model. You may see a different list of attributes here if your data model differs. # Datamodels Introduction [#introduction] Upon account creation, submit all available product data. The platform automatically maps this information to meet the specific attribute requirements (e.g., varying titles or brand tags) for each of your retailers. * **Datamodels:** Access over 2,500 attributes to create tailored models for different retailers within your workspace. * **Product Details:** The attribute order seen in the **Products** section directly reflects the sequence configured in **Datamodels**. Create Data model [#create-data-model] To create new data models for your workspace, take these steps: . Go to **Datamodels** and select **Create Data Model**.\ . Give the new data model a name and select **Create**. . Select the **three dots (⋮)** icon next to your newly created data model and select **Edit data model**. In the data model view, you can see all available attributes. You can find the needed attributes by scrolling the list or by using the **Search** bar. . Select the **plus (+)** button next to a needed attribute to add it.\ If you added an unnecessary attribute, select the **minus (-)** icon from the list on the right to remove it. . Select **Save**. Edit Data model and configure attributes [#edit-data-model-and-configure-attributes] To update an existing data model, take these steps: . Go to **Datamodels**. . Select the **three dots (⋮)** icon next to the needed data model and choose **Edit data model**. . In the data model view, you can add new attributes to the data model from the list on the left or remove attributes you don't need from the data model in the list on the right. You can find the needed attributes by scrolling the lists or by using the **Search** bars. . Select the **plus (+)** icon next to a needed attribute to add it.\ Select the **minus (-)** icon to remove an attribute.\ ​ . If you need to edit an attribute you added to the data model, select the **cog wheel** (⚙) icon next to it. Make the needed changes in the **overwrite** section: * To change the name of the attribute, enter the updated name in **Name**. * To make the attribute a required or a non-required field, use the **Required ?** toggle. * To provide additional information about the attribute, enter it in **Help text**. * To set or change the maximum length of the attribute's values, enter the needed number of characters in **Max length**. The expected input is a digit. * To change choices, enter them in **Choices**. * Select **Update** when you finish changing the attribute's settings. TIP: If you want to restore the default settings, select Reset to default value in the bottom-left corner of the window. . When your data model has all the needed attributes and the attributes have the desired settings, select **Save** to finish creating your data model. Set the Default values [#set-the-default-values] You can set a default value for each language in each attribute of any data model. This feature lets you add the same values in bulk to all products that use the same data model. When you create a new product and set the data model that contains the default values, these values automatically appear in the product attributes for the exact locales. . Open the necessary data model or create a new one. . In the **Attributes added** section on the left, select the **cog wheel** (⚙) icon next to the needed attribute. . Go to the tab **Set default value**. . Select the values in the **Default fields**. Select how to apply the value in the **Select fields** drop-down menu: * **Apply to all fields** - the value only applies to all the products with this data model and attribute. * **Apply to existing default values** - the value replaces the already existing default values for the same locale of the attribute. If there is no default value yet, this option is inactive. * **Apply to empty fields** - the value only applies to the products of this data model where the fields have no values. For example, if you add more locals in the product attributes and leave the fields empty, then you can set the default value in the data model to apply the value to all locals for all products with the same data model and attribute. * **Apply to edited fields** - the value only applies to the products with this data model if you first set the default value but later manually edited it in the product. * If you don’t select any option, the value only applies to a specific locale for the newly created or imported products. . Select **Update**. Tip: To delete a default value, select the trash bin icon next to the needed field. # Workspaces Introduction [#introduction] Organizations can have one or several workspaces to manage the data independentely. For example, you may have different workspaces per country, per business unit or other reason. NOTE: Only Admin users can create workspaces. Switch between workspaces [#switch-between-workspaces] To go to the necessary workspace, select the **Workspaces** in the breadcrumbs at the top of any page. In the **Workspaces selection page** you can switch between workspaces.\ Every workspace has a logo and name and shows the number of products. Workspace settings [#workspace-settings] To manage your workspace settings: . Go to **Settings** from the main menu. . Select **Upload** to add or change the workspace logo. Or select **Remove** to delete an existing logo. . In **Workspace name**, you can see the name of the workspace. It is inactive as only Admins can change it. . In **General contact**, select the name of the person who is the Administrator for your organization and has the right to moderate the workspaces available to you. . In **Financial contact**, select the name of the person in charge of financial questions in your organization. . In **Channel**, you can only view the channels available to this workspace. The field is inactive, as only Admins can change them. . In **Language**, select the languages used in your organization for communication. . Select **Save** **changes**. # Assets Introduction [#introduction] The Assets page, previously known as Media, contains all the uploaded assets and lets you manage them. To view the assets for your product go to **Assets** from the main sidebar. The Assets page consists of the three tabs: * All assets * Asset collections * Asset types All assets tab [#all-assets-tab] In the All assets tab, you can view all uploaded assets and use the following features: . The search bar lets you search for the needed assets. . Sorting the drop-down menu lets you change the order of the assets by *Newest first*, *Oldest first*, *A-Z*, *Z-A*. . The grid and list buttons let you switch between the views. . The **Select all (0/x)** checkbox lets you select or unselect all assets. . **Automatch** lets you match the selected assets to products and assign asset types. . **Upload** lets you upload new assets to the platform. . **Actions** lets you add assets to products, download assets to your computer, or delete assets. Asset actions [#asset-actions] You can perform the following actions with your assets: . Select an asset by clicking anywhere on the tile. . Select the eye icon in the bottom right corner of an asset to see a larger preview. . Select the edit icon in the bottom right corner to edit the name or type of the asset. Automatch the assets [#automatch-the-assets] Automatch is a powerful tool that helps you match asset names to product GTINs. You can link as many assets as you need to each product. To match an asset: . Go to **Assets** from the main menu. . Go to the **All assets** tab. . Select the needed assets and select the **Automatch** button. . Make any necessary adjustments in the pop-up window. . Go to **Products** and select a needed product to check your matched assets. Collections tab [#collections-tab] Collections help organize the images in folders to allow for easier navigation through the asserts. Instead of keeping hundreds of assets in one folder, the Collections tab contains folders with sets of assets sorted by *Brands*, *Variant names*, *Datamodels*, and *Status*. So each asset can belong to a certain brand, data model, variant name, and status. The platform automatically creates collections when you attach assets to products. The collections display only the assets that match the products. Asset type tab [#asset-type-tab] You can add an asset type to distinguish between the assets for the same item and make automatching possible. You must rename your assets using the following convention: *GTIN\_\[asset\_type\_suffix].xxx* To assign an asset type for each suffix in the file name, such as 9876543218976\_hero.png and 9876543218976\_pack.png: . Go to **Assets** from the main menu. . Select the **Asset types** tab. . Select **Create Asset type**. . Enter an asset type name in **Name**. . Enter a suffix in **Suffix**. . Select **Save**. Next, when you select **Automatch** in the **All assets** tab and choose the assets with the suffixes that have an asset type assigned, the platform automatically adds the asset types to the assets with the same suffix in their file names on the step **Match to product**. # Export mapping Introduction [#introduction] Export mapping is the functionality that helps you send the product data from your data model to the correct fields in the retailer's template.\ A range of retailers provide templates with necessary attributes that let you map from import to export. The platform creates an Excel file with the corresponding headers during the export. To locate the export mapping feature, go to **Mappings** from the main menu and select the **Export** tab. The table displays the following: * **Datamodel** shows the data model used by the mapping. You can use the filter icon to search for the needed data model. * **Module** shows the export channel. You can use the filter icon to search for the needed channel. * **Mapping type** shows the mapping type: *supported* or *unsupported*. * **Last updated** displays the date and time you modified the mapping the previous time. * **Actions** lets you edit or duplicate the mapping. Create Export mapping [#create-export-mapping] To create a new export mapping: . Select **Create mapping**. . Select a datamodel in **Datamodel**. . Select a channel in **Channel**. . Select a mapping type: * **Supported**: A mapping that uses a template with the predefined attributes, supported by the destination channel. * **Unsupported**: A mapping that lets you enter any mapping target without a predefined template. For example, for all GS1 exports. . Select **Save**. Add attributes to supported Export mappings [#add-attributes-to-supported-export-mappings] You can add attributes to the supported mappings if the platform contains a retailer's template. The supported export mapping lets you map an attribute from your data model to the necessary attribute in the retailer's template.\ To add an attribute to the supported mapping: . Select the round button of the necessary attribute in the column **Export template attributes** to activate the data model attributes. . Search for the needed attribute in the column **Data model attributes** by typing the attribute's name in the **Search** field or selecting the attribute from the drop-down list. . Select a language in **Select a language** and a source in the **Select a source**. . Select the "plus" icon to add the attribute to the supported mapping. To remove the attributes from the mapping, select the trash bin button next to the export template attribute. Add attribute to unsupported Export mappings [#add-attribute-to-unsupported-export-mappings] Not every retailer has a template uploaded to the Retail platform, or the templates are too complex to use the supported mappings. In this case, you can add your mappings without a template, for example, for the marketplaces like Amazon. To add attributes to the unsupported export mappings: . Select the attribute in the drop-down menu **Data model attributes**. . Select a source from the **Source** drop-down menu. . Enter a target in the **Target** field or copy the target from **Data model attributes** by selecting the arrows icon.\ . Select the plus (**+**) icon to add the attribute to the unsupported mapping. . Select **Save**. # System Settings Introduction [#introduction] In the Retail platform, you can change your overall account preferences using the profile icon in the top-right corner of the page.\ To access your Retail account settings: . Select the profile icon in the top-right corner of the page. . Select **System Settings**. \ There are six tabs with different account settings: * Preferences * Notifications * Organisation * Connected workspaces Preferences tab [#preferences-tab] In Preferences, you can manage the following settings:\ | Option | Purpose | | :------------------------------- | :-------------------------------------------------------------------------------------------------------- | | **Expand export mappings** | Automatically expands all mapping fields when opening the **Export mappings** page. | | **Default 'Master Data' filter** | Automatically filters the **Variant Name** column to show **Master Data** in the Products overview. | | **Auto-fill retailer email** | Automatically populates the retailer's email address during export using data from **Contacts**. | | **Hide archived products** | Hides *Archived* products from the overview by default. They remain accessible via the **Status** filter. | | **Application scaling** | Adjusts the interface font size using the **+** and **-** buttons. | Notifications tab [#notifications-tab] In **Notifications**, you can activate email notifications related to your tasks. Select **Email Notification Preferences** to activate all types of the following notifications or select only the needed notifications types: * **Task Assigned Notifications**: This option lets you get email notifications that someone assigned a task to you. * **Task Comment Notifications**: This option lets you get email notifications of new comments and reactions posted to the tasks assigned to you. * **Task Status Change Notifications**: This option lets you get email notifications if the status of the task assigned to you changed. Organisation tab [#organisation-tab] In **Organisation**, you can manage the following settings:\ | Property | Purpose | | :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Name** | The official organization name (read-only; requires Admin access to change). | | **Description** | An optional field to add a summary or details about your organization. | | **Workspaces** | Displays all available workspace environments within the organization. | | **Workflow labels** | Standardized statuses that define the product enrichment process:
• **Concept:** Initial product draft.
• **Saved:** Data is committed to the database.
• **Published:** Data is visible to clients and shared workspaces.
• **Live:** The product is active and live.
• **Archived:** Product is removed from circulation but data is retained. | Connected workspaces tab [#connected-workspaces-tab] In **Connected workspaces**, you can see all the workspaces available to you and represented with their logo, name, General contact, and Financial contact. Developers [#developers] **Developers** is a page where can request access to the Retail Platform Public API, generate or reset API access token. # Exports Introduction [#introduction] The **Exports** functionality lets you get all the necessary information about the exports executed by your organization. Exports overview [#exports-overview] To view all executed exports: . Go to **Exports** from the main menu. You can see two tabs: * **Export** * **Scheduled export** Export tab [#export-tab] In the **Export** tab, you can see the list of all executed exports with the following information in the columns: | Property | Description | | :-------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Name** | Displays the logo and name of the specific export. | | **Products** | The total number of products included in the export. | | **By** | The user who initiated the export; can be used for sorting. | | **Date & Time** | The exact timestamp when the export was run. | | **Status** | The current state of the export (can be used for sorting):
• **Pending:** Initializing (approx. 1 minute).
• **Processing:** Currently running.
• **Failed:** Check **Export log** for errors.
• **Success:** All products exported successfully.
• **Partial success:** One or more products exported successfully. | | **Errors** | The count of errors encountered (currently exclusive to Amazon exports). | | **Actions** | Available operations:
• **Download export:** Save the Excel files locally.
• **Go to products:** Navigate to the Products page.
• **Restart whole export:** Rerun the export after failures or data updates.
• **Delete export:** Remove the export record. | View the export details and errors [#view-the-export-details-and-errors] You can select an export row to open the **Export details**: | Property | Description | | :------------------- | :------------------------------------------------------------------------ | | **Data** | The date the export was performed. | | **Status** | The current progress or result of the export. | | **Errors** | The number of errors encountered (currently exclusive to Amazon exports). | | **Products** | The total number of products included in the export. | | **Exported by** | The user who initiated the export; can be used for sorting. | | **Channel** | The specific export channel used to send the data. | | **Locale** | The language setting used for the product display. | | **Mail to** | The recipient contact address for the exported data. | | **Data is included** | Indicates whether the export file contains data. | When you select an export row, you can see the export details in two tabs: * **Export statuses** - information about global errors occurring within the export pipeline. This tab is available for all exports.\ * **Product errors** - for now, this tab is available **only for Amazon exports** and lets you view the information about each product such as **GTIN**, **Message** containing the **Submission ID** from Amazon, **Status**, and **Timestamp**. You can also see the raw error code in JSON format. In case of an error, you can provide this information to Amazon directly to get help from their support. Possible errors [#possible-errors] The platform distinguishes eight (8) groups of product errors from Amazon: * Unknown * Missing attribute * Value too long * Value too short * Connection problem * Invalid enumerated value * Invalid checksum * Invalid pattern Restart the export [#restart-the-export] To restart the export: . Select the three dots next to the desired export and select **Restart export**. . In **Channel**, choose the export. Use its search bar to find the channel. . In **Language**, select the language of the export. . In **Only export products updated**, select the period that the updates take place. . In **Contact**, fill out a mail address and a message to send the export to necessary contacts. . Select **Start**. Scheduled export [#scheduled-export] In the **Scheduled export** tab in **Exports**, you can see all exports scheduled for the future and exports to be repeated regularly.\ TIP: See [How To Export Products](https://retail-docs.productsup.com/en/articles/5996711-how-to-export-products) to learn how to schedule exports. Every scheduled export shows its status: * **Running** - the scheduled exports will take place at the chosen date and time * **Paused** - the exports are stopped until you resume it. If you select the three dots in the last column, you can perform the following actions: * **Restart** immediately runs the export. * **Pause** stops the export until you unpause it. * **Edit** lets you change the schedule details. * **Update products** lets you add or remove products sent to the retailer using this export. * **Delete** removes the scheduled export. If you select the arrow at the beginning of an export row, you can see the products included in the export.\ Edit a Scheduled export [#edit-a-scheduled-export] To edit a scheduled export, folow these steps: . Go to **Exports**. . Open the *Scheduled export* tab. . Select the three dots next to the needed export. . Select **Edit**. The **Edit Export** sidebar opens.\ . In **Name**, edit the scheduled export's name. . In **How often do you want to schedule it?**, select the desired timeframe: *Daily*, *Weekly*, or *Monthly*. Then, select the desired days and times when the scheduled export should run. . In **Channel**, choose the export channel. . In **Locale**, choose the language for your export. . Check or uncheck the box **Is paused** to pause or unpause the scheduled export. . Check or uncheck the box **Ignore product status** to export products with all statuses. . Once finished with your edits, select **Save**. Change the products added to a Scheduled export [#change-the-products-added-to-a-scheduled-export] To remove products from a scheduled export or add more products to it: . Go to **Exports**. . Open the *Scheduled export* tab. . Select the three dots next to the needed export and choose **Update products**. . In the pop-up window, check the boxes next to the products you want to include in the scheduled export and uncheck the boxes next to the products you want to remove. You can use the search bar or sort and filter the columns to find the needed products. When done, select **Update**.\ # Categories Introduction [#introduction] Categories help to sort products. In *Products*, you can see the **Category** column that shows to which categories products belong and lets you sort and filter by categories. To locate Categories, go to **Categories** from the main menu.\ You can see the categories created for your organization. Categories can have subcategories. You can switch between the **List view** and **Tree view**: * The **List view** shows all the categories in a list. You can open each category to see the attributes, or you can edit or delete a category. * The **Tree view** shows the categories by their parent categories. You can select a category to edit it. Create a category [#create-a-category] To create a new category: . Select the **Create Category** button in the top right corner of the page. A sidebar opens where you can either import a list of categories or create a new category by entering the information in the fields. . If you want to import the categories from your computer: * Select **Upload** and choose the necessary file. . If you want to create a new category: * In **Name**, enter the category name. * In **Parent**, select the main category this category should belong to. Leave this field empty to make the category the main one. . Select **Save**. View the category attributes [#view-the-category-attributes] You can expand a category to see all its attributes. The product belonging to a certain category inherits its attributes. Attributes are assigned to a category automatically, but in the future, the import function can be used to import categories with pre-assigned attributes via the upload of a CSV file. NOTE: The templates contain the attributes necessary to the certain retailers. # Channels Introduction [#introduction] Channels are accessed via the sidebar and define the specific formats and routes used to import or export your data to retailers. * **Functionality:** Channels determine file types (e.g., `.xlsx`, `.json`, `.xml`) and delivery methods (e.g., Email, FTP, SOAP, or API connections). * **Navigation:** View all registered channels as thumbnails; use the page selector at the bottom to browse the full list. * **Management:** The **Channels** page serves as the master view of how your exports are formed and executed. NOTE: Contact your Account Manager to add new channels or discuss channel-related configurations. Managing Channels [#managing-channels] Use the **Search** field to locate specific channels by brand or retailer name. * **Channel Tiles:** Each tile represents a retailer and specifies the channel type (**Import** or **Export**). * **Retailer Specifics:** Note that a single retailer may have multiple channels for different data requirements. * **Credentials:** A blue icon next to **Export** indicates that credentials are required. For Amazon, use the **Authorize Seller** or **Authorize Vendor** buttons to link your account. # Users Introduction [#introduction] The Users page provides a complete overview of all registered members within your organization. * User cards: Each entry displays the user’s avatar (or initials) and their assigned roles. * Navigation: Use the Search field at the top to find specific individuals and the page selector at the bottom to browse the full directory. Create or edit a user [#create-or-edit-a-user] To create a new user: . Select the **CREATE USER** button. The **Create user** form opens. . In **Name**, enter the user's name. . In **Email**, enter the user's email address. . In **Avatar**, select the **Upload** button and choose an image from your computer. . In **Role**, select one or more user's roles in the platform. . In **Mobilephone**, enter the user's mobile phone number. . In **Address**, enter the user's address. . In **Country**, enter the user's country of residence. . In **Position**, enter the position of the user within your organization. . In **Locale**, select the platform language for the user's view. For example, if you choose Dutch as a locale, all pages will be shown in Dutch. . In **Workspaces**, select all the workspaces that the user can access. . In **Workspace**, select the main workspace that your user has access to. . Select **Save** to save your edited or newly created user. To edit the information of a user, select a necessary user tile and edit the necessary information. Tip: Learn more about the Users functionality benefits and use cases on our Academy website by taking the video course [User authentication and management](https://educationsso.productsup.com/#/online-courses/c4096ac9-0023-43cd-880a-3b0b5558b2b1). # Variants Introduction [#introduction] Different retailers may have different requirements for product information. Variants are copies of the Product Master Data for specific retailers. Create a variant [#create-a-variant] To add a variant to a product: . Go to **Products** from the main sidebar. . Search for and select the necessary product. The product details page opens. . In **Variants**, select **Add variant**. The sidebar **Create Variant** opens. . In **Name**, enter the variant name. . In **GTIN**, you can see the GTIN of the selected product. You can edit it. . Select the needed channel in **Channel**. . Optionally, select a product in **Copy data from (optional)**. . Optionally, select a product in **Copy assets from (optional)**. . Select **Save**. NOTE: Fill out all fields when creating a variant to ensure that a variant is complete for sending to a certain retailer. # Imports Introduction [#introduction] The Imports page shows all the imports that have been performed by your organization. Overview [#overview] To locate the Imports page, navigate to the **Imports** from the main sidebar. All imports are presented in a table: | Column / Element | Description | | :----------------- | :--------------------------------------------------------------------------------- | | **Current status** | Summarizes the number of products found, inserted, and updated. | | **Saved products** | Indicates if products were saved. **No** typically identifies a test or "dry run." | | **Channel** | Displays the specific import channel used. | | **User** | Identifies the user who managed the import details. | | **Started at** | The exact date and time the import was initiated. | | **Three dots (⋮)** | Opens actions: **Download import**, **Restart import**, or **Delete import**. | Restart import [#restart-import] To restart import, follow these staps: . Select three dots in the import row. . Select **Restart import**. . Select the necessary checkboxes for the data that should be updated: * **Title** - the titles of products are updated. * **Brand** - the brands of products are updated. * **Category** - the categories of products are updated. * **Multiple variants** - the master data should be skipped and *only* variants should be changed. It is possible to change multiple variants by checking this field. When checked, the field ‘Variant column’ comes up, where a column for the variant to be added to your import data should be filled out. * **Dry run** - activates a test run. This means products will not be imported into the system. A test run can be used to check your products and data for faults. If any faults are detected, these can be solved so the import will run properly. * **Update variants** - the variants of products based on your master data are also updated when an import is run. * **Remove leading zeros** - removes zeros (0) at the beginning of EAN to fit a certain length. *Note: A zero at the beginning of an EAN code could be an actual part of the EAN. Check manually if your starting zeroes should be removed.* . Select **Finish**. Create an import [#create-an-import] To create a new import, follow these steps: . Select the **Create import** button in the top right corner. . The *New import* pop-up ones where you need to add or select the necessary information: * In Settings, fill out the following:\ 1. In **Channel**, choose the communication channel for this import. If the channel of this restarted import should be different from the original import, you should change it by selecting a different channel in this dropdown field. 2. In **Import Mapping**, select mapping for the import from the list. 3. In **Language**, you can choose the language that your import will be provided in from the search bar which comes up when the field is clicked. This will be automatically filled if a standard language has been set before. * In Upload do the following:\ 1. Select **Choose** and select the necessary file from your computer. 2. Select **Upload** to upload the file. 3. Select **Next**. * In Optional, select the necessary checkboxes:\ 1. **Title** - the titles of products are updated. 2. **Brand** - the brands of products are updated. 3. **Category** - the categories of products are updated. 4. **Multiple variants** - the master data should be skipped and *only* variants should be changed. It is possible to change multiple variants by checking this field. When checked, the field ‘Variant column’ comes up, where a column for the variant to be added to your import data should be filled out. 5. **Dry run** - activates a test run. This means products will not be imported into the system. A test run can be used to check your products and data for faults. If any faults are detected, these can be solved so the import will run properly. 6. **Update variants** - the variants of products based on your master data are also updated when an import is run. 7. **Remove leading zeros** - removes zeros (0) at the beginning of EAN to fit a certain length. *Note: A zero at the beginning of an EAN code could be an actual part of the EAN. Check manually if your starting zeroes should be removed.* 8. **Overwrite data** - is checked by default. * Select **Finish**. View import details [#view-import-details] Expand a selected import row to see the import details.\ | Property / Option | Purpose | | :------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------- | | **Dry run** | If checked, the import was a test. Products are processed to check for faults but are **not** imported into the system. | | **Update variants** | If checked, product variants were updated alongside master data. If unchecked, variant data remained unchanged. | | **Update brand** | If checked, product brands were updated. This is enabled by default. | | **Update Category** | If checked, product categories were updated. This is enabled by default. | | **Update title** | If checked, product titles were updated. This is enabled by default. | | **Trim leading 0 values in EAN** | If checked, the platform removes leading zeros from EANs. *Note: Verify manually if leading zeros are essential parts of your specific EAN codes.* | | **Channel** | Displays the communication channel selected for the import. | | **Language** | Shows the import language. This auto-fills if a default language has been previously configured. | | **File** | Select this button to download an Excel overview of the import, including all EAN codes. | | **Mapping** | Indicates whether any attribute mapping was applied during the import. | Next to the information fields is a timeline of the import, showing the dates and times of when the import started, mapping started, products inserted and updated, and when the import was finished. As a standard, the import list is sorted from most to least recent import. Scheduled imports [#scheduled-imports] The **Scheduled imports** tab shows you a list of all imports that will happen at a future date and/or time and all the imports that are scheduled to take place at regular intervals.\ You can schedule imports for the future, and for imports to be repeated regularly. . Go to **Imports**. . Select the **Scheduled imports** tab. . Select the **Create Scheduled Import**. . The *New scheduled import* pop-up ones where you need to add or select the necessary information: * In Settings fill out the following:\ 1. In **Name**, give a name to your scheduled import. 2. In **Channel**, choose the communication channel for this import. If the channel of this restarted import should be different from the original import, you should change it by selecting a different channel in this dropdown field. 3. In **Import Mapping**, select mapping for the import from the list. 4. In **Language**, you can choose the language that your import will be provided in from the search bar which comes up when the field is clicked. This will be automatically filled if a standard language has been set before. 5. Select **Next**. * In *Frequency*, select how often the import should repeat:\ 1. **Daily** 2. **Weekly** 3. **Monthly** 4. Every **X** days at **HH:MM**. 5. Select **Next**. * In *Optional*, select the necessary checkboxes: 1. Select at least one source to import: Product attributes or Product assets. 2. **Trim leading 0 values in EAN** - removes zeros (0) at the beginning of EAN to fit a certain length. *Note: A zero at the beginning of an EAN code could be an actual part of the EAN. Check manually if your starting zeroes should be removed.* 3. **Update Brand** - sends the updated brands of products. 4. **Multiple variants** - the master data will be skipped and *only* variants will be changed. It is possible to change multiple variants by checking this field. When checked, the field ‘Variant column’ comes up, where a column for the variant to be added to your import data should be filled out. 5. **Update Category** - sends the updated categories of products. 6. **Update variants** - sends the updated variants of products based on your master data. 7. **Update title** - sends the updated tiles of the products. 8. **Paused** - the imports are stopped until you choose to resume them again. 9. Select **Finish**. NOTE: Please think twice before deleting a Scheduled import. There will be no more updates in product details and no new product data received by retailers. Consider this risk, or consult with your admin or Retail platform Support team. # Brands Introduction [#introduction] Brands is the functionality that gives an overview of all brands added to the platform for your organization. To find a brand, type in the name of the brand in the **Search** field at the top of the page. In the Brands page, you can see all the registered brands available to your organization. Every brand is represented by a tile. Use the page selection field at the bottom of the page to scroll through different pages of registered brands.\ Every brand tile shows: * Brand image thumbnail. If an image is not selected as a thumbnail, you can see an image placeholder. * Brand name * Number of products registered under this brand * Progress bar showing the completion percentage of all the products registered under the brand. Create or edit a brand [#create-or-edit-a-brand] To create a new brand, select **Create brand** in the top right corner of the page.\ Enter the following fields of these pages are as follows: . In **Name**, enter the name of the brand. . In **Description**, enter the information about the brand and its products. . Select **Upload** to upload a logo from your computer. The **Remove** icon lets you delete the uploaded image. . Select **Save** to save your edited or newly created brand, and you will then find it on the *Brands* page. To edit the information of a brand, select the brand tile, edit the information, and save it. To delete an existing brand, select **Delete** at the bottom of the sidebar. # Product details page Introduction [#introduction] In this section, you find the overview of the product details page. To view the details on any product: . Go to **Products** from the main sidebar. . Search for and select the necessary product. The product details page opens. The product details page consists of the following elements: . Product general information . Product navigation . Overview of product sections . Product stage line Product general information [#product-general-information] At the top of the page, you can see the product's image, GTIN, name, and the percentage of the product information completed depending on the selected variant.\ INFO: If the product information completion isn't 100 percent, you still can export the products.\_ In the general information section, you can also find the buttons related to the product and the data and time of the last update of the product information: . **Tasks** - view the tasks related to the product. . **Activity** - view the log of all changes to the product. . **Actions** - you can edit or delete the product or link it with other products. Deleting the product removes both the product and all its variants. . Back (**\<**) and forward (**>**) arrows to move to the next product. To edit general product information, please follow these steps: . In the **Actions** drop-down menu, select **Edit**. The *Update product data* sidebar opens. . In **Product**, edit the product name. . In **GTIN**, edit the product's GTIN. This can be an EAN, an ISBN, or another option depending on the product. . Select the product's brand in **Brand**. . Select the product's category in **Category**. . Optionally, open the calendar and in **Introduction date** select the date and time when the product should be added to the Retail platform and become available for import and export. . Optionally, open the calendar and in **Delist date** select the date and time when the product should be removed from the Retail platform. . Select **Save**. Product navigation [#product-navigation] On the left side of the product details page, you can find the **Product navigation** menu consisting of: * Attributes * Assets * Story * Hierarchy When you select any of the options, the corresponding view opens under the general product information section. All attributes [#all-attributes] When you select the **Attributes** option in the Product navigation menu, the **All attributes** section opens and shows the variants available for the product and attributes for the selected variant.\ \ You can search for a needed attribute in the **Attribute groups** section.\ Every attribute may have several fields. TIP: You can lock the fields by selecting the **Lock** icon. If the field is locked, it can't be edited. Variants can be created for specific targets such as various retailers or as Master Data. NOTE: Each variant's 'Master Data' will contain a specific list of fields necessary for that variant. Different retailers will require different product information and will have different demands for this information and the fields. Therefore, it's not possible to give a complete list of all available fields. For example, Marketing generic fields can be: | Attribute | Description | | :------------------------- | :------------------------------------------------------------------------------- | | **EAN** | Standardized global identification code for scanning and retrieval. | | **Title** | The official product name used by retailers for searches. | | **Subtitle** | A secondary description displayed immediately below the title. | | **Brand Marketing** | A brief brand overview (Max: 600 characters). | | **Description** | Essential product information (Suggested: up to 500 characters). | | **Long description** | Comprehensive product details (No character limit). | | **Short description** | A concise product summary (Suggested: up to 200 characters). | | **Languages on Pack** | Specifies the languages printed on the physical product packaging. | | **Product Marketing** | A brief marketing pitch (Suggested: up to 75 characters). | | **Marketing Bullet Point** | Individual sentences highlighting product features; can be added multiple times. | | **SEO keywords** | Optimized search terms to improve visibility in search engines. | The Logistics attributes can be: | Attribute | Description | | :--------------------------- | :----------------------------------------------------------------------- | | **GPC Classification Code** | GS1 category code based on product properties and relationships. | | **Packaging type code** | GS1 code for packaging type (e.g., *CA* for carton, *BX* for box). | | **Height / Width / Depth** | Dimensions of the individual product in mm or cm. | | **Net content** | The volume of the product (g, kg, mg, l, cl, or ml). | | **Gross / Net weight** | The weight of the product (g, kg, mg, l, cl, or ml). | | **Case GTIN** | The 8, 12, 13, or 14-digit identifier for the product case. | | **Packaging type code case** | GS1 code for the case packaging type (e.g., *CA* or *BX*). | | **Case Dimensions** | The height, width, and depth of the product case in mm or cm. | | **Case Weights & Counts** | Gross weight of the case unit and total quantity of products per case. | | **GTIN Pallet** | The 8, 12, 13, or 14-digit identifier for the product pallet. | | **Pallet Dimensions** | The height, width, and depth of the pallet in mm or cm. | | **Pallet Gross Weight** | The total gross weight of the pallet (g, kg, mg, l, cl, or ml). | | **Platform type code** | Standardized pallet code: *11* (EUR, 800x1200mm) or *12* (EUR-block). | | **Pallet Quantities** | Total base units per pallet/layer and total case units per pallet/layer. | | **Layers Per Pallet** | Total number of horizontal layers on a single pallet. | | **Stock Status & Count** | Current inventory level and availability/refill status. | | **Warehouse ID** | Unique identifier for the storage facility. | | **Material** | The primary material composition of the product. | Create a new variant [#create-a-new-variant] . In **Variants**, select **Add variant**. The sidebar **Create Variant** opens. . In **Name**, enter the variant name. . In **GTIN**, you can see the GTIN of the selected product. You can edit it. . Select the needed channel in **Channel**. . Optionally, select a product in **Copy data from (optional)**. . Optionally, select a product in **Copy assets from (optional)**. . Select **Save**. Language management [#language-management] At the top right side of **All attributes**, select the **Languages** button to add the translations for every field in the attributes.\ **Filters** let you leave only the fields in the needed language in the All attributes section. You can also select **Only show the empty fields** to view only empty fields in the product detail page.\ Assets [#assets] When you select the **Assets** option in the *Product navigation* menu, the **Assets** section opens and shows all the assets, or image files, uploaded for the products.\ * The column **Asset name** lets you see the image preview and the asset name which is a link to the full size of the image. Select this link to open the asset in the separate browser tab. * The column **Asset type** lets you select the type of your asset such as *eCommerce Power Image*, *Enhanced Content Toolkit*, etc. * The column **Resolution** shows the resolution of the image in pixels. * The column **Filesize** shows the file size of the asset. * The column **Include in export** lets you select what assets in the list should be included in exports. * The column **Actions** gives you four actions for the selected asset: * **Open asset** lets you open the asset in a new tab. * **Download asset** lets you download the asset file to your computer. * **Rename asset** lets you change the asset name. * **Remove** lets you remove the asset file from the platform. Upload assets [#upload-assets] To upload a new asset, follow the steps: . Select the **Upload** button. . Select an image from the *Media picker* or select **Upload** to choose an image from your computer. . Select **Choose image**. TIP: To ensure high-quality content we advise uploading images that are at least 300dpi and 2000px long or wide. Most suppliers expect all images to be in the PNG file type. Hierarchy [#hierarchy] When you select the **Hierarchy** option in the Product navigation menu, the **Hierarchies** section opens where you can view the hierarchies of products and link the products with their quantities.\ \ To link the products: . Select **Link products** and only link items that are one level below the active product. . In **Product**, select a product. . In **Quantity**, select the number of products. . Select **Link**. . Select **Save**.\ ​\ Link products Upload hierarchy using CSV [#upload-hierarchy-using-csv] You can import packaging hierarchies, or linked products, via a CSV and export them to the needed channels using the Retail PX API. You must link each product to one lower-level product in a hierarchy by providing the GTIN and quantity of the respective lower-level product in its data within a CSV import. *For example, you can import and export linked products in a scenario similar to this:* * *In the PALLET unit, you can provide the **GTIN** and **Quantity** of the relevant DISPLAY unit.* * *In the DISPLAY unit, you can provide the **GTINs** and **Quantities** of three CASE units.* * *In the CASE units, you can provide the **GTIN** and **Quantity** of the respective BASE unit.* Product hierarchy CSV import When you import data with the GTINs and quantities of lower-level products, the Retail platform automatically connects all the linked products and displays the respective hierarchy tree on the product detail page. Product status line [#product-status-line] For every product, at the bottom of the product details page, you can see the workflow line and the status of the product.\ # Import mapping Introduction [#introduction] The Retail platform facilitates data exchange between your organization and retailers through three core areas: * **Imports & Exports:** Define your data sources in **Imports** and your delivery destinations in **Exports**. * **Mapping (Import Tab):** Align your source attributes with platform data models to ensure incoming data is optimized and correctly structured. * **Mapping (Export Tab):** Map workspace attributes to specific retailer requirements and channel formats to ensure compliance and successful delivery. This guide focuses on the **Import mapping** only. View all Import mappings [#view-all-import-mappings] To view all Import mappings, select the Import tab. It contains the following information: * **Name** shows the name of an import mapping. * **Datamodel** shows the data model an import mapping belongs to. * **Attributes** **mapped** shows the number of already matched attributes in a mapping out of all attributes in the relevant data model. * **Last updated** shows the date and time of your last change to the import mapping. * **Actions** lets you manage your import mapping by selecting **Edit**, **Rename**, **Duplicate**, or **Delete**. Create or edit an Import mapping [#create-or-edit-an-import-mapping] To create a new import mapping: . Select **Create mapping** in the top-right corner of the page. . Give your mapping a name in **Name**. . From the **Datamodel** drop-down menu, select a data model with which you want to map attributes from your imports. . Select **Save**. . On the import mapping setup page, map the attribute names from your imports (highlighted in red on the left) to the attribute names of the chosen data model (highlighted in blue on the right). You can map your attributes manually by entering attribute names from your imports in the **Import source** column. You can also use the automapping feature. How to use Automapping [#how-to-use-automapping] * Select **Automap**. * Choose the file with your import attributes in **Upload**. * In **Enter the row number containing the headers**, enter the number of the row in your file containing attribute names, or use the up and down arrows to choose the needed number. * In **Apply automapping to**, choose how the platform should map attributes from your file to the attributes of the data model: 1. **Empty attributes** only maps the attributes you haven't yet mapped in this import mapping. 2. **All attributes** maps all attributes from the file. * Select **Automap**. If you used the automapping feature and the platform couldn't match all the relevant attributes, enter the remaining attribute names in the **Import source** column. 7. When finished, select **Save**. ​NOTE: To use the automapping feature, you need a CSV, XLS, or XLSX file containing the attribute names from your imports. If the attribute name in your file exactly matches the name of an attribute from the data model, the platform matches the two automatically and pre-fills the needed attribute name in the **Import source** column. An exact match means the same spelling and case.\* Edit Import mapping [#edit-import-mapping] . Go to **Mapping** and find the necessary mapping in the *Import* tab. . Select the three dots in the **Actions** column of your mapping and select **Edit**. . Make the needed changes and select **Save**. Duplicate Import mappings [#duplicate-import-mappings] To copy an import mapping: . Select the three dots in the **Actions** column next to your mapping and select **Duplicate**. The pop-up window **Duplicate import mappings** opens up. . Give your new mapping a name in **Name**. . Select a workspace where you want to add the copied mapping in **Workspace**. . Select a relevant data model in **Datamodel**. . Select **Duplicate**. Delete Import mappings [#delete-import-mappings] To delete an import mapping: . Select the three dots in the **Actions** column of your mapping and select **Delete**. . The pop-up window asks you to confirm the action. Select **Yes**. # Bulk actions with products Introduction [#introduction] In the **Product** page, you can select one, several, or all products and apply some actions to them in bulk: . Go to **Products** from the main menu. . Select the needed products. . Select the **Actions** drop-down in the upper ribbon and select the desired action from the list. Actions menu [#actions-menu] You can apply one of the following actions at a time: | Action | Purpose | | :-------------------------- | :-------------------------------------------------------------------------- | | **Delete** | Removes the selected products from the system. | | **Change status** | Updates product status (e.g., *Concept, Saved, Published, Live, Archived*). | | **Create variant** | Generates a product variant for a specific retailer or channel. | | **Detach all assets** | Removes all associated media files from the selected products. | | **Add Task** | Assigns a new task to the selected products. | | **Bulk attach categories** | Assigns multiple categories to several products simultaneously. | | **Share with Workspace** | Emails a product variant to colleagues within your workspace. | | **Share with Retailer** | Grants chosen recipients access to the product variant. | | **Unshare with Retailer** | Revokes recipient access to product information. | | **Update field** | Edits values in product fields (excludes locked fields). | | **Attach brand** | Assigns a specific brand to the selected products. | | **Sync display name** | Synchronizes names based on a specific product or language. | | **Sync brand** | Synchronizes brand data based on a specific product or language. | | **Delete locale content** | Removes localized content from the selected products. | | **Attach to existing task** | Links selected products to a pre-existing task in the system. | | **Lock field(s)** | Freezes fields to ensure they remain constant and visible. | | **Duplicate Product(s)** | Creates an identical copy of the selected products. | # Calendar Introduction [#introduction] **Calendar** gives you an overview per date of the number of products that have been added, changed, or removed, and a list of tasks planned.\ To locate Calendar, go to **Dashboard** and select the **Calendar** tab. Calendar Navigation [#calendar-navigation] The Calendar provides a monthly view of activity, with the current date highlighted in yellow. Use the **Today** button to quickly return to the current date. * **Records:** Click any record to open the **Product** page and view specific changes. * **Tasks:** Click any task to jump to the **Tasks** page for full details. # The widget 'Imported media' The **Imported media** widget displays the total number of images uploaded to the system and tracks recent changes. Imported media widget Widget details [#widget-details] * **Total count:** Displays the total number of images currently in the system. * **Trend indicator:** Shows the number of files uploaded (up arrow) or removed (down arrow) during the selected timeframe. * **Percentage:** Represents the change in the total image count relative to the selected date range. # Onboarding process Welcome to the Retail platform! We’re excited to help you get your product data moving. Our onboarding typically takes six weeks, though high-quality data at the start can significantly accelerate this timeline. During this period, we will customize the system to your needs and ensure your data is perfectly formatted for every retailer. This guide outlines the steps to get started. If you have any questions, our support team is ready to help. Welcome, new customer! [#welcome-new-customer] Once you join, you will be assigned an **Account Manager** who serves as your primary data contact. Along with our **Customer Experience Manager**, they will guide you through the initial setup to ensure maximum platform efficiency. Required data [#required-data] To prepare for your onboarding meeting, please have the following data ready: * **Brand Assets:** A list of brands and their corresponding logos. * **Product Assets:** Media files named using the EAN and follow-up number format. * **Assortment Lists:** A mapping of which products are distributed to which retailers. List of brands and their logo assets [#list-of-brands-and-their-logo-assets] Please provide a complete list of your brands along with their corresponding logos. In our system, logos—along with photos, videos, and PDFs—are categorized as Assets. Collecting these brand-level assets ensures your product information is visually complete and correctly branded across all platforms. Asset Delivery Requirements [#asset-delivery-requirements] To facilitate a bulk upload of your images, please ensure all assets follow this naming structure: * **Format:** `[EAN]_[Follow-up Number]` * **Example:** `8712861660027_01` * **How it works:** The **EAN** identifies the product, while the **Follow-up number** (e.g., \_01, \_02) distinguishes multiple images for that same product. > id="2cb16551fa44d240" > body="Note: Proper naming is required to automatically link assets to their corresponding product > data. Bulk image processing cannot begin until assets are delivered in this format." > > > **Note:** Proper naming is required to automatically link assets to their corresponding product > data. Bulk image processing cannot begin until assets are delivered in this format. > After receiving your information [#after-receiving-your-information] Data Model Setup [#data-model-setup] Our team builds a custom data model based on your content, identifying the essential fields required for optimal retailer exports. Once the model is ready, we import your assets to establish your Master Data. Review & Optimization [#review--optimization] In our follow-up session, we will audit your data together to: * Identify missing content or required changes (e.g., merging fields or formatting lists). * Review retailer-specific field requirements. * Walk through key attributes like Title (Brand + Description + Content) and Subtitle (Description only) to ensure searchability and compliance. | Attribute example | Purpose | | :---------------- | :--------------------------------------------------------------------------------------------------- | | **Title** | Includes brand name, product description, and net content. Used for primary search by retailers. | | **Sub title** | A description-only version of the Title, used by retailers who prefer to omit brand and volume data. | What we'll do next [#what-well-do-next] We will guide you through every available field in detail to ensure you are fully equipped to manage and deliver your product information effectively. > id="3a7576bf6b61b4a1" > body="INFO: We will also explain the difference between ‘text fields’ and ‘rich text fields’. ‘Rich > text fields’ can be filled with html. We will also explain the functions of our platform’s > html-editor which will simplify filling out rich text fields." > > > **INFO:** We will also explain the difference between ‘text fields’ and ‘rich text fields’. ‘Rich > text fields’ can be filled with html. We will also explain the functions of our platform’s > html-editor which will simplify filling out rich text fields. > Export Mappings [#export-mappings] Once you approve the Master Data, our support team builds Export Mappings to maximize the information shared with your retail partners. Variants [#variants] To meet the specific data requirements of different retailers, we create unique Product Variants. These ensure each partner receives only compatible data. We will review these variants with you on the platform to ensure they meet your standards and identify any additional information needed for a complete export. Assortment list per retailer [#assortment-list-per-retailer] An assortment list of products is very important. For this reason, we will ask you to deliver a list of all the products you have available, together with a list of the retailers that will receive the products. To begin the syndication process, please prepare an assortment list containing: * **Identifiers:** All EAN codes (or Hope codes for Delhaize) and connected product names. * **Retailer Mapping:** A matrix indicating which products are intended for which retailers. * **Format:** Usually provided via Excel, ensuring each partner receives only their specific selection of goods. Summary [#summary] What follows is a short step-by-step guide to summarise how the master data will be used: . **Assortment List:** You provide an EAN list mapping specific products to their respective retailers. . **Variant Creation:** We generate retailer-specific product variants based on your list. You can then monitor and improve the **Completeness Score** for each variant on the platform. . **Communication:** Notify us when data is ready for export. Note that retailers may also request specific assortment data directly. > > **INFO:** If products require a disclaimer, it must be included in the product data. > # The widget 'Tasks' The **Tasks** widget provides an overview of all system and user-assigned tasks. Tasks widget Task overview [#task-overview] * **Task count:** The blue circle at the top indicates the number of remaining tasks. * **Status icons:** Color-coded icons show the current status of each task. * **Details:** Clicking a task opens a page with detailed information. * **View all:** Select **View all tasks** to see the full list of pending and completed items. If the number of tasks exceeds the widget size, you can scroll through the list directly on the dashboard. # Welcome to the Retail platform At Productsup, we are ready and willing to help. You can use this help documentation to quickly find answers to any questions. If you don't find an answer to your questions in the documentation, contact [rpxsupport@productsup.com](mailto:rpxsupport@productsup.com) to request personal assistance from our support team. Productsup Logo Getting started [#getting-started] When you first arrive at the [Retail platform website](https://retail.productsup.com/), you see a login page where you can sign in to your account. Login screen to the Retail Platform . Enter your email address in **Email** and select **Log in**. . Provide your password and select **Log in** once again. . If your account uses two-factor authentication, enter a code from your authenticator app a one-time code. Tip: You provided your email but can't remember your password? Select **Forgot Password?** to reset your password via email. If you also have a Productsup platform account, you can log in with the same credentials or seamlessly switch between the platforms. The platform components [#the-platform-components] Upon logging in, your **Dashboard** provides access to the following areas: | Component | Purpose | | :------------------- | :--------------------------------------------------------------------------------------------------- | | **Main menu** | Access the list of available platform functionalities via the left-hand sidebar. | | **Navigation bar** | Navigate through page hierarchies using breadcrumbs and switch between Workspaces. | | **Side panel** | Provides quick access to Projects, Workspaces, and the Content Portal (for users of both platforms). | | **Profile settings** | Manage your profile data, system preferences, and log out from the top-right corner. | Main menu [#main-menu] The main menu contains the following items: Main menu | Feature | Purpose | | :------------- | :-------------------------------------------------------------------------------------- | | **Dashboard** | The main screen showing important widgets, data overviews, and links to core functions. | | **Products** | View a list of all registered products and create new product entries. | | **Imports** | Access an overview of all imported products and initiate new import processes. | | **Exports** | Access an overview of all exported products and initiate new export processes. | | **Shared** | Manage and view lists of products shared by you or shared with you. | | **Tasks** | View and manage all open system and user tasks. | | **Media** | Manage image files and collections, and upload new media assets. | | **Users** | View the user list and information, and create new user accounts. | | **Brands** | View brand information and create new brand profiles. | | **Datamodels** | Create new data models or manage existing ones for your workspace. | | **Mappings** | Access and manage import and export mappings relevant to the workspace. | | **Channels** | View and configure the channels available to your current workspace. | | **Categories** | View category information and create new categories. | | **Tools** | Access the **HTML Editor** and **JSON schema library** features. | | **Settings** | View and modify your specific workspace settings. | | **Developers** | Request activation of the API feature for your account. | Profile settings [#profile-settings] The profile settings icon lets you change your personal information and password in **Profile** and your overall Retail platform account preferences in **System Settings**. Profile info Profile info [#profile-info] Profile settings give an overview of your registered personal information and let you edit it. The available information you can edit is: | Attribute | Purpose | | :-------------- | :------------------------------------------------------------------------------------ | | **Name** | Your name. | | **Email** | Your email address. | | **Mobilephone** | Your mobile phone number. | | **Address** | Your address. | | **Region** | Your region. | | **Position** | Your position in the company. | | **Avatar** | Your photo. If left empty, displays your initials. Select **Upload** to add an image. | | **Role** | Select your user role. | | **Language** | Choose the language in which to show the website. | | **Workspaces** | All the workspaces that you have access to. | | **Workspace** | The workspace currently selected. | Security [#security] In the **Security** tab, you can change your password: Help and Support [#help-and-support] If you experience issues with the platform and need assistance or have questions about some features, you can reach out to our support team by [rpxsupport@productsup.com](mailto:rpxsupport@productsup.com). You contact Support from the platform: . In the top-right corner of your view, select the **Help and Support** icon. You can find it next to the profile settings bubble. . In the slide panel, select **Contact Support**. . An email app opens a new window on your device. Describe your issue or question and send us an email at [rpxsupport@productsup.com](mailto:rpxsupport@productsup.com). # Log in to the Retail platform When you first arrive at the [Retail platform website](https://retail.productsup.com/), you see a login page where you can sign in to your account. Logging In Enter your email and password to log in. If two-factor authentication is enabled, [#logging-in-enter-your-email-and-password-to-log-in-if-two-factor-authentication-is-enabled] enter the one-time code from your authenticator app when prompted. * **Forgot Password?** Use the "Forgot Password?" link to receive a reset email if you cannot access your account. * **Language Selection:** Use the drop-down menu at the bottom of the login page to set your interface language before entering the platform. * **Unified Access:** Your credentials provide shared access to both the **Retail** and **Productsup** platforms. Change your password [#change-your-password] If needed, you can change your password in the profile settings: . Select the profile icon in the top-right corner of the page. . Choose **Profile** and open the *Security* tab. . Enter a new password in **New password**, repeat it in **Confirm password**, and select **Save**. NOTE: Your password must contain at least 12 characters, 1 number, both lower- and uppercase letters, and 1 special character, such as ​`#`, `?`, `!`, and so on. Two-factor authentication [#two-factor-authentication] In the Retail platform, there is no way to activate two-factor authentication for your profile. However, if you have an account in the Productsup platform, you can enable two-factor authentication there, which secures login for both platforms.\ See [Use two-factor authentication (2FA)](https://help.productsup.com/en/29407-29416-set-up-user-profile.html#UUID-0b52d2d6-046a-2ce0-f255-4dcf7a269a4b_section-idm232205856133962). # Dashboard and the widgets Introduction [#introduction] The 'Dashboard' is the bulk of the main screen. It shows many widgets with different functions that give a quick overview of and links to your registered products and data. Every widget has its article, where it is discussed in detail. Here, a quick overview will be given of all the widgets. Overview of all widgets | Dashboard Element | Purpose | | :------------------------------- | :-------------------------------------------------------------------------------------------------------------- | | **Created products** | Keep track of the number of products you have uploaded to the system. | | **Enriched fields** | Track the amount of product information that has been filled out in the proper fields. | | **Imported media** | View how many pictures have been uploaded to the system. | | **Completeness score over time** | See the overall completion of product registration over the period set in the date picker. | | **Your Overall Completeness** | Access a clear, direct overview of the total completion of all registered products. | | **Tasks** | View an overview of all tasks you have set. | | **Calendar** | Monitor the number of products added, edited, or deleted on any day of the selected week. | | **Organisation labels** | See the number of products at each stage of the registration process. | | **Channel Analytics** | View a percentage-based representation of the overall completion of registered products per channel. | | **Master Data Analytics** | View a percentage-based representation of the completeness of your master data and overall product information. | | **Recently Updated Products** | View a list of the five most recently updated products. | The widget Created products [#the-widget-created-products] Created products This widget tracks your product uploads. It displays the total number of products in the system alongside a trend indicator (arrow) and percentage, showing the volume of items added or removed during your selected date range. The widget Enriched fields [#the-widget-enriched-fields] Enriched fields This widget monitors the completion of product information fields. It displays the total number of filled fields and tracks changes within your selected timeframe, using an arrow and percentage to show the net gain or loss of data entries. The widget Imported media [#the-widget-imported-media] The Imported media widget tracks how many image files have been uploaded to the system. Widget Preview The line '\ in total' shows how many pictures have been uploaded in total. The bold number with an arrow next to it shows how many pictures have been uploaded or removed in the time slot as selected in the date picker. An arrow pointing up means this amount of files has been uploaded, and an arrow pointing down means this amount of files has been removed.\ The percentage next to the total amount shows what percentage of the total amount of pictures has been uploaded in the timeslot selected in the data picker. The widget Completeness score over time [#the-widget-completeness-score-over-time] The widget 'Completeness score over time' This widget tracks product registration completeness (%) across your selected date range. Use the color-coded legend to compare delivery channels; clicking a channel name toggles its visibility in the graph, allowing for easy performance comparisons between specific stations. The widget Your Overall Completeness [#the-widget-your-overall-completeness] The widget 'Your Overall Completeness' The widget ‘Your Overall Completeness’ shows a clear and directly visible overview of your total completion of all registered products. Your completion is expressed both as a percentage and in a circle graph. The widget Tasks [#the-widget-tasks] The widget 'Tasks' In the Tasks widget, you can find an overview of all tasks that you have set. If the amount of tasks exceeds the size of the widget, you can scroll through them. At the top of the widget, next to the title Tasks, the number in the blue circle indicates how many tasks there are left. Next to the name of the tasks, a color-coded status icon indicates the status of the task. Next, the logo of your organization and the date when the task was added are seen. Clicking a task directs you to a page with more detailed information regarding this task. Clicking the button ‘View all tasks’ directs you to a page with all tasks and more detailed information. The widget Calendar [#the-widget-calendar] The widget 'Calendar' The widget ‘Calendar’ shows the amount of products that have been added, edited, or deleted on any given day of the selected week, as well as tasks that have been set on this day. The blue arrow buttons allow for the selection of a specific week, either in the past, present, or future. Clicking the ‘today’-button automatically selects the current week. For every day of the week, a timeslot is given, and color-coded status changes of products are shown, along with the amount of added, edited, or deleted products. Clicking on an item on the calendar directs you to the appropriate page. Opening a task shows the task page with all the necessary info. Opening a status change directs you to the appropriate product list. The widget Organisation labels [#the-widget-organisation-labels] The widget 'Organisation labels' The widget ‘Organisation labels’ shows you the amount of products at any stage of the registration. The statuses of your products represent your workflow and give you a quick view of the amount of registration work left to do. Ideally, all your products would be found with either the status 'Published', or the status 'Live'. | Organisation label | Purpose | | :----------------- | :------------------------------------------------------------------------------------------------------------------------------------------------ | | **Concept** | Counts all products that have just been imported or added. | | **Saved** | Counts all products that have recently been changed or adapted, where the change has been saved. Most active product work falls under this label. | | **Published** | Counts all products that have been approved and are ready to be shared with retailers and other clients. | | **Live** | Used for products that your organization has manually published on a website to make public. | | **Archived** | Shows the amount of products that have been archived and will be filtered out on the product page. | The widget Channel Analytics [#the-widget-channel-analytics] The widget 'Channel Analytics' In the widget ‘Channel Analytics’, a percentual representation is shown of the overall completion of registered products per channel. This is the same as the channels over time, but at one specific moment. The channels are represented with a picture logo, and next to the logo a bar shows the percentages. A fully filled bar means a completed registration process. The percentage is also represented with a number, which changes color as progression is achieved. The widget Master Data Analytics [#the-widget-master-data-analytics] The widget 'Master Data Analytics' In the widget ‘Master Data Analytics’, a percentual representation is shown of the overall information registration of your products. The channels are represented with a picture logo, and next to the logo, a bar shows the percentages. A filled bar means a completed registration process. The percentage is also represented with a number, which changes color as progression is achieved. The widget Recently Updated Products [#the-widget-recently-updated-products] The widget 'Recently Updated Products' In the widget ‘Recently Updated Products’, a list of the five most recently updated products is shown. Each product is represented with an image of the product, the name of the product, the total completion of registering the product info, and the last date that the product was updated. # Release notes - February 2025 Improvements for Assets upload [#improvements-for-assets-upload] We launched the next set of improvements for the Assets upload to enhance your user experience. The changes include: . Renaming: * The **Media** page is now **Assets**. * The **Media Matching** button is now **Auto-match**. * Other UI elements have more consistent and intuitive names. . UI changes: * Grouping the Search bar, sorting, and layout options. * Replacing pagination with a new component for quicker navigation. * Making the navigation bar sticky. * Changing the tile shape to more square. * Separating the View options from selecting Assets. \ Available for user roles: *User* and *Admin* Quality-of-Life improvements [#quality-of-life-improvements] We made some user experience improvements to simplify your work in the Retail platform: . The platform now proactively recalculates the completeness score for the attributes and data models on the *Product Detail* page to avoid confusion during data editing.\ . The *Activity log* on the *Product Detail* page now shows updates in the chronological order instead of grouping by action or edit type.\ . From now on, Admins cannot delete actively used data models that have at least one attribute. This improvement prevents inadvertent data loss in multiple customer workspaces. Available for user roles: *User* and *Admin* # Release notes – January 2025 Find Upload Media and Match Media in one tab [#find-upload-media-and-match-media-in-one-tab] Before, the **Assets Upload** and **Match Media** functionalities were in two separate tabs in **Media**. Whenever you wanted to use Match Media, you had to upload assets again, which led to asset duplication and unnecessary repetitive actions.\ Now, **Upload Media** and **Match Media** are in the **Assets** tab. Also, you can use **Match** **Media** without re-uploading the assets.\ \ Match Media is a powerful tool that helps you match asset names to product GTINs with ease. You can link as many assets as you need to each product. To match the media: . Go to **Media** from the main menu. . Go to the **Assets** tab. . Select the needed assets and select the **Match Media** button. . Make any necessary adjustments in the pop-up window. . Go to **Products** and select a needed product to check your matched assets. Hierarchy Position column in Products Overview [#hierarchy-position-column-in-products-overview] As part of the extended GS1 packaging hierarchies support, we now display the product’s hierarchy position in **Products Overview**. This improvement lets you maintain product content compatible with GS1 GDSN standards or arrange data accurately for supply chain operations. Here are the key improvements: * If the products are connected into hierarchies using the *Linked products* functionality, the platform automatically calculates the hierarchy position in the packaging hierarchy tree. * You can see a new column, **Hierarchy Position**, in the Product Overview page that lets you filter and work with different product levels. The possible values are *Base*, *Middle*, and *Top*. * If products don’t participate in the hierarchy, the Hierarchy Position is blank. Blank Hierarchy Positions highlight areas that need your attention, allowing for quick adjustments. Quality-of-Life improvements [#quality-of-life-improvements] We made some user experience improvements that should simplify your day-to-day work in the Retail platform: . The **Fields** page: Now admins can see the number of times the attribute is used by the Data models, Import Mappings, or Export Mappings to prevent deletion of actively used attributes.\ . The **Media** page: * You can select an asset by clicking anywhere on the tile. * The size of the tiles changed to place 5 asset thumbnails in a row and 20 per page. * You can use a new preview and rename icons for quick editing. . **Media Collections**: The platform doesn’t create any more duplicated media folders in **Collections** for *Brands*, *Variant names*, and *Datamodels*.\ . **Product Overview**: The platform automatically refreshes the Product Overview page if you update the configuration of a table column or products get a new status. # Release notes - March 2025 Save time with asset type mapping [#save-time-with-asset-type-mapping] Relevant for: Retailer and distributor\ Available for all user roles\ We launched the next set of improvements for the **Assets** page to enhance your user experience.\ Previously, adding an asset type to distinguish between the assets for the same item was impossible and you had to match the assets belonging to the same item manually.\ Now, you can assign an asset type for each suffix in the file name, such as *2345678\_packing.png* and *2345689\_packing.png*: . Go to **Assets** from the main menu. . Select the **Asset types** tab. . Select **CREATE ASSET TYPE**. . Enter an asset type name in **Name**. . Enter a suffix in **Suffix**. . Select **Save**. Then, when you select **Automatch** and choose the assets with the suffixes that have an asset type assigned, the platform automatically adds the asset types to the assets with the same suffix in their file names on the step **Match to product**. # Release notes – December 2024 Automatically map and pre-fill your import mappings [#automatically-map-and-pre-fill-your-import-mappings] When creating new import mappings in **Mappings**, you can now use automated attribute mapping. If the name of the column in your import file matches the name of the attribute in the chosen datamodel, the platform matches the two automatically and pre-fills the needed attribute names in the import mapping. This removes the need for manual mapping on your side. You can also save import mappings for future use.\ \ With this new automapping feature, you get the following benefits: * No need to create import mappings from scratch anymore. * Bulk imports become easier and quicker. * Import mapping is more efficient. Update products in scheduled exports [#update-products-in-scheduled-exports] You can now include or exclude products from an existing scheduled export. Changing your selected products doesn't affect any other schedule settings, such as the day of the week or the time of the day. You can now edit your scheduled exports without creating a new scheduled export every time you want to change the set of your exported products. . Go to **Exports**. . Open the *Scheduled export* tab. . Select the three dots next to the needed export and choose **Update products**. . In the pop-up window, choose the products you want to include or exclude from the scheduled export. When done, select **Update**. With this new opportunity to edit products in a scheduled export, you get the following benefits: * No need to remove and create scheduled exports from scratch. * Scheduled exports are simpler, more user-friendly, and less time-consuming. Enjoy other quality-of-life improvements [#enjoy-other-quality-of-life-improvements] We have made some more granular user experience improvements that should simplify your day-to-day work in the Retail platform: * **Rewatch product tours**:\ When we release a new big feature, we also launch a product tour to guide you through it. Previously, you could only see it once. And if you closed it without watching, you couldn't come back to it later. Now, you can revisit the product tour and refresh your understanding of recently released features at any time by selecting the **Help and Support** icon in the top-right corner of your page and then choosing **Take the product tour again**.\ ​\ * **View only attributes with values on the product details page**:\ The new filter *Show the attributes with values* on the product details page improves data visibility and accessibility and lets you navigate your attributes better by hiding attributes with empty values.\ ​\ * **See all product data edits performed via API on the product details page**:\ All product data edits performed via API are now visible in the *Activity* tab on the product details page. This ensures transparency of API actions and lets you track changes to your product data and manage related activities right on the product details page.\ ​\ * **Upload files to import data without unnecessary steps and buttons**:\ We have removed unnecessary buttons after selecting a file to import, which streamlines the import process and makes it more intuitive and efficient.\ ​ * **Use the new export setting to limit the number of assets exported per product:**\ This setting lets administrators control the export process and ensure a manageable workflow for retailers with strict requirements for the maximum number of digital assets per product.\ ​ * **Use the filters *Company name* and *Processed* on the product requests page**:\ These filters let you quickly and easily find specific product requests based on the company name of a requesting retailer or a processing status, which improves searchability of product requests and saves time. # Release notes – November 2024 Easier platform navigation [#easier-platform-navigation] We have been working to bring the Productsup and Retail platforms closer together. As a result, we made the following improvements: * You can select **Workspaces** in the breadcrumbs at the top of any page to go to the workspaces selection page.\ ​\ * In the workspace selection page, you can see the list of your workspaces and switch between them.\ ​\ * We moved the **Developers** page and **Workspace settings** from the **System Settings** into the separate pages. You can go to the **Developers** and **Settings** directly from the main menu.\ ​\ Easier access to export mappings [#easier-access-to-export-mappings] Before, you had to select a data model and channel to view your export mappings.\ We improved this experience by modifying the **Export mappings** page. Now, you can see the list of all existing export mappings as soon as you open the **Export** tab in **Mappings** without the need to select a channel and a data model. The page displays both supported and unsupported mappings.\ \ See [Export mappings](https://retail-docs.productsup.com/en/articles/6860243-export-mapping) for more information. Quality-of-life improvements [#quality-of-life-improvements] We made some user experience improvements that should simplify your day-to-day work in the Retail platform: * **Extension of the error description in the Imports page:** The page now displays the extended error message description for the failed imports. * **Separation of Generic Dump export and Productsup manual XLS export:** The two exports won’t replace one another in the Exports overview. Now, you can be sure which export you run. Improvements for GS1 GDSN [#improvements-for-gs1-gdsn] We made some improvements for GS1 GDSN: * **GS1 NL import API connector**: If the import exceeds the limitation of 2,000 products, the platform splits the products into separate batches during the import. * **Publication to GS1 GDSN**: We added the `isReload = true` parameter to let you refresh publications without unpublishing them. If you regularly republish multiple products, this improvement should save a lot of time. * **GS1 Belgium export with hierarchies and advanced fields**: When exporting multiple products, the platform skips the failed product without blocking the export of other products. You will see the skipped GTINs in the export status summary. # Map and optimize your data import { Callout } from "fumadocs-ui/components/callout"; Introduction [#introduction] To get your product data feeds ready for various export channels and marketplaces, you need to map attributes and optimize their values. Productsup offers a suite of core tools and services designed to help you inspect, transform, and optimize your feed data seamlessly at scale. These functionalities work together to turn the original source data into high-performing, channel-compliant product feeds. *** 1. Dataflow (Attribute Mapping) [#1-dataflow-attribute-mapping] **Dataflow** is the drag-and-drop mapping functionality of the platform where you define how data moves from your import sources, through a standardized intermediate layer, and into your channel-specific exports. * **Key Capabilities:** Map attributes between stages, create user-generated custom attributes, and transform the data. * **Learn more:** See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow). Dataflow 2. Data View (Analyze & Rule Boxes) [#2-data-view-analyze--rule-boxes] **Data View** is your interactive table view interface. Here, you can inspect your product data at any stage (import, intermediate, or export) and apply **rule boxes** to clean up, modify, or format specific attribute values. * **Key Capabilities:** Filter and search items, analyze channel compliance and readiness score, and see live results of applied rule boxes. * **Learn more:** See [Data View](/docs/help-center/map-and-optimize-your-data/data-view) and [Optimize your data in Data View with rule boxes](/docs/help-center/map-and-optimize-your-data/data-view/optimize-your-data-in-data-view-with-rule-boxes). Data View 3. Lists [#3-lists] The **Lists** functionality allows you to define standardized or dynamic groups of values to support your rule boxes. Instead of writing complex conditions or managing hundreds of values inside individual rule boxes, you define them centrally in the Lists. * **Key Capabilities:** Manage standard or dynamic lists for replacing terms, including/excluding products (e.g. whitelists/blacklists), or mapping categories to export channel taxonomies. * **Learn more:** See [Lists](/docs/help-center/map-and-optimize-your-data/lists). 4. Data Services [#4-data-services] When your feed requires heavier data processing or restructuring that goes beyond a single attribute rule box, **Data Services** provide powerful backend operations to enrich your product catalog. * **Key Capabilities:** ID generation, website and image properties crawling, currency conversions, parent/variant splitting and merging, automatic translation, and AI-powered text transformation or image background removal. * **Learn more:** See [Restructure your data in Data Services](/docs/help-center/map-and-optimize-your-data/data-services) and [Enhance your import data through Data Services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services). 5. Image Designer [#5-image-designer] **Image Designer** is an add-on image editing application. It allows you creating custom templates with dynamic product attributes (like prices, discount badges, or logos) and automatically generate advertising product images at scale. * **Key Capabilities:** Create custom image templates, overlay static or dynamic text/icons, product ratings, and apply these templates to all or selected products in your feed automatically. * **Learn more:** See [Image Designer](/docs/help-center/map-and-optimize-your-data/image-designer). Image Designer # Add a rule box import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Productsup lets you optimize your data feed directly in the platform using numerous rule boxes. Rule boxes are a universal tool that lets you change your attribute data any way you want it after you import your data into the platform. For example, you can use rule boxes to add a discount or VAT to your prices, rotate an image, remove emojis from a product description, replace one word with another, or change your current attribute values to the values of another attribute if they meet a condition. This document explains how to add a rule box in Data View and Dataflow. Add a rule box in Data View [#add-a-rule-box-in-data-view] The most effective way to add rule boxes is in Data View, as there you can immediately see the results of changes in your data. To add a rule box in Data View: UUID-9b20ba52-ce36-5d45-4956-3a870e06b0d4 Go to **Data View** from your site's main menu and select **Intermediate** or a needed export from the dropdown on the left-hand side of the top ribbon. You can add rule boxes only in the intermediate or export stage. Select **Edit** in the attribute that needs changes. The panel on the right opens. UUID-8dc92fcf-5f5d-a838-8c7b-99f87f9980c4 Select the **Select an Option** dropdown, search for and select the needed rule box in the list. UUID-accb71ab-90ae-84a5-c3ba-de507a5c74e1 Search for and select the needed rule box in the list. Configure the rule box by selecting or entering values. Select the wrench icon 🔧 in the top-right corner of the rule box to open advanced options such as pausing, duplicating, removing, or applying the rule box to a segment. Select **Save**. After saving a rule box, Data View refreshes to show you the results of the editing. You can also compare the values before and after applying rule boxes with the enabled *Before/After View* feature. See [Data View](/docs/help-center/map-and-optimize-your-data/data-view). You can add as many rule boxes to the same attribute as you need. However, the order in which you add rule boxes matters as the platform performs them one after another. The rule box at the top of the list has priority. You can easily change the order of the rule box sequence by dragging and dropping them in the corresponding area. UUID-f479cfaf-7db2-53de-ccfe-c2c49edda90c Edit a rule box in Data View [#edit-a-rule-box-in-data-view] You can edit any rule box after you have applied it. Go to **Data View** from your site's main menu and select **Intermediate** or a needed export from the dropdown on the left-hand side of the top ribbon. Select **Edit** in the attribute that needs changes. The panel on the right opens. Configure the rule box by selecting or entering values. Select **Save**. Add a rule box in Dataflow [#add-a-rule-box-in-dataflow] You can add rule boxes in Dataflow. Dataflow doesn't display your data, but it provides a broad overview of all your connections and rule boxes that you have already applied. The bubbles on the connections between the stages represent rule boxes applied to the attributes. You can hover over a connection to see a list of all rule boxes applied to it. UUID-ec7ef851-dfd7-b824-fff2-bb796a4de99d Here are the meanings of the different colors: * Green bubbles are rule boxes between the import and intermediate stages. * Blue bubbles are rule boxes between the intermediate and export stages. * Gray bubbles are rule boxes on pause. * Yellow bubbles are rule boxes containing skip rules. You can add rule boxes between the import and intermediate stages or between the intermediate and export stages: * If you add rule boxes to the green connections between the import and intermediate stages, they affect all your exports in the site. UUID-afad7b99-7cef-8c1c-f055-7df6c0f4d569 * If you add rule boxes to the blue connections between the intermediate and export stages, they only affect the selected export. UUID-a7191ac7-bd73-8407-5140-35eb1a903119 You can add as many rule boxes to the same attribute as needed. But the order in which you add rule boxes matters, as the platform performs them one after another. Higher rule boxes in the list have higher priority. Go to **Dataflow** from your site's main menu and select the needed export from the dropdown on the left in the top ribbon. Select the arrow icon UUID-e3255127-5bb3-55f9-a263-f7c08d5791d5 next to the needed attribute in the relevant stage. The panel on the right opens. Select the **Select an Option** dropdown, search for and select the needed rule box in the list. Or use the AI-based rule box recommendations. See [Find a rule box using the rule box recommendations](#section-id235134644582498). UUID-accb71ab-90ae-84a5-c3ba-de507a5c74e1 Configure the rule box by selecting or entering values. Select the wrench icon 🔧 in the top-right corner of the rule box to open advanced options such as pausing, duplicating, removing, or applying the rule box to a segment. See [Advanced rule box options](/docs/help-center/add-a-rule-box/advanced-rule-box-options). Select **Save**. Go to **Data View** from your site's main menu, select the same export as in Dataflow where you added the rule box, and see the changes in the attribute. UUID-ee094cca-c877-1a30-1c40-818b317e4655 Edit a rule box in Dataflow [#edit-a-rule-box-in-dataflow] You can edit any rule box after you have applied it. Go to **Dataflow** from your site's main menu and select the needed export from the dropdown on the left-hand side of the top ribbon. Select the arrow icon UUID-e3255127-5bb3-55f9-a263-f7c08d5791d5 next to the needed attribute in the relevant stage. The panel on the right opens. Configure the rule box by selecting or entering values. Select **Save**. Use Large View to add a rule box [#use-large-view-to-add-a-rule-box] Both in Data View and Dataflow, you can use Large View when adding a rule box to have more search options for rule boxes. UUID-c9401fbd-39c6-b075-c555-96b02f3bcec0 To add a rule box in Large View: Select the intermediate stage or a needed export, choose the attribute you want to modify, and select the **Large View** button. UUID-8bee236f-b37d-dd31-d7a9-47907e7a2dc9 To find a needed rule box, use the following options: * Select **All rule boxes** to choose a needed rule box category. * Sort the rule boxes alphabetically or by popularity. * Enter the rule box name in **Filter**. * Use AI-powered rule box recommendations. UUID-0db5274c-8785-1717-db23-ecd904971433 Drag the rule box to the needed stage: the green area is for the import to intermediate stages, and the blue area is for the intermediate to export stages. UUID-84cb4a08-69fe-08f7-cae6-3a69e505a2b1 Configure the rule box and select **Save**. UUID-0612fb24-74dc-0f84-c9f0-65a23c94f4db Find a rule box using the rule box recommendations [#find-a-rule-box-using-the-rule-box-recommendations] Rule Box Finder is available in both Dataflow and Data View. Empowered with AI, the feature lets you find the needed rule boxes by your desired outcome description. To find a rule box: If you are in Data View, select **Edit** for the attribute where you want to apply a rule box. If you are in Dataflow, select the arrow icon UUID-e3255127-5bb3-55f9-a263-f7c08d5791d5 next to the needed attribute in the relveant stage. Select the Rule box finder button. UUID-f529a3c5-5e36-faac-c5fe-85b8c1dc828c Enter your desired data transformation outcome in **Describe your goal** and select **Find**. View the list of all possible rule boxes that may fulfil your needs, including those that use Lists. Hover over the information icon of each rule box to see a short explanation of why it’s a fit. If you need more details, select a link to the related Help Center document that guides you through the rule box setup. # Feed Experimentation import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Feed Experimentation is a feature that lets you split a defined subset of your product data into two variant groups — **Variant A** and **Variant B** — and apply different rule logic to each. This enables you to compare outcomes in a controlled and measurable way without duplicating exports or disrupting your existing feed setup. The platform assigns items to variant groups deterministically: the same item is always assigned to the same group across all refreshes, based on its Unique Item Identifier. You can track experiment results in your analytics platform using UTM parameters that the platform appends automatically. You can use all rule boxes within Feed Experimentation. See [Find the needed rule box category](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category) for information on available rule boxes. Feed Experimentation is currently available as a beta feature. If you encounter any issues while using it, contact [support@productsup.com](mailto:support@productsup.com). Prerequisites [#prerequisites] Before setting up an experiment, make sure the following conditions are met: * A **Unique Item Identifier** is configured for your site. The platform uses this to assign items to variant groups consistently. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. * At least one export channel is set up in your site. * You are familiar with how Rulebox Conditions work. See [Apply rule boxes based on conditions](/docs/help-center/add-a-rule-box/apply-rule-boxes-based-on-conditions) for more information. Set up Feed Experimentation [#set-up-feed-experimentation] Go to **Dataflow** or **Data View** from your site's main menu. Select **Rule box conditions** in the top ribbon. Rule box conditions button in the Data View top ribbon Select the stage where you want to create the condition: * Select *Intermediate* to run the experiment across all export channels in the site. * Select *Export* to run the experiment on a specific export channel only. We recommend creating experiments at the Export stage so that the experiment scope is limited to the intended channel. Select **Add a condition**, give it a name and description as desired, and select **Create**. In the condition editor, activate the **Feed Experimentation** toggle. The *THEN* panel splits into **Variant A** and **Variant B**, where you apply the rule logic you want to test for each group. The *ELSE* panel remains available: any rule boxes you add there apply to items that do not satisfy the condition statements. If you leave the *ELSE* panel empty, those items keep their current attribute value unchanged. Feed Experimentation toggle in the condition editor Use condition statements to define which products the experiment will run on. Only products that match the condition statements are split into variant groups. Products that do not match any condition receive no variant assignment. For example, you can target all products whose **category** attribute contains *Pants* or *Shirts & Tops*. The platform automatically distributes matched products evenly: 50% to Variant A and 50% to Variant B. Feed Experimentation does not split traffic 50/50 on the same SKU. Each item is assigned to exactly one variant group. To use Variant B as a control group, leave it empty — that is, apply no rule boxes to it. Variant A then receives the changes you want to test against the unchanged control. Condition statements and allocation settings showing Variant A and Variant B To measure results in an external analytics platform, use Tracking Configuration: 1. If the condition was created on **Export stage**: 1. Select *Export Channel* from which the list of attributes will be loaded. 2. In **Tracking attribute**, select the attribute on which the UTM parameters will be injected. 3. You can select whether the UTM parameters should always be added or appended to the attribute value, or only when the attribute value is currently not empty (e.g. attributes containing links) 4. In **UTM Parameters**, enter the values for `utm_campaign` and `utm_content`. Configuring tracking parameters correctly ensures you can distinguish Variant A from Variant B in your analytics platform. If UTM parameters are not configured, the results of the two variants cannot be separately attributed in your external reports. Tracking parameter configuration showing Intermediate vs. Export channel selection Add the Rulebox Condition to the attribute where you want the variant logic to run — for example, the **title**, **description**, or **image\_link** attribute. See [Apply rule boxes based on conditions](/docs/help-center/add-a-rule-box/apply-rule-boxes-based-on-conditions#apply-a-rule-box-condition-to-an-attribute) for the full steps. Select **Full View** and trigger a **Refresh**. This processes your feed without re-importing data or exporting to any channel, so you can safely preview the experiment output before it goes live. Assigning the Rulebox Condition to an attribute and triggering a Full View refresh After the refresh, verify the following in Data View: * Products are split correctly between Variant A and Variant B. * The rule logic for each variant is applied as expected. * UTM parameters are appended correctly to the configured attribute. * The system attribute `___experiment_condition_group` shows the correct variant assignment for each row. See [The \_\_\_experiment\_condition\_group attribute](#the-experiment_condition_group-attribute) for more information on how to interpret the values. The ___experiment_condition_group attribute [#the-___experiment_condition_group-attribute] When Feed Experimentation is active on a site, the platform automatically generates a system attribute called `___experiment_condition_group`. This attribute shows which variant group each item has been assigned to. Variant groups are assigned in alphabetical letter pairs, one pair per experiment: | Experiment | Variant A group | Variant B group | | ---------- | --------------- | --------------- | | 1st | A | B | | 2nd | C | D | | 3rd | E | F | | … | … | … | Items that do not match any experiment condition have an empty value in this attribute. You can inspect this attribute in Data View to verify the distribution of items across variants, or use it as a condition in other rule logic elsewhere in your feed. A site can run a maximum of 13 simultaneous experiments (covering all 26 letters of the alphabet). Once this limit is reached, no further experiments can be added until an existing one is removed. Important considerations [#important-considerations] * **Non-overlapping conditions are recommended.** Multiple experiments can run simultaneously. If a product satisfies the condition statements of more than one experiment, the platform assigns it to the first experiment whose conditions it matches. To ensure predictable results, design your condition statements so that the product subsets of different experiments do not overlap. * **Variant assignment is stable.** As long as the Unique Item Identifier of an item remains unchanged, the item is always assigned to the same variant group for the lifetime of that experiment. * **Results must be measured externally.** Productsup does not natively support in-platform analysis of experiment results yet. Use your analytics or advertising platform to evaluate the performance of each variant. If you use Google Analytics, you can import your tracking data back into Productsup via the GA4 data source to enrich your feed with performance signals. See [Import tracking data from Google Analytics 4](/docs/help-center/import-data-feeds/import-data-from-third-party-external-systems/import-tracking-data-from-google-analytics-4) for more information. Use cases [#use-cases] Feed Experimentation can be applied to many areas of feed optimization. The following are common use cases: | Area | Examples | | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Title variations** | Prepend brand name vs. no brand; AI-generated title vs. original title | | **Description variations** | AI-generated description vs. original description | | **Product highlights** | AI-generated highlights vs. manually curated highlights | | **Image and template** | Product image vs. lifestyle image; different Image Designer templates | | **Label enrichment** | Custom label A vs. custom label B for Smart Bidding signals | | **Attribute completeness strategies** | Test fallback logic for missing attributes — for example, use a generated colour value vs. leave the field empty — to measure the impact on downstream approval rates | | **Channel-specific data formatting** | Test different title or description length caps, character sets, or formatting conventions to identify which variant performs better on a specific channel | Related articles [#related-articles] * [Apply rule boxes based on conditions](/docs/help-center/add-a-rule-box/apply-rule-boxes-based-on-conditions) * [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) * [Import tracking data from Google Analytics 4](/docs/help-center/import-data-feeds/import-data-from-third-party-external-systems/import-tracking-data-from-google-analytics-4) * [Image Designer](/docs/help-center/map-and-optimize-your-data/image-designer) # Apply rule boxes based on conditions import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Rule Box Conditions is a feature in Dataflow and Data View that lets you create and set up conditions to determine the cases when the platform should apply rule boxes to an attribute. A condition consists of two elements: * Condition statements * Rule boxes If the configured condition statements are true, the platform applies a set of *THEN* rule boxes to your data. Optionally, you can choose which *ELSE* rule boxes the platform should apply to your data if the condition statements are false. Now, the Rule Box Conditions feature supports Shared Dataflow. You can create and set up a rule box condition, add it to an attribute in a site with a shared dataflow, and thus apply the rule box condition to this attribute in all sites that use this dataflow. See [Share dataflow with other sites](/docs/help-center/map-and-optimize-your-data/dataflow/share-dataflow-with-other-sites) for more information. In case of a shared dataflow, you can edit rule box conditions only in the source site. You can use all rule boxes in the Rule Box Conditions feature. See [Find the needed rule box category](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category) for information on available rule boxes. Rule box conditions use case [#rule-box-conditions-use-case] Here is a simple example of how the Rule Box Conditions feature works. If you want your **title** attribute to feature the name of the brand only if it is a luxury brand, you can create a condition in Rule Box Conditions and then add it to the **title** attribute. To implement this logic, the condition you create uses its condition statements to check whether the **brand** attribute contains such values as *Gucci* or *Prada*. If it finds these values in your brands, the platform applies the **Append/Prepend Column** rule box to the **title** attribute and adds the brand name at the end of your titles. UUID-4bfd9150-86ca-bbf6-a5cd-792c7d93dbc0 Difference between segments and rule box conditions [#difference-between-segments-and-rule-box-conditions] Both rule box conditions and segments serve the same purpose. These features let you apply rule boxes to an attribute if this or another attribute contains a certain value. A segment lets you use only one operator (*contains*, *equals*, *is greater than*, *is empty*, etc.) and only static values to check the contents of one attribute. A rule box condition lets you choose multiple operators to check the contents of multiple attributes using static values, dynamic values, and lists. Rule box conditions also offer a more visual interface and can consider different rule box scenarios based on whether your desired condition statements are true or false. See [Use segments to apply rule boxes to specific product groups](/docs/help-center/map-and-optimize-your-data/data-view/use-segments-to-apply-rule-boxes-to-specific-product-groups) for more information on segments. Create a rule box condition [#create-a-rule-box-condition] Go to **Dataflow** from your site's main menu. Select **Rule box conditions** in the top ribbon. UUID-09f116b8-694b-a008-fe8a-709041ded2e1 Choose where you want to create a condition in **Stage**: UUID-6112da43-4207-599e-5d89-7ff14bca9f5e 1. To apply a condition to an attribute from import to intermediate stage, select **Intermediate**. 2. To apply a condition to an attribute from intermediate to export stage, select **Export**. Select **Add a condition**, give it a name and description as desired, and select **Create**.When the platform creates your condition, you can see its description by hovering over the condition name. You can also see the description when you apply a condition to an attribute. See [see the relevant section](#N1731518339601). You can edit the name and description of your condition at any time by selecting the marker icon UUID-1d82da2a-3494-b6ae-c0bf-e5926c0f19fb next to the condition name above the *Condition statements* panel. To start configuring your condition, set up the *IF* condition statement first: UUID-79a5789f-485c-e495-c2d3-153bce6f3c07 1. In **Type to search columns**, search for and select an attribute that the platform should scan for values. 2. In the **contains** drop-down list, select the operator that the platform should use to see if the values of the selected attribute meet a desired condition:Standard operators: * *contains* applies rule boxes if the selected attribute contains the provided value. This is the default option. * *not contains* applies rule boxes if the selected attribute doesn't contain the provided value. * *equals* applies rule boxes if a value in the selected attribute completely matches the provided value. * *is not equal to* applies rule boxes if a value in the selected attribute doesn't completely match the provided value. * *like* applies rule boxes if a value in the selected attribute matches a pattern. You can use regex to define a pattern.For example, you want to apply the rule box **Append/Prepend Value** to the **title** attribute if the value in the **description** attribute starts with *This product* and ends with *green*. You can use the *like* operator with the entry `This product%green`: UUID-67b41806-bff4-7e8d-ff47-dd8ea2448d26 Once you apply the created rule box condition to the **title** attribute, it changes the values in the **title** attribute as shown: | **description** | **title** (before) | **title** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------ | -------------------- | | *This product is available in cosmo black and grass green* | *10" Tablet* | *10" Tablet*`. SALE` | | *This product is available in cosmo black* | *7" Tablet* | *7" Tablet* | | Since the first product starts and ends with the needed text, the site appends `. SALE` at the end of its title. The title of the second product remains unchanged because its description ends in *black* instead of *green*. | | | * *not like* applies rule boxes if a value in the selected attribute doesn't match a pattern. You can use regex to define a pattern. * *greater than* applies rule boxes if a value in the selected attribute is greater than the provided value. * *greater than or equal to* applies rule boxes if a value in the selected attribute is greater than or equal to the provided value. * *less than* applies rule boxes if a value in the selected attribute is less than the provided value. * *less than or equal to* applies rule boxes if a value in the selected attribute is less than or equal to the provided value. * *is empty* applies rule boxes if the selected attribute contains an empty value. * *is not empty* applies rule boxes if the selected attribute doesn't contain an empty value. List operators: To use list operators, you must first create at least one Inclusion/Exclusion list in your site. Rule box conditions support both Standard and Dynamic Inclusion/Exclusion lists. See [Exclude products with the Standard Inclusion/Exclusion list](/docs/help-center/map-and-optimize-your-data/lists/exclude-products-with-the-standard-inclusion-exclusion-list) and [Exclude products with the Dynamic Inclusion/Exclusion list](/docs/help-center/map-and-optimize-your-data/lists/exclude-products-with-the-dynamic-inclusion-exclusion-list) for more information. * *contains any of* applies rule boxes if a value in the selected attribute contains at least one of the values present in the chosen list. * *not contains any of* applies rule boxes if a value in the selected attribute doesn't contain at least one of the values present in the chosen list. 3\. All operators except *is empty* and *is not empty* require additional input, such as a static value, an attribute with dynamic values, or a list.Choose the suitable option: 1. To use a static value, enter the value in **Type to start**. 2. To use dynamic values, select the toggle **Use an attribute** and then choose the needed attribute in the field **Type to search columns** next to it. 3. To use a list, select the needed list in **Type to search lists**. If you want a more elaborate set of condition statements, you can select the plus icon UUID-66937c40-7c7e-e1cd-a393-96385b54fe00 to add more condition statements and set them up as described in [see the relevant section](#N1708969611896).*IF* and *AND* condition statements can have multiple *OR* condition statements. UUID-d1034a7c-9241-0946-f7bf-d557e37005b2 1. Choose **AND** to let the platform apply rule boxes if both *IF* and *AND* condition statements are true. You can add an *AND* condition statement only from an *IF* or another *AND* condition statement. 2. Choose **OR** to add more options to the existing *IF* and *AND* condition statements. In *THEN*, choose **Select an Option** to add and set up the rule boxes you want the platform to apply to your data if your conditions statements are true.See [Find the needed rule box category](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category) to find a document about the needed rule box type. Optionally, in *ELSE*, you can choose **Select an Option** to add and set up the rule boxes you want the platform to apply to your data if your condition statements are false.You can leave the *ELSE* panel empty and skip adding any rule boxes there. Rule box conditions can work without *ELSE* rule boxes. When your condition statements and rule box setups are ready, select **Save changes** in the top-right corner. See the following section to proceed. Learn more about applying rule boxes based on conditions by taking a video course [Optimization: Rule boxes for platform.productsup.com](https://educationsso.productsup.com/#/online-courses/c56c1701-72dc-4bf5-923e-2621c203f2ba) on our Academy website. Apply a rule box condition to an attribute [#apply-a-rule-box-condition-to-an-attribute] To let a condition apply the needed rule boxes to your data, you should add it to a desired attribute. > > Congrats! You have added a condition to a desired attribute. You can now see your added condition as a bubble on a connection in Dataflow. > Go to **Dataflow** from your site's main menu. Open the *Edit* menu: To open it in Dataflow, select any attribute at the needed stage. To open it in Data View, use the drop-down menu on the left to go to the intermediate stage or the export where you want to add a rule box condition. Then, select **Edit** under the name of the needed attribute. The attribute where you apply a rule box condition must be in the same stage where you created the condition. See [see the relevant section](#N1708694061477). In the *Edit* panel on the right, choose **Select an Option**. In the *Conditions* section, select your desired condition and choose **Save**. UUID-d2ddf092-a0c4-db12-090e-6a7c8e57d45d If the attribute where you added a condition has other conditions or rule boxes, you can drag and drop the new condition to a desired place. This way, you can arrange the order of data optimizations in this attribute.The order of the applied rule boxes and rule box conditions determines the order of data transformations. The site applies rule boxes and rule box conditions one by one from top to bottom. If you change the order, your resulting attribute value may also change.If you want to check the settings of an added condition, select **Go to condition**. UUID-88476523-841d-07d1-812d-fa38f91f45b8 Edit a rule box condition [#edit-a-rule-box-condition] If you want to change the settings of a rule box condition, you can edit it: Go to **Dataflow** from your site's main menu. Select **Rule box conditions** in the top ribbon. UUID-09f116b8-694b-a008-fe8a-709041ded2e1 In **Stage**, choose the stage where you want to change a condition. Change the desired settings of a condition by adding, editing, or removing condition statements and rule boxes. See [Create a rule box condition](#section-idm4549909242142434169008322394) to do so.To remove a condition statement, select the trash icon UUID-bc908bf5-8f1e-e249-3280-9754b64aefeb next to it and then select **Delete**.To remove a rule box, select the wrench icon UUID-a8b5e4a0-512c-fc71-481b-80e6ea97e2ff and then select the trash icon UUID-d37c098a-04b3-2780-6c19-85c760273393 . If you accidentally deleted all condition statements, you can add a new *IF* condition statement by selecting **Add a condition statement**. UUID-d4104056-7f7a-142d-3b41-f4564b2d06a5 When finished, select **Save changes**. Pause and schedule a rule box condition [#pause-and-schedule-a-rule-box-condition] You can pause and schedule a rule box condition in the same way as an individual rule box. Pausing lets you temporarily stop the platform from applying a condition without deleting it, and scheduling lets you define the time period during which a condition is active. See [Pause or delete a rule box](/docs/help-center/add-a-rule-box/advanced-rule-box-options#pause-or-delete-a-rule-box) and [Schedule rule boxes to run at a specific time](/docs/help-center/add-a-rule-box/advanced-rule-box-options#schedule-rule-boxes-to-run-at-a-specific-time) for more information. Delete a rule box condition [#delete-a-rule-box-condition] If you no longer need a rule box condition, you can delete it: Go to **Dataflow** from your site's main menu. Select **Rule box conditions** in the top ribbon. UUID-09f116b8-694b-a008-fe8a-709041ded2e1 In **Stage**, choose the stage where you want to delete a condition. Select the trash icon UUID-bc908bf5-8f1e-e249-3280-9754b64aefeb next to the name of the condition you want to delete and confirm the action by choosing **Delete**. If any attribute in your site uses this condition, deleting it may affect your export data. Proceed with caution. # Get started import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Here's a quick setup guide for creating and setting up a site in Productsup. You'll go from importing product data to exporting it to your target export channel in under 30 minutes. Get a product data source [#get-a-product-data-source] The data source contains all the necessary information or data you want to modify and export to your target channels via feeds. For example, an online retailer may have information relating to 1000 of their products, such as the title, description, product ID, color, size, price, and shipping price for each product. This data contained in a file is considered a product data feed. Of course, you can include any piece of information that you think is relevant. Import your product data source [#import-your-product-data-source] Once your feed is ready, you should ensure the information is transferred to the Productsup Platform. Go to a site or [create a site](/docs/help-center/get-started/manage-your-organization-projects-and-sites/create-or-copy-a-site#section-idm13311609401308). Go to **Data Sources**. Select **ADD DATA SOURCE**. UUID-2278a95d-0aa9-739a-6dd2-c59c1bae2766 Find the relevant data source and select **Add**. If you have a URL for a hosted file, you likely need to add the **Feed URL** data source. Select **Save**. Select **Import**. If your desired import source doesn't appear in Data Sources, contact [support@productsup.com](mailto:support@productsup.com). Add a unique item identifier in your site [#add-a-unique-item-identifier-in-your-site] To enable the platform's features that depend on the item ID, you must add a unique item identifier during the site setup. Without a unique item identifier, many features, such as data services, delta calculation, Monitor, and the Before/After View in Data View, can work incorrectly or can't work at all. Go to **Data Sources** from your site's main menu and select the **Settings** tab. Choose at least one attribute that contains unique values for each item and can uniquely identify them in the **Select one or more attributes** drop-down menu. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier). UUID-b7416a7b-306f-f67e-8231-31250d8db989 Add and send your feed to an export channel [#add-and-send-your-feed-to-an-export-channel] Now that your feed is on the platform, you must add your desired export channel. This could be for Google Shopping, Facebook Dynamic Ads, Idealo, or one of the hundreds of available channels. Go to **Exports**. Select **ADD EXPORT**. Search for the relevant export template. UUID-d79a1024-587b-46ba-95cf-cf281f4a76cb Hover the pointer over the export template and select **Add**. The platform automatically returns you to the *Exports* page. In the Exports page, select the cogwheel icon (**⚙**) next to the added export. Add a destination for your file and select **Save**. The destination can vary depending on the export channel. See [Add export](/docs/help-center/export-data-feeds/add-export) for more information. UUID-e9efb95a-2231-e129-6f36-63e3e4cd4c31 No template, no worry! Contact your Customer Success Manager for assistance. Alternatively, you could also set up a Blank Export and manually input your columns and technical settings to match your needs. See [Build your exports from scratch](/docs/help-center/export-data-feeds/add-export/build-your-exports-from-scratch) for more information. Map your data in Dataflow [#map-your-data-in-dataflow] You need to map the feed to match the import data from your import data feed to the export feed specifications. Background information about mapping in Productsup [#background-information-about-mapping-in-productsup] There are three (3) types of data feed stages represented in the columns below: UUID-b9997fd6-7ec1-179c-3676-debffcd66100 The left section is your import or source data. Here, all the attributes listed come from your imported raw data in the Data Sources section. The middle section is where your feed gets restructured to standardized data, also referred to as the intermediate level. Here you make general optimizations that are relevant for all export channels. The intermediate is the base for all your export feeds. On the right, you see the currently selected export feed. This section contains all relevant attributes for each respective export channel you have set up in the Exports section. The attributes you see are based on the channel templates. You can make adjustments for each export feed under the export level. Attributes in the Export stage have different shades of gray. Mandatory columns are blue, while optional columns are light gray. Custom attributes created by the user and not part of the intermediate or export templates appear gray-white striped. UUID-18238d29-d7be-2917-b813-86d99881e614 Map your feed in Productsup [#map-your-feed-in-productsup] Go to **Dataflow** from your site's main menu. Map your data by dragging and dropping or selecting the column from one level to the next. UUID-a7ef9ee6-68d8-4495-fcad-1a71f073bab1 Optimize your product data in Data View [#optimize-your-product-data-in-data-view] Now you can begin optimizing your product data for your export feeds. Go to **Data View** in your site's main menu. Go to either the intermediate or export stage to select the export channel you wish to optimize. In the column of the attribute you wish to optimize, select **Edit**. Choose a rule box to add from the **Select an option** drop-down menu. See [Add a rule box](/docs/help-center/add-a-rule-box) for more information. UUID-72d0a639-69b3-6ad8-7f4d-d6e45a3e73b0 Select **Save**. The rule boxes you add change the data in the attribute where you applied them. Any optimizations made in the intermediate stage affect all exports. Export your feed [#export-your-feed] Once you have made all optimizations, you can now go ahead and export your product data. Select **Export** or **Run** in the top-right corner of your site. UUID-6ab877b6-58fe-07e0-5495-f4d655f90093 Congratulations! You have now set up and exported your feed in under 30 minutes. # Content Portal import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; As a product manufacturer, you may want your sales team to present the latest product information as efficiently as possible. While the Productsup Data View does this well for platform users, you may not want to offer your sales team access to everything. Content Portal is a separate interface for presenting the latest product information. Log in to Content Portal [#log-in-to-content-portal] The Content Portal consists of two components: the Content Portal interface and the Content Portal Catalog export. You can log in to the Content Portal in one of the following ways: . Follow the link to the [Content Portal](https://content-portal.productsup.com/). . Open the panel on the left from the main menu in the Productsup platform and select the **Content Portal** icon. UUID-b6587039-f9ea-1089-d51b-d90a8e47a173 To set up the Content Portal Catalog export, see [Set up the Content Portal Catalog export](/docs/help-center/content-portal/set-up-the-content-portal-catalog-export#section-idm232311814303645). Overview of your Content Portal [#overview-of-your-content-portal] In the Content Portal, you can create product catalogs, invite users to these catalogs, and manage the settings of the account. When you log in to your Content Portal as an Admin, you land in your account. In the dropdown in the top left corner, you can view the name of the account. If you have access to multiple accounts, you can switch between them by searching and selecting the needed one from the dropdown. UUID-638b9719-9d5b-caeb-f232-b8cc9a05c437 By default, the *Products* page opens and displays the products from the first catalog in the dropdown on the left. You can switch between catalogs by searching for a catalog name or scrolling through the list. UUID-57cb5f41-42bf-0595-819a-5b1020e69000 User's view of the Content Portal [#users-view-of-the-content-portal] All users who accepted the invitation via email can access the catalogs shared with them. When logged in, users can view the selected catalog's Products page and select each product to see its details. The User role can't change the account settings, create new catalogs, or invite and manage users. Only Admins perform these actions. UUID-41bb9c91-b77a-f1ad-473e-90d9b15a0171 Set up your Content Portal account [#set-up-your-content-portal-account] As an Admin, you can set up and edit the general information of your Content Portal, including account name, company logo, language, and footer links. You can change the following information: Go to the **Settings** tab in the top bar of your Content Portal view to set up your Content Portal. The three sections will open on the left: **Account**, **Catalogs**, and **Users**.The Account tab contains general information that your users will see when they open a catalog. In **Account name**, enter the desired name. The account name is visible in the URL of your Content Portal. In **Company logo**, upload the logo that will be visible in the header of your Content Portal. In **Default language**, you can switch from *English*,selected by default, to *French*, *German*, *Italian*, *Portuguese*, or *Spanish*. In **Footer links**, add URLs, such as your social media profiles or contact information, that you want to make available to your users at the bottom of the Content Portal. UUID-54adc7a6-211d-a915-6746-a3832426553d User's overview of the catalog [#users-overview-of-the-catalog] As a user who is invited and logged in to the Content Portal, you can see the first catalog selected by default in the dropdown on the left. UUID-8caba6bf-2459-ad75-b679-177812d3489c To switch to the needed catalog, search for and select the catalog name in the dropdown. UUID-18ce4506-2ca9-1c34-a0e7-c08fe7e98996 Find products using the search bar at the top or by selecting the needed values in the filter categories. Select **Show More** to see all values. UUID-06076c23-14e6-ef9d-a1cb-24407839365d Use the filter icon to search by multiple values or attribute value keywords, such as ingredients. You can enter multiple keywords separated by comma: UUID-e932c3e1-2a02-c60f-037e-88821aadbbd2 Select the **Most Recent** dropdown if you want to sort products in the order: *Most Recent*, *A–Z*, or *Z–A*. UUID-56eaad94-f7ea-bc7d-4f85-30436b0d8132 You can checkmark only the needed products and select **View selected** to hide the rest of the products from the page. UUID-449d4c6b-c6e4-acd8-dafe-ac8e8743d5af To download all selected products in the needed format, select the needed option: * **Download PDF** * **Download XLSX** * **Download CSV** * **Download assets via email** The catalog layout depends on your setting in the Content Portal Catalog export. UUID-9edcaa6b-1320-5343-c81c-4a252372f767 View product details [#view-product-details] From the Catalog page, you can access each product's details page by selecting the corresponding product image. You can see all mandatory attributes on the right of the product image. The additional attributes are below in the attribute groups or as individual attributes in the section **Other attributes**. UUID-899e10b0-a87a-33df-3086-fea3cde7137d You can print the product details, send assets via email, or download as a CSV file: . Select **Print** to prepare the product detail page for printing. . Select **Send assets via email** to create a zip file containing product assets. The mime types of the product assets should be: * image/jpeg * image/jpg * image/png * image/gif * image/tiff * application/pdf The file URL must have an extension, such as `.pdf` or `.jpg`. The platform doesn't support file URLs without an extension. . Select **Download CSV** to download the CSV file. # Invite and manage users in Content Portal import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; As an Admin of the Content Portal, you can invite new users and manage access to the catalogs for the existing users. To view existing or add new users: Go to your Content Portal from the left side panel in the main menu of the Productsup platform, or follow the link to the [Content Portal](https://content-portal.productsup.com/). UUID-b6587039-f9ea-1089-d51b-d90a8e47a173 Go to the **Settings** tab. Select **Users** in the left menu. In the Users page, you can view all invited users and their roles. UUID-c6bb62b0-b75f-8641-6aec-db991cac01bc In the Users page, you can perform the following actions: . Invite new users. . Delete existing users by selecting the trash bin icon UUID-9b0106a2-ad25-14fd-4aa3-06680d03c453 next to the user's name. . Change the user's role in the **Role** dropdown. . Resend the invitation by selecting the airplane icon UUID-4fa0fcf2-4483-e5bb-701f-26ad9ab6f3bc next to the user's email. Invite new users in Content Portal [#invite-new-users-in-content-portal] Go to the **Settings** tab and select **Users** in the left menu. Select **Invite user**. UUID-f1d86dfc-04f8-7000-3335-07320e102e07 Enter your invitee's email address in the search bar and press **Enter** or **Return** key. UUID-2a61310a-0e82-46f4-67ea-fbfad2b426d0 You can add multiple emails by separating them with a comma (,). Assign one of the following roles for your invitee in **Role**: * Admin * User UUID-25ef4eff-5370-6183-6622-f1c649f6c88b You can invite users to specific catalogs by selecting them from the **Available catalogs**. Or you can select the option **Select all**. UUID-cf3cbbea-9d5d-e619-53c7-60a4ee7e8c13 Select **Send invitation** to send an access link to your invited user via email. The invitation expires after seven (7) days. When a user's invitation expires, you can resend the invitation or remove the user from the Users page. # Set up the Content Portal Catalog export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; When you create a product catalog in Content Portal, you must export your product data to it using the *Content Portal Catalog* export. You can also use the Content Portal Catalog destination using other exports. The advantage of the Content Portal Catalog export is that it already has the required attributes in Dataflow, ready for mapping. Set up the Content Portal Catalog export [#set-up-the-content-portal-catalog-export] When you add the Content Portal Catalog export, the mapping of the mandatory attributes is automatic. If you use a different export with the *Content Portal Catalog* destination, ensure you map all mandatory attributes to it. You can see the required information in the Content Portal Catalog setup. Go to **Exports** from your site's main menu and select **Add export**. Search for *Content Portal Catalog*, hover over it, and select **Add**. UUID-fb047ca8-4ebf-65dc-7db5-8c252d134351 On the Exports page, select the export you added to set it up. Select **Add Destination** and choose *Content Portal Catalog* from the dropdown. Give it a name as desired, then select **Save**. Select the attribute that contains unique values in the **ID** dropdown. Go to your catalog's settings in the Content Portal and copy the **CATALOG ID**. The catalog identifier is a universally unique identifier (UUID). UUID-7518b18d-8a61-d6f5-0eef-f08abbe228bb Paste the copied catalog ID in **Catalog Identifier**, adding a prefix `uuid:`, such as `uuid:af22423c-8f0e-11e8-981a-1c36bbed83ab`. UUID-bd793fbe-6de1-e3d1-2dc2-a3367d18b983 Select the respective attributes from the dropdowns. UUID-0ae3cec9-7d5e-09a1-46f0-ed79734b3789 Toggle **Active** to *On* to activate the destination. Select **Save**. Go to **Dataflow** from your site's main menu and select *Content Portal Catalog* in the dropdown on the left. Map all relevant attributes from import to export. Select **Run** or **Export** in the top-right corner of your view. Create your template for Content Portal downloadable file [#create-your-template-for-content-portal-downloadable-file] If you want to create a downloadable file of a certain format, then set up the Content Portal Catalog export as described in [Set up the Content Portal Catalog export](#section-idm232311814303645), and fill out the template fields that will appear in downloadable XLSX file: UUID-7be0486d-230d-9638-b8dd-d2b050cf4d39 Your template must have placeholders for the attribute headers. The placeholders are text strings that refer to the needed attributes in the data in the catalog to populate spreadsheet with the product data. The placeholders follow the format such as *PRODUCTSUP\_VALUE('attribute\_name')*. If you leave the template fields empty, the downloaded file will be in the default format containing all attributes. In **Template file**, add a URL to your template file stored on your FTP server. Your file should contain the names of the items and data sheets and be in .xlsx format, such as *ftp\://ftp.productsup.com/product-export.xlsx*. See [Add Excel Export](/docs/help-center/export-data-feeds/special-export-setups/add-excel-export) to learn how to prepare such a file. In **Template file username**, enter your FTP username. In **Template file password**, enter your FTP password. You can use either the data sheet or the product sheet format for the XLSX file, depending on your settings: If you want to create a file with all products in one data sheet tab, use in **Data sheets**. Enter the sheet tab name exactly as it appears in your file. If you want to have different attributes in several sheets, for example three (3) attributes in one sheet and three (3) in another, you can add all data sheet names in the **Data sheet** field, separating them by a delimiter of your choice. For example, a comma (`,`). Then, you must enter the same delimiter in the **Data Sheet Name Separator** field below. UUID-dee12d01-62f4-b2fb-bc46-7b157876c6d4 If you want to create a file where each product is in a new sheet tab, use **Product Sheets**. Enter the name of the sheet tab containing the product data. You must fill out at least one of these fields if you want to use your template. If you have several data sheets, then in **Data Sheet Name Separator**, enter the same delimiter that separates the data sheet names as in **Data sheet**. By default, it is a comma (`,`). Toggle **Active** to *On* to activate the destination. Select **Save**. Go to **Dataflow** from your site's main menu and select *Content Portal Catalog* in the dropdown on the left. Map all relevant attributes from import to export. Select **Run** or **Export** in the top-right corner of your view. Now, users can download the catalog as an XLSX file by selecting **Download XLSX** in the Product page, and the file has the same layout as your template file. UUID-b70feb51-11cb-12a7-0984-ba50364c585f # Add and edit a catalog in Content Portal import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; As an Admin of the Content Portal, you can add catalogs and manage access to them for the existing users. To view an existing or add a new catalog: Go to the **Settings** tab. Select **Catalogs** in the left menu. UUID-213ca95a-b6a5-9b89-32b6-c39de40cda7b In the *Catalogs* tab, you can view the list of all available catalogs, create new catalogs, and edit the existing catalogs. UUID-3197d599-e041-2475-847e-fced9972f207 Each catalog line shows the following information: . The catalog's name. . The catalog's ID. You must copy this ID to use for setting up the Content Portal Catalog export. See [Set up the Content Portal Catalog export](/docs/help-center/content-portal/set-up-the-content-portal-catalog-export). . The number of products in the catalog. . The **Manage users** button that lets you view, add, or remove users who have access to this catalog. . The trash bin icon UUID-9b0106a2-ad25-14fd-4aa3-06680d03c453 that lets you remove the catalog. Add a catalog in Content Portal [#add-a-catalog-in-content-portal] Go to **Settings** in your Content Portal, select **Catalogs** on the left, and select **Add Catalog**. UUID-6a5b07f8-98bb-f3b3-2ae1-bf22e337fbfc Enter a catalog name in **Name** and a description in **Description**, and select **Save**. You can later make your catalog public to let everyone access it without credentials. UUID-5527cd9e-23f9-a9f9-c201-3dab97771af9 > The added catalog appears in the *Catalogs* page, and you can export your product data to it using a dedicated export template. See [Set up the Content Portal Catalog export](/docs/help-center/content-portal/set-up-the-content-portal-catalog-export). Modify catalog settings [#modify-catalog-settings] Once the Content Portal Catalog export is complete, you can modify your catalog access and general settings. The catalog settings help you effectively present product information and tailor the user experience during catalog browsing. Go to **Settings**, select **Catalogs** on the left, and search for the needed catalog. Select the catalog. The **General** section opens. If needed, edit the name in **Catalog name**. Edit the description in **Catalog description (Optional)**. Change the catalog type from public to private or vice versa in **Catalog type**: * Select **Private Catalog** to let only authorized users access to the catalog. * Select **Public Catalog** to let everyone access the catalog without logging in. Anonymous users can also download assets and products from public catalogs in the Content Portal. UUID-01fd809e-9027-ee61-ad62-17881c6c1a1b Go to **Users** on the left to view, add, or remove users who can access the catalog.To add a new user to the catalog: Select **Add users**. UUID-f35495ba-59ff-4f28-e24b-a3f38724f3cc Start typing the user name and then select the needed user name from the dropdown. Select **Add**. To remove a user from the catalog, select the trash bin icon UUID-9b0106a2-ad25-14fd-4aa3-06680d03c453 . Define what users can see: You can only use these settings after exporting the catalog at least once. See [Set up the Content Portal Catalog export](/docs/help-center/content-portal/set-up-the-content-portal-catalog-export). * **Filter categories** lets you select the attributes you want to display as filter categories. * **Search Values** lets you select the attributes by which users can search the products. * **Assets** lets you select which attributes to show as product assets. * **Attribute Groups** lets you select which attributes you want to present as a group. UUID-2f0628cd-6bba-ea9e-02be-34f6d4e78d4c Add filter categories [#add-filter-categories] In the *Filter categories* page, you can view, add, or remove categories that users can use to filter products. These categories appear on the left-hand side of the catalog, letting users select one or more filters to find the desired product. UUID-06076c23-14e6-ef9d-a1cb-24407839365d To add filter categories: Go to **Filter categories** on the left. Select **Add filter categories**. Select the arrows next to the attributes in the **Available attributes** that should be used as filter categories. UUID-6fcf9d61-cb0c-6f30-31fc-e2e9fc5c5f58 Select **Save**. Add search values [#add-search-values] In the *Search Values* page, you can view, add, or remove the values that users can use to search for products. To add search values: Go to **Search Values** in the left menu. Select **Add search values**. UUID-59c138ad-973a-7e38-e29f-d64251a540b6 Select the arrows next to the attributes you want to make searchable from the **Available attributes**. UUID-bdee51ea-0726-050b-5d9b-be3e683cc391 Select **Save**. Add assets [#add-assets] In the *Assets* page, you can view, add, or remove product assets, such as images or documents. The assets appear in the product details page, and you can scroll through them. UUID-944d7c98-edb6-7c07-3182-5d2bb668468a To add assets: Go to **Assets** in the left menu. Select **Add assets**. UUID-3debab15-efe1-c423-e6d1-6d9acfecbca7 Select the arrows next to the attributes you want to display as assets from the **Available attributes**. UUID-837500f9-3444-155d-374e-eb841cf78b96 Select **Save**. Add attribute groups [#add-attribute-groups] In the *Attribute groups* page, you can view, add, edit, reorder, or remove the attribute groups. The attribute groups will appear in the product details page under the product image. The attributes that aren't in the attribute groups will appear in the *Other attributes* section below the groups. To add attribute groups: > > You've set up all catalog settings. > Go to **Attribute groups** in the left menu. Select **Add attribute groups**. UUID-338c0caf-696b-54d5-8433-4146d9c93baa Enter the group name and select **Continue**. UUID-84f01964-4c40-78f1-d8fe-26d668c1a406 Select the arrows next to the attributes you want to add to the group from the **Available attributes**. UUID-0177fbd3-e1ef-4a56-43f4-d412a131c1e1 Select **Save**. # Facebook localized ads template import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Use a Facebook localized ad template in Productsup to catalog your products for use in different countries and languages, all from one master feed. This allows you to centralize your ad accounts for managing all country-specific activities in one place. And it allows you to display your products to multiple segments dynamically. For example, if you are selling a product globally, but want to only advertise it in a specific country or language, use a localized ads template for efficiency. Set up Productsup feeds [#set-up-productsup-feeds] Master feed [#master-feed] Use the master feed to manage one file that contains all of your products across the global market. The master feed can only contain unique IDs, which means that the feed is de-duped. At this stage, the country feed attributes, such as language and contents, are not essential. They merely act as placeholders to satisfy Facebook’s Dynamic Ads requirements. However, all available IDs in your individual market must be present. There are two different methods for setting up the master feed. Productsup suggests that you perform **[Method 2](#N1617393986550).** **Method 1:** Copy the link from your existing Facebook Dynamic Ads feeds. In Productsup, import the Facebook Dynamic Ads feeds as the **Main Data Feed** in the new master site. From inside your project, locate the master site in your Facebook Sandbox. Remember to keep your imported Facebook feed if you need to later create a master feed from it. In the site, select **Run** to import your products. In **Data Services**, select **ADD SERVICE** and add **Unique Rows Filter**. The Unique Rows Filter allows you to remove duplicate rows from your import feed. UUID-58bc91d2-d54b-d6ed-e3c6-79db0a4b3bac In the site, select **Run** to import products with the data service. Confirm that the amount of imported products has decreased since adding the Unique Rows Filter service. Continue to the following section, **[Both methods](#N1617394031282)**. **Method 2:** Create a new master site in your Facebook Sandbox by going to the project level and selecting **ADD SITE**. Import a feed that contains all available products across different markets (de-duped). Continue to the following section, **[Both methods](#N1617394031282)**. **Both methods:** In **Exports**, select **ADD EXPORT** and add *Facebook Dynamic Ads*. UUID-b6e2d564-7397-8c6b-473e-bfbb63a84e31 Map all fields according to Facebook’s [**Data Feed Fields and Specifications for Catalogs**](https://www.facebook.com/business/help/120325381656392?id=725943027795860/) document. Select **Export** to send the feed. In **Data Sources**, select **Scheduling** then **Add Schedule**, then enter the details according to your needs. Add the master feed to your Facebook Business Manager. Country feed [#country-feed] For country feeds, submit country-specific product information to Facebook, such as the title, availability, size, link, etc. Even though you can send a consolidated feed combining all products across countries, the recommendation is that you submit one (1) country feed per country. A consolidated feed can quickly become considerably large and challenging to manage. As a result, potential issues can come from the IDs not being unique within the feed. Perform the following steps to set up country feeds: In Productsup, go to **Exports**, select **ADD EXPORT**, and add the *Facebook Localized Catalog - Country Feed* export to all country sites. UUID-f83a798e-64d9-0ac4-bad9-79fb00c105f9 Next, give the feed a unique name and select **Add**. In **Dataflow**, map the correct attributes according to Facebook’s [**Create a Country or Language Feed for a Catalog**](https://www.facebook.com/business/help/2144286692311411?id=725943027795860\&locale=en_EN/) document. Select **Export** to send the feed. In **Data Sources**, select **Scheduling**, then **Add Schedule** and enter the details according to your needs. Add the country feed to your Facebook Business Manager Language feed [#language-feed] Language feeds are relevant for countries where you want to submit data in more than one language, for example, Belgium. Even though you can send a consolidated feed combining all products across different languages, the recommendation is that you submit one (1) country feed per language. A consolidated feed can quickly become considerably large and challenging to manage. As a result, potential issues can come from the IDs not being unique within the feed. Perform the following steps to set up language feeds: In Productsup, go to **Exports**, select **ADD EXPORT** and add the *Facebook Localized Catalog - Language Feed* export to all sites containing products in different languages for the same country. For example, Belgium - French Language or Belgium - Dutch Language. UUID-d7ccc0e9-c2f0-318a-039c-e9f23565ba3c Next, give the feed a unique name and select **Add**. In **Dataflow**, map the correct attributes according to Facebook’s [**Create a Country or Language Feed for a Catalog**](https://www.facebook.com/business/help/2144286692311411?id=725943027795860\&locale=en_EN/) document. Select **Export** to send the feed. In **Data Sources**, select **Scheduling**, then **Add Schedule** and enter the details according to your needs. Add the language feed to your Facebook Business Manager. More to consider [#more-to-consider] * Facebook recommends that files are no larger than 1 million products. If your feed exceeds this size, split it into multiple parts. * The same feed logic applies if you send the data to Smartly first. * If you send your feeds to Smartly and want to perform country-specific image adjustments, be sure to also export the `imag_link` attribute inside the country feeds. The same applies to all the other country-specific information you want to leverage in Smartly. # Export data feeds import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; The Exports feature in Productsup lets you add and set up new exports, view the list of added exports, track your export history, and check the number of exported items. The Exports page consists of two (2) tabs: UUID-319e27e8-cc6b-d2c0-1668-66ea448fc3e0 * **Overview** lets you view and manage all exports. * **Export history** lets you view the history of exports and delta updates. Locate the Exports feature [#locate-the-exports-feature] To locate the Exports feature, do the following: Go to a desired site in your Productsup organization. Open the site's main menu on the left. Select **Exports**. Overview tab [#overview-tab] In the Overview tab, you can briefly overview each export added to your site. You can perform the following actions: * Add a new export using the **Add export** button. See [Add export](/docs/help-center/export-data-feeds/add-export). * Set up a new export or edit existing exports. See [Add export](/docs/help-center/export-data-feeds/add-export#section-id23512423193916). * Search for a necessary export using keywords or filters. * Run a specific export. * Activate or deactivate an export. * Copy an export. * Delete an export. If you have at least one (1) export added, the Overview tab shows the following information on each export: UUID-185f6f63-0863-c727-d38e-caa210f156b6 * **Export name** shows the name of an added export. You can select the name to get to the export setup page. * **Last export** shows the date and time of the previous export run.The icon on the left-hand side from the date shows the run type for this export. You can hover over an icon to see whether the run was **Scheduled**, **Manual**, or **Triggered by another site**. * **Exported items** shows the number of exported items during the last export and the change in the number of exported items compared to the previous run. * **Created on** show the export creation date. * **Status** shows the active or inactive state of an export. You can select the arrows next to the *Export name* and *Created on* columns to sort the exports list. Set up a new export or edit existing exports [#set-up-a-new-export-or-edit-existing-exports] To set up a newly added export or edit an existing one: In the Overview tab, search for a necessary export using keywords or filters. Select the name of the export in the **Export name** column. UUID-7824784d-7873-8e3b-6dbc-58be91950e44 Set up the export or edit the settings on the setup page. See [Add export](/docs/help-center/export-data-feeds/add-export#section-idm243459226017834) for more information. Search for a necessary export using keywords or filters [#search-for-a-necessary-export-using-keywords-or-filters] To find a necessary export in the Overview tab, use the **Search for exports** field or the filters: UUID-7350bc8a-bf43-e990-2ef9-9cb0ed71d493 * **Export type** lets you view the list of all added exports of the necessary types and select the needed: Select **Export type**. Choose the necessary types from the list. Select **Apply**. UUID-68a07407-92c3-7ff0-13ba-8c75ba7d1007 Unselect the checked boxes or use the **Clear** button to clear the **Export type** filter. * **Labels** lets you view a list of all added exports with the labels and select the needed ones. Select **Labels** in the top ribbon. Choose the necessary labels from the list. Select **Apply**. UUID-015b984a-ed42-8d11-a64b-77d7b461c1d6 Unselect the checked boxes or use the **Clear** button to clear the **Labels** filter.You must add labels in the export settings before any labels appear in the Labels dropdown. * **Status** lets you view a list of all added exports with the necessary status. Select the **Active** or **Inactive** button next to **Status**. To clear the **Status** filter, unselect the chosen buttons. To clear all filters and see the whole list of added exports, select **Clear filters**. Export your items to the target channel [#export-your-items-to-the-target-channel] Selecting **Export** or **Run** in the top-right corner of the page sends data to all channels with active exports. If you want to send data to a specific channel only, take the following steps: Search for a necessary export. See [Search for a necessary export using keywords or filters](#section-idm4475857854664033610514125177). Hover over the necessary export and select the **Export** button that appears in the export's row. UUID-fe29635a-6b33-300b-67eb-8f2616186d46 When the run is successful, you can see *Exported* instead of the **Export** button. Activate or deactivate an export [#activate-or-deactivate-an-export] If you want to pause an export to change its settings or prevent it from uploading data to its destination for a while, you can deactivate an export instead of deleting it. You can reactivate the export whenever you are ready to continue exporting to the channel again. Search for a necessary export. See [Search for a necessary export using keywords or filters](#section-idm4475857854664033610514125177). In the Status column, toggle the status to **Active** or **Inactive**, depending on your needs. UUID-39077ebd-40bf-87cb-2257-40c777de4e03 After reactivating your export, run the export manually to send the data to the channel. Copy the export [#copy-the-export] You can create a copy of the export if you plan to use it multiple times without having to start from scratch. After duplicating your export, decide if you want to copy it with or without destination settings. Go to **Exports** from your site's main menu and select the three dots icon UUID-8e530399-3377-552c-f4a3-6a4c8d3375bc next to the export you want to copy. Select **Duplicate**. Duplicate export option in the export actions menu In the opened pop-up, select **Duplicate** to copy the export's destination settings to the newly created export template. Or select **Duplicate without destination settings** to copy an export without destination settings. Alternatively, you can copy the export from the export's Overview tab, by selecting the **Duplicate** button. UUID-dfebd774-0258-7dc3-f0d9-c930e5b2b43a Delete an export [#delete-an-export] Search for a necessary export. See [Search for a necessary export using keywords or filters](#section-idm4475857854664033610514125177). Go to **Exports** from your site's main menu and select the three dots icon UUID-8e530399-3377-552c-f4a3-6a4c8d3375bc next to the export you want to copy. Select **Delete**. Delete option in the export actions menu In the *Delete Export?* pop-up, select **Delete**. The export disappears from the exports list in the Overview tab. Export history tab [#export-history-tab] The Export history tab shows the log of all export runs. To find a necessary export history record in the Export history tab, use the **Search for exports** field or the following filters: UUID-cc997e87-0207-ab90-91b9-6fe045667341 * **Export type** lets you view the list of all added exports of the necessary types and select the needed: Select **Export type**. Choose the necessary types from the list. Select **Apply**. Unselect the checked boxes or use the **Clear** button to clear the **Export type** filter. * **Labels** lets you view a list of all added exports with the labels and select the needed ones. Select **Labels** in the top ribbon. Choose the necessary labels from the list. Select **Apply**. Unselect the checked boxes or use the **Clear** button to clear the **Labels** filter. You need to add labels to exports in the export settings before any labels appear in Labels. * **Select a date** lets you select a date when the necessary export was run. The dots next to a date in the calendar indicate the dates of the export runs. * **Run type** lets you view a list of all exports with a specific run type by selecting **Scheduled**, **Manual**, **Triggered by another site**, or **Triggered by API**. To clear all filters and see the whole list of added exports, select **Clear filters**. View the delta updates [#view-the-delta-updates] The table in the Export history tab lets you see exports with delta updates: **New**, **Changed**, **Deleted**, and **Unchanged**. See [Build your exports from scratch](/docs/help-center/export-data-feeds/add-export/build-your-exports-from-scratch#section-idm4557758669414433380650892281) to learn about delta updates. All exports with delta updates have the **DELTA** label next to their names in the Overview and Export history tabs. UUID-949eebf3-0748-6bb6-d8ab-b19b8b9b888c To show or hide the delta updates columns, do the following: In the Export history tab, toggle **Show delta updates** to the active position. UUID-0cf1d580-5d4a-4606-a3c5-ef2ffc8d99bd # Keep track of the data processing status at any stage import { Step, Steps } from "fumadocs-ui/components/steps"; Best practice [#best-practice] The platform may fail to process your data during import or export for multiple reasons, such as an empty import feed, a decreased or increased number of imported items, or an unreachable export destination. Productsup can notify you if the data processing error occurs and show its exact reason to let you fix it. We recommend the following actions to let you track data processing and let the platform automatically stop the processing in case of errors: . Open the Run log panel whenever you run your site or start an import or export process. The panel shows the progress, errors, warnings, and data processing completion messages. . Set up necessary monitoring events in Monitor. The platform will stop the data processing and notify you via email, Slack, or Microsoft Teams whenever an error occurs. . Create a separate group email in your company to receive the monitoring notifications so that all who need to know of issues during the data processing can receive the monitoring emails. This best practice lies outside of Productsup, and you need to set up the group email with your email provider. What features to use [#what-features-to-use] To keep track of data processing, you can use the following features: . The Run log panel available in the top right-hand corner of your view. UUID-2ce00a6c-8c50-414f-3259-c6d5d22bbe9b . The Monitor feature available from the main menu. UUID-315992a9-b2fc-f5d4-a35b-d1bf25709dc5 You can select from over 25 monitoring events for the import, intermediate, and export stages, as well as general events that cover all stages. See the [Monitor events overview](/docs/help-center/dashboard-and-monitor/ensure-data-quality-in-monitoring/monitor-events-overview) to learn about all possible monitoring events. How to set it up [#how-to-set-it-up] Track data processing in the Run log panel [#track-data-processing-in-the-run-log-panel] During an import, export, or run, select the **Run log** icon in the top-right corner of your view. The Run log panel is available on most pages in the platform next to the **Run** button. * The Run log panel unfolds at the bottom of the page. UUID-87dc1e03-8aff-87c0-2784-58a53f81704c Set up the monitoring events [#set-up-the-monitoring-events] You can set up the monitoring events on the organization, project, or site level in Monitor. See [Set up Monitor for your feeds](/docs/help-center/dashboard-and-monitor/ensure-data-quality-in-monitoring/set-up-monitor-for-your-feeds) to learn how to set up a monitoring event. As a common recommendation, you can start with the following events and settings on the organization level. After setting up monitoring events on the organization level, you can add more granular events on the project and site levels. Monitoring events for the Import stage [#monitoring-events-for-the-import-stage] . **Import failed for Data Source** – A data source couldn't import products, or the import feed was empty and contained no records.Set up the event as follows: Enable **Stop Processing**. Enable and add an email in **Email Notification** or activate **Slack Notification** for your email group. . **Import file failed to download or is empty (first main feed)** – The platform couldn't import the feed from your first main data source, or the feed contained no data. There could be an invalid URL, or an error could have occurred during the file creation.Set up the event as follows: Enable **Stop Processing**. Enable and add an email in **Email Notification** or activate **Slack Notification** for your email group. . **Mapped attribute has been removed from Data Sources** – A mapped attribute has disappeared from a data source. This may indicate errors on the data source side caused by file creation during the processes. This can also mean an issue with appending an additional data source to your main feed.Set up the event as follows: Enable **Stop Processing**. Enable and add an email in **Email Notification** or activate **Slack Notification** for your email group. . **Number of imported items decreased** – The number of imported items has decreased compared to the last import.Set up the event as follows: Set **Threshold(%)** to `20%`. Enable **Stop Processing**. Enable and add an email in **Email Notification** or activate **Slack Notification** for your email group. . **Number of Imports without a change in Data Sources** – The contents of a data source haven't changed in a given number of runs. This may indicate that the file updating process doesn't work or the URL is outdated.Set up the event as follows: Set **Threshold(runs)** to `3`. Enable and add an email in **Email Notification** or activate **Slack Notification** for your email group. . **Number of days without a change in Data Sources** – The content of a data source hasn't changed within a specified number of days. This can indicate that the file updating process doesn't work or the URL is outdated.Set up the event as follows: Set **Threshold(days)** to `2`. Enable and add an email in **Email Notification** or activate **Slack Notification** for your email group. . **New attribute added to Data Sources** – A new attribute appeared in one of the data sources, or you set up a data source and added new attributes to the feed.Set up the event as follows: Enable and add an email in **Email Notification** or activate **Slack Notification** for your email group. . **Number of Import items increased** – The number of imported items has increased compared to the last import.Set up the event as follows: Set **Threshold(%)** to `20%`. Enable and add an email in **Email Notification** or activate **Slack Notification** for your email group. . **Number of import file download retries** – The number of retries the platform performs to import a file if the previous import attempts failed. You can use this monitoring event if the connection to a data source is unstable.Set up the event as follows: Set **Threshold(attempts)** to `2`. Monitoring events for the Export stage [#monitoring-events-for-the-export-stage] . **Feed upload failed** – The export failed. For example, if an export destination is unreachable or the credentials are wrong.Set up the event as follows: Enable and add an email in **Email Notification** or activate **Slack Notification** for your email group. . **Fewer items exported** – The platform exported fewer items than during the last run. This could be due to fewer items in the feed, skip rules, or ROI rules.Set up the event as follows: Select **On All Export Channels**. Set **Threshold(%)** to `25%`. Enable **Stop Processing**. Enable and add an email in **Email Notification** or activate **Slack Notification** for your email group. . **More Products Exported** – The platform exported more items than during the last run. This could indicate adding more items to the feed or deactivating skip or ROI rules active in the previous run.Set up the event as follows: Select **On All Export Channels**. Set **Threshold(%)** to `25%`. Enable and add an email in **Email Notification** or activate **Slack Notification** for your email group. Monitoring events - General [#monitoring-events---general] . **Site run exceeds given number of hours** – A site run exceeds a given time limit. For example, this could be due to applying new rule boxes in Dataflow or Data View or a slow speed while downloading data from a data source or uploading data to an export destination. The given number of hours equals the previous durations. Consider your previous run durations to set an adequate threshold. Apply this event to data sets of over 10 million products.Set up the event as follows: Select **On All Export Channels**. Set **Threshold(hours)** to `10`. The number may vary depending on the number of products in your site. Enable and add an email in **Email Notification** or activate **Slack Notification** to your email group. # Generate a report with all skipped products import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Best practice [#best-practice] If some of your products are missing in the export, you may want to know exactly what products and why. The site may exclude some products from the export without deleting them from the feed if: . The product data doesn't meet the export channel requirements. . You exclude certain products from export with the help of rule boxes in Data View or Dataflow or using lists. We recommend generating a negative export report to get a list of skipped products. A negative export is a report with all the products skipped from the export and the reasons for their exclusion. What features to use [#what-features-to-use] To generate a negative export, you need to use the following features: . An FTP or SFTP account. You can create an FTP account in the Productsup server if you don't have one. See [Create an FTP server hosted by Productsup](/docs/help-center/get-started/create-and-manage-an-ftp-server/create-an-ftp-server-hosted-by-productsup) for more detail. . At least one export added in Exports. . The *FTP (Negative Export) v1* destination in your export channel. How to set up FTP (Negative Export) v1 destination and generate a negative export report [#how-to-set-up-ftp-negative-export-v1-destination-and-generate-a-negative-export-report] Go to **Exports** from your site’s main menu and select the cogwheel icon (**⚙**) next to a necessary export. Select **Add Destination**, choose *FTP (Negative Export) v1* from the **Destination** drop-down menu, give it a name as desired, and select **Save**. Enter your FTP or SFTP account data in **FTP Host**, **FTP Username**, and **FTP Password**. The *FTP (Negative Export) v1* export destination doesn't support the inclusion of basic auth within the FTP URL, such as `ftp://[user[:password]@]host[:port]/[url-path]`. Instead, the destination provides individual fields for each portion of the URL: FTP Host, FTP Username, FTP Password, and FTP Directory. Optionally, specify a path to your negative export report in **FTP Directory** and give the file a desired name in **Filename**. Toggle the **Passive Mode** button to **On** to activate the connection with the FTP server. Select a protocol type. Toggle the **Active** button to **On** to activate the destination. Select **Save**. UUID-a8de2920-8d9b-074e-af3f-782fa85e8473 Select **Export this export** in the upper right corner of the page. Go to your FTP or SFTP server account and download the report file similar to the following: UUID-7b4593e6-fa89-2a3f-3ccf-9513754c99b4 # Find the most suitable export destination import { Callout } from "fumadocs-ui/components/callout"; When setting up an export in your Productsup site, you need to choose a destination. A destination is a method that Productsup uses to upload your product data to the desired export channel. You have multiple destinations to choose from. Here are some basic types of destinations available in Productsup: * **URL-based destinations**. You can let Productsup generate a URL with exported data and use it as a data source in your export channel system. This destination type is the most popular one. It is easier and quicker to set up than other destination types. * **API-based destinations**. You can connect Productsup with your export channel system directly via the API of the export channel. * **FTP or SFTP servers**. You can set up an FTP, SFTP, or FTPS server as an intermediary between Productsup and your export channel. * **Cloud storage platforms**. You can use a cloud storage platform as an intermediary between Productsup and your export channel. * **Spreadsheets**. You can export your data to a spreadsheet to share it with your colleagues and partners or use it as a data source in the export channel system. * **Other Productsup sites**. You can use the export data of one site as a data source in another site within your Productsup organization. API-based destinations are the only destination type that uploads your data directly into your export channel. If you use other destination types, such as an FTP or SFTP server, a URL-based destination, a cloud storage platform, or a spreadsheet, Productsup sends your data to these destinations and not the export channel itself. In most cases, you need to additionally go to your export channel system and let it import data from the destination. Best practice [#best-practice] Not every destination suits all use cases. We recommend using the following diagram to find your most suitable destination type. If you are viewing this document on a smaller screen, select the diagram to enlarge it. UUID-6637f307-c065-aafa-7ca5-a8d499858bb8 What features to use [#what-features-to-use] Based on the recommended destination type from the diagram, you can find the needed destination in this table: | Destination type | Destination name | Purpose | Setup instructions | | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | API-based destinations | Numerous export-specific API destinations, such as *Google Content API (single account)* or *TikTok Shop Export Products*. | These destinations use the API of the target channel to send your data directly to the export channel. You can use export-specific API destinations only in combination with a corresponding API-based export. Productsup offers a wide variety of API-based exports and destinations, but it is possible that your desired API-based option isn't yet available. Try using another destination type, or reach out to your Customer Success Manager to discuss creating a new API export and destination for you. | Use the search bar in the top-right corner of this help center page to find a document that describes the setup of the needed export-specific destination. For example, [Add Google Merchant Center export](/docs/help-center/export-data-feeds/add-export/add-google-merchant-center-export) or [Add TikTok Shop exports](/docs/help-center/export-data-feeds/add-export/add-tiktok-shop-exports). | | *HTTP Post Request* | This is a general API destination that can send data to the REST API endpoint of your export channel system. This destination isn't specific to any particular API.You can use the *HTTP Post Request* destination if your export channel system has a REST API endpoint that can import data. You can also use it to send your data to a WebDAV server, which can be an alternative to FTP. | See [Add the HTTP Post Request destination](/docs/help-center/export-data-feeds/set-up-an-export-destination/add-the-http-post-request-destination). | | | URL-based destinations | *Productsup Server* | This destination sends your data to a server hosted by Productsup and generates a link to that location. You can use this destination if your export channel system can import data via URL. | See [Add the Productsup Server destination](/docs/help-center/export-data-feeds/set-up-an-export-destination/add-the-productsup-server-destination). | | FTP, SFTP, or FTPS servers | *SFTP/FTP/FTPS Server* | This destination sends your data to FTP, SFTP, or FTPS servers. You can set up a third-party server or use the **FTP Accounts** feature available for admin users at the organization level to create a password-protected FTP server hosted by Productsup. See [Create an FTP server hosted by Productsup](/docs/help-center/get-started/create-and-manage-an-ftp-server/create-an-ftp-server-hosted-by-productsup). | See [Set up the SFTP/FTP/FTPS Server destination](/docs/help-center/export-data-feeds/set-up-an-export-destination/add-an-ftp-sftp-or-ftps-destination#section-idm243421678900952). | | *FTP (Negative Export) v1* | This destination sends your unexported (skipped) data to an FTP server. | See [Generate a report with all skipped products](/docs/help-center/best-practices/generate-a-report-with-all-skipped-products). | | | Cloud storage platforms | *Google Cloud Storage (service account)* | This destination sends data to the Google Cloud using your Google service account. Choose this option if you use a Google service account for data transfer between systems. Typically, service accounts are a preferred option for virtual machines and applications. | See [Set up the destination Google Cloud Storage (service account)](/docs/help-center/export-data-feeds/set-up-an-export-destination/export-your-data-to-google-cloud-storage#section-idm4606573154126434222456284997). | | *Google Cloud Storage* | This destination sends data to the Google Cloud using a regular Google account. Choose this option if you use a regular user account with Google for data transfer between systems. | See [Set up the destination Google Cloud Storage](/docs/help-center/export-data-feeds/set-up-an-export-destination/export-your-data-to-google-cloud-storage#section-idm4640714716638434222190602491). | | | *Microsoft Azure Blob Storage* | This destination can send your data to a container in your Microsoft Azure Blob Storage account. | See [Add the Microsoft Azure Blob Storage destination](/docs/help-center/export-data-feeds/set-up-an-export-destination/add-the-microsoft-azure-blob-storage-destination). | | | *Amazon S3* | This destination can send your data to a bucket in your Amazon S3 account. | See [Add the Amazon S3 destination](/docs/help-center/export-data-feeds/set-up-an-export-destination/add-the-amazon-s3-destination). | | | *Google Cloud Platform: BigQuery* | This destination can send your data to a data warehouse in Google BigQuery to let you store, organize, and analyze it. | See [Add a BigQuery destination](/docs/help-center/export-data-feeds/set-up-an-export-destination/add-a-bigquery-destination). | | | Spreadsheets | *Google Sheets API* | This destination sends your product data to the Google Sheets API to let you produce a Google Sheet with all your exported data.This destination is available for the *Google Spreadsheet* export as well as multiple blank exports. | See [Add Google Sheets export](/docs/help-center/export-data-feeds/special-export-setups/add-google-sheets-export). | | *Excel Spreadsheet (Productsup Server)* | This destination produces an Excel file with all your exported data and stores it on the Productsup Server.This destination is available for the *Excel Export* as well as multiple blank exports. | See [Set up Excel Spreadsheet (Productsup Server) destination](/docs/help-center/export-data-feeds/special-export-setups/add-excel-export#section-idm4607896301593633951190316714). | | | Other Productsup sites | *Export to Data Source* | This destination exports data from your current site and imports it into another site within your Productsup account. | See [Set up a bucket destination](/docs/help-center/export-data-feeds/set-up-an-export-destination/set-up-a-bucket-destination). | If you are still unsure what destination suits your use case the best, reach out to your Customer Success Manager or contact [support@productsup.com](mailto:support@productsup.com). # Use your sandbox project for testing purposes import { Callout } from "fumadocs-ui/components/callout"; Best practice [#best-practice] When you log in to your organization in the Productsup platform, you can see a sandbox project created for your organization by your Customer Success Manager. The purpose of the sandbox project is to let you test how to set up sites and data feeds so that you can ensure they look correct. Once you are happy with your testing site, you can move or copy it into your production project to complete the export process. See [Edit site settings](/docs/help-center/get-started/manage-your-organization-projects-and-sites/edit-site-settings) to learn how to move a site and [Create or copy a site](/docs/help-center/get-started/manage-your-organization-projects-and-sites/create-or-copy-a-site) to learn how to copy a site to another project. You can also use the sandbox project for training purposes. You mustn't export your feeds from the sandbox project to any live export channels. What features to use [#what-features-to-use] To use the sandbox project, you need to have the following features: . The sandbox project in the list of projects in your organization. UUID-bea08399-ae9b-8600-c369-94d43629a9a2 . At least one site in the sandbox project. # Scan your data against potentially non-compliant environmental claims import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; In March 2024, the EU Parliament adopted the draft of the [Green Claims Directive](https://www.europarl.europa.eu/thinktank/en/document/EPRS_BRI\(2023\)753958) to regulate environmental claims. These regulations aim to help you prevent greenwashing and increase consumer trust. Under the document, companies making voluntary environmental claims in the descriptions of their products need to provide consumers with the corresponding evidence. The [directive](https://www.europarl.europa.eu/RegData/etudes/BRIE/2023/753958/EPRS_BRI\(2023\)753958_EN.pdf) outlines criteria for substantiating these claims and labels requiring an independent, accredited body to verify environmental claims before publication. The requirements will apply to all companies operating within the EU. While the final adoption of the directive is expected in 2027, we have already built new capabilities within the Productsup platform to help you identify potentially non-compliant environmental claims in your data feed. As the directive is still in draft and won't come into effect until 2027, the claims, evidence standards, and requirements may change. The last update of the current document is of September 2025. Identify environmental claims in your data [#identify-environmental-claims-in-your-data] We recommend scanning your data feeds for common environmental claims to prepare for the upcoming Green Claims Directive and avoid potential issues. To simplify this process, Productsup created an on-demand feature that detects and flags potentially risky keywords. Benefits of the Productsup Green Claims Directive feature: * Boost visibility of potentially non-compliant environmental claims within your data feed to speed up updates. * Empower you with the knowledge and supporting tools to start preparing for compliance with upcoming sustainability regulations. * Support transparency by helping you identify green claims that may require evidence. Contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) to request the feature in your platform setup. Depending on your organization’s structure and needs, our implementation team will suggest the best solution. The feature aims to assist with your internal review processes. Productsup provides only the supporting detection tool, which isn’t a verification or certification service. The list of keywords and accepted evidence is indicative only and may evolve. Always consult your legal or compliance team before publishing green claims. Productsup doesn’t assume liability for regulatory compliance. This feature is provided as is for informational purposes only and excludes liability for fines, investigations, or regulatory actions. The ultimate responsibility for compliance remains with the customer. Set up the Productsup Green Claims Directive feature [#set-up-the-productsup-green-claims-directive-feature] To set up the feature, you need to take the following steps in the site where you have your data feed that needs a check for potentially risky keywords: Go to **Exports** from your site's main menu and select **Add export**. Search for *Productsup Green Claims Checklist*, hover over it, and select **Add**. UUID-21196c9b-f4b2-5e08-0358-91e0f8359832 On the *Exports* page, select the name of the added export to set it up. Select **Add Destination** and choose the needed destination from the **Destination** dropdown. You can choose any standard flat-file destination option, such as *Productsup Server* or *SFTP/FTP/FTPS Server*. Give it a name as desired and select **Save**. Go to **Dataflow** from the site's main menu and choose the added export from the dropdown on the left. Map the attributes from import to export. The blue attributes are mandatory. UUID-c18c5d16-9df7-a39f-5bba-4606b0f067ec Go to **Data View** from your site's main menu and choose *Productsup Green Claims Checklist* from the dropdown on the left. In the **product title** and **product description** attributes columns, select **Analyze**. Alternatively, select the **Overview** dropdown and choose **Core readiness**. UUID-2a1b1c80-556a-f0b0-c436-4915c994acb2 In the right-hand side panel, scroll down to the analyzer test **PUP Green Claims Checklist** to see the percentage of potentially risky words in your data feed. Hover over the pie chart to view the keywords that require scientific evidence from approved third parties. UUID-24577745-6145-5ddb-cd4b-b9e3ba91e3cb Select **Download Analysis** at the top of the Analyzer tests section and select **Download Analysis** from the dropdown to get the report. UUID-df6775c5-4ba8-3bae-7d0d-6119786c6c16 Your internal team responsible for green claims can use the report for further research, checking the green claims against available and up-to-date evidence, editing the product titles and descriptions, or removing potentially risky keywords from your data feed. Then, you can either re-upload the updated data feed in Data Sources or edit the affected products in the existing feed by applying the rule boxes. Potentially non-compliant environmental claims and examples for accepted evidence [#potentially-non-compliant-environmental-claims-and-examples-for-accepted-evidence] If the platform detects potentially risky keywords in your data, ensure that you have the correct and up-to-date licenses in place. To give you some idea of the accepted evidence, see the following examples. The examples primarily focus on key internationally recognized third-party evidence that you can use to validate a specific claim. General claims [#general-claims] The following broad claims require comprehensive third-party certifications or a detailed life-cycle analysis. Claims: *environmentally friendly* / *environmentally-friendly*, *eco-friendly*, *green*, *natures friend* / *natures-friend*, *ecological*, *environmentally correct* / *environmentally-correct*, *sustainable*. Evidence: * ISO [14040](https://www.iso.org/standard/37456.html) or [14044](https://www.iso.org/standard/38498.html): A comprehensive Life Cycle Assessment (LCA) of the product or service, conducted by an independent firm. * [EU Ecolabel (ISO 14024)](https://environment.ec.europa.eu/topics/circular-economy/eu-ecolabel_en), [UL ECOLOGO](https://www.ul.com/), or [Green Seal](https://greenseal.org/green-seal-standards/development/#:~:text=ISO%2014024%3A%20Environmental%20Labels%20and,Environmental%20Labelling%20%E2%80%93%20Principles%20and%20Procedures): A certification that verifies that a product has a significantly lower environmental impact throughout its life cycle. * [Nordic Swan Ecolabel](https://www.nordic-swan-ecolabel.org/): A well-respected ecolabel that certifies the environmental friendliness of a product. Climate and carbon claims [#climate-and-carbon-claims] The following claims require support with verifiable data on emissions and credible offsetting projects. Claims: *climate friendly* / *climate-friendly*, *carbon friendly* / *carbon-friendly*, *climate positive* / *climate-positive*, *low carbon footprint* / *low-carbon-footprint*, *CO2 neutral* / *CO2-neutral*, *emission-neutral* / *emission-neutral*, *emission free* / *emission-free*, *compensated emissions* / *compensated-emissions*. Evidence: * [ISO 14067](https://www.en-standard.eu/une-en-iso-14067-2019-greenhouse-gases-carbon-footprint-of-products-requirements-and-guidelines-for-quantification-iso-14067-2018/?gad_source=5\&gad_campaignid=22489671069\&gclid=EAIaIQobChMI-5zGppHvjwMVF5CDBx1RGydYEAAYAiAAEgJ35vD_BwE): A verified Product Carbon Footprint (PCF) study by a third party. * [GHG Protocol](https://ghgprotocol.org/#:~:text=Learn%20more-,Standards%20%26%20Guidance,Tools%20%26%20Resources): A corporate standard for measuring and managing greenhouse gas emissions. * [Carbon Offsetting Certifications](https://carbonoffsetcertification.com/): Verification of carbon credits by a recognized standard, such as the Gold Standard or Verra. You must support claims, such as CO2-neutral, with a robust plan for emission reduction in addition to offsets. For example, PAS 2060. * [PAS 2060 Specification](https://www.en-standard.eu/pas-2060-2014-specification-for-the-demonstration-of-carbon-neutrality/?gad_source=5\&gad_campaignid=22489671069\&gclid=EAIaIQobChMI6pPR7pDvjwMVBJODBx0X2y6qEAAYASAAEgJ9D_D_BwE): A globally recognized and highly detailed framework for achieving and demonstrating carbon neutrality. * [CarbonNeutral certification](https://www.climateimpact.com/business-solutions/expert-advice/climate-claims/carbon-neutral-certification/#:~:text=The%20CarbonNeutral%20Protocol%20provides%20a,scientific%2C%20policy%20and%20business%20developments.): A certification provided by Climate Impact Partners and based on a well-defined and rigorous framework called the CarbonNeutral Protocol. This protocol is a globally recognized standard that outlines a clear process for companies to achieve and maintain carbon neutrality. Material and resource claims [#material-and-resource-claims] The following claims require specific third-party certifications that verify the composition and origin of materials used in products. Claims: *biodegradable*, *biobased*, *recycled materials*. Evidence: * Biodegradable: A certification from institutions, such as TÜV Austria ([OK biodegradable](https://www.tuvsud.com/en-us/industries/consumer-products-and-retail/biodegradable-packaging-certification#:~:text=EN%2013432%20%2D%20Biodegradable%20Packaging%20Certification,Biodegradable%20Packaging%20Certification)), [TÜV Rheinland](https://www.dincertco.de/din-certco/en/main-navigation/products-and-services/certification-of-products/packaging/biobased-products/), \[DIN CERTCO]\([https://www.dincertco.de/din-certco/en/main-navigation/products-and-services/certification-of-products/environmental-field/industrial-compostable-products/#:\~:text=DIN%20CERTCO%20coop%C3%A8re%20avec%20l'association%20ABA%20(Australasian%20Bioplastics%20Association,EN%2013432)](https://www.dincertco.de/din-certco/en/main-navigation/products-and-services/certification-of-products/environmental-field/industrial-compostable-products/#:~:text=DIN%20CERTCO%20coop%C3%A8re%20avec%20l'association%20ABA%20\(Australasian%20Bioplastics%20Association,EN%2013432\)), or [Biodegradable Products Institute (BPI)](https://bpiworld.org/), following standards, such as EN 13432. * Biobased: Certification from the \[USDA BioPreferred Program]\(http\:// [https://www.biopreferred.gov/BioPreferred/faces/pages/AboutBioPreferred.xhtml#:\~:text=Consumers%20can%20trust%20the%20label,third%2Dparty%20certified%20and%20strictly](https://www.biopreferred.gov/BioPreferred/faces/pages/AboutBioPreferred.xhtml#:~:text=Consumers%20can%20trust%20the%20label,third%2Dparty%20certified%20and%20strictly)) or TÜV Austria ([OK biobased](https://okcert.tuvaustria.com/ok-biobased-en/)). * Recycled Materials: Certifications from [the Global Recycled Standard (GRS) or the Recycled Claim Standard (RCS)](https://www.tuvsud.com/en/services/product-certification/textile-exchange-certification), which track and verify the content of recycled materials. You can also use [RecyClass](https://recyclass.eu/) and [Cradle to Cradle Certified](https://c2ccertified.org/) as higher-level evidence for recycled content validation. Energy and operational claims [#energy-and-operational-claims] The following claims are validated through third-party labels and audits that focus on a product's or company's energy performance. Claims: *energy efficient* / *energy-efficient*. Evidence: * [EU Energy Efficiency Labels](https://energy-efficient-products.ec.europa.eu/ecodesign-and-energy-label/understanding-energy-label_en): The official EU label for appliances and products verifying their energy consumption rating. * [Energy Star](https://www.epa.gov/vcs/energy-star): An internationally recognized label for energy-efficient consumer products. # Report a platform-related issue to Support import { Step, Steps } from "fumadocs-ui/components/steps"; Best practice [#best-practice] Whenever you notice an issue related to the platform UI, processing, or network, we recommend reporting it to our Technical Support Specialists Team to let them resolve it faster. In this document, you can find a guide to creating a detailed report of an issue. Try to resolve an issue before reporting [#try-to-resolve-an-issue-before-reporting] Resolving an issue yourself is often faster than reporting it and waiting for the Technical Support's response. Before submitting a report, try the following steps that may help you resolve an issue on your end: **Clear cache and cookies**: Clear your browser's cache and cookies to resolve interface glitches caused by the data stored in your browser. **Test different browsers**: Login to the platform in a different browser to see if the issue occurs in a specific browser. **Disable browser extensions**: Temporarily turn off extensions as some of them may interfere with the platform functionality. **Check your network**: Ensure your internet connection is stable. If possible, switch between networks, such as Wi-Fi and mobile data. **Review the platform status**: Check our [Platform status page](https://status.productsup.io/) to learn if there is a platform-wide outage or if updates are in progress. If the issue persists after you take these steps, gather the following information and send a detailed report to the Technical Support Specialist Team. Our specialists will investigate the issue and resolve it efficiently. Prepare the report [#prepare-the-report] To resolve an issue faster, we recommend providing the following information points required for a complete assessment of the issue: . Preconditions. . Steps to reproduce. . Expected result. . Actual result. . First encountered date. You can add console and network logs, screenshots, videos, error messages, and platform links. The following sections provide detailed information about each report component. Preconditions [#preconditions] In the beginning of your report, provide the context for the occurred issue: . **Browser or device**: Does the issue only occur in one browser or device, such as Chrome or Safari? . **User role**: What role are you logged in with, Admin or User? . **Scope**: Is this issue global or specific to certain entities? For example, specific sites, user accounts, or pages. . **Recurrency**: Have you experienced this behavior already? Steps to reproduce [#steps-to-reproduce] Explain how we can recreate the behavior: **Describe your aims**: What page were you on, and what did you intend to do? Provide valuable links and screenshots when applicable. **List the steps precisely as you performed them**: What buttons and fields did you interact with? Example: Go to Exports. Select the Add export button. Expected result [#expected-result] Describe what you expected to happen after completing the steps above. Example: The list of exports opens to let me add an export to the site. Actual result [#actual-result] Describe what happened instead. Was there an error message? Did something fail to load, or was it displayed incorrectly? Example: The Add export button became unresponsive, and the page with the exports didn't open. First encountered date [#first-encountered-date] Provide the date when you first noticed the issue. If this is a new setup or feature, specify whether it has worked before or if the issue occurred from the start. Provide console and network logs for UI issues [#provide-console-and-network-logs-for-ui-issues] It's important to provide console and network logs for issues related to the user interface (UI), such as missing elements or non-functioning buttons. Here’s how to retrieve and share the logs. Retrieve Console logs [#retrieve-console-logs] Open your browser's **Developer Tools** and go to the **Console** tab. Reproduce the issue while keeping the Console open. Once the error occurs, you will see messages in the Console log. Save the log file and attach it to your report. Retrieve Network logs [#retrieve-network-logs] Open your browser's **Developer Tools** again and go to the **Networ**k tab. Reproduce the issue while keeping the Network open. Turn on **Preserve Log** and reload the page. Once the issue occurs, export or save the log as HAR. Attach it to your report. Additional information for your report [#additional-information-for-your-report] The more information the Technical Support team has, the quicker they can help. Attach the following additional data to your report: . **Screenshots or screen recordings**: Take a screenshot or video of the issue and include it in your report. . **Error messages**: If an error message appears, include the exact text of the message. . **Platform links**: Copy the link to the pages where the issue occurred. Submit your report [#submit-your-report] Once you have gathered the above information and attachments, submit your report to [support@productsup.com](mailto:support@productsup.com). Our Technical Support Specialist Team will review your submission and follow up with the next steps. # Create the right prompt for the AI Twig generator Best practice [#best-practice] Some rule boxes in the platform, such as *Text Template* and *Text Template with List*, let you use Twig. Twig is a template engine based on PHP that lets you add dynamic content in the template. See [Replace values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/replace-values#section-idm234583413526659) and [Replace values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/replace-values#section-idm353458342433778) for more details about the rule boxes. If you need a suggestion for a possible Twig, use our AI-based Twig generator available in the rule boxes. To get the necessary Twig, you need to describe your goal, enter some data examples and the desired result. However, some cases need more precise prompts. To make the AI-generated Twig suggestions more accurate, we recommend using the following prompt examples. Use currentValue to refer to the selected attribute value [#use-currentvalue-to-refer-to-the-selected-attribute-value] When you need to refer to the value of the attribute to which you add a rule box or condition, use `currentValue` to introduce the attribute value in the prompt. You must enter the needed value in double quotes ("Some value") keeping in mind that it is case-sensitive. | Prompt example | Answer | | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | | I would like to display "This is not e-coffee" if the currentValue is "N", and "This is e-coffee" if the currentValue is "Y". | `{% if currentValue == 'N' %} This is not e-coffee {% elseif currentValue == 'Y' %} This is e-coffee` | Here is how it looks in the Twig generator: UUID-b60151c8-7b86-560f-af57-3f87d010540c Then, you can copy the answer and paste it in the rule box. Refer only to the attributes from the previous stage [#refer-only-to-the-attributes-from-the-previous-stage] If you need to insert values from other attributes into the text template created by Twig, you can only refer to the attributes from the previous stage: * If you add a rule box with Twig between the import and intermediate stages, you can only refer to an attribute from the import stage. * If you add a rule box with Twig between the intermediate and export stages, you can only refer to an attribute from the intermediate stage. When creating a prompt in the Twig generator of a rule box, you must enter the names of the attributes exactly as they are in the previous stage. | Prompt example | Answer | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | | I currently have two variables called "price\_import" and "stock\_import". They contain prices and stock, respectively. I would like to display "Best seller" if the price is above 16 and the stock is more than 0. | `{% if price_import > 16 and stock_import > 0 %} Best seller{% endif %}` | UUID-17335ff5-706b-6273-4e54-ef83b73f432f Remove excessive spaces in the strings created with Twig [#remove-excessive-spaces-in-the-strings-created-with-twig] When the *Text Template* rule box with Twig inserts strings in the attributes, OpenAI creates additional spaces at the beginning and end of the string. To remove spaces, apply the rule box **Remove Spaces at Beginning and End (Trim)** right after the rule boxes *Text Template* or *Text Template with Lists*. UUID-eea3546e-8829-233d-3e97-671e931b3910 # Dashboard at the organization, project, and site level import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Dashboards provide a comprehensive overview of your sites' performance, including the number of imported and exported items, site run times, export readiness scores, warnings, and errors during site runs. Each level (organization, project, and site) has its own dashboard that you can access by selecting **Dashboard** in the main menu. Organization dashboard [#organization-dashboard] The dashboard at the organization level provides an overview of errors and warnings from all your projects and sites. To access the organization dashboard, take these steps: Go to the organization level in one of the following ways: 1. Select your organization name at the top of the main menu (highlighted in red). 2. Select your organization name in the breadcrumbs (highlighted in blue). 3. Go directly to the link ending with your organization ID, for example, `https://platform.productsup.com/overview/account/123456`. UUID-ee0b693c-ee98-f447-42eb-5c6b76119d5c Select **Dashboard** in the main menu. UUID-8ad62b85-bd1d-bbed-01f4-fea2b22152bc Project dashboard [#project-dashboard] The dashboard at the project level provides an overview of errors and warnings from all sites belonging to one project. To access the project dashboard, take these steps: Go to the organization level in one of the following ways: 1. Select your organization name at the top of the main menu (highlighted in red). 2. Select your organization name in the breadcrumbs (highlighted in blue). 3. Go directly to the link ending with your organization ID, for example, `https://platform.productsup.com/overview/account/123456`. UUID-ee0b693c-ee98-f447-42eb-5c6b76119d5c Select the name of the project whose dashboard you want to view. Select **Dashboard** in the main menu on the project level. UUID-0600c4bf-d85a-ec44-7e02-e1c4d2aff77d Site dashboard [#site-dashboard] The dashboard at the site level provides an overview of an individual site's most important metrics. It provides quick access to the features that let you fix errors and improve your data feed. To access the site dashboard, go to the needed site. By default, you land in **Dashboard** when you open a site from the project or organization level. UUID-04443096-031c-2315-4886-ede42824d7f1 The site dashboard consists of the following sections: * Status bar * Summary tiles * *Core readiness score* tile * *Site run times* tile * Import and export history graphs Status bar [#status-bar] The status bar gives you a quick impression of your sites' vitals without going into too much detail. When you've just created a new site and haven't set up data sources or exports yet, the status bar shows your next steps: UUID-c5967a37-7fa9-1499-a28e-e313f267823f When you set up your data sources and exports and start running your site, the status bar shows one of the following messages after each site run: * A green status bar means that the last run was successful, and you don't need to take any actions. UUID-f9635cab-d148-3b2b-24f0-2ccb54226f47 * An orange status bar means that some warnings occurred during the last run, and you need to check the error log for more information. In the warnings and errors tile, you can see the number of warnings and check them in detail by selecting the link **View error log**. UUID-8a029356-92ef-7cbb-10ad-2075ded2718e * A red status bar means that some errors occurred during the last run, and you need to check the error log for more information. The presence of errors means that the last run failed. In the warnings and errors tile, you can see the number of errors and check them in detail by selecting the link **View error log**. UUID-65ff2782-0c4c-4d25-d9a4-ef61fc8b041e On the right of every status bar, you can see the date and time of the last run and the next scheduled run. A red exclamation mark appears between the last and next run if no export or destination is active. Hover over it to see the explanation. Then, go to **Exports** to activate your export or destination. UUID-fd7ee637-2522-8873-fbe4-c1df15ebdf03 Summary tiles [#summary-tiles] Below the status bar, you can see three tiles giving you a snapshot of the most critical site metrics: | The *Imported items* tile shows the number of imported items. The number below shows the difference from the previous run and if it increased or decreased. UUID-aafa25d6-3f52-04bb-22e4-664d95b66af2 | The *Exported items* tile shows the number of exported items. The number below shows the difference from the previous run and if it increased or decreased. UUID-25163734-7bdc-8f39-5fb6-74c01f5045c6 | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | The warnings and errors tile shows the number of warnings and errors during the last run. The numbers below show the difference from the previous run and if it increased or decreased. You can see the number of errors by severity level on the right side. To see more details on warnings and errors, select the link **View error log**. See [Error log codes and troubleshooting overview](/docs/help-center/get-started/manage-your-organization-projects-and-sites/error-log-codes-and-troubleshooting-overview#section-idm4561627972396834076900327913) for information on Error Log codes. UUID-e8b842bf-b62d-fc27-d789-d1aaf4059947 | | Core readiness score tile [#core-readiness-score-tile] The *Core readiness score* tile shows the percentage of attributes that pass analyzer tests for every export set up and activated in your site. In this tile, the dashboard displays only exports that have analyzer tests. UUID-a4ff8717-9e7b-60a2-287c-93e86626181e To see a newly added export in the *Core readiness score* tile, you need to: . Set up and activate a destination. . Map attributes to the new export in Dataflow. . Do one of the following: * Start a full site run. It should finish without errors for the dashboard to display the new export in *Core readiness score*. * Export the newly added export only. This partial export run should finish without errors for the dashboard to display the new export in *Core readiness score*. * Go to **Data View**, switch to **Full View** in the top toolbar, and then select **Refresh**. Site run times tile [#site-run-times-tile] The *Site run times* tile shows how long it took to complete the last run, with a breakdown of each part of the run: importing, processing, and exporting. This tile shows both partial and full site runs. In the chart, you can see the overall duration of the run. To the right, you can see a breakdown of the run and deviations from the previous run. Below the chart, the tile breaks down a number of previous site runs with detailed timing for each part of the run and the date when the run took place. If you see a hyphen `-` in a column dedicated to a specific part of a run, it means the run didn't involve this process. UUID-54e5c44e-c196-cb68-4593-2250d53f8ce4 Import and export history graphs [#import-and-export-history-graphs] Before analyzing the information provided in the import and export history graphs, you can use the following graph controls: UUID-62e4d70e-b60d-fa96-f4cb-86d18aee9f5b * **20 runs** displays a graph for the last 20 runs of this site. * **100 runs** displays a graph for the last 100 runs of this site. * **Show only full runs** displays both full and partial site runs in the graph if turned off. If set to on, it removes partial runs from the graph. The *Import history overview* graph visualizes how the number of imported items changed over time. To get more details on a specific import, you can: Select a specific vertical bar on the graph to open a tooltip. Green bars mean successful import runs, and red bars mean import runs with errors. The tooltip shows the run's type, date, time, and the number of imported items. In case of a red bar, you can also see the number of errors and the link **View in Error Log** that takes you to the errors of this specific run in Error Log. UUID-79bff25c-5d17-16ce-c373-81a804b5e6cf Select **View import history** to open the *Import History* tab in Data Sources for a complete overview of the site's imports. UUID-61164efb-33f4-85f9-ed93-2249304a6bc7 The *Export history overview* graph visualizes how the number of exported items changed over time. To get more details on the specific export run, you can: Select a specific export from **All exports** to focus on its stats. UUID-49316086-3552-94ca-0356-6d4ef0df1be1 Select a specific vertical bar on the graph to open a tooltip. Blue bars mean successful export runs, and red bars mean export runs with errors. The tooltip shows the run's type, date, time, and the number of exported items. In case of a red bar, you can also see the number of errors and the link **View in Error Log** that takes you to the errors of this specific run in Error Log. UUID-347079e4-ab15-2600-3b12-48a0d49ec6d0 Select **View export history** to open the *Export history* tab in Exports for a complete overview of the site's export runs. UUID-965c4450-2cd6-20bd-7209-c531d7404755 # Set up scheduling and triggering processes in Scheduling import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Scheduling feature in Productsup enables you to create schedules and trigger events to let your sites run automatically based on the desired conditions. In Scheduling, there are 2 tabs: . Site Scheduling - Create schedules to choose when your site should run. UUID-f1070215-fa1e-e8d2-05d7-c512ab416cfc . Triggering - Choose which events in other sites should trigger the runs of your current site. UUID-8b77b66d-7f63-6c36-bd35-73cc05551aab Both trigger events and schedules always start a full site run. A full run imports data from your data sources, optimizes, processes, and sends it to your export channels. You can't set up schedules and trigger events for separate data sources or exports. All scheduling and triggering options always start a full site run. A site can never have 2 simultaneous runs. If you schedule a site or set up a trigger event to make a site run while it is already running, the new run request goes into a queue. Once the current run is over, the next one can begin. Leave enough room between your scheduled site runs to let a site finish its run before starting the next one. Find the Scheduling feature [#find-the-scheduling-feature] To locate the Scheduling feature, do the following: Go to a desired site in your Productsup organization. Open the site's main menu on the left. Select **Scheduling**. UUID-1b1f4cbc-b2ef-5949-1fc8-78557d3af039 Schedule your site runs in Site Scheduling [#schedule-your-site-runs-in-site-scheduling] Create a schedule [#create-a-schedule] Go to **Scheduling** from your site's main menu and select **Add site schedule**.The following *ADD SCHEDULE* menu pops up on your screen: UUID-f1a0403a-5163-60c0-fa0d-6032d05c7b86 Use the *Repeat* section to choose whether you want your schedule to run on a daily, weekly, monthly, or yearly basis: | - Select **Daily** to let the site run every day. UUID-19655458-5912-d7e7-8846-9ddbb2db20ac | - Select **Monthly** to let the site run once every month. UUID-d077a106-3c6a-1de2-25d5-225db7282a85 | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | - Select and then deselect **Daily** to use the day selection field and let the site run on the needed days of the week. UUID-3a07b0bc-0012-7afc-a390-3b336aa14f25 | - Select and then deselect **Monthly** to use the month selection field and let the site run on the needed months. UUID-a3316307-51a9-a73f-a986-e9d08849dc4d | | - Select **Every other day** to let the site run on all odd-numbered days of the month. UUID-e009e44f-317b-6b25-f721-2cdea5ac8f00 | - Select **Yearly** to let the site run once every year. You can later select a specific date. UUID-6094825e-e076-f507-0b41-45c93ced6c5f | Occasionally, the option **Every other day** may cause the site to run on two consecutive days at the end of a month with 31 days. This means that the site runs on the 31st day of the month and then on the first day of the following month. After that, it runs every other day as expected. Select a start date for your schedule based on the chosen cadence: 1. For a daily or weekly cadence, select when your schedule should start running in **Start date**. > Example: it's Friday, March 10, and you want your site to run every hour on Mondays but not on the coming Monday, March 13. In this case, you can set your start date for Monday, March 20. UUID-24498a78-fda6-e568-22f4-590c7802bf9d 2\. For a monthly cadence, select the day of the month when your schedule should run in **Day**. UUID-82e6461a-fb0c-7790-3861-5b8decc45deb 3\. For a yearly cadence, select the day and month when your schedule should run in **Run date**. UUID-0f5fc00b-74bb-7062-9780-d2356ea7a9de Optionally, you can choose the date when a schedule should stop running your site. Open the **End date** calendar, uncheck the box **Never ends**, and select the desired date. By default, schedules don't have an end date. In the *Time of day* section, select the hour or hours of the day when the schedule should start a site run. If you want the schedule to run the site every hour, check the box **Select all**. UUID-b12bc58f-1f87-2b04-9c3f-534852c70bf4 If you need the site to run at a specific minute within the hour, find the *Minutes* section, select **Set fixed minutes**, and enter a number from `0` to `59`. Due to the technicalities of site processing and load balancing, your site may not run at the specific minute entered in this field. Sometimes, the site may run up to five minutes earlier or later than the desired minute. Select **Save**. Above the button, you can see a summary of your schedule. If you need a more elaborate system of schedules to run your sites, you can split the desired site run plan into parts and set up multiple schedules to fulfill your planning needs. See schedule details in Site Scheduling [#see-schedule-details-in-site-scheduling] When you have at least one schedule in the *Site Scheduling* tab, you can select the downward arrow (**˅**) at the end of every schedule row to expand the information and check the schedule details. You can see the following details: * Cadence * Hours and minutes of the runs on a scheduled day * Date and time of the next scheduled run * Schedule status UUID-6a7e45b6-2b91-ed90-f69a-b5a24a05c3b5 Set the timezone and time format [#set-the-timezone-and-time-format] When your site has at least one schedule, you can select the timezone and time format for all schedules of this site. All schedules of one site use the same timezone. To change the timezone, use the **Timezone** drop-down list at the top of the *Site schedules* table. To change the time format to the 12-hour clock, toggle **Use the 24-hour format** to *Off*. UUID-5d30e801-b3cd-68dc-ad13-e8419e67b215 Edit a schedule [#edit-a-schedule] Go to **Scheduling** from your site's main menu. If you want to pause a schedule, toggle **Schedule status** to *Inactive*.If you want to change the settings of a schedule, select the ellipsis icon (**...**) next to the needed schedule and choose **Edit**. Once finished with the new settings, select **Save**. Delete a schedule [#delete-a-schedule] Go to **Scheduling** from your site's main menu. If you want to change the settings of a schedule, select the ellipsis icon (**...**) next to the needed schedule and choose **Edit**. Once finished with the new settings, select **Save**. Select **Delete**. Check the box **I understand and accept the risks associated with deleting this schedule.** and select **Confirm**. UUID-79d4f97c-57a7-48bd-df79-3bf5324cc89d Let other sites trigger your site's runs in Triggering [#let-other-sites-trigger-your-sites-runs-in-triggering] In the *Triggering* tab, you can see the following tables: UUID-88a93dc8-8a80-461e-2df7-61d2b52da711 * **Trigger sites and events affecting this site** - This is a table with a list of trigger events that your current site uses to start its runs. * **Sites using this site as a trigger** - This is a table with a list of trigger events that other sites use to start their runs based on the actions in your current site. To see both tables, you need to create at least one trigger event in two (2) different sites. In the *Triggering* tab, you can add, edit, and delete a trigger event for your current site. You can't edit or delete other sites' trigger events that depend on your current site's actions. The triggered site run counts as syndication and adds to the total sum of the syndication frequency count. Keep it in mind when setting the triggering to escape the syndication frequency overages. See [Usage Data Dashboard and overage calculations](/docs/help-center/get-started/user-management/usage-data-dashboard-and-overage-calculations#section-idm4631468298771233551804415214) for more information. Create a trigger event [#create-a-trigger-event] To let your site run whenever a particular event occurs in a different site, set up a trigger event by following these steps: Go to **Scheduling** from your site's main menu. Open the *Triggering* tab and select **Add trigger event**.The following *ADD TRIGGER EVENT* menu pops up on your screen: UUID-0cabd47f-89b9-35cc-6a79-62c9f5dca9d6 In **Site**, choose a site where the platform should wait for a trigger event to start a run in your current site. You can't select your current site in the **Site** drop-down menu. A trigger event must occur in any site apart from your current one. In **Event**, choose the action that should occur in your trigger site to start a run in your current site. The possible trigger events are: 1. **Job done** - A run finished in your trigger site. 2. **Export \{export name} Done** - A particular export in your trigger site finished sending data to its destination. In **Comment**, you can add a note explaining the logic behind this trigger event for your and other users' reference. Select **Save**. Edit a trigger event [#edit-a-trigger-event] Go to **Scheduling** from your site's main menu. Open the *Triggering* tab and select the ellipsis icon (**...**) next to the needed trigger event to open a context menu. Select **Edit**. Once finished with the new settings, select **Save**. Delete a trigger event [#delete-a-trigger-event] Go to **Scheduling** from your site's main menu. Open the *Triggering* tab and select the ellipsis icon (**...**) next to the needed trigger event to open a context menu. Select **Delete**. Check the box **I understand and accept the risks associated with deleting this trigger.** and select **Confirm**. UUID-7af215aa-806d-6cf3-f4f1-bb0a187970ee # AI Visibility dashboard import { Callout } from "fumadocs-ui/components/callout"; Shoppers increasingly turn to AI assistants such as ChatGPT, Gemini, Perplexity, and Google AI Mode to discover products and brands. The AI Visibility dashboard shows you how visible your brands and product categories are in these AI-generated answers, and helps you turn that insight into actions that improve your future performance. The dashboard monitors how often your brands and categories appear across AI-generated responses, tracks the sentiment of those mentions, and lets you benchmark your performance against your main competitors. How AI Visibility works [#how-ai-visibility-works] Instead of requiring you to create and maintain prompt sets, AI Visibility automatically tracks predefined shopping intents and aggregates visibility data into a single dashboard. Built around shopper intents [#built-around-shopper-intents] Modern AI models understand the intent behind a question rather than its exact wording. The platform continuously evaluates how your brands and categories appear in the background across three shopper intents: | Intent | Example question | | :------------------ | :----------------------------------------------------------- | | Transactional | "Where can I buy this product?" | | Best deal | "Where can I find the best price?" | | Support and returns | "Which retailers offer the best service or return policies?" | This keeps your setup focused on the parts of your business you already know, with no technical configuration required. Supported AI models [#supported-ai-models] The dashboard monitors your visibility across the following AI answer engines: * ChatGPT * Gemini * Perplexity * Google AI Mode You can view your aggregated visibility across all models, or drill down into an individual model to understand differences in performance. Current monitoring focuses on organic AI results. Set up AI Visibility [#set-up-ai-visibility] The AI Visibility dashboard is available on request. To get access, reach out to the Productsup Support team at [support@productsup.com](mailto:support@productsup.com) or your Customer Success Manager. The initial dashboard is configured using your existing catalog data, providing a baseline view of your AI Visibility without requiring any configuration on your part. When your workspace is first created, the platform needs a few days to gather its initial data, and about a week to provide week-on-week tracking data. If needed, the setup can be customized to align with your business priorities. Together with your Productsup representative, you can define: * Product categories to monitor across AI answer engines * Priority brands that are most important to your business * Key competitors to benchmark your AI Visibility against As your business priorities evolve, your Productsup representative can update the monitored categories, brands, and competitors to keep your dashboard aligned with your goals. Read the dashboard [#read-the-dashboard] The dashboard presents your AI Visibility as aggregated insights that you can filter and explore, and you can drill into any brand or category for a detailed view. The platform refreshes AI Visibility data every 7 days. Each refresh adds to your historical record, so you can track how your visibility changes over time. The AI Visibility dashboard, showing the visibility score with its breakdown by AI model, product categories, brands, and sentiment score at the top, a visibility score over time chart, and a top 10 competitors ranking. Visibility score [#visibility-score] The **Visibility Score** shows how consistently your brand appears in AI-generated answers. It is the share of evaluated responses that mention your brand, for example your brand appearing in 1,879 of 11,234 responses. Alongside the score, the dashboard shows how many of your **Product Categories** and **Brands** are represented, and the **Visibility Score Over Time** chart tracks the score across each refresh, so you can see the effect of your optimizations. The **Visibility Score** card also breaks your overall score down by AI model, so you can see how much each engine contributes without switching the model filter one at a time. The card shows each monitored model as its contribution, in percentage points, to your total visibility score. For example, a brand's visibility might come 45% from ChatGPT, 45% from Gemini, and 10% from Perplexity. The breakdown reflects the dashboard's active filters, so it updates when you adjust the time period, shopper intent, product category, brand, or selected models. Filter your results [#filter-your-results] You can filter the dashboard to focus your analysis by: * AI model, to focus on a single engine or compare all of them * Shopper intent, to see performance for transactional, best deal, or support and returns questions * Product category or brand, to focus on a specific part of your catalog * Region and time period, to scope results to a market and date range Sentiment [#sentiment] The **Sentiment Score** shows how AI models describe your brand, on a scale from negative to positive across all responses. Because each refresh records a new score, you can watch sentiment shift after you optimize your product content. Competitor benchmarking [#competitor-benchmarking] Define your competitor set, and the dashboard ranks who AI recommends most in your categories so you can see where your brand stands. The **Top 10 Competitors** view lists each competitor with their visibility, and you can select competitors to compare their visibility against your brand in the **Visibility Score Over Time** chart. The **Top 10 Competitors** view also breaks each competitor's visibility down by AI model, so you can see how much each engine contributes to their presence, the same way the breakdown appears for your own score. Detailed brand and categories page [#detailed-brand-and-categories-page] From the AI Visibility dashboard, select a brand or category in the **Top Brands** or **Top Product Categories** section to open the Detailed brand and categories page. This page lists every monitored brand or category, not only the top entries, and lets you filter and page through the full list to focus your analysis. Select any row to open a detail panel alongside the list. The panel shows the selected brand or category with its **Visibility Score** and **Sentiment Score**, each with its trend against the previous period. It also lists the **Top Competitors** ranked by visibility. The panel groups the questions driving visibility into prompt cards by shopper intent — transactional, best deal, and support and returns — each with its own visibility score. The Detailed brand and categories page: the full list of monitored brands and categories on the left, with a selected row expanded into a detail panel on the right showing its Visibility Score and Sentiment Score with period-over-period trends, a ranked list of Top Competitors, and prompt cards grouped by transactional, best deal, and support and returns intent, each with its own visibility score. Select a prompt card to read the actual AI responses for that question. You can switch between AI models and scroll back through previous refreshes to see how each model's answer changes over time. Turn insights into action [#turn-insights-into-action] Knowing where your visibility is low is only the first step. Because the dashboard is built on top of your feed and catalog data, every metric is also available as raw data that you can combine with your catalog information inside Productsup. This connection lets you move from monitoring to optimization by answering questions such as: * Which categories have low AI Visibility? * Which brands are underperforming? * Are important product attributes missing? * Is FAQ content available? * Are product highlights populated? * Are ratings and reviews being passed? * Are conversational attributes present? Instead of only showing you a problem, the dashboard helps you uncover why it exists and where to act. Use visibility data beyond the dashboard [#use-visibility-data-beyond-the-dashboard] Your raw AI Visibility data is not isolated inside the dashboard. You can: * Combine it with your catalog information * Use it in Data View and Dataflow workflows * Send it to your own or BI systems through the available export destinations This lets you incorporate AI Visibility into your broader analytics and optimization strategies. The AI Visibility feedback loop [#the-ai-visibility-feedback-loop] The dashboard supports a continuous cycle that connects monitoring to catalog improvements: . Monitor your brand and category visibility across AI answer engines. . Identify weak areas and competitive gaps. . Analyze your product data and content quality. . Enrich your products with better attributes, FAQs, reviews, and highlights. . Improve your future visibility across AI-generated answers. Each refresh measures the effect of your changes, so you can repeat the cycle and continue to improve how your brands and products appear in AI-generated answers. Related [#related] * [Agentic Commerce (AI) Exports](/docs/help-center/export-data-feeds/agentic-commerce-ai-exports) # View your site's flowchart in Data Map import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Data Map is a feature in Productsup that visualizes the flow of your product data within a site in an interactive flowchart. It shows the following information: * All main and additional data sources in a site. * All data services in a site. * All exports and destinations in a site. Having a visual overview of where your data is coming from, how it is changed, and where it is exported can help you gain insights into the purpose of each site, quickly access the needed site elements, and identify potential improvements. Locate Data Map [#locate-data-map] To locate the Data Map feature, take these steps: Go to any desired site within your Productsup organization. Open the navigation menu on the left and select **Data Map**. You can find it in the top half of the menu. UUID-f5fc2539-57e4-00ac-9e22-231ec7c45725 Read your site's flowchart in Data Map [#read-your-sites-flowchart-in-data-map] The Data Map feature visualizes your site's import, intermediate, and export stages. It provides information on what data sources and data services upload data to the import stage, what data services add or change your data at the intermediate stage, and what exports and destinations are present at the export stage. To show you how to read your site's flowchart in Data Map, here is a simple example with three data sources, one export, and one destination: UUID-8298943f-7c04-78e9-0ac0-53e7800d3302 Data Map import stage [#data-map-import-stage] All the flowchart elements to the left of the **Import** block illustrate your site's import stage. The white blocks symbolize your data sources, and the gray blocks display the data source type: * Main data sources are connected to the gray block *Append*. Each data source attached to this block adds more products to your site. * Additional data sources are connected to the gray block *Join*. The data sources attached to the *Join* block only add more attributes to the products already existing in your site. See [Enhance your products with additional data sources](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources) for a difference between main and additional data sources. UUID-de851358-31aa-4526-2073-0896f8f8ba9b You can add a new data source right here in Data Map. Select the plus icon UUID-d2a59370-76db-5d87-ec11-b5c4317cccee to the left of the **Import** block to do so. You can select a data source to open a sidebar menu, where you can see the type of your data source, such as *Google Sheets* or *Feed URL*, and use the ***Setup*** link to go directly to the setup page of the chosen data source. UUID-53c59e7b-d66d-f050-2b60-df1804394924 If you choose Data Map to display data services in your site's flowchart, you can see the data services applied at the import stage to the right of the **Import** block. See [Configure the desired flowchart elements](#section-idm234735841581385) to enable data services in your flowchart. You can select a data service to open a sidebar menu, where you can see the type of your data service, such as *GROUP ATTRIBUTES* or *CURRENCY CONVERSION*, and use the ***Setup*** link to go directly to the setup page of the chosen data service. UUID-72d26f75-fd86-819a-4a5f-f1798cd5442d Data Map intermediate stage [#data-map-intermediate-stage] The **Agile Data Record** block symbolizes your site's intermediate stage. You can select it to open the sidebar menu and go to the following places within your site: UUID-0e831154-0fce-2a73-d7af-3d5111529a74 * Select ***Dataflow*** to go to Dataflow. * Select ***Data View*** to go to the intermediate stage in Data View. If you choose Data Map to display data services in your site's flowchart, you can see the data services applied at the intermediate stage to the left of the **Agile Data Record** block. See [Configure the desired flowchart elements](#section-idm234735841581385) to enable data services in your flowchart. You can select a data service to open a sidebar menu, where you can see the type of your data service, such as *GROUP ATTRIBUTES* or *CURRENCY CONVERSION*, and use the ***Setup*** link to go directly to the setup page of the chosen data service. UUID-036339e5-a638-bb8d-1306-f38b3c4caf79 Data Map export stage [#data-map-export-stage] All the flowchart elements to the left of the **Agile Data Record** block illustrate your site's export stage. The stage blocks immediately after the **Agile Data Record** block symbolize the exports added in your site. Each export is then connected to its export destination. UUID-3f12b969-18e7-8675-998e-9d681c577ed5 You can add a new export to your site at the bottom of the export section in Data Map. Select the plus icon in the last block to do so: UUID-f3051cb0-b807-19aa-4917-5a9ebef43b9a You can select any export in the flowchart to go to the following places within your site: UUID-230df20a-9f8f-c327-04f1-bd20f5c6d728 * Select ***Dataflow*** to go to Dataflow. * Select ***Data View*** to go to the chosen export in Data View. * Select ***History*** to go to the *Status* page of the chosen export. * Select ***Settings*** to go to the setup page of the chosen export. * Select ***Reporting*** to go to the chosen export in Reporting. In the *DATA UPLOAD TO* section of the sidebar menu, you can see the added destinations of the chosen export. Select the plus icon UUID-2c85695c-12ca-7f6a-4804-71497be82073 to the left of *DATA UPLOAD TO* in the sidebar menu to go to the export setup page, where you can add a destination. You can select any destination block to open a sidebar menu, where you can see the type of your destination, such as *PRODUCTSUP SERVER* or *FACEBOOK MARKETING API: DATA FEED DELTA*, and use the ***Setup*** link to go directly to the setup page of the chosen destination. UUID-3688a39c-4ce0-d915-7647-b7ec8fe9854a Use the search in Data Map [#use-the-search-in-data-map] In a site with dozens of data sources, data services, exports, and destinations, you may need to find the desired site elements using the search bar at the top of the flowchart in Data Map. The results page opens up in a sidebar menu. If you select a result, Data Map guides you to the respective element in the flowchart and opens its relevant sidebar menu with quick links. UUID-531cc605-396e-c3fc-0188-c756ec2e9145 Configure the desired flowchart elements [#configure-the-desired-flowchart-elements] You can configure how Data Map displays your site's flowchart using the **View** drop-down menu and the scale options in the top-right corner of the page. UUID-abd2e814-fa44-7d93-9f36-c377f0704c8d The default **Fit** option adjusts the flowchart to the size of your screen. Alternatively, you can zoom in or out by choosing **50%**, **100%**, or **200%**. In the **View** drop-down menu, you can choose which flowchart elements you want Data Map to display for your site: * *Flow Animation* animates the flow of your data between site elements. UUID-1a855ca8-ff33-9dde-d29d-81a81a0f5bbe * *Mini Map* adds a miniature version of your flowchart in the bottom-left corner of the page to help you navigate your flowchart. The gray zone in the miniature map shows your current location in the flowchart. UUID-02f01302-3920-5288-df23-62da605929a3 * *Datasources* displays all added data sources in your flowchart. If you uncheck this box, the flowchart shows all data sources as one block. * *Additional Datasources* displays additional data sources in your flowchart. This option is only available if you check the option *Datasources*. * *Inactive Channels* displays all added exports in your flowchart, including inactive ones. Inactive exports don't export any data to their destinations. * *Destinations* displays all added destinations in your flowchart. * *Services* displays all added data services in your flowchart. You can open the **View** drop-down menu and select **Download** to save your site's flowchart as a PNG file to your device. Here is the default view in Data Map: UUID-dcdefbea-55c8-a5d1-d530-c53d201d8265 # API reference import { Card, Cards } from "fumadocs-ui/components/card"; import { Callout } from "fumadocs-ui/components/callout"; Browse Export API endpoints below. Each page renders the live request and response schema for that operation, generated from the OpenAPI specification. Download the [Export API OpenAPI specification](/export-api/openapi.yaml) (YAML) to import into Postman, generate clients, or feed into any OpenAPI-aware tool. Products [#products] Use these endpoints to retrieve and filter exported channel data. See [Filtering](/docs/export-api/filtering) for the full filter, pagination, ordering, and grouping syntax. Legacy [#legacy] These routes are deprecated. Use the [v2 products endpoint](/docs/export-api/api-reference/products/products_list) above instead — it does not require the separate `X-Destination-Id` header. Health [#health] # No Filter import { Callout } from 'fumadocs-ui/components/callout'; No filter [#no-filter] When requesting the endpoint without any explicit filter parameters, the API returns only the first 100 results. Default limit is `100` and offset is `0`. Minimum value for `limit` is `1`; values above `1000` are silently capped to `1000` rather than rejected. URL example [#url-example] ``` /sites/{siteId}/channels/{channelId}/destinations/{destinationId}/products ``` SQL equivalent [#sql-equivalent] ```sql SELECT * FROM data LIMIT 100 ``` Demo request [#demo-request] ```shell curl --location \ --request GET 'https://export-api.productsup.com/sites/522103/channels/302481/destinations/154110/products' \ --header 'X-EA-Auth-Token: kx0g3jwi0121jwj12j1x' ``` **Sample JSON response** ```json [ { "color": "White", "countryCode": "MN", "email": "dallin80@hayes.com", "id": "32f1ce5593d13cb2a36cb57b943eb2b3", "name": "Reymundo Marvin Jr." }, { "color": "DimGrey", "countryCode": "MK", "email": "julianne73@hotmail.com", "id": "d8d84606e8b063240797697f43988a24", "name": "Edythe Murray" }, ... ] ``` # Pagination import { Callout } from 'fumadocs-ui/components/callout'; Pagination [#pagination] The `limit` and `offset` parameters apply to all requests — with or without filtering — and let you paginate through the total product set. The default `limit` is `100` if omitted. The maximum value for `limit` is `1000` — requesting a higher value does not return an error, it is silently capped to `1000`. Request with the `Accept: application/vnd.api+json` header to get a `meta.total` field in the response — the total number of matching records, ignoring `limit`/`offset` — so you know when you've paginated through the full result set. See [Response formats](/docs/export-api/integration#response-formats). URL example [#url-example] ``` /sites/{siteId}/channels/{channelId}/destinations/{destinationId}/products?limit=10&offset=50000 ``` SQL equivalent [#sql-equivalent] ```sql SELECT * FROM data LIMIT 10 OFFSET 50000 ``` Demo request [#demo-request] ```shell curl --location \ --request GET 'https://export-api.productsup.com/sites/522103/channels/302481/destinations/154110/products?limit=10&offset=50000' \ --header 'X-EA-Auth-Token: kx0g3jwi0121jwj12j1x' ``` **Sample JSON response** ```json [ { "color": "Indigo", "countryCode": "GA", "email": "wolff.morton@stoltenberg.net", "id": "d9c5d27054bc192aba88737120fbbd2f", "name": "Keshawn Tillman" }, ... ] ``` # Advanced Filter The advanced filter lets you build complex queries with multiple criteria sets, ordering, and pagination. Advanced filter with multiple criteria, limit, offset, order [#advanced-filter-with-multiple-criteria-limit-offset-order] Filters [#filters] The `filters` parameter is the main entry point into advanced filtering. It takes an array. The following example demonstrates the filter structure: **Advanced filter example 1** ```php [ 'filters' => [ [ 'criteria' => [ [ 'column' => 'name', 'operator' => '=', 'value' => 'Josianne Berge', ], [ 'column' => 'email', 'operator' => '=', 'value' => 'nicolas.estrella@yahoo.com', ], ], ], ], ... ] ``` The `filters` parameter consists of one or more sets of criteria. In the example above, one criterion set is given. Each criterion set must be wrapped in its own array. For each criterion set, you can specify a `mode` that controls how the criterium groups are compared. The `criteria` can consist of one or more criterium groups. In the example above, two criterium groups are given. Each criterium group has the following required attributes: * `column` — A column name. * `operator` — One of the supported operators. * `value` — Any primitive value, including arrays. There is no limit on the number of criteria sets or criterium groups. Additional settings [#additional-settings] At the same level as the `filters` attribute, you can specify additional attributes to control the output: * `mode` — Indicates how the criterium groups are concatenated. Valid values are `AND` (default) and `OR`. * `offset` — The position of the first product in the total product set. * `limit` — The total number of products returned. * `orderBy` — Determines the ordering of products. Values must consist of an existing column and a direction: `ASC` or `DESC`. * `groupBy` — Returns unique values for the grouped column. Value must be an existing column. Supported operators [#supported-operators] The following operators are available for criterium group comparisons: | **Operator** | | ------------ | | BETWEEN | | = | | {'>='} | | {'>'} | | ILIKE | | IN | | IS | | LIKE | | NOT BETWEEN | | != | | NOT ILIKE | | NOT IN | | IS NOT | | NOT LIKE | | {'<='} | | {'<'} | Basic example [#basic-example] ```php [ 'filters' => [ [ 'criteria' => [ [ 'column' => 'id', 'operator' => 'IN', 'value' => ['d25c925622fd6218aae16a8913e73b7d', '32f1ce5593d13cb2a36cb57b943eb2b3'], ], ], ], [ 'criteria' => [ [ 'column' => 'color', 'operator' => '=', 'value' => 'White', ], [ 'column' => 'countryCode', 'operator' => '=', 'value' => 'MN', ], ], 'mode' => 'AND', ], [ 'criteria' => [ [ 'column' => 'name', 'operator' => '=', 'value' => 'Josianne Berge', ], [ 'column' => 'email', 'operator' => '=', 'value' => 'nicolas.estrella@yahoo.com', ], ], 'mode' => 'OR', ], ], 'mode' => 'OR', 'offset' => 0, 'limit' => 10, 'orderBy' => ['color' => 'ASC'], 'groupBy' => null, ] ``` SQL equivalent [#sql-equivalent] ```sql SELECT * FROM data WHERE (id IN ('d25c925622fd6218aae16a8913e73b7d', '32f1ce5593d13cb2a36cb57b943eb2b3')) OR (color = 'White' AND countryCode = 'MN') OR (name = 'Josianne Berge' OR email = 'nicolas.estrella@yahoo.com') ORDER BY color ASC LIMIT 10 OFFSET 0 ``` cURL example [#curl-example] ```shell curl --location -g \ --request GET 'https://export-api.productsup.com/sites/522103/channels/302481/destinations/154110/products?filters[0][criteria][0][column]=color&filters[0][criteria][0][operator]==&filters[0][criteria][0][value]=White&filters[0][criteria][1][column]=countryCode&filters[0][criteria][1][operator]==&filters[0][criteria][1][value]=MN&filters[0][mode]=AND&orderBy[color]=ASC&filters[1][criteria][0][column]=name&filters[1][criteria][0][operator]==&filters[1][criteria][0][value]=Josianne%20Berge&filters[1][mode]=AND&mode=OR' \ --header 'X-EA-Auth-Token: kx0g3jwi0121jwj12j1x' ``` JSON response [#json-response] ```json [ { "color": "White", "countryCode": "MN", "email": "dallin80@hayes.com", "id": "32f1ce5593d13cb2a36cb57b943eb2b3", "name": "Reymundo Marvin Jr." }, { "color": "White", "countryCode": "MN", "email": "brown.aurelia@yahoo.com", "id": "d25c925622fd6218aae16a8913e73b7d", "name": "Prof. Michael Morar II" }, { "color": "White", "countryCode": "MN", "email": "allene62@gmail.com", "id": "a7b12775183a791f43d5a0c86ebf7569", "name": "Arianna Stark DVM" }, { "color": "White", "countryCode": "MN", "email": "shakira.leffler@wolf.net", "id": "19d8130c94318c7da128d88c0d5b25d2", "name": "Reyna Medhurst" }, { "color": "WhiteSmoke", "countryCode": "VU", "email": "nicolas.estrella@yahoo.com", "id": "78f3b1281fd2f3692ca6387fe7899816" } ] ``` Additional examples [#additional-examples] Selecting products with certain colors [#selecting-products-with-certain-colors] The following request selects products with the color Crimson, Aqua, GreenYellow, or Violet. ```shell curl --location -g \ --request GET 'https://export-api.productsup.com/sites/522103/channels/302481/destinations/154110/products?filters[0][criteria][0][column]=color&filters[0][criteria][0][operator]=IN&filters[0][criteria][0][value][]=Crimson&filters[0][criteria][0][value][]=Aqua&filters[0][criteria][0][value][]=GreenYellow&filters[0][criteria][0][value][]=Violet&orderBy[color]=ASC&mode=OR' \ --header 'X-EA-Auth-Token: kx0g3jwi0121jwj12j1x' ``` Selecting all customers with a certain email address [#selecting-all-customers-with-a-certain-email-address] The following request selects all customers with a Yahoo email address. ```shell curl --location -g \ --request GET 'https://export-api.productsup.com/sites/522103/channels/302481/destinations/154110/products?filters[0][criteria][0][column]=email&filters[0][criteria][0][operator]=LIKE&filters[0][criteria][0][value]=%yahoo.com&orderBy[color]=ASC&mode=OR' \ --header 'X-EA-Auth-Token: kx0g3jwi0121jwj12j1x' ``` # Filtering import { Card, Cards } from 'fumadocs-ui/components/card'; import { Callout } from 'fumadocs-ui/components/callout'; You can filter exported data three ways: no filter, simple filtering, and advanced filtering. Without filter parameters, the API returns all products. Simple filtering lets you search for one or more values in a specific column. Advanced filtering lets you build multi-criteria queries. Examples throughout this section use the following schema: ```sql CREATE TABLE IF NOT EXISTS `data` ( `id` TEXT, `color` text DEFAULT '', `name` text DEFAULT '', `email` text DEFAULT '', `countryCode` text DEFAULT '' ); ``` The queryable columns and returned attributes depend on your data schema. # Simple Filter import { Callout } from 'fumadocs-ui/components/callout'; Simple filter by one column [#simple-filter-by-one-column] The simple filter lets you filter results by one or more values for a single column, using `{column}`/`{value}` URL path segments. It cannot be combined with the advanced filter, but the default filter parameters still apply. This shorthand is only available on the **legacy** route (`/{siteId}/{channelId}/{column}/{value}`), which is deprecated and requires an `X-Destination-Id` header. The v2 route (`/sites/{siteId}/channels/{channelId}/destinations/{destinationId}/products`) has no path-segment equivalent — for the same result on v2, use the [advanced filter](/docs/export-api/filtering/advanced-filter) with the `IN` operator instead. URL example [#url-example] ``` /{siteId}/{channelId}/{column}/{value} /{siteId}/{channelId}/{column}/{value1},{value2},{value3},{valueN} ``` SQL equivalent [#sql-equivalent] ```sql SELECT * FROM data WHERE id IN [1,2,3] LIMIT 100 ``` Demo request [#demo-request] ```shell curl --location \ --request GET 'https://export-api.productsup.com/522103/302481/id/32f1ce5593d13cb2a36cb57b943eb2b3,4dc968a1445369fcdfe3d74e7aa045ee' \ --header 'X-EA-Auth-Token: kx0g3jwi0121jwj12j1x' \ --header 'X-Destination-Id: 154110' ``` v2 equivalent [#v2-equivalent] ```shell curl --location -g \ --request GET 'https://export-api.productsup.com/sites/522103/channels/302481/destinations/154110/products?filters[0][criteria][0][column]=id&filters[0][criteria][0][operator]=IN&filters[0][criteria][0][value][]=32f1ce5593d13cb2a36cb57b943eb2b3&filters[0][criteria][0][value][]=4dc968a1445369fcdfe3d74e7aa045ee' \ --header 'X-EA-Auth-Token: kx0g3jwi0121jwj12j1x' ``` **Sample JSON response** ```json [ { "color": "White", "countryCode": "MN", "email": "dallin80@hayes.com", "id": "32f1ce5593d13cb2a36cb57b943eb2b3", "name": "Reymundo Marvin Jr." }, { "color": "DarkRed", "countryCode": "SZ", "email": "gwen.botsford@kiehn.biz", "id": "4dc968a1445369fcdfe3d74e7aa045ee", "name": "Prof. Elna Crist" } ] ``` # Group By Group by filtering [#group-by-filtering] The `groupBy` parameter returns unique values for a grouped column. URL example [#url-example] ``` /sites/{siteId}/channels/{channelId}/destinations/{destinationId}/products?groupBy=countryCode ``` SQL equivalent [#sql-equivalent] ```sql SELECT * FROM data GROUP BY countryCode LIMIT 100 ``` Demo request [#demo-request] ```shell curl --location \ --request GET 'https://export-api.productsup.com/sites/522103/channels/302481/destinations/154110/products?groupBy=countryCode' \ --header 'X-EA-Auth-Token: kx0g3jwi0121jwj12j1x' ``` **Sample JSON response** ```json [ { "color": "Aqua", "countryCode": "AD", "email": "romaguera.stephon@hotmail.com", "id": "956d0602a040bb681c73aa31c2d2eb80", "name": "Lupe Dooley" }, { "color": "Orchid", "countryCode": "AE", "email": "forest.waters@hotmail.com", "id": "78a10711c1a908cd8e6cfd8a30cecfbf", "name": "Prof. Dejah Padberg" }, { "color": "Gray", "countryCode": "AF", "email": "mthiel@hotmail.com", "id": "b429cd881d508952e1d2547e4442ab28", "name": "Anissa Rogahn" }, { "color": "Gold", "countryCode": "AG", "email": "schowalter.sydni@yost.info", "id": "510d7590932074bd32275933037f01d3", "name": "Obie Adams" }, ... ] ``` # PHP SDK import { Callout } from 'fumadocs-ui/components/callout'; The recommended way to interact with the Container API in PHP connectors is the official SDK. It wraps all HTTP endpoints into a typed `ContainerApiInterface`. Installation [#installation] ```bash composer require productsupcom/container-api-client ``` The package is hosted on GitHub. Add the repository to your `composer.json` if you haven't already: ```json "repositories": [ { "type": "vcs", "url": "https://github.com/productsupcom/container-api-client" } ] ``` Setup with Symfony [#setup-with-symfony] Wire the Container API client using factory classes and Symfony's DI container. **Factory classes** — create these to instantiate the Container API client: ```php title="src/ContainerApi/ContainerApiClientFactory.php" 'http://cde-container-api']); } } ``` ```php title="src/ContainerApi/ContainerApiFactory.php" **Service definitions** — register the factories in a config file: ```yaml title="config/packages/container_api.yaml" services: container.api.client: class: GuzzleHttp\Client factory: ['App\ContainerApi\ContainerApiClientFactory', 'create'] container.api: class: Productsup\CDE\ContainerApi\ContainerApi factory: ['App\ContainerApi\ContainerApiFactory', 'create'] arguments: - '@container.api.client' ``` **DI binding** — bind the interface so it can be injected anywhere: ```yaml title="config/services.yaml" services: _defaults: autowire: true autoconfigure: true bind: Productsup\CDE\ContainerApi\ContainerApiInterface $containerApi: '@container.api' ``` Now you can inject `ContainerApiInterface` into any service: ```php public function __construct( private ContainerApiInterface $containerApi, ) {} ``` Key methods [#key-methods] Writing output (data source connectors) [#writing-output-data-source-connectors] | Method | Description | | --------------------------------------- | ---------------------------------------------------------------------- | | `appendToOutputFile(array $item)` | Write a single product | | `appendManyToOutputFile(array $items)` | Write a batch of products (auto-chunks large batches) | | `streamToOutput(\Generator $generator)` | Stream products from a generator — memory-efficient for large datasets | Reading input (export connectors) [#reading-input-export-connectors] | Method | Description | | ------------------------------------ | ------------------------------- | | `yieldFromInputFile()` | Iterate all products one by one | | `yieldBatchFromInputFile(int $size)` | Iterate products in batches | | `countItemsFromInputFile()` | Get total item count | Reading delta input (export-delta connectors) [#reading-delta-input-export-delta-connectors] | Method | Description | | -------------------------- | ------------------------------- | | `yieldFromNewFile()` | Products added since last run | | `yieldFromModifiedFile()` | Products changed since last run | | `yieldFromUnchangedFile()` | Products with no changes | | `yieldFromDeletedFile()` | Products removed since last run | Batch and count variants are also available: `yieldBatchFromNewFile(int $size)`, `countItemsFromNewFile()`, etc. Category specific attributes [#category-specific-attributes] The new, modified, and unchanged yield methods accept an optional `array $options` as their last argument. Pass `['classification-id' => $id]` to filter by a CSA classification: ```php $this->containerApi->yieldFromNewFile(['classification-id' => $classification->id()]); $this->containerApi->yieldBatchFromNewFile(100, ['classification-id' => $classification->id()]); ``` `yieldFromDeletedFile()` and `yieldBatchFromDeletedFile()` reject `classification-id` with `404 Not Found`. The deleted stream is channel-wide — read it once, without the option. Use `listClassifications()` to retrieve all classifications configured for the current channel: | Method | Description | | ----------------------- | ---------------------------------------------------------------------------------------------- | | `listClassifications()` | Return all `Classification` objects for the current channel. Each exposes `id()` and `path()`. | Writing feedback (export connectors) [#writing-feedback-export-connectors] | Method | Description | | ---------------------------------------- | --------------------------------- | | `appendToFeedbackFile(array $item)` | Write a single feedback entry | | `appendManyToFeedbackFile(array $items)` | Write a batch of feedback entries | Logging [#logging] | Method | Description | | -------------------------- | ------------------- | | `info(string $message)` | Log an info message | | `warning(string $message)` | Log a warning | | `error(string $message)` | Log an error | | `debug(string $message)` | Log a debug message | Metadata [#metadata] | Method | Description | | --------------------------- | --------------------------------- | | `showHeaders(string $type)` | Get column names of an input file | | `countItemsFromInputFile()` | Get item count | Keeping up to date [#keeping-up-to-date] Keep the SDK updated to get the latest methods and bug fixes: ```bash composer update productsupcom/container-api-client ``` # Container API import { Callout } from 'fumadocs-ui/components/callout'; What is the Container API? [#what-is-the-container-api] The Container API is an HTTP server that runs as a sidecar container alongside your connector. It is the bridge between your code and the ProductsUp platform — every interaction with the platform (reading data, writing data, logging, storage) goes through it. Each time a connector runs, it gets a **unique Container API instance** that is aware of the context of a particular site. This context awareness means the Container API automatically knows: * Which **site** it belongs to and where to store data * Which **data** it should serve and which data has already been read * Where to send **notifications**, error logs, and feedback files How to access it [#how-to-access-it] The Container API is available at **`http://cde-container-api`** inside the Docker network. It runs on port 80. To use it: . Your connector starts during a site run . Call the Container API at `http://cde-container-api` . Use the endpoints you need for your connector type The Container API is only accessible from inside the ProductsUp infrastructure. You cannot call it from outside the container environment. What you can do with it [#what-you-can-do-with-it] The Container API provides the following capabilities: * **Data I/O** — write product data into the platform (datasource connectors), read product data for export (export/export-delta connectors), and write feedback about export results * **Logging and notifications** — write application logs visible in Dev Portal monitoring, send notifications to the end-user's ProductsUp notification panel, and save structured event logs for auditing * **Storage** — persist files across runs using buckets, store temporary files for the current run, and upload export files to the ProductsUp transport server * **Stream API** — read and write data as individual items through an input/output stream (offset-tracked), one batch at a time, rather than as whole files * **Metadata** — query item counts, column headers, and column order of input files * **Process management** — track the status of asynchronous operations * **Category Specific Attributes** — list CSA classifications for export-delta connectors Notifications panel Data format [#data-format] Input data [#input-data] Products are returned as flat key-value objects. Columns prefixed with `___` (triple underscore) are hidden by default — pass `?show-hidden=true` to include them. ```json { "message": "", "data": [ { "id": "1", "name": "Product Name", "price": "29.99", "___skipped_export": "" } ] } ``` For **export** connectors, the input type is `input` (all products). For **export-delta** connectors, four input types are available: `new`, `modified`, `unchanged`, and `deleted`. Output data [#output-data] When writing products to the output, send them as an array of objects inside a `data` field. Each product should include an `id` field. ```json { "data": [ { "id": 1, "name": "Product Name", "price": "29.99" } ] } ``` Integrating with the Container API [#integrating-with-the-container-api] You can interact with the Container API in two ways: * **[PHP SDK](/docs/connector-development/container-api/php-sdk)** — the official PHP package that wraps all endpoints into a typed interface. Recommended for PHP/Symfony connectors. * **[HTTP API](/docs/connector-development/container-api/http-api)** — call the REST endpoints directly from any language. Use this for Python, Node.js, Go, or any non-PHP stack. Keeping up to date [#keeping-up-to-date] The Container API version is managed automatically by the runtime environment — your connector always runs against the version assigned to it. New versions are released periodically with new features and improvements. Limits [#limits] * **Output file size**: Configurable maximum. Writing beyond this limit returns a `409 Conflict` response. * **Log rate limiting**: Excessive logging returns a `429 Too Many Requests` response. * **Request body size**: Maximum 512 MB per request. * **Batch size**: When reading input in batches, the size must be between 1 and 999. # HTTP API import { Callout } from 'fumadocs-ui/components/callout'; The Container API is a standard REST API at `http://cde-container-api` (port 80). No authentication is needed — it's only accessible from inside the container environment. You can call it from any language using HTTP requests. Each example below shows the **PHP SDK** equivalent alongside the raw **HTTP** request, so you can see what happens under the hood. Write products to output [#write-products-to-output] Used by **data source** connectors to import product data into the platform. **PHP SDK:** ```php $this->containerApi->appendManyToOutputFile([ ['id' => '1', 'name' => 'Product A', 'price' => '9.99'], ['id' => '2', 'name' => 'Product B', 'price' => '19.99'], ]); ``` **HTTP:** ```bash curl -X POST http://cde-container-api/output/output \ -H "Content-Type: application/json" \ -d '{ "data": [ {"id": "1", "name": "Product A", "price": "9.99"}, {"id": "2", "name": "Product B", "price": "19.99"} ] }' ``` **Response** (201): ```json { "message": "Written successfully." } ``` The `data` field is an array of flat key-value objects. Each object represents one product. The optional `meta.separator` field controls how nested keys are flattened (default: `-`). **Endpoint reference:** [Write to output file](/docs/connector-development/container-api/api-reference/write_to_output_file) Read products from input [#read-products-from-input] Used by **export** connectors to read all processed product data from the platform. Read one product at a time [#read-one-product-at-a-time] **PHP SDK:** ```php foreach ($this->containerApi->yieldFromInputFile() as $product) { // process $product } ``` **HTTP:** ```bash # Read the next product curl http://cde-container-api/input/input/next ``` **Response** (200): ```json { "message": "", "data": { "id": "1", "name": "Product A", "price": "9.99" } } ``` Each call returns one product and advances the cursor. When there are no more products, `data` is empty. Call `/input/input/restart` to reset the cursor. **Endpoint reference:** [Read input file](/docs/connector-development/container-api/api-reference/read_input_file_next) Read products in batches [#read-products-in-batches] **PHP SDK:** ```php foreach ($this->containerApi->yieldBatchFromInputFile(100) as $batch) { // process $batch (array of up to 100 products) } ``` **HTTP:** ```bash # Read a batch of 100 products curl "http://cde-container-api/input/input/next_batch?size=100" ``` **Response** (200): ```json { "message": "", "data": [ {"id": "1", "name": "Product A", "price": "9.99"}, {"id": "2", "name": "Product B", "price": "19.99"} ] } ``` Batch size must be between 1 and 999. **Endpoint reference:** [Read input file batch](/docs/connector-development/container-api/api-reference/read_input_file_next_batch) Count items [#count-items] **PHP SDK:** ```php $total = $this->containerApi->countItemsFromInputFile(); ``` **HTTP:** ```bash curl http://cde-container-api/items/input/count ``` **Response** (200): ```json { "message": "", "data": 1500 } ``` **Endpoint reference:** [Items count](/docs/connector-development/container-api/api-reference/items_count_input_file) Read delta input [#read-delta-input] Used by **export-delta** connectors. Instead of a single `input` type, use `new`, `modified`, `unchanged`, or `deleted`. **PHP SDK:** ```php foreach ($this->containerApi->yieldFromNewFile() as $product) { } foreach ($this->containerApi->yieldFromModifiedFile() as $product) { } foreach ($this->containerApi->yieldFromDeletedFile() as $product) { } ``` **HTTP:** ```bash curl "http://cde-container-api/input/new/next_batch?size=100" curl "http://cde-container-api/input/modified/next_batch?size=100" curl "http://cde-container-api/input/deleted/next_batch?size=100" ``` The response format is the same as regular input. Replace `input` in the URL with the delta type. Stream API [#stream-api] Used by **stream** connectors — connectors that exchange data with the platform through the **Stream API** rather than as batch files. Instead of reading and writing whole files, they read **items** from an **input stream** and write items to an **output stream**, one batch at a time, tracking their position with **offsets** so each run picks up where the previous one left off. The Container API proxies these calls to the Stream API and handles authentication, rate limiting, and retries for you. Stream ids are resolved server-side from the run context, so you address the endpoints simply as `input-stream` and `output-stream`. The typical loop is: **read** a batch of items → **process** them → **write** results to the output stream → **commit** the offsets you handled. Repeat until the input reports `complete`. Read items from the input stream [#read-items-from-the-input-stream] Items are returned as **newline-delimited JSON** (`application/x-ndjson`) — one record per line. Each line is one of: `item` (a data record), `complete` (no more items), `incomplete` (the server reached its time budget — call again to continue), or `error`. ```bash curl http://cde-container-api/stream-api/input-stream/items \ -H "Accept: application/x-ndjson" ``` **Response** (200, `application/x-ndjson`): ```json {"item":{"partition":0,"offset":42,"payload":"{\"id\":\"1\",\"name\":\"Product A\"}","headers":{}}} {"item":{"partition":0,"offset":43,"payload":"{\"id\":\"2\",\"name\":\"Product B\"}","headers":{}}} {"complete":{"reason":"eof_reached"}} ``` Read line by line and act on the frame type. On `incomplete`, issue the same request again to resume from where you left off. **Endpoint reference:** [Read input-stream items](/docs/connector-development/container-api/api-reference/stream_api_read_input_stream_items) Read and commit input-stream offsets [#read-and-commit-input-stream-offsets] Offsets track how far your connector has consumed each partition. Read the last committed offsets: ```bash curl http://cde-container-api/stream-api/input-stream/offsets \ -H "Accept: application/vnd.api+json" ``` **Response** (200): ```json { "data": { "type": "consumer-offsets", "id": "", "attributes": { "offsets": [ { "partition": 0, "offset": 43 } ] } } } ``` Commit the offsets you have finished processing so a restart resumes past them (at-least-once). Send the offset of the **next** record to read: ```bash curl -X PATCH http://cde-container-api/stream-api/input-stream/offsets \ -H "Content-Type: application/vnd.api+json" \ -d '{"data":{"type":"consumer-offsets","attributes":{"offsets":[{"partition":0,"offset":44}]}}}' ``` Commit **after** you have written the corresponding output (send-then-commit) — that way a failure only ever redelivers the in-flight batch instead of dropping it. **Endpoint reference:** [Read offsets](/docs/connector-development/container-api/api-reference/stream_api_read_input_stream_offsets) · [Commit offsets](/docs/connector-development/container-api/api-reference/stream_api_commit_input_stream_offsets) Write items to the output stream [#write-items-to-the-output-stream] Send items as **newline-delimited JSON** — one item per line. The HTTP method selects the write mode: | Method | Mode | | -------- | ------------- | | `POST` | Create items | | `PUT` | Replace items | | `PATCH` | Update items | | `DELETE` | Delete items | ```bash curl -X POST http://cde-container-api/stream-api/output-stream/items \ -H "Content-Type: application/x-ndjson" \ --data-binary $'{"id":"1","name":"Product A","price":"9.99"}\n{"id":"2","name":"Product B","price":"19.99"}\n' ``` **Response** (200): ```json { "message": "Items written to output stream." } ``` **Endpoint reference:** [Create](/docs/connector-development/container-api/api-reference/stream_api_write_create_items_to_output_stream) · [Replace](/docs/connector-development/container-api/api-reference/stream_api_write_replace_items_to_output_stream) · [Update](/docs/connector-development/container-api/api-reference/stream_api_write_update_items_to_output_stream) · [Delete](/docs/connector-development/container-api/api-reference/stream_api_write_delete_items_to_output_stream) Delete all items from the output stream [#delete-all-items-from-the-output-stream] To clear the output stream before a full rewrite, delete with `all=true`: ```bash curl -X DELETE "http://cde-container-api/stream-api/output-stream/items?all=true" \ -H "Accept: application/vnd.api+json" ``` Write feedback [#write-feedback] Used by **export** and **export-delta** connectors to report the result of each product export back to the platform. **PHP SDK:** ```php $this->containerApi->appendToFeedbackFile([ 'id' => $product['id'], 'status' => 'success', ]); // Or in bulk $this->containerApi->appendManyToFeedbackFile([ ['id' => '1', 'status' => 'success'], ['id' => '2', 'status' => 'error', 'message' => 'Invalid SKU'], ]); ``` **HTTP:** ```bash curl -X POST http://cde-container-api/output/feedback \ -H "Content-Type: application/json" \ -d '{ "data": [ {"id": "1", "status": "success"}, {"id": "2", "status": "error", "message": "Invalid SKU"} ] }' ``` **Response** (201): ```json { "message": "Written successfully." } ``` Feedback is imported as an additional data source on the next site run, so end-users can see which products succeeded or failed. **Endpoint reference:** [Write to output file](/docs/connector-development/container-api/api-reference/write_to_output_file) (feedback uses the same endpoint with type `feedback`) Log messages [#log-messages] Log messages appear in the [Dev Portal monitoring](/docs/connector-development/dev-portal/monitoring#logs). **PHP SDK:** ```php $this->containerApi->info('Import started.'); $this->containerApi->warning('Skipped 3 products with missing IDs.'); $this->containerApi->error('API returned 503, retrying...'); ``` **HTTP:** ```bash # Log levels: debug, info, notice, warning, error, critical, alert, emergency curl -X POST http://cde-container-api/activity/logs/info \ -H "Content-Type: application/json" \ -d '{ "message": "Import started.", "context": {} }' ``` **Response** (201): ```json { "message": "success" } ``` The `context` field is optional — use it to attach structured data to the log entry. **Endpoint reference:** [Add log](/docs/connector-development/container-api/api-reference/add_log) Send notifications [#send-notifications] Notifications appear in the end-user's notification panel on the ProductsUp platform. **PHP SDK:** ```php $this->containerApi->sendNotification('info', 'Export completed successfully.'); ``` **HTTP:** ```bash # Notification levels: info, notice, warning, error, success curl -X POST http://cde-container-api/activity/notifications/info \ -H "Content-Type: application/json" \ -d '{ "message": "Export completed successfully.", "context": {} }' ``` **Response** (201): ```json { "message": "success" } ``` **Endpoint reference:** [Add notification](/docs/connector-development/container-api/api-reference/add_notification) Health check [#health-check] Verify the Container API is running and ready. ```bash curl http://cde-container-api/ping ``` **Response** (200): ```json { "message": "pong" } ``` **Endpoint reference:** [Ping](/docs/connector-development/container-api/api-reference/ping) Error responses [#error-responses] All error responses follow the same format: ```json { "message": "Validation failed", "errors": { "field_name": "Error description" } } ``` | Status | Meaning | | ------ | --------------------------------------------------------- | | `201` | Write successful | | `200` | Read successful | | `400` | Invalid request — check the `errors` object | | `404` | File not found — wrong input type for your connector type | | `409` | Output file size limit exceeded | | `429` | Rate limit exceeded (logs or notifications) | | `500` | Internal server error | See [Troubleshooting](/docs/connector-development/troubleshooting#runtime-errors) for detailed fixes for each error. Generating a typed client [#generating-a-typed-client] The Container API publishes an OpenAPI specification. You can generate a typed client in any language using tools like [OpenAPI Generator](https://openapi-generator.tech/) or [oapi-codegen](https://github.com/oapi-codegen/oapi-codegen) (Go). For the full endpoint reference, see [API Reference](/docs/connector-development/container-api/api-reference). # January 2026 release notes import { Callout } from "fumadocs-ui/components/callout"; At Productsup, we are continuously working to offer you the best experience with our platform. See the updates and new features we released in January 2026. News about platform features [#news-about-platform-features] Create your own export templates and analyzer tests in the Developer Portal [#create-your-own-export-templates-and-analyzer-tests-in-the-developer-portal] You can now use the **Developer Portal** to create your own export templates if the ones available in Exports don't suit your needs. You no longer have to wait for the Productsup team or even your internal team to build a custom export template for you. You can get access to the Developer Portal and start creating new export templates from scratch without requiring any engineering or technical knowledge. While creating an export template, you give it a name, upload a logo of the channel it is designed for, add mandatory and optional attributes, and assign analyzer tests to your attributes. Previously, you needed to know how to write regex to create analyzer tests. Now, there is no technical knowledge required. You can simply choose a needed type of analyzer test, set it up to validate the desired attribute values, and you are good to go. This update gives you control over your export templates. You can build them as fast as ever and start using them in your sites in a matter of hours or even minutes. You also no longer need to build each custom export based on blank export templates, which means you can reuse your export templates across sites and save time. If you want to try building your own export templates, reach out to your Customer Success Manager to get access to the Developer Portal. Mind that the new analyzer tests are in beta testing. The old analyzer tests that rely on regex are still available. UUID-2ddc1c17-264e-e1c6-e70b-a53784cfcb26 See the number of unique values per attribute in Analyzer [#see-the-number-of-unique-values-per-attribute-in-analyzer] If an attribute should have a limited number of unique values, you can now use the *Distinct Values* section in Analyzer in Data View to see how many unique values an attribute has, without counting each unique value manually or running any additional exports. The *Distinct Values* section in Analyzer also lets you see all unique values present in an attribute and how many items have those values. The number of unique values per attribute is displayed next to the *Distinct Values* section title in Analyzer. UUID-ac4d3585-71a0-bf7c-3fc1-ee3b561da3ee This small update helps to: * Quickly check if unique values in an attribute meet expectations without manual counting or additional exports. * Verify store counts for Google LIA feeds. * Improve confidence in feed correctness, reduce troubleshooting efforts, and go live faster. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view) for more information. Strike-through text formatting is now available in Image Designer [#strike-through-text-formatting-is-now-available-in-image-designer] In Image Designer, you can now use strike-through formatting for both static and dynamic text layers. This helps to visually contrast old and new product prices on promotion- and discount-related images. Strike-through pricing is a proven visual cue for discounted offers, helping highlight price reductions as well as make them more compelling and easier to scale across Image Designer templates without manual workarounds. UUID-9da4cfe7-e2c4-8492-bdc5-5296bcf891c1 See [Add static or dynamic text to your image template](/docs/help-center/map-and-optimize-your-data/image-designer/add-static-or-dynamic-text-to-your-image-template) for more information. Duplicate catalogs in the Content Portal and choose what exactly gets copied [#duplicate-catalogs-in-the-content-portal-and-choose-what-exactly-gets-copied] You can now copy catalogs in the Content Portal to reduce repetitive manual efforts across catalogs and scale product data across multiple countries and business units with ease. It helps you expand efficiently and flexibly, without compromising on control or data consistency. While copying a catalog, you can choose which elements you want to carry over to the new catalog: * Product data * Catalog visibility settings * Invited users * Catalog descriptions * Attribute groups * Attribute categories * Asset attributes * Searchable attributes You can later change all these settings or import new product data to the copied catalog. UUID-9fdfbe17-bd06-468d-187a-b5f95b76622d See [Add and edit a catalog in Content Portal](/docs/help-center/content-portal/add-and-edit-a-catalog-in-content-portal) for more information. News about integrations [#news-about-integrations] New export for the OpenAI API! [#new-export-for-the-openai-api] ChatGPT serves millions of daily users who actively seek product recommendations and shopping advice. By sending your product feed to OpenAI, you can let your catalog reach high-intent shoppers at the exact point when they are getting ready to make purchase decisions. We have released the new export *OpenAI API - Product Feed* to let you optimize your data according to OpenAI product feed specifications and send it to OpenAI via API. Using this export, you can make sure your data works for optimal indexing and discovery within ChatGPT's shopping experiences. UUID-cdd45b12-6594-fe3f-2c96-adcc5af889ec See [Add OpenAI API - Product Feed export](/docs/help-center/export-data-feeds/agentic-commerce-ai-exports/openai-product-feed) for more information. New export for TikTok Shop in France [#new-export-for-tiktok-shop-in-france] TikTok Shop lets shoppers discover products in an organic and entertaining way while consuming engaging content on TikTok. Thanks to in‑app checkout, there is no need to leave the platform anymore to make a purchase, which makes shopping seamless and effective. Last year, TikTok Shop officially launched in France and has quickly attracted thousands of sellers across the country. We are happy to announce that we have released the export *TikTok Shop - Product Catalog API (FR)* to let you send your feeds to the French segment of TikTok Shop. With this latest update, we now support TikTok Shop feeds across 4 markets: * France * Germany * US * UK UUID-38967ed5-8958-da47-9db4-09c083026b88 See [Add TikTok Shop exports](/docs/help-center/export-data-feeds/add-export/add-tiktok-shop-exports) for more information. # July 2026 release notes At Productsup, we are continuously working to offer you the best experience with our platform. See the updates and new features we released in July 2026. News about platform features [#news-about-platform-features] See which AI models drive your visibility score [#see-which-ai-models-drive-your-visibility-score] The *AI Visibility* dashboard now brings model-level performance into one unified view across ChatGPT, Gemini, Perplexity, and Google AI Mode. This makes it easier to understand what's behind your overall visibility score and compare performance across AI engines without switching between filters. Now you can: * See the percentage-point contribution of each AI model to your overall visibility score at a glance.
Visibility score now breaks down LLM contribution at a glance
* Identify models where your brand has a strong presence or is underrepresented. * View the same model-level contribution breakdown for competitors. Competitor level analysis on hover over See [AI Search Visibility dashboard](/docs/help-center/dashboard-and-monitor/ai-search-visibility-dashboard) for more information on AI Visibility. Go deeper into your AI visibility performance with detailed brand and category insights [#go-deeper-into-your-ai-visibility-performance-with-detailed-brand-and-category-insights] The *AI Visibility* dashboard now includes a detailed view for every tracked brand and product category, covering the prompts, responses, sentiment, and competitors behind each visibility score. This closes the gap between a high-level dashboard overview and the specific insights needed to act across ChatGPT, Gemini, Perplexity, and Google AI Mode. Now you can: * Browse the complete list of tracked brands or product categories, not only the highest-ranking entries. View your entire brand or category list with individual visibility scores * View visibility score, performance trend, sentiment score, ranking, and closest competitors in one place for any brand or category. Dive deeper - Analyze top competitors within each brand or category * Review the prompts driving visibility across transactional, best deal, and support and returns intents. View prompts and see how LLMs talk about your brand * See how different AI models responded to each prompt across the selected time period. See [AI Search Visibility dashboard](/docs/help-center/dashboard-and-monitor/ai-search-visibility-dashboard) for more information on AI Visibility. More flexible rulebox conditions with scheduling, list support, and pause controls [#more-flexible-rulebox-conditions-with-scheduling-list-support-and-pause-controls] *Rulebox Conditions* now give you finer control over which products your IF-THEN logic applies to and when it runs. This makes complex rule setups easier to test, troubleshoot, and adjust without rebuilding them. Now you can: * Use *Dynamic Inclusion/Exclusion lists* directly inside *Rulebox Conditions* to control which products a rule applies to. * Schedule conditions to be triggered or evaluated at defined intervals rather than only on manual runs. * Pause and unpause individual conditions without losing your configuration. Rulebox Condition scheduling options See [Apply rule boxes based on conditions](/docs/help-center/add-a-rule-box/apply-rule-boxes-based-on-conditions) for more information. Make attributes mandatory only when they need to be with conditionally mandatory attributes [#make-attributes-mandatory-only-when-they-need-to-be-with-conditionally-mandatory-attributes] Export templates now support conditional attribute requirements, so Productsup validates whether an attribute has a value only when the relevant condition is met. Channel requirements that depend on other attributes are modeled once in the template and checked automatically, surfacing missing values in *Data View* before your products are exported. Now you can: * Set attributes to Conditionally Mandatory in *Export Template Management* based on the value of another attribute using equals, not\_equals, or is\_present logic. Set up Conditionally Mandatory Attributes in ETM (Dev Portal) * Identify affected products with a missing value in *Data View*. Data View flags a conditionally mandatory attribute with a missing value * Review the corresponding validation error in the *Error Log* before channel submission. The Error Log shows the corresponding validation error for that attribute * Let Productsup validate conditional requirements automatically without building additional Analyzer Tests or doing manual cross-checking. See [Conditionally mandatory attributes](/docs/export-template-management/attributes/conditionally-mandatory-attributes) for more information. News about integrations [#news-about-integrations] Keep your Google product feeds running by migrating to the new Google Merchant API before August 18 [#keep-your-google-product-feeds-running-by-migrating-to-the-new-google-merchant-api-before-august-18] Google is retiring its Content API for Shopping on August 18, 2026, and replacing it with the new Merchant API. Productsup now supports the new Merchant API as a destination, giving you a straightforward migration path to ensure your product feeds continue reaching Google without interruption. Now you can: * Switch your existing Google export destination to the new Merchant API destination in Productsup. * Maintain uninterrupted product feed delivery to Google through and beyond the August 18 deprecation date. * Stay aligned with Google's latest API requirements without rebuilding your data setup from scratch. See [Migrate from Google Content API to Merchant API](/docs/help-center/export-data-feeds/add-export/migrate-google-content-api-to-merchant-api-single-account) for more information. Increase AI visibility with Google conversational attributes [#increase-ai-visibility-with-google-conversational-attributes] Productsup now supports Google Merchant Center's Conversational Attributes through a new dedicated channel, allowing you to submit richer product context to Google. Providing this deeper contextual detail increases the likelihood that your products are discovered and recommended across AI-driven shopping surfaces. Now you can: * Send conversational attributes to Google Merchant Center through the new Google Merchant Center Conversational Data channel in Productsup. * Deliver contextual product detail that goes beyond standard attributes to improve discoverability in AI-powered shopping queries. * Position your products for early-mover advantage as Google expands its AI-driven and agentic commerce capabilities. See [Google Conversational Attributes](/docs/help-center/export-data-feeds/agentic-commerce-ai-exports/google-conversational-attributes) for more information. Sell on Walmart Marketplace directly from Productsup [#sell-on-walmart-marketplace-directly-from-productsup] Productsup is now an official Solution Provider at Walmart Marketplace and supports it as a native integration, letting you manage product listings, price and inventory updates, and order data for the US's second-largest marketplace from within the platform. This means no more manual exports or separate tooling to keep your Walmart Marketplace feeds up to date. Now you can: * Create and update standard seller listings and Walmart Fulfillment Services items directly from Productsup. * Manage price and inventory updates via a dedicated integration. * Sync order data alongside product feed management in one place. * Set up and manage the Walmart Marketplace channel consistently with how other marketplace integrations work in Productsup. See [Add Walmart Marketplace product creation export](/docs/help-center/export-data-feeds/add-export/add-walmart-marketplace-product-creation-export), [Set up order sync for Walmart Marketplace](/docs/help-center/export-data-feeds/special-export-setups/set-up-order-sync-for-walmart-marketplace), and [Add Walmart Marketplace price and inventory export](/docs/help-center/export-data-feeds/add-export/add-walmart-marketplace-price-and-inventory-export) for more information. Stay compliant with Amazon's updated product title structure for item name and item highlights [#stay-compliant-with-amazons-updated-product-title-structure-for-item-name-and-item-highlights] Amazon has split product titles into two separate fields — item\_name (up to 75 characters) and the new title\_differentiation attribute, also called Item Highlights (up to 125 characters) — for all listings submitted or updated on or after July 27, 2026. Productsup's Amazon automation now supports both fields across all affected product types, regions, and Seller and Vendor channels, so you can map the new field and keep your listings compliant without rebuilding your setup. Now you can: * Map the new title\_differentiation (Item Highlights) attribute alongside item\_name in your Amazon export setup. * Apply the updated title structure across all affected product types, regions, and both Seller and Vendor channels. * Reduce the risk of rejected listings or suppressed products caused by exceeding Amazon's updated character limits. # November 2025 release notes At Productsup, we are continuously working to offer you the best experience with our platform. See the updates and new features we released in November 2025. News about platform features [#news-about-platform-features] Use Azure OpenAI (Microsoft Copilot) to generate or edit attribute values with the AI data service [#use-azure-openai-microsoft-copilot-to-generate-or-edit-attribute-values-with-the-ai-data-service] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > We’ve expanded the settings of the AI data service **Custom Prompt With Dynamic Values** to support Microsoft Copilot (Azure OpenAI). The data service Custom Prompt With Dynamic Values generates or transforms your values by sending your custom prompts from Productsup to the selected AI tool. Now, you can select Azure OpenAI (Microsoft Copilot) or standard OpenAI, depending on your organization’s setup, compliance needs, and licenses. We added two additional parameters to the data service setup page. You will need to provide the base URL and API version of your Azure OpenAI API during the data service setup. UUID-fbff78a6-b749-4080-b936-92b4e18b243c This improvement lets you configure the AI provider without workarounds or custom code. See [Generate or transform values with the data service Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/generate-or-transform-values-with-the-data-service-custom-pr) for more information. # March 2025 release notes import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; At Productsup, we are continuously working to offer you the best experience with our platform. See the updates we released in March 2025. Actions related to user-generated attributes are now visible in Activity Log [#actions-related-to-user-generated-attributes-are-now-visible-in-activity-log] > > **Available for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > Besides tracking the changes in your sites related to Dataflow connections and rule boxes, you can now use Activity Log to see when and who adds, edits, and deletes user-generated attributes. This ensures greater transparency of user actions in your sites, enhances accountability, and delivers complete visibility into changes related to user-generated attributes. A user-generated attribute is an attribute users can create in the intermediate and export stages in Dataflow. See [Create new attributes](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export#section-idm4605326417364832706742715884). To learn more about each change, you can select it and open a pop-up window that lets you know what organization, project, site, and stage the chosen change relates to. See [View your Activity Log and Summary](/docs/help-center/get-started/manage-your-organization-projects-and-sites/view-your-activity-log-and-summary) for more information. Merge Variants data service doesn't let you choose a merging attribute with empty values [#merge-variants-data-service-doesnt-let-you-choose-a-merging-attribute-with-empty-values] > > **Available for:** > > > > Admins > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > While setting up the *Merge Variants* data service, you used to be able to select attributes with empty values to merge product variants by, which led to significant spikes in site processing times. To help you avoid causing site processing problems with incorrect data service setups, we have added an error message in the *Merge Variants* data service that doesn't let you save a setup with an empty merging attribute. The platform shows the error message if you take the following steps: Select **Add Merge Column** on the data service setup page. In **Source Columns**, choose an attribute where all values are empty. Select **Add**. UUID-21fbd092-3e0e-6ddc-31cc-6d8dc0825b63 See [Combine product variants into one parent item with the Merge Variants data service](/docs/help-center/map-and-optimize-your-data/data-services/combine-product-variants-into-one-parent-item-with-the-merge) for more information. # May 2025 release notes At Productsup, we are continuously working to offer you the best experience with our platform. See the updates and new features we released in May 2025. News about platform features [#news-about-platform-features] File size and compression in the Resize Image rule box for better image optimization [#file-size-and-compression-in-the-resize-image-rule-box-for-better-image-optimization] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > Many third-party channels where you export your data from Productsup require images under specific file sizes or compression standards for optimal performance. We enhanced the *Resize Image* rule box to let you define compression levels and file size to meet the specified limits. This enhancement reduces post-processing time, prevents rejections due to file size issues, and ensures better performance. We added two fields to the Resize Image rule box: * **Quality (0-100)** lets you define the JPEG compression level from 0 to 100% to balance image clarity and file size. * Alternatively, **JPEG Size Limit (KB)** lets you set a maximum output file size. UUID-86097ad7-73d2-0636-76fd-2b05304e8dc8 See [Edit image](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/edit-image) for more information. Three OpenAI models in AI data services for customized performance [#three-openai-models-in-ai-data-services-for-customized-performance] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > Now you can choose a needed OpenAI model when configuring any AI data service in Productsup: *Custom Prompt With Dynamic Values*, *Shorten Text*, *Lengthen Text*, or *Create Text from Attributes*. You can choose the AI model for your specific use case, whether you need faster responses, more advanced reasoning, or compliance with internal AI usage guidelines. The available models are: * gpt-3.5-turbo. * gpt-4o. * gpt-4o-mini. UUID-fb688c49-ec36-443d-64bc-fdd8d86e1659 New attribute-based search among multiple sites to streamline your workflow [#new-attribute-based-search-among-multiple-sites-to-streamline-your-workflow] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > If you need to update or remove specific attributes and have multiple sites containing the same attributes, you don't need to check each site manually. Use the search field in the Project Overview page to get a list of all sites containing the required attributes. You can search the sites by: * specific attributes. * connection between the attributes in different stages. You can use the following request template: **stage**: **attribute\_name -->** for connected attributes or **attribute\_name -/>** for not-connected attributes. For example, if you want to find the sites where the **image** attribute in the import stage has a connection to the **image** attribute in the intermediate stage, enter the following search request: `import: image --> image`. UUID-558c8cdf-d170-937b-0a5a-00f6a2571ac3 See [Your Productsup organization](/docs/help-center/get-started/manage-your-organization-projects-and-sites/your-productsup-organization) for more information. News about integrations [#news-about-integrations] New Microsoft SharePoint destination for all BMECat exports [#new-microsoft-sharepoint-destination-for-all-bmecat-exports] > > **Relevant for:** > > > > All users > > > > in > > > > Retailer and distributor channels > We enabled a new MS SharePoint destination for the channels where the output file is in XML format, such as BMECat. You need to provide Client ID, Secret, Tenant ID, and Upload File URL in the destination settings. The platform will send the output files will to SharePoint that you specified. UUID-ea02124b-da68-ccb2-a801-0e64b336bb82 New Amazon Vendor Central - Product Creation exports for different regions [#new-amazon-vendor-central---product-creation-exports-for-different-regions] > > **Relevant for:** > > > > All users > > > > in > > > > Marketplace channels > Amazon has around 1650 categories, or product types, for each region. Supporting them on demand became time-consuming and complex, so we made them all available in Exports. We now support all product types for the following regions: DE, FR, UK, IT, ES, NL, BE, SE, PL, TR, JP, and AU. You can find a necessary export in Exports by searching for *Amazon Vendor Central - Product Creation (XX)*, where you must change XX into the needed region. UUID-dbdfbf9b-2f2c-dafa-cc59-54943c5297b5 # July 2025 release notes At Productsup, we are continuously working to offer you the best experience with our platform. See the updates and new features we released in July 2025. News about platform features [#news-about-platform-features] Use AI-powered recommendations to choose the needed rule box [#use-ai-powered-recommendations-to-choose-the-needed-rule-box] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > With over 170 rule boxes available in the platform, it can be hard to find the most relevant, especially when some rule boxes serve similar goals. We launched a beta version of **Rule Box Finder** both in Dataflow and Data View. Empowered with AI, the feature lets you increase your productivity while working with the rule boxes. Describe your desired data transformation outcome in the **Describe your goal** field and get all possible recommendations of rule boxes, including those that use Lists. Each recommendation provides a short explanation of why it’s a fit and a link to the related Help Center document that guides you through the rule box setup. See [Add a rule box](/docs/help-center/add-a-rule-box#section-id235134644582498) for more information. Quality-of-life improvements for the Content Portal [#quality-of-life-improvements-for-the-content-portal] > > **Relevant for:** > > > > All users > > > > in > > > > Retailer and distributor channels > We rolled out several quality-of-life updates to the Content Portal, inspired by your active feedback: . Now you can reorder groups as desired by dragging and dropping in the *Attribute Groups* page in the *Catalogue* settings. . Product specifications now use full page width. We repositioned the product description to provide for a more balanced layout. UUID-a7c782a9-bd75-f9e9-8bf8-8273c730a26d . The *Product details* page now has better visual representation of the attribute names and values. UUID-f27b53b1-0552-4104-f5a1-ff9ea824100b . Category filters now have the **Collapse/Expand all categories** switcher for better navigation. UUID-bbc4ea60-93e5-25db-3ed6-08314cc67783 . Asset thumbnails now only appear when content is available – no more blank spaces or endless scrolling to spot usable visuals. See [Content Portal](/docs/help-center/content-portal) for more information. # August 2026 release notes At Productsup, we are continuously working to offer you the best experience with the Productsup family of products and services. Here's what happened in August 2026. News about platform features [#news-about-platform-features] See how any brand stacks up in AI search with the Industry Benchmark [#see-how-any-brand-stacks-up-in-ai-search-with-the-industry-benchmark] AI Visibility now includes a free Industry Benchmark experience, accessible to all Productsup users from the platform's left-hand navigation. The benchmark shows any brand's visibility, sentiment, and share of voice in AI-generated responses, measured against competitors in a selected industry and market. Powered by a large set of industry-specific prompts across multiple AI experiences, it reflects the real questions consumers ask when discovering, comparing, and evaluating products. Now you can: * Enter any brand, select an industry, and choose a market to generate an instant AI visibility benchmark * Compare a brand's share of voice and sentiment against competitors in AI-powered discovery * Access the benchmark without any paid add-on, using the shared link or the AI Visibility section in the platform AI Visibility Industry Benchmark dashboard showing brand visibility, sentiment, and share of voice across AI models Filter, triage, and preview product data more reliably in Data View [#filter-triage-and-preview-product-data-more-reliably-in-data-view] A set of Data View improvements makes your day-to-day work with product data smoother. New filtering and Readiness report options make it easier to focus on the products that need attention, while clearer test indicators and more reliable image loading improve the overall experience. Now you can: * Filter across multiple SKUs, IDs, EANs, or any other attribute values simultaneously using the new "In" filter option New "In" option in filters * Switch between All, Failing, Passing, and No tests views in the Readiness report to focus on products that need attention Readiness report: new quick filters and clear '0 tests' indication * Distinguish at a glance between attributes with no validation tests assigned and attributes that have genuinely failed * View product images reliably across large result sets without intermittent placeholder errors See [Analyze your data in Data View](https://help.productsup.com/docs/help-center/map-and-optimize-your-data/analyze-optimize-and-visualize-your-data-in-data-view/analyze-your-data-in-data-view) and [Optimize your data in Data View with rule boxes](https://help.productsup.com/docs/help-center/map-and-optimize-your-data/analyze-optimize-and-visualize-your-data-in-data-view/optimize-your-data-in-data-view-with-rule-boxes) for more information on working with Data View. News about integrations [#news-about-integrations] Simpler Amazon offer management for resellers who don't need full listing control [#simpler-amazon-offer-management-for-resellers-who-dont-need-full-listing-control] Amazon resellers who sell on existing listings rather than creating and managing full product pages now have a dedicated, streamlined path in Productsup. New offer-only export templates and a dedicated connector remove fields and configuration steps that aren't relevant to offer-only selling. An Amazon offer contains your price and availability for an existing listing, without requiring you to manage the full product detail page. Now you can: * Set up and submit Amazon offers using dedicated offer-only export templates, without fields required for full listing management. * Simplify your setup by skipping the Catalogue Service Application (CSA) route and its field mapping requirements. * Manage offer-only exports across supported Amazon regions using region-specific templates. See [Add an Amazon offer creation export](https://help.productsup.com/docs/help-center/export-data-feeds/add-export/add-amazon-offer-creation-export) for more information. Find Amazon ASINs automatically using your own product identifiers [#find-amazon-asins-automatically-using-your-own-product-identifiers] Resellers who know their products by GTIN or UPC can now find the corresponding Amazon ASIN directly in Productsup. A new Amazon data source automatically retrieves the matching ASIN and associated product data, removing the need to look up and transfer this information manually. Now you can: * Look up Amazon ASINs automatically by supplying a GTIN or UPC in Productsup. * Bring the matched ASIN and associated product data directly into your offer creation workflow. * Get the Amazon identifiers you need to create and manage offers on existing listings without manual lookup outside Productsup. See [Find Amazon ASINs by barcode](https://help.productsup.com/docs/help-center/import-data-feeds/import-data-from-third-party-external-systems/find-amazon-asins-by-barcode) for more information. Keep TikTok Shop prices and inventory up to date without touching your main feed [#keep-tiktok-shop-prices-and-inventory-up-to-date-without-touching-your-main-feed] A new TikTok Shop Price and Inventory export destination lets you update price and stock data independently of your main product catalog feed. This means you can schedule these frequently changing values separately without triggering a full catalog update. Now you can: * Send price and inventory updates to TikTok Shop independently of your main product catalog feed. * Schedule price and stock updates separately from your main catalog exports. * Keep frequently changing price and inventory data up to date without running a full catalog sync. # April 2025 release notes At Productsup, we are continuously working to offer you the best experience with our platform. See the updates and new features we released in April 2025. News about platform features [#news-about-platform-features] New logo now visible across all Productsup apps [#new-logo-now-visible-across-all-productsup-apps] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > Productsup has had a new logo since March 2025, and now the Productsup platform, the Retail platform, the Content Portal, and both Help Centers use the updated company logo. You can see the new logo in a couple of color variations in different locations, such as the login screen, the top of the app switcher panel, the tab icon, the emails sent by the platform, and the logos of some exports. This rebranding lets us go back to the roots of Productsup and unify the arrow in our logo again. This decision symbolizes uniting our company and technology stacks. | UUID-e378f4f5-87c1-1e1d-7dbd-7b43beb367dd | UUID-6e7b4079-8445-b231-631d-90623960a014 | | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | Content Portal is now accessible in the app switcher panel for all users [#content-portal-is-now-accessible-in-the-app-switcher-panel-for-all-users] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Retailer and distributor channels > > > > Supplier onboarding > You can access the Content Portal by choosing the shopping cart icon UUID-a2ae0208-3468-fc59-2a18-ecaaa2b48df3 in the app switcher. If you don't have access to the Content Portal yet, you can now see a description of what this feature does and how it can benefit your company. You can also use the **Learn more** button to visit the Help Center and learn more about the Content Portal. UUID-572d2bfb-020c-265e-9be0-547085fb01df See [Content Portal](/docs/help-center/content-portal) for more information. Error Log shows more information for Amazon errors [#error-log-shows-more-information-for-amazon-errors] > > **Relevant for:** > > > > All users > > > > in > > > > Marketplace channels > The error files in the *Amazon errors* tab of Error Log are now displayed chronologically, with the most recent file at the top. The tab also shows the exact time each file was uploaded into the platform in the *Date & time* column. This should help you troubleshoot your Amazon listings more easily. UUID-10c8bf09-061e-6645-c11c-9b56bf081427 See [Add Amazon Seller Central – Product Creation (US) export](/docs/help-center/export-data-feeds/add-export/add-amazon-seller-central-product-creation-us-export#section-idm234471180838746) for more information. News about integrations [#news-about-integrations] New data source Shopify Products lets you import enriched product data from Shopify using GraphQL [#new-data-source-shopify-products-lets-you-import-enriched-product-data-from-shopify-using-graphql] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Retailer and distributor channels > Shopify is phasing out the use of REST API, which is why we have released the data source *Shopify Products* based on GraphQL. This data source offers enhanced performance and flexibility when importing product data from Shopify. For example, you no longer need to have two separate data source setups to import your data from Shopify because this data source lets you import your product data with more details, including localized content and regional pricing. The new data source also checks your subscription type and allowed quotas automatically. The old data sources based on REST API are still functional, but now they aren't globally available and are called *DEPRECATED Shopify - Product Import* and *DEPRECATED Shopify Plus*. We highly recommend choosing the new GraphQL data source instead of the REST API ones. UUID-18f8ac05-0a0a-5d73-ed7c-fec822b034d4 See [Import products from a shop system](/docs/help-center/import-data-feeds/import-data-from-third-party-external-systems/import-products-from-a-shop-system) for more information. New export Google Things To Do lets you send your activities feed to Google [#new-export-google-things-to-do-lets-you-send-your-activities-feed-to-google] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > Google Things to do is a platform that helps tourism and activity providers show their experiences, such as tours, attractions, and tickets, in Google Search and Google Maps, which allows customers to discover and book activities easily. Now, you can use the *Google Things To Do* export in Productsup to send your activities data to Google. UUID-c6f49ec3-fc6d-d8a7-d17d-fb354aadf6da # October 2025 release notes import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; At Productsup, we are continuously working to offer you the best experience with our platform. See the updates and new features we released in October 2025. News about platform features [#news-about-platform-features] Seamless and secure import of your private Google Sheets [#seamless-and-secure-import-of-your-private-google-sheets] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > We have introduced a new option in the *Google Sheets* data source that lets you import your existing Google spreadsheets. Before, you could import your data feed with Google Sheets only by creating a new document via the Productsup platform. You get the following benefits with the new feature: * You can import existing Google Sheets from a Google Drive connected through our platform's established authentication. * You don't have to make your sensitive, organization-owned Google Sheets public to import them to Productsup. This improvement lets you stay fully aligned with your enterprise security policies. When you set up the Google Sheets data source, you need to: Select the new option **Add an existing spreadsheet source URL**. UUID-83ea2000-5540-78bd-2676-c953195c2152 Copy and paste your Google sheet URL in the **Source URL** section and change the URL from `…/edit` to `…/export`. In the next sprint, we will improve this user experience. For example, change *[https://docs.google.com/spreadsheets/d/123\`/edit\`?pli=1\&gid=123#gid=123](https://docs.google.com/spreadsheets/d/123`/edit`?pli=1\&gid=123#gid=123)* to *[https://docs.google.com/spreadsheets/d/123\`/export\`?pli=1\&gid=123#gid=123](https://docs.google.com/spreadsheets/d/123`/export`?pli=1\&gid=123#gid=123)* The feature only imports data from the first sheet tab within the specified Google Sheet file. You can't import multiple sheets at a time from a single file. In future iterations, we will explore multi-sheet import capabilities. See [Import from Google Sheets](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-from-google-sheets) for more information. News about integrations [#news-about-integrations] Export to TikTok Shop is now available for Germany [#export-to-tiktok-shop-is-now-available-for-germany] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > We support TikTok Shop API integration for the German market, in addition to our existing support for the UK and US markets. You can use the export **TikTok Shop - Product Catalog API (DE)** to send your items to TikTok for the German market. UUID-d92b5b7f-781b-4358-2b8d-ca57f158aa1e This export has category-specific attributes. Currently, Productsup supports only a limited number of categories under *Health & Beauty*. But we can add necessary categories upon request. Contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) to request the necessary categories. See [Add TikTok Shop exports](/docs/help-center/export-data-feeds/add-export/add-tiktok-shop-exports) for more information. # August 2025 release notes At Productsup, we are continuously working to offer you the best experience with our platform. See the updates and new features we released in August 2025. News about platform features [#news-about-platform-features] More flexibility and control with new settings for AI data services [#more-flexibility-and-control-with-new-settings-for-ai-data-services] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > AI data services used to rely on default OpenAI parameters that were limiting our customers in certain cases. Customers working with large datasets often experienced long processing times and a lack of control over the requests. Our AI data services, such as *Custom Prompt With Dynamic Values*, *Shorten Text*, *Lengthen Text*, and *Create Text from Attributes*, are compatible with the latest available version of GPT, which are gpt-5, gpt-5mini, and gpt-5nano. Now we have introduced three new customizable parameters for the AI data services in Productsup: . **Max Response Tokens** lets you set the maximum number of tokens in the AI’s response. It configures max tokens for older models or max completion tokens for newer models. The default value is 2048. See [What are tokens and how to count them?](https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them) for more information. . **Request timeout (seconds)** lets you define the waiting time for a response before the data service stops the attempts. Recommended time is 90 seconds. . **Request concurrency** lets you specify the number of parallel requests to OpenAI. This feature speeds up processing for large datasets. Maximum concurrency depends on your OpenAI subscription terms. UUID-c0c06fd8-4101-8b35-7803-7f87a79bc4e9 With these improvements, you get more control and resilience when working with AI-powered data transformations. Shortening processing times and reducing the risk of failed requests let you scale your operations more smoothly, deliver results faster, and maintain consistent performance, even during the peak of OpenAI usage. See [Shorten, lengthen, or create text from attributes with AI data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/shorten-lengthen-or-create-text-from-attributes-with-ai-data) and [Generate or transform values with the data service Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/generate-or-transform-values-with-the-data-service-custom-pr) for more information. # March 2026 release notes At Productsup, we are continuously working to offer you the best experience with our platform. See the updates and new features we released in March 2026. News about platform features [#news-about-platform-features] Control AI Data Services performance and costs with the new Reasoning effort setting [#control-ai-data-services-performance-and-costs-with-the-new-reasoning-effort-setting] AI Data Services now includes a **Reasoning effort** setting that allows you to control how much reasoning the model applies when generating results. This helps you balance performance, cost, and output complexity when working with reasoning models. Now you can: * Adjust how much reasoning is supported by AI models when generating outputs. * Optimize processing cost and runtime for high-volume use cases. * Maintain flexibility when working with complex data enrichment scenarios. Default settings remain unchanged, so existing workflows continue to function as before. AI Data Services Reasoning effort setting Reasoning effort levels reference table See [Generate or transform values with the data service Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/generate-or-transform-values-with-the-data-service-custom-pr) and [Shorten, lengthen, or create text from attributes with AI data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/shorten-lengthen-or-create-text-from-attributes-with-ai-data) for more information on Data Services. Advanced filtering and shareable URLs in Content Portal [#advanced-filtering-and-shareable-urls-in-content-portal] **Filtering in the Content Portal is now more flexible and easier to share.** New filtering options help you refine results more precisely, while updated URLs allow you to quickly share filtered views with colleagues or external stakeholders. Now you can: * Use Include, Exclude, and Equals filtering options to refine results. * Copy URLs that automatically include applied filters. * Share filtered product views quickly with team members or external users. See [Content Portal](/docs/help-center/content-portal) for more information. News about integrations [#news-about-integrations] Faster Automotive catalog updates to Meta with Facebook Dynamic Ads Delta Export [#faster-automotive-catalog-updates-to-meta-with-facebook-dynamic-ads-delta-export] The new Dynamic Ads Automotive Delta Export improves how catalog updates are synced to Meta by sending only incremental changes instead of reprocessing the entire catalog. Now you can: * Sync only updated product data, not full catalog refreshes. * Reduce processing time for large Automotive catalogs. * Ensure faster product updates on Meta Dynamic Ads. This improvement supports more efficient catalog management for large-scale Automotive advertisers. Facebook Automotive Inventory Ads Delta destination selection Manage eBay order cancellations directly in Productsup [#manage-ebay-order-cancellations-directly-in-productsup] The eBay integration now supports Order Cancellation Export, allowing you to manage cancellations directly within Productsup alongside shipment workflows. Now you can: * Handle order cancellations without switching to the eBay Seller Portal. * Manage shipment and cancellation workflows in one place. * Reduce manual work and improve operational efficiency. This helps streamline order lifecycle management and reduces friction in fulfillment processes. eBay Order Cancellation connector in Productsup # February 2026 release notes At Productsup, we are continuously working to offer you the best experience with our platform. See the updates and new features we released in February 2026. News about platform features [#news-about-platform-features] Improved copy dataflow experience [#improved-copy-dataflow-experience] Copy Dataflow lets you copy an already existing data structure to other sites, saving you time and effort. New improvements for this feature ensure that the copy experience is more transparent and predictable, minimizing configuration risks for teams managing complex product data workflows: * A step-by-step interface lets you see what you copy and where the data structure is applied. * The feature lets you select and copy dataflow from multiple exports or sub-exports, such as CSA exports, in a single action. * A validity checker shows at once whether a copy action is possible before you run it, preventing potential errors. See [Copy dataflow between sites and exports with Import Dataflow and Copy Dataflow](/docs/help-center/map-and-optimize-your-data/dataflow/copy-dataflow-between-sites-and-exports-with-import-dataflow) for more information. Advanced filtering in the Content Portal [#advanced-filtering-in-the-content-portal] Advanced filtering in the Content Portal makes it easier to find product details. Before, you could only filter by product IDs. Now, you can search by multiple values and also break down attribute values into keywords, such as ingredients, and combine them into powerful filters. Now you can: * Search by multiple values from a single attribute, such as brand, ingredients, or description. * Split values into keywords and search by them. * Combine keywords into custom filter sets. See [Content Portal](/docs/help-center/content-portal) for more information. # April 2026 release notes At Productsup, we are continuously working to offer you the best experience with the Productup family of products and services. Here's what happened in April 2026. News about integrations [#news-about-integrations] Export Template Management (ETM) – now in Beta [#export-template-management-etm--now-in-beta] **Meet Export Template Management (ETM) - available in the [Developer Portal](https://dev-portal.productsup.com/).** Create your own export templates and bring data quality to the next level: with ETM, you can apply Analyzer Tests to validate your attributes and values - something that isn’t possible with standard blank exports today. Spot issues faster and gain insights directly in Data View. Learn more about the [Export Template Management](https://help.productsup.com/docs/export-template-management). **Curious to try it out?** Reach out to your Customer success manager, Account manager, or contact our Support team at [support@productsup.com](mailto:support@productsup.com). # June 2026 release notes import { Callout } from "fumadocs-ui/components/callout"; At Productsup, we are continuously working to offer you the best experience with our platform. See the updates and new features we released in June 2026. News about platform features [#news-about-platform-features] See how visible your brand is across AI search engines [#see-how-visible-your-brand-is-across-ai-search-engines] The new *AI Visibility* dashboard shows how often your brands and product categories appear in AI-generated answers from ChatGPT, Gemini, and Perplexity, and how that visibility compares to your competitors. Now you can: * Monitor how your brands and product categories appear across ChatGPT, Gemini, and Perplexity in a single, unified view. * Track visibility across three shopper intents (transactional, best deal, and support and returns) automatically, with no configuration required. * Follow your visibility score over time across 14, 30, or 90-day windows to spot trends and measure impact. * Benchmark against competitors you select directly in the dashboard. As shoppers increasingly turn to AI assistants to discover products and decide where to buy, this helps you understand and grow your presence in AI-generated shopping guidance. The AI Visibility dashboard is available on request. To get access, reach out to the Productsup Support team at [support@productsup.com](mailto:support@productsup.com) or your Customer Success Manager. See [AI Search Visibility dashboard](/docs/help-center/dashboard-and-monitor/ai-search-visibility-dashboard) for more information on AI Visibility. Run feed experiments on any product segment, in a single export [#run-feed-experiments-on-any-product-segment-in-a-single-export] *Feed Experimentation* (formerly A/B Testing) is now available to all users, built directly into *Rulebox Conditions*. You can test precise product changes and measure the impact in the analytics tools you already use, without maintaining parallel feeds. Both test and control groups are handled within the same export, with deterministic group assignment and built-in UTM tagging. Now you can: * Scope an experiment to any subset of items using *Rulebox Conditions*, such as premium shoes only or items missing a color. * Run Version A and Version B from the same export channel, with no parallel feeds or duplicate mappings. * Run up to 13 experiments per site at once, with automatic group labelling. * Apply `utm_content` and `utm_campaign` tags and measure results in Google Analytics or any trusted tool. This gives you granular control over exactly what you test, with less setup and measurement in the tools you already trust. See [Feed Experimentation](/docs/help-center/add-a-rule-box/feed-experimentation) for more information on feed experimentation. Find any product instantly in the Image Designer preview [#find-any-product-instantly-in-the-image-designer-preview] The Image Designer preview now includes product search, so finding a specific product no longer means paging through a list of up to 50 products. Now you can: * Search for any product by any attribute, including ID, SKU, GTIN, or Title. * Use partial, case-insensitive matching to jump straight to the products that match. * Verify how your template renders on the exact products that matter most, even in large or complex feeds. This feature is rolling out gradually. To request activation, reach out to the Productsup Support team at [support@productsup.com](mailto:support@productsup.com) or your Customer Success Manager. See [Image Designer](/docs/help-center/map-and-optimize-your-data/image-designer) for more information on the Image Designer feature. News about integrations [#news-about-integrations] Keep Shopify product data in sync automatically with webhooks [#keep-shopify-product-data-in-sync-automatically-with-webhooks] Productsup now supports **Shopify Products via Webhooks** as a data source. Shopify sends product changes to Productsup via webhook, where they are processed with the next scheduled import run. Now you can: * Create the Shopify webhook data source through a simple form in Productsup. * Let Shopify send product change events to Productsup, where they are picked up by the next scheduled import run. * Update credentials or settings later without recreating the connection. * Delete the data source and remove the related Shopify connection cleanly. This makes Shopify integrations easier to configure, maintain, and support, with less reliance on developer help for the initial setup. To use this data source, you need Shopify access credentials and a Productsup Stream API Personal Access Token. Customers interested in setting it up should contact their Customer Success Manager or Technical Support, who will coordinate the next steps with the API Team. See [Set up the Shopify Products via Webhooks data source](/docs/help-center/import-data-feeds/import-data-from-third-party-external-systems/import-products-from-a-shop-system#set-up-the-shopify-products-via-webhooks-data-source) for more information. Manage DoorDash listings directly from Productsup via API [#manage-doordash-listings-directly-from-productsup-via-api] The new DoorDash API keeps your product catalog, store-level pricing and availability, and store opening hours in sync automatically, complementing the existing flat-file DoorDash exports. Now you can: * Send your product catalog (names, images, descriptions, and categories) to DoorDash with the *Item Delta Export*. * Update store-level pricing and availability, changing only what has changed, with the *Inventory Delta Export*. * Prepare a full per-store file for DoorDash to collect with the *Inventory Export (Pull)*, suited to large or batch-style updates. * Keep each store's opening and holiday hours in sync with the *Store Export*. The API is better suited than a flat file to handling scale and reducing manual effort, which helps clients operating at high volume. DoorDash Inventory API export option See [Add DoorDash exports](/docs/help-center/export-data-feeds/add-export/add-doordash-exports) for more information on DoorDash exports. Export to the latest ETIMxChange 2.0 standard [#export-to-the-latest-etimxchange-20-standard] The *ETIMxChange* integration is now upgraded to version 2.0, with expanded data coverage and a dedicated export template, so you can align with the latest standard for technical product data exchange. Now you can: * Use the new *ETIMxChange 2.0* export template, including support for delta exports. * Export a richer set of product data fields, covering the additional data nodes required by the ETIMxChange 2.0 standard. * Attach the ETIMxChange destination to the new template. This helps you stay compliant with the latest standard, produce more complete exports with fewer post-export fixes, and set up new and existing configurations faster. ETIMxChange 2.0 export option See [Set up ETIMxChange export](/docs/help-center/export-data-feeds/special-export-setups/set-up-etim-xchange-export) for more information on ETIMxChange exports. # September 2025 release notes At Productsup, we are continuously working to offer you the best experience with our platform. See the updates and new features we released in September 2025. New design and new features for the Content Portal! [#new-design-and-new-features-for-the-content-portal] > > **Relevant for:** > > > > All users > > > > in > > > > Retailer and distributor channels > Driven by top-voted customer requests and sharp analysis by our Product Design Team, we have redesigned the Content Portal to deliver smarter navigation, faster workflows, and a better overall user experience: * Catalog, settings, and individual item pages now have a new look and feel. UUID-d72eb471-cd31-b28d-9c65-293b20c88ca4 * Downloading multiple products as a PDF file is now possible, allowing you to seamlessly share, review, or archive product data at scale. UUID-90628c5d-47e0-4569-84b5-ddd15f82485a * TIFF images are now displayed instantly without broken previews or fallback formats. * Catalogs are now linked to their related exports in the Productsup platform to help you troubleshoot and track changes faster. You can go to **Settings** in the top toolbar of the Content Portal, open the *Catalogs* tab, and select **View Channel** to go to the Productsup export related to the chosen catalog. UUID-24a77d79-b4d9-50d6-8930-676ddc815447 * The search bar in each catalog now supports searches with multiple product IDs, allowing you to find the necessary list of items in one go. This aims to help you validate item batches or chase down a list of items provided by the Support Team. Use the space as a delimiter between product IDs in your search query. UUID-2552af08-f439-e084-36d4-61d75398ca3b See [Content Portal](/docs/help-center/content-portal) for more information. New traffic management improves throughput speed for the Stream API [#new-traffic-management-improves-throughput-speed-for-the-stream-api] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Retailer and distributor channels > We have been improving traffic management in the Stream API. By replacing our general rate-limiting system with one that tracks traffic by each individual customer, we have more control and better visibility when things get busy. The specific technical changes include: * Substituting NGINX with HAProxy. * Adding real-time syncing across servers. * Improving traffic monitoring at the request level. These changes deliver an increase of up to 20% in upload throughput and an overall smoother experience during peak activity, which makes the Stream API more scalable. UUID-39648d0d-7fcd-d895-7636-7cf9842e3f78 See Stream API documentation at [api-docs.productsup.io](https://api-docs.productsup.io/#stream-api). Updated destination: Export to Stream API is now up to 44% faster! [#updated-destination-export-to-stream-api-is-now-up-to-44-faster] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Retailer and distributor channels > After noticing longer processing times caused by the destination *Export to Stream API*, we have optimized its processes on the backend to achieve faster and more reliable export runs. This let us achieve a 44% increase in processing speed for the destination in high-volume sites, resulting in not only faster exports but also more scalable destination performance to support large data volumes. UUID-7630647c-414a-2580-3fe7-c2ad07f7b504 # December 2025 release notes import { Callout } from "fumadocs-ui/components/callout"; At Productsup, we are continuously working to offer you the best experience with our platform. See the updates and new features we released in December 2025. Copy Dataflow now supports CSA exports [#copy-dataflow-now-supports-csa-exports] > > **Relevant for:** > > > > All users > > > > in > > > > Marketplace channels > > > > Retailer and distributor channels > To reuse setups across Amazon, eBay, ETIM, OTTO, and other CSA exports, you can now use Copy Dataflow to copy the dataflows of CSA exports and their sub-exports. In the updated version of the feature, you can choose one or multiple pairs of source and target export dataflows to copy connections and rule boxes between CSA exports or between sub-exports. The feature copies only those connections that match between the source and target CSA dataflows without creating additional attributes in the export stage of the target CSA export or sub-export, which reduces errors. This update yields the following benefits: * Faster and easier setup rollout * Scalable CSA setups * Less manual work * Fewer errors * Smoother migrations See [Copy dataflow between sites and exports with Import Dataflow and Copy Dataflow](/docs/help-center/map-and-optimize-your-data/dataflow/copy-dataflow-between-sites-and-exports-with-import-dataflow) for more information. Reuse data source setups across multiple sites with Shared Data Sources [#reuse-data-source-setups-across-multiple-sites-with-shared-data-sources] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > We have released the **beta** version of Shared Data Sources, a new feature for reusing data source setups available at the organization level. The Shared Data Sources feature lets you set up a shared data source at the organization level and then add it as an already configured data source to numerous sites if they need to import data from the same file or system. It saves time by letting you avoid repetitive configuration efforts and reduces the chance of data source setup errors. Only admins can create shared data sources at the organization level. Read-write users can add those preconfigured shared data sources at the site level. The new feature offers the following benefits: * A single source of truth for reused data source setups. * Easier data source maintenance. * Fewer setup errors. * Improved data source reliability and setup scalability. See [Set up a shared data source and reuse it across sites](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-up-a-shared-data-source-and-reuse-it-across-sites) for more information. Errors and warnings in Error Log now open in a new tab [#errors-and-warnings-in-error-log-now-open-in-a-new-tab] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > In Error Log, you can now troubleshoot multiple runs without losing an overview of all errors and warnings. If you select the process ID of an error or warning in Error Log, the platform automatically opens the overview of the selected event in a new tab. You can still open the same overview page in the same tab by selecting the row of the needed event in any area other than the *Process ID* column. This improvement streamlines the troubleshooting process, reduces repetitive navigation, and lets users identify issues quicker, making error and warning analysis more productive and less frustrating. UUID-e5553e3d-9dbe-795b-925e-532996477714 Improved management of shared lists [#improved-management-of-shared-lists] > > **Relevant for:** > > > > Admins > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > While deleting sites, you can no longer accidentally delete lists that are shared across a project or organization, which makes shared lists more visible, editable, and reliable. When attempting to delete a site that owns a shared list, you see the following message showing that the platform can't delete the chosen site: UUID-4b335ee3-e8a5-248f-2f40-f7406a6a8fd2 This eliminates hidden dependencies and reduces the risk of unexpected behavior across sites, improving the overall stability and management of shared lists. See [Lists](/docs/help-center/map-and-optimize-your-data/lists) for more information on lists. # June 2025 release notes import { Callout } from "fumadocs-ui/components/callout"; At Productsup, we are continuously working to offer you the best experience with our platform. See the updates and new features we released in June 2025. News about platform features [#news-about-platform-features] Onboarding Portal is live! [#onboarding-portal-is-live] > > **Relevant for:** > > > > All users > > > > in > > > > Retailer and distributor channels > > > > Supplier onboarding > We have launched a brand new product, the [Onboarding Portal](https://onboarding.productsup.com/)! It provides a unified workflow for receiving data from multiple suppliers and vendors without having to manually map it to your data model. It is going to simplify onboarding data from different suppliers and vendors by providing them with a simple, intuitive interface that offers the following capabilities: * Aggregating data uploaded from multiple suppliers and vendors. * Mapping the provided data to the data model of the relevant retailer or distributor. * Checking data accuracy and compliance with validation rules. * Sending the mapped and validated data to the needed target system via the Productsup platform. If you want to get a free demo of the Onboarding Portal and see if this product is a fit for you, reach out to your Customer Success Manager. UUID-fb8ebe6a-d63b-6ee6-9ff2-c2393a08b30e Split String & Filter rule box lets you limit value size based on bytes [#split-string--filter-rule-box-lets-you-limit-value-size-based-on-bytes] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > The rule box **Split String & Filter** used to limit the length of an attribute value only based on the number of characters. Now, you can use it to limit the size of an attribute value based on byte count (UTF-8) using the **Limit by** drop-down. This new field helps to avoid product rejections when working with non-ASCII characters. Some marketplaces, such as Amazon, impose strict limits for attribute value sizes based on byte count, especially for generic keyword attributes. Using the new field, you can precisely follow Amazon's 250-byte keyword limit. This small but powerful update improves compatibility with Amazon, supports international content, and gives you greater control and accuracy when tailoring data to platform-specific requirements. UUID-ce86f5c2-cbd2-c99e-7d6f-950703e81dea See Split String & Filter for more information. Improved search on the ADD EXPORTS page [#improved-search-on-the-add-exports-page] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > Previously, the search on the *ADD EXPORTS* page showed results only if your query exactly matches the beginning of an export name. Now, you get results regardless of where in an export name your query gets a match. UUID-c1a00410-04c4-5e41-5d8e-cb25fa2db67d You can also see results for partial matches where a word in an export name is longer than a word in your search query. UUID-58e3ac1e-5712-62bf-73e1-c277465073a0 Rule box scheduling changes are now visible in Activity Log [#rule-box-scheduling-changes-are-now-visible-in-activity-log] > > **Relevant for:** > > > > All users > > > > in > > > > Advertising channels > > > > Marketplace channels > > > > Retailer and distributor channels > > > > Supplier onboarding > Besides tracking the changes in your sites related to adding, editing, pausing, and deleting rule boxes, you can now use Activity Log to see when, where, and who adds, changes, or deletes rule box schedules. This ensures greater transparency of user actions in your sites, enhances accountability, and delivers a more complete visibility into changes related to rule boxes in your sites. To learn more about each change, you can select it and open a pop-up window that lets you know what organization, project, site, stage, and rule box the chosen scheduling change relates to. See [View your Activity Log and Summary](/docs/help-center/get-started/manage-your-organization-projects-and-sites/view-your-activity-log-and-summary) for more information. Multiple updates in the Content Portal [#multiple-updates-in-the-content-portal] > > **Relevant for:** > > > > All users > > > > in > > > > Retailer and distributor channels > We have released multiple updates to the Content Portal based on your feedback: * The drop-downs where you can select catalogs and Content Portal accounts have a search field now to let you find the needed options easier. | UUID-ecf5a38c-168d-5a0c-dbb1-c0b667038359 | UUID-f7119477-5cbc-c537-ad7e-0a020bc6f6b6 | | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | * Anonymous users can now access public catalogs without logging in. They can also download assets and products from public catalogs in the Content Portal. * If a catalog takes some time to load, the Content Portal now shows a loading page instead of the confusing message saying that no products are shared with you. UUID-282dc408-353b-dbf6-e465-0046b85921de * Catalog pages have an updated pagination component. UUID-4df1fdb3-156d-9a1f-a714-ffac55596c39 * If a filtering attribute, for example, **category**, has long values, they are now trimmed to three lines when shown in the filtering sidebar on the catalog page. This saves space and makes sure the filtering sidebar is convenient to use. UUID-49f9f0c4-63c1-b161-de27-db9967b6bc20 See [Content Portal](/docs/help-center/content-portal) for more information. News about integrations [#news-about-integrations] Updated exports: Kaufland integration for Italy and France [#updated-exports-kaufland-integration-for-italy-and-france] > > **Relevant for:** > > > > All users > > > > in > > > > Marketplace channels > Kaufland is a European marketplace with a main user base in Germany and 32 million monthly visitors. They are launching new storefronts in Italy and France in the late summer of 2025. We now also support storefronts in Italy and France. In the destination settings, you can choose *it-IT* or *fr-FR* in the **Locale** or **Storefront** drop-downs. You can start preparing your feeds for these new markets and be ready to go to market from day one of the official launch. If you prepare and send your Italian or French feed to Kaufland before the official launch, it won't go live immediately. However, Kaufland strongly recommends that merchants set up their feeds in advance to be ready for the official launch. UUID-a1d81437-44a2-a19e-ea0d-b83a8a2bea51 See [Add Kaufland exports and import order data from Kaufland](/docs/help-center/export-data-feeds/add-export/add-kaufland-exports-and-import-order-data-from-kaufland) for more information. Updated exports: We now support all Amazon seller categories (aka product types) across 12 regions [#updated-exports-we-now-support-all-amazon-seller-categories-aka-product-types-across-12-regions] > > **Relevant for:** > > > > All users > > > > in > > > > Marketplace channels > Our Amazon Seller Central exports now support all possible Amazon categories (also known as product types) across the following 12 regions: AU, CA, DE, ES, FR, IT, MX, NL, PL, SE, UK, US. This can let you achieve quicker time-to-market for new Amazon listings in all supported regions without depending on the Productsup team to add new categories to the platform. UUID-e6296761-6a51-0eea-e970-74a52e99f5b3 # Versions import { Callout } from 'fumadocs-ui/components/callout'; Each connector can have multiple **versions**. Every version has its own configuration, build, and deployment state — completely independent from other versions. This lets you develop a new iteration of your connector while the current one stays live in production. Versions use major version numbering: `1.0.0`, `2.0.0`, `3.0.0`, and so on. In the ProductsUp platform, end-users see versions as suffixes on the connector name (e.g. "My Connector v1", "My Connector v2"). Creating a new version [#creating-a-new-version] To create a new version, use the version selector in the Dev Portal and click **Add version**. The new version is created by copying the most recent version: **What gets copied:** * Version name and description * Readme * All configuration (VCS, application, individual config, execution config, type-specific config) * Dev environment references (account, project, site) **What starts fresh:** * Version number (incremented to the next major version) * Build and deployment state — the new version starts in `Updated` state, ready to build * Production environment references Each version goes through its own [deployment pipeline](/docs/connector-development/dev-portal/build-and-deploy): build, sync to dev, test, sync to prod, release. Working with multiple versions [#working-with-multiple-versions] Common scenarios: * **Iterating on a connector** — create a new version, make changes, test on dev, then sync to prod. The old version stays live until the new one is synced. * **Supporting multiple integrations** — maintain separate versions with different configurations for different use cases. * **Rolling back** — if a new version has issues, the previous version's production deployment remains intact. You can re-sync the older version to restore it. Each version has independent dev and prod environments. Syncing version 2 to production does not affect version 1's production deployment — both can coexist. Deleting a version [#deleting-a-version] Versions can be deleted if they are **not in use on the platform** — meaning no active datasource, export, or data service on the ProductsUp platform references them. Deletion is a two-step process: . **Move to bin** — soft-deletes the version. It can be restored from the connector bin. . **Permanent delete** — removes the version, its Docker image, and all platform references. This is irreversible. You cannot delete a version that is actively assigned to sites on the ProductsUp platform. Remove the assignment first, then delete. # Build and deploy import { Callout } from 'fumadocs-ui/components/callout'; The **Release configuration** page in the Dev Portal walks you through the full pipeline — from building a Docker image to making the connector available to users. For a hands-on walkthrough, see the [Quickstart](/docs/connector-development/get-started/quickstart#build-the-connector). The deployment pipeline [#the-deployment-pipeline] Release configuration page The pipeline has five steps, each depending on the previous one: | Step | What it does | | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Build connector** | Connects to your Git repository, pulls the code, builds a Docker image using your `Dockerfile`, runs the health check, and pushes the image to the registry. | | **Sync with runtime** | Registers the built image with the connector's runtime environment so it can be executed. | | **Sync with dev** | Creates a test site on the ProductsUp platform (if needed), deploys the connector to the development environment, and assigns it to the site. | | **Sync with prod** | Creates a production version of the connector based on its current configuration. The previous production version stays live until the sync completes. | | **Enable access** | Makes the connector available to specific accounts, projects, or sites — or releases it globally. | Build [#build] Triggering a build does the following: . Connects to the Git repository configured in [VCS config](/docs/connector-development/dev-portal/connector-setup/vcs-config) . Pulls the code from the configured branch . Builds a Docker image using your `Dockerfile` . Runs the health check to verify the container starts correctly . Pushes the image to the registry Once the build succeeds, the connector moves to `built` state: Build complete If a build fails, check the build logs in the Dev Portal. Common causes: repository not reachable (check VCS config), Dockerfile syntax errors, missing dependencies, or a failing health check. Deploy to dev [#deploy-to-dev] Click **Start syncing** next to **Sync connector with runtime**. Once it completes, the **Sync connector with dev** section expands: Synced with runtime Click **Create a new site** to deploy to dev. This runs three sub-steps automatically: . **Creating a site or ensuring it exists** — creates a dev project and site on the ProductsUp platform . **Synchronizing your connector to development environment** — registers the connector so the platform can execute it . **Assigning the latest version of your connector to a Site** — makes the connector available as a data source (or export) on the dev site Synced with dev Once synced, click **Open dev site** to go to the site on the ProductsUp platform and trigger test runs. Deploy to production [#deploy-to-production] Click **Start syncing** next to **Sync connector with prod**. This creates a production version of all entities required for your connector to work, based on its configuration. After the sync completes, the **Enable access** section becomes available: Synced with prod From here you have two options: * **Change access** — makes the connector available to specific accounts, projects, or sites. Use this when the connector is intended for specific customers or internal use. * **Release** — makes the connector available globally on the platform for all users. See [Release](/docs/connector-development/dev-portal/release) for details on access management and global releases. Rebuild after changes [#rebuild-after-changes] When you update your connector code or configuration: . Push your changes to the Git repository . Click **Rebuild** on the Release configuration page . Sync to dev and test . Sync to prod when ready The current production version stays live until the new sync to prod completes. After a successful sync, all users automatically switch to the new version. # Dev Portal import { Card, Cards } from 'fumadocs-ui/components/card'; The [Dev Portal](https://dev-portal.productsup.com) is the web interface for the Connector Development Environment. Everything you do with connectors — creating, configuring, building, deploying, monitoring, and releasing — happens here. Main areas [#main-areas] The Dev Portal is organized into a few key areas: Connectors [#connectors] The main view. Lists all connectors your account has access to. From here you can create new connectors or click into an existing one to configure, build, and deploy it. Connector setup [#connector-setup] When you open a connector, you land on a multi-step setup wizard. Each step configures a different aspect of your connector: | Step | What it configures | | -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | | **[Connector details](/docs/connector-development/dev-portal/connector-setup/details)** | Name, type, description, flow, execution mode, owner, logo | | **[Version Control configuration](/docs/connector-development/dev-portal/connector-setup/vcs-config)** | Git repository URL, branch, and authentication | | **[Application configuration](/docs/connector-development/dev-portal/connector-setup/app-config)** | CLI command, arguments, and health check | | **[Authentication and secrets](/docs/connector-development/dev-portal/connector-setup/auth-and-secrets)** | OAuth schemas and secret references | | **[Individual configuration](/docs/connector-development/dev-portal/connector-setup/individual-config)** | Form fields exposed to end-users (API keys, URLs, etc.) | | **[Execution configuration](/docs/connector-development/dev-portal/connector-setup/execution-config)** | How configurations are passed to your connector at runtime | | **[Type-specific configuration](/docs/connector-development/dev-portal/connector-setup/type-specific-config)** | Settings that depend on the connector type (datasource name, export channel, etc.) | Steps marked as optional can be skipped for a minimal setup. The required steps depend on your connector type. Release configuration [#release-configuration] Once your connector is configured, the release configuration page walks you through the deployment pipeline: . **Build** — builds a Docker image from your Git repository . **Sync with runtime** — registers the image so it can be executed . **Sync with dev** — deploys to a development site for testing . **Sync with prod** — deploys to production . **Enable access** — makes the connector available to users See [Build and deploy](/docs/connector-development/dev-portal/build-and-deploy) for details. Monitoring [#monitoring] Track connector runs, view application logs, and debug issues. The monitoring section shows: * Run history with status, duration, and process IDs * Application logs at all levels (info, warning, error, etc.) * Raw stdout/stderr output from the container * State transition history for the connector version See [Monitoring](/docs/connector-development/dev-portal/monitoring) for details. Versions [#versions] Each connector can have multiple versions, each with its own configuration and deployment state. Versions let you develop a new iteration while the current one stays live in production. See [Versions](/docs/connector-development/dev-portal/versions) for details. Connector bin [#connector-bin] Deleted connectors go to the bin first, where they can be restored or permanently removed. What's next [#whats-next] # Release import { Callout } from 'fumadocs-ui/components/callout'; Once your connector is [synced to production](/docs/connector-development/dev-portal/build-and-deploy#deploy-to-production), you need to make it available to end-users. There are two ways: **enable access** for specific entities, or **release** globally. Enable access [#enable-access] Use **Change access** to make the connector available to specific accounts, projects, or sites. This is the right choice when: * The connector is intended for specific customers * You want a staged rollout — test with a few accounts before going wide * The connector is for internal use only You can grant and revoke access at any time. Each entity you enable must be in the connector's target scope (configured during sync to prod). Release globally [#release-globally] Use **Release** to make the connector available to all users on the ProductsUp platform. This is the right choice when the connector is ready for general use. Releasing globally **clears all specific access grants**. If you previously enabled access for specific accounts, projects, or sites, those lists are reset when you release. This is a one-way transition — if you need to go back to limited access, you'll need to unrelease first and then re-enable specific access. Unreleasing [#unreleasing] You can unrelease a connector to remove it from global availability. After unreleasing: * The connector is no longer visible to new users * Previously granted specific access is **not restored** — you need to re-enable access manually * Sites that already have the connector assigned continue to work Prerequisites [#prerequisites] Before you can release or enable access, the connector version must: * Be synced to production * Have a platform connector ID (created during the sync process) Summary [#summary] | Action | Scope | When to use | | ----------------- | ------------------------------------- | ------------------------------------------------------------------ | | **Change access** | Specific accounts, projects, or sites | Internal connectors, staged rollouts, customer-specific connectors | | **Release** | All platform users | Connector is ready for general availability | | **Unrelease** | Removes global availability | Need to pull back a released connector | # Monitoring import { Callout } from 'fumadocs-ui/components/callout'; The Dev Portal provides several tools for monitoring and debugging your connector. These are available under the **Utils** section in the connector sidebar. Runs [#runs] The **Runs** page lists every execution of your connector. Each run shows: | Field | Description | | ---------------------------- | ------------------------------------------------------------- | | **Status** | Whether the run finished successfully or failed. | | **Exit code** | `0` for success, any non-zero value indicates failure. | | **Started at / Finished at** | When the run started and ended. | | **Process ID** | A unique identifier for the run, useful for correlating logs. | | **Site** | The ProductsUp site that triggered the run. | | **Version** | Which connector version was executed. | You can filter runs by connector version, site, status, or process ID. Runs page showing run history Logs [#logs] The **Logs** page shows application logs sent by your connector via the Container API (e.g. `$this->containerApi->info('message')`). Logs use standard syslog severity levels: | Level | Name | When to use | | ----- | --------- | -------------------------------------------------- | | 0 | Emergency | System is unusable | | 1 | Alert | Immediate action required | | 2 | Critical | Critical conditions | | 3 | Error | Runtime errors that don't require immediate action | | 4 | Warning | Exceptional occurrences that aren't errors | | 5 | Notice | Normal but significant events | | 6 | Info | General informational messages | | 7 | Debug | Detailed debug information | You can filter logs by level — for example, filter to level 3 (Error) and above to see only problems. The Logs page also has a **STDOUT/STDERR** tab for raw container output. Logs page with severity badges and filters Logs are also available for Container API requests. If your connector makes a failing call to the Container API, the request URI, response code, and response body are captured as log entries. Stdout / Stderr [#stdout--stderr] The **stdout/stderr** view shows the raw output from your connector's Docker container. This is especially useful when: * Your connector crashes before it can log via the Container API * You need to see stack traces or uncaught exceptions * You want to see output from startup or initialization Container API failures [#container-api-failures] A dedicated view filters logs to show only failed Container API requests. Each entry includes: * The request URI (which endpoint was called) * The HTTP response code * The response body (error message) Common causes: requesting an input file that doesn't exist, calling an endpoint with wrong parameters, or writing data in an unexpected format. States [#states] The **States** page shows the history of asynchronous operations for your connector — builds, syncs, and deployments. Each entry includes: States page showing operation history | Field | Description | | -------------- | --------------------------------------------------------------------- | | **State ID** | Unique identifier for the operation. | | **Status** | Current status (`pending`, `done`, etc.). | | **Name** | The operation type (e.g. `build_connector`, `sync_connector_to_dev`). | | **Owner ID** | The user who triggered the operation. | | **Created at** | When the operation was started. | Use this page to track the progress of long-running operations and diagnose deployment issues. Debugging workflow [#debugging-workflow] When a connector run fails: . **Check the run status and exit code** — a non-zero exit code means the connector reported a failure . **Read application logs** — filter by error level to find what went wrong . **Check Container API failures** — look for failed API calls that might indicate configuration issues . **Inspect stdout/stderr** — if there are no application logs, the container may have crashed before reaching your logging code . **Review states** — if the issue is with deployment rather than execution, check whether the build and sync completed successfully # Create a connector import { Callout } from 'fumadocs-ui/components/callout'; To create a connector, open the [Dev Portal](https://dev-portal.productsup.com/connectors/add) and click **Add connector**. Fill in the required fields in the creation dialog: | Field | Required | Notes | | ------------------ | -------- | --------------------------------------------------------------------------------------------- | | **Name** | Yes | Display name for the connector. Can be changed later. | | **Type** | Yes | Data source, Export, Export delta, etc. **Cannot be changed after creation.** | | **Description** | No | Short description shown to end-users. | | **Flow** | No | Default, Standalone, or Migration. Defaults to Default. **Cannot be changed after creation.** | | **Execution mode** | No | Environment variable (recommended) or Command options. **Cannot be changed after creation.** | | **Owner** | No | The organization that owns this connector. Defaults to your organization. | For detailed explanations of each field, see [Connector details](/docs/connector-development/dev-portal/connector-setup/details). Choose **Type**, **Flow**, and **Execution mode** carefully — they're locked after creation. Click **Add connector**. The connector is created and you're taken to the setup wizard, which guides you through the remaining configuration: . [Version Control configuration](/docs/connector-development/dev-portal/connector-setup/vcs-config) — connect to your Git repository . [Application configuration](/docs/connector-development/dev-portal/connector-setup/app-config) — define how to run your connector . [Authentication and secrets](/docs/connector-development/dev-portal/connector-setup/auth-and-secrets) *(optional)* — set up auth providers and vault secrets . [Individual configuration](/docs/connector-development/dev-portal/connector-setup/individual-config) *(optional)* — define form fields for end-users . [Execution configuration](/docs/connector-development/dev-portal/connector-setup/execution-config) — review how config values are passed at runtime . [Type-specific configuration](/docs/connector-development/dev-portal/connector-setup/type-specific-config) — additional settings based on connector type Once configured, proceed to [Build and deploy](/docs/connector-development/dev-portal/build-and-deploy) to build and release your connector. For a hands-on walkthrough of the entire process, see the [Quickstart](/docs/connector-development/get-started/quickstart). # Export delta connector import { Callout } from 'fumadocs-ui/components/callout'; An export-delta connector works like an [export connector](/docs/connector-development/connector-types/export), but instead of sending all products to the channel every run, it determines which products to send based on what changed since the last run. The platform tracks product data statuses between runs and provides four separate input streams — new, modified, unchanged, and deleted — so your connector can perform the appropriate action for each product (create, update, skip, or delete). Use export-delta when the third-party channel supports incremental updates — it's more efficient and reduces API calls. Data flow [#data-flow] ``` ProductsUp platform → Container API (4 delta streams) → Your connector → Third-party channel ↓ Container API (feedback) → ProductsUp platform ``` Instead of a single input file, the Container API provides four streams based on what changed: | Stream | Description | | ------------- | --------------------------------------------- | | **New** | Products added to the site since the last run | | **Modified** | Products that changed since the last run | | **Unchanged** | Products with no changes since the last run | | **Deleted** | Products removed since the last run | How it works at runtime [#how-it-works-at-runtime] . The platform starts your Docker container and passes export settings as environment variables . Your code reads products from one or more of the four delta streams . For each product, you perform the appropriate action on the third-party channel (create, update, skip, or delete) . You write feedback for each product (success or failure) . You send progress notifications to the ProductsUp notification panel . Exit with code `0` (success) or non-zero (failure) . The platform imports the feedback file as a data source on the next site run Reading delta input [#reading-delta-input] Each stream has its own methods for iterating and counting. Iterate by stream [#iterate-by-stream] ```php // New products — create them on the channel foreach ($this->containerApi->yieldFromNewFile() as $product) { $this->createOnChannel($product); } // Modified products — update them on the channel foreach ($this->containerApi->yieldFromModifiedFile() as $product) { $this->updateOnChannel($product); } // Unchanged products — usually skipped foreach ($this->containerApi->yieldFromUnchangedFile() as $product) { // No action needed in most cases } // Deleted products — remove them from the channel foreach ($this->containerApi->yieldFromDeletedFile() as $product) { $this->deleteFromChannel($product); } ``` Iterate in batches [#iterate-in-batches] Each stream also supports batch iteration: ```php foreach ($this->containerApi->yieldBatchFromNewFile(100) as $batch) { $this->createBatchOnChannel($batch); } foreach ($this->containerApi->yieldBatchFromModifiedFile(100) as $batch) { $this->updateBatchOnChannel($batch); } ``` Count items per stream [#count-items-per-stream] ```php $newCount = $this->containerApi->countItemsFromNewFile(); $modifiedCount = $this->containerApi->countItemsFromModifiedFile(); $unchangedCount = $this->containerApi->countItemsFromUnchangedFile(); $deletedCount = $this->containerApi->countItemsFromDeletedFile(); ``` Writing feedback [#writing-feedback] Same as [export connectors](/docs/connector-development/connector-types/export#writing-feedback) — write feedback for each product to report success or failure. The platform imports the feedback file as an additional data source on the next site run. ```php $this->containerApi->appendToFeedbackFile([ 'id' => $product['id'], 'status' => 'success', ]); ``` Each export destination can have at most one feedback file. See [Feedback as an additional data source](/docs/connector-development/connector-types/export#feedback-as-an-additional-data-source) for how connection columns work. Category Specific Attributes [#category-specific-attributes] Some export channels use **Category Specific Attributes** (CSA) — attribute sets that vary per product category. Use `listClassifications()` to retrieve the configured classifications, then pass `classification-id` to the new, modified, and unchanged yield methods. Reading from the main channel [#reading-from-the-main-channel] Reading from the main channel works exactly like a standard export-delta: ```php foreach ($this->containerApi->yieldFromNewFile() as $product) {} foreach ($this->containerApi->yieldFromModifiedFile() as $product) {} foreach ($this->containerApi->yieldFromUnchangedFile() as $product) {} foreach ($this->containerApi->yieldFromDeletedFile() as $product) {} ``` Reading per classification [#reading-per-classification] Same methods, with `classification-id` passed as an option: ```php $classifications = $this->containerApi->listClassifications(); foreach ($classifications as $classification) { foreach ($this->containerApi->yieldFromNewFile(['classification-id' => $classification->id()]) as $product) {} foreach ($this->containerApi->yieldFromModifiedFile(['classification-id' => $classification->id()]) as $product) {} foreach ($this->containerApi->yieldFromUnchangedFile(['classification-id' => $classification->id()]) as $product) {} } ``` The deleted stream has no per-classification variant — deleted products are tracked in a single channel-wide file. `yieldFromDeletedFile()` and `yieldBatchFromDeletedFile()` return `404 Not Found` with the message `No valid read iterator found.` when passed a `classification-id`. Read deleted products once, from the main channel. Batch iteration works the same way — `classification-id` is the second argument: ```php foreach ($this->containerApi->yieldBatchFromNewFile(100, ['classification-id' => $classification->id()]) as $batch) {} ``` A channel has CSA enabled when it carries the `category_specific_export_is_parent` tag (value `1`) set via the Export Template Management API. You assign CSA-enabled channels to your connector the same way as regular channels — in the **Export configuration** step in the Dev Portal. Logging and notifications [#logging-and-notifications] Use **log methods** for operational messages visible in the Dev Portal run logs. Use **notifications** for end-user-facing messages that appear in the ProductsUp notification panel. End-users see notifications in a collapsible panel at the bottom of their site view: Notification panel in the ProductsUp platform — end-users see connector messages here ```php // Logging — visible in Dev Portal run logs $this->containerApi->info("Processing 50 new, 20 modified, 5 deleted products."); $this->containerApi->warning("Product {$id} not found on channel, skipping delete."); $this->containerApi->error("Channel API returned 500 for product {$id}."); // Notifications — visible to end-users in the ProductsUp notification panel $this->containerApi->sendNotification('success', 'Delta export completed: 75 products processed.'); $this->containerApi->sendNotification('warning', 'Delta export completed with 3 errors.'); ``` Available log levels: `debug`, `info`, `notice`, `warning`, `error`, `critical`, `alert`, `emergency`. Available notification levels: `info`, `notice`, `warning`, `error`, `success`. Example service [#example-service] A minimal export-delta service that processes each delta stream, writes feedback, and reports progress: ```php containerApi->countItemsFromNewFile(); $modifiedCount = $this->containerApi->countItemsFromModifiedFile(); $deletedCount = $this->containerApi->countItemsFromDeletedFile(); $this->containerApi->info("Delta export: {$newCount} new, {$modifiedCount} modified, {$deletedCount} deleted."); $errorCount = 0; $errorCount += $this->processStream( $this->containerApi->yieldFromNewFile(), fn(array $product) => $this->createOnChannel($product), ); $errorCount += $this->processStream( $this->containerApi->yieldFromModifiedFile(), fn(array $product) => $this->updateOnChannel($product), ); $errorCount += $this->processStream( $this->containerApi->yieldFromDeletedFile(), fn(array $product) => $this->deleteFromChannel($product), ); $totalProcessed = $newCount + $modifiedCount + $deletedCount; if ($errorCount > 0) { $this->containerApi->sendNotification('warning', "Delta export completed with {$errorCount} errors out of {$totalProcessed} products."); return; } $this->containerApi->sendNotification('success', "Delta export completed: {$totalProcessed} products processed."); } private function processStream(\Traversable $stream, \Closure $action): int { $errorCount = 0; foreach ($stream as $product) { try { $action($product); $this->containerApi->appendToFeedbackFile([ 'id' => $product['id'], 'status' => 'success', ]); } catch (\Throwable $e) { $errorCount++; $this->containerApi->warning("Failed to process product {$product['id']}: {$e->getMessage()}"); $this->containerApi->appendToFeedbackFile([ 'id' => $product['id'], 'status' => 'error', 'message' => $e->getMessage(), ]); } } return $errorCount; } private function createOnChannel(array $product): void { /* Your create API call */ } private function updateOnChannel(array $product): void { /* Your update API call */ } private function deleteFromChannel(array $product): void { /* Your delete API call */ } } ``` Export vs. export delta [#export-vs-export-delta] | | Export | Export delta | | -------------- | -------------------------------- | --------------------------------------------- | | **Input** | All products every run | Only products that changed | | **Streams** | 1 (`input`) | 4 (`new`, `modified`, `unchanged`, `deleted`) | | **Best for** | Channels that expect a full feed | Channels that support incremental updates | | **Efficiency** | Processes everything every time | Only processes changes | Your connector type must match the input it requests. An export connector requesting `new` or `modified` input, or an export-delta connector requesting `full` input, will cause an error. Configuration [#configuration] Export-delta connectors share the same type-specific configuration as export connectors: channels, feedback file, and category-specific attributes. See [Type-specific config](/docs/connector-development/dev-portal/connector-setup/type-specific-config#export-configuration) for details. Next steps [#next-steps] * **[Export connector](/docs/connector-development/connector-types/export)** — if you need full-feed exports instead * **[Container API reference](/docs/connector-development/container-api/api-reference)** — full API for reading delta input and writing feedback # Data service connector import { Callout } from 'fumadocs-ui/components/callout'; A data service connector transforms data within the ProductsUp pipeline. Unlike data source and export connectors that move data in or out of the platform, a data service operates on data that's already there — validating, enriching, or reshaping it. Data flow [#data-flow] ``` ProductsUp platform → Container API (input) → Your connector → Container API (output) → ProductsUp platform ↓ Event logs + feedback ``` Your connector reads products from the input, applies transformations, and writes the results back to the output. It can also write event logs for monitoring and audit trails. How it works at runtime [#how-it-works-at-runtime] . The platform starts your Docker container and runs your CLI command . Your code reads products from the Container API input . You transform, validate, or enrich each product . You write the transformed products to the Container API output . Optionally, you write event logs to report warnings or errors . Exit with code `0` (success) or non-zero (failure) Reading and writing data [#reading-and-writing-data] Data service connectors read from input and write to output — the same methods used by export and data source connectors. Read → Transform → Write [#read--transform--write] ```php foreach ($this->containerApi->yieldBatchFromInputFile(500) as $batch) { $transformed = \array_map(function (array $product): array { // Your transformation logic $product['transformed_at'] = \date('c'); return $product; }, $batch); $this->containerApi->appendManyToOutputFile($transformed); } ``` Event logs [#event-logs] Data service connectors can write structured event logs to report issues found during processing. Event logs use predefined event codes and can include user-facing information. ```php use Productsup\CDE\ContainerApi\EventLog\EventLogFile; use Productsup\CDE\ContainerApi\EventLog\Event; use Productsup\CDE\ContainerApi\EventLog\EventCodes; $eventLogFile = new EventLogFile(\sys_get_temp_dir() . '/event_log.json'); $eventLogFile->addEvent( (new Event(EventCodes::WARNING_MISSING_OPTIONAL_FIELD)) ->setUserInfo(['Description' => 'Field "color" is missing from 12 products.']) ); $eventLogFile->save(); $this->containerApi->saveEventLogRawPayload(\json_encode($eventLogFile)); ``` Example service [#example-service] A minimal data service that adds a timestamp to every product: ```php containerApi->yieldBatchFromInputFile(self::BATCH_SIZE) as $batch) { $transformed = \array_map( static fn(array $product): array => [...$product, 'processed_at' => $timestamp], $batch, ); $this->containerApi->appendManyToOutputFile($transformed); } $this->containerApi->info('Data service complete.'); } } ``` Configuration [#configuration] Data service connectors have several type-specific configurations: * **Column prefix** — a unique prefix for columns generated by this service (convention: starts with `___`) * **Service type** — `Internal` (runs within the platform) or `External` (file-based) * **Stages** — which processing stages this service runs in (`Import` or `Intermediate`) * **Max usage** — optional limit on how many sites can use this service See [Type-specific config](/docs/connector-development/dev-portal/connector-setup/type-specific-config#data-service-configuration) for details. Next steps [#next-steps] * **[Data source connector](/docs/connector-development/connector-types/data-source)** — import data into the platform * **[Container API reference](/docs/connector-development/container-api/api-reference)** — full API for reading input, writing output, and event logs # Connector Types import { Card, Cards } from 'fumadocs-ui/components/card'; Every connector has a **type** that determines its role in the data pipeline. You choose the type when [creating a connector](/docs/connector-development/dev-portal/create-a-connector) — it cannot be changed later. Which type do I need? [#which-type-do-i-need] | Type | Direction | Use when... | | ---------------------------------------------------------------------------- | --------- | ------------------------------------------------------------------------------ | | **[Data source](/docs/connector-development/connector-types/data-source)** | Inbound | You need to fetch data from a third-party system and import it into ProductsUp | | **[Export](/docs/connector-development/connector-types/export)** | Outbound | You need to send all processed product data to a third-party channel every run | | **[Export delta](/docs/connector-development/connector-types/export-delta)** | Outbound | You need to send only the data that changed since the last run | | **[Data service](/docs/connector-development/connector-types/data-service)** | Transform | You need to validate, enrich, or transform data within the pipeline | | **Download** | Inbound | You need to download files via HTTP(S) to exchange storage | | **Transform** | Transform | You need to parse files from exchange storage and write product data to output | Common patterns [#common-patterns] * **Data source + Export** is the most common combination — import data in, export it out * **Export delta over Export** when the third-party channel supports incremental updates — it's more efficient and reduces API calls * **Download + Transform** for file-based integrations — download fetches the file, transform parses it into product data Connector types in detail [#connector-types-in-detail] # Data source connector import { Callout } from 'fumadocs-ui/components/callout'; A data source connector fetches product data from an external system — an API, a file, a database — and writes it into the ProductsUp platform via the Container API. It runs during the **import** phase of a site run. Within ProductsUp, data sources fall into two categories: * **Main data sources** contain the core product catalog with standard attributes like product identifiers, titles, descriptions, pricing, and sizing. * **Additional data sources** supply supplementary attributes that enrich the product feed, such as color, material composition, and delivery timeframes. A data source connector can serve as either type — end-users decide how to use it when they add it to a site. Data flow [#data-flow] ``` External system → Your connector → Container API (output) → ProductsUp platform ``` Your connector has no input from the platform. It generates or fetches data on its own and writes it to the Container API output file. How it works at runtime [#how-it-works-at-runtime] . The platform starts your Docker container and passes configuration as environment variables . Your code fetches data from the external source . You process the retrieved data, restructuring nested or complex formats into flat product rows . You write products to the Container API output . You send progress notifications to the ProductsUp notification panel . Exit with code `0` (success) or non-zero (failure, e.g. authentication issues, unreachable API) . The platform processes the output file and merges it with data from other sources on the site Writing output data [#writing-output-data] The Container API provides several methods for writing product data. Each product is a flat associative array. Write a single product [#write-a-single-product] ```php $this->containerApi->appendToOutputFile([ 'id' => '1', 'name' => 'Product A', 'price' => '9.99', ]); ``` Write multiple products at once [#write-multiple-products-at-once] The most common approach. The SDK automatically chunks large batches to stay within API limits. ```php $products = [ ['id' => '1', 'name' => 'Product A', 'price' => '9.99'], ['id' => '2', 'name' => 'Product B', 'price' => '19.99'], ['id' => '3', 'name' => 'Product C', 'price' => '29.99'], ]; $this->containerApi->appendManyToOutputFile($products); ``` Stream from a generator [#stream-from-a-generator] Memory-efficient for large datasets. The SDK handles chunking internally. ```php $this->containerApi->streamToOutput($this->fetchProducts()); ``` Where `fetchProducts()` is a generator that yields product arrays: ```php private function fetchProducts(): \Generator { // Fetch from API, file, database, etc. foreach ($this->apiClient->getProducts() as $product) { yield [ 'id' => $product->getId(), 'name' => $product->getName(), 'price' => $product->getPrice(), ]; } } ``` Logging and notifications [#logging-and-notifications] Use **log methods** for operational messages visible in the Dev Portal run logs. Use **notifications** for end-user-facing messages that appear in the ProductsUp notification panel. End-users see notifications in a collapsible panel at the bottom of their site view: Notification panel in the ProductsUp platform — end-users see connector messages here ```php // Logging — visible in Dev Portal run logs $this->containerApi->info('Starting product import.'); $this->containerApi->warning('API returned partial data, retrying.'); $this->containerApi->error('Failed to authenticate with external API.'); $this->containerApi->debug('API response: ' . json_encode($response)); // Notifications — visible to end-users in the ProductsUp notification panel $this->containerApi->sendNotification('success', 'Import completed: 1500 products imported.'); $this->containerApi->sendNotification('warning', 'Import completed but 3 products had missing fields.'); $this->containerApi->sendNotification('error', 'Import failed: external API is unreachable.'); ``` Available log levels: `debug`, `info`, `notice`, `warning`, `error`, `critical`, `alert`, `emergency`. Available notification levels: `info`, `notice`, `warning`, `error`, `success`. Example service [#example-service] A minimal data source service that fetches products, writes them to the platform, and reports progress: ```php containerApi->info('Starting product import.'); $products = $this->fetchFromApi(); $this->containerApi->appendManyToOutputFile($products); $this->containerApi->info('Imported ' . \count($products) . ' products.'); $this->containerApi->sendNotification('success', 'Import completed: ' . \count($products) . ' products imported.'); } private function fetchFromApi(): array { // Your real data source logic here — API call, file read, database query, etc. return [ ['id' => '1', 'name' => 'Product A', 'price' => '9.99'], ]; } } ``` You can find this example in the [quickstart repository](https://github.com/productsupcom/connector-quickstart) under `src/DataSource/`. Configuration [#configuration] Data source connectors have one type-specific configuration: **categories**. Categories organize your connector in the platform marketplace (e.g. "Shopping platform", "Shop systems", "Custom import"). See [Type-specific config](/docs/connector-development/dev-portal/connector-setup/type-specific-config#data-source-configuration) for all available categories. Next steps [#next-steps] * **[Quickstart](/docs/connector-development/get-started/quickstart)** — build and deploy a data source connector end-to-end * **[Container API reference](/docs/connector-development/container-api/api-reference)** — full API for writing output data * **[Demo connectors](/docs/connector-development/get-started/demo-connectors)** — clone and deploy a working data source connector # Export connector import { Callout } from 'fumadocs-ui/components/callout'; Once end-users have imported data into ProductsUp and set up all the needed data modifications, they send the processed data to the export channels of their choice. Export channels are third-party systems where customers sell their products — for example, Amazon or eBay. To send product data to a channel, the platform provides end-users with two entities: * **Export** — contains all the settings of the selected export channel and its data requirements: what columns the channel needs and what format the data should have. * **Export destination** — a setting within the export that defines the access data and the method of sending data to the channel. An export destination can be a physical storage space (Amazon S3, FTP server, Google Merchant Center FTP, ProductsUp Server) or an upload mechanism (Content API for Shopping, Facebook Marketing API, YouTube API). The role of an export connector is to gather all the data in a site relevant to the requirements of a chosen export and use the export destination defined in that export to send the data to the channel. The connector writes feedback reporting the result per product. It runs during the **export** phase of a site run. If the third-party channel supports incremental updates, consider using an [export-delta connector](/docs/connector-development/connector-types/export-delta) instead — it only processes products that changed since the last run. Data flow [#data-flow] ``` ProductsUp platform → Container API (input) → Your connector → Third-party channel ↓ Container API (feedback) → ProductsUp platform ``` Your connector reads the full product feed from the Container API input, sends each product to the third-party system, and writes feedback back to the platform. How it works at runtime [#how-it-works-at-runtime] . The platform starts your Docker container and passes export settings as environment variables . Your code reads all products from the Container API input file . For each product, you prepare the payload and send it to the third-party channel . You write feedback for each product (success or failure) . You send progress notifications to the ProductsUp notification panel . Exit with code `0` (success) or non-zero (failure) . The platform imports the feedback file as a data source on the next site run Channels [#channels] Export connectors are assigned to one or more **channels** on the ProductsUp platform. A channel represents an export destination that end-users add to their sites — for example, "Google Shopping" or "Amazon Marketplace". Channels are managed on the platform side. In the Dev Portal, you select which channels your export connector supports in the **Export configuration** step. Move channels from the **Available** list to the **Selected** list to assign them: Export configuration in the Dev Portal — select channels and toggle feedback file Key rules: * **At least one channel is required** before you can release the connector * **Export connectors** use regular (non-delta) channels * **Export-delta connectors** use delta channels — you cannot mix them * All assigned channels must have **consistent CSA status** (either all enabled or all disabled) See [Type-specific config](/docs/connector-development/dev-portal/connector-setup/type-specific-config#export-configuration) for the Dev Portal configuration fields. Reading input data [#reading-input-data] The Container API provides several methods for reading the full product feed. Iterate products one by one [#iterate-products-one-by-one] ```php foreach ($this->containerApi->yieldFromInputFile() as $product) { $this->sendToChannel($product); } ``` Iterate in batches [#iterate-in-batches] Useful when the third-party API supports batch operations. ```php foreach ($this->containerApi->yieldBatchFromInputFile(100) as $batch) { $this->sendBatchToChannel($batch); } ``` Count total items [#count-total-items] ```php $total = $this->containerApi->countItemsFromInputFile(); $this->containerApi->info("Exporting {$total} products."); ``` Writing feedback [#writing-feedback] Feedback captures the result of each product export. Each feedback entry must include an `id` that matches a product in the input feed. The `status` and optional `message` fields report the outcome. ```php // Single product feedback $this->containerApi->appendToFeedbackFile([ 'id' => $product['id'], 'status' => 'success', ]); // Batch feedback $this->containerApi->appendManyToFeedbackFile($feedbackItems); ``` Feedback as an additional data source [#feedback-as-an-additional-data-source] The platform imports the feedback file as an **additional data source** on the next site run. This connects it to the primary data feed, letting end-users see export results alongside their product data. Feedback file shown as an additional data source in the platform The feedback file links to the main feed through **connection columns** — matching ID columns that tell the platform how to join the two data sources. You configure which columns to use in the Dev Portal when enabling feedback files. Connection column configuration — select the ID column that matches products between feeds Each export destination can have at most one feedback file. Logging and notifications [#logging-and-notifications] Use **log methods** for operational messages visible in the Dev Portal run logs. Use **notifications** for end-user-facing messages that appear in the ProductsUp notification panel. End-users see notifications in a collapsible panel at the bottom of their site view: Notification panel in the ProductsUp platform — end-users see connector messages here ```php // Logging — visible in Dev Portal run logs $this->containerApi->info('Starting export.'); $this->containerApi->warning("Product {$id} has missing attributes, skipping."); $this->containerApi->error("Channel API returned 500 for product {$id}."); $this->containerApi->debug('Request payload: ' . json_encode($payload)); // Notifications — visible to end-users in the ProductsUp notification panel $this->containerApi->sendNotification('success', 'Export completed: 1500 products exported.'); $this->containerApi->sendNotification('warning', 'Export completed with 3 errors.'); $this->containerApi->sendNotification('error', 'Export failed: channel API is unreachable.'); ``` Available log levels: `debug`, `info`, `notice`, `warning`, `error`, `critical`, `alert`, `emergency`. Available notification levels: `info`, `notice`, `warning`, `error`, `success`. Example service [#example-service] A minimal export service that reads products, sends them to a third-party channel, writes feedback, and reports progress: ```php containerApi->countItemsFromInputFile(); $this->containerApi->info("Starting export of {$totalProducts} products to channel."); $successCount = 0; $errorCount = 0; foreach ($this->containerApi->yieldFromInputFile() as $product) { try { $this->sendToChannel($product); $successCount++; $this->containerApi->appendToFeedbackFile([ 'id' => $product['id'], 'status' => 'success', ]); } catch (\Throwable $e) { $errorCount++; $this->containerApi->warning("Failed to export product {$product['id']}: {$e->getMessage()}"); $this->containerApi->appendToFeedbackFile([ 'id' => $product['id'], 'status' => 'error', 'message' => $e->getMessage(), ]); } } $this->containerApi->info("Export finished. Success: {$successCount}, errors: {$errorCount}."); if ($errorCount > 0) { $this->containerApi->sendNotification('warning', "Export completed with {$errorCount} errors out of {$totalProducts} products."); return; } $this->containerApi->sendNotification('success', "Export completed: all {$totalProducts} products exported successfully."); } /** * Send a single product to the third-party channel. * * Replace this with your real API call — POST to a partner API, upload to a marketplace, * push to an advertising platform, etc. */ private function sendToChannel(array $product): void { // Example: POST the product to the channel's API endpoint // // $response = $this->httpClient->request('POST', self::CHANNEL_API_ENDPOINT, [ // 'json' => [ // 'external_id' => $product['id'], // 'title' => $product['name'], // 'price' => $product['price'], // ], // ]); // // if ($response->getStatusCode() !== 200) { // throw new \RuntimeException("Channel API returned status {$response->getStatusCode()}"); // } } } ``` You can find this example in the [quickstart repository](https://github.com/productsupcom/connector-quickstart) under `src/Export/`. Configuration [#configuration] Export connectors have several type-specific configurations: * **Channels** — which export channels this connector supports (at least one required) * **Feedback file** — enable/disable feedback and configure connection columns * **Category-specific attributes** — enable support for category-specific attributes See [Type-specific config](/docs/connector-development/dev-portal/connector-setup/type-specific-config#export-configuration) for details. Individual configs on the platform [#individual-configs-on-the-platform] The individual configuration options you define for your connector in the Dev Portal (API keys, target countries, upload intervals, etc.) are presented to end-users as form fields on the export destination page in the ProductsUp platform. End-users fill in these fields to configure the connector for their specific site: Individual config fields shown to end-users on the export destination page in the ProductsUp platform Next steps [#next-steps] * **[Export delta connector](/docs/connector-development/connector-types/export-delta)** — send only changed products * **[Container API reference](/docs/connector-development/container-api/api-reference)** — full API for reading input and writing feedback * **[Demo connectors](/docs/connector-development/get-started/demo-connectors)** — clone and deploy a working export connector # CDE API import { Card, Cards } from "fumadocs-ui/components/card"; The **CDE API** is the management plane of the Connector Development Environment. It covers the full lifecycle of a connector — from creation and versioning through container API configuration, platform deployment, run inspection, and organization administration. Try it out [#try-it-out] Sign in once with your ProductsUp credentials, then run real requests against the CDE API directly from any operation page on this site. Browse by category [#browse-by-category] # Get started import { Card, Cards } from 'fumadocs-ui/components/card'; A connector is a Docker container — you can build one in any language. The [Dev Portal](https://dev-portal.productsup.com) is where you create, configure, build, and deploy connectors. At runtime, a sidecar called the Container API runs alongside your connector and handles all communication with the ProductsUp platform — reading and writing product data, logging, storage, and more. Your connector never talks to the platform directly; everything goes through the Container API. The development loop is straightforward: write your connector code, push it to a Git repository, trigger a build in the Dev Portal, and sync it to a dev environment for testing. Once you're satisfied, sync to production and enable access for your users. The only thing you need to get started is a ProductsUp account with access to the Dev Portal. The quickstart walks through a working example using PHP and Symfony. If you're using a different language or stack, start with Key concepts to understand the model first, then follow the same steps in your own environment. Where to start [#where-to-start] # Demo connectors import { Card, Cards } from 'fumadocs-ui/components/card'; Example connectors you can clone, deploy, and use as a starting point for your own. Each demo is a minimal, working connector that covers the essentials for its type. Both connectors live in the same [quickstart repository](https://github.com/productsupcom/connector-quickstart), organized as separate bounded contexts under `src/DataSource/` and `src/Export/`. The [Quickstart](/docs/connector-development/get-started/quickstart) walks through the data source demo end-to-end. # Key concepts import { Callout } from 'fumadocs-ui/components/callout'; Before you build anything, it helps to understand how the pieces fit together. This page covers the five things every connector developer needs to know. What is a connector? [#what-is-a-connector] A connector is a CLI application, packaged as a Docker image, that moves data in or out of the ProductsUp platform. Connectors let ProductsUp connect to external systems — importing product data from sources like APIs, files, or databases, and exporting processed data to channels like Amazon, Google Merchant Center, or Facebook Dynamic Ads. At runtime, your connector runs inside a Docker container alongside a **sidecar** called the Container API. Your code communicates with the sidecar over HTTP to read input data, write output data, log messages, and access storage. Your connector's job is straightforward: . Receive configuration (API keys, URLs, etc.) via environment variables . Do its work — fetch data from a third-party API, export products, transform data, etc. . Use the Container API to read/write data and send logs . Exit with code `0` (success) or `1`–`254` (failure — any non-zero exit code signals an error) Docker requirements [#docker-requirements] Your connector code is wrapped in a Docker image that the CDE builds from your Git repository. Keep in mind: * You can use any base image available on Docker Hub * All required runtimes must be available inside the image * Dockerfiles must end with a `CMD` instruction — `ENTRYPOINT` is not supported * The CDE API overrides the command at runtime using your [application config](/docs/connector-development/dev-portal/connector-setup/app-config) Where connectors run in the platform [#where-connectors-run-in-the-platform] ProductsUp organizes data in three levels: **Account → Project → Site**. A site stores product data and runs the import → process → export pipeline. Connectors plug into this pipeline. . **External data source** — a company stores product data in a third-party system or file . **Data source added** — an end-user adds a data source to a site in ProductsUp, telling the platform where and how to access the data . **Import** — during a site run, a datasource connector fetches raw data, flattens it, and sends it to ProductsUp via the Container API . **Merge and process** — the platform merges data from all data sources added to the site and processes it according to site rules (filtering, mapping, transformations) . **Site stores processed data** — the processed data is stored for the current run only; any new full site run deletes it and starts fresh . **Export added** — an end-user adds an export channel to the site, telling the platform where to send the processed data . **Export** — an export or export-delta connector reads the processed data and sends it to a third-party channel . **Re-export** — the platform can re-export stored data as many times as needed without reimporting, until a new full site run begins If you're building a **datasource connector**, your code runs at step 3. If you're building an **export or export-delta connector**, your code runs at steps 7 and 8. ProductsUp never stores raw product data. Each full site run deletes the previous run's data and reimports from scratch. Delta exports track changes between runs using metadata. Connectors execute during **site runs**, which can be manual or scheduled. Every run gets a unique process ID you can use for monitoring and debugging. Connector types [#connector-types] Every connector has a **type** that determines its role in the data pipeline. You choose the type when creating a connector — it cannot be changed later. | Type | Direction | What it does | | -------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `datasource` | Inbound | Downloads data from an external data source (API, file, database) and imports it into ProductsUp via the Container API | | `export` | Outbound | Gathers all processed product data in a site and sends it to a third-party export channel every run. Uses a single input type: `full` | | `export-delta` | Outbound | Gathers only the data that changed since the last site run and sends it to a third-party export channel. Uses four input types: `new`, `modified`, `unchanged`, `deleted` | | `data-service` | Transform | Transforms data within the pipeline — validates, enriches, or reshapes product data | | `download` | Inbound | Downloads files via HTTP(S) to exchange storage for further processing | | `transform` | Transform | Reads files from exchange storage, parses and transforms them, and writes product data to output | All connector types use Docker and the Container API. The most common types are **datasource**, **export**, and **export-delta**. The `download` and `transform` types often work together — download fetches a file, transform parses it. **Export vs. export-delta**: An export connector receives *all* products every run — use it when the third-party API expects a full product feed each time. An export-delta connector receives only the products that changed since the last run, split into four streams: * **new** — products added to the site since the last run * **modified** — products changed since the last run * **unchanged** — products with no changes since the last run * **deleted** — products removed since the last run Use export-delta when the third-party system supports incremental updates. Your connector code must match its type — an export connector requesting the `new` input type, or an export-delta connector requesting `full`, will cause an error. Both export and export-delta connectors should write **feedback files** as output. Feedback captures export failures (invalid data, auth issues, unavailable servers) and gets imported as an additional data source on the next site run, letting end-users troubleshoot failed exports. For a detailed comparison, see [Connector types](/docs/connector-development/connector-types). The connector lifecycle [#the-connector-lifecycle] A connector version moves through a series of states from creation to production. You trigger these transitions through the [Dev Portal](/docs/connector-development/dev-portal). ``` Created → Updating → Updated → Building → Built │ ▼ SynchronizingToDev → SynchronizedToDev │ ▼ SynchronizingToProd → SynchronizedToProd ``` | State | What it means | | --------------------- | -------------------------------------------------------------------------------- | | `Created` | Connector version exists but has no configuration yet | | `Updating` | Some configurations exist but are not sufficient to build | | `Updated` | All required configuration is in place — ready to build | | `Building` | Docker image is being built from your Git repository | | `Built` | Docker image built successfully | | `SynchronizingToDev` | Image is being deployed to the dev environment | | `SynchronizedToDev` | Running on dev — you can test it on the ProductsUp platform | | `SynchronizingToProd` | Image is being deployed to production | | `SynchronizedToProd` | Live in production — you can enable access for users or request a global release | Typical workflow [#typical-workflow] **New connector:** Create → Configure (reach `Updated`) → Build → Sync to dev → Test → Sync to prod → Enable access or release **Updating an existing connector:** Change code or config → Rebuild → Sync to dev → Test → Sync to prod. The current production version stays live until the new sync completes. After a successful sync, all users automatically switch to the new version. Enabling access vs. releasing [#enabling-access-vs-releasing] Once your connector is synchronized to production, you have two ways to make it available: * **Enable access** — makes the connector available to specific accounts, projects, or sites. Use this for connectors intended for specific customers or internal use. Note that only export and export-delta connectors can be assigned to production sites. * **Release** — makes the connector available globally on the platform for everyone. Use this when the connector is ready for general use. If a build fails, check the build logs in the Dev Portal to diagnose the issue. You must trigger a new build every time code or configuration changes. To keep multiple production versions, create a new [connector version](/docs/connector-development/dev-portal/versions). Each version has its own configuration, dev environment, and prod environment, independent of other versions. How configurations reach your code [#how-configurations-reach-your-code] When you set up a connector in the Dev Portal, you define **individual configuration fields** — form fields that end-users fill in when they use your connector (for example, an API key or a base URL). At runtime, these values are passed to your connector depending on the **execution mode**: as-env-options (recommended) [#as-env-options-recommended] Individual configurations are passed as environment variables using `SNAKE_CASE` naming: ``` FIRST_OPTION=value submitted by user SECOND_OPTION=value submitted by user ``` as-command-options [#as-command-options] Individual configurations are passed as CLI flags appended to your command: ``` [command] [arguments] --first-option='value submitted by user' --second-option='value submitted by user' ``` You choose the execution mode when creating a connector or connector version. New connectors should use `as-env-options` — it's simpler and works with any framework. In your code, you access configuration values through your framework's standard mechanism. For example, in a Symfony-based connector: ```yaml title="config/services.yaml" App\Service\MyService: arguments: $apiKey: '%env(API_KEY)%' $batchSize: '%env(int:BATCH)%' ``` The Container API sidecar [#the-container-api-sidecar] The Container API is an HTTP server that runs alongside your connector at `http://cde-container-api`. It is the bridge between your code and the ProductsUp platform. Each time your connector runs, it gets a unique Container API instance that is **context-aware** — it automatically knows which site and account it belongs to, so you can only access data relevant to that specific site. Your connector calls it to: * **Read input data** — for export and export-delta connectors, read the product data that needs to be exported * **Write output data** — for datasource connectors, write the products you fetched * **Write feedback** — report export results back to the platform (success/failure per product) * **Log messages** — send logs visible in the Dev Portal monitoring * **Send notifications** — show messages to end-users in the ProductsUp notification panel * **Write to error log** — record errors for debugging * **Access storage** — read/write files to persistent buckets, temporary exchange storage, or the transport server The Container API is only accessible from inside the ProductsUp infrastructure. You cannot call it from outside. Using the PHP SDK [#using-the-php-sdk] While you can call the Container API directly over HTTP, the recommended approach is the PHP SDK: ```bash composer require productsupcom/container-api-client ``` The SDK wraps all HTTP calls into a typed interface. Here's what a datasource connector looks like: ```php use Productsup\CDE\ContainerApi\ContainerApiInterface; readonly class MyDataSourceService { public function __construct( private ContainerApiInterface $containerApi, ) {} public function run(): void { $products = $this->fetchProducts(); // your logic $this->containerApi->appendManyToOutputFile($products); } } ``` For export connectors, you read input instead of writing output: ```php foreach ($this->containerApi->yieldFromInputFile() as $product) { $this->sendToThirdParty($product); $this->containerApi->appendToFeedbackFile([ 'id' => $product['id'], 'status' => 'success', ]); } ``` For the full Container API reference, see [Container API](/docs/connector-development/container-api). Limitations [#limitations] There are a few platform constraints to design around: * **Log lines** — 300 per minute, 7,200 per connector run. Can be raised on request. * **Products per site** — 10,000,000 maximum. Can be raised on request. * **Flat data model** — the ProductsUp data model is flat (rows and columns). Your connector must flatten any nested data before writing it to the output. Next steps [#next-steps] Now that you understand the mental model: * **[Quickstart](/docs/connector-development/get-started/quickstart)** — build and deploy your first datasource connector * **[Connector types](/docs/connector-development/connector-types)** — deep dive on each type * **[Dev Portal](/docs/connector-development/dev-portal)** — learn the UI for managing connectors # Quickstart import { Callout } from 'fumadocs-ui/components/callout'; import { Step, Steps } from 'fumadocs-ui/components/steps'; This guide walks you through creating a datasource connector from scratch — from writing the code to seeing product data flow into ProductsUp. By the end, you'll have a working connector deployed on the platform. Prerequisites [#prerequisites] * A ProductsUp account with access to the [Dev Portal](https://dev-portal.productsup.com) * PHP 8.3+ with [Composer](https://getcomposer.org/) — to build and run the connector locally What we're building [#what-were-building] A datasource connector built with Symfony that fetches products from an external source and writes them into the ProductsUp platform via the Container API. The connector: * Exposes a Symfony Console command that CDE executes at runtime * Calls an `ImportService` that fetches products and writes them to the Container API output * Receives configuration (API keys, URLs, etc.) as environment variables Create the project [#create-the-project] Clone the quickstart repository: ```bash git clone https://github.com/productsupcom/connector-quickstart.git cd connector-quickstart ``` Install dependencies: ```bash composer install ``` Your project structure will look like this: ``` connector-quickstart/ ├── bin/console ├── config/ │ ├── bundles.php │ ├── packages/ │ │ └── framework.yaml │ └── services.yaml ├── src/ │ ├── DataSource/ │ │ ├── Command/ │ │ │ └── RunImportCommand.php # CLI entry point for datasource │ │ └── Service/ │ │ └── ImportService.php # datasource business logic │ ├── Export/ │ │ ├── Command/ │ │ │ └── RunExportCommand.php # CLI entry point for export │ │ └── Service/ │ │ └── ExportService.php # export business logic │ ├── ContainerApi/ │ │ ├── ContainerApiClientFactory.php │ │ └── ContainerApiFactory.php │ └── Kernel.php ├── .env ├── composer.json └── Dockerfile ``` This is a standard Symfony console application. The `DataSource/` and `Export/` folders each contain a CLI command and a service for their respective connector type. `ContainerApi/` wires up the Container API client shared by both. Write the connector [#write-the-connector] The connector has two key files and a DI binding. **The CLI command** — the entry point that CDE executes. It delegates all work to the service: ```php title="src/DataSource/Command/RunImportCommand.php" importService->run(); } catch (\Throwable) { return Command::FAILURE; } return Command::SUCCESS; } } ``` **The service** — fetches products and writes them to the platform. Replace the hardcoded array with your real data source (an API call, a file read, a database query, etc.): ```php title="src/DataSource/Service/ImportService.php" containerApi->info('Starting product import.'); // Replace this with your real data source — an API call, file read, database query, etc. $products = [ ['id' => '1', 'name' => 'Product A', 'price' => '9.99'], ['id' => '2', 'name' => 'Product B', 'price' => '19.99'], ['id' => '3', 'name' => 'Product C', 'price' => '29.99'], ]; $this->containerApi->appendManyToOutputFile($products); $this->containerApi->info('Imported ' . \count($products) . ' products.'); // Notify the end-user in the ProductsUp notification panel $this->containerApi->sendNotification('success', 'Import completed: ' . \count($products) . ' products imported.'); } } ``` The repository also includes an [export connector example](/docs/connector-development/connector-types/export) under `src/Export/` — see the [demo connectors](/docs/connector-development/get-started/demo-connectors) page for both. **The DI binding** — tells Symfony to inject the Container API client wherever `ContainerApiInterface` is type-hinted: ```yaml title="config/services.yaml" services: _defaults: autowire: true autoconfigure: true bind: Productsup\CDE\ContainerApi\ContainerApiInterface $containerApi: '@container.api' App\: resource: '../src/' ``` Create a connector in the Dev Portal [#create-a-connector-in-the-dev-portal] Open the [Dev Portal](https://dev-portal.productsup.com) and navigate to the **Connectors** page. Connectors view in the Dev Portal Click **Add connector** to open the creation dialog and fill in the fields: Add connector dialog with fields filled in | Field | Description | | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Connector name** | A human-readable name for the connector. Shown in the Dev Portal and in the ProductsUp platform. | | **Connector type** | Determines the connector's role in the pipeline — `Data source` imports data into ProductsUp, `Export` and `Export delta` send data out. Cannot be changed after creation. See [Connector types](/docs/connector-development/get-started/key-concepts#connector-types) for the full breakdown. | | **Connector description** | A short description of what the connector does. Shown to end-users when they add the connector to a site. | | **Connector flow** | Controls how the connector integrates with the platform. **Default** — the connector is assigned to dev and prod platform sites and can be synced to them. **Standalone** — the connector is not assigned to platform sites; use this for connectors that run without a site context. **Migration** is internal-only. | | **Execution mode** | Choose **Environment variable** — it passes user-provided values as `SNAKE_CASE` env vars and works with any framework. See [how configurations reach your code](/docs/connector-development/get-started/key-concepts#how-configurations-reach-your-code) for a full explanation of both modes. | | **Connector owner** | The organization that owns this connector. Determines who can manage it. Defaults to your own account. | Click **Add connector**. The connector is created in `created` state and you'll be taken to the connector setup wizard. Connector in created state Configure VCS [#configure-vcs] In the setup wizard, go to the **Version Control configuration** step. Point it to your connector repository: Version Control configuration step | Field | Value | | ---------------------- | --------------------------------------------------------------- | | **Authorization type** | Public repository (no credentials needed — this repo is public) | | **Repository link** | `https://github.com/productsupcom/connector-quickstart` | | **Branch** | `main` | Click **Save**, then **Test connection** to validate the repository is reachable. For your own private repositories, use **Basic** auth with a personal access token — it's the quickest way to get connected. For production connectors, a **Deploy key** is recommended: it grants read-only access scoped to a single repository and doesn't expire with your personal account. Configure application [#configure-application] In the **Application configuration** step, tell CDE how to run your connector: Application configuration step | Field | Value | | ---------------- | ------------------------------------ | | **Command** | `php` | | **Arguments** | `./bin/console connector:run:import` | | **Health check** | `--help` | The command and arguments together form what CDE executes inside the Docker container. The health check runs the same binary with `--help` first to verify the container started correctly. Build the connector [#build-the-connector] The quickstart repo includes a ready-to-use `Dockerfile`: ```dockerfile title="Dockerfile" FROM php:8.3-cli RUN apt-get update && apt-get install -y unzip && rm -rf /var/lib/apt/lists/* COPY --from=composer:2 /usr/bin/composer /usr/bin/composer WORKDIR /app COPY bin/ ./bin COPY config/ ./config COPY src/ ./src COPY .env composer.json composer.lock ./ RUN composer install --no-dev --no-interaction CMD ["php", "bin/console"] ``` In the Dev Portal, navigate to the **Release configuration** page and click **Build**: Release configuration page before building — click Build to start This: 1. Connects to your Git repository 2. Pulls the code from the configured branch 3. Builds a Docker image using your `Dockerfile` 4. Runs the health check 5. Pushes the image to the registry Once the build completes, the connector state moves to `built` and the next steps become available: Release configuration after successful build — Build complete, ready to sync Deploy to dev [#deploy-to-dev] The Release configuration page walks you through deploying your connector step by step: | Step | What it does | | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Build connector** | Builds the Docker image from your repository. You've already done this. | | **Sync connector with runtime** | Registers the built image with the connector's runtime environment so it can be executed. | | **Sync connector with dev** | Deploys the connector to the development environment and assigns it to a dev site on the ProductsUp platform. Once synced, it can be tested with real site runs. | | **Sync connector with prod** | Deploys the connector to production asynchronously. Once complete, the new version is live and the previous one is replaced. | | **Enable access** | Makes the connector available to specific accounts, projects, or sites. Required before end-users can add it to their sites. | Click **Start syncing** next to **Sync connector with runtime**. Once it completes, the **Sync connector with dev** section expands: Connector synced with runtime, ready to sync with dev Click **Create a new site**. This creates a test project and site on the ProductsUp platform for your connector, syncs the connector to the development environment, and assigns it to the site. The three sub-steps run automatically: 1. **Creating a site or ensuring it exists** — creates a dev project and site on the platform 2. **Synchronizing your connector to development environment** — registers the connector so the platform can execute it 3. **Assigning the latest version of your connector to a Site** — links your connector to the dev site Once all three complete, the connector is synced with dev: Connector synced with dev Assigning the connector to the dev site means it's now available as a data source on that site — you can trigger site runs that execute your connector. Click **Open dev site** to go to the site on the ProductsUp platform. Test it [#test-it] With the connector synchronized to dev, you can trigger a test run. Navigate to the **Runs** section in the Dev Portal to: * See the run status and duration * View application logs (the messages sent via `$this->containerApi->info()`) * Check stdout/stderr for debugging * Verify that product data was written successfully If everything works, you should see a log message confirming the three products were imported. Deploy to production [#deploy-to-production] Once you're happy with how the connector works on dev, go back to the **Release configuration** page and click **Start syncing** next to **Sync connector with prod**. This creates a production version of your connector based on its current configuration. After the sync completes, the **Enable access** section becomes available: Connector synced with prod From here you have two options: * **Change access** — makes the connector available to specific accounts, projects, or sites. Use this when the connector is intended for specific customers or internal use. * **Release** — makes the connector available globally on the platform for all users. Next steps [#next-steps] You've built, deployed, and released your first connector. From here: * **[Key concepts](/docs/connector-development/get-started/key-concepts)** — understand the full mental model behind connectors * **[Connector types](/docs/connector-development/connector-types)** — explore all connector types # Export Connectors import { Accordions, Accordion } from 'fumadocs-ui/components/accordion'; **What is it?** Export Connectors push data from the Productsup platform to external destinations. They can send to APIs, generate custom file formats, or upload to various storage solutions. **How it works.** Export Connectors require an export template that defines the data structure and attributes. Users map their data to these attributes through the platform UI. The connector receives each item as key-value pairs and handles delivery to the destination. They can be enabled globally or limited to specific users. Export-delta connectors include additional functionality to identify item status (new, modified, deleted, unchanged) compared to the previous run, optimizing API calls by sending only changed items. Connectors are self-contained applications that run on Productsup infrastructure and can be built by clients, system integrators or as a service by Productsup. * Push data to third-party APIs * Generate custom file formats (XML, JSON, JSONL, CSV, Excel) * Upload files to various destinations (SFTP, S3, Google Cloud, HTTP endpoints, Productsup transport server) * Handle delta exports (send only new, modified, or deleted items) * Trigger external APIs after file upload * Destination requires a custom API integration * Custom file format or structure is needed * Non-standard upload destination is required * Delta exports are needed to optimize API calls * Destination already has a Productsup-built integration (use existing channel) * Third parties need to pull data from you (use [Export API](/docs/productsup-connect/use-cases/export/export-api) instead) * Pushing product data to a proprietary PIM or e-commerce API * Generating custom XML feeds for niche advertising channels * Uploading feeds to legacy SFTP servers with specific file naming conventions * Sending only changed products to an API with rate limits * Creating custom file format and triggering partner API to process it You can read the technical documentation [here](/docs/connector-development). # Export API import { Accordions, Accordion } from 'fumadocs-ui/components/accordion'; **What is it?** Export API exposes exported product data through a REST API endpoint, allowing third parties to programmatically read and filter exported datasets. The data is queryable with advanced filtering capabilities similar to SQL. **How it works.** After setting up an Export API destination in a channel and running an export, the data becomes available via a REST endpoint. Each destination receives a unique URL and authentication token. Data structure matches the export template configuration in a flattened format. The API supports pagination, simple filtering, group-by operations, and complex multi-criteria queries. * Expose exported data via REST API with unique authentication per destination * Filter data using simple (single column) or advanced (SQL-like) queries * Paginate through large datasets (up to 1000 products per request) * Group by specific columns to get unique values * Order results by any column * Control which data is exposed (exclude skipped products or internal attributes) * Third parties need programmatic access to exported data * Multiple consumers need access to the same dataset with separate credentials * Data needs to be filtered or queried programmatically rather than downloaded as files * Building a public or semi-public API for product data * Downstream systems need to pull data on-demand rather than receiving pushes * Providing partners with API access to product catalog * Enabling downstream systems to query product data * Building a public product API for developers * Sharing different product subsets with multiple third parties using separate tokens You can read the technical documentation [here](/docs/export-api). # Feedback Connectors import { Accordions, Accordion } from 'fumadocs-ui/components/accordion'; **What is it?** Feedback Connectors retrieve status and error information from export destinations after data submission. They show which products were successfully accepted, rejected, or flagged with warnings. **How it works.** Feedback Connectors are built separately from Export Connectors but paired with them. After an export runs, the feedback connector queries the destination's API and surfaces results in the platform, helping users identify and fix issues. Currently these can only be built by Productsup. * Fetch submission status from channel APIs * Display product-level errors and warnings in the platform * Identify which products failed destination validation * Export destination provides feedback via API (synchronous or asynchronous) * Visibility into which products are listed vs rejected is needed * Channel validation errors need to be caught without manual checking * Exporting to advertising or marketplace channels with detailed feedback * Destination doesn't provide feedback (simple file uploads to FTP) * Destination has no API to get submission status * Fetching rejection reasons from Google Merchant Center * Monitoring Facebook Catalog submission status * Tracking which products failed validation on marketplace APIs # Export Template Management API import { Callout } from 'fumadocs-ui/components/callout'; import { Accordions, Accordion } from 'fumadocs-ui/components/accordion'; **What is it?** Export Template Management API enables programmatic creation and management of export templates. Export templates define the schema (attributes, validation rules, acceptable values) that users map their data to for export. **How it works.** Export templates are created via the ETM API with defined attributes and validation rules (analyzer tests). Users then map their platform data to these attributes. Templates pair with Export Destinations to deliver the data. * A standardized schema needs to be used across multiple sites or users * Export template creation needs to be automated or managed programmatically * Consistent data quality validation is required across many exports * Creating a Google Shopping export template for use across multiple accounts * Standardizing export schemas for a multi-tenant platform * Automating template creation for onboarding new clients See the full [Export Template Management documentation](/docs/export-template-management) for API reference, authentication, resources, and more. # Data Service Connectors import { Accordions, Accordion } from 'fumadocs-ui/components/accordion'; **What is it?** Data Service Connectors modify or enrich data while it's in the Productsup platform. They process items individually, applying custom logic or calling external APIs before export. **How it works.** Data Service Connectors receive items from the platform, modify them, and save them back. They can enrich data via external APIs or apply custom transformation logic. Connectors are self-contained applications that run on Productsup infrastructure and can be built by clients, system integrators or as a service by Productsup. * Enrich data using third-party APIs (translation, AI, custom services) * Apply custom transformation or cleanup logic * Parse complex data stored within item attributes (JSON, XML, CSV) * Data enrichment requires external API calls (translation, AI enhancement) * Custom transformation logic is needed beyond platform capabilities * Complex data parsing is required (nested JSON, XML within attributes) * Third-party services need to process data before export * Transformation can be done with native Productsup rules/boxes. Check documentation before building custom connectors. * You only need to enrich data at import time (handle in Import Connector instead) * Translating product descriptions using a third-party translation API * Enhancing product titles with AI-generated content * Parsing JSON stored in custom attributes and extracting specific fields * Merging multiple attributes into a single formatted field * Calling a custom pricing API to calculate promotional prices You can read the technical documentation [here](/docs/connector-development). # Import Connectors + Stream API Some use cases benefit from chaining Import Connectors and Stream API together. Use when you need to pull data from a system but also want delta support. The [Import Connector](/docs/import) pulls from a source (API, FTP, cloud storage), then feeds into [Stream API](/docs/import/stream-api) for permanent storage with delta support. **Best for:** Large catalogs from pull-only sources where you only want to process changed products downstream. # Import Connectors import { Accordions, Accordion } from 'fumadocs-ui/components/accordion'; **What is it?** Import Connectors pull data from external sources into the Productsup platform on a schedule. They handle complex data transformation and file processing before import. **How it works.** Import Connectors appear as data sources in the platform. Users configure authentication, endpoints, and filters through the UI. They can be enabled globally or limited to specific users. Connectors are self-contained applications that run on Productsup infrastructure and can be built by clients, system integrators or as a service by Productsup. * Pull data from any API * Import files from any storage solution * Parse custom or complex file formats * Merge multiple files before import * Flatten nested data structures for platform ingestion * Your source can't push data — Productsup needs to pull it * Standard Productsup import can't handle the file complexity (custom formats, nested structures, file merging) * You need near real-time updates (use [Stream API](/docs/productsup-connect/use-cases/import/stream-api) or [Webhook API](/docs/productsup-connect/use-cases/import/webhook-api)) * You need delta support on import (combine with [Stream API](/docs/productsup-connect/use-cases/import/stream-api), or use Stream API directly) * Importing product catalog from an e-commerce API * Pulling inventory data from an ERP system * Parsing and merging multiple supplier feeds with different formats You can read the technical documentation [here](/docs/connector-development). # Stream API import { Accordions, Accordion } from 'fumadocs-ui/components/accordion'; **What is it?** Stream API is a high-performance API for pushing product data into the Productsup platform. It supports delta updates out of the box and permanent storage, enabling frequent, incremental changes without resending full product data. **How it works.** Requires implementation against our Stream API. Once a product is sent, it's stored permanently on the platform until explicitly cleared or deleted. Only changed attributes need to be sent in subsequent updates. The API supports only predefined, flattened formats (NDJSON and JSON) to maintain performance. * Push individual product updates at high frequency * Send delta updates with only changed attributes * Permanently store product data (fire-and-forget) * Handle real-time or near-real-time product changes * Support event-driven data flows * System can push data to an API * You need real-time or near-real-time updates * You can format data as NDJSON/JSON matching the required format * You need delta support (only send changed attributes) * Data comes from sources that can't push to an API (use [Import Connectors](/docs/productsup-connect/use-cases/import)) * Complex file transformations or merging are needed (use [Import Connectors](/docs/productsup-connect/use-cases/import)) * Real-time inventory updates from a warehouse management system * Price changes triggered by dynamic pricing algorithms * Product availability updates from an order management system * Event-driven updates as products change in an e-commerce platform * Near real-time product updates for Google Merchant Center with end-to-end delta support [Technical documentation](/docs/stream-api) # Webhook API import { Callout } from 'fumadocs-ui/components/callout'; import { Accordions, Accordion } from 'fumadocs-ui/components/accordion'; **What is it?** Webhook API combines the flexibility of the Stream API with the power of connectors to transform data. It accepts any data format and integrates with webhook or callback-based services. **How it works.** Webhook API is built on Stream API but accepts custom data formats. Data is sent to the API endpoint, then processed by webhook connectors that transform or enhance it before platform ingestion. Existing webhook connectors are available for common services, or custom connectors can be built for specific needs. * Accept data in any textual format * Integrate with webhook, callback, or event-driven services * Supports integrating custom built connectors to deal with specific data format requirements * System can send webhooks/callbacks (event-driven) * Data format doesn't conform to Stream API requirements * You want delta support but can't restructure your payload format * Data conforms to Stream API formats and no transformation is needed (use [Stream API](/docs/productsup-connect/use-cases/import/stream-api) for better performance) * Integrating with Shopify webhooks to import product data * Receiving Amazon SNS notifications for inventory changes * Custom webhook service with proprietary data format Technical documentation coming soon. # Share dataflow with other sites import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; The Shared Dataflow feature lets you reuse the existing intermediate and export dataflows of one site in another. The shared dataflow is either an import-intermediate or intermediate-export mapping, with all connections between stages, custom attributes, and rule boxes shared with other sites. Only users with admin rights can access the Shared Dataflow feature. But users with read-write access can still make changes in the shared dataflows. When you share a dataflow with another site, it's not a copy but the same dataflow. If you change a shared dataflow in any site, these change applies to all sites with the same dataflow. You can change a shared dataflow as follows: * Add, edit, or delete rule boxes. * Add or delete dataflow connections. * Add, rename, or delete user-generated attributes. * Add, edit, or delete rule box conditions. If you need to copy dataflow to another site and change it independently, use the Copy Dataflow feature. See [Copy dataflow between sites and exports with Import Dataflow and Copy Dataflow](/docs/help-center/map-and-optimize-your-data/dataflow/copy-dataflow-between-sites-and-exports-with-import-dataflow) for more information. No matter in which site you change a shared dataflow, Activity Log only shows the changes as if you made them in the source site's dataflow. See [View your Activity Log and Summary](/docs/help-center/get-started/manage-your-organization-projects-and-sites/view-your-activity-log-and-summary). Shared Dataflow use cases [#shared-dataflow-use-cases] Shared Dataflow is helpful if you need the same dataflow structure and settings in several sites. You can use it in the following cases: . If you have several sites for different countries and/or languages that should export data to the same export channel. . If you need to set up dataflow with the same settings for several sites. The shared dataflow feature lets you do it in bulk, and then you can disconnect the dataflows to add specific rule boxes and connections to each site's dataflow. Here is how the Shared Dataflow feature works. Suppose you have two (2) sites and want to share one site's dataflow with another. Site A has its import, dataflow, and export set up. Site B has only its import and export setup. If you need the same dataflow in both sites, site A can become a source of intermediate and export dataflow for site B. The following example illustrates how site A shares the dataflow with site B: UUID-bdc7943d-ed85-57f3-b450-eb1231be6846 You can reuse intermediate and export stages from different sites instead of using only one site's dataflow. For example: * Site A shares the intermediate stage of the dataflow with site B. * Site B shares the export stage of the dataflow with sites C and D. UUID-28a372d9-f69c-36f4-e535-08feff87675b If the imported attributes of two (2) sites differ, the feature still works as explained. Still, the attributes in the import stage that don't match those of the shared intermediate stage remain disconnected between the dataflow stages. You can connect them manually. UUID-b292c082-d708-b404-5c2e-453ab475ff19 The missing shared attributes appear in the import stage with the exclamation point and red connections between the stages. UUID-522565fc-ce61-fe1f-79f3-df113f8038d6 Prerequisites [#prerequisites] Before sharing the dataflow of the source site A with the subscribing site B, take the following steps: . Create site A, add a data source, import your data feed, and add at least one export. See [Add export](/docs/help-center/export-data-feeds/add-export). . Create site B, add a data source, import your data feed, and add at least one export depending on what dataflow stage you want to share: * To share the intermediate stage, the exports of sites A and B may differ. * To share the export stage, site A and site B must have the same export. For example, if Google Merchant Center is an export of site A, add Google Merchant Center export to site B. Find the Shared Dataflow feature [#find-the-shared-dataflow-feature] Go to **Shared Dataflow** from your organization's main menu. UUID-20418baf-a185-7800-5bd4-1fc37fadec7e See a list of all existing shared dataflows or create a new one. Overview of Shared Dataflow [#overview-of-shared-dataflow] If you have at least one shared dataflow, the Shared Dataflow page displays a table with the following information: UUID-52e587e8-a48a-8a88-f47f-d2067ae254d4 * **Name** shows the name of the shared dataflow. * **Description** shows the description of the shared dataflow. * **Source site** shows the ID and name of the site that is the source of the shared dataflow. Select the source site link to view its Dataflow page. * **Used by** shows the number of sites that share the same dataflow. * **Stage** shows the intermediate or export stage converted to a shared dataflow. * Three dots (**...**) open the dropdown with the **Edit** and **Delete** options. To find a shared dataflow in the list, use the **Search for shared dataflows** field. Create a shared dataflow [#create-a-shared-dataflow] To share a needed dataflow with another site, take the following steps: Go to **Shared Dataflow** from your organization's main menu. Select **Add shared datadlow** in the top right corner. UUID-b3879d06-1741-bcd4-7df3-8b5d46879ae4 Give a name to the shared dataflow in **Name**. Select the site in the **Source site** dropdown or search for a needed site by its title or ID. When you hover over the site's name in the dropdown, the tooltip shows the site's ID and the project's name, so you can select exactly what you need. Choose either **Intermediate** or **Export**, depending on which dataflow stage you want to share: * If you select **Export**, the **Export** dropdown appears, letting you choose the export whose dataflow you want to share. UUID-b6dee4e9-449d-9314-0bc1-abba69b84301 Optionally, add a description for your shared dataflow in **Description**. Select **Create**. In this step, the shared dataflow already appears in the list of the Shared Dataflow page. You may edit it and add sites later. See [Add more sites to a shared dataflow](#section-idm455685701281443372306367791). To find and select sites you want to share dataflow with, scroll through the **Compatible sites** list or use the **Search for site IDs and titles** field. Depending on what stage of the dataflow you share, the list of compatible sites differs: * If you share the intermediate stage, all sites of your organization are compatible. * If you share the export stage, you can see only the sites that have the same export. To move sites from **Compatible sites** to **Selected sites**, select one of the following: * The arrow next to the project name to add all sites of the project. * The arrow next to the needed site to add specific sites. * The **Select all** link above the Compatible sites list to add all sites. UUID-28ff69b0-4a97-d07f-ed07-9d77836c8ab6 To remove the sites from the Selected sites list, select the **X** icon next to the needed site or project, or select **Remove all** above the Selected sites. UUID-54bf4fbd-ae68-273c-9f88-34651b70e257 Select **Apply** to confirm your choice, or **Skip and finish** if you don't want to add any sites now. You can add sites later in the Shared Dataflow page. When you create a shared dataflow, the **SHARED** label appears next to the shared stage and in the exports dropdown in *Dataflow*. UUID-b1b3171b-839a-a914-4572-5658555f2a2d Add more sites to a shared dataflow [#add-more-sites-to-a-shared-dataflow] If your shared dataflow has no sites or you want to share the same dataflow with more sites, you can add sites as follows: Go to **Shared Dataflow** from your organization's main menu. Select the three dots (**...**) icon next to the needed shared dataflow, then select **Edit**. UUID-40be419d-3023-52eb-fd9e-5f941535326a Select **ADD SITES** in the top right corner. Search for and select the desired sites in the **Compatible sites** list as described in [see the relevant section](#N1687264189856). Select **Save**. Edit a shared dataflow [#edit-a-shared-dataflow] To edit a name or description of your shared dataflow: Go to **Shared Dataflow** from your organization's main menu. Select the three dots (**...**) icon next to the needed shared dataflow, then select **Edit**. UUID-40be419d-3023-52eb-fd9e-5f941535326a Make necessary changes and select **Save**. Remove a shared dataflow from a site [#remove-a-shared-dataflow-from-a-site] To stop sharing a dataflow with specific sites, first remove these sites from the shared dataflow. If you disconnect a site's dataflow from the shared dataflow, the site's dataflow returns to its original version before it started sharing another site's dataflow. But if you want to save the current shared dataflow version in the site, you can copy it and keep using it independently from the shared dataflow. Go to **Shared Dataflow** from your organization's main menu. Select the three dots (**...**) icon next to the needed shared dataflow, then select **Edit**. UUID-40be419d-3023-52eb-fd9e-5f941535326a In *Sites using this shared dataflow*, select the sites that don't need a shared dataflow anymore, or select the **Select all** link if you want to remove all sites. UUID-cceb9fe3-0bbe-ecfb-ad38-b0f7f8982e4b Select **Unshare the dataflow with selected sites**. UUID-8ae319f0-f3e0-83fa-fc08-391a4ce3b7f3 In the *Unshare the dataflow with the selected sites* pop-up, select the way you want to save the site's dataflow: * To roll back the site's dataflow to its original version before it started using a shared dataflow, select **Remove**. * To save the current dataflow version in the site and keep using and editing it independently, select the checkbox **Copy \{shared dataflow name} dataflow and apply it to the selected sites**. UUID-fc15cab0-cda2-48ec-1984-8fb02f92ba1a Delete a shared dataflow from Shared Dataflow [#delete-a-shared-dataflow-from-shared-dataflow] To delete a shared dataflow and disconnect all sites' dataflows: Go to **Shared Dataflow** from your organization's main menu and select the three dots (**...**) icon next to the needed shared dataflow. UUID-542ecc9d-597b-17d4-1c98-ef738361ea33 Select **Delete** and continue with one of the options: * If no sites share the dataflow, select **Delete** in the *Stop sharing Dataflow* pop-up. * If at least one site shares the dataflow, in the *Unshare the dataflow with the selected sites* pop-up, select the way you want to save the site's dataflow: * To roll back the site's dataflow to its original state before it started using a shared dataflow, select **Remove**. * To save the current dataflow version in the site and keep using it independently, select the checkbox **Copy \{shared dataflow name} dataflow and apply it to the selected sites**. And then select **Remove**. UUID-fc15cab0-cda2-48ec-1984-8fb02f92ba1a # Work with the Dataflow toolbar import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Dataflow offers several advanced features that help you adjust this page for comfortable work. You can access these features from the upper ribbon above the Dataflow stages: UUID-7aafaa78-4aba-f3fc-7631-fb55c8416fc7 The features let you perform the following actions: * [Export selection](#section-idm4678731876777633302879394024) lets you select one of the exports added in Exports. * [Preview](#section-idm4549545763088032758356929271) unfolds a panel on the left-hand side of Dataflow and displays the values of the imported attributes. * [Filter Columns](#section-idm4549546043726432758418065703) unfolds the search fields of the import, intermediate, and export stages to let you search for needed attributes. * [Automap connections](#section-idm4492642508116832739568252246) lets you choose among the options for automapping the attributes between the stages. * [Filter Boxes](#section-idm4544446872062433297831526971) lets you look up certain rule boxes applied to your attributes while hiding those that don't match the search keywords. * [Versions](#section-idm232216577475068) stares all versions of your Dataflow and lets you retrieve a necessary version in case of an issue. * [View](#section-idm4549589984585632758596962454) lets you hide or reveal specific attributes and specify the sorting order for attributes in the import, intermediate, and export stages. * [More](#section-idm4572748735030432758603356847) lets you remove rule boxes, custom attributes, or connections between attributes in bulk. * [Rule Box Conditions](/docs/help-center/add-a-rule-box/apply-rule-boxes-based-on-conditions) lets you create and set up conditions to determine when the platform should apply rule boxes to an attribute. The following sections describe each feature in detail. Select an export [#select-an-export] The export selection button lets you choose one of the exports you have already added in Exports. UUID-13e207e7-5a63-f403-50fb-c02c47fa0e00 To select an export: Go to **Dataflow** from the site's main menu. Select the export selection drop-down menu in the upper ribbon. Select the export where you can map attributes or apply rule boxes. Preview import data [#preview-import-data] The *Preview* button shows a preview of imported attribute values to help you map your attributes more accurately. To open preview: Go to **Dataflow** from the site's main menu. Select the **Preview** button in the upper ribbon. An additional section with the attribute's values opens on the left of Dataflow. Use arrows to switch between the items. Each page represents the attribute values of one item. UUID-365d4651-57c0-2612-e157-b69015a5019c If your import stage contains many attributes intended for different exports, it can be challenging to map attributes. To ensure you are mapping the correct attribute, instead of switching between the pages, you can search for a known attribute's value to view the item associated with it and make a better mapping decision. To search for an attribute's value: Select **Preview**. Select the magnifier icon UUID-a555db98-87d7-1bbe-4771-942a61107d0f next to the necessary value. In the **Attribute value search** pop-up window, enter a value for an attribute in the **Search value** field. UUID-a3fe95df-9b02-7b36-b655-c2a69827d8e1 Select **Search**. The item page containing the search value opens. To hide the Preview panel in Dataflow: Select the **Preview** button in the upper ribbon again. Find an attribute in the stage [#find-an-attribute-in-the-stage] The *Filter Columns* button lets you find a specific attribute in the import, intermediate, or export stages. UUID-fa83f45b-68de-df12-5c46-8fae05cabef9 To find a specific attribute in one or all stages: Go to **Dataflow** from the site's main menu. Select the **Filter Columns** button in the upper ribbon. Enter the needed attribute name in the search field of the specific stage. UUID-a8f5120c-3bdd-5b95-f489-faabed9a4f06 Map attributes with Automapper [#map-attributes-with-automapper] You can connect attributes between stages individually, or you can use the Automapper feature to save time. Automapper connects attributes in seconds using the exact name matching, dictionary, or AI suggestions. You can map attributes from import to intermediate and from intermediate to export. Automapper only maps unconnected attributes. If an attribute already has a connection, Automapper leaves it as is. To use Automapper: Go to **Dataflow** from the site's main menu. Select **Automap connections** in the upper ribbon. UUID-84158ec4-bb22-7f5b-9c5a-dfc13b0d77b6 Choose an option from the drop-down menu: * *Import to intermediate* maps the attributes between the import and intermediate stages. * *Intermediate to export (all intermediate attributes)* maps all intermediate attributes between the intermediate and export stages. * *Intermediate to export (only attributes connected to import)* selects only the attributes mapped to import and maps them between the intermediate and export stages. * *Map all import attributes to export* maps the attributes from the import to export stage. If the names of the attributes don't match, the platform creates custom attributes at the relevant stage. The attribute order doesn't change in your export file, although the platform arranges the attributes alphabetically in your Dataflow view. When you select one of the Automapper options, the **AUTOMAPPER** pop-up window opens to let you specify your mapping possibilities. In step 1, select the automapping method: UUID-00977515-3570-875d-e5ed-9996b099a02b 1. **Direct matches** maps attributes that are exactly the same in both stages. The matching is case-insensitive. For example, **ProductTitle** may match **producttitle**.The drop-down has the following options: * *Yes* means that the direct matching is active. It is the default selection. * *No* means that the platform ignores the direct matches and uses other automapping methods. 2. **Dictionary matches** maps the attributes using our extensive internal dictionary.The drop-down has the following options: * *Yes* means that the dictionary matching is active. It is the default selection.When set to *Yes*, the **Confidence** scale becomes active and lets you change the matching accuracy. Set lower confidence rate to get more matches that are less accurate or set higher confidence rate to get fewer but more exact matches. By default, **Confidence** is *80%*. You can see the results in the next step. * *No* means that the platform ignores the dictionary matches and uses other automapping methods. 3. **Predicted matches** maps the attributes with the help of an AI model. When selected, this method matches only the attributes that remain unmapped after the direct or dictionary matching.The drop-down has the following options: * *Yes* means that the predicted matching is active.If you select *Yes*, the **Confidence** scale becomes active and lets you change the matching accuracy. Set lower confidence rate to get more matches that are less accurate or set higher confidence rate to get fewer but more exact matches. By default, **Confidence** is *80%*. You can see the results in the next step. * *No* means that the platform ignores prediction matches and uses other automapping methods. It is the default selection. In step 2, you can see all mapping suggestions from the previously selected automapping methods. By default, the platform marks all the suggestions as selected, but you can deselect those that you think are irrelevant. When you are ready, select **Apply and finish** to confirm the mapping. UUID-e02925ac-a2fe-2081-bebf-65ff3690b23a A pop-up window opens, informing you that applying the mapping changes your current Dataflow and that you can only revert it by restoring a previous version or removing each mapping manually. dataflow-automapper-save-version-prompt * Select **Yes** to save your current Dataflow as a new version before the platform applies the mapping. This lets you roll back to this version later if needed. * Select **No** to apply the mapping without saving a version. * Select **Cancel** to close the pop-up without applying the mapping. Find an applied rule box in Dataflow [#find-an-applied-rule-box-in-dataflow] The *Filter Boxes* search field lets you look up certain rule boxes applied to your attributes while hiding those that don't match the search keywords. UUID-761ef1f2-ba04-d106-1b2e-e85054265751 Find an applied rule boxes: Go to **Dataflow** from the site's main menu. Enter the name of the rule box you want to search for or a keyword associated with it in the **Filter Boxes** search field. The platform hides all non-matching rule boxes from Dataflow, showing only those that match your search term. Manage versions in Dataflow [#manage-versions-in-dataflow] As you edit and adjust elements in your Dataflow, it is helpful to save versions of your Dataflow before testing something or making major changes so that you can roll back to earlier versions in case of a problem. Dataflow automatically saves versions before you commit significant changes, such as deleting all connections. But you can also save versions manually. You can see the list of saved versions by selecting the **Versions** button in the upper ribbon. UUID-7c8b20a8-54bd-2c92-bbeb-cd4f0f267a7f To save a new version of Dataflow: Go to **Dataflow** from the site's main menu. Select **Versions**. Select **+ Save Dataflow as New Version**. UUID-8cac2329-6f0d-4794-6824-2dabce6cdbe8 In the pop-up menu, enter the version's name and leave a comment (optional). UUID-8ec82675-6967-c9f1-0353-18d9844153d6 Select **Save**. The Versions drop-down menu now includes your saved version. There are several icons to the right of each saved version. UUID-dc699ca2-40f6-5ba5-00a5-e0654ee14534 These highlighted icons let you perform the following actions: * View a comment. * Edit a version name or comment. * Delete a version. To retrieve a version of Dataflow: Select **Versions**. Select the version you wish to retrieve. Select **Yes** to save your current Dataflow version before loading a previous version. Loading one of the previous Dataflow versions overwrites the current version. If you continue without saving your current Dataflow version, you will lose all Dataflow changes for all exports in the current site performed since the last saved version. Sort by attributes [#sort-by-attributes] The *Sort by* drop-down menu under the *View* button lets you define the order of attributes to appear in Dataflow. It doesn't affect the order of the attributes in the final export. It only customizes your view in Dataflow. UUID-882cda3e-ac41-dded-1b21-81aef240dbc7 To access sorting options for attributes: Go to **Dataflow** from the site's main menu. Select the **View** button in the upper ribbon and select **Sort by**. Choose your option from the drop-down list: * *Connection* shows connected attributes at the top. * *Column Name* makes attributes appear in alphabetical order, from A to Z. * *Import Order* makes attributes appear in the import stage in the same order they appear in your data sources. * *Import Order and Connection* makes attributes appear in the import stage in the same order they appear in your data source. The connected attributes come first. * *Export Order* make attributes appear in the export stage in the order they appear in the export file. * *Raw Import & Export Order* makes attributes appear in the import and export stages in the order they appear in the data source and exports. Hide or show attributes [#hide-or-show-attributes] The *Hide/Show* drop-down menu under the *View* button lets you customize the Dataflow view by hiding irrelevant information to be able to focus on specific stages or attributes: UUID-8666aa7f-c81d-920d-8695-63a1b3ac1e5a To hide or show the attribute data: Go to **Dataflow** from the site's main menu. Select **View** in the upper ribbon and select **Hide/Show**. Select a type of data that you want to hide or show. Choose one of these options to have the following effect: * *Hide Unconnected Columns* hides all unmapped attributes. * *Hide Connected Columns* hides all mapped attributes. * *Hide Import* hides the entire import stage. * *Hide Export* hides the entire export stage. * *Hide Warning Connections* hides any red warning connections generated after importing data from another site. A warning connection is a red line between two stages in Dataflow\.A warning connection appears when there is an active connection between the attributes in the import and intermediate stages, but the connected attribute doesn't exist in the import stage. You can also see a warning connection if the rule box applied to this connection doesn't have the required attribute value. * *Hide Attributes without Values* hides all attributes with empty values. * *Display Attributes from Datasources* lets you choose the main or additional data sources whose attributes you want to see in Dataflow. * *Column Views* lets you select a custom Dataflow view previously created in Data View. See [Save custom views](/docs/help-center/map-and-optimize-your-data/data-view/first-steps-with-data-view#section-idm232217631938131). UUID-8efbb670-7fcc-8b13-42d9-641cc0d1d9ed * *Attribute Width* lets you regulate the width of the stages to let you see the attribute names in full. Delete attributes, rule boxes, or connections [#delete-attributes-rule-boxes-or-connections] The *Delete* button under the *More* drop-down menu lets you delete rule boxes, custom attributes, or connections between attributes in bulk. UUID-f5d6bd07-f9e2-b490-2999-df4a9df3be8f To delete multiple attributes, rule boxes, or connections: Go to **Dataflow** from the site's main menu. Select **More** in the upper ribbon and select **Delete**. In the drop-down menu, select the option you want to apply. UUID-6d5abcd0-9a02-fac0-3cd5-6e8a416c9ad9 | Section | Menu item | Explanation | | ------------------------------- | ---------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | | *Connections and Boxes* | **Import - Intermediate** | Delete all connections between the import and intermediate stages. | | **Intermediate - Export** | Delete all connections between the intermediate and export stages. | | | **All** | Delete all connections across all stages. | | | *Rule boxes* | **Import - Intermediate** | Delete all rule boxes for the attributes between the import and intermediate. | | **Intermediate - Export** | Delete all rule boxes for attributes between intermediate and export stages. | | | **All** | Delete all rule boxes for all attributes across all stages. | | | *Connections* | **Connections missing Import input** | Delete all warning connections between import and intermediate if the import-stage attribute vanished from the data source. | | *Custom Columns* | **Remove Unconnected (Intermediate)** | Delete all unconnected custom attributes at the intermediate stage. | | **Remove Unconnected (Export)** | Delete all unconnected custom attributes at the export stage. | | # Copy dataflow between sites and exports with Import Dataflow and Copy Dataflow import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; If you need to create multiple sites with the same data structure, you can set up a dataflow in one site and copy it into other sites. This way, you don't need to set up your dataflow manually in each site. To copy a dataflow, you can use two features in Productsup that serve slightly different use cases: . *Import Dataflow* lets you copy the dataflow of the entire site. This option overwrites all exports, segments, connections, and rule boxes of the target site with the exports, segments, connections, and rule boxes of your source site. * When you copy the dataflow of the entire site using Import Dataflow, you delete all previous versions of the target dataflow. * The platform copies connections between all stages and exports present in the source dataflow. If the import stage of the target dataflow doesn't have an attribute used in a connection in the source dataflow, the platform adds the missing attribute and marks the related connection in red, making it a warning connection. * The platform doesn't copy rule box conditions from the source dataflow. * If your source dataflow has list-based rule boxes, the platform copies the rule boxes and their setups excluding the lists chosen in the rule boxes. You need to finalize list-related configuration manually. Alternatively, you can share the relevant lists across the entire organization or project, in which case the platform copies the list selection in the rule boxes. * The platform copies both active and inactive exports from the site of the source dataflow but doesn't copy the destinations of these exports. You need to add and set them up manually. * If the target dataflow doesn't have a needed attribute at the intermediate or export stage, the platform creates a new user-generated attribute. This applies to both connected and unconnected attributes in the source dataflow. * If your source dataflow has a CSA export, the platform copies only the export itself, the connections, and the rule boxes that exist between the intermediate stage and this export. The platform doesn't copy the mapping lists, the rule boxes that apply those lists, the **Classifications** dropdown in Dataflow, or the options available in the dropdown. You need to add and set up the mapping list and the appropriate rule box in the target site, and then run the site to get the **Classifications** dropdown and all needed category-specific attributes in the target dataflow. If you have CSA exports in your dataflow, we recommend using Copy Dataflow instead of Import Dataflow to avoid losing previous dataflow versions and the ability to revert changes. . *Copy Dataflow* lets you copy the dataflow of a selected export. This option overwrites all connections and rule boxes between the intermediate stage and the target export with the connections and rule boxes of your source export. * When you copy an export dataflow using Copy Dataflow, the platform automatically saves the previous dataflow of the target export as a version called *Dataflow Backup*, which lets you revert changes if necessary. * The platform copies rule box conditions, but we recommend checking if the rule box condition has its original setup after copying the dataflow. * If your source export dataflow has list-based rule boxes, the platform copies the rule boxes and their setups excluding the lists chosen in the rule boxes. You need to finalize list-related configuration manually. Alternatively, you can share the relevant lists across the entire organization or project, in which case the platform copies the list selection in the rule boxes. * If the target export dataflow doesn't have an attribute that is present and has a connection in the source export dataflow, the platform creates a new user-generated attribute. This doesn't apply to a CSA export. * To see how the platform copies dataflows for CSA exports, see [Copy the dataflow of a CSA export using Copy Dataflow](#section-id235268144112809). If neither Import Dataflow nor Copy Dataflow is fit for your needs, you can alternatively consider the following features: * [Duplicate an export](/docs/help-center/export-data-feeds#section-idm353339436030962) (you can duplicate exports only within the same site). * [Copy an entire site](/docs/help-center/get-started/manage-your-organization-projects-and-sites/create-or-copy-a-site). * [Add rule boxes in bulk](/docs/help-center/add-a-rule-box/advanced-rule-box-options#section-idm232217535173292). * [Create connections in bulk](/docs/help-center/get-started/manage-your-organization-projects-and-sites/use-bulk-options-to-perform-actions-across-multiple-sites). Prerequisites [#prerequisites] To copy the entire dataflow with the **Import Dataflow** feature, make sure that: . The source and target sites have the same attribute names in the import stage. You can also use Import Dataflow without the needed attributes in the import stage of the target site, but it creates warning connections, which means you need to import the missing attributes into the target site later on. To copy a dataflow of a *regular export* with the **Copy Dataflow** feature, you need to have a target export added in the needed site. To copy a dataflow of a *CSA export* with the **Copy Dataflow** feature, make sure that: . The target site has the needed CSA export. . The source and target exports have the same attribute names in the export stage. For CSA exports, Copy Dataflow only copies connections between attributes that are exact matches. Copy a dataflow of the whole site using Import Dataflow [#copy-a-dataflow-of-the-whole-site-using-import-dataflow] When copying a dataflow using Import Dataflow, the platform overwrites the existing dataflow, all its versions, the enabled exports, and the segments of the target site with those of the source site. Go to **Settings** from your target site's main menu. Select the *Advanced Settings* tab. Select **Import Dataflow**. UUID-29f74dd3-d2de-54b5-c179-a848f00dffd7 Select a source site where you want to copy a dataflow from. Select **Continue**. Choose **Import** to overwrite the dataflow of the target site. UUID-698c3c45-0eed-aa9d-d50f-be26d419b24a Your imported dataflow may have red warning connections if the import-stage attribute names are different in the source and target sites. You need to import the missing attributes into the target site. Copy the dataflow of a regular export using Copy Dataflow [#copy-the-dataflow-of-a-regular-export-using-copy-dataflow] Copy Dataflow lets you copy a dataflow of a regular export to another export located in the same or different site without overwriting the dataflow of the entire target site. The platform replaces the mapping between the intermediate stage and the target export with the mapping of the source export and its intermediate stage. It also creates all missing attributes in the intermediate and export stages in the target site if a connected attribute is present in the source export dataflow but is missing in the target export dataflow. See [the beginning of this document](#N1763475515805) for details on what gets copied into the target export. When copying an export dataflow using Copy Dataflow, the platform automatically saves the previous dataflow of the target export as a version, which lets you revert changes if necessary. Go to **Dataflow** from your target site’s main menu. Select the copy icon next to the page title. UUID-4871a344-d7f7-7bde-407f-2c34f475fbcc In the *Source export* section, select the necessary source site and export in the **Site** and **Export** dropdowns. UUID-372dac46-3d82-d6e3-49d0-ce635aaea9bf In the *Target export* section, select the necessary target site and export in the **Site** and **Export** dropdowns. UUID-d6412991-0685-6742-1184-db75908d4749 Check the *Copy summary* section to see if the platform validates the operation. UUID-16816e5f-3b7a-f248-6e61-21f7e9518bef If you want to copy only one dataflow, skip this step and proceed with [see the relevant section](#N1764956509961).If you want to copy multiple dataflows from different sources into different targets, you can create multiple source-target pairs: 1. Select **Add operation** to add the source-target pair you have already selected. 2. Select another source-target pair in the *Source export* and *Target export* sections. Then, select **Add operation**. Repeat this for each desired source-target pair. Each source-target pair appears in the *Ready to copy* section. You can select the UUID-66b4c703-9bca-876f-f17c-4bf0f3d260a6 icon to delete a pair. UUID-71d5ab3b-8cc2-a2ae-1c5d-a87c24c1a2ae In **Duplicate export before copying the dataflow**, decide if you want to overwrite an existing target export or create a duplicate: * If checked, the platform creates an identical copy of your target export and copies the source export dataflow to it without overwriting the dataflow of the existing target export. * If unchecked, the platform overwrites the dataflow of the existing target export with the source export dataflow. If needed, you can later revert changes by loading an automatically saved version of the previous dataflow. In **Copy unconnected user-generated attributes**, decide if you want to copy unconnected user-generated attributes from the source export to the target export: * If checked, the target export additionally gets the unconnected user-generated attributes of the source export and its intermediate stage. * If unchecked, the target export doesn't get the unconnected user-generated attributes of the source export and its intermediate stage. Select **Copy dataflow**. Select **Confirm** in the warning pop-up to proceed with copying the dataflow. UUID-76acb1e2-036a-cbdb-fe0d-0d285ccf4865 Copy the dataflow of a CSA export using Copy Dataflow [#copy-the-dataflow-of-a-csa-export-using-copy-dataflow] See [Copy Dataflow prerequisites for CSA exports](#para-idm243529915420142). Copy Dataflow lets you copy a dataflow of a CSA export to another CSA export located in the same or different site without overwriting the dataflow of the entire target site. You can copy dataflows between CSA exports or between their sub-exports. You can't copy a CSA export's dataflow to a sub-export or vice versa. In this context, the term *sub-export* refers to the classifications, categories, product types, or other options available for CSA exports in the **Classifications** dropdown in Dataflow and Data View. Choosing a sub-export (one of the options in this dropdown), you can work with attributes relevant for specific classifications, categories, product types, etc. When copying a dataflow of a CSA export or its sub-export, the platform first checks the names of the connected export-stage attributes in the source dataflow. If the target dataflow has an export-stage attribute with the same name, the platform overwrites the connections and rule boxes of this attribute in the target dataflow with the connections and rule boxes of the same attribute in your source CSA export or sub-export. Here are the details on what gets copied from the source to the target dataflow for CSA exports and sub-exports: | Part of dataflow | What is copied to the target export dataflow | What isn't copied to the target export dataflow | | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | CSA export | - Connections and rule boxes of the attributes in the source CSA export. The same attribute names must be present in both source and target export. - Rule box conditions. | - User-generated attributes, their connections, and rule boxes. - Any connections and rule boxes of the attributes that are present in the source CSA export but don't exist in the target CSA export. - The **Classifications** dropdown in Dataflow and the sub-exports available in it. - The connections, rule boxes, and rule box conditions of the attributes available in the sub-exports of the source CSA export. - Mapping rule boxes, such as Classification Mapping or Taxonomy Mapping, and the lists they use. - Lists selected in other list-based rule boxes. The rule boxes themselves are copied, but the list selection isn't. Lists themselves aren't copied as well. - Some settings of rule box conditions may not be copied. You should check them manually. You need to add and set up the mapping list and the appropriate rule box in the target site, and then run the site to get the **Classifications** dropdown and all needed sub-exports in the target dataflow. | | Sub-export | - Connections and rule boxes of the attributes in the source sub-export. The same attribute names must be present in both source and target sub-export. - Rule box conditions. The **Classifications** dropdown in Dataflow must already be available in the target dataflow prior to copying. | - User-generated attributes, their connections, and rule boxes. - Any connections and rule boxes of the attributes that are present in the source sub-export but don't exist in the target sub-export. - The connections, rule boxes, and rule box conditions of the CSA export that the source sub-export belongs to. - Lists selected in list-based rule boxes. The rule boxes themselves are copied, but the list selection isn't. Lists themselves aren't copied as well. - Some settings of rule box conditions may not be copied. You should check them manually. | When copying an export dataflow, the platform automatically saves the previous dataflow of the target export as a version, which lets you revert changes if necessary. Go to **Dataflow** from your site’s main menu. Select the copy icon next to the page title. UUID-4871a344-d7f7-7bde-407f-2c34f475fbcc In the *Source export* section, select the necessary source site and export in the **Site** and **Export** dropdowns. If you are copying a dataflow of a sub-export, choose the needed source sub-export in **Sub-export**. If you are copying a CSA export's dataflow, leave it empty. UUID-eb9b88b7-4fea-de36-903f-2a81064633f8 In the *Target export* section, select the necessary target site and export in the **Site** and **Export** dropdowns. If you are copying a dataflow of a sub-export, choose the needed target sub-export in **Sub-export**. If you are copying a CSA export's dataflow, leave it empty. If you want to copy only one dataflow, skip this step and proceed with [see the relevant section](#N1764961142316).If you want to copy multiple dataflows from different sources into different targets, you can create multiple source-target pairs: 1. Select **Add operation** to add the source-target pair you have already selected. 2. Select another source-target pair in the *Source export* and *Target export* sections. Then, select **Add operation** to add it. Repeat this for each desired source-target pair. Each source-target pair appears in the Ready to copy *Target exports* section. You can select the UUID-66b4c703-9bca-876f-f17c-4bf0f3d260a6 icon to delete a pair. UUID-71d5ab3b-8cc2-a2ae-1c5d-a87c24c1a2ae This step is only relevant when copying a CSA export. If you are copying a sub-export, leave the box **Duplicate export before copying the dataflow** unchecked and proceed with [see the relevant section](#N1765188980395).To overwrite the existing target CSA export or create a duplicate for it, use the checkbox **Duplicate export before copying the dataflow**: * If checked, the platform creates an identical copy of your target CSA export and copies the source dataflow to it without overwriting the dataflow of the existing target CSA export. * If unchecked, the platform overwrites the dataflow of the existing target CSA export with the source dataflow. If needed, you can later revert changes by loading an automatically saved version of the previous dataflow. Leave the box **Copy unconnected user-generated attributes** unchecked. User-generated attributes aren't copied for CSA exports and sub-exports in any case. Select **Copy dataflow**. Select **Confirm** in the warning pop-up to proceed with copying the dataflow. UUID-76acb1e2-036a-cbdb-fe0d-0d285ccf4865 # Optimize your data in Dataflow import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] You can modify your data in Data View or Dataflow before exporting it. Productsup offers more than 170 rule boxes, which let you optimize and change your feed data at scale without writing any code. The difference between editing your data in Data View and Dataflow is as follows: * Data View lets you see the actual data and preview the results of the changes you make with rule boxes. See [Add a rule box](/docs/help-center/add-a-rule-box) to learn how to add rule boxes in Data View. * Dataflow provides a broad overview of all the connections and rule boxes you have already applied. You can add rule boxes, append one attribute's column to another, replace connections, and copy and apply rule boxes to other attributes. This document describes all these features. Add a rule box in Dataflow [#add-a-rule-box-in-dataflow] Go to **Dataflow** from your site's main menu and select the needed export from the dropdown on the left in the top ribbon. Select the arrow icon UUID-e3255127-5bb3-55f9-a263-f7c08d5791d5 next to the needed attribute in the relevant stage. The panel on the right opens. Select the **Select an Option** dropdown, search for and select the needed rule box in the list. UUID-accb71ab-90ae-84a5-c3ba-de507a5c74e1 Configure the rule box by selecting or entering values. Select the wrench icon 🔧 in the top-right corner of the rule box to open advanced options such as pausing, duplicating, removing, or applying the rule box to a segment. Select **Save**. Go to **Data View** from your site's main menu, select the same export as in Dataflow where you added the rule box, and see the changes in the attribute. Add a rule box in Dataflow using Large View [#add-a-rule-box-in-dataflow-using-large-view] To see a list of the available rule boxes and filter them, use Large View: In the right panel opened after you selected an attribute for editing, select the **Large View** button. UUID-8bee236f-b37d-dd31-d7a9-47907e7a2dc9 To find a needed rule box, use the following options: UUID-0db5274c-8785-1717-db23-ecd904971433 Drag the rule box to the needed stage: the green area is for the import to intermediate stages, and the blue area is for the intermediate to export stages. UUID-84cb4a08-69fe-08f7-cae6-3a69e505a2b1 Configure the rule box and select **Save**. Edit a rule box in Dataflow [#edit-a-rule-box-in-dataflow] You can edit any rule box after you have applied it. Go to **Dataflow** from your site's main menu and select a needed export from the drop-down menu on the left side of the top ribbon. Select an attribute in the stage where you added a rule box. The panel on the right opens. Configure the rule box by selecting or entering values. Select **Save**. View all applied rule boxes in Dataflow [#view-all-applied-rule-boxes-in-dataflow] In Dataflow, you can see bubbles of different colors on connections between the stages. Each bubble represents a rule box that you applied to an attribute. Here are the meanings of the colors: * Green bubbles are rule boxes between the import and intermediate stages. * Blue bubbles are rule boxes between the intermediate and export stages. * Gray bubbles are rule boxes on pause. * Yellow bubbles are rule boxes containing skip rules. To get more information about the applied rule boxes: Hover over a connection to see a list of all rule boxes applied to it. UUID-0584133e-9353-c769-b3f0-ddedd322f6b8 Select the needed attribute to see the rule box settings in detail. Or select the arrow icon that appears when hovering over to open Large View. Filter rule boxes in Dataflow [#filter-rule-boxes-in-dataflow] Filter rule boxes in Dataflow to find the necessary rule box applied to a connection. The platform hides all other rule boxes, leaving only those matching your search term. Go to **Dataflow** from your site's main menu. In the upper ribbon, enter a rule box name in **Filter Boxes**. UUID-8444fcb6-c255-91a3-f524-8aebdacee890 Append data from one attribute to another [#append-data-from-one-attribute-to-another] You can append data from one attribute to another in Dataflow. For example, you can append values from the `color` and `size` attributes to your `title` attribute. Alternatively, you can do it with the *Append/Prepend Column* rule box. See [Add static or dynamic values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/add-static-or-dynamic-values#section-idm243451110290446). To append data of one attribute to another using the Dataflow connections: Go to **Dataflow** from your site's main menu. Select the needed export from the drop-down menu on the left side of the upper ribbon. UUID-23dc6764-30a3-50a2-cde6-22fa039c5571 Choose an attribute you want to append and map it to the desired attribute in the next stage. The attribute in the next stage should already have a connection to another attribute.For example, you want the `id` attribute to display the product name after the id. You can append data from `product name` in the intermediate stage to `id` in the export that has a connection to `id` in the intermediate stage. Select **Append** in the pop-up window. UUID-f8e4136b-261a-5ae6-42d5-5563b39c2ce5 After appending the attributes, a light-blue connection appears between the attributes in two stages. Replace a connection between attributes [#replace-a-connection-between-attributes] If you need to change the connection between attributes, you can delete the existing connection and map a new one. But you can also replace a connection between attributes without deleting a previous connection first. Go to **Dataflow** from your site's main menu. Select the needed export from the drop-down menu on the left side of the upper ribbon. Drag a connection from an attribute to the attribute that already has a connection in the next stage. Select **Replace** in the pop-up window. UUID-a580c6f1-6b42-8329-80a6-96c56e12c503 Copy rule boxes from one attribute to another [#copy-rule-boxes-from-one-attribute-to-another] If you want an attribute to use the same rule boxes as another one, you can copy and reuse these rule boxes. Go to **Dataflow** from your site's main menu. Select the needed export from the drop-down menu on the left side of the upper ribbon. Select the node of the source attribute containing the rule boxes you want to copy. An orange circle appears on the attribute's node. The node has to be either in the intermediate or export stage. Select the node of the target attribute in the same stage where you want to copy the rule boxes. The target attribute shouldn't have rule boxes applied. A white circle on the attribute indicates that you can apply these rule boxes to the attribute. Select **Copy** in the pop-up window. UUID-02760afc-14dc-d383-14db-c4b8aae2e2c0 # Map multiple images to an attribute import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] To view several images in a single attribute in Data View, map multiple images to your attribute(s) in Dataflow. This lets you view images in a carousel, eliminating the need to create several attributes to show several images. Instead of mapping images, you can also map several items to a single attribute following this document. For more information on mapping, see [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export). Map image [#map-image] In Dataflow, you can map or connect matching attributes between stages. You must connect your desired image to its matching image attribute, so the platform can create a feed that contains the image(s) during an export. To map an image: Go to **Dataflow** from your site's main menu. Now select your desired export feed from the top ribbon drop-down menu. You can only work in one (1) export feed source at a time. UUID-bfd5719c-cdde-6962-83e9-137dec31d104 Find your image attributes or apply a column filter to quickly locate them by selecting *Filter Columns*. Enter a search term to quickly locate your attribute in either the import, intermediate, or export. Once you've located your image, map the image attribute by dragging a connector node from one image to another matching image attribute located in a different column. You can only map an image from the import to intermediate, then to export. You can also connect two nodes by selecting one and then the other. This lets you quickly map matching nodes without having to drag them from one end to another. You can preview your changes to mapped images in Data View. Go to **Data View** and select the affected column, *Import* or *Intermediate*. UUID-4e481823-a191-0e72-bd22-38ddc1d966da Confirm that you can now see your changes, for example, `image` or `additional_image_1`, etc. You can add new fields in Data View for the *Intermediate* and \[*export*] columns by selecting the **Drop or Click to add new field** box. You can locate the box at the bottom of both the intermediate and export stages. UUID-c2ade6ba-6bf7-dce9-b4a2-fea4e71d6134 Map multiple images to a matching attribute [#map-multiple-images-to-a-matching-attribute] You can map several images to one matching attribute, which creates an image carousel in Data View. For example, you can match `additional_image_1`, `additional_image_2`, `additional_image_3` to `additional_image`. UUID-d32472f8-14f6-c865-fc54-2e06298b5388 Go to **Dataflow** from your site's main menu. Now select your desired export feed from the top ribbon drop-down menu. You can only work in one (1) export feed source at a time. Find your image attributes or apply a column filter to quickly locate them by selecting *Filter Columns*. Enter a search term to quickly locate your attribute in either the import, intermediate, or export stages. Once you've located your images, map multiple image attributes by dragging the connector nodes from each image to another matching image attribute located in a different column. You can only map images from the import to intermediate, then to the export. You can also connect two nodes by selecting one and then the other. This lets you quickly map matching nodes without having to drag them from one end to another. A pop-up message asking if you want to *append* or *replace* prompts after you map an additional image to a previously mapped image attribute. Select **Append** to add the image without replacing it. You can preview your changes to mapped images in Data View. Go to **Data View** and select the affected stage, import or intermediate. UUID-4e481823-a191-0e72-bd22-38ddc1d966da Confirm that you can now see your changes, for example, `additional_image_1`, `additional_image_2`,and `additional_image_3` connected to `additional_image`. UUID-d4455ec8-4361-d3d1-cd74-e6f0f52a9c9f Add comma-separated values for Facebook Dynamic Ads exports [#add-comma-separated-values-for-facebook-dynamic-ads-exports] Facebook Dynamic Ads export channels require comma-separated values to correctly identify your images as individual items. To add the appropriate value, take the following steps: Go to **Data View**, locate your *additional image* attribute, and select **Edit**. When you map your images in Dataflow, you can see the `Append/Prepend Column` rule box added to the affected attribute. In the rule box, select **Text After** from the drop-down option and enter a comma (`,`) in the text field. In **Mode**, select *append*, and enter a comma (`,`) in the text field. To activate your changes, select **Export** or **Run** from the top banner menu. UUID-fa80514c-0509-7e2f-cee5-7f864bb149d8 # Use Dataflow to map your attributes from import to export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Dataflow is a feature in Productsup that lets you map attributes from your import data to the attributes needed for your exports. To allow room for data transformations, Dataflow has three stages: * The *import* stage contains attributes uploaded to the platform from your data source. You can't make any changes to the data in your import stage. To do so, you need to connect your import-stage attributes to the intermediate stage. * The *intermediate* stage contains duplicates of all attributes from all exports added in your site. This is where you can apply data transformations relevant to all exports. * The *export* stage contains attributes specific to one export. You can apply data transformations relevant to each specific export at this stage. The name of the relevant export appears at the top of the export stage. If your site has multiple exports, you can choose the needed export in the export selection dropdown on the left. In Dataflow, you can see different types of attributes highlighted with different colors or naming patterns: * The export stage has mandatory and optional attributes. Mandatory attributes are blue, while optional attributes are gray. UUID-6983682f-778a-4ed0-10a8-8cbe8c4fe86b * User-generated attributes created in the intermediate or export stage are striped in gray and white. UUID-d93ee09e-3ce2-070a-78ac-ae1042e2e2a5 * Platform-generated attributes can be present at every stage in Dataflow. They always start with three underscores (`___`), which means the platform doesn't export them. These attributes can appear in your site when you use different features in a site, such as data services, segments, or unique item identifiers. UUID-60453450-86bd-09d8-ca9a-354c3ff96d17 This document covers the basics of attribute mapping in Dataflow. See [Work with the Dataflow toolbar](/docs/help-center/map-and-optimize-your-data/dataflow/work-with-the-dataflow-toolbar) for more details on changing your view in Dataflow, automapping connections, etc. Prerequisites [#prerequisites] Before you can use Dataflow to map attributes from import to export, you must complete the following steps: Create a site. Add a data source in Data Sources, and select **Import** in the top-right corner of the page to let the platform import your data to the site. Add at least one export in Exports. Meaning of various attribute icons in Dataflow [#meaning-of-various-attribute-icons-in-dataflow] If you hover over an attribute in Dataflow, you can see different icons in each attribute. Some of the icons may also be visible without hovering over the attributes. All attributes have these two icons visible on a hover: * If you select the target icon UUID-90d5a567-fbbf-ef1e-4443-09421a76a522 , Dataflow hides all attributes from the view except for the chosen attribute and all attributes it is connected to. To revert the view change, select the icon again. * If you select the up-right arrow icon UUID-fcb7e4b5-b6be-982c-ba5f-85ba637d62e5 , Dataflow opens the side menu where you can apply rule boxes to the connections of this attribute. Some import-stage attributes can display the following icons: * The branch icon UUID-f355d9e1-2b8d-dc9b-6630-20e8459a4359 indicates that the attribute appeared as a result of applying a data service. * The three dots icon UUID-8e530399-3377-552c-f4a3-6a4c8d3375bc shows that the attribute comes from an additional data source. Hover over it to see the exact import file it comes from. * The red warning icon UUID-503d98ee-c8fa-901a-1a05-6f733f9851d4 indicates that the connected attribute is missing in the data source or that a required attribute used in a rule box is absent. * The flag icon UUID-ae1632fd-df0a-26da-ed90-0423179ab646 indicates the site's unique item identifier attributes selected in the *Settings* tab in Data Sources. Map attributes from import to export [#map-attributes-from-import-to-export] Go to **Dataflow** from your site's main menu. Select which export you want to map. This example uses **Test Site - Google Merchant Center**. UUID-accf77f5-526c-ddbb-1553-cf89e0d3ec3c Map attributes between the import and intermediate stages: Select a node on an attribute in the import stage. Select a node on the relevant attribute in the intermediate stage. UUID-910b00a3-566f-51e0-4fa0-34973733eb25 Map intermediate attributes to export following the same steps. UUID-a7ef9ee6-68d8-4495-fcad-1a71f073bab1 Alternatively, you can map an attribute by selecting its node and dragging a connection to another attribute in the following stage. Delete attribute connections [#delete-attribute-connections] You can delete connections between attributes as follows: Select the connection. Select **Yes** in the pop-up. UUID-523a8018-cf31-e228-65d5-828891bbb971 Create new user-generated attributes [#create-new-user-generated-attributes] You can create user-generated attributes in the intermediate and export stages. A user-generated attribute can start with three underscores (`___`) but doesn't have to. > > You have created a new attribute. Dataflow displays it in gray-and-white stripes. You can now map your new user-generated attribute to attributes in other stages. > Scroll to the bottom of the intermediate or export stage to select **Drop or Click to add new attribute**. In the **Attribute name** field, enter a name for the attribute. Start each attribute name from a new line to create multiple attributes at once. | UUID-6f140028-b41b-c499-d5e6-7598c2d80e71 | UUID-0b88e03c-837b-8f28-84f8-88f1a25136c4 | | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | | You can use the following characters in attribute names: | | * Latin letters from `A` to `Z`. You can use both upper- and lowercase letters while entering attribute names, but the platform saves attribute names only in lowercase letters. * Digits from `0` to `9`. * Spaces. The platform replaces multiple consecutive spaces with one space character and removes spaces at the beginning and end of attribute names. * Punctuation and other special characters, such as `!`, `?`, `#`, `$`, `%`, `&`, `'`, `(`, `)`, `*`, `+`, `,`, `-`, `.`, `/`, `\`, `:`, `;`, `<`, `=`, `>`, `@`, `[`, `]`, `^`, `_`, `{`, `}`, `|`, and `~`. If you create a new user-generated attribute in the export stage but don't want the platform to export it to your destination and channel, you can start the attribute name with three underscores (`___`). Select **Save**. You can create user-generated attributes if an export doesn't contain all the mandatory or optional attributes you want to send to the channel. Alternatively, you may create user-generated attributes for non-standard cases. For example, you need to skip all items during export if they are relevant for the winter season (coats, sweaters, and scarves). You can use one of the skip rule boxes, such as **Skip Row If Value In**, in the attribute containing season information, but you don't want the season information to appear in the exported data. You can't add a rule box between import and intermediate stages, as this will affect all exports, and you need to skip the items only for one particular export. To achieve the result, do the following: Create a new user-generated attribute in the export stage with three underscores (`___`) in front of the attribute's name, such as **\_\_\_season**. Connect **\_\_\_season** with the attribute containing the season data in the intermediate stage. Add a rule box that excludes products, such as **Skip Row If Value In**, to the **\_\_\_season** attribute. See [Include or exclude products](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/include-or-exclude-products#section-idm353412190188458). The platform applies the rule box to the values in **\_\_\_season** and excludes the corresponding items during export. The platform doesn't export the **\_\_\_season** attribute. Delete user-generated attributes [#delete-user-generated-attributes] You can't delete attributes that are a part of your added exports, the import stage, or generated by data services and other features in the platform. To delete any user-generated attributes: Make sure the attribute you want to delete isn't connected to any other attributes. If it is, see [Delete attribute connections](#section-idm4593103412782432706741935867) to remove the connection. Hover over the user-generated attribute you want to delete. Select the UUID-76106bb1-47b5-bb17-eb28-c002a97c15f7 icon. UUID-e0e47e73-2171-6955-4564-9ac1f3d19318 Confirm you want to delete this attribute by selecting **Delete**. Map attributes across multiple sites in bulk [#map-attributes-across-multiple-sites-in-bulk] If you need to create connections between the same attributes in multiple sites, you can use the Bulk Option feature to save time. You must have the same attribute names across the sites where you want to use a bulk action that adds a connection in Dataflow. > > A final confirmation screen shows whether the bulk action was successful. > > > > You can leave this screen by selecting **Return to organization page**. You can also go to one of the sites where you performed the changes by selecting the name of the needed site. > > > UUID-5ae50ae7-e2a8-f9ba-b6b8-70d4b50f4baf Go to the organization or project level and select **Bulk Option**. UUID-0825a97e-b71c-6bbe-e850-9210a13f9c13 Choose the sites where you want to create connections and select **Next Step**. Choose **Add Dataflow Connection** and select **Next Step**. In the **Dataflow** drop-down list, choose whether the platform should add connections between the import and intermediate stages or the intermediate and export stages.If you select *Intermediate - Export*, you need to additionally choose a relevant export in the **Export** dropdown. UUID-f6714a3c-1459-950b-e5b1-fd63672962ee Enter the names of the attributes you want to map. A list with all available attributes appears as you type. * If you choose *Import - Intermediate*, enter the name of the import-stage attribute in **Source column** and the name of the intermediate-stage attribute in **Intermediate Column**. * If you choose *Intermediate - Export*, enter the name of the intermediate-stage attribute in **Intermediate Column** and the name of the export-stage attribute in **Export Column**. Select **Execute**. Export your data [#export-your-data] There are many ways to export data in Productsup. If you want to initiate a full run, from import to export, select the **Run** button. UUID-b3058d09-727c-6ff7-341c-13774c10f61a If you want to export current imported data to all exports without re-importing data from your data sources, select the **Export** button. UUID-91283cf7-ca77-203d-6660-ce416be06407 If you want to export existing data to only one export: Go to **Exports** from your site's main menu. Select the **Export** button for a specific export. Alternatively, you can select the needed export and choose **Export this export** on the setup page of that export. UUID-9c413682-902e-d013-b123-9933de3e3490 # Bulk Connection Adding import { Callout } from "fumadocs-ui/components/callout"; import { Steps, Step } from "fumadocs-ui/components/steps"; Overview [#overview] **Add Bulk Connections** lets you create many Dataflow connections in a single action by pasting a list of attribute pairs. It is useful when you are setting up a new site, copying a mapping from a spreadsheet, or restoring connections after a structural change — cases where drawing each line by hand in Dataflow would be slow and error-prone. The option lives in the **Automap connections** dropdown in the Dataflow toolbar. Bulk adding only creates connections. It does not overwrite existing ones, and it does not create attributes that do not already exist on the page. Open the Add Bulk Connections dialog [#open-the-add-bulk-connections-dialog] Open the site and export where you want to add connections, then switch to the **Dataflow** view. In the toolbar, open the **Automap connections** dropdown and select **Add Bulk Connections**. Choose a direction [#choose-a-direction] Dataflow has two connection paths, and each bulk run targets one of them: * **Import to Intermediate** — connect raw import attributes to your intermediate (working) attributes. * **Intermediate to Export** — connect intermediate attributes to the export channel's attributes. Pick the direction that matches the pairs you are about to paste. If you need to map both paths, run the bulk add twice — once per direction. Enter connection pairs [#enter-connection-pairs] Paste your pairs into the input field, one per line, using the format `attribute_from -> attribute_to`. For example: ``` product_id -> id title -> name price_net -> price brand -> manufacturer ``` The separator is exactly `->` (space, dash, greater than space). Don't forget the spaces. A few things to keep in mind: * The **left** side is the source attribute (import or intermediate, depending on the direction you selected). * The **right** side is the target attribute (intermediate or export). * Both attributes must already exist on the page. Missing attributes are skipped rather than created. * A pair is skipped if the target attribute is already connected — bulk adding never replaces an existing connection. Review the result [#review-the-result] After you apply the pairs, a result modal lists every line you submitted with a status badge: | Badge | Meaning | | --------------------------- | -------------------------------------------------------------------------- | | **Ok** (green) | The connection was created. | | **Already Connected** (red) | The target attribute already had a connection, so this pair was skipped. | | **Not Found** (red) | One or both attributes do not exist on the page, so this pair was skipped. | Use the modal to spot typos, missing attributes, or pairs that still need to be handled manually. Close the modal and the successful connections will be visible in Dataflow right away. To fix an **Already Connected** result, remove the existing connection in Dataflow first and then re-run the bulk add for that pair. Related [#related] * [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) * [Work with the Dataflow toolbar](/docs/help-center/map-and-optimize-your-data/dataflow/work-with-the-dataflow-toolbar) * [Copy Dataflow between sites and exports with Import Dataflow](/docs/help-center/map-and-optimize-your-data/dataflow/copy-dataflow-between-sites-and-exports-with-import-dataflow) # Use segments to apply rule boxes to specific product groups import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] When optimizing your data in Data View, you may need to edit only a part of your products. You can combine these products into a segment and apply rule boxes to the whole segment without affecting other products. For example, you need to offer different discounts depending on product categories: 10% discount for shoes and purses, 20% for sunglasses, and 50% for swimwear. In this case, you can create three separate segments for each product group and apply different discounts to each segment: * Segment 1 for shoes and purses. * Segment 2 for sunglasses. * Segment 3 for swimwear. In Data View, you can create a segment where a chosen attribute contains content matching the search values. You can also choose filter options other than `contains`. Here is a setup example for segment 1, as mentioned previously: UUID-deef4504-d1f3-d225-7970-7a9a0e02511e If you need to apply rule boxes to products based on the contents of multiple attributes, you can use the *Rule box conditions* feature available in Dataflow. See [Apply rule boxes based on conditions](/docs/help-center/add-a-rule-box/apply-rule-boxes-based-on-conditions). Prerequisites [#prerequisites] You can create segments at the import, intermediate, and export stages. To create a segment at a stage, you need to have product data available at that stage. Create a segment [#create-a-segment] To create a product segment, take the following steps: Go to **Data View** from your site's main menu. Select the relevant stage in the drop-down menu on the left. To apply rule boxes to a particular product group in the *intermediate* stage, create segments in the *import* stage.To apply rule boxes to a particular product group in the *export* stage, create segments in the *intermediate* stage.You can't apply rule boxes to the segments created at the export stage. Select **Filter** in the attribute column where you want to create a segment. In the *Add Filter* menu on the right, check if the first drop-down menu shows the needed attribute and choose the desired filter option in the second drop-down menu. The default filter option is `contains`. In **Search term**, enter a value or select the menu icon at the end of the field to choose one of the values of this attribute. If needed, add another value by selecting **Add one more** and entering the desired value in the newly added field **Or**. You can remove the additional value by selecting the **x** icon. UUID-a6c93206-2cfc-6839-2884-6c4971915661 Select **Add**.It takes some time for Data View to refresh and show only the products that have the desired values in the chosen attribute. You can see a summary of your applied filter in the section *Current Filter*. To go back and let Data View display all products, you can remove the applied filter by selecting the **x** icon in *Current Filter*. UUID-19769977-be2d-2b82-046b-74fd9c50e603 In the section *Save as Segment*, enter the name of your segment and select **Save as**. The segment appears in the section *Available Segments*. If you add more segments, you can switch between them using this section. UUID-22a374e0-756a-a50f-a60d-160bac43ad0d Apply a rule box to a product segment [#apply-a-rule-box-to-a-product-segment] To apply a rule box to a product segment, take the following steps: Go to **Data View** from your site's main menu. Choose the needed export or the intermediate stage in the drop-down menu on the left. Select **Edit** in the attribute column where you want to apply a rule box to a product segment. If you have already added the needed rule box, proceed to the next step. If not, choose **Select an Option**, select the needed rule box, and set it up. Select the wrench icon 🔧 in the top-right corner of the rule box. Select the label icon 🏷 at the top of the rule box and go to the *Available Segments* window to select the plus icon **+** next to the needed product segment. UUID-fc6c55f1-fa16-5ca0-87db-c0ffd60e038a You can select several segments in one rule box. In this case, the platform applies the rule box to all products matching all selected segments. Select **Save**.The rule box affects the products of the selected segment only. The rest of the products remain unchanged. Learn more about applying rule boxes to segments by taking a video course [Optimization: Rule boxes for platform.productsup.com](https://educationsso.productsup.com/#/online-courses/c56c1701-72dc-4bf5-923e-2621c203f2ba) on our Academy website. Edit a segment [#edit-a-segment] To change the existing settings of a segment: Go to **Data View** from your site's main menu. Select the relevant stage in the drop-down menu on the left. In the right corner of the top ribbon, select the menu icon. Select the necessary segment in the *Available Segments* section. Edit the desired settings of the segment. For example: 1. Change the attribute basis of the segment in the first drop-down menu in the *Add Filter* section. 2. Change the filter option in the second drop-down menu in the *Add Filter* section. 3. Add another value in **Add one more**. 4. Change the name of the segment in the section *Save as Segment*. In the section *Save as Segment*, select **Save**. Delete a segment [#delete-a-segment] If you no longer need a product segment, you can delete it by following these steps: Go to **Data View** from your site's main menu. In the drop-down menu on the left, select the stage where you created the relevant segment. Select the menu icon in the right corner of the top ribbon to open the *Add Filter* menu. In the *Add Filter* menu, go to the section *Available Segments* and select the **x** icon next to the product segment you want to delete. You can't delete a product segment used in a rule box. If you no longer need a segment but it is still used in a rule box, go to the relevant rule box and remove the segment from its settings first. UUID-ddf68435-2a58-7c53-ea3e-7d83ab612300 Platform-generated segment attributes [#platform-generated-segment-attributes] This section explains platform-generated attributes related to product segments. See the definition of *platform-generated attributes* in [Glossary](/docs/help-center/glossary#para-idm243436063772778). When you create a site, Productsup automatically adds the attribute `___segment_import` at the import stage. When you add an export in a new site, the platform automatically adds the following attributes: * `___segment_import` and `___segment_intermediate` at the intermediate stage. * `___segment_import`, `___segment_intermediate`, and `___segment_export` at the export stage. When you create a segment at any stage, the platform locates the corresponding segment attributes at all stages and adds a segment ID in those attributes. For example, if you create a segment for shoes and purses at the import stage, the platform adds the ID of that segment in `___segment_import` at the import, intermediate, and export stages to all shoes and purses in your feed. If a product doesn't have a value in a segment attribute, it doesn't belong to any segment at the given stage. When you create a segment, Data View doesn't immediately display segment IDs in the corresponding segment attributes. To see segment IDs, you need to run an import by selecting **Import** in the top-right corner of the site. In most cases, you don't need to use platform-generated segment attributes as they serve a purely technical function for applying rule boxes to product segments. # First steps with Data View import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; This document walks you through first steps in Data View: choosing a stage, previewing changes, choosing how many products to see, downloading a selection, controlling attributes, applying filters, and previewing images. View data on different stages [#view-data-on-different-stages] To view your products in the import, intermediate, or specific export stage: Go to **Data View** from the site's main menu. Choose the stage or export you wish to view in the drop-down menu in the upper ribbon. Stage and Export selector in Data View Live Preview and Full View [#live-preview-and-full-view] You have two options to see the changes after applying a new mapping or editing data with rule boxes. * *Live Preview* shows you up to 10.000 products for the import stage and 1000 for the intermediate and export stages. With Live Preview activated, the platform refreshes Data View automatically whenever you change your data by applying new mappings or rule boxes. * *Full View* shows you all the products. With Full Preview activated, you must refresh the Data View manually. Alternatively, you can see them after your site processes the changes through scheduling or after you trigger **Import** or **Export**. You can toggle between the Live Preview and Full View: Go to **Data View** from the site's main menu. The platform highlights the active view. In the top ribbon, select **Live Preview** or **Full View**. UUID-b44e7b63-875a-0c10-56e3-cf46ebc40b5c If you choose Full View, select **Refresh** on the left-hand side of the **Live Preview** to see the data changes. Control the number of products to view [#control-the-number-of-products-to-view] Go to **Data View** from the site's main menu. Customize the number of products you wish to see per page: UUID-753e0df9-bc5b-e337-9227-b89a3ea97f54 Download a selection of products [#download-a-selection-of-products] You can download products from **Data View** into a CSV file. The CSV file lets you check certain products without downloading an entire export feed. Go to **Data View** from the site's main menu. In the top ribbon, expand the **Download** drop-down menu. Select the number of products you wish to download. The platform downloads a CSV file to your computer. UUID-cb473742-8e01-8354-863f-e1ca31594d37 You download every attribute column visible in Data View. Download more than 10,000 products [#download-more-than-10000-products] The platform lets you download a maximum of 10,000 products. If you need to download only specific attribute columns and more products, use *Blank Export (empty)*: Go to **Exports** from your site's main menu and select **Add Export**. Select **Blank Export (empty)** in the gray banner. Go to **Dataflow** from your site's main menu and select your *Blank Export (empty)* in the Export selection drop-down menu. Connect only the attributes you want to download and ensure they don't contain any skip rules. Optionally, go to **Data View** and ensure you've added all the necessary attributes. Go to **Exports** again. Select the added export. Select **Add Destination** and choose *Productsup Server*. Select **Export this export** in the top-right corner of the page to send your data to the destination. Alternatively, the platform exports the data during the next scheduled run. Scroll down to the *Filename* section and find your export feed link. Select it to download the feed. UUID-249de587-d951-3871-f013-5655de1be700 If the file is red after the end of the processing, reload the page. Attribute controls [#attribute-controls] Control visibility [#control-visibility] You can choose the attribute columns you want to see in Data View. Go to **Data View** from the site's main menu. In the toolbar on the right-hand side, select the "eye" icon. Select the "eye" icons next to the attribute names to make them visible or invisible. Change the order [#change-the-order] To customize the order of the attributes in Data View: Go to **Data View** from the site's main menu. In the toolbar on the right-hand side, select the "eye" icon. Select the "dots" icon on the left of the attribute name and drag it to the desired position. Reordering the attributes affects only Data View. To change the order of the attributes in your export file, see [Add export](/docs/help-center/export-data-feeds/add-export). Display or hide all attributes [#display-or-hide-all-attributes] To show or hide the available attributes in Data View: Go to **Data View** from the site's main menu. In the toolbar on the right-hand side, select the "eye" icon. Select the blue arrow at the top of the toolbar. Select **Display All Columns** to make all attributes visible or **Hide All Columns** to hide all attributes. Display All Columns option in the Data View Display tracking attributes [#display-tracking-attributes] To display all attributes related to tracking: Go to **Data View** from the site's main menu. In the toolbar on the right-hand side, select the "eye" icon. Select the blue arrow at the top of the toolbar. Select **Toggle Tracking Columns**. Use Before/After View to preview rule box changes [#use-beforeafter-view-to-preview-rule-box-changes] **Before/After View** displays any modification made with rule boxes in the Before and After columns for an attribute in Data View: Go to **Data View** from the site's main menu. In the toolbar on the right-hand side, select the "eye" icon. Check **Before/After View**. UUID-2b61a014-66c6-60e3-2acc-539586523824 If you don't see the Before and After columns after applying rule boxes in Data View, ensure you have set a unique item identifier in Data Sources. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. Once you have set a unique item identifier, select **Run** or **Import** in the top-right corner of your site's view. Save custom views [#save-custom-views] There is no need to change settings for Data View each time you log in to the platform. You can save your custom settings: Go to **Data View** from the site's main menu. In the toolbar on the right-hand side, select the "eye" icon. Customize your Data View settings. Select the blue arrow at the top of the toolbar. Select **Save as new view**. Save as new view option in Data View Give your view a name. Select **Save**. Your view is now available in the blue drop-down menu. You can also select the **Default** view in the menu to restore the standard Data View settings.  You can edit your view and select **Save changes** or **Save as new view**.  Apply filters [#apply-filters] Apply filters to view specific subgroups of products. For example, you can find the products belonging to a particular category or only skipped products. Quick filters [#quick-filters] Use Product Quickfilter to see all, only exported, or skipped products. It is available at the intermediate and export stages. Go to **Data View** from the site's main menu. Select the intermediate stage or choose the needed export from the Export selection drop-down menu. In the right corner of the upper ribbon, select the menu icon. UUID-2fc24c0b-c56f-945a-6713-c143113df8a4 In the Quick filters section, choose **All**, **Exported**, or **Skipped** to see only these products in Data View. w Find products that meet a condition [#find-products-that-meet-a-condition] You can add a filter to search for products that meet a specific condition. Filters are available in all stages of Data View. You can find filters in two places: . In the right-hand side toolbar that opens when you select the "hamburger" menu icon in the upper ribbon, as shown in red on the screenshot. See [Add a filter from the menu](#N1741860398658). . In an attribute column by selecting **Filter**, as shown in pink on the screenshot. See [Add a filter in an attribute column](#N1741860469879).  Add a filter from the menu [#add-a-filter-from-the-menu] Go to **Data View** from the site's main menu. Choose the needed stage or export from the Export selection drop-down menu. Select the menu icon in the right corner of the upper ribbon. In the first drop-down menu of the *Add Filter* section, select the attribute where you want to search.  Select a filter option in the second drop-down menu.  The *passes test* and *fails test* options are only available at the export stage and only for active exports. These options let you filter out the values that pass or fail the analyzer test in the selected attribute. Then, in the drop-down menu below, you must choose the analyzer test for that attribute. In **Search term**, enter a value you are looking for or use the menu icon to sele from the attribute's values. If needed, add another value by selecting **+ Add one more** and entering the desired value in the field **Or**. You can remove the additional value by selecting the delete icon. Select **Add**.It takes some time for Data View to refresh and show only the filtered products.You can see a summary of your applied filter in the section *Current Filter*.To restore the original Data View displaying all products, remove the applied filter by selecting the delete icon in *Current Filter*.  When you created a filter, you can see it as a **Filter** button in the top ribbon. UUID-24264146-0fd5-6807-0062-6fd97153ccdf If you add filter conditions in both *Product Quickfilter* and *Add Filter* sections, they work as `AND`, meaning that Data View only displays products that meet all the set filters. Also, you can save your selected filters as segments. See [Save filters as segments](#N1741658560659). Add a filter in an attribute column [#add-a-filter-in-an-attribute-column] Go to **Data View** from your site's main menu. Select the relevant stage or export from the drop-down menu in the top ribbon. Select **Filter** in the needed attribute column.  In the *Add Filter* side panel on the right, check your selected attribute in the first drop-down menu. Choose the desired filter option in the second drop-down menu.  The *passes test* and *fails test* options are only available at the export stage and only for the active exports. These options let you filter out the values that pass or fail the analyzer test in the selected attribute. Then, in the drop-down menu below, you must choose the analyzer test for that attribute. In **Search term**, enter a value or select the menu icon to choose the attribute's value. If needed, add another value by selecting **+ Add one more** and entering the desired value in the field **Or**. You can remove the additional value by selecting the delete icon. Select **Add**.It takes some time for Data View to refresh and show only the filtered products.You can see a summary of your applied filter in the section *Current Filter*.To restore the original Data View displaying all products, remove the applied filter by selecting the delete icon in *Current Filter*. If you add filter conditions in both *Product Quickfilter* and *Add Filter* sections, they work as `AND`, meaning that Data View only displays products that meet all the set filters. Save filters as segments [#save-filters-as-segments] You can save your filters as a segment and use them instead of creating the filters again from scratch. Enter the segment name in the **Save as Segment** field and select **Save**.  If you create multiple segments and select more than one segment in *Available Segments*, these filters work as `OR`, meaning that Data View displays products that meet any filter in the chosen segments. The same logic persists when you apply a rule box to multiple segments. See [Use segments to apply rule boxes to specific product groups](/docs/help-center/map-and-optimize-your-data/data-view/use-segments-to-apply-rule-boxes-to-specific-product-groups) to create, edit, and delete a segment. Preview and edit images using Image Designer [#preview-and-edit-images-using-image-designer] You can preview and edit your product images in Image Designer directly from Data View. Go to **Data View** from the site's main menu. Go to the right-hand side toolbar and select the **Image Designer** icon to open the Image Designers toolbar. UUID-661e8bbf-ef88-4231-3949-b3311d3e2a9e See [Create and apply custom image templates](/docs/help-center/map-and-optimize-your-data/image-designer/create-and-apply-custom-image-templates) for more information about Image Designer and creating dynamic product image campaigns. # Optimize your data in Data View with rule boxes import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; You can modify your data using rule boxes in Data View or Dataflow before exporting it. For example, you can use the **Static Value** rule box to add a specific value to all or part of the products in an attribute, such as the US Dollar sign ($). When you add rule boxes in Data View, you can immediately see the results of changes in your data. Add a rule box in Data View [#add-a-rule-box-in-data-view] To add a rule box: Go to **Data View** from your site's main menu and select **Intermediate** or a needed export from the dropdown on the left-hand side of the top ribbon. You can add rule boxes only in the intermediate or export stage. Select **Edit** in the attribute that needs changes. The panel on the right opens. UUID-8dc92fcf-5f5d-a838-8c7b-99f87f9980c4 Select the **Select an Option** dropdown, search for and select the needed rule box in the list. UUID-accb71ab-90ae-84a5-c3ba-de507a5c74e1 Search for and select the needed rule box in the list. Configure the rule box by selecting or entering values. Select the wrench icon 🔧 in the top-right corner of the rule box to open advanced options such as pausing, duplicating, removing, or applying the rule box to a segment. Select **Save**. UUID-9b20ba52-ce36-5d45-4956-3a870e06b0d4 Add a rule box using Large View [#add-a-rule-box-using-large-view] To gain more information on various boxes and for additional filtering options, you can use Large View. In the right panel opened after you selected an attribute for editing, select the **Large View** button. To find a needed rule box, use the following options: UUID-0db5274c-8785-1717-db23-ecd904971433 Drag the rule box to the needed stage: the green area is for the import to intermediate stages, and the blue area is for the intermediate to export stages. UUID-84cb4a08-69fe-08f7-cae6-3a69e505a2b1 Configure the rule box and select **Save**. UUID-0612fb24-74dc-0f84-c9f0-65a23c94f4db Edit a rule box [#edit-a-rule-box] You can also edit any rule boxes you have previously set up in Data View. Go to **Dataflow** from your site's main menu and select the needed export from the dropdown on the left-hand side of the top ribbon. Select the arrow icon UUID-e3255127-5bb3-55f9-a263-f7c08d5791d5 next to the needed attribute in the relevant stage. The panel on the right opens. Configure the rule box by selecting or entering values. Select **Save**. Add rule boxes in bulk across multiple sites [#add-rule-boxes-in-bulk-across-multiple-sites] If you need to add the same rule boxes to multiple sites, you can consider using the *Bulk Option* feature to save time. See [Apply rule boxes in bulk across multiple sites](/docs/help-center/add-a-rule-box/advanced-rule-box-options#section-idm232217535173292) for more information. # Data View import { Callout } from "fumadocs-ui/components/callout"; Introduction [#introduction] Data View is the platform area where you can view and edit your data with rule boxes and check whether it's ready and compliant for the export channels.  See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view) to learn how to use Analyzer in Data View. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) to learn how to map your data. The upper ribbon on the Data View contains features that help you adjust your view: * [Export selection](/docs/help-center/map-and-optimize-your-data/data-view/first-steps-with-data-view#section-idm232217631701655) lets you select the import or intermediate stage or one of the exports added in Exports. * [Live Preview and Full View](/docs/help-center/map-and-optimize-your-data/data-view/first-steps-with-data-view#section-idm232217634497383) are two options to display the changes after applying a new mapping or editing data with rule boxes. * [Product number selector](/docs/help-center/map-and-optimize-your-data/data-view/first-steps-with-data-view#section-idm232217631099377) lets you customize the number of visible products per page. * [Download](/docs/help-center/map-and-optimize-your-data/data-view/first-steps-with-data-view#section-idm232217635442184) lets you download products from Data View into a CSV file. * [Rule Box Conditions](/docs/help-center/add-a-rule-box/apply-rule-boxes-based-on-conditions) lets you create and set up conditions to determine when the platform should apply rule boxes to an attribute. * Menu icon opens the side panel that contains attribute visibility features that let you: * [Customize the visibility of the attributes in Data View](/docs/help-center/map-and-optimize-your-data/data-view/first-steps-with-data-view#section-idm232217631938131). * [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view). * [Use filters to find products by their attribute values](/docs/help-center/map-and-optimize-your-data/data-view/first-steps-with-data-view#section-idm232217635792493). * [Preview and edit images using Image Designer](/docs/help-center/map-and-optimize-your-data/data-view/first-steps-with-data-view#section-idm232217681878139). See [First steps with Data View](/docs/help-center/map-and-optimize-your-data/data-view/first-steps-with-data-view) for how to use these features. # Analyze your data in Data View import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] When you set up all your exports and map the needed attributes from import to export, it is time to get your data ready for your channels. To help you identify what items and attributes require optimization, Productsup offers attribute data analytics features in Data View. These features can help you see how many attribute values are empty, what type of data the values should have, whether they meet the channel requirements, and so on. The features that provide attribute data analytics in Data View: . *[Analyzer](#section-idm4538971827048033726544546987)* is a feature in Data View that provides attribute data analytics, such as value statistics and the correspondence between attribute values and channel requirements. . *[Core readiness score](#section-idm4580797893995233726544664701)* is a view option at the export stage in Data View that shows how many mandatory attributes are export-ready. . *[Enhanced readiness score](#section-idm4506157683907233726544844012)* is a view option at the export stage in Data View that shows how many mandatory and optional attributes are export-ready. You can use Analyzer at any stage in your site to track how your data changes throughout the stages. But you can find the most insights about your attribute data at the export stage, where you can use Analyzer, and core and enhanced readiness scores. All channels have different requirements, so you need to analyze and optimize your attribute data for each export individually. This document explains what information you can get with attribute data analytics features in Data View and how to use these features to get your data ready for export. See [Optimize your data in Data View with rule boxes](/docs/help-center/map-and-optimize-your-data/data-view/optimize-your-data-in-data-view-with-rule-boxes) for information on using rule boxes to optimize data in Data View. Analyzer [#analyzer] The Analyzer feature is a part of the context menu in Data View that provides attribute data analytics. You can access it in two ways: UUID-fde0ff92-5cfd-7975-fb96-2d9238cf87c6 . Via the context menu: Go to **Data View** and select the needed stage or export from the dropdown on the left. Open the context menu on the right and select the tab marked with a pie-chart UUID-05c75676-d029-7ae1-94e9-d813554aefb3 icon. In the attribute overview, select the pie-chart icon next to the needed attribute to see the analytics of its values. Not all exports use the analyzer tests, but if you choose an export that uses them in [see the relevant section](#N1732282530478), the attributes overview also shows the percentage of failed analyzer tests next to each attribute. UUID-54a6d0c8-2057-5e67-52bb-6f23be311413 . Via the **Analyze** button: Go to **Data View** and select the needed stage or export from the dropdown on the left. Find the needed attribute and choose **Analyze** under the attribute name. UUID-cd4f23f0-711a-c9ba-670b-dc817186eb28 Once you access the analytics of a desired attribute, you can see the following sections in Analyzer: * *Analyzer tests*This section runs multiple analyzer tests with the data provided in the attribute and displays pie charts to show how many values meet particular channel requirements. UUID-4658bf65-82ab-85d5-b09d-43f647584ef9 The *Analyzer tests* section is available at the export stage only. It appears in Analyzer if the chosen export uses analyzer tests, which means the platform knows the requirements of that channel and tests the attributes' data against those requirements. For example, the export *Google Content API for Shopping* uses analyzer tests, while *Blank Export (empty)* doesn't. The subsections present in *Analyzer tests*, for example, *Empty Column*, *Contains HTML*, *GOOGLE - Image Extension Checker*, always depend on what your channel requires from each attribute.In case of data inconsistencies, you can perform the suggested data optimization tasks right there in the respective *Analyzer tests* subsection. For example, if you select **Add box: "Skip Row if Empty"**, the platform adds the `Skip Row if Empty` rule box to the analyzed attribute at the export stage and sets it up as recommended. UUID-d7357597-2cd8-92f8-7240-330be88974cf * *Distinct Values*This section shows the total number of unique values in the attribute and how many times each unique value appears. UUID-f42f6ed3-3f53-e87b-4c45-9a6d11bc361e * *Length Distribution*This section analyzes the length of each value in the attribute, lists all length variants, and shows how many values have the same length. UUID-6f32c0cf-7c3d-7481-378b-311bda1a86ea * *Min/Mix Values*This section arranges all the unique values in a number attribute from minimum to maximum and shows how many times each unique value appears. UUID-adcf2cc4-6f15-e8f9-8565-402e7709981d * *Logarithmic Value Distribution*This section splits all values in a numeric attribute into intervals, or buckets, and shows how many values there are in each bucket. UUID-fb07ab30-97dc-7b29-7905-e9949695c847 * *% Empty*This section shows the percentage and number of empty values in the attribute.In the following examples, `0.00 %` means you don't have any empty values in this attribute, and `100.00 %` means all `7` values in the attribute are empty. | UUID-ad0aebb2-81f1-9c67-2bec-1a6a79c4241f | UUID-fd1fb89f-9b61-7b9e-ce07-3a43115fb296 | | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | * *Average Length*This section calculates the average number of characters in the values.You should hover over the blank space under the section's title to see the calculated average length. UUID-2eb5f925-5a4e-7068-d6c1-39d4ab8a9bff * *Average Value*This section calculates the average number based on the numeric values in the attribute. For example, if you have two (2) items with values *20* and *22* in the analyzed attribute, the average value is `21`.You should hover over the blank space under the section's title to see the calculated average value. UUID-d43e2dee-f031-5000-c5d0-734396351ede * *Data Type Distribution*This section shows the type of data stored in the attribute, such as images, text, URL, numbers, or empty values. UUID-9226779a-6fd1-b1f9-2ec9-75f7ccb35263 If you select a pie chart or a row in one of the Analyzer sections, Data View creates a filter and displays only the items featured in the selected pie chart or row. UUID-9f080319-a8e9-8746-c27a-1bbf74fa8d79 The sections in Analyzer vary depending on the data type of the analyzed attribute. For example, the set of sections in Analyzer of the numeric values attributes differs from the image or text attributes. Core readiness score [#core-readiness-score] Core readiness score is a view option at the export stage in Data View that shows how many mandatory attributes are export-ready. It is available only for exports that use analyzer tests. To access and use the core readiness score, you need to: Go to **Exports**, add, and set up an export that uses analyzer tests. Go to **Dataflow**, select the added export in the dropdown on the left, and map all mandatory attributes from import to export. Go to **Data View**, select the needed export in the dropdown on the left, and choose **Readiness** in the **Overview** dropdown. UUID-98c72c83-bd24-dbff-7d28-f261a78dca61 The core readiness score is at the top of the page: UUID-67fdc2a4-7f11-e6eb-5a57-06d884e6502a * The **products ready** figure shows the overall percentage of export-ready items whose mandatory attributes meet the requirements of the target channel. In the screenshot above, `0.0%` items are ready because all items have issues with several values in the `id`, `title`, and other attributes highlighted in orange. * The **channel ready** figure shows the average percentage of how many mandatory attributes are export-ready per item. In the screenshot above, `89.8%` is an average percentage of the mandatory attributes ready for export per item. To help you identify issues, the platform highlights the ready attributes in green and the problematic ones in orange or red. It also displays the percentage of values meeting the channel's requirements under each attribute name. If you select the readiness percentage under the attribute name, the Analyzer feature opens on your right. Enhanced readiness score [#enhanced-readiness-score] Enhanced readiness score is a view option at the export stage in Data View that shows how many mandatory and optional attributes are export-ready. It is available at the export stage only for exports that use analyzer tests. To access and use the enhanced readiness score, you need to: Go to **Exports**, add, and set up an export that uses analyzer tests. Go to **Dataflow**, select the added export in the dropdown on the left, and map all relevant attributes from import to export. Go to **Data View**, select the needed export in the dropdown on the left, and choose **Optimization** in the **Overview** dropdown. UUID-d509a5fc-dc29-852f-d045-0a7b6deaea09 The enhanced readiness score is at the top of the page: UUID-7602c05d-bb29-59c7-675b-7d0e559efa67 * The **channel optimized** figure shows the average percentage of how many attributes are export-ready per item. In the screenshot above, `86.1%` is the average of all attributes ready for export per item.To help you identify issues, the platform displays the percentage of an item's attributes that meet the channel's requirements at the start of each item row on the left. It also highlights the ready attributes in blue and the problematic ones in white or gray. You can find the percentage of values meeting the channel's requirements under each attribute name and select it to open the Analyzer feature on your right. Get your attribute data ready for export [#get-your-attribute-data-ready-for-export] You can use all the analytics features in Data View to get your data ready for export. We recommend the following process to analyze and optimize your data: Once you add and set up all your needed data sources and exports, go to **Dataflow** to map all relevant attributes from import to export. Go to **Data View**, select the needed export in the dropdown on the left, and choose **Readiness** in the **Overview** dropdown. When you identify what attributes and items require your attention, open the Analyzer feature using the context menu or the readiness percentage under the needed attribute name. Apply the recommended rule boxes right in Analyzer or add them manually. See [Add a rule box](/docs/help-center/add-a-rule-box) for more information on adding rule boxes. If you want to optimize and send both mandatory and optional attributes to your target channel, choose **Optimization** in the **Overview** dropdown in Data View and repeat [see the relevant section](#N1686677191140) and [see the relevant section](#N1686677201271) using the channel optimization data. Download reports with attribute data analytics [#download-reports-with-attribute-data-analytics] You can download reports in Data View. For example, you can share the results of attribute data analytics with a colleague who doesn't have access to Productsup. In Data View, you can create and download the following reports: * **Download Analysis** creates a list of all analyzer tests performed with your attribute data and collects the results of those analyzer tests in a CSV file. The file displays all subsections of the *Analyzer Tests* section for all your mapped attributes.This report is available at the export stage only. * **Download Top Values** creates a CSV file with a list of all Analyzer sections, such as *Distinct Values*, *Length Distribution*, *% Empty*, etc., and the related value data stats, excluding the *Analyzer tests* section.This report is available at all stages of your site. * **Download Enhanced readiness score** summarizes the overall export readiness of your mandatory and optional attributes as an HTML page that displays the enhanced readiness score of your export. The report isn't available at a unique URL, so you can't share it using a link to that HTML page. You need to download the report file to share it.This report is available at the export stage only. Follow these steps to download an attribute data analytics report: Go to **Data View** from your site's main menu. In the dropdown on the left, select the needed export. Open the context menu on the right and select the pie-chart UUID-05c75676-d029-7ae1-94e9-d813554aefb3 icon. In the **Download Analysis** dropdown, select the downwards triangle icon (**▾**) and choose your report type: 1. Select **Download Analysis** to download a report with analyzer tests. 2. Select **Top Values** to download a report with all Analyzer sections,E excluding *Analyzer tests*. 3. Select **Download Enhanced readiness score** to download a report with an enhanced readiness score.A new tab opens in your browser with a report presented as an HTML page. Use the functionality of your browser to print or download the report. You can create reports using the options **Top Values** and **Download Enhanced readiness score** to feature data on all attributes or a selected attribute only: * To create a report on all attributes, follow the procedure described above. * To create a report about a single attribute, follow the procedure described above, but instead of performing [see the relevant section](#N1686822041764), select **Analyze** under the needed attribute name. # Add Akeneo API export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Productsup Akeneo API export lets you export product data to your Akeneo instance directly from the platform. Akeneo offers a SaaS PIM Cloud Edition solution called Serenity mode, which gives you access to their API. Productsup supports writing scopable and localizable Akeneo attributes for your exports. See the following section [Set up Akeneo localizable and scopable attributes](#section-idm13288638796600) to learn more. Productsup can add existing attributes but not create new ones. Consult with the Akeneo PIM data structure before sending data. Add and set up export [#add-and-set-up-export] To add the *Akeneo API v5.0* in Productsup: Go to **Exports** from your site’s main menu. Select **ADD EXPORT** and search for *Akeneo Export.* Select **Add** and confirm adding it again as an export. UUID-090cc2e5-b780-613d-b2f4-e54d4b236eb3 Select **Add Destination** and choose *Akeneo v5.0 Export* from the drop-down list in the export setup. Now enter a destination **Name**. UUID-7fabd847-28dd-b213-fcd2-162a093636df Enter the URL where Akeneo hosts your instance in **Host**. Contact an Akeneo admin for the host information if you do not have it. In **Username** and **Password**, enter your Akeneo credentials. For more information on API authentication, see [Akeneo API authentication](https://api.akeneo.com/documentation/authentication.html#). In **Client ID** and **ClientSecret**, enter your Akeneo credentials. Skip **CSV Delimiter**, as Productsup sends data via Akeneo API as JSON files. Enter the number of lines or products to export as a batch in **Limit (number of elements in batch)**. Switch **Feedback import** to **On** if you want an error file returned to the platform once your data export finishes. This lets the Akeneo API return a feedback file as a data source at import. The platform appends an Akeneo API code and message to each line received in the feedback file at the *Import* level in *Data View*. Leave **Value Separator** blank, which defaults to `<###>`, or define how you want to separate column values. Turn on the destination by switching **Active** to **On**. Select **Save**. UUID-fca34701-cb75-4b12-8303-f4370eb651a1 Set up Akeneo localizable and scopable attributes [#set-up-akeneo-localizable-and-scopable-attributes] You can edit localizable and scopable attributes for your Akeneo export channels from the platform. Akeneo has several attribute types to choose from, such as the price, date, or measurement attributes, to name a few. See [Akeneo attribute types](https://help.akeneo.com/pim/v3/articles/what-is-an-attribute.html#akeneo-attribute-types). Some attribute types, such as `number`, may cause issues on Productsup's end. Contact your Akeneo admin to clarify any conflicts before proceeding. A localizable attribute is an attribute that can have a unique value depending on the locale you place it under. A locale is a combination of a language and country. For example, if you want to give an item a description in Spanish for your U.S. channels, you can localize the attribute such as `description~es_US`. The description is defined using `~es` for the language, while the locale is defined as `US`. A scopable attribute is an attribute that has a unique value depending on the channel. In other words, an attribute in multiple scopes can differ but have the same meaning across several markets. For example, you can use the scopable attribute `description~mobile` and in another say `description~mobile_phone` in one channel. To enter attributes for specific scopes and locales, you must use the following pre-defined naming conventions: * Non-localizable and non-scopable attribute = `{code}`. `{code}` is the API name of the attribute.Example: `description` * Localizable attribute, non-scopable = `{code}~{locale}`Example: `description~en_US` Do not include a dash (`-`) in an attribute code because that represents a separator on Akeneo's end. Use the tilde (`~`) as a separator in the Productsup platform. * Scopable attribute, non-localizable = `{code}~{scope}`Example: `description~mobile` * Localizable and scopable attribute = `{code}~{locale}~{scope}`Example: `description~en_US~mobile` For the `price` and `metric` Akeneo attributes, you must use the following terms respectively: * `currency` - for the `price` attribute * `unit` - for the `metric` attribute Examples: * For the `price` attribute, `Price~de_DE@currency`, you must send the data as `740.00 EUR`. * For the `metric` attribute, `Length~de_DE@unit`, you must send the data as `3000.00 MMT`. For all fields that don't contain an at sign (`@`) in their attribute name (`name@unit`, `name@currency`, etc.) and require a boolean value, you should enter `true` instead of `1` or `false` instead of `0`. The destination automatically changes `true` and `false` into `1` and `0` before sending the data to the API. # Set up BMEcat 2005 Bundled-features Approach export channel import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] BMEcat 2005 is a product data exchange format based on XML. Developers designed BMEcat in Germany to standardize and simplify product catalog exchanges between suppliers and purchasing companies. Industries widely use it across Europe. It can also integrate with a classification system, such as ETIM. You can also use this document to set up the *2BA (BMEcat 2005)* export channel since it is similar to the *BMEcat 2005 - Bundled-features Approach* export channel. UUID-97dc6021-a714-3c99-6f49-70c8de5f55b6 Next, learn how to set up the *BMEcat 2005 - Bundled-features Approach* export channel. Compare BMEcat export channels [#compare-bmecat-export-channels] Before you start, be sure to choose the correct BMEcat 2005 channel to suit your needs. | BMEcat 2005 - Single-feature Approach export channel | BMEcat 2005 - Bundled-features Approach export channel | | ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Your BMEcat has fewer than 50 features | Your BMEcat has more than 50 features | | You do not have a separate site handling data mapping to a classification standard such as ETIM. | You have a separate site handling data mapping to a classification standard such as ETIM.See [Set up ETIM Classes exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-etim-classes-exports) for setup instructions. | If the *BMEcat 2005 - Bundled-features Approach* export channel is right for you, take the following steps in the next sections to set it up. Prerequisites [#prerequisites] If you plan to include a classification standard in your BMEcat 2005 export, you should already have a different site prepared using a classification standard before you begin with the *BMEcat 2005 - Bundled-features Approach* export channel set up. For example, you can use the ETIM-7.0 or ETIM-8.0 Classification export channel or another classification standard. In this document, Productsup uses ETIM classifications to demonstrate the setup in principle. See [Set up ETIM Classes exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-etim-classes-exports) for steps in preparing the site using the ETIM classification standard. Set up BMEcat 2005 - Bundled-features Approach export channel [#set-up-bmecat-2005---bundled-features-approach-export-channel] Prepare BMEcat 2005 data sources [#prepare-bmecat-2005-data-sources] Using the ETIM classification standard for your BMEcat 2005, you need to add that data to the current site from where you're working. You must then add the ETIM output from the site as an additional data source to your current site. To accomplish this: Go to **Exports** from your site's main menu to perform the *Export to Data Source* feature. Then, complete the configuration for your ETIM site export destination, including the data source settings for the current site. The platform later bundles all attributes into the following four fields: * `FNAME` - Attribute name * `FVALUE` - Value * `FUNIT` - Unit of measure * `FVALUE_DETAILS` - Can contain additional valuable information or be empty Bundling lets you pass the ETIM information to BMEcat without needing to map or review the data again. This step saves you time later in the setup. Once you have added the additional data source with your ETIM data, go to **Data Source** and edit the data source by selecting the **Edit** cogwheel. Next, continue to the **Advanced Settings** tab and select **I/O Settings**. Then select **Add** and copy-paste the following XSLT code in the **Transform XML with XSLT\*\*\*\*XSL Template** field: ``` - - - ``` UUID-3065a153-04a1-5c25-9602-0ef6699793cb Back in your data source *Edit* view, go to the **Overview** tab and scroll down to **Content Options**. Next, select **XML Settings** from the left-hand menu and enter the value `1` into the **Bundle repeating nodes** field. Then enter `<###>` in the **Bundle delimiter** field and select **Save all settings**. Now that you prepared the import sources, you can continue setting up the BMEcat 2005 export channel. Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *BMEcat 2005 - Bundled-features Approach* and select **Add**. UUID-cc2384ad-8ea4-0467-23c9-c50ce98f743e Give your export a custom name if desired. In this example, use the name *BMEcat 2005 export*. The custom name replaces the export name on the *BMEcat - Bundled-features Approach Overview* page. Then select **Add**. Select **Add Destination** and choose your destination. For the following example, choose *Productsup Server* from the drop-down list. Give this destination a title in **Name**, for example, *Internal FTP server*, and select **Save**. UUID-4037a337-5ec2-a81f-ce96-0200e5094143 Go to the *Settings* tab and switch **Export as XML** to **ON**. Continuing on the *Settings* page, enter the BMEcat header information beginning with the field **GENERATOR\_INFO**.The BMEcat header does not send product descriptions. It only sends information concerning the identification and validity of the catalog, the catalog creator, receiver, and the underlying skeleton agreement. In addition, the BMEcat header contains applicable default values that it can place on all held products, for example, language and currency. UUID-9d82a4ef-a6d1-281f-3dbe-608904ba131b *BMEcat 2005 - Bundled-features Approach export channels Settings page* Correctly entering BMEcat header information depends on the intended recipient's requirements for the BMEcat you are creating. If you are uncertain of the requirements, see [Header](https://guide.itscope.com/wp-content/uploads/2021/01/BMEcatV12e_English.pdf) beginning on page 21 in the *Specification BMEcat 2005* PDF document. Select **Save** to store the header fields information that you entered. Exit **Exports** and go to **Dataflow** from your site's main menu. Map the BMEcat attributes and validate the data [#map-the-bmecat-attributes-and-validate-the-data] Before continuing with the BMEcat setup, here is some essential information on mapping BMEcat elements. To become familiar with the BMEcat 2005 structure, in this example, the export column contains the highest-level elements that hold a value under the main element `PRODUCT`. See the following illustration: UUID-004cf167-237a-68db-1dfc-fda3485becd8 Accordingly, directly from the main element `PRODUCT`, the `SUPPLIER_PID` element appears in the export column because it carries a value. In contrast, the `PRODUCT_DETAILS` element does not appear in the export column because it is a structural element and does not hold a value. Lower-level elements under `PRODUCT_DETAILS`, such as `DESCRIPTION_SHORT` and `DESCRIPTION_LONG`, appear in the export column because these elements also hold a value. In the export column, you can see all of the possible BMEcat 2005 attributes. You mustn't create any additional attributes for this export channel manually, as the platform does not add them to the final BMEcat 2005 file. If you don't see an attribute that you need, contact your Customer Success Manager or support at [support@productsup.com](mailto:support@productsup.com). See [PRODUCT in context](http://www.etim.at/fileadmin/dokumente/downloads/etim_bmecat_guideline_v3-0_.pdf), beginning on page 34 in the *Specification BMEcat 2005* PDF document for more information. Indexed attributes [#indexed-attributes] What are indexed attributes? Some attributes can have more than one instance, for example, descriptions, which can come in several languages for an item. You can refer to these attributes as indexed attributes. Some of the indexed attributes consist of several sub-attributes. An index number per attribute in the output file marks the relationship between these sub-attributes. How is that reflected in the setup? To prevent the user from having to create a field in the dataflow for every instance, Productsup is using a delimiter within the fields, to let the user add several instances. This is best explained with an example: The attribute `Description Short` can contain short descriptions for several languages. Sub-attributes are the description itself and the language. The user must populate the two sub-attributes `DESCRIPTION_SHORT@lang` and `DESCRIPTION_SHORT`, so the output file correctly populates. The platform imports the file to provide instance information in the same order for every sub-attribute. * `Description Short DE: Hochwertiges Werkzeug` * `Description Short EN: High-quality tool` * `Description Short FR: Outil de haute qualité` You must add these to the sub-attributes, as follows: | `DESCRIPTION_SHORT@lang` | `DESCRIPTION_SHORT` | | ------------------------ | ------------------------------------------------------------------------ | | `DE<###>EN<###>FR` | `Hochwertiges Werkzeug<###>High quality tool<###>Outil de haute qualité` | If one of the sub-attributes is missing for an instance, you need to use an empty value. Skipping it leads to inconsistencies within the output file. The following tables describe the indexed attributes and their sub-attributes: When using the ETIM-7.0 Classification or ETIM-8.0 Classification export, the XSLT that you previously saw in step [2](#N1631183542220) takes care of the product features. In this case, there is no need for manual adjustment. | Description Short | | ------------------------ | | `DESCRIPTION_SHORT@lang` | | `DESCRIPTION_SHORT` | | Description Long | | ----------------------- | | `DESCRIPTION_LONG@lang` | | `DESCRIPTION_LONG` | | Product Details | | --------------- | | `KEYWORD` | | `REMARKS` | | Product Features | | ---------------- | | `FNAME` | | `FVALUE` | | `FUNIT` | | `FVALUE_DETAILS` | | Price | | ------------------ | | `PRICE@price_type` | | `PRICE_AMOUNT` | | `PRICE_CURRENCY` | | `TAX` | | `LOWER_BOUND` | | MIME | | -------------- | | `MIME_TYPE` | | `MIME_SOURCE` | | `MIME_DESCR` | | `MIME_PURPOSE` | The following tables list the user-defined extensions: | MIME | | --------------------------- | | `UDX.EDXF.MIME_SOURCE` | | `UDX.EDXF.MIME_CODEx` | | `UDX.EDXF.MIME_FILENAME` | | `UDX.EDXF.MIME_DESIGNATION` | | `UDX.EDXF.MIME_ALT` | | `UDX.EDXF.MIME_ISSUE_DATE` | | `UDX.EDXF.MIME_EXPIRY_DATE` | | Description Very Short | | -------------------------------------- | | `UDX.EDXF.DESCRIPTION_VERY_SHORT@lang` | | `UDX.EDXF.DESCRIPTION_VERY_SHORT` | | Packing Unit | | ---------------------------- | | `UDX.EDXF.GTIN` | | `UDX.EDXF.GS1_128` | | `UDX.EDXF.QUANTITY_MIN` | | `UDX.EDXF.QUANTITY_MAX` | | `UDX.EDXF.PACKING_UNIT_CODE` | | `UDX.EDXF.PACKING_UNIT_NAME` | | `UDX.EDXF.PACKAGE_BREAK` | | `UDX.EDXF.PACKING_PARTS` | | `UDX.EDXF.VOLUME` | | `UDX.EDXF.WEIGHT` | | `UDX.EDXF.LENGTH` | | `UDX.EDXF.WIDTH` | | `UDX.EDXF.DEPTH` | | `UDX.EDXF.DIAMETER` | | Product Characteristic | | -------------------------------------------------- | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_CODE` | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_NAME` | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_NUMERIC` | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_STRING` | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_BOOLEAN` | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_RANGE_FROM` | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_RANGE_TO` | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_SET` | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_SELECT` | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_UNIT_CODE` | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_REFERENCE_GTIN` | To continue with the BMEcat setup by mapping attributes, take the following steps: In **Dataflow**, map all the attributes you want to add to your BMEcat 2005 export.For the bundled attributes that come from the classification site, map them from import to export, as all the values were previously bundled inside of the four (4) fields referred to in step [2](#N1631183542220). Go to **Data View** to review the data and, if required, add rule boxes to adjust your values. To learn more about rule box possibilities, see [Find the needed rule box category](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category). # Set up BMEcat 2005 Single-feature Approach export channel import { Callout } from "fumadocs-ui/components/callout"; Introduction [#introduction] BMEcat 2005 is a product data exchange format based on XML. Developers designed BMEcat in Germany to standardize and simplify product catalog exchanges between suppliers and purchasing companies. Industries widely use it across Europe. It can also integrate with a classification system, such as ETIM. Next, learn how to set up the BMEcat 2005 - Single-feature Approach export channel. Compare BMEcat export channels [#compare-bmecat-export-channels] Before you start, be sure to choose the correct BMEcat 2005 channel based on your needs. | BMEcat 2005 - Single-feature Approach export channel | BMEcat 2005 - Bundled-features Approach export channel | | ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Your BMEcat has fewer than 50 features | Your BMEcat has more than 50 features | | You do not have a separate site handling data mapping to a classification standard, such as ETIM. | You have a separate site handling data mapping to a classification standard such as ETIM.See [Set up ETIM Classes exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-etim-classes-exports) for setup instructions. | If the *BMEcat 2005 - Single-feature Approach* export channel is right for you, take the following steps in the next section to set it up. Set up BMEcat 2005 - Single-feature Approach export channel [#set-up-bmecat-2005---single-feature-approach-export-channel] . Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *BMEcat 2005 - Single-feature Approach* and select **Add**. UUID-f0dcdf50-6080-41e8-bfca-acb21a43922c . Give your export a custom name if desired. In this example, use the name *BMEcat 2005 export*. The custom name replaces the export name on the *BMEcat - Single-feature Approach Overview* page. Then select **Add**. . Select **Add Destination** and choose your destination. For the following example, choose *Productsup Server* from the drop-down list. Give this destination a title in **Name**, for example, *Internal FTP server*, and select **Save**. UUID-4037a337-5ec2-a81f-ce96-0200e5094143 . Go to the *Settings* tab and switch **Export as XML** to **ON**. . Continuing on the *Settings* page, enter the BMEcat header information beginning with the field **GENERATOR\_INFO**.The BMEcat header does not transfer the description of products. It only transfers information concerning the identification and validity of the catalog, the catalog creator, receiver, and the underlying skeleton agreement. In addition, the BMEcat header contains applicable default values that it can place on all contained products, for example, language and currency. Correctly entering BMEcat header information depends on the intended recipient's requirements for the [Header](https://guide.itscope.com/wp-content/uploads/2021/01/BMEcatV12e_English.pdf) BMEcat you are creating. If you are uncertain of the requirements, see Header beginning on page 21 in the *Specification BMEcat 2005* PDF document. UUID-82ebb329-89b9-2016-2478-9fc1db3ec0fd . Select **Save** to store the header fields information that you entered. . Exit **Exports** and go to **Dataflow** from your site's main menu. Map the BMEcat attributes and validate the data [#map-the-bmecat-attributes-and-validate-the-data] Before continuing with the BMEcat setup, here is some essential information on mapping BMEcat elements. To become familiar with the BMEcat 2005 structure, in this example, the export column contains the highest-level elements that hold a value under the main element `PRODUCT`. See the following illustration: UUID-004cf167-237a-68db-1dfc-fda3485becd8 Accordingly, directly from the main element `PRODUCT`, the `SUPPLIER_PID` element appears in the export column because it carries a value. In contrast, the `PRODUCT_DETAILS` element does not appear in the export column because it is a structural element and does not hold a value. Lower-level elements under `PRODUCT_DETAILS`, such as `DESCRIPTION_SHORT` and `DESCRIPTION_LONG` appear in the export column because these elements also hold a value. See [PRODUCT in context](http://www.etim.at/fileadmin/dokumente/downloads/etim_bmecat_guideline_v3-0_.pdf), beginning on page 34 in the *Specification BMEcat 2005* PDF document for more information. . In **Dataflow**, map the attributes for all BMEcat attributes you want to export. The attribute `PROD_ID` in the export column is `SUPPLIER_PID` in BMEcat and is written as `SUPPLIER_PID` in the final output file. If you need to add more attributes, you can manually create them in the export column, following the same naming convention or style used for attribute naming.  For example, if you want to add more product features, you should name the new attribute `FEATURE_YourAttributeName`. | Attributes | Examples | | ---------------------------- | ----------------------- | | `FEATURE_YourAttributeName` | `FEATURE_Material` | | `MIME_ALT_number` | `MIME_ALT_6` | | `MIME_DESCR_number` | `MIME_DESCR_6` | | `MIME_PURPOSE_number` | `MIME_PURPOSE_6` | | `MIME_SOURCE_number` | `MIME_SOURCE_6` | | `MIME_TYPE_number` | `MIME_TYPE_6` | | `PRICE_AMOUNT_number` | `PRICE_AMOUNT_4` | | `PRICE_CURRENCY_number` | `PRICE_CURRENCY_4` | | `PRICE_LOWER_BOUND_number` | `PRICE_LOWER_BOUND_4` | | `PRICE_TAX_number` | `PRICE_TAX_4` | | `PRICE_TYPE_number` | `PRICE_TYPE_4` | | `DESCRIPTION_SHORT_language` | `DESCRIPTION_SHORT_ita` | | `DESCRIPTION_LONG_language` | `DESCRIPTION_LONG_ita` | | `PRICE_DATETIME_TYPE_number` | `PRICE_DATETIME_TYPE_2` | | `PRICE_DATETIME_DATE_number` | `PRICE_DATETIME_DATE_2` | . Go to **Data View** to review the data and, if required, add rule boxes to adjust your values. To learn more about rule box possibilities, see [Find the needed rule box category](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category). # ROI Strategy *ROI (Return on Investment) Strategy* is a Productsup feature that allows you to optimize your product data feed using performance tracking data and KPI metrics. Rules can be defined to exclude the worst-performing products or to whitelist the best performing products for each export channel 1. Instructions [#1-instructions] *1.1 Requirements*: * Activate tracking (Product Pixel Tracking or Redirect Tracking). * Implement correct Conversion Tracking. * Configure time range (see 1.2) * Receive Tracking Data Feeds *No data = no ROI Management* For each export, Productsup creates and adds an extra tracking data feed in *Data Sources*. This feed contains all the statistics of an export and can be used to edit rules for the export. Before exporting it, the platform will check each product to see if they are affected by any rule and only export the best-performing ones. *Example of Tracking Data Feeds in Data Sources:* UUID-e8b5b6f3-5653-c105-da37-f9c51cf0bdc5 *1.2 Time Range*: The time range can be defined in tracking settings. Available time ranges are 7,14,30 or 90 days. Only a one-time range can be defined per site. 2. Rules [#2-rules] Rules in *ROI Strategy* are used to determine methods for excluding a poor performing product or whitelisting a good performing product and increasing the ROI. A rule determines criteria: ``` e.g.: if CPO is more than 10€ ``` A rule can contain multiple conditions: ``` e.g. if tracking clicks are more than 200 AND if orders are less than 5 ``` *What are the criteria to set up a rule?* The following options are available to create a rule for a specific export channel: * static import feed data (from the import feed): title, size, gender, category,... * tracking data from the export itself: clicks, orders, costs, CPO,... * tracking data from another export channel as well: if there is not enough data for this channel, use the data from a similar export channel (e.g. Bing/Google PLA, Critéo/Sociomantic, Shopping.com/Nextag...) *How to exclude the feed data from the Import stage in ROI Strategy* To exclude products of specific categories or product IDs is the easiest way to use the *Skip Row* boxes. *How does static import feed data help in ROI Management?* It offers the possibility of combining conditions and creating a rule for a specific group of products. Products don't have all the same price and margin. So high-margin products can have a more loose-fitting rule(s) than low-margin products - thereby you customize and optimize your feed. 3. How to add rules [#3-how-to-add-rules] UUID-86a0f42e-abc1-e30e-6491-94500aedcacd . Click on *ROI Strategy* tab. . Choose the *Export Channel* you want to add rules to from the drop-down list at the left top of the page. You can find all channels added in the legacy Exports tab via *Export Strategies* and the ones in Exports via *Export A/B Strategies*. . Click on *Add Rule*. Select the first condition and fill in the wanted criteria. To add another condition within the rule, click on *Add*within the rule field. Two conditions within a rule are *and*-conditions. . Choose if the product should be skipped or whitelisted. . Click the *Save* button. You can delete rules by removing all conditions within it through the red X-button and clicking *Save*. *Example:* The screenshot above shows two rules. They act as *or*-conditions between each other, meaning that a product has to meet the requirements of the first rule *or* the second one in order to be excluded from the selected channel. The first rule includes two conditions: ``` Clicks > 100 Orders < 5 ``` The second rule includes only one condition: ``` Costs_CPO > 2 ``` The two rules work independently of each other. Every product affected by one of the rules will be excluded from the export feed for that specific channel. If you use only static import feed criteria (example: category = Fashion) the products will always be excluded (until you delete the rule). 4. How to prioritize ROI rules [#4-how-to-prioritize-roi-rules] Each rule has an input field for a priority. This correlates with the [prioritization of the Skip boxes in the Dataflow.](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/include-or-exclude-products) You can enter negative and positive numeric values. If a product is affected by multiple ROI rules and Skip rules, the one with the highest priority is responsible for excluding products. This enables you to set the priority of an ROI rule higher than the one of a Whitelist. If you don't enter a priority, Whitelists will always be "stronger" than Blacklists, Skip Boxes, and the ROI Strategy rules. The priority of a rule is shown in the \_\_\_bidding\_pause column in Data View. 5. How to identify paused products [#5-how-to-identify-paused-products] In *ROI Strategy* the column *bidding\_pause* contains a link to the rule in ROI Strategy for affected/paused products. This will show you which rule is responsible for excluding a product. After the export you can see the number of affected products in the Run log: UUID-835e29f1-cec2-ef68-f1c0-3e060f87a31e # Google Shopping Campaigns You now need to use AdWords to now structure campaigns using Google Shopping Campaigns. Google Shopping Campaigns are still CPC display ads. 1. What will change in your feed? [#1-what-will-change-in-your-feed] Product Listing Ads can now be structured with two attributes in the feed: - adwords\_grouping - adwords\_labels For Shopping Campaigns, Google introduced a new attribute: custom label You can use up to 6 custom labels (0 - 5) 2. List of attributes for Google Shopping Campaigns [#2-list-of-attributes-for-google-shopping-campaigns] In AdWords you can use more than the custom labels for the campaign structure. The following list of attributes from the feed can be used: * Category (Google Product Category) * Brand * Item ID * Condition * Product Type * Custom Label 0 - 4 UUID-bc8455ad-ded7-93b1-e6ef-cbfe017e47c2 3. How to set it up in Productsup Platform: [#3-how-to-set-it-up-in-productsup-platform] In *Dataflow* for the Google Merchant Center Export simply connect the custom label columns from Import to Intermediate and from Intermediate to Export stage. UUID-c4fc971f-58e4-3b7d-bf64-d31aeeb15416 4. What you need to consider [#4-what-you-need-to-consider] * Create up to five custom labels, numbered 0 to 5, for each item in your feed. * Submit one value per item for each custom label attribute. * Only 1,000 unique values are supported for each custom label attribute across the items in your organization. Products with a custom label submitted after the limit has been exceeded won’t be included in product groups using this custom label. To avoid that update your product data to reduce the number of unique values for the custom label to less than 1,000. Source & more information about custom labels on Google Support [here](https://support.google.com/adwords/answer/6275295?hl=en). You can also check out our whitepaper on best practice [here](https://productsup.io/white-paper/best-practice-guide-google-shopping-feed/). # Google Product Ratings *This service is only availabale if you first fill out a form. Please find this form [here](https://services.google.com/fb/forms/productreviews/).* Please also read the official Google information about Product Ratings: [link here](https://support.google.com/merchants/answer/6059553?hl=en). 1. What are Product Ratings? [#1-what-are-product-ratings] Google use a 5-star rating system for its Product Listing Ads (PLA). Google aggregates reviews and converts them in this star-rating system. A product needs a minimum of 3 reviews in order for its rating to be shown. 2. Where does Google get the reviews from? [#2-where-does-google-get-the-reviews-from] Google aggregates reviews from multiples sources: - merchants (now via Google Product Ratings feed) - third-party aggregators - editorial sites - users 3. Why should I upload my reviews? [#3-why-should-i-upload-my-reviews] One one hand, if you sell your own brand or niche product, there is a chance that Google hasn't got reviews for your products yet. Providing reviews can increase the shopper's trust in your brand as well as the visibility of your product. On the other hand, if your product is similar to other items (in electronics for example), positive reviews may convince the user to select your model over your competitors. 4. Is it like the same as seller rating? [#4-is-it-like-the-same-as-seller-rating] Do not mix up seller rating and product rating. Seller rating is also a 5 star-rating system, but it aggregates the reviews about the shop itself (delivery, service, quality,..) and not about the specific product. *Productsup tip*: check the reviews from your shop by using the following link: *[http://www.google.com/shopping/seller?q=yourdomain.com](http://www.google.com/shopping/seller?q=yourdomain.com)* Only change the last part with your domain like this: *[http://www.google.com/shopping/seller?q=amazon.com](http://www.google.com/shopping/seller?q=amazon.com)* 5. How can I submit my product reviews? [#5-how-can-i-submit-my-product-reviews] After filing out the [form](https://services.google.com/fb/forms/productratingsoptout/), you can upload a XML file in the Google Merchant Center. Official feed specifications [here](https://support.google.com/merchants/answer/6171899?hl=en). Click on *+DataFeed* Choose Product Reviews as feed type. UUID-888c4be4-3285-58ef-2498-e51ef3e603c2 # Replace feed terms with the Standard Replacement list import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Standard Replacement list, formerly known as the Normalization List, lets you efficiently edit terms within the product feed to: * Standardize specific terms or keywords * Minimize redundancy * Replace low-volume search terms with high-volume search terms The Standard Replacement list lets you create an extensive list of terms to replace existing words in the data feed with only one standard variation of a specific term. To replace just a few terms, you can also use the [Replace values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/replace-values). You can create one Standard Replacement list for a specific feed and then use it in other feeds within the same organization. For only upper- or lower-case replacements, use rule boxes that change word capitalization. See [Edit text](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/edit-text#section-idm2449847735556741). Example of a replacement: | Search term | Replacement term | | ----------- | ---------------- | | banana | apple | | ape | gorilla | Original text: * `The ape eats bananas and grapes.` Result: * `The gorilla eats apples and grapes.` Set up a Standard Replacement list [#set-up-a-standard-replacement-list] Go to **Lists** from your site's main menu and select **ADD LIST**. UUID-0e567193-a727-f5e9-888a-2d587028dae1 Choose **Standard Replacement** and select **Continue**. UUID-7f8fafd8-8e95-df0d-fc76-3f809440084b In **Name**, give your replacement list a custom name. To share the list at the organization or project levels, toggle on **Share list** and select: * **Account level** shares the list with all sites across all projects under this organization. * **Project level** shares the list with all sites under this project. UUID-ff14dae3-22df-b02e-64b0-4ad31b9887ca If you share the list at the organization or project level, the platform updates the list during an import from the original site where you created the list. Select **Add**. Add terms to the Standard Replacement list [#add-terms-to-the-standard-replacement-list] Enter an existing term you want to replace in **Search**. Enter a replacement term in **Replace term**. Select **Add** to save your pair of terms. UUID-a22348d5-4f59-066b-2592-ef1410e12eb2 Repeat the steps to add more terms. Select **Import** in the top-right corner of your site's view. You may manage different retailing sectors, for example, electronics and fashion, where the same terms may have different meanings. To prevent replacement with the wrong term, you should create separate replacement lists for each industry. When applying the replacement list with the Replacement rule box, you can choose the appropriate list. For example, *HP* stands for *Hewlett Packard* in the electronics industry, while *HP* could refer to *Handley Page* in the aircraft industry. UUID-253befab-ea2a-3ec3-ba18-161ad58c38d6 Add the Replacement rule box [#add-the-replacement-rule-box] To apply your Standard Replacement list to the feed, add the *Replacement* rule box to a feed attribute in **Data View**: The Replacement rule box doesn't replace the entire string in the attribute but only changes the parts of the string that match the list terms. To add the Replacement rule box: Go to **Data View** from your site's main menu and select Intermediate or a needed export from the drop-down menu on the left side of the upper ribbon. Select **Edit** for the needed attribute. Select the **Select an Option** drop-down menu, search for and select the **Replacement** rule box. Take steps from [Use lists](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/use-lists#section-idm234389788424418). # Exclude products with the Dynamic Inclusion/Exclusion list import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Dynamic Inclusion/Exclusion list feature lets you define products in your data feed that you want to include or exclude from your export. It's a list containing terms that the Productsup platform accepts or skips when it matches your previously specified words. It works similar to the *Skip Row if Value In box* rule box, but you can share the list with other sites. And when you modify your data feed, the platform automatically updates the list. You exclude particular products from feeds by using a list of values, including product IDs. For example, In Germany, food manufacturers face restrictions on which ingredients they can add to their products. To exclude products that contain prohibited ingredients, you can use the Dynamic Inclusion/Exclusion list. With the Standard Inclusion/Exclusion list, you manually enter all the values used for exclusion. With the Dynamic Inclusion/Exclusion list, you can upload or import a list source file in CSV format via URL containing the values. This document contains instructions on setting up a Dynamic Inclusion/Exclusion list to exclude products from your feed data. Set up a Dynamic Inclusion/Exclusion list [#set-up-a-dynamic-inclusionexclusion-list] Go to **Lists** from your site's main menu and select **ADD LIST**. UUID-9281947d-c6cf-5007-53d3-db0023db5d1f Next, choose **Dynamic Inclusion/Exclusion** and select **Continue**. UUID-5a92dc01-ed77-b6d3-be45-0656574c5f26 In **Name**, give your Inclusion/Exclusion List a custom name to help you identify it. You can later edit the custom name. Option 1 - Upload a list source file in CSV format [#option-1---upload-a-list-source-file-in-csv-format] Create a CSV file containing a header since the platform skips the first row. Use a structure similar to the following: UUID-10e4f067-f031-02c5-9f2b-a16c16bb182b Next, move your CSV list file to the **Drag and drop your CSV file** field or select **Browse** to upload the file. Select **Add**. A message appears stating that the download is in progress. Once your CSV file completes uploading, you can see your list of defined values under the column **Term**. If you make changes to the source file, perform an import to update the list. Select **Add**. A message appears stating that the download is in progress. Once your CSV file completes uploading, you can see your list of defined values under the column **Term**. If you make changes to the source file, perform an import to update the list. Option 2 - Upload a list source file via a URL [#option-2---upload-a-list-source-file-via-a-url] Enter a source file URL in **Source URL**. To add a Google Sheets list source file, see [Add a list source file via Google Sheets](#section-idm13275710572946) and return to this section, step [2](#listitem-idm16551422676554). As necessary, enter credentials in **Username** and **Password** to access the source file. In **Delimiter**, choose the delimiter. The platform selects the `tab (\t)` as the default. (Optional) In **Encoding**, declare the encoding if it is not UTF-8. (Optional) In **Enclosure**, choose your desired enclosure, for example, ( `‘’` or `““` or `||` ). Toggle on **Reset list on every import** to remove all data whenever there is an import. * When the feature is active, the platform resets the list every run deleting all values and then re-importing them into the list. * When the feature is inactivate, the platform re-imports the list, adding only new items and ignoring changed or deleted items. (Optional) Toggle on the **Share list** button and select one of the following: 1. **Account level** shares this list with all sites across all projects under this organization. 2. **Project level** shares this list with all sites under this project. If you share the list at the organization or project level, the platform updates the list during an import from the original site where you created the list. Select **Add**. A message appears stating that the download is in progress. Once your CSV file completes uploading, you can see your list of defined values under the column **Term**. If you make changes to the source file, perform an import to update the list. UUID-cf3b58c1-9c0a-ab7c-ef2d-85930238d856 Add a list source file via Google Sheets [#add-a-list-source-file-via-google-sheets] To add a list file in Google Sheets, you must first modify the URL that leads to your list. In the URL, replace the text `edit` with:`export?format=csv`If `gid` exists in the spreadsheet URL, replace it with:`&gid`The modified link should look similar to the following example:`https://docs.google.com/spreadsheets/d/{key}/export?format=csv#&gid={gid}` * In this example, `{key}` and `{gid}` are placeholders. Make sure the Google Sheets URL is accessible to everyone. *Read-only* is sufficient. Otherwise, the Productsup platform can't download the Google Sheets file. * Test the URL by opening it in a browser. If you set it up correctly, once you hit enter, a CSV download begins. Now continue with the setup in step [2](#listitem-idm16551422676554). Add the Blacklist rule box to exclude products [#add-the-blacklist-rule-box-to-exclude-products] Add the Blacklist rule box to exclude products [#add-the-blacklist-rule-box-to-exclude-products-1] Go to **Data View** from your site's main menu and select Intermediate or a needed export from the drop-down menu on the left side of the upper ribbon. Select **Edit** for the needed attribute. Select the **Select an Option** drop-down menu, search for and select the **Blacklist** rule box. Take steps from [Include or exclude products](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/include-or-exclude-products#section-idm234386428036993). If the terms from your blacklist appear for any item, the blacklist prevents the item(s) from being exported. In **Data View**, skipped items appear in light-pink. When you hover over them, you can see a message explaining why the blacklist excluded items. If the terms from your blacklist appear for any item, the blacklist prevents the item(s) from being exported. In **Data View**, skipped items appear in light-pink. When you hover over them, you can see a displayed message that explains why the blacklist excluded items. # Lists Introduction [#introduction] Use lists to define how specific rule boxes help you optimize your product data. You can include or exclude, replace, or map values in your product feed using lists. For example, suppose you want to include or exclude a list of items from your inventory. In that case, the Standard Inclusion/Exclusion rule box explicitly uses the values you first defined in Lists. In other words, If you want to exclude, replace, or connect values to different values for several products in a column, you must first create a list. A list contains all the terms or values you want to apply rules to. You can edit replacement terms from a dynamic source with the Dynamic Inclusion/Exclusion or Dynamic Replacement list for efficiency. For example, upload, drag and drop, or link a CSV file to this list type via URL, rather than entering terms manually in the platform. After creating a list, you then add a rule box in Data View that tells the platform how to treat the intended products. A small pop-up message in each rule box explains which list types you need to create first and which rule boxes require a list. For example, to exclude products from your product feed, you can use the *Blacklist* rule box. It works with the Standard Inclusion/Exclusion list. The Lists feature offers you list types from the three categories: *Inclusion/Exclusion*, *Replacement*, and *Mapping*. See the following tables: | List category | List name | | --------------------------- | ---------------------------- | | Inclusion/Exclusion | Standard Inclusion/Exclusion | | Dynamic Inclusion/Exclusion | | | List category | List name | | --------------------------- | -------------------- | | Replacement | Standard Replacement | | Dynamic Replacement | | | Attribute-based Replacement | | | Category | List name | | ---------------------- | ------------------------ | | Mapping | Partner Taxonomy Mapping | | Classification Mapping | | List types [#list-types] In Lists, you can create the following lists: * **Standard Inclusion/Exclusion** is a list of values you want to include or exclude from your feed. * **Dynamic Inclusion/Exclusion** imports a list of values you want to include or exclude from your feed via a CSV file upload or URL. * **Standard Replacement** creates a list of values in your feed that you want to replace by applying your defined values. * **Dynamic Replacement** imports a list of dynamic values you want to replace from a CSV file upload or URL. * **Attribute-based Replacement** creates a list of values for a selected import or intermediate attribute where you can replace them with your choice of values. * **Partner Taxonomy Mapping** creates a list of all values included in a selected import/intermediate attribute and replace them with categories from a partner's taxonomy. * **Classification Mapping** creates a list of all included values in a selected import or intermediate attribute and replace them with categories from a classification system. UUID-6c2d7d79-d385-ff18-c39d-d29f672d332c Inclusion/Exclusion lists [#inclusionexclusion-lists] Standard Inclusion/Exclusion [#standard-inclusionexclusion] The Standard Inclusion/Exclusion list feature lets you define products in your data feed that you want to include or exclude from your export. It's a list containing terms that the Productsup platform accepts or skips when it matches your previously specified words. You can share this list with all sites in a project or an organization. And when you modify your data feed, the platform automatically updates the list. With the Standard Inclusion/Exclusion list, you manually enter all the values used for inclusion or exclusion in Lists. See [Exclude products with the Standard Inclusion/Exclusion list](/docs/help-center/map-and-optimize-your-data/lists/exclude-products-with-the-standard-inclusion-exclusion-list) for the setup. Dynamic Inclusion/Exclusion [#dynamic-inclusionexclusion] The Dynamic Inclusion/Exclusion list feature works similar to the Standard Inclusion/Exclusion list. But instead of manually entering values for inclusion or exclusion in Lists, you upload a CSV file or access the list of values via URL. See [Exclude products with the Dynamic Inclusion/Exclusion list](/docs/help-center/map-and-optimize-your-data/lists/exclude-products-with-the-dynamic-inclusion-exclusion-list) for the setup. Replacement lists [#replacement-lists] Standard Replacement [#standard-replacement] The Standard Replacement list lets you efficiently edit terms within the product feed to: * Standardize specific terms or keywords * Minimize redundancy * Replace low-volume search terms with high-volume search terms You create a list of terms to replace existing terms in the data feed. This list ensures that there is always one standard variation of a specific word used in a particular context. See [Replace feed terms with the Standard Replacement list](/docs/help-center/map-and-optimize-your-data/lists/replace-feed-terms-with-the-standard-replacement-list) for the setup. Dynamic Replacement [#dynamic-replacement] The Dynamic Replacement list is similar to the Standard Replacement list, although it lets you upload or import a list file from a CSV file or via URL. See [Replace feed terms with the Dynamic Replacement list](/docs/help-center/map-and-optimize-your-data/lists/replace-feed-terms-with-the-dynamic-replacement-list) for the setup. Attribute-based Replacement [#attribute-based-replacement] Use the Attribute-based Replacement list to replace existing attributes with your choice of new values. This list of unique values replaces your import and intermediate feed attributes. See [Replace feed attributes with the Attribute-based Replacement list](/docs/help-center/map-and-optimize-your-data/lists/replace-feed-attributes-with-the-attribute-based-replacement) for the setup. Mapping lists [#mapping-lists] Partner Taxonomy Mapping [#partner-taxonomy-mapping] Partner Taxonomy Mapping lets you create a list of all values included in a selected import or intermediate attribute and replace them with categories from a partner's taxonomy. For some export channels, you can match shop categories with a channel partner taxonomy. In some cases, it's mandatory, for example, with Google Merchant Center (GMC). Matching a partner taxonomy ensures that your product categorizations are correct in export channels. See [Replace attributes with Partner Taxonomy Mapping list](/docs/help-center/map-and-optimize-your-data/lists/replace-attributes-with-partner-taxonomy-mapping-list) for the setup. Classification Mapping [#classification-mapping] The Classification Mapping list lets you create a list of all included values in a selected import or intermediate attribute and replace them with categories from a classification system. For example, manufacturers in the electrical, heating and ventilation, and building and construction industries often need to provide product data to trade and industry partners. These products follow an international classification standard, which structures product information by class. See [Set up the Classification Mapping list](/docs/help-center/map-and-optimize-your-data/lists/set-up-the-classification-mapping-list) for the setup. View list information and edit settings [#view-list-information-and-edit-settings] Search and filter lists [#search-and-filter-lists] . Enter a list name in the search field to perform a search. Or select **Type** and choose the list type from the drop-down menu. . You can also select the **Used lists** and **Unused lists** filter buttons to quickly display specific lists. UUID-92d55e28-5ecf-bd9d-31d0-5d72fc191655 Get detailed information for each list in the Lists' main view. * **Names** shows custom list names and list types. * **Number of items** displays the number of items in the list. It also displays the number of unmapped objects. * **Shared with** displays if and where you shared the list across organizations or projects. * **Used in** views if none, one, or several rule boxes use the list. UUID-47e6796a-a084-1b8f-746f-dc62e153c72a Edit list settings [#edit-list-settings] . You can choose a list to view its settings. Under **List settings**, select **Edit** to modify list options for your chosen list on the right. * **Source** lets you see for dynamic lists where the list file originates: in *Import* or *Intermediate*. See source information by selecting a list. For taxonomy lists, you can see the selected partner taxonomy source and attribute. * **Reset list on every import** is only available for the Dynamic Replacement and Dynamic Inclusion/Exclusion lists. Displays the status if you have activated this setting. * When the feature is active, the platform resets the list every run deleting all values and then re-importing them into the list. * When the feature is inactivate, the platform re-imports the list, adding only new items and ignoring changed or deleted items. * **Share list** displays if you shared this list with a project or organization. You can select the hyperlink(s) to visit the organization or project that shares the list. UUID-fa8008f9-e23e-0fd2-412b-ad16459ff25a . From within a list, you can edit the list name. Select the **edit** icon to the right of the list name, and enter a new list name. . You can also perform some quick operations by selecting the **Actions** button in the top-left ribbon to: * **Download the list** * **Reset the list** removes all data but leaves all configurations untouched. * **Delete all unmapped list items** * **Delete the list** UUID-25f8fd82-418e-f3bf-a579-f48a66180813 Edit list terms [#edit-list-terms] Review the following to see which list types let you modify the list terms or values within the list: * Standard Replace list: Select the **Search** and **Replace term** input fields to modify the attributes or values and replacement terms. * Dynamic Replacement list: Select the **Replace term** input field to modify the replacement term. * Standard Inclusion/Exclusion list: Select the **Term** input field to modify the term. * Dynamic Inclusion/Exclusion list: Modify the list from the CSV or URL source, or activate the **Reset the list** option to remove all data except the configuration. * Attribute-based list: Select the **Replace term** input field to modify the term. * Partner Taxonomy Mapping list: Select the **Replace term** input field and enter a term to choose from an auto-complete list of categories. * Classification Mapping list: Select the **Replace term** input field to choose a different classification from an auto-complete list of classifications. UUID-1abb9653-bde6-8b3e-d18f-b93bc3e0501c View box connections per list [#view-box-connections-per-list] If you set up rule boxes to use your list, you can see the site and the number of rule boxes that use your list. . Select the list, and a message above **List settings** displays the number of rule boxes that use the list. UUID-beab3865-c72c-0ae6-1def-fe67510d3c21 . Select the hyperlinked rule box text in the message, and a window appears to illustrate the stages of your defined list values, what they map to, and the box names using the list. . Select the hyperlinked rule box to land in **Data View**. Here you can get a better view or manage your impacted product data. UUID-dacb5d7e-9397-98be-b53d-03c8d77d7931 . In this example, the *Negative Blacklist* and the *Blacklist Entire Word* rule boxes use your list values in the *Import* to *Intermediate* stages. Both stages map to the attribute `day`. UUID-ac0fef41-4d96-ea12-1302-e7295b1f947a # Replace feed attributes with the Attribute-based Replacement list import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Attribute-based Replacement list, formerly the *Mapping* list feature, lets you replace the existing attribute's values with newly defined ones. Unlike the Static Replacement list, the Attribute-based Replacement list automatically creates the list of existing attribute's terms, and you need only to add the new values for each of them manually. Use the Attribute-based Replacement list, if you don't want to use one of the pre-defined taxonomies from the *Partner Taxonomy Mapping* list and want to create your custom terms. To apply the replacement, you must use one of the following rule boxes in Data View or Dataflow. The rule boxes differ only in the way they match the values: * *Taxonomy Mapping* lets you select between replacing the entire string or only a part of the string, as with the Replacement rule box. The *Taxonomy Mapping* rule box is optimal for the Attribute-based Replacement list, especially when replacing category terms. * *Replacement* lets you replace only a part of the string that matches the list terms. It's case-sensitive. The *Replacement* rule box doesn't let the platform update your list with new rows added to your data source. * *Replacement Sensitive* lets you replace a part of the term, a complete term within a string as the Replacement rule box, or the entire string as the Taxonomy Mapping rule box. Set up the Attribute-based Replacement list [#set-up-the-attribute-based-replacement-list] Go to **Lists** from your site's main menu and select **ADD LIST**. UUID-0e567193-a727-f5e9-888a-2d587028dae1 Choose **Attribute-based Replacement** and select **Continue**. UUID-038aae7c-050a-2a5b-efdd-424f890bec06 In **Name**, give your replacement list a custom name. In **Stage**, choose the stage that contains the attribute where you want to replace values. In **Attribute**, select an attribute. Optionally, toggle on the **Share list** button and choose one of the following: * **Account level** shares this list with all sites across all projects under this organization. * **Project level** shares this list with all sites under this project. Select **Add**. Enter replacement terms in the **Replace term** column opposite each pre-populated attribute's term. UUID-c341f1bd-b4db-fc02-3ad8-63ceb0fa6281 Select **Import** in the top-right corner of your site's view. Add the Taxonomy Mapping rule box [#add-the-taxonomy-mapping-rule-box] To apply your Attribute-based Replacement list to your feed: Go to **Data View** and select the intermediate or export stage from the drop-down menu in the top ribbon. Select **Edit** for the attribute where you want to replace terms. Select the **Add Box** drop-down menu. Search for and select the *Taxonomy Mapping* rule box. UUID-88d3262c-b4a9-dae1-04ed-beb79ec0787f Choose a necessary replacement list from the **List** drop-down menu. In **Case Sensitivity**, choose **Match Sensitive** to let the platform perform a case-sensitive search in the values of the selected attribute. Select **Match Insensitive** to let the platform ignore the case of the strings. In **On No Match**, choose the behavior for the values that don't match with the values in the *Search* field on the list: * **set to empty string** leaves the cell empty if there is no match. * **set original value** doesn't replace the cell value if there is no match. Select **Save**. If you want to update your list with new rows added to your data source, select **Run** in the upper-right corner of your view. Add the Taxonomy Mapping rule box [#add-the-taxonomy-mapping-rule-box-1] Go to **Data View** from your site's main menu and select Intermediate or a needed export from the drop-down menu on the left side of the upper ribbon. Select **Edit** for the needed attribute. Select the **Select an Option** drop-down menu, search for and select the **Taxonomy Mapping** rule box. Take steps from [Use lists](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/use-lists#section-idm234390016150987). (optional) Add the Replacement rule box [#optional-add-the-replacement-rule-box] As an alternative to the Taxonomy Mapping rule box, you can apply replacement with the *Replacement* rule box. This rule box affects parts of the string that match your replacement terms. Go to **Data View** from your site's main menu and select Intermediate or a needed export from the drop-down menu on the left side of the upper ribbon. Select **Edit** for the needed attribute. Select the **Select an Option** drop-down menu, search for and select the **Replacement** rule box. Take steps from [Use lists](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/use-lists#section-idm234389788424418). (optional) Add the Replacement Sensitive rule box [#optional-add-the-replacement-sensitive-rule-box] As an alternative to the Taxonomy Mapping rule box, you can apply replacement with the *Replacement Sensitive* rule box. Go to **Data View** from your site's main menu and select Intermediate or a needed export from the drop-down menu on the left side of the upper ribbon. Select **Edit** for the needed attribute. Select the **Select an Option** drop-down menu, search for and select the **Replacement Sensitive** rule box. Take steps from [Use lists](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/use-lists#section-idm234389854406382). # Replace attributes with Partner Taxonomy Mapping list import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Partner Taxonomy Mapping, formerly known as Category Mapping, lets you create a list of all values included in a selected import or intermediate attribute and replace them with categories from a partner's taxonomy. For some export channels, you can match shop categories with a channel partner taxonomy. In some cases, it is mandatory, for example, with Google Merchant Center (GMC). Matching a partner taxonomy ensures that your product categorizations are correct in export channels. Here is an example of a [Google product taxonomy](http://www.google.com/basepages/producttype/taxonomy.en-US.txt). If you are missing a taxonomy, or want to add one for your organization only, contact [support@productsup.com](mailto:support@productsup.com). When you create a Partner Taxonomy Mapping list, you map your current category values to the pre-defined partner taxonomies that should later replace your current category values. To let your list replace the desired category values in your feed, you must add the *Taxonomy Mapping* rule box to your category-related attribute in Data View or Dataflow. See [Add the Taxonomy Mapping box to the list](#section-idm13275888371482) for more information. Set up a Partner Taxonomy Mapping list [#set-up-a-partner-taxonomy-mapping-list] Go to **Lists** from your site's main menu and select **ADD LIST**. UUID-9281947d-c6cf-5007-53d3-db0023db5d1f Next, choose **Partner Taxonomy Mapping** and select **Continue**. UUID-97ed9356-5ba0-634a-3edb-e34711f23e0b In **Name**, give your Mapping List a custom name to help you identify it. You can later edit the custom name. In **Taxonomy**, select the field and begin entering a channel partner name from the auto-complete list. Next, in **Stage**, choose the **Import** or **Intermediate** stage to replace values with partner taxonomy categories. In **Attribute**, select the field and enter attributes from an auto-complete list of pre-defined values from your selected import or intermediate column. The platform later populates the list with the values of this attribute to let you choose and map the needed category values. (Optional) Toggle on the **Share list** button and choose one of the following: 1. **Account level** - Share this list with all sites across all projects under this organization. 2. **Project level** - Share this list with all sites under this project. If you share the list at the organization or project level, the platform updates the list during an import from the original site where you created the list. Select **Add**. UUID-0a619541-9393-5aee-a687-b8f008e714a2 Add terms to the list [#add-terms-to-the-list] In the Productsup platform, there are several taxonomies for various partners. But if you do not see a partner's taxonomy that you need, contact [support@productsup.com](mailto:support@productsup.com). If you select a column in the *Intermediate* stage, clean up your category path before using the Partner Taxonomy Mapping list. Remove consecutive white spaces, broken encoding, unnecessary sub-categories, or add more variety if your categories are too general. When you add a new list, the platform opens it and only once populates it with the values of the selected attribute. If you add new values to this attribute in your data source and run your site, the platform doesn't update the list with new values. You must use the *Taxonomy Mapping* rule box to apply your list to the attribute containing the new values, which lets the platform update your list. See [Add the Taxonomy Mapping box to the list](#section-idm13275888371482) for the setup information. Search and filter [#search-and-filter] If you search for a value, only the terms and categories that match your search appear, not partner taxonomies. * **All** - Shows all terms and categories. * **Mapped** - Displays all terms that have a connection to a partner taxonomy category. * **Unmapped** - Displays terms that do not have a connection to a partner taxonomy category. * **Outdated** - Displays all outdated categories that do not match a partner taxonomy category. For example, if a partner taxonomy changes, your term loses a connection to the partner taxonomy and shows as `Outdated`. UUID-a3d453d6-d72b-15b6-3578-8529be961e1f Match categories [#match-categories] Enter your category under the **Replace Term** column. Choose the correct category from the auto-complete list that appears. The language displaying auto-complete results depends on your partner taxonomy's region or the country you define in your profile settings. UUID-0627c474-8655-7276-1307-56aed7bda1d4 * For Google Merchant Center, always use *USA* or *UK* for any country feed. The feed language does not matter, as Google accepts attribute names and Google product categories in English. * Always be specific with the category structure. The relevance of your product increases if your feed is high-quality. * If you do not know how to match one of your categories, for example, `Outlet`, or `Sale`, try entering a generic category. Use a generic category rather than leaving the **Replace Term** input field empty. UUID-2926fd10-9426-c922-8a5c-807a60f79427 Add the Taxonomy Mapping box to the list [#add-the-taxonomy-mapping-box-to-the-list] Once you have finished setting up your mapping list, apply the *Taxonomy Mapping* rule box to the attribute that should contain your new partner categories. Go to **Data View** from your site's main menu and select the **Edit** button for the column you want to edit. In the edit view, search for and add the *Taxonomy Mapping* rule box for the column. Now, choose your desired Partner Taxonomy Mapping list from the drop-down menu. UUID-5f342ca0-5876-757c-9251-f80151a1d7f9 The **On No match** option lets you choose the matching behavior where values are not in the *Search* field on the list. If the box cannot find the value in the list, you can choose between **set to empty string**, which leaves the cell open, or **set original value** not to replace the cell value. Select **Save**. The Taxonomy Mapping rule box now matches your newly-entered replacement terms found in the Partner Taxonomy Mapping list.For example, the Taxonomy Mapping rule box modified the `google_product_category` column by replacing the original values with the matching `category` term from the *Intermediate* stage that was defined from the list: UUID-202330a0-31f3-f8e4-7394-04c02f54ee84 If you want to update your list with new rows added to your data source, select **Run** in the upper-right corner of your view. # Exclude products with the Standard Inclusion/Exclusion list import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Standard Inclusion/Exclusion list feature, formerly known as the Default List, lets you specify products in your data feed that you want to include or exclude from your export. It's a list containing terms that the Productsup platform accepts or skips when it matches your previously specified words. It works similar to the *Skip Row if Value In box* rule box, but you can share the list with other sites. And when you modify your data feed, the platform automatically updates the list. You exclude particular products from feeds by using a list of values, including product IDs. For example, In Germany, food manufacturers face restrictions on which ingredients they can add to their products. To exclude products that contain prohibited ingredients, you can use the Standard Inclusion/Exclusion list. With the Standard Inclusion/Exclusion list, you manually enter all the values used for exclusion. With the Dynamic Inclusion/Exclusion list, you can upload or import a list source file in CSV format via URL containing the values. This document contains instructions on setting up a Standard Inclusion/Exclusion list to exclude products from your feed data. Set up the Standard Inclusion/Exclusion list [#set-up-the-standard-inclusionexclusion-list] Go to **Lists** from your site's main menu and select **ADD LIST**. UUID-9281947d-c6cf-5007-53d3-db0023db5d1f Next, choose **Standard Inclusion/Exclusion** and select **Continue**. UUID-580b9ce3-4d1b-8ef0-93d2-bda1eb08c132 In **Name**, give your Inclusion/Exclusion List a custom name to help you identify it. You can later edit the custom name. (Optional) Toggle on the **Share list** button and select one of the following: 1. **Account level** - Share this list with all sites across all projects under this organization. 2. **Project level** - Share this list with all sites under this project. If you share the list at the organization or project level, the platform updates the list during an import from the original site where you created the list. Select **Add**. Add values to the Standard Inclusion/Exclusion list [#add-values-to-the-standard-inclusionexclusion-list] After creating your Standard Inclusion/Exclusion list, see the following to add values: Within your newly-created list, enter a value you want to use for excluding a product in **Search**. Select **Add** to save your value. Repeat this step as necessary to continue adding values to your Standard Inclusion/Exclusion list. If you make changes to the source file, perform an import to update the list. UUID-374da2f6-ddda-7d1b-6ba7-405cf2b376b2 Add the Blacklist rule box to exclude products [#add-the-blacklist-rule-box-to-exclude-products] Go to **Data View** from your site's main menu and select Intermediate or a needed export from the drop-down menu on the left side of the upper ribbon. Select **Edit** for the needed attribute. Select the **Select an Option** drop-down menu, search for and select the **Blacklist** rule box. Take steps from [Include or exclude products](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/include-or-exclude-products#section-idm234386428036993). If the terms from your blacklist appear for any item, the blacklist prevents the item(s) from being exported. In **Data View**, skipped items appear in light-pink. When you hover over them, you can see a message explaining why the blacklist excluded items. # Replace feed terms with the Dynamic Replacement list import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Dynamic Replacement list feature lets you create an extensive list of terms to update them dynamically via a CSV file or URL. See [Replace feed terms with the Standard Replacement list](/docs/help-center/map-and-optimize-your-data/lists/replace-feed-terms-with-the-standard-replacement-list) for an alternative list type that may work for your use case. Set up the Dynamic Replacement list [#set-up-the-dynamic-replacement-list] Go to **Lists** from your site's main menu and select **ADD LIST**. UUID-0e567193-a727-f5e9-888a-2d587028dae1 Next, choose **Dynamic Replacement** and select **Continue**. UUID-65cbfe4a-b5b1-88c1-3371-5dcd3cf1b145 In **Name**, give your replacement list a custom name. Choose the way of adding the terms between two (2) options. Option 1 - Upload a source file [#option-1---upload-a-source-file] Create a CSV file with a header and the following structure: UUID-0f4454ec-3b96-7b19-337b-b6d44eeaaac4 The CSV file must contain a header since the platform skips the first row. Drag your CSV list file to the **Drag and drop a CSV file** field, or select **Browse** to upload the file. UUID-d9edb8d3-4d16-e03b-1c3e-3004b9c8e8c4 Select **Add** at the bottom of the page. Option 2 - Add the source URL [#option-2---add-the-source-url] Enter a source file URL in **Source URL**. To add a Google Sheets source file, see [Add a list source file via Google Sheets](#section-idm13275539149792) and return to this section, step [2](#N1637836593972). Enter credentials in **Username** and **Password** to access the source file. In **Delimiter**, choose a delimiter. The platform selects the `tab (\t)` by default. If you use a Google Sheet as a list source file, choose comma (`,`) as a delimiter. Optionally, in **Encoding**, add the encoding if it isn't UTF-8. Optionally, in **Enclosure**, choose a desired enclosure, for example, ( `‘’` or `““` or `||` ). UUID-6abde0ea-4f1a-0230-8bf3-3abda1c1b03b Select **Add**. Toggle on **Reset list on every import** to remove all previous data from the feed after each new import. * When the feature is active, the platform resets the list every run deleting all values and then re-importing them into the list. * When the feature is inactivate, the platform re-imports the list, adding only new items and ignoring changed or deleted items. To share the list at the organization or project levels, toggle on **Share list** and select: * **Account level** shares this list with all sites across all projects under this organization. * **Project level** share this list with all sites under this project. If you share the list at the organization or project level, the platform updates the list during an import from the original site where you created the list. Once the platform uploads your CSV file, the list of defined values appears in the **Replace term** column. Whenever you change the source CSV file, select **Import** to update the list. Add a list source file via Google Sheets [#add-a-list-source-file-via-google-sheets] To add a list file in Google Sheets, you must modify the URL that leads to your list as follows: In the URL, replace the text `edit` with:`export?format=csv`If `#gid` exists in the spreadsheet URL, replace it with:`&gid`The modified link should look similar to the following example:`https://docs.google.com/spreadsheets/d/{key}/export?format=csv&gid={gid}` * In this example, `{key}` and `{gid}` are placeholders. Make the Google Sheets URL accessible to everyone. Productsup can only import publicly accessible sheets. *Viewer* mode is enough. * Test the URL by opening it in a browser. If you set it up correctly, once you hit enter, a CSV download begins. Continue the setup in [Option 2 - Add the source URL](#section-idm4566614272096032755689465517). Add the Replacement rule box [#add-the-replacement-rule-box] To apply your Dynamic Replacement list to your feed, add the **Replacement** rule box to your feed attributes in **Data View**. Go to **Data View** from your site's main menu and select Intermediate or a needed export from the drop-down menu on the left side of the upper ribbon. Select **Edit** for the needed attribute. Select the **Select an Option** drop-down menu, search for and select the **Replacement** rule box. Take steps from [Use lists](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/use-lists#section-idm234389788424418). (optional) Add the Replacement Sensitive rule box [#optional-add-the-replacement-sensitive-rule-box] As an alternative to the Replacement rule box, you can apply replacement with the **Replacement Sensitive** rule box. Go to **Data View** from your site's main menu and select Intermediate or a needed export from the drop-down menu on the left side of the upper ribbon. Select **Edit** for the needed attribute. Select the **Select an Option** drop-down menu, search for and select the **Replacement Sensitive** rule box. Take steps from [Use lists](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/use-lists#section-idm234389854406382). # Set up the Classification Mapping list import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The *Classification Mapping* list, formerly known as *Classification List*, lets you create a list of all included values in a selected import or intermediate attribute and replace them with categories from a classification system. For example, manufacturers in the electrical, heating and ventilation, and building and construction industries often need to provide product data to trade and industry partners. These products follow an international classification standard, which structures product information by class. Productsup supports the ETIM classification standard for trade and industry partners. See [Set up ETIM Classes exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-etim-classes-exports) for more information. When you create a Classification Mapping list, you map your current category values to the pre-defined classification values that should later replace your category values. To let your list replace the desired category values in your feed, you must add the *Classification Mapping* rule box to your category-related attribute in Data View or Dataflow. See [Add the Classification Mapping rule box](#section-idm4578153493729633386215800816) for more information. Add the Classification Mapping list [#add-the-classification-mapping-list] Go to **Lists** from your site's main menu and select **ADD LIST**. UUID-9281947d-c6cf-5007-53d3-db0023db5d1f Next, choose **Classification Mapping** and select **Continue**. UUID-258fdb18-ae41-9a77-c350-e599086b00ae In **Name**, give your Mapping List a custom name to help you identify it. You can later edit the custom name. In **Classification**, choose the classification system to map from the auto-complete list. Next, in **Stage**, choose the **Import** or **Intermediate** stage to replace values with partner taxonomy categories. In **Attribute**, select the field and enter attributes from an auto-complete list of pre-defined values from your selected import or intermediate column. (Optional) Toggle on the **Share list** button and choose one of the following: 1. **Account level** - Share this list with all sites across all projects under this organization. 2. **Project level** - Share this list with all sites under this project. If you share the list at the organization or project level, the platform updates the list during an import from the original site where you created the list. Select **Add**. UUID-dc1236ba-fac8-d468-7d56-33c2d957d774 Match categories to classifications [#match-categories-to-classifications] In the Classification Mapping list view, a list of values appears under the **category** column that you selected as a source. Under the **Replace Term** column in the empty fields, as you begin typing, available classifications appear. As necessary, select the relevant classifications per category. Continue with each field to assign a classification to all product categories. UUID-36b78b32-195e-7c5e-4b35-f351e6f927ac You have now mapped your product categories with a classification. Add the Classification Mapping rule box [#add-the-classification-mapping-rule-box] To apply your list to the values in your category-related attribute and let the platform replace your current category values with classification data, add the *Classification Mapping* rule box: Go to **Data View** from your site's main menu and select Intermediate or a needed export from the drop-down menu on the left side of the upper ribbon. Select **Edit** for the needed attribute. Select the **Select an Option** drop-down menu, search for and select the **Classification Mapping** rule box. Take steps from [Use lists](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/use-lists#section-idm234390064730298). # Whitelist feature import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] In Productsup, you can whitelist certain values to make sure that the platform exports products containing these values even if the settings of other rule boxes require that the platform skip these products during export. Combining whitelist rule boxes with blacklist and skip rule boxes can let you set up an intricate system of product filtering. The priority of whitelist rule boxes is higher than that of blacklist, skip, and ROI rule boxes. For example, if both a whitelist and a blacklist rule box have a priority of `10`, the whitelist rule box takes priority. In Productsup, there are 2 ways to whitelist specific terms within product values: . Using **Whitelist Row If Value In** and **Whitelist Row If Value Not In** rule boxes for a smaller list of whitelisting values. . Using Standard or Dynamic Inclusion/Exclusion lists and the **Whitelist** rule box for a larger list of whitelisting values. Add small list of terms to whitelist [#add-small-list-of-terms-to-whitelist] If you have a list of 25-30 terms to whitelist, you can use these rule boxes: * **Whitelist Row If Value In** lets the platform export products containing the terms you specify in this rule box. * **Whitelist Row If Value Not In** lets the platform export products that don't contain the terms you specify in this rule box. Using these rule boxes for bigger lists of terms can significantly increase your site's processing times. See [Include or exclude products](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/include-or-exclude-products) to learn to set up the rule boxes *Whitelist Row If Value In* and *Whitelist Row If Value Not In*. Add large list of terms to whitelist [#add-large-list-of-terms-to-whitelist] If you have a list of over 25-30 terms to whitelist, you need to use a combination of lists and the whitelist rule box. To whitelist the product rows this way, take the following steps: Create a list. See [Lists](/docs/help-center/map-and-optimize-your-data/lists) to choose the needed list type. You have the following options: * Standard Inclusion/Exclusion list. See [Set up the Standard Inclusion/Exclusion list](#section-idm203279144580894). * Dynamic Inclusion/Exclusion list. See [Set up a Dynamic Inclusion/Exclusion list](#section-idm203279145221726). Add the `Whitelist` rule box and choose a created list in it. See [Include or exclude products](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/include-or-exclude-products#section-idm353438659857462). Set up the Standard Inclusion/Exclusion list [#set-up-the-standard-inclusionexclusion-list] Go to **Lists** from your site's main menu and select **ADD LIST**. UUID-9281947d-c6cf-5007-53d3-db0023db5d1f Next, choose **Standard Inclusion/Exclusion** and select **Continue**. UUID-580b9ce3-4d1b-8ef0-93d2-bda1eb08c132 In **Name**, give your Inclusion/Exclusion List a custom name to help you identify it. You can later edit the custom name. (Optional) Toggle on the **Share list** button and select one of the following: 1. **Account level** shares this list with all sites across all projects under this organization. 2. **Project level** shares this list with all sites under this project. If you share the list at the organization or project level, the platform updates the list during an import from the original site where you created the list. Select **Add**. Add values to the Standard Inclusion/Exclusion list [#add-values-to-the-standard-inclusionexclusion-list] . Within your newly-created list, enter a value you want to use for excluding a product in **Search**. Select **Add** to save your value. Repeat this step, as necessary, to continue adding values to your Standard Inclusion/Exclusion list. . If you make changes to the source file, perform an import to update the list. UUID-374da2f6-ddda-7d1b-6ba7-405cf2b376b2 Set up a Dynamic Inclusion/Exclusion list [#set-up-a-dynamic-inclusionexclusion-list] Go to **Lists** from your site's main menu and select **ADD LIST**. UUID-9281947d-c6cf-5007-53d3-db0023db5d1f Next, choose **Dynamic Inclusion/Exclusion** and select **Continue**. UUID-5a92dc01-ed77-b6d3-be45-0656574c5f26 In **Name**, give your Inclusion/Exclusion List a custom name to help you identify it. You can later edit the custom name. Option 1 - Upload a list source file in CSV format [#option-1---upload-a-list-source-file-in-csv-format] Create a CSV file containing a header since the platform skips the first row. Use a structure similar to the following: UUID-10e4f067-f031-02c5-9f2b-a16c16bb182b Next, move your CSV list file to the **Drag and drop your CSV file** field or select **Browse** to upload the file. Select **Add**. A message appears stating that the download is in progress. Once your CSV file completes uploading, you can see your list of defined values under the column **Term**. If you make changes to the source file, perform an import to update the list. Select **Add**. A message appears stating that the download is in progress. Once your CSV file completes uploading, you can see your list of defined values under the column **Term**. If you make changes to the source file, perform an import to update the list. Option 2 - Upload a list source file via a URL [#option-2---upload-a-list-source-file-via-a-url] Enter a source file URL in **Source URL**. To add a Google Sheets list source file, see [Add a list source file via Google Sheets](#section-idm203279977032570) and return to this section, step [2](#listitem-idm206558290443458). As necessary, enter credentials in **Username** and **Password** to access the source file. In **Delimiter**, choose the delimiter. The platform selects the `tab (\t)` as the default. If you use a Google Sheet as a list source file, choose comma (`,`) as a delimiter. (Optional) In **Encoding**, declare the encoding if it is not UTF-8. (Optional) In **Enclosure**, choose your desired enclosure, for example, ( `‘’` or `““` or `||` ). Toggle on **Reset list on every import** to remove all data whenever there is an import. * When the feature is active, the platform resets the list every run deleting all values and then re-importing them into the list. * When the feature is inactivate, the platform re-imports the list, adding only new items and ignoring changed or deleted items. (Optional) Toggle on the **Share list** button and select one of the following: 1. **Account level** shares this list with all sites across all projects under this organization. 2. **Project level** shares this list with all sites under this project. If you share the list at the organization or project level, the platform updates the list during an import from the original site where you created the list. Select **Add**. A message appears stating that the download is in progress. Once your CSV file completes uploading, you can see your list of defined values under the column **Term**. If you make changes to the source file, perform an import to update the list. UUID-cf3b58c1-9c0a-ab7c-ef2d-85930238d856 Add a list source file via Google Sheets [#add-a-list-source-file-via-google-sheets] To add a list file in Google Sheets, you must first modify the URL that leads to your list. In the URL, replace the text `edit` with:`export?format=csv`If `#gid` exists in the spreadsheet URL, replace it with:`&gid`The modified link should look similar to the following example:`https://docs.google.com/spreadsheets/d/{key}/export?format=csv&gid={gid}` * In this example, `{key}` and `{gid}` are placeholders. Make sure the Google Sheets URL is accessible to everyone. *Read-only* is sufficient. Otherwise, the Productsup platform can't download the Google Sheets file. * Test the URL by opening it in a browser. If you set it up correctly, once you hit enter, a CSV download begins. Now continue with the setup in step [2](#listitem-idm206558290443458). Add the Whitelist rule box [#add-the-whitelist-rule-box] After creating an Inclusion/Exclusion list, you can add Whitelist rule boxes to your data flow. See [Include or exclude products](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/include-or-exclude-products#section-idm353438659857462) to learn to add the Whitelist rule box. Platform-generated attributes for whitelisted products [#platform-generated-attributes-for-whitelisted-products] This section explains platform-generated attributes related to whitelisted products. See the definition of *platform-generated attributes* in [Glossary](/docs/help-center/glossary#para-idm243436063772778). When you add an export in a new site, the platform automatically adds the following attributes: * `___skipped_intermediate` and `___whitelist_intermediate` at the intermediate stage. * `___skipped_intermediate`, `___whitelist_intermediate`, `___skipped_export`, and `___whitelist_export` at the export stage. When you add a whitelist rule box, the platform locates the corresponding `___whitelist_{stage}` attribute at the intermediate and export stages to add information about the whitelist rule box that stops the platform from skipping the product during export. For example, if you add a rule box at the intermediate stage to whitelist all shoes and purses during export, the platform adds the rule box priority and the attribute name where you applied the whitelist rule box in `___whitelist_intermediate` at the intermediate and export stages to all whitelisted shoes and purses in your feed. If a product doesn't have a value in `___whitelist_{stage}`, no rule boxes stop the platform from skipping this product during export at the given stage. When you add a whitelist rule box, Data View doesn't immediately display new values in the corresponding `___whitelist_{stage}` attributes. To see these values, you need to run your site by selecting **Run** in the top-right corner of the site. In most cases, you don't need to use these attributes as they serve a purely technical function. But you can check their values to find out more about your whitelisted products. See [Include or exclude products](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/include-or-exclude-products#section-idm2465176963221348) for more information on `___skipped_{stage}` attributes. # How to configure your YouTube.com export This article will show all the necessary steps to successfully *upload your data feed to YouTube.com* in order to publish your product videos there and *import the Analytics data from YouTube* back into your Productsup site. Upload your feed to YouTube.com [#upload-your-feed-to-youtubecom] To successfully export your data to YouTube.com the following steps are required: 1. Create a YouTube account [#1-create-a-youtube-account] Go to YouTube.com and click on the top right on *Sign In*. Click on *Create Account*. 2. Add YouTube authentication in Productsup [#2-add-youtube-authentication-in-productsup] Please see [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems) for more information about that. UUID-56645192-e66c-41a5-18eb-053c86c1d97e 3. Add YouTube export and fill in all required information for the destination [#3-add-youtube-export-and-fill-in-all-required-information-for-the-destination] The next step is to add *YouTube* as a channel. Open the *Exports* tab and click on *Add Export* in the top navigation. Add the *YouTube* channel to your site and choose a custom name if needed. UUID-bbfb3a9a-592c-c709-dd57-5441bbd47be5 Click on *Setup* for the *YouTube* export. UUID-0c219f6e-0b2e-62cf-cfec-60c9b6c7b6ed Click on *Add Destination* and choose the *YouTube API* from the list as the destination. UUID-9cfed5e5-ec7d-0e8e-9e76-6fa33c196f14 UUID-7f93a147-4bd2-d971-7204-7da941a6bbc7 In the destination settings it is necessary to use the correct authentication for the *YouTube Channel* that you have created *in the second step*. You can select for which video category the video feed is used. UUID-7d46658b-c74b-e515-522a-6dd2ebfec1f5 *Important:* When uploading the videos via the YouTube API a tag with the video ID is added to synchronize the YouTube ID with the Productsup internal video ID. This requires no setup from your side but happens automatically during the upload. With this method we make sure that videos get *updated* and are not uploaded again as duplicates. Productsup will only update or delete videos that have this tag. Please make sure to never delete this tag within the YouTube interface. Populate the Export attributes in Dataflow [#populate-the-export-attributes-in-dataflow] * *location*: This attribute contains the URL to the video you want to upload * *description*: Add the description of your text or relevant marketing copy you want to display on YouTube * *title*: Create a title for your YouTube video within this attribute Import the YouTube Analytics data into your Productsup organization [#import-the-youtube-analytics-data-into-your-productsup-organization] To import your YouTube.com metrics into Productsup first click on *Add Data Source* in the *Data Sources* menu. Search for *YouTube Analytics - Fetch* and select it as a data source type. Fill in all the required information. UUID-aef650d9-fec0-62da-9f0e-0ca63723fb5f *Authentication:* Select the authentication that grants access to your YouTube account. *Channel:* Enter the ID of the channel you want to import data from. *Metrics:* Enter all the KPIs you want to import into the platform in this input field. *Start Date/End Date:* The time range of your analytics data. Click on *Save* and on *Import* at the top of the page in the *Data Sources* tab to manually import your data or the feed will be imported with the next [scheduled import](/docs/help-center/import-data-feeds/import-your-data-into-productsup-advanced-settings/import-dynamic-urls). # How to configure your FNAC API Stock Price Export The "FNAC API Stock & Price Export" export enables you to send stock and price updates for products which are already listed on FNAC. It can *not* be utilised to list new products. This export requires the following mandatory attributes: * price * product\_reference * offer\_reference * product\_state Please make sure to populate each one of these mandatory attributes with values. Offers that are missing any of these attributes will *not* be sent to FNAC. Setup [#setup] In *Exports*, add the "FNAC API Stock & Price" export. Within the export setup, select "Fnac API" as the destination and fill out the fields (see screenshot and below description). UUID-4804643f-dbb5-5650-8d0d-0d1764ff26a0 *API Key:* API Key provided by Fnac. *Shop Id:* Your Fnac Shop Id. *Partner Id:* Fnac Partner Id provided by Productsup. *Active:* Switch to "On" to activate this destination. # How to configure your Salesforce Commerce Cloud Export Productsup offers a selection of exports to push data to the Salesforce Commerce Cloud. Overview of the Salesforce Commerce Cloud Exports [#overview-of-the-salesforce-commerce-cloud-exports] * Salesforce Commerce Cloud B2C: List Prices * Salesforce Commerce Cloud B2C: Sales Prices * Salesforce Commerce Cloud B2C: Inventory * Salesforce Commerce Cloud B2C: Metadata * Salesforce Commerce Cloud B2C: Inventory (Delta) * Salesforce Commerce Cloud B2C: Catalog - Category Assignment * Salesforce Commerce Cloud B2C: Master Catalog * Salesforce Commerce Cloud B2C: Master Catalog - Product Attribute Definitions * Salesforce Commerce Cloud B2C: Master Catalog - Product Options * Salesforce Commerce Cloud B2C: Master Catalog - Variation Attributes * Salesforce Commerce Cloud B2C: Master Catalog - Recommendations Setup Salesforce Commerce Cloud [#setup-salesforce-commerce-cloud] Depending on what should be updated within the Salesforce Commerce Cloud, one or more exports can be selected. We recommend to use specific sites for specific exports, to guarantee clean export data. The Master Catalog exports only work in combination with the Main Master Catalog export. # How to configure your Sailthru API export *Sailthru* is the complete, unified and integrated marketing solution: the platform of choice for today’s modern marketer. Just add the Sailthru Export and map all the neccessary columns in the *Dataflow*. sailthrudataflow Select the Sailthru API destination to upload the data to Sailthru. Just enter your API key and API secret and save. sailthruapiui # How to configure your ebay export This article will show all the necessary steps to successfully upload your data feed to the eBay Marketplace. To successfully export your data to the eBay Marketplace, the following steps are required: * Create an eBay account * Add eBay authentication * Add eBay Marketplace export You can *create an eBay account* following this [link](https://reg.ebay.com/reg/PartialReg?siteid=0\&UsingSSL=1). The second step is to add the authentication for *ebay*. To get more information on how to set up authentication, see [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems). UUID-db2f2975-ce50-dc15-f11f-5b34b85777f6 The next step is to add *eBay Marketplace* as a channel. Open Export A/B and click on "Add Export" in the top navigation. Add the "eBay Marketplace" channel to your site and choose a custom name if needed. UUID-ab118319-579a-30bc-fded-7cbcfe93a00f In the channel setup you need to choose *eBay Marketplace* as the destination and choose the authentication you created in the step before. UUID-caca10c4-0d81-451c-84e6-935c5024a3bf After the channel destination setup is done you can optimize your feed in the Dataflow. *Important:* The eBay Marketplace export is in the way that eBay has strict regulations about the data. * All products need to have a valid eBay category assigned. You can accomplish this by setting up a list as described in [Replace attributes with Partner Taxonomy Mapping list](/docs/help-center/map-and-optimize-your-data/lists/replace-attributes-with-partner-taxonomy-mapping-list) following the eBay taxonomy in the language you are advertising in. * You have an *initial upload limit* which will be increased over the time depending on successful sales and positive ratings. * This limit is based on the number of "in stock" items you send there. This means sending *stock information is critical* and you may want to play around with your stock figures in order to get as many different products as possible live. *Example:* If your feed has 20.000 products, you can send them all if you give each a stock count of "1". If you give them a stock count of "2", you will only be able to push half the amount of products there, etc. # How to configure your Facebook Dynamic Ads Video export You can use the Facebook Dynamic Ads Video export to export your ads with video content to Facebook. The mandatory columns are ID and video\_link, title can be provided optionally if desired. In the channel setup click on *Add destination* and choose *Facebook Marketing API: Product Ads Video*. videoads Please choose your Facebook authentication. If you haven't created one already, you can find more information on how to create one in [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems). After choosing your authentication, fill in the necessary information to send your videos to the right catalog. # How to configure your Google Product Ratings Export *Google Product Ratings Export*enables you to upload product ratings from your own shopping system and 3rd party sources to the Google Merchant Center. Map the columns you want to export in your Google Ratings channel in your Dataflow and then export it to an FTP or the Productsup Server. Afterwards you can add this export with your product ratings to the Google Merchant Center. Image The following columns are mandatory: - reviewer\_name - review\_url - product\_url - ratings\_overall\_min - rating\_overall\_max - ratings\_overall\_average It is highly recommended to provide the GTIN columns, despite it not being mandatory. It is used by Google to match the ratings with the products: *"The reviews data from a Product Ratings feed is matched to products based on a number of factors, the strongest being globally unique product identifiers such as GTINs. Without GTIN data, Google will attempt to match a review through other metadata information such as SKU, Brand + MPN pairs and product URLs, though these identifiers generally do not offer a good match. In short, without GTINs, matching issues may occur. What this means is that you may not see star ratings appear alongside the products your business offers."* If you can not provide a GTIN, make sure the information in the Google Ratings export correlates with the one in your Google Merchant Center feed, e.g. *sku* in the Google Ratings export needs to correlate with *id* in your Google Merchant Center feed. You can find more information on the preconditions to add your Ratings feed to the GMC [here.](https://support.google.com/merchants/answer/6059553?hl=en) # How to configure your Yotpo API export The Yotpo - Export Products export can be used to send product information to [Yotpo](https://www.yotpo.com/) Adding the Yotpo - Export Products export [#adding-the-yotpo---export-products-export] In the Exports section, filter for "Yotpo - Export Products" and click on the "Add" button for the Yotpo - Export Products export. UUID-f1cd4df3-e61d-5571-6b24-a2386fe5493f # How to configure your Google Manufacturer Center Export *Google Manufacturer Center* is a free tool that helps marketers in brand manufacturing firms leverage how their brand and products are presented on Google Shopping, Search and other Google Services. To get detailed information about the value *Google Manufacturer Center* adds for your brand, you can download our *Google Manufacturer Center Whitepaper*[here](http://productsup.io/download/14613/). By using the *Google Manufactuer Center Export* in *Productsup*, brand manufacturers can easily send feeds containing high quality information about their products to the *Google Manufacturer Center*. Else the Google Merchant Center Export, this will enrich your product data globally, and for all ads with all retailers selling your product. The export provides columns for various information you'd like to add to your brands products listed in the Google Merchant Center. Just map the columns you want to export to the Google Manufacturer Center in your *Dataflow* and make sure this information is also provided within your feed. UUID-8fa51061-e2eb-5981-757d-b3e03fec5a10 Add the feed to your *Google Manufacturer Center* by registering it in the UI. UUID-3fe7fe42-ea9b-b1d9-b2a9-db681d3c4ead Just provide a feed name, choose the upload method (manual or scheduled) and provide the feed location. You can choose to upload a test feed to review your data in the *Google Manufacturer Center* first. # How to configure your SAP PCM Export The SAP PCM Export let's the user export data to their SAP PCM, based on the classes created within the PCM. This guarantees a smooth integration with little manual work. Setup SAP PCM Export [#setup-sap-pcm-export] In the Exports section, click on "Add Export" and filter for "SAP". Click on "Add" in the tile that says "SAP PCM / PCH - Type Class Export". UUID-388edcf5-e410-842e-f2bf-1e278272a26f The option to rename the export will show. Click on "Add" to proceed. (Renaming is optional). After being forwarded to the channel setup, click on "Add Destination" and select the "SAP oData Integration (PCM / PCH)" destination. UUID-82aaf5c4-4bba-5bd8-2b4c-065a6b0c3f37 Enter Host and Authentication Token and click on "Check Credentials"."Catalogue Versions", "Type Classes" and "Languages" will be populated with the values found in the SAP PCM instance. UUID-3f05ac32-0213-14ea-84f3-14d1d2bdb4da The classes and languages that should be populated within the export can be selected by holding CMD (Mac)/CTRL(Windows) while clicking on them. Clicking on "Populate Export Attributes" will add all required attributes to the export. As a last step it is necessary to navigate to the Dataflow and connect the attributes to the respective Intermediate attribute. # How to configure your Meplato export How to configure your Meplato Export [#how-to-configure-your-meplato-export] This article will show you all the necessary steps to export your products to *Meplato*. 1. Create the Meplato Export [#1-create-the-meplato-export] Go to Exports and click on the Green *Add Export* Button in the top right corner. Choose the export *Meplato* and click on *Add*. Setup the Meplato Destination by clicking on the setup button of your export, clicking *Add Destination* and choosing *Meplato API* from the dropdown. After clicking *save* you will be forwarded to the API Setup. 2. Setup the Meplato API [#2-setup-the-meplato-api] Enter your API User and API Pass as login credentials and the API Key and API Pin to access the desired catalog. TITLE *Audit* * If you just want to push new products to *Meplato* set *Audit* to *false*. * If products that have been removed from your feed should also be removed from your *Meplato* catalog, set *Audit* to *true*. *Publish* * There are three settings for the *Publish* option: true, false and only. * If you want your products to be published directly, set the option to *true*. * To have them uploaded to *Meplato* without publishing them, set this option to *false*. * When you have uploaded them without publishing and want to manually publish them later on, you can set this option to only. # Rule box category Edit URL import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The category *Edit URL* contains all rule boxes that can help you edit your URLs. For example, you can change link parameters, add URL fragments, shorten, decode, and encode URLs. You can also skip products if their current value isn't a URL. UUID-800257c3-c1b7-f184-9009-11e77f23b35e You can use the following rule boxes to edit URLs: * [Add / Change Link Parameter](#N1718896008483) * [Add Column URL-Encoded](#section-idm232220894009974) * [Add URL Fragment](#N1718896300299) * [Get Filename from URL](#section-idm232220891920447) * [Raw URL Encode](#N1718896325245) * [Shorten Url](#section-idm232220891591026) * [Skip Row If Isnt URL](#section-idm353437791032248) * [URL Decode](#section-idm4561648953363233182200477911) * [URL Encode](#N1718896405165) Add / Change Link Parameter [#add--change-link-parameter] URL parameters represent a key and a value separated by an equals sign (`=`) and joined to the rest of the URL by an ampersand (`&`) or a question mark (`?`). You can add or change URL parameters in bulk in Productsup. For example, if you need to deal with tracking parameters that pass information about clicking behavior. The **Add / Change Link Parameter** rule box lets you add a static parameter to all the URLs in one attribute. Alternatively, you can add individual dynamic parameters to your URLs from another attribute in your site. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add / Change Link Parameter** rule box. UUID-eb1e311e-16d8-8160-44b7-1375f12c7e11 Enter the name of your parameter in **Parameter Name**. If you want to add a static parameter value, enter it in **Value**. If you want to add a dynamic parameter value, choose the attribute that contains your dynamic parameter values in the **Column** drop-down menu. Select **Save**. For example, you have the following values in the **URL** attribute and want to add the *utm\_campaign* parameter with the value *winter\_sale* to all links that don't have it yet. If a link contains that URL parameter already, you want to ensure its value is *winter\_sale*. You can achieve this with the following setup of the **Add / Change Link Parameter** rule box: UUID-c18d3124-c44a-bdd4-f87b-14bb381871f9 | **URL** (before) | **URL** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | *[https://www.amazon.com/Fluffy-Pajama-Pants-Green/dp/G00PJSF1UF](https://www.amazon.com/Fluffy-Pajama-Pants-Green/dp/G00PJSF1UF)* | `https://www.amazon.com/Fluffy-Pajama-Pants-Green/dp/G00PJSF1UF?utm_campaign=winter_sale` | | *[https://www.amazon.com/Warm-Wool-Socks-Red/dp/R00SCKS1WO?currency=EUR\&utm\_medium=product\_sync\&utm\_source=google\&utm\_campaign=search\_organic](https://www.amazon.com/Warm-Wool-Socks-Red/dp/R00SCKS1WO?currency=EUR\&utm_medium=product_sync\&utm_source=google\&utm_campaign=search_organic)* | `https://www.amazon.com/Warm-Wool-Socks-Red/dp/R00SCKS1WO?currency=EUR&utm_medium=product_sync&utm_source=google&utm_campaign=winter_sale` | Add Column URL-Encoded [#add-column-url-encoded] The **Add Column URL-Encoded** rule box encodes a URL from another attribute and adds this encoded version to your current attribute. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add Column URL-Encoded** rule box. UUID-3fb585be-5b45-f718-ef69-ac891176ee17 In the **Column** drop-down list, select an attribute with the link you wish to encode and add to the current attribute. In **Mode**, select where you want to add the URLs of the chosen attribute within the current values: 1. *append* adds the string at the end of the current value. 2. *prepend* adds the string at the beginning of the current value. Select **Save**. For example, you have the following values in the **images** attribute. Your export channel requires receiving all image links in one attribute and expects them to be encoded. You can achieve this with the **Add Column URL-Encoded** rule box by selecting the attribute containing the needed image links in **Column** and choosing *append* in **Mode**: | **images** (before) | **images** (after) | | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | *https%3A%2F%2Fwww\.your-store.com%2Fimages%2Fwhite-socks-1.jpg%E2%80%8B* | `https%3A%2F%2Fwww.your-store.com%2Fimages%2Fwhite-socks-1.jpg%E2%80%8Bhttps%3A%2F%2Fwww.your-store.com%2Fimages%2Fwhite-socks-2.jpg%E2%80%8B` | | *https%3A%2F%2Fwww\.your-store.com%2Fimages%2Fblack-socks-1.jpg%E2%80%8B* | `https%3A%2F%2Fwww.your-store.com%2Fimages%2Fblack-socks-1.jpg%E2%80%8Bhttps%3A%2F%2Fwww.your-store.com%2Fimages%2Fblack-socks-2.jpg%E2%80%8B` | To add multiple image links in this use case, you can apply multiple **Add Column URL-Encoded** rule boxes to the **images** attribute. Add URL Fragment [#add-url-fragment] A URL fragment is an internal page reference that appears at the end of a URL and begins with a hash character (`#`) followed by an identifier. It refers to a section within a web page. The **Add URL Fragment** rule box lets you add a static fragment at the end of all URLs in a current attribute: Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add URL Fragment** rule box. UUID-5ef7c610-a1e4-858f-26cd-dad16997d7f9 Enter a desired fragment in **Fragment (without #)**. Select **Save**. For example, you have the following values in the **URL** attribute and want to add the *#section-1* fragment to all links. You can achieve this with the **Add URL Fragment** rule box by entering `section-1` in **Fragment (without #)**: | **URL** (before) | **URL** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | *[https://www.amazon.com/Fluffy-Pajama-Pants-Green/dp/G00PJSF1UF](https://www.amazon.com/Fluffy-Pajama-Pants-Green/dp/G00PJSF1UF)* | `https://www.amazon.com/Fluffy-Pajama-Pants-Green/dp/G00PJSF1UF#section-1` | | *[https://www.amazon.com/Warm-Wool-Socks-Red/dp/R00SCKS1WO?currency=EUR\&utm\_medium=product\_sync\&utm\_source=google\&utm\_campaign=search\_organic](https://www.amazon.com/Warm-Wool-Socks-Red/dp/R00SCKS1WO?currency=EUR\&utm_medium=product_sync\&utm_source=google\&utm_campaign=search_organic)* | `https://www.amazon.com/Warm-Wool-Socks-Red/dp/R00SCKS1WO?currency=EUR&utm_medium=product_sync&utm_source=google&utm_campaign=search_organic#section-1` | Get Filename from URL [#get-filename-from-url] The **Get Filename from URL** rule box lets you extract a file name and extension from a URL. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Get Filename from URL** rule box. UUID-ba441741-2f4e-536b-7d61-15d351be0f45 Select **Save**. For example, you have the following values in the **file** attribute and want only the file name and extension to stay in the attribute. You can achieve this with the **Get Filename from URL** rule box: | **file** (before) | **file** (after) | | ------------------------------------------------------------------------------------------------ | ---------------- | | *[http://example.com/path/to/filename.csv](http://example.com/path/to/filename.csv)* | `filename.csv` | | *[http://website.org/import-files/file-name.xml](http://website.org/import-files/file-name.xml)* | `file-name.xml` | Raw URL Encode [#raw-url-encode] The **Raw URL Encode** rule box lets you encode raw URLs, which means changing space characters to `%20` and replacing all non-alphanumeric characters except for `-`, `_`, `.`, and `~` with a percent sign (`%`) followed by two hex digits. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Raw URL Encode** rule box. UUID-15e8b758-052b-4836-98d5-2bc8287635ce Select **Save**. For example, you have the following values in the **image\_link** attribute and want to encode them. If there are any spaces in the values, you want to change them to `%20`. You can achieve this with the **Raw URL Encode** rule box: | **image\_link** (before) | **image\_link** (after) | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | | *[https://www.your-store.com/images/white-socks-1?utm\_campaign=google\_play](https://www.your-store.com/images/white-socks-1?utm_campaign=google_play)\~* | `https%3A%2F%2Fwww.your-store.com%2Fimages%2Fwhite-socks-1%3Futm_campaign%3Dgoogle_play%E2%80%8B~` | | *[https://www.your-store.com/images/black-socks-1](https://www.your-store.com/images/black-socks-1)* There is a space at the end of the URL. | `https%3A%2F%2Fwww.your-store.com%2Fimages%2Fblack-socks-1%20` | | *[https://www.your-store.com/images/black-socks-2](https://www.your-store.com/images/black-socks-2)* | `https%3A%2F%2Fwww.your-store.com%2Fimages%2Fblack-socks-2` | Compare the results of applying the **Raw URL Encode** rule box to the **URL Encode** rule box. See [URL Encode](#N1718896405165). Shorten Url [#shorten-url] The **Shorten Url** rule box shortens URLs to meet the length restrictions set by specific export channels. Applying the **Shorten Url** rule box changes URL domains to `url.productsup.com`. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Shorten Url** rule box. UUID-27311b11-08c7-4bd9-14d4-d1b3c7f7f0ff Select **Save**. For example, you have the following values in the **URL** attribute and want to reduce the length of all URLs. You can achieve this with the **Shorten Url** rule box: | **URL** (before) | **URL** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- | | *[https://www.amazon.de/Fluffy-Plush-Blanket-Wool-Double-Sided-Microfiber/dp/B080FPBWD2/ref=asc\_df\_B080FPBWD2/?tag=googshopus-21\&linkCode=df0\&hvadid=309905679568\&hvpos=\&hvnetw=g](https://www.amazon.de/Fluffy-Plush-Blanket-Wool-Double-Sided-Microfiber/dp/B080FPBWD2/ref=asc_df_B080FPBWD2/?tag=googshopus-21\&linkCode=df0\&hvadid=309905679568\&hvpos=\&hvnetw=g)* | `http://url.productsup.com/1096338/c/515570/0lf01b88d8188c2ce98a0131e51d5bc6` | | *[http://website.org/import-files/image.jpg](http://website.org/import-files/image.jpg)* | `http://url.productsup.com/1096338/c/515570/520269e04380cdf18607b17d239k3424` | Skip Row If Isnt URL [#skip-row-if-isnt-url] The **Skip Row If Isnt URL** rule box lets you exclude products from export if the current attribute is missing a valid URL. Take steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Skip Row If Match** rule box. UUID-368e488f-d414-0cdf-7f84-7d870943ec0d Optionally, in **Skip Priority**, set the priority if you have several rule boxes with different priorities. Select **Save**. For example, you have the following values in the **image\_link** attribute and want to export only the products that have a valid URL in this attribute. You can achieve this with the **Skip Row If Isnt URL** rule box: | **image\_link** (before) | **image\_link** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | | *[https://www.your-store.com/images/white-socks-1.jpg](https://www.your-store.com/images/white-socks-1.jpg)* | *[https://www.your-store.com/images/white-socks-1.jpg](https://www.your-store.com/images/white-socks-1.jpg)* | | *[https://www.your-store.com/images/black-socks-1.jpg](https://www.your-store.com/images/black-socks-1.jpg)* There is a space at the end of the URL. | *[https://www.your-store.com/images/black-socks-1.jpg](https://www.your-store.com/images/black-socks-1.jpg)* | | *[https://www.your-store.com/images/black-socks-2.jpg](https://www.your-store.com/images/black-socks-2.jpg)* | *[https://www.your-store.com/images/black-socks-2.jpg](https://www.your-store.com/images/black-socks-2.jpg)* | This rule box doesn't change the data in your attribute. It only skips products during export if they don't contain a valid URL. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. URL Decode [#url-decode] The **URL Decode** rule box converts percent-encoded URLs into a regular URL format, which means changing plus signs (`+`) to spaces and replacing percent signs (`%`) followed by two hex digits with the respective non-alphanumeric characters. The **URL Decode** rule box does the opposite of what the **Raw URL Encode** and **URL Encode** rule boxes do. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **URL Decode** rule box. UUID-de3c9d7d-75f3-0bff-696d-29d1e8ecb210 Select **Save**. For example, you have the following values in the **image\_link** attribute and want to convert them to a regular URL format. You can achieve this with the **URL Decode** rule box: | **image\_link** (before) | **image\_link** (after) | | ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | | *https%3A%2F%2Fwww\.your-store.com%2Fimages%2Fwhite-socks-1%3Futm\_campaign%3Dgoogle\_play%E2%80%8B%7E* | `https://www.your-store.com/images/white-socks-1?utm_campaign=google_play~` | | *https%3A%2F%2Fwww\.your-store.com%2Fimages%2Fblack-socks-1+* | `https://www.your-store.com/images/black-socks-1` There is a space at the end of the URL. | | *https%3A%2F%2Fwww\.your-store.com%2Fimages%2Fblack-socks-2%20* | `https://www.your-store.com/images/black-socks-2` There is a space at the end of the URL. | URL Encode [#url-encode] The **URL Encode** rule box lets you percent-encode URLs, which means changing spaces to plus signs (`+`) and replacing all non-alphanumeric characters except for `-`, `_`, and `.` with a percent sign (`%`) followed by two hex digits. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **URL Encode** rule box. UUID-e669e140-8237-3384-0964-d43896e0281b Select **Save**. For example, you have the following values in the **image\_link** attribute and want to percent-encode them. If there are any spaces in the values, you want to change them to plus signs. You can achieve this with the **URL Encode** rule box: | **image\_link** (before) | **image\_link** (after) | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | *[https://www.your-store.com/images/white-socks-1?utm\_campaign=google\_play](https://www.your-store.com/images/white-socks-1?utm_campaign=google_play)\~* | `https%3A%2F%2Fwww.your-store.com%2Fimages%2Fwhite-socks-1%3Futm_campaign%3Dgoogle_play%E2%80%8B%7E` | | *[https://www.your-store.com/images/black-socks-1](https://www.your-store.com/images/black-socks-1)* There is a space at the end of the URL. | `https%3A%2F%2Fwww.your-store.com%2Fimages%2Fblack-socks-1+` | | *[https://www.your-store.com/images/black-socks-2](https://www.your-store.com/images/black-socks-2)* | `https%3A%2F%2Fwww.your-store.com%2Fimages%2Fblack-socks-2` | Compare the results of applying the **URL Encode** rule box to the **Raw URL Encode** rule box. See [Raw URL Encode](#N1718896325245). # Rule box category Use regular expressions import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The category *Use regular expressions* contains all rule boxes that let you use regex to search, match, and replace values in your attributes. Some rule boxes in this category let you use regex to set age groups, conditions, gender, and size types and prepare your product data for Google Merchant Center. UUID-f279cebe-b09a-f721-ba28-f1613cd65945 A regular expression (regex) is a sequence of characters that uses specific syntax or structure rules to define a search pattern. Using a regex, you can search your data for specific text pattern matches instead of exact text matches. An example of a regex is `/([A-Z])\w+/`. If you run a search in a text and use this regular expression, you can find all words in the searched text that have uppercase letters from A to Z. In Productsup, you can use this regex as is or change the opening and closing forward slashes to hash signs: `#([A-Z])\w+#`. Find a regular expression with Regex generator [#find-a-regular-expression-with-regex-generator] To work with regex easier, you can get suggestions for necessary regular expressions using the *Regex generator*: Select a necessary rule box. Select the **>\_** icon in a rule box and describe the result you want to achieve in the *Regex generator* window. UUID-e6897227-7700-edaf-8f50-c287a5898e48 Select **Generate**. Select **Copy** below the **Answer** field. UUID-f2365ea1-4696-e83e-cf7c-29bfed0d3276 Paste the copied answer into the regex field of the rule box. You must enclose regular expressions with `/` or `#` characters so that they function in rule boxes. The Regex generator doesn't always automatically enclose output with these characters. You can manually add the / or # at the beginning and end of the generated answer.Alternatively, you can include one of the following texts within the prompt: * Enclose regex expression / characters. * Enclose regex with # characters. UUID-d28465ca-8762-8c5a-121a-264594351740 Preg Match [#preg-match] The **Preg Match** rule box searches the values of the current attribute to match the pattern you specified with a regex. When the platform finds a match in a value, it preserves the matching part of the value and removes the rest. The rule box stops scanning a value as soon as it finds a first match. If an attribute contains long-string values and you want the platform to display only specific parts of those values, you can use this rule box. * The difference between **Preg Match All** and **Preg Match** is that the former makes the platform review the entire value to find all matches within it, while the latter stops scanning a value after the first match. See [Preg Match All](#section-idm4588983531852833045222464249) for more information. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Preg Match** rule box. UUID-433dae52-d74a-8739-17cd-6559787eb7fc Enter a valid regex in **RegEx**. See [regex101](https://regex101.com/) to verify your regular expressions. Make sure to add a forward slash (`/`) or a hash sign (`#`) at the start and end of your regular expression. In **Assign**, specify the number of the capturing group within your regex that you want the platform to extract.A capturing group is a sequence of characters within a regex enclosed in parentheses. For example, this regex `/(color\: [a-z]+).*(size\: [A-Z])/` has two capturing groups: `(color\: [a-z]+)` and `(size\: [A-Z])`. Providing input in the **Assign** field isn't always necessary. It applies primarily to complex regular expressions with multiple capturing groups.For Productsup to extract and display only those parts of the values you specified in a relevant capturing group, you must provide input in **Assign**. 1. To extract and display the data matching the entire regular expression, enter `0` or leave the field empty. 2. To extract and display only the data matching the first capturing group, enter `1`. 3. To extract and display only the data matching the second, third, or fourth capturing groups, enter `2`, `3`, or `4`, respectively. Select **Save**. For example, you want to extract color and size information from your **description** attribute. You can do so using the **Preg Match** rule box with different regular expressions and capturing groups: | Rule box setup | **description** (before) | **description** (after) | | ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ----------------------- | | UUID-246a86ad-dfc3-26df-28b6-eeabead0eb4e Regex used: `#color\: [a-z]+#`. | *These T-shirts are available in color: red, size: M.* | `color: red` | | UUID-465ac86b-68c1-02da-4f5d-d5f9733ba561 Regex used: `#(color\: [a-z]+).*(size\: [A-Z])#`. | *These T-shirts are available in color: red, size: M.* | `color: red, size: M` | | UUID-6a350a3e-1409-520f-6744-db2994124db0 Regex used: `#(color\: [a-z]+).*(size\: [A-Z])#`. | *These T-shirts are available in color: red, size: M.* | `size: M` | Preg Match All [#preg-match-all] The **Preg Match All** rule box searches the values of the current attribute to match the pattern you specified with a regex. When the platform finds all matches of the regex in a value, it preserves the matching parts of the value and removes the rest. If an attribute contains long-string values and you want the platform to display only specific parts of those values, you can use this rule box. * The difference between **Preg Match All** and **Preg Match** is that the former makes the platform review the entire value to find all matches within it, while the latter stops scanning a value after the first match. See [Preg Match](#section-idm4550938432441633045222399102) for more information. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Preg Match All** rule box. UUID-dbc61089-ad75-50db-5692-1547770ea1b3 Enter a valid regex in **RegEx**. See [regex101](https://regex101.com/) to verify your regular expressions. Make sure to add a forward slash (`/`) or a hash sign (`#`) at the start and end of your regular expression. In **Assign**, specify the number of the capturing group within your regex that you want the platform to extract.A capturing group is a sequence of characters within a regex enclosed in parentheses. For example, this regex `/(color\: [a-z]+).*(size\: [A-Z])/` has two capturing groups: `(color\: [a-z]+)` and `(size\: [A-Z])`. Providing input in the **Assign** field isn't always necessary. It applies primarily to complex regular expressions with multiple capturing groups.For Productsup to extract and display only those parts of the values you specified in a relevant capturing group, you must provide input in **Assign**. 1. To extract and display the data matching the entire regular expression, enter `0` or leave the field empty. 2. To extract and display only the data matching the first capturing group, enter `1`. 3. To extract and display only the data matching the second, third, or fourth capturing groups, enter `2`, `3`, or `4`, respectively. In **Delimiter**, define the character that should separate your matches in the output value after removing all unneeded info.The comma (`,`) is the default delimiter the platform uses if the field is empty. Select **Save**. For example, you want to extract phone numbers from the following values in your **phone** attribute. You can achieve this with the **Preg Match All** rule box and compare using it to the **Preg Match** rule box result: | Rule box setup | **phone** (before) | **phone** (after) | | --------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | | **Preg Match All**Regex used: `/(\+[0-9])*([0-9])+/`. UUID-aef963af-b916-0eb3-4c6f-21faa4d34b87 | *country code: +44, county code: 1844, individual dialing part: 123456* | `+44 1844 123456` | | **Preg Match**Regex used: `/(\+[0-9])*([0-9])+/`. UUID-a1d7ed3b-9f24-6338-4e66-d32bea8dcc9e | *country code: +44, county code: 1844, individual dialing part: 123456* | `+44` | The **Preg Match All** rule box returns a longer string because it looks for all matches within a value, while the **Preg Match** rule box stops after finding the first match. Preg Replace [#preg-replace] The **Preg Replace** rule box searches the values of the current attribute with a regex and replaces all the matches the platform finds with a value of your choice. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Preg Replace** rule box. UUID-2eb299db-7e8c-8b6f-4571-1c128f6afd51 Enter a valid regex in **Search**. See [regex101](https://regex101.com/) to verify your regular expressions. Make sure to add a forward slash (`/`) or a hash sign (`#`) at the start and end of your regular expression. In **Replace**, enter the value that should replace your regex matches. Select **Save**. For example, you don't want your **description** attribute to mention the exact number of settings for your food processors if the products have fewer than 8 settings. Instead, you want your **description** attribute values to say *under 8*. You can achieve this with the following setup of the **Preg Replace** rule box: UUID-d603a599-b7a2-719d-4688-387411c8ecd7 | **description** (before) | **description** (after) | | ------------------------------------- | ------------------------------------------- | | *This food processor has 6 settings.* | `This food processor has under 8 settings.` | | *This food processor has 9 settings.* | *This food processor has 9 settings.* | Add a thousands separator for decimal numbers with Preg Replace [#add-a-thousands-separator-for-decimal-numbers-with-preg-replace] You can use the **Preg Replace** rule box to add a thousands separator to numbers with many digits: . Add the **Make Valid Price** rule box or otherwise ensure that your price format is correct. See [Work with prices & math](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/work-with-prices-math#section-idm234398698527426) for more information. . Add the **Preg Replace** rule box and set it up in the following way: 1. Enter `/(\d{1,3})(\d{3})?(\.\d{2})/` in **Search** to split your current prices into capturing groups. 2. Enter `$1,$2$3` in **Replace** to use a comma (**,**) as a thousands separator between your capturing groups. If you want to use a different symbol as a thousands separator, add it between *$1* and *$2$3*. This works for prices between 1,000.00 and 999,999.99. . If some of the prices in your current attribute are under 1,000.00, this setup adds an unnecessary comma (**,**) before the decimal point, for example, `40,.99`. To remove the unneeded comma, add the **Text Replace** rule box and set it up as follows: 1. Enter `,.` in **Search for**. 2. Enter `.` in **Replace by**. UUID-76baeca4-b680-8572-39ed-84377e275b27 . Once you save the three rule boxes, your attribute values should look similar to this: | **price** (before) | **price** (after) | | ------------------ | ----------------- | | *9999.99* | `9,999.99` | | *9.99* | `9.99` | Remove GTINs in the restricted and coupon ranges with Preg Replace [#remove-gtins-in-the-restricted-and-coupon-ranges-with-preg-replace] According to Google's requirements, the GTINs you submit for your products shouldn't be in the restricted or coupon ranges. See [GTIN \[gtin\]](https://support.google.com/merchants/answer/6324461) for more information. You can use the **Preg Replace** rule box to remove GTINs in the restricted and coupon ranges from your **gtin** attribute: . Add the **Preg Replace** rule box and set it up in the following way: 1. To remove restricted GTINs only, enter `#^(02|04|2).*#` in **Search**. Leave the field **Replace** empty, and select **Save**. 2. To remove coupon GTINs only, enter `#^(05|98|99).*#` in **Search**. Leave the field **Replace** empty, and select **Save**. 3. To remove both restricted and coupon GTINs, enter `#^(02|04|2|05|98|99).*#` in **Search**. Leave the field **Replace** empty, and select **Save**. Set Value if Match (RegEx) [#set-value-if-match-regex] The **Set Value if Match (RegEx)** rule box assigns a static value in the current attribute if a selected attribute contains a regex match. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value if Match (RegEx)** rule box. UUID-1b58e224-434d-6930-231e-63bef18bfb18 In **Column**, choose the attribute you want to search for regex matches. Enter a valid regex in **RegEx**. See [regex101](https://regex101.com/) to verify your regular expressions. Make sure to add a forward slash (`/`) or a hash sign (`#`) at the start and end of your regular expression. In **Assign**, specify the value that the current attribute should display if the platform finds a regex match in the searched attribute. In the **handle no match** drop-down menu, choose how the platform should treat the values of the current attribute if there is a product with no regex match in the searched attribute: 1. *leave unchanged* makes sure the values of the current attribute stay the same. 2. *assign* makes sure the platform changes the values of the current attribute. Enter what value the platform should assign to products with no matches in **change to**. Select **Save**. For example, you can use the **Set Value if Match (RegEx)** rule box to get the **price\_range** attribute to contain information on whether a product is cheap or expensive based on the values of the **price** attribute. UUID-d1e248e7-df2e-fbe9-9198-63a537828193 The regex `/\b(?:0*[1-9]|[12][0-9])\$/` lets the rule box search the **price** attribute for products that cost less than 30$. If the platform finds a product that costs less than that, it assigns the value *cheap* to this product in the **price\_range** attribute. If the platform discovers products that don't match the regex and cost 30$ or more, such products get the value *expensive*. | **price** (no changes) | **price\_range** (before) | **price\_range** (after) | | ---------------------- | ------------------------- | ------------------------ | | *11$* | *10-19$* | `cheap` | | *20$* | *20-29$* | `cheap` | | *90$* | *90-99$* | `expensive` | | *110$* | *110-119$* | `expensive` | Regex rule boxes for Google Merchant Center [#regex-rule-boxes-for-google-merchant-center] The following rule boxes can help you prepare your data for Google Merchant Center using regex. See [Rule box category Google Merchant Center](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-google-merchant-center) for more information on rule boxes for GMC. Set Age Group by Regex [#set-age-group-by-regex] Google accepts the following values for the **age\_group** attribute: * *adult* * *kids* * *infant* * *toddler* * *newborn* With the **Set Age Group by Regex** rule box, you can use regular expressions to search your current values for matches and replace them with corresponding valid age groups accepted by Google. Once the **Set Age Group by Regex** rule box finds a regex match in a value, it changes the entire current value to the corresponding value accepted by Google. If one value contains multiple regex matches related to different age groups, the rule box assigns the age group related to the first regex match within the value. If the rule box doesn't find a regex match in a value, it assigns the value `adult` to make sure your **age\_group** attribute contains only valid entries. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Age Group by Regex** rule box. UUID-c327fa66-c78e-e181-1433-ae5b2e7602d2 In **Adult**, **Kids**, **Infant**, **Toddler**, and **Newborn**, enter regular expressions to search your values and replace the matching parts with a relevant age group value. Use the *Regex generator* by selecting **>\_** to get a regex suggestion. Select **Save**. For example, you have different non-valid values in the **age\_group** attribute, and you need to assign a valid age group to each product based on its current value. UUID-b90c4c3c-3e62-704c-94ae-a1db74d933eb With the regular expressions `/(women|female|men|male|adult|adults)/g` and `/(children|child|kid|kids|boy|girl|boys|girls)/`, you can search your current values for the possible alternatives to the valid *adult* and *kids* values and then change the current values to the appropriate valid age group. | **age\_group** (before) | **age\_group** (after) | | ----------------------- | ---------------------- | | *women* | `adult` | | *all ages* | `adult` | | *children, men* | `kids` | Set Condition by Regex [#set-condition-by-regex] Google accepts the following values for the **condition** attribute: * *new* * *refurbished* * *used* With the **Set Condition by Regex** rule box, you can use regular expressions to search your current values for matches and replace them with corresponding valid conditions accepted by Google. Once the **Set Condition by Regex** rule box finds a regex match in a value, it changes the entire current value to the corresponding value accepted by Google. If one value contains multiple regex matches related to different condition types, the rule box assigns the condition type related to the first regex match within the value. If the rule box doesn't find a regex match in a value, it assigns the value `new` to make sure your **condition** attribute contains only valid entries. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Condition by Regex** rule box. UUID-2fcf4179-be09-516d-20b2-f78224b71e89 In **New**, **Used**, and **Refurbished**, enter regular expressions to search your values and replace the matching parts with a relevant condition value. Use the *Regex generator* by selecting **>\_** to get a regex suggestion. Select **Save**. For example, you have different non-valid values in the **condition** attribute, and you need to assign a valid condition type to each product based on its current value. UUID-f6ea2b4b-2add-607f-dcc3-cd396a2549c8 With the regular expressions `/(from manufacturer|packaged|new)/`, `/(use|used)/`, and `/(refurbished|repaired|returned)/`, you can search your current values for the possible variants of the valid *new*, *used*, and *refurbished* values and then change the current values to the appropriate valid conditions. | **condition** (before) | **condition** (after) | | ---------------------- | --------------------- | | *returned, new* | `new` | | *signs of use* | `used` | | *brand new* | `new` | Set Gender by Regex [#set-gender-by-regex] Google accepts the following values for the **gender** attribute: * *unisex* * *female* * *male* With the **Set Gender by Regex** rule box, you can use regular expressions to search your current values for matches and replace them with corresponding valid gender options accepted by Google. You need to provide regex only for *male* and *female* gender options. Products with no matches of these regular expressions get the value *unisex*. Once the **Set Gender by Regex** rule box finds a regex match in a value, it changes the entire current value to the corresponding value accepted by Google. If one value contains multiple regex matches related to different gender options, the rule box assigns the gender option related to the first regex match within the value. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Gender by Regex** rule box. UUID-2b456d92-8247-aefc-3827-aa03c011381b In **Male regex** and **Female regex**, enter regular expressions to search your values and replace the matching parts with a relevant gender option. Use the *Regex generator* by selecting **>\_** to get a regex suggestion. Select **Save**. For example, you have different non-valid values in the **gender** attribute, and you need to assign a valid gender option to each product based on its current value. UUID-21962417-b03c-608c-d6ae-1927afe88673 With the regular expressions `/\b(?:women|female|F)\b/` and `/\b(?:men|male|M)\b/`, you can search your current values for the possible variants of the valid *female* and *male* values and then change the current values to the appropriate valid gender option. The products that don't contain regex matches get the value *unisex*. | **gender** (before) | **gender** (after) | | ------------------- | ------------------ | | *women* | `female` | | *men and women* | `male` | | *M* | `male` | | *all* | `unisex` | Set Size Type by Regex [#set-size-type-by-regex] Google accepts the following values for the **size\_type** attribute: * *regular* * *petite* * *plus* * *big* * *tall* * *maternity* With the **Set Size Type by Regex** rule box, you can use regular expressions to search your current values for matches and replace them with corresponding valid size types accepted by Google. Once the **Set Size Type by Regex** rule box finds a regex match in a value, it changes the entire current value to the corresponding value accepted by Google. If one value contains multiple regex matches related to different size types, the rule box assigns the size type related to the first regex match within the value. If the rule box doesn't find a regex match in a value, it assigns the value `regular` to make sure your **size\_type** attribute contains only valid entries. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Size Type by Regex** rule box. UUID-8c3dd378-da2c-5922-d419-cc2e75c24640 In **Regular**, **Petite**, **Plus**, and **Maternity**, enter regular expressions to search your values and replace the matching parts with a relevant size type. Use the *Regex generator* by selecting **>\_** to get a regex suggestion. Select **Save**. For example, you have different non-valid values in the **size\_type** attribute, and you need to assign a valid size type to each product based on its current value. UUID-f8625106-73e4-b712-8fcf-e1afa65b8ead With the regular expressions `/(regular|reg|usual)/`, `/(petite|smaller)/`, `/(plus|bigger)/`, and `/(maternity)/`, you can search your current values for the possible variants of these valid size types and then change the current values to the appropriate valid size types. | **size\_type** (before) | **size\_type** (after) | | ----------------------- | ---------------------- | | *one size* | `regular` | | *maternity clothes* | `maternity` | | *petite, regular* | `regular` | # Rule box category Include or exclude products import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The category *Include or exclude products* contains all rule boxes that can help you control which products the platform sends to your export channels and which ones it skips during export. For example, you can choose which values should or shouldn't be in an attribute to include or exclude products during export. You can also skip products if their attribute values are empty, exceed a specific string length, contain no URL, or meet other desired conditions. UUID-a66617e3-4a0b-ca39-8920-9433b2aca9f3 This category can be divided into several subgroups. In the following sections, you can find how to exclude or include certain products from export: * [Exclude products with skip rule boxes](#section-idm4517567789524834121850950121) * [Exclude products with the blacklist rule boxes](#section-idm4517570879664034120495770181) * [Include products with whitelist rule boxes](#section-idm234386556280008) Exclude products with skip rule boxes [#exclude-products-with-skip-rule-boxes] The *Include or exclude products* rule box category contains the skip rule boxes to let you exclude certain products based on a condition. After applying these rule boxes, you can still see the skipped products highlighted in red in Data View. UUID-1ff2fbd9-acaa-60d3-24b8-6c0347b0562d You can choose among the following rule boxes: * [Skip Row If Value In](#section-idm353412190188458) skips the product during export if the attribute contains one of the defined values. * [Skip Row If Value Not In](#section-idm353412190217208) skips the product during export if the attribute doesn't contain one of the defined values. * [Skip Row By Content Length](#section-idm353412189969490) skips the product during export if the value length meets a condition. * [Skip Row If Empty](#section-idm353412190004540) skips the product during export if the current value is empty. * [Skip Row If Isnt URL](#section-idm353412190026054) skips all products during export where the attribute's value isn't a URL. * [Skip Row If Match](#section-idm353412190064794) skips all products during export if they contain values matching a regex. * [Skip Row If Not Empty](#section-idm353412190168908) skips all products during export where the values aren't empty. * [Skip Multicondition (2x)](#section-idm353412189894094) skips the product during the export if two conditions are met. Skip Row If Value In [#skip-row-if-value-in] The **Skip Row If Value In** rule box excludes an item with a specific value in the attribute column. Take steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Skip Row If Value In** rule box. UUID-c95af8b6-43be-af78-9217-88f4a86e1a8b In **Match**, select the needed option: * *broad* skips the item from the export if the string contains the search term. The broad match is case-insensitive. * *exact* skips the item from the export if the search term exactly matches the entire string. The exact match is case-sensitive. The *broad* match mode can significantly increase your site processing times. If applicable, we recommend choosing the *exact* match mode instead. In the text field, enter the skip terms. To enter multiple terms, start each term from a new line. Optionally, in **Skip Priority**, set the priority if you have several rule boxes with different priorities. Select **Save**. For example, the attribute contains *White T-shirt (Kids)* and *Red T-shirt (Kids)* items. To exclude all items for kids, select *broad* in **Match** and enter *Kids* as the search term. You can achieve this with the following setup of the **Skip Row If Value In** rule box: UUID-9a6e6142-1eee-87ad-3963-de93df762f24 | **title** (before) | **title** (after) | | ------------------------ | ------------------------ | | *White T-shirt (Kids)* | *White T-shirt (Kids)* | | *Green T-shirt (Kids)* | *Green T-shirt (Kids)* | | *White T-shirt (Adults)* | *White T-shirt (Adults)* | | *White T-shirt (kids)* | *White T-shirt (kids)* | This rule box doesn't change the data in your attribute. It only skips products during export if they match values in the rule box. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. To exclude rows exactly matching the entire string, select *exact* in **Match** and enter the needed string in the search field: *White T-shirt (Kids)*. You can achieve this with the following setup of the **Skip Row If Value In** rule box: UUID-0d542466-a640-b60d-3525-5f8bd67b1151 | **title** (before) | **title** (after) | | ------------------------ | ------------------------ | | *White T-shirt (Kids)* | *White T-shirt (Kids)* | | *Green T-shirt (Kids)* | *Green T-shirt (Kids)* | | *White T-shirt (Adults)* | *White T-shirt (Adults)* | | *White T-shirt (kids)* | *White T-shirt (kids)* | This rule box doesn't change the data in your attribute. It only skips products during export if they match values in the rule box. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. Combine Skip Row If Value In with other rule boxes [#combine-skip-row-if-value-in-with-other-rule-boxes] For example, to exclude out-of-stock items with a price lower than 10 EUR, you can apply the **Skip Row If Value In** and **Set Value If Contains** rule boxes to the **title** attribute. You can achieve this with the following setup of the rule boxes: UUID-8f49b044-1755-d2ed-36ff-64692fbbe5ed | price (before) | availability (before) | **title** (before) | price (after) | availability (after) | **title** (after) | | -------------- | --------------------- | ------------------------ | ------------- | -------------------- | ---------------------- | | *10.00* | *out of stock* | *White T-shirt (Kids)* | *10.00* | *out of stock* | `deleted_(stock)` | | *8.99* | *out of stock* | *Green T-shirt (Kids)* | *8.99* | *out of stock* | `deleted_(stock)` | | *9.99* | *in stock* | *White T-shirt (Adults)* | *9.99* | *in stock* | `deleted_(raw price)` | | *12.99* | *in stock* | *White T-shirt (kids)* | *12.99* | *in stock* | *White T-shirt (kids)* | This combination of the **Set Value If Contains** rule boxes changes the data in your attribute and the **Skip Row If Value In** rule box skips products during export if they match values. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. Skip Row If Value Not In [#skip-row-if-value-not-in] The **Skip Row If Value Not In** rule box skips a row from export if one or more values aren't in the attribute column. Take steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Skip Row If Value Not In** rule box. UUID-c75145b8-4448-901a-1682-3d7bf07b7df1 In **Match**, select the needed option: * *broad* skips the item from the export if the string contains the search term. The broad match is case-insensitive. * *exact* skips the item from the export if the search term exactly matches the entire string. The exact match is case-sensitive. The *broad* match mode can significantly increase your site processing times. If applicable, we recommend choosing the *exact* match mode instead. In the text field, enter the skip terms. To enter multiple terms, start each term from a new line. Optionally, in **Skip Priority**, set the priority if you have several rule boxes with different priorities. Select **Save**. For example, to exclude all products that don't contain *Kids* in the **title** attribute, select *broad* in **Match** and enter *Kids* as the search term. You can achieve this with the following setup of the **Skip Row If Value Not In** rule box: UUID-afe5bfba-460a-ebcb-4c36-d9c1346f4635 | **title** (before) | **title** (after) | | ------------------------ | ------------------------ | | *White T-shirt (Kids)* | *White T-shirt (Kids)* | | *Red T-shirt (Kids)* | *Red T-shirt (Kids)* | | *White T-shirt (Adults)* | *White T-shirt (Adults)* | | *White T-shirt (kids)* | *White T-shirt (kids)* | To exclude all products except those that contain *White T-shirt (Kids)* in the **title** attribute, you need to select *exact* in **Match** and enter the entire string in the search field: *White T-shirt (Kids)*. You can achieve this with the following setup of the **Skip Row If Value Not In** rule box: UUID-6bb3104c-2bb8-9934-b7f3-a5d0f31a45a5 | **title** (before) | **title** (after) | | ------------------------ | ------------------------ | | *White T-shirt (Kids)* | *White T-shirt (Kids)* | | *Red T-shirt (Kids)* | *Red T-shirt (Kids)* | | *White T-shirt (Adults)* | *White T-shirt (Adults)* | | *White T-shirt (kids)* | *White T-shirt (kids)* | This rule box doesn't change the data in your attribute. It only skips products during export if they don't match values in the rule box. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. Skip Row By Content Length [#skip-row-by-content-length] The **Skip Row By Content Length** rule box compares the length of the attribute content with the entered value and skips the product rows if the value meets the condition. Take steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Skip Row By Content Length** rule box. UUID-585eeb4c-c48f-a48d-9275-2777ec65a2ec Select the operator in the drop-down menu. Enter a desired number of characters as a compare value. Optionally, in **Skip Priority**, set the priority if you have several rule boxes with different priorities. Select **Save**. For example, you need to skip all products with descriptions over 40 characters, including spaces. You can achieve this with the following setup of the **Skip Row By Content Length** rule box: UUID-daf27ec0-7c25-6257-1a3c-fe2571c0c9db | **description** (before) | **description** (after) | | -------------------------------------------------------------------- | -------------------------------------------------------------------- | | *This description is longer than 40 characters. We need to skip it.* | *This description is longer than 40 characters. We need to skip it.* | | *This text is less than 40 characters.* | *This text is less than 40 characters.* | | *This description is longer than 40 characters. We need to skip it.* | *This description is longer than 40 characters. We need to skip it.* | | *This description is longer than 40 characters. We need to skip it.* | *This description is longer than 40 characters. We need to skip it.* | This rule box doesn't change the data in your attribute. It only skips products during export if the attribute's content doesn't match the length requirements in the rule box. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. Skip Row If Empty [#skip-row-if-empty] The **Skip Row If Empty** rule box excludes the product row if the value of the selected attribute is empty, for example, if some images, links, or prices are missing. Take steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Skip Row If Empty** rule box. UUID-35a454ef-d1e2-d54e-0ffa-2bb078f273cf Optionally, in **Skip Priority**, set the priority if you have several rule boxes with different priorities. Select **Save**. For example, you need to skip all product rows where the attribute is empty. You can achieve this with the following setup of the **Skip Row If Empty** rule box: | **title** (before) | **title** (after) | | ---------------------- | ---------------------- | | *White T-shirt (Kids)* | *White T-shirt (Kids)* | | | | | *White T-shirt (Kids)* | *White T-shirt (Kids)* | This rule box doesn't change the data in your attribute. It only skips products during export if they are empty. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. Skip Row If Isnt URL [#skip-row-if-isnt-url] The **Skip Row If Isnt URL** rule box lets you exclude products from export if the current attribute is missing a valid URL. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Skip Row If Isnt URL** rule box. UUID-368e488f-d414-0cdf-7f84-7d870943ec0d Optionally, in **Skip Priority**, set the priority if you have several rule boxes with different priorities. Select **Save**. For example, you have the following values in the **image\_link** attribute and want to export only the products that have a valid URL in this attribute. You can achieve this with the **Skip Row If Isnt URL** rule box: | **image\_link** (before) | **image\_link** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | | *[https://www.your-store.com/images/white-socks-1.jpg](https://www.your-store.com/images/white-socks-1.jpg)* | *[https://www.your-store.com/images/white-socks-1.jpg](https://www.your-store.com/images/white-socks-1.jpg)* | | *[https://www.your-store.com/images/black-socks-1.jpg](https://www.your-store.com/images/black-socks-1.jpg)* There is a space at the end of the URL. | *[https://www.your-store.com/images/black-socks-1.jpg](https://www.your-store.com/images/black-socks-1.jpg)* | | *[https://www.your-store.com/images/black-socks-2.jpg](https://www.your-store.com/images/black-socks-2.jpg)* | *[https://www.your-store.com/images/black-socks-2.jpg](https://www.your-store.com/images/black-socks-2.jpg)* | This rule box doesn't change the data in your attribute. It only skips products during export if they don't contain a valid URL. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. Skip Row If Match [#skip-row-if-match] The **Skip Row If Match** rule box excludes the product rows if they contain values matching a regex in a specific attribute. Take steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Skip Row If Match** rule box. UUID-099d2225-617a-e34a-2858-dbf167820f59 In **Format**, enter a value in the format `#string#`. Optionally, in **Skip Priority**, set the priority if you have several rule boxes with different priorities. Select **Save**. For example, you want to exclude the products containing *T-shirt* in their titles. You can achieve this with the following setup of the **Skip Row If Match** rule box: UUID-f47f130d-a178-e780-ff06-8da0fe6384c3 | **title** (before) | **title** (after) | | ------------------------ | ------------------------ | | *White dress (Kids)* | *White T-shirt (Kids)* | | *Red dress (Kids)* | *Red dress (Kids)* | | *White T-shirt (Adults)* | *White T-shirt (Adults)* | | *White T-shirt (kids)* | *White T-shirt (kids)* | This rule box doesn't change the data in your attribute. It only skips products during export if they match values in the rule box. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. Skip Row If Not Empty [#skip-row-if-not-empty] The **Skip Row If Not Empty** rule box excludes product rows where the values aren't empty. Take steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Skip Row If Not Empty** rule box. UUID-7a9ea8d4-6c14-a6a9-3447-78da80e63f73 Optionally, in **Skip Priority**, set the priority if you have several rule boxes with different priorities. Select **Save**. For example, you need to skip all product rows where the attribute isn't empty. You can achieve this with the following setup of the **Skip Row If Not Empty** rule box: | **title** (before) | **title** (after) | | ---------------------- | ---------------------- | | *White T-shirt (Kids)* | *White T-shirt (Kids)* | | | | | *White T-shirt (Kids)* | *White T-shirt (Kids)* | This rule box doesn't change the data in your attribute. It only skips products during export if they aren't empty. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. Skip Multicondition (2x) [#skip-multicondition-2x] The **Skip Multicondition (2x)** rule box excludes product rows when two defined conditions are met. Set both conditions in the same rule box: Take steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Skip Multicondition (2x)** rule box. UUID-bd7a08b3-1776-c9e8-71e4-ab6fb1de89fa In **Column**, select a comparison attribute. In **Operator**, select a condition. In **Value**, enter a text or numeric value. Optionally, in **Skip Priority**, set the priority if you have several rule boxes with different priorities. Select **Save**. For example, you want to exclude the products for boys with size M. You can achieve this with the following setup of the **Skip Multicondition (2x)** rule box: UUID-26df752b-5848-caef-2b7e-750edf766525 | size (before) | gender (before) | **title** (before) | size (after) | gender (after) | **title** (after) | | ------------- | --------------- | ------------------------ | ------------ | -------------- | ------------------------ | | *M* | *boys* | *White T-shirt (Kids)* | *M* | *boys* | *White T-shirt (Kids)* | | *M* | *girls* | *Red dress (Kids)* | *M* | *girls* | *Red dress (Kids)* | | *M* | *men* | *White T-shirt (Adults)* | *M* | *men* | *White T-shirt (Adults)* | | *XL* | *boys* | *White T-shirt (kids)* | *XL* | *boys* | *White T-shirt (kids)* | This rule box doesn't change the data in your attribute. It only skips products during export if both conditions match the values in the rule box. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. Exclude products with the blacklist rule boxes [#exclude-products-with-the-blacklist-rule-boxes] The *Include or exclude products* rule box category contains the blacklist rule boxes to let you exclude products from export if their attributes contain a term that matches the term that you added to the Inclusion/Exclusion list in Lists. For example, in Germany, food manufacturers face restrictions on what ingredients they can add to their products. With blacklist rule boxes, you can exclude products that contain prohibited ingredients if added to the list. Blacklist rule boxes work similarly to the rule box **Skip Row if Value In**, but use lists and share them with other sites. If you modify your data feed, the list updates automatically for all sites in your organization. You can use the following blacklist rule boxes: * [Blacklist](#section-idm234386428036993) excludes products from export if their attribute's values contain a term that matches the term in the selected Inclusion/Exclusion list. * [Blacklist Entire Word](#section-idm353438651719874) excludes products from export if their attribute's entire values match a term in the selected Inclusion/Exclusion list. * [Negative Blacklist](#section-idm353438651731206) excludes products from export if their attribute doesn't contain certain values that match a term in the selected Inclusion/Exclusion list. The Negative Blacklist isn't the same as Whitelist that prevents items from being skipped. Blacklist [#blacklist] The **Blacklist** rule box excludes product rows from export if their attribute's values contain a term that matches the term in the selected *Inclusion/Exclusion* list. Go to **Lists** from your site's main menu and add all terms you need to exclude to the *Standard Inclusion/Exclusion* list. See [Exclude products with the Standard Inclusion/Exclusion list](/docs/help-center/map-and-optimize-your-data/lists/exclude-products-with-the-standard-inclusion-exclusion-list) to learn how to create a list. You can also use the *Dynamic Inclusion/Exclusion* list to import a list of terms via a CSV file or URL. Take steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Blacklist** rule box. UUID-97e244b2-8f76-dcd4-a36a-a2406d318169 Select a necessary list in the **Blacklist** drop-down menu. Optionally, in **Skip Priority**, set the priority if you have several rule boxes with different priorities. Select **Save**. For example, you want to exclude the products made of certain materials such as leather, silk, and fur. You can achieve this by adding these terms into the lists and setting up the **Blacklist** rule box as follows: UUID-0880a03e-e155-9176-4457-7030ccd185b9 UUID-02981377-8bac-da01-27d7-70df7a674cb4 | **title** (before) | **title** (after) | | ---------------------- | ---------------------- | | *Silk skirt* | *Silk skirt* | | *Mink-fur coat* | *Mink-fur coat* | | *Black leather jacket* | *Black leather jacket* | | *Cotton T-shirt* | *Cotton T-shirt* | The term can be a part of the string, such as `leather` in `Black leather jacket`. This rule box changes the data in your attribute and skips products during export if it finds the match to the list terms. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. Blacklist Entire Word [#blacklist-entire-word] The **Blacklist Entire Word** rule box excludes product rows from export if their attribute's entire values match a term in the selected *Inclusion/Exclusion* list. Go to **Lists** from your site's main menu and add all terms you need to exclude to the *Standard Inclusion/Exclusion* list. See [Exclude products with the Standard Inclusion/Exclusion list](/docs/help-center/map-and-optimize-your-data/lists/exclude-products-with-the-standard-inclusion-exclusion-list) to learn how to create a list. You can also use the *Dynamic Inclusion/Exclusion* list to import a list of terms via a CSV file or URL. Take steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Blacklist Entire Word** rule box. UUID-76495888-bf0a-a45f-bfc6-62eb49a55769 Select a necessary list in the **Blacklist** drop-down menu. Optionally, in **Skip Priority**, set the priority if you have several rule boxes with different priorities. Select **Save**. For example, you want to exclude the products made of certain materials such as leather, silk, and fur. You can achieve this by adding these terms to the lists and setting up the **Blacklist Entire Word** rule box as follows: UUID-0880a03e-e155-9176-4457-7030ccd185b9 UUID-66f2a4ae-cf72-960b-737c-067ae1e5233b | **title** (before) | **title** (after) | | ---------------------- | ---------------------- | | *Leather* | *Leather* | | *Fur* | *Fur* | | *Mink-fur coat* | *Mink-fur coat* | | *Black leather jacket* | *Black leather jacket* | | *Cotton T-shirt* | *Cotton T-shirt* | The term must matchthe entire string. In this example, the platform doesn't skip `Black leather jacket` and `Mink-fur coat`, as only part of the string matches the term in the list. This rule box doesn't change the data in your attribute. It only skips products during export if it finds the exact match to the list terms. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. Negative Blacklist [#negative-blacklist] The **Negative Blacklist** rule box excludes product rows from export if their attribute doesn't contain certain values that match a term in the selected *Inclusion/Exclusion* list. Go to **Lists** from your site's main menu and add all terms you need to exclude to the *Standard Inclusion/Exclusion* list. See [Exclude products with the Standard Inclusion/Exclusion list](/docs/help-center/map-and-optimize-your-data/lists/exclude-products-with-the-standard-inclusion-exclusion-list) to learn how to create a list. You can also use the *Dynamic Inclusion/Exclusion* list to import a list of terms via a CSV file or URL. Take steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Negative Blacklist** rule box. UUID-859479f7-0df8-bb8e-9718-1a4d3ed5f6ce Select a necessary list in the **Negative Blacklist** drop-down menu. Optionally, in **Skip Priority**, set the priority if you have several rule boxes with different priorities. Select **Save**. For example, you want to exclude the products that don't have the names of certain materials in their title, such as leather, silk, and fur. You can achieve this by adding these terms to the lists and setting up the **Negative Blacklist** rule box as follows: UUID-0880a03e-e155-9176-4457-7030ccd185b9 UUID-4133ede6-b373-e26c-81cf-95ae6160ce75 | **title** (before) | **title** (after) | | ---------------------- | ---------------------- | | *Leather* | *Leather* | | *Fur* | *Fur* | | *Mink-fur coat* | *Mink-fur coat* | | *Black leather jacket* | *Black leather jacket* | | *Cotton T-shirt* | *Cotton T-shirt* | This rule box doesn't change the data in your attribute. It only skips products during export if it doesn't find a match to the list terms. The term must exactly match the word within the string. The term can be a part of the string, such as `leather` in `Black leather jacket`. But, as seen from the example, the platform doesn't match terms if there are the parts of the hyphenated compound words, such as `fur` in `Mink-fur coat`. In this case you need to add the hyphenated term separately to the list. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. Include products with whitelist rule boxes [#include-products-with-whitelist-rule-boxes] The *Include or exclude products* rule box category contains the whitelist rule boxes to let you export certain products even if the settings of other rule boxes require the platform to skip these products during export. The priority of whitelist rule boxes is higher than that of blacklist, skip, and ROI rule boxes. Choose a whitelist rule box depending on the number of the search terms: . **Whitelist Row If Value In** and **Whitelist Row If Value Not In** – for a list of less than 30 whitelisting terms. Using these rule boxes for bigger lists of terms can significantly increase your site's processing time. . **Whitelist** – for a list of more than 30 whitelisting terms. Whitelist Row If Value In [#whitelist-row-if-value-in] The **Whitelist Row If Value In** rule box exports the products containing terms you list in this rule box, even if other rule boxes require that the platform skip these products during export. Take steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Whitelist Row If Value In** rule box. UUID-0304f282-4095-4629-66ae-2a4208600355 In **Match**, select the desired matching pattern: * *broad* whitelists the product if the string contains the search term. The broad match is case-insensitive. * *exact* whitelists the product if the search term exactly matches the entire string. The exact match is case-sensitive. The *broad* match mode can significantly increase your site processing times. If applicable, we recommend choosing the *exact* match mode instead. In the text field, enter your whitelist terms. To enter multiple terms, start each term from a new line. Optionally, in **Whitelist Priority**, set the rule box priority if you have several whitelist, skip, blacklist, or ROI rule boxes and need to define which rule boxes should prevail.See [Include or exclude products](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/include-or-exclude-products#section-idm353412027264070). Select **Save**. For example, you want to add to export some of the previously skipped products made from cotton and mink-fur. You can achieve this with the following setup of the **Whitelist Row If Value In** rule box: UUID-c285cf11-1bd2-c497-9700-bd4321cdd224 | **title** (before) | **title** (after) | | ---------------------- | ---------------------- | | *Leather* | *Leather* | | *Fur* | *Fur* | | *Mink-fur coat* | *Mink-fur coat* | | *Black leather jacket* | *Black leather jacket* | | *Cotton T-shirt* | *Cotton T-shirt* | The platform overrides the skip rules for the product rows where it finds a match to the list terms. This rule box doesn't change the data in your attribute. It only skips products during export if it finds a match to the list terms. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. Whitelist Row If Value Not In [#whitelist-row-if-value-not-in] The **Whitelist Row If Value Not In** exports the products that don't contain the terms you list in this rule box, even if other rule boxes require that the platform skip these products during export. Take steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Whitelist Row If Value Not In** rule box. UUID-fc87c968-e7a4-3370-77bf-46e973df7046 In **Match**, select the desired matching pattern: * *broad* whitelists the product if the string contains the search term. The broad match is case-insensitive.matches any part of the value with the whitelist term and is case-insensitive. * *exact* whitelists the product if the search term exactly matches the entire string. The exact match is case-sensitive. The *broad* match mode can significantly increase your site processing times. If applicable, we recommend choosing the *exact* match mode instead. In the text field, enter your whitelist terms. To enter multiple terms, start each term from a new line. Optionally, in **Whitelist Priority**, set the rule box priority if you have several whitelist, skip, blacklist, or ROI rule boxes and need to define which rule boxes should prevail.See [Prioritize rule boxes](#section-idm353412027264070). Select **Save**. For example, you want to add some of the previously skipped products that have the names of certain materials in their title, such as cotton and mink-fur. You can achieve this with the following setup of the **Whitelist Row If Value Not In** rule box: UUID-15aa57ca-348b-e90a-7abe-03e0dbf9db89 | **title** (before) | **title** (after) | | ---------------------- | ---------------------- | | *Leather* | *Leather* | | *Fur* | *Fur* | | *Mink-fur coat* | *Mink-fur coat* | | *Black leather jacket* | *Black leather jacket* | | *Cotton T-shirt* | *Cotton T-shirt* | When you select *exact*, the term must exactly match the word within the string. This rule box doesn't change the data in your attribute. It only overwrites the skip rules for the product rows where it doesn't find the match to the list terms. To let you know which products the rule box whitelists, it removes the red highlight for the product rows, not just the attribute where you applied the rule box. Whitelist rule box [#whitelist-rule-box] The **Whitelist** exports the products containing the terms you add in an *Inclusion/Exclusion* list, even if other rule boxes require that the platform skip these products during export. Go to **Lists** from your site's main menu and add all terms you need to whitelist to the *Inclusion/Exclusion list*. See [Exclude products with the Standard Inclusion/Exclusion list](/docs/help-center/map-and-optimize-your-data/lists/exclude-products-with-the-standard-inclusion-exclusion-list) to learn how to create a list. Take steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Whitelist** rule box. In **Whitelist**, select the *Inclusion/Exclusion* list containing the terms you want to whitelist. UUID-97ee4bb6-1bea-9751-350d-6037a0ad042f Optionally, in **Whitelist Priority**, set the rule box priority if you have several whitelist, skip, blacklist, or ROI rule boxes and need to define which rule boxes should prevail. Setting a priority prevents conflicts between rule boxes. Terms in the Whitelist rule box with the highest priority prevail over other whitelist, blacklist, skip, or ROI rule boxes. See [Prioritize rule boxes](#section-idm353412027264070). Select **Save**. For example, you want to add some of the previously skipped products made from fur and silk. You can achieve this with the following setup of the **Whitelist** rule box: UUID-c3e255f1-fafd-d015-06d6-a7de7530938f UUID-1874c7b0-32e5-ff22-9dc2-bbbb85ca352e | **title** (before) | **title** (after) | | ------------------ | ----------------- | | *Leather* | *Leather* | | *Fur* | *Fur* | | *Mink-fur coat* | *Mink-fur coat* | | *Silk dress* | *Silk dress* | | *Cotton T-shirt* | *Cotton T-shirt* | The term can be a part of the string, such as `fur` in `Mink-fur coat`. This rule box doesn't change the data in your attribute. It only overwrites the skip rules for the product rows where it finds the match to the list terms. To let you know which products the rule box whitelists, it removes the red highlight for the product rows, not just the attribute where you applied the rule box. Prioritize rule boxes [#prioritize-rule-boxes] In complex cases, when you need to apply the skipping and whitelisting rule boxes at the same time to reach a certain result, you need rule box priorities. You can set the priority almost for every rule box. Here are some rules and best practices: * By default, all the rule boxes have priority *0*. * You can enter both positive and negative numeric values to define the priorities. * The higher the priority value, the stronger the rule box. For example, the rule box with the priority *20* overweights the one with *10*. * The Whitelist rule box has the highest priority over exclusion rule boxes. The **Whitelist** rule box overwrites the blacklist, skip, and ROI rule boxes. * Leave some range between the priorities of several rule boxes. The priority value of *10* in between two rule boxes is enough. * If you want to make all of your skip and blacklist rule boxes stronger than the Whitelist rule box, don't update them all. Only change the priority of the Whitelist rule box to a negative value. Keep the default priority value of *0* for the rest of the rule boxes, which automatically makes them stronger. * Add the **Comment** rule box to the connection where you added a rule box with the priority to have a quick overview of the priorities. The Comment rule box doesn't change the feed data but only serves as information displayed in a tooltip when you hover over the circle on the connection in Dataflow. For example, you want to exclude the out-of-stock products made from cotton, silk, and fur, even if some of the products for females are whitelisted. As whitelisting overweights the skip rule boxes, you need to prioritize the rule boxes as follows: Add the **Skip Row if Value In** rule box in the material attribute. Enter the names of the materials and set the priority to *10*. UUID-ac02c1d1-5254-7c21-25c3-450f21ac1b35 Add the **Whitelist Row if Value In** rule box in the **gender** attribute. Enter the gender you want to whitelist. Set the priority to *20*. UUID-f9e0bde7-640d-f879-606a-14ba013cfa8e Add the **Skip Row if Value In** rule box in the **availability** attribute. Enter *out-of-stock* and set the priority to *30*. UUID-9735a89f-7bce-2554-068a-8d138170b7fa | **material** (before) | **gender (before)** | **availability (before)** | **material** (after) | **gender (after)** | **availability (after)** | | --------------------- | ------------------- | ------------------------- | -------------------- | ------------------ | ------------------------ | | *Fur* | *male* | *out-of-stock* | *Fur* | *male* | *out-of-stock* | | *Leather* | *female* | *in-stock* | *Leather* | *female* | *in-stock* | | *Silk* | *male* | *out-of-stock* | *Silk* | *male* | *out-of-stock* | | *Cotton* | *female* | *out-of-stock* | *Cotton* | *female* | *out-of-stock* | In this example, the platform skips the product rows that contain *female* in **gender** and *out-of-stock* in **availability** because the priority of the skip rule box in **availability** is higher than the whitelisting rule box in **gender**. These rule boxes don't change the data in your attributes. They only skip and whitelist products during export if they find the match to the list terms. To let you know which products the rule box excludes during export, it highlights entire product rows in red, not just the attribute where you applied the rule box. Platform-generated attributes for skipped products [#platform-generated-attributes-for-skipped-products] This section explains platform-generated attributes related to skipped products. See the definition of *platform-generated attributes* in [Glossary](/docs/help-center/glossary#para-idm243436063772778). When you add an export in a new site, the platform automatically adds the following attributes: * **\_\_\_skipped\_intermediate** and **\_\_\_whitelist\_intermediate** at the intermediate stage. * **\_\_\_skipped\_intermediate**, **\_\_\_whitelist\_intermediate**, **\_\_\_skipped\_export**, and **\_\_\_whitelist\_export** at the export stage. When you add a blacklist or skip rule box, the platform locates the corresponding **\_\_*skipped*\{stage}** attribute at the intermediate and export stages to add information about the blacklist or skip rule box that makes the platform skip the product during export. For example, if you add a rule box at the intermediate stage to skip all shoes and purses during export, the platform adds the rule box priority, the attribute name where you applied the skip rule box, and the skip reason in **\_\_\_skipped\_intermediate** at the intermediate and export stages to all skipped shoes and purses in your feed. If a product doesn't have a value in **\_\_*skipped*\{stage}**, no rule boxes make the platform skip this product during export at the given stage. When you add a blacklist or skip rule box, Data View doesn't immediately display new values in the corresponding **\_\_*skipped*\{stage}** attributes. To see these values, you need to run your site by selecting **Run** in the top-right corner of the site. In most cases, you don't need to use these attributes as they serve a purely technical function. But you can check their values to find out more about your skipped products. See [Whitelist feature](/docs/help-center/map-and-optimize-your-data/lists/whitelist-feature#section-idm2473753000176920) for more information on **\_\_*whitelist*\{stage}** attributes. # Rule box category Edit text import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The category *Edit text* contains all rule boxes that can help you edit text values. Using the rule boxes in this category, you can perform a variety of tasks, such as change text capitalization, remove emojis and repeating words, use keywords to predict categories, work with HTML tags, and translate Google categories. UUID-69a672f4-6a35-e104-65e8-a8871343f942 This category can be divided into several subgroups. In the following sections, you can find how to use the rule boxes of the *Edit text* category: * [Change capitalization](#section-idm243437774865980) * [Replace words using lists](#section-idm234450243592528) * [Remove unnecessary words, tags, or symbols](#section-idm234450244048419) * [Merge, translate, or predict text values](#section-idm234450265955827) Change capitalization [#change-capitalization] The *Edit text* rule box category contains the rule boxes **Capitalize Words**, **Lowercase**, **Uppercase**, and **Uppercase to human** to let you modify the capitalization of words in your text values. Capitalize Words [#capitalize-words] The **Capitalize Words** rule box edits your text values by capitalizing every word or only the first word in a text. If needed, it can also convert other capital letters in your text values into lowercase. You can use the **Capitalize Words** rule box to remove the camel case, such as *brownShoesWithBuckle*, from your texts. However, this rule box doesn't add spaces between words when removing the camel case. For this purpose, we recommend using the **Separate Words** rule box instead. See [Separate Words](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/clean-up-values#section-idm243445225448406). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Capitalize Words** rule box. UUID-884d47d1-3f18-bf2a-b206-72f39f87b33d Select a capitalization method in **Makes Every First Letter Uppercase**: * *LEAVE UPPERCASE* capitalizes each word in the text. If any other letters in a word, besides the first letter, are uppercase, this option leaves them unchanged.For example, it converts *All WordsIn the string* into `All WordsIn The String`. * *Convert Uppercase* capitalizes each word in the text and converts uppercase letters within words into lowercase.For example, it converts *only theFirst letter of each word* into `Only Thefirst Letter Of Each Word`. * *Only first letter* capitalizes the first letter in the value and converts the rest of the text into lowercase.For example, it converts *not all words. Only the first letter IN THE STRING* into `Not all words. only the first letter in the string`. Select **Save**. For example, you have the following values in the **description** attribute and want to capitalize all words in the texts without removing capital letters within words. You can achieve this with the **Capitalize Words** rule box by selecting *LEAVE UPPERCASE* as the capitalization method: | **description** (before) | **description** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | *TheManufacturerUsesOnlyNaturalMaterials* | *TheManufacturerUsesOnlyNaturalMaterials* | | *the manufacturer uses only natural and hypoallergenic materials to produce these dog blankets. colors available: brown, gray, green, and blue. size range: XS, S, L, and XXL* | `The Manufacturer Uses Only Natural And Hypoallergenic Materials To Produce These Dog Blankets. Colors Available: Brown, Gray, Green, And Blue. Size Range: XS, S, L, And XXL` | | *COLORS AVAILABLE: black, gray, white, green, yellow, and lilac. Size range: XS, S, M, L, XL, and XXL* | `COLORS AVAILABLE: Black, Gray, White, Green, Yellow, And Lilac. Size Range: XS, S, M, L, XL, And XXL` | Lowercase [#lowercase] The **Lowercase** rule box edits your text values by converting all capital letters to lowercase. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Lowercase** rule box. UUID-cb7fe4b3-b3b6-f39c-aeb6-3740e5bd6d81 Select **Save**. For example, you have the following values in the **description** attribute and want to make all your text lowercase. You can achieve this with the **Lowercase** rule box: | **description** (before) | **description** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | *TheManufacturerUsesOnlyNaturalMaterials* | `themanufacturerusesonlynaturalmaterials` | | *the manufacturer uses only natural and hypoallergenic materials to produce these dog blankets. colors available: brown, gray, green, and blue. size range: XS, S, L, and XXL* | `the manufacturer uses only natural and hypoallergenic materials to produce these dog blankets. colors available: brown, gray, green, and blue. size range: xs, s, l, and xxl` | | *COLORS AVAILABLE: black, gray, white, green, yellow, and lilac. Size range: XS, S, M, L, XL, and XXL* | `colors available: black, gray, white, green, yellow, and lilac. size range: xs, s, m, l, xl, and xxl` | Uppercase [#uppercase] The **Uppercase** rule box edits your text values by converting them into all capital letters. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Uppercase** rule box. UUID-6ecf99d9-dd7b-2c1d-f19b-644efa924fe8 Select **Save**. For example, you have the following values in the **description** attribute and want to capitalize all the text. You can achieve this with the **Uppercase** rule box: | **description** (before) | **description** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | *TheManufacturerUsesOnlyNaturalMaterials* | `THEMANUFACTURERUSESONLYNATURALMATERIALS` | | *the manufacturer uses only natural and hypoallergenic materials to produce these dog blankets. colors available: brown, gray, green, and blue. size range: XS, S, L, and XXL* | `THE MANUFACTURER USES ONLY NATURAL AND HYPOALLERGENIC MATERIALS TO PRODUCE THESE DOG BLANKETS. COLORS AVAILABLE: BROWN, GRAY, GREEN, AND BLUE. SIZE RANGE: XS, S, L, AND XXL` | | *COLORS AVAILABLE: black, gray, white, green, yellow, and lilac. Size range: XS, S, M, L, XL, and XXL* | `COLORS AVAILABLE: BLACK, GRAY, WHITE, GREEN, YELLOW, AND LILAC. SIZE RANGE: XS, S, M, L, XL, AND XXL` | Uppercase to human [#uppercase-to-human] The **Uppercase to human** rule box edits your text values by converting all words in uppercase to the title case. A word must be over 3 characters long and contain only capital letters for the rule box to change its capitalization. Here, using the title case means capitalizing the first letter of a word and writing the rest of the word in lowercase. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Uppercase to human** rule box. UUID-cf50809c-a51e-3a3d-90e2-f047be1b8cf5 Select **Save**. For example, you have the following values in the **description** attribute and want to convert all-caps words to lowercase but capitalize their first letters. You can achieve this with the **Uppercase to human** rule box: | **description** (before) | **description** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *The MANUFACTURER uses ONLY natural and hypoallergenic materials to produce these DOG beds. Colors available: black, gray, white, green, yellow, and lilac. Size range: XS, S, M, L, XL, and XXL* | `The Manufacturer uses Only natural and hypoallergenic materials to produce these DOG beds. Colors available: black, gray, white, green, yellow, and lilac. Size range: XS, S, M, L, XL, and XXL` | | *The manufacturer USEs only natural and hypoallergenic materials to produce these dog blankets. Colors available: brown, gray, green, and blue. Size range: XS, S, L, and XXL* | `The manufacturer USEs only natural and hypoallergenic materials to produce these dog blankets. Colors available: brown, gray, green, and blue. Size range: XS, S, L, and XXL` | | *COLORS AVAILABLE: black, gray, white, green, yellow, and lilac. size range: XS, S, M, L, and XXL* | `Colors Available: black, gray, white, green, yellow, and lilac. size range: XS, S, M, L, and XXL` | Replace words using lists [#replace-words-using-lists] The *Edit text* rule box category contains the rule boxes **Replacement**, **Replacement Sensitive**, and **Taxonomy Mapping** to let you replace words or phrases in your texts using lists. See [Use lists](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/use-lists) for more information on these rule boxes. See [Lists](/docs/help-center/map-and-optimize-your-data/lists) for more information on available list types. Remove unnecessary words, tags, or symbols [#remove-unnecessary-words-tags-or-symbols] The *Edit text* rule box category contains the rule boxes **Remove Duplicate Words**, **Remove Emojis 👍🏻**, **Convert HTML Linebreaks**, and **Sanitize HTML** to let you remove unnecessary content from your texts. Remove Duplicate Words [#remove-duplicate-words] The **Remove Duplicate Words** rule box edits your text values by deleting repetitive terms and preserving only the first mention of a term in the value. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Remove Duplicate Words** rule box. UUID-3e9cb83b-ce6d-edbb-f5ab-a8a68d799555 In **Delimiter**, enter the character or characters that separate terms in your values. For example, it can be a comma, a colon, a slash, or any combination of alphanumeric characters that function as a delimiter in your values. If you leave this field empty, the rule box uses one space character as a delimiter. Select **Save**. For example, you have the following values in the **sizes** attribute and want to remove all repeating sizes. You can achieve this with the **Remove Duplicate Words** rule box by entering a comma and a space character (`,`) as the delimiter: | **sizes** (before) | **sizes** (after) | | -------------------------------------- | ------------------------------- | | *XS, S, M, S, L, XL, M, XXL* | `XS, S, M, L, XL, XXL` | | *XS, S, M, L, S, XS, XL, XXL, and XXL* | `XS, S, M, L, XL, XXL, and XXL` | | *M L M XL* | *M L M XL* | | *S, L, XXL* | *S, L, XXL* | In the second row, XXL stays twice because you use a comma and a space (`,`) as a delimiter. The platform considers terms in between these delimiters. Thus, the terms `XXL` and `and XXL` aren't duplicates. Remove Emojis 👍🏻 [#remove-emojis-] The **Remove Emojis 👍🏻** rule box edits your text values by deleting emojis. If the rule box doesn't detect and delete all unwanted emojis from your texts, contact [support@productsup.com](mailto:support@productsup.com). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Remove Emojis 👍🏻** rule box. UUID-526a17c7-b6cc-df55-75f7-5ef00776502b Select **Save**. For example, you have the following values in the **description** attribute and want to delete all emojis. You can achieve this with the **Remove Emojis 👍🏻** rule box: | **description** (before) | **description** (after) | | ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | | *The manufacturer uses only natural and hypoallergenic materials to produce these dog beds 🛏️* | `The manufacturer uses only natural and hypoallergenic materials to produce these dog beds` | | *COLORS AVAILABLE: black 🖤, green 💚, yellow 💛, and lilac 💜. Size range: XS, S, M, L, XL, and XXL* | `COLORS AVAILABLE: black , green , yellow , and lilac . Size range: XS, S, M, L, XL, and XXL` | If you have unneeded spaces left in the values after applying the **Remove Emojis 👍🏻** rule box, you can use the **Text Replace** rule box to replace commas and periods preceded by spaces with commas and periods with no spaces. See [Text Replace](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/replace-values#N1658483877601). If the unneeded spaces are at the start or end of the value, you can delete them using the rule box **Remove Spaces At Beginning And End (Trim)**. See [Remove Spaces At Beginning And End (Trim)](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/clean-up-values#section-idm243449520303434). Convert HTML Linebreaks [#convert-html-linebreaks] The **Convert HTML Linebreaks** rule box edits your text values by separating them into paragraphs at the HTML tag `
`. To separate your texts into paragraphs, you should first add `
` tags within your values where you want new paragraphs to start.
Line breaks aren't available in your Productsup organization by default. To activate line breaks for the needed sites and use the **Convert HTML Linebreaks** rule box, contact [support@productsup.com](mailto:support@productsup.com). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Convert HTML Linebreaks** rule box. UUID-854d8bfa-411d-68de-e7a6-9bb6e72e6300 Select **Save**. For example, you have the following values in the **description** attribute and want to separate them into paragraphs using `
` tags. You can achieve this with the **Convert HTML Linebreaks** rule box:
| **description** (before) | **description** (after) | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *The manufacturer uses only natural and hypoallergenic materials to produce these dog blankets. \
Colors available: brown, gray, green, and blue. \
Size range: XS, S, M, L, XL, XXL* | `The manufacturer uses only natural and hypoallergenic materials to produce these dog blankets.``Colors available: brown, gray, green, and blue.``Size range: XS, S, M, L, XL, XXL` | | *This white wine is produced with aromatic Riesling grapes and comes from the Mosel region in southwest Germany. It is the most iconic region of German Rieslings that boasts an abundance of well-known vineyards. \
This bottle of white wine is from the 2002 vintage. It has a nice balanced palette with white-flower notes.* | `This white wine is produced with aromatic Riesling grapes and comes from the Mosel region in southwest Germany. It is the most iconic region of German Rieslings that boasts an abundance of well-known vineyards.``This bottle of white wine is from the 2002 vintage. It has a nice balanced palette with white-flower notes.` | Sanitize HTML [#sanitize-html] The **Sanitize HTML** rule box simplifies your HTML values by removing all HTML tags and tag attributes except for the standard formatting tags, such as `a`, `b`, `sup`, `sub`, `em`, `strong`, `p`, `br`, `hr`, `h1`, `h2`, `h3`, `h4`, `h5`, `h6`, `ul`, `ol`, `li`, `div`, `table`, `thead`, `tbody`, `tfoot`, `tr`, `th`, `td`, `colgroup`, and `blockquote`. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Sanitize HTML** rule box. UUID-5600f8a7-ce21-11e1-e2b1-845f42dc05d2 Select **Save**. For example, you have the following values in the **description\_html** attribute and want to remove excessive tags and tag attributes from these HTML bodies. You can achieve this with the **Sanitize HTML** rule box: | **description\_html** (before) | **description\_html** (after) | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `

Flat leather sandals with a bow

` | `

Flat leather sandals with a bow

` | | ` ` | \[empty] | | `

Power Smoothie - Start the day with an energy boost.


5 reasons to buy it:
  • Gluten free,
  • Vitality,
  • Iron and Calcium,
  • 100% organic,
  • Brazilian fruits: Acai (29%), Grape (25%), Mango (18%), Banana (17%), Pineapple (11%).

` | `

Power Smoothie - Start the day with an energy boost.


5 reasons to buy it:
  • Gluten free,
  • Vitality,
  • Iron and Calcium,
  • 100% organic,
  • Brazilian fruits: Acai (29%), Grape (25%), Mango (18%), Banana (17%), Pineapple (11%).

` | Merge, translate, or predict text values [#merge-translate-or-predict-text-values] The *Edit text* rule box category contains these rule boxes: * **Merge Values by Delimiter** to merge text values from other attributes. * **Categorize by Keywords** to predict category values using the content of other attributes. * **Translate Google Category** to translate category values. Merge Values by Delimiter [#merge-values-by-delimiter] The **Merge Values by Delimiter** rule box finds delimiter-separated items in the values of two chosen attributes, rearranges them, and assigns the rearranged items in the current attribute, separating them with a desired delimiter. See [the rule box setup example](#informalexample-idm243454180265982) to understand how the rule box rearranges delimiter-separated items. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Merge Values by Delimiter** rule box. UUID-77d67810-0b47-0a21-ab72-3ce37fce3ab4 In **Attribute 1**, choose the first attribute where the rule box should look for delimiter-separated items. In **Delimiter in attribute 1**, enter the delimiter used in the first attribute. In **Attribute 2**, choose the second attribute where the rule box should look for delimiter-separated items. In **Delimiter in attribute 2**, enter the delimiter used in the second attribute. In **Output delimiter**, enter the delimiter that should separate newly arranged items in the current attribute. To add any symbols before or after all rearranged items of the first attribute: 1. Enter the desired text in the input field next to the drop-down list. 2. Choose the suitable option in the drop-down list: 3. *Text before first attribute* adds the desired text before each item of the first attribute. 4. *Text after first attribute* adds the desired text after each item of the first attribute. Select **Save**. For example, you have the following values in the **sizes** and **items\_in\_stock** attributes and want to display stock levels per each size in **stock\_per\_size**. You can achieve this with the following setup of the **Merge Values by Delimiter** rule box: UUID-aeb75da2-9a13-fb25-a614-6a6a7bdf46f6 All input fields in this setup example have a space character at the end, except for **Delimiter in attribute 2**. | **sizes** (no changes) | **items\_in\_stock** (no changes) | **stock\_per\_size** (before) | **stock\_per\_size** (after) | | ---------------------- | --------------------------------- | ----------------------------- | ---------------------------------------------------- | | *XS, S, M, L, XL, XXL* | *17:20:39:40:29:13* | | `XS - 17, S - 20, M - 39, L - 40, XL - 29, XXL - 13` | | *S, M, XL* | *7:22* | | `S - 7, M - 22, XL` | | | *62:20:1* | | `- 62` | | *XXS, M, L* | *14:34.26* | | `XXS - 14, M - 34.26, L` | | *S, L, XXL* | *1:33:18* | | `S - 1, L - 33, XXL - 18` | If the attributes you choose in the rule box setup don't contain any data, the rule box assigns an empty value or, if provided, the text from the input field at the bottom of the rule box. If the delimiters entered in the rule box setup don't exist in the chosen attributes, the rule box doesn't work as expected. Categorize by Keywords [#categorize-by-keywords] The **Categorize by Keywords** rule box uses a replacement list to assign a category based on the keywords found in the needed attribute, such as **description** or **title**. This rule box can be useful if you don't need categorization for any specific classification system but want to create your categories based on the existing product titles or descriptions. The rule box can scan large texts to find the keywords and assign a corresponding category based on the highest score. The scoring rules are as follows: * If there is no match, the output is empty. * The text should have all the words from the search term in the replacing list. * The order of the words in the text doesn't matter. * Text matching is case-insensitive; for example, `blue` matches `Blue`. * The repeating words are counted only once. For example, `women’s shoes, ladies’ shoes, girls’ shoes` matched against `women's shoes, ladies' shoes` would score 3: `women's`, `ladies'`, `shoes`. * Only whole words match: the word `shoe` doesn't match `shoes`. * Every word, including 1-letter words, counts. For example, `Three Men in a Boat: To Say Nothing of the Dog` matched against `a dog` will result in a score of 2: `a` and `dog`. Create a list of terms you need to replace using the *Standard* or *Dynamic Replacement* list. See [Lists](/docs/help-center/map-and-optimize-your-data/lists#section-idm13275861981064) to choose a required type. In Dataflow, connect from import to intermediate the attribute containing keywords to the attribute where you want to store categories. For example, you can connect **description** to **category**. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Categorize by Keywords** rule box to the attribute where you want to store categories. UUID-79f32524-c06a-4485-99fa-12c8dc3dea7c In **Search in Column**, select an attribute where you want to search for the keywords from the list. Choose the replacement list from the **List** drop-down menu. Select **Save**. For example, you want to create categories based on the existing product descriptions. You can achieve this by adding terms to the replacement lists and setting up the **Categorize by Keywords** rule box as follows: UUID-adfd1235-4cc5-2fcb-ddd4-6594e4edb4eb UUID-fb1c2cc2-50de-a5a4-8761-6d997e56ad55 | **description** | **category** (before) | **category** (after) | | ------------------------------------------------------------------------ | --------------------- | -------------------- | | *Women's Top, Classic Cut, Basic Short Sleeve Crop Top, Crew Neck, Blue* | *clothes* | `Tops & T-Shirts` | | *Women's Top, Casual Cut, Basic Short Sleeve, Crew Neck, White* | *clothes* | `Tops & T-Shirts` | | *Women's Top, Basic Long Sleeve Crop Top, V-Neck, Red* | *clothes* | `Long Sleeves` | | *Women's Dress, Basic Long Sleeve, V-Neck, White* | *clothes* | `Long Dresses` | | *Women's Dress, Long, White* | *clothes* | `Long Dresses` | | *Women's Dress* | *clothes* | | In this example, the rule box replaces existing category values with the categories in the replacement list and makes values that don't match empty. The matching and category assignment is based on the scoring rules. In this example, the category with more unique words in the text wins. Also, when the number of unique words is equal, the exact match wins. For example, the fourth row contains two matches for two categories: `Long Sleeve` and `Dress Long`. The *Long Dresses* category wins as the keywords match exactly the search term in the list. In case of the *Long Sleeve* win, the text should contain `Top Long Sleeve`. UUID-cb753548-9295-de47-8a75-1213e8ce1cd6 Translate Google Category [#translate-google-category] Google accepts only a predefined list of values in the **category** attribute. You can use a *Partner Taxonomy Mapping* list to ensure your **category** attribute contains values accepted by Google. See [Replace attributes with Partner Taxonomy Mapping list](/docs/help-center/map-and-optimize-your-data/lists/replace-attributes-with-partner-taxonomy-mapping-list) for more information. With the **Translate Google Category** rule box, you can translate your Google categories from one language to another. You can also change your Google categories in any language to the associated category IDs, which are the same for all languages. The rule box empties the values in those products that contain invalid categories. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Translate Google Category** rule box. UUID-032b21ed-f260-b5ca-c653-bb858d62d9fb In **Source Format**, select the current language and country of your Google categories.Choose *id* if your category attribute contains category IDs instead of spelled-out category names. In **Target Format**, select the language and country you want to translate your Google categories into.Choose *id* if you want to transform your spelled-out category names into category IDs. You can remove all invalid categories from your category attribute without translating them by selecting the same languages in **Source Format** and **Target Format**. Select **Save**. For example, your **category** attribute contains valid Google categories for the US in English, and you need to translate them into valid Google categories in German. | **category** (before) | **category** (after) | | ------------------------------------------------------- | ----------------------------------------------------------------- | | *Apparel & Accessories > Shoe Accessories > Slippers* | \[empty] | | *Home & Garden > Linens & Bedding > Bedding > Blankets* | `Heim & Garten > Bett- und Haushaltswäsche > Bettwäsche > Decken` | | *Apparel & Accessories > Clothing > Underwear & Socks* | `Bekleidung & Accessoires > Bekleidung > Unterwäsche & Socken` | If you select *id* in **Target Format** for the same use case, the rule box outputs the following: | **category** (before) | **category** (after) | | ------------------------------------------------------- | -------------------- | | *Apparel & Accessories > Shoe Accessories > Slippers* | | | *Home & Garden > Linens & Bedding > Bedding > Blankets* | `1985` | | *Apparel & Accessories > Clothing > Underwear & Socks* | `213` | # Rule box category Work with prices & math import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The category *Work with prices & math* contains all rule boxes that can help you perform calculations, set prices, add VAT, round up numbers, convert currencies, and add discounts. UUID-e755cb70-7e9e-23df-1a72-9a8e8b57100d This category can be divided into several subgroups. In the following sections, you can find how to use the rule boxes of the *Work with prices & math* category: * [Add VAT to your prices and convert currencies](#section-idm234436383776205) * [Add discounts](#section-idm232220851956231) * [Tidy up price formats and amounts](#section-idm234436389583606) * [Perform calculations with numeric attributes](#section-idm232220853762845) Add VAT to your prices and convert currencies [#add-vat-to-your-prices-and-convert-currencies] The *Work with prices & math* rule box category contains the **Add VAT** and **Convert Currency** rule boxes to let you adapt your prices to different markets. Add VAT [#add-vat] The **Add VAT** rule box adds the Value Added Tax to your prices based on a desired percentage. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add VAT** rule box. UUID-01fa46d6-6199-86e6-7e48-1dc41bc63212 In the input field, enter a required tax percentage without the percent symbol (%). If you leave this field empty, the rule box applies 19% VAT by default. Choose how you want to round off the numbers after applying the VAT percentage: * *always round up* rounds off your prices by favoring rounding up. * *round* uses the standard rules of rounding off numbers without favoring rounding up or down. * *always round down* rounds off your prices by favoring rounding down. Select what the rule box should do if a current value isn't a number: * *leave unchanged* doesn't change the current value. * *treat as 0* adds `0` to overwrite the current value. * *return empty string* empties the value. Select **Save**. For example, you have the following values in the **price** attribute. You want to add a 19% VAT to the prices of your products and round them up. You can achieve this with the **Add VAT** rule box: | **price** (before) | **price** (after) | | ------------------ | ----------------- | | *323.69* | `385.2` | | *34.89* | `41.52` | | *3.39* | `4.04` | If you choose the *round* option, your prices will be `385.19`, `41.52`, `4.03`. And if you choose the *always round down* option, your prices will be `385.19`, `41.51`, `4.03`. Convert Currency [#convert-currency] The **Convert Currency** rule box converts prices to a selected currency using the Open Exchange Rates API. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Convert Currency** rule box. UUID-cd7c32f9-e69f-e25b-0f0e-7350e8d55937 In **Source Currency**, select the currency used in your current values. In **Target Currency**, select the target currency you need. In **Default Value**, select what the rule box should do with non-numeric and empty values in the attribute: * *0.00* overwrites non-numeric values with `0.00`. * */empty/* leaves non-numeric values unchanged. Select **Save**. For example, you have the following values in the **price** attribute and want to convert them from USD to EUR. You can achieve this with the **Convert Currency** rule box by selecting *USD* and *EUR* as the source and target currencies: | **price** (before) | **price** (after) | | ------------------ | ----------------- | | *323.69* | `298.27` | | *34.89* | `32.15` | | *3.39* | `3.12` | | | `0.00` | Add discounts [#add-discounts] The *Work with prices & math* rule box category contains the **Discount** and **Discount Percentage** rule boxes to let you calculate prices based on a set discount or the discounted percentage based on the original and the sale prices. Discount [#discount] The **Discount** rule box sets a reduced price if one or two selected attributes contain certain values. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Discount** rule box. UUID-c79e604d-aefb-d729-4231-b267d9c9da06 In **Mandatory Column**, select the attribute that should contain certain values for the rule box to add a discounted price in the current attribute. Choose the condition that the mandatory attribute should meet regarding the searched values: * *Contains* applies the discount if the searched attribute contains one of the provided values. * *Contains not* applies the discount if the searched attribute doesn't contain one of the provided values. * *Is Empty* applies the discount if the searched attribute contains an empty value. If you choose this option, you can skip [see the relevant section](#N1721831606241). * *greater than* applies the discount if the searched attribute contains a number greater than one of the provided values. * *less than* applies the discount if the searched attribute contains a number less than one of the provided values. * *equals to* applies the discount if the searched attribute contains a number equal to one of the provided values or if the searched attribute contains a text value completely identical to one of the provided values. In the text field, enter the values that the rule box should search for in the chosen attribute. To enter multiple terms, start each term from a new line without a delimiter. If you want to apply a discount to all products, you can add this mandatory condition: the **price** attribute should be *greater than*`0`. If you want to apply a discount based on the contents of two attributes, set up a condition for another attribute. If you set up two conditions, a product has to fulfill *both* the mandatory and the optional conditions for the rule box to apply the discount. 1. Select an attribute in **Optional Column**. 2. Choose the condition that the optional attribute should meet regarding the searched values: * *Contains* applies the discount if the searched attribute contains one of the provided values. * *Contains not* applies the discount if the searched attribute doesn't contain one of the provided values. * *Is Empty* applies the discount if the searched attribute contains an empty value. If you choose this option, you can skip [see the relevant section](#N1721835714190). * *greater than* applies the discount if the searched attribute contains a number greater than one of the provided values. * *less than* applies the discount if the searched attribute contains a number less than one of the provided values. * *equals to* applies the discount if the searched attribute contains a number equal to one of the provided values or if the searched attribute contains a text value completely identical to one of the provided values. 3\. In the text field, enter the values that the rule box should search for in the chosen attribute. To enter multiple terms, start each term from a new line without a delimiter. Enter a number without the percent symbol (%) in **Discount** to define the percentage of the discount. In **If column non-numeric**, select what the rule box should do if a current value isn't a number: * *leave unchanged* doesn't change the current value. * *treat as 0* adds `0.00` to overwrite the current value. If the current value is empty, this option leaves it empty. * *return empty string* empties the value. Select **Save**. For example, you have the following values in the **price** attribute and want to apply an 11% discount to all boots and sneakers for women. You can achieve this with the following setup of the **Discount** rule box: UUID-683cf0df-3618-d052-91ba-1746d089db77 | **category** (no changes) | **gender** (no changes) | **price** (before) | **price** (after) | | ---------------------------------------------- | ----------------------- | ------------------ | ----------------- | | *Apparel & Accessories > Shoes > Winter Boots* | *women* | *323.69* | `288.08` | | *Apparel & Accessories > Shoes > Sneakers* | *women* | *34.89* | `31.05` | | *Apparel & Accessories > Shoes > Sneakers* | *men, women* | *3.39* | *3.39* | | *Apparel & Accessories > Shoes > Winter Boots* | *men* | | | Discount Percentage [#discount-percentage] The **Discount Percentage** rule box calculates the difference between two prices, for example, the original and the sale price, and assigns this difference as a percentage in the attribute where you add the rule box. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Discount Percentage** rule box. UUID-4607e9ea-3947-177b-b029-628897ee570c Select the relevant attributes in **Old Price** and **New Price**. The former should be your original price, and the latter should be your discounted price. In **Round Precision**, enter the number of decimal places for your discount percentage. Optionally, you can add text before or after your discount percentage in **Text Before** and **Text After**. Select **Save**. For example, you have empty values in the **discount\_percent** attribute and want to calculate the discount percentage based on the attributes **price** and **discounted\_price**. Besides that, you want **discount\_percent** to display its values with additional text at the end, for example, *30% OFF*. You can achieve this with the following setup of the **Discount Percentage** rule box: UUID-35498572-97c0-577e-5d1d-264bed8da6cb | **price** (no changes) | **discounted\_price** (no changes) | **discount\_percent** (before) | **discount\_percent** (after) | | ---------------------- | ---------------------------------- | ------------------------------ | ----------------------------- | | *323.69* | *288.08* | | `11% OFF` | | *34.89* | *30.00* | | `14% OFF` | | *3.39* | *3.39* | | `0% OFF` | Tidy up price formats and amounts [#tidy-up-price-formats-and-amounts] The *Work with prices & math* rule box category contains the **Make Valid Price** and **Round Numeric Values** rule boxes to let you validate your prices and round them off. Make Valid Price [#make-valid-price] The **Make Valid Price** rule box cleans up the format of the **price** attribute, for example, from *1.234,23 EUR* to `1234.23` as a standard accepted price format. It tidies up price formats by: . Changing the price decimal separator from a comma (*,*) to a dot (`.`) or vice versa. . Removing currency symbols, thousand separators, or other text. To set up the rule box: Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Make Valid Price** rule box. UUID-2d3f1270-0d55-64c5-752f-75b8566edb27 In **Decimal Separator**, select the desired decimal separator: * *dot (1234.23)* separates your decimal places with a dot. * *comma (1234,23)* separates your decimal places with a comma. * *automatic* leaves both dots and commas as decimal separators in your values. In **Default Value**, select what the rule box should do with the empty and non-numeric values in the attribute: * *0.00 or 0,00* overwrites the values with `0.00` or `0,00` based on your chosen decimal separator. * *Empty Column* empties non-numeric values. Select **Save**. For example, you have the following values in the **price** attribute and want to convert them to the standard accepted price format with a dot as a decimal separator. You can achieve this with the **Make Valid Price** rule box: | **price** (before) | **price** (after) | | ------------------ | ----------------- | | *323 EUR* | `323.00` | | *34,89* | `34.89` | | *3.39* | *3.39* | | *INVALID* | `0.00` | Round Numeric Values [#round-numeric-values] The **Round Numeric Values** rule box rounds off the fractional part of a numeric value. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Round Numeric Values** rule box. UUID-1207fdce-31ee-997e-898d-a031828ce045 In **Round Precision**, enter the number of digits after the decimal point that your rounded-off numbers should have. In **If column value is not a number**, select what the rule box should do if a current value isn't a number: * *leave unchanged* doesn't change the current value. * *treat as 0* adds `0` to overwrite the current value. * *return empty string* empties the value. Select **Save**. For example, you have the following values in the **price** attribute and want to round them off to 2 digits after the decimal point. You can achieve this with the **Round Numeric Values** rule box by entering `2` in **Round Precision**: | **price** (before) | **price** (after) | | ------------------ | ----------------- | | *323.6923489* | `323.69` | | *34,89873* | `34.90` | | *3.393* | `3.39` | Perform calculations with numeric attributes [#perform-calculations-with-numeric-attributes] The *Work with prices & math* rule box category contains the rule boxes **Math**, **Column Math**, **Math Template**, and **In-Row Math** to let you perform calculations of varying levels of complexity with the numeric attributes in your site. Math [#math] The **Math** rule box performs calculations with numbers in the current attribute and either a static number provided in the rule box setup or the dynamic numbers from another attribute. See [Add static or dynamic values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/add-static-or-dynamic-values) for the difference between static and dynamic values. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Math** rule box. UUID-22ad499e-0f53-be54-98f6-9ba4969fc003 In **Operator**, select a required operation to add, subtract, multiply, or divide values in the current attribute: - *+* - *-* - *** - */* Choose if you want to perform the calculation using a static or dynamic value: * If you want to make calculations with numbers from a different attribute, choose a relevant attribute in **Column**. * If you want to make calculations with the same number for all products in the current attribute, enter that number in **Static Value**. If you provide both the dynamic and static numbers, the rule box ignores the chosen attribute and makes calculations with the static number. Enter the allowed number of decimal places for the calculated result in **Round Precision**, or leave it empty to produce whole numbers. In **If column not numeric**, select what the rule box should do if a value in the current attribute isn't a number: * *leave unchanged* doesn't change the current value. * *treat as 0* adds `0` to overwrite the current value. * *return empty string* empties the value. Choose how you want to round off the resulting numbers: * *round up* rounds off your numbers by favoring rounding up. * *round* uses the standard rules of rounding off numbers without favoring rounding up or down. * *round down* rounds off your numbers by favoring rounding down. Select **Save**. For example, you have the following values in the **price** attribute and want to add shipping costs from **shipping** to your prices. If the **price** attribute contains an empty or other non-numeric value, you want to treat it as zero. You can achieve this with the following setup of the **Math** rule box: UUID-e5189aa6-3a5d-cc52-3e69-34f2ee7b31af | **shipping** (no changes) | **price** (before) | **price** (after) | | ------------------------- | ------------------ | ----------------- | | *15.46* | *323.69* | `339.15` | | *30* | *34.89* | `64.89` | | *3.39* | *3.39* | `6.78` | | | *10.5* | *10.5* | | *1* | | `1` | Column Math [#column-math] The **Column Math** rule box lets you perform two operations with static numbers provided in the rule box setup or dynamic numbers from other attributes. The rule box uses the following formula: | **current\_attribute** | `+` | ( | **chosen\_attribute\_1**orstatic number 1 | `+` | **chosen\_attribute\_2**orstatic number 2 | ) | `=` | result that overwrites the value in **current\_attribute** | | ---------------------- | --- | - | ----------------------------------------- | --- | ----------------------------------------- | - | --- | ---------------------------------------------------------- | * You can choose other operations, not only addition (**+**). * *The rule box calculates the part in brackets first.* Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Column Math** rule box. UUID-bf2483c5-c8d4-76b3-63e5-bc0efc731f41 In **Current Field Value**, select a required operation to add, subtract, multiply, or divide values in the current attribute. This operation takes place *second*. - *+* - *-* - *** - */* In **Operator**, select a required operation to add, subtract, multiply, or divide the provided static numbers or the dynamic numbers of the chosen attributes. This operation takes place *first*. - *+* - *-* - *** - */* Choose the first number for the first operation: * If you want to make calculations with numbers from a different attribute, choose a relevant attribute in **Input Column 1**. * If you want to make calculations with a static number, enter that number in **Input Static Value 1**. Choose the second number for the first operation: * If you want to make calculations with numbers from another attribute, choose a relevant attribute in **Input Column 2**. * If you want to make calculations with a static number, enter that number in **Input Static Value 2**. Enter the allowed number of decimal places for the calculated result in **Round Precision**, or leave it empty to produce whole numbers. Select **Save**. For example, you have the following values in the **price** attribute and want to add shipping costs from **shipping** to your prices. But the **shipping** attribute contains shipping costs for a package of products, while you need to add individual shipping costs to **price**. You first need to divide the shipping costs by the number of items in a package from **items\_in\_package** and then add the result to **price**. You can achieve this with the following setup of the **Column Math** rule box: UUID-d8c046d5-da2b-08e2-ffa0-29f90e5731ea | **shipping** (no changes) | **items\_in\_package** (no changes) | **price** (before) | **price** (after) | | ------------------------- | ----------------------------------- | ------------------ | ----------------- | | *15.46* | *1* | *323.69* | `339.15` | | *30* | *18* | *34.89* | `36.56` | | *3.39* | *2* | *3.39* | `5.09` | Here is the formula used in the rule box, with the numbers from the second row: `34.89+(30/18)=36.56`. Math Template [#math-template] The **Math Template** rule box lets you perform your calculations with a custom formula. You can use the current attribute, up to 3 other attributes, and any static numbers to perform calculations via [Twig](https://twig.symfony.com/). With Twig, you can create custom formulas, such as: ``` {{ (value / column1) * 45 + column2 }} ``` You can use the following operators in Twigs: * For addition, subtraction, division, and multiplication, use `+`, `-`, `/`, and `*`, respectively. * For calculating the remainder of an integer division, use `%`. For example, `{{ 11 % 7 }}` is 4. * For raising the left operand to the power of the right operand, use `**`. For example, `{{ 2 ** 3 }}` is 8. * For floor division, use `//`. For example, `{{ 20 // 7 }}` is 2. See [Twig Fiddle](https://twigfiddle.com) to create and test your formulas. See [Twig-based rule box capabilities to enhance your product data](/docs/help-center/add-a-rule-box/advanced-rule-box-options/twig-based-rule-box-capabilities-to-enhance-your-product-dat) for use cases and rules for creating Twigs in Productsup. To set up the **Math Template** rule box: Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Math Template** rule box. UUID-4b53caa9-779c-a410-e811-ca2f574ae8a4 In **Optional Column 1**, **Optional Column 2**, and **Optional Column 3**, select up to 3 attributes if you want to use their values in your calculations. In **Twig Template**, enter a valid Twig that should work as your formula. Use the **>\_** icon to get an AI-generated suggestion for a valid Twig. UUID-93f71599-4f5d-e8ba-68dc-8fcad8ed9679 * The Twig should begin and end with curly brackets and spaces: `{{ calculation }}`. * You must refer to the values of the current attribute as `value`. * You must refer to the values of the chosen attributes as `column1`, `column2`, or `column3`. Enter the allowed number of decimal places for the calculated result in **Round Precision**, or leave it empty to avoid trimming the resulting numbers. Select **Save**. For example, you have the following values in the **price** attribute and want to add shipping costs from **shipping** and import tax costs from **import\_tax** to your prices. But the **shipping** and **import\_tax** attributes contain costs for a package of products, while you need to add individual costs to **price**. You first need to divide the shipping and import tax costs by the number of items in a package from **items\_in\_package** and then add the result to **price**. You can achieve this with the following setup of the **Math Template** rule box: UUID-320a2fb9-09b7-a7df-e1bc-3c97c535cf71 The Twig used in this setup is `{{ value + (column1 / column3) + (column2 / column3) }}`. | **shipping** (no changes) | **import\_tax** (no changes) | **items\_in\_package** (no changes) | **price** (before) | **price** (after) | | ------------------------- | ---------------------------- | ----------------------------------- | ------------------ | ----------------- | | *15.46* | *74.4487* | *1* | *323.69* | `413.6` | | *30* | *8.0247* | *18* | *34.89* | `37` | | *3.39* | *0.7797* | *2* | *3.39* | `5.47` | Here is the formula used in the rule box, with the numbers from the second row: `34.89+(30/18)+(8.0247/18)=37`. In-Row Math [#in-row-math] The **In-Row Math** rule box adds or multiplies the numbers in a value if they are separated by a delimiter. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **In-Row Math** rule box. UUID-2fcd901c-7462-d54b-86c3-618ef15cb0ad In **Delimiter**, enter a character that separates numbers in your attribute values. Common delimiters are commas (**,**), semicolons (**;**), quotes (**"** or **'**), braces (**\{}**), pipes (**|**), or slashes (**/** or \*\*\*\*). In **Operator**, define what you want to do with the numbers in your values: * *Add* delivers a sum of the delimited numbers. * *Multiply* delivers a product of the delimited numbers. Select **Save**. For example, your **items** attribute stores the number of items in stock for each product size, separated with a delimiter, and you want to add them all up to know the total number of products in stock. You can achieve this with the **In-Row Math** rule box by entering `,` as the delimiter: | **items** (before) | **items** (after) | | ------------------ | ----------------- | | *1,42,6,3* | `52` | | *6,2,1,6* | `15` | | *3/12,54,6* | `63` | In the last row, you can see that the rule box ignores the number separated from other numbers with a different delimiter. # Rule box category Add static or dynamic values import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The category *Add static or dynamic values* contains all rule boxes that can help you prepend, append, or assign desired values to an attribute. If needed, you can choose the requirements your current attribute values should meet for the platform to add new values. UUID-ae232370-7438-4ad9-b51a-421c5f8e66cc This category can be divided into several subgroups. In the following sections, you can find how to use the rule boxes of the *Add static or dynamic values* category: * [Add a static value without conditions](#section-idm234510882906042) * [Add a dynamic value without conditions](#section-idm234510883212357) * [Add a static value if the current attribute meets a condition](#section-idm243451275868840) * [Add a dynamic value if the current attribute meets a condition](#section-idm243451948846480) * [Add a static value if other attributes meet a condition](#section-idm243453530411122) * [Add a dynamic value if other attributes meet a condition](#section-idm243456096702326) Static vs. dynamic values [#static-vs-dynamic-values] Adding a *static* value in an attribute means adding the same value to your products. For example, if you apply a rule box that appends the static value *BUY NOW* to the **title** attribute where the current values are *Red Wine Magnum*, *White Wine Standard*, and *Rosé Piccolo*, your products will have the following titles: UUID-6c134353-b735-2f05-f9ba-f374c9cb3cc9 Adding a *dynamic* value in an attribute means adding the values of another attribute to your products. For example, if you apply a rule box that appends the dynamic value of the **volume** attribute to the **title** attribute where the current values are *Red Wine Magnum*, *White Wine Standard*, and *Rosé Piccolo*, your products will have the following titles: UUID-bdcab987-91cb-f1cb-30ec-a681e5be047f If the values of the **volume** attribute change during the next site runs, the platform updates the **title** attribute with the corresponding updated values. For example, if the platform imports the value *2 L* instead of *1.5 L* for the product during the next site run, the platform updates the product's title from *Red Wine Magnum 1.5 L* to `Red Wine Magnum 2 L`. Add a static value without conditions [#add-a-static-value-without-conditions] The *Add static or dynamic values* rule box category contains the rule boxes **Append/Prepend Value** and **Static Value** to let you add a desired static value to all products. These rule boxes don't let you set any conditions. They modify all values of the attribute where you apply them. Append/Prepend Value [#appendprepend-value] The **Append/Prepend Value** rule box adds a static value at the beginning or end of the current value across all products. * The difference between the **Append/Prepend Value** and **Static Value** rule boxes is that the latter rule box has more value modification options. See [Static Value](#section-idm243451095539816). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Append/Prepend Value** rule box. UUID-29a31d61-1c09-d748-fd23-f36b0b2f8dcc In **Mode**, select a suitable value modification option: 1. *append* adds the desired value at the end of the current value. This is the default option. 2. *prepend* adds the desired value at the beginning of the current value. In **Value**, enter a desired string that the rule box should add to all current values. If you want to add a piece of text to your values, add a space character before or after the text to separate it from the rest of the value. Select **Save**. For example, you have the following values in your **title** attribute and want all products to have the text *30% OFF* at the end of their titles. You can achieve this with the **Append/Prepend Value** rule box by entering `30% OFF` in **Value**: | **title** (before) | **title** (after) | | --------------------------------- | ----------------------------------------- | | *Flat leather sandals with a bow* | `Flat leather sandals with a bow 30% OFF` | | *High-heel sandals with a buckle* | `High-heel sandals with a buckle 30% OFF` | | | `30% OFF` | Static Value [#static-value] The **Static Value** rule box adds a value across all products by overwriting the existing value or adding the desired string at the beginning or end of the current value. * The difference between the **Append/Prepend Value** and **Static Value** rule boxes is that the latter rule box has more value modification options. See [Append/Prepend Value](#section-idm243451095559490). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Static Value** rule box. UUID-3bc47107-4459-1595-5688-d7a5c5f89222 In the **Value** field, enter a desired static value that the rule box should add to all products. If you choose the *append* or *prepend* mode in the next step, add a space character before or after your provided static value to separate it from the rest of the current value. In the drop-down menu, select a suitable value modification option: 1. *assign* completely overwrites the current value with the provided static value. This is the default option. 2. *append* adds the provided static value at the end of the current value. 3. *prepend* adds the provided static value at the beginning of the current value. Select **Save**. For example, you have the following values in your **currency** attribute and want all products to have the value *EUR* instead. You can achieve this with the **Static Value** rule box by entering `EUR` in the **Value** field: | **currency** (before) | **currency** (after) | | --------------------- | -------------------- | | *euro* | `EUR` | | *USD* | `EUR` | | \[empty] | `EUR` | Add a dynamic value without conditions [#add-a-dynamic-value-without-conditions] The *Add static or dynamic values* rule box category contains the rule box **Append/Prepend Column** to let you add the dynamic values of a desired attribute to all products in the current attribute. This rule box doesn't let you set any conditions. It modifies all values of the attribute where you apply it. Append/Prepend Column [#appendprepend-column] The **Append/Prepend Column** rule box adds the values of a selected attribute at the beginning or end of the value in the current attribute and separates the added value from the rest of the value with a space character. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Append/Prepend Column** rule box. UUID-de9be9ea-01fa-8d40-7f28-e1ace3c1f4f5 In **Column**, select the attribute whose values you want to add to the current attribute. The attributes listed here come from a previous stage. The values you add also come from a previous stage. In **Mode**, select a suitable value modification option: 1. *append* adds the dynamic values at the end of the current value. This is the default option. 2. *prepend* adds the dynamic values at the beginning of the current value. Optionally, you can add a static text before or after the added dynamic values: 1. In the **text** field at the bottom, enter the static text you want to add to your current values together with the chosen dynamic values. 2. In the drop-down menu on the left, select where you want to add the desired static text: 3. *Text Before* adds the static text before the dynamic value. You may need to add a space character after your static text to separate it from the dynamic value. 4. *Text After* adds the static text after the dynamic value. You may need to add a space character before your static text to separate it from the dynamic value. Select **Save**. For example, you have the following values in your **title** attribute and want all products to feature the name of their brands from **brand**, introduced with *by* at the end of their titles. You can achieve this with the following setup of the **Append/Prepend Column** rule box: UUID-f2dcb9a6-9614-d992-7ca0-98fa5b4ebf21 | **brand** (no changes) | **title** (before) | **title** (after) | | ---------------------- | --------------------------------- | -------------------------------------------------- | | *Massimo Dutti* | *Flat leather sandals with a bow* | `Flat leather sandals with a bow by Massimo Dutti` | | | *High-heel sandals with a buckle* | `High-heel sandals with a buckle` | | *COS* | *Square-toed loafers* | `Square-toed loafers by COS` | Add a static value if the current attribute meets a condition [#add-a-static-value-if-the-current-attribute-meets-a-condition] The *Add static or dynamic values* rule box category contains the rule boxes **Add Value if Fits**, **Append/Prepend Value if not Empty**, **Contains String**, **Extend Text**, **Set Value by Datetime**, **Set Value if Empty**, **Set Value if Greater Than**, and **Set Value if Less Than**. These rule boxes let you add static values to your products if the current value meets a condition. If you don't find a rule box with the needed condition in this section, see [Add a static value if other attributes meet a condition](#section-idm243453530411122). Although these rule boxes are initially meant to check the contents of other attributes for a condition, they can also help you add a static value to your current attribute if your current attribute meets a condition. You just need to choose your current attribute in the setup. Add Value if Fits [#add-value-if-fits] The **Add Value if Fits** rule box lets you add a word or phrase to your current values if the overall length of the resulting value doesn't exceed a desired character limit. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add Value if Fits** rule box. UUID-d19b7987-387a-3995-c613-cf5a513c7353 In **Mode**, select where you want to add a string within the current value: 1. *append* adds the string at the end of the current value. To separate it from the rest of the text, add a space character at the beginning of your input in **Text**. 2. *prepend* adds the string at the beginning of the current value. To separate it from the rest of the text, add a space character at the end of your input in **Text**. Enter the string you wish to append or prepend to your current values in **Text**. Enter the desired character limit in **Max Length**. If a current value exceeds the character limit you set in this field, the Add Value if Fits rule box doesn't add any text to the value and doesn't cut it to fit the limit. Select **Save**. For example, you have the following values in the **title** attribute and want to add *ORDER NOW* at the end of each title if the overall length of the resulting value doesn't exceed 150 characters. You can achieve this with the following setup of the **Add Value if Fits** rule box: UUID-65e964d4-41f7-51e4-797a-687bb50361e0 A space character at the beginning of the input in **Text** separates the added text from the current value. | **title** (before) | **title** (after) | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *Kitchen Container for Organic Waste - Pine Wood & Stainless Steel for Organic Leftovers - Dishwasher-Safe - Removable Lid - Removable Insert* | `Kitchen Container for Organic Waste - Pine Wood & Stainless Steel for Organic Leftovers - Dishwasher-Safe - Removable Lid - Removable Insert ORDER NOW` | | *Medium-Size Kitchen Bin for Compost with Lid Indoor 8L - Green Plastic Container for Organic Waste - Ventilation Holes Preventing Humidity Build-Up and Odor Spreading to Kitchen* | `Medium-Size Kitchen Bin for Compost with Lid Indoor 8L - Green Plastic Container for Organic Waste - Ventilation Holes Preventing Humidity Build-Up and Odor Spreading to Kitchen` | The value *Medium-Size Kitchen Bin for Compost with Lid Indoor 8L - Green Plastic Container for Organic Waste - Ventilation Holes Preventing Humidity Build-Up and Odor Spreading to Kitchen* exceeds the 150-character limit, so the rule box doesn't add the text *ORDER NOW*. Append/Prepend Value if not Empty [#appendprepend-value-if-not-empty] The **Append/Prepend Value if not Empty** rule box adds a static value at the beginning or end of the current value only if it contains any data. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Append/Prepend Value if not Empty** rule box. UUID-41359f88-1326-1b12-d451-bc94628cab9d In **Mode**, select a suitable value modification option: 1. *append* adds the desired value at the end of the current value. This is the default option. 2. *prepend* adds the desired value at the beginning of the current value. In **Value**, enter a desired string that the rule box should add to the non-empty values in the current attribute. Add a space character before or after the text to separate it from the rest of the value. Select **Save**. For example, you have the following values in your **title** attribute and want all products to have the text *30% OFF* at the end of their titles unless a product has an empty value in **title**. You can achieve this with the **Append/Prepend Value if not Empty** rule box by entering `30% OFF` in **Value**: | **title** (before) | **title** (after) | | --------------------------------- | ----------------------------------------- | | *Flat leather sandals with a bow* | `Flat leather sandals with a bow 30% OFF` | | | | | *High-heel sandals with a buckle* | `High-heel sandals with a buckle 30% OFF` | Contains String [#contains-string] The **Contains String** rule box searches your current values for a certain string and, in case of a match, overwrites the entire current value with a new desired value. If there is no match, the rule box empties the current value or overwrites it with a provided alternative string. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Contains String** rule box. UUID-db3f0d24-b1ba-40fb-0bd6-e687feb0c135 In **If value contains**, enter the search term that the rule box should search for in your current values. In **Set value to**, enter a new desired string that should overwrite the current value if your current value contains the provided search term. Optionally, use the **Otherwise set value to** field to enter an alternative string that should overwrite the current value if there is no match with the search term. If you don't provide an alternative string, the rule box empties the values that don't contain your search term. Select **Save**. For example, you have the following values in your **currency** attribute and want to overwrite all values containing the word *euro* with *EUR*. If a value doesn't contain *euro*, it should be empty. You can achieve this with the following setup of the **Contains String** rule box: UUID-24450f09-2e60-c0d0-7b86-79f917888608 | **currency** (before) | **currency** (after) | | ---------------------- | -------------------- | | *euro* | `EUR` | | *Currency: euro* | `EUR` | | *United States dollar* | | | *euro* | `EUR` | Extend Text [#extend-text] The **Extend Text** rule box lets you increase the length of a text value by setting a desired character limit and, if a value is shorter, filling the rest of it with a desired text until it reaches the limit. If a value doesn't reach the character limit with the added text string, the rule box repeats the string as many times as necessary to reach the character limit. This rule box can be useful if you need to meet a minimum length requirement for an attribute's values. You can also use the *Lengthen Text* data service to achieve similar results. See [Shorten, lengthen, or create text from attributes with AI data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/shorten-lengthen-or-create-text-from-attributes-with-ai-data). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Extend Text** rule box. UUID-f871c649-603a-08eb-a2e7-325a1e312235 In **length of the output string**, enter a desired character limit that the rule box should meet when adding and repeating a string. If a current value exceeds the character limit you set in this field, the Extend Text rule box doesn't add any text to the value and doesn't cut it to fit the limit. In **fill character(s)**, enter the string you want the rule box to add and repeat in your text value until it reaches the desired character limit. In the drop-down menu, select where you want to add the string within the value: 1. *left* adds the string at the beginning of the current value. 2. *right* adds the string at the end of the current value. 3. *both* adds the string both at the beginning and end of the current value. Select **Save**. For example, you have the following values in the **short\_description** attribute and want each value to be exactly 30 characters long. Some values are shorter than that, so you want to add a piece of text to extend the length of those values and reach the desired 30-character limit. You can achieve this with the following setup of the **Extend Text** rule box: UUID-c3c5bea0-6786-5985-c3d6-c1b71a50a42c | **short\_description** (before) | **short\_description** (after) | | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | | *Red Socks* | `Red Socks. Next-Day Shipping.` There is a space character at the end of the value. | | *Pillow Case with Fluffy Eco-Feathers* | *Pillow Case with Fluffy Eco-Feathers* | | *Pajama Pants for Kids* | `Pajama Pants for Kids. Next-Da` | Set Value by Datetime [#set-value-by-datetime] The **Set Value by Datetime** rule box compares a date value in an attribute with today's or another date to assign a new value based on the comparison. It follows this algorithm to compare dates and assign new values: | If | `today or another date` | **\<** | `date in the attribute`, | then | assign a new value. | | -- | ----------------------- | ------ | ------------------------ | ---- | ------------------- | You can choose other inequality symbols, not only the less-than sign (**\<**). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value by Datetime** rule box. UUID-33269b39-0fed-9fe2-f5f7-aa4ede7987d5 Enter the date format used in your attribute in **Date Format**. See [PHP: date - Manual](https://www.php.net/manual/en/function.date.php) for the supported formats. In **Operator**, choose an operator to compare the dates in your values to a desired date specified in [see the relevant section](#N1729515884765): * `<` means the date specified in Set Days should be less than the date in the attribute. * `<=` means the date specified in Set Days should be less than or equal to the date in the attribute. * `>=` means the date specified in Set Days should be greater than or equal to the date in the attribute. * `>` means the date specified in Set Days should be greater than the date in the attribute. In **Set Days**, define the date you want to compare your current values to by entering `-` or `+` and a number of days: * Enter `+0` to compare your date values to today's date. * Enter `+1` to compare your date values to tomorrow's date. * Enter `-1` to compare your date values to yesterday's date. In **Set value**, enter the value you want to assign in the current attribute if a date in the attribute matches the set condition. Select **Save**. For example, you have the following values in the **manufactured\_on** attribute and want to overwrite them with the value *incorrect* if the date in the attribute is later than last Friday, July 19, 2024. You can achieve this with the following setup of the **Set Value by Datetime** rule box: UUID-6ac20b24-4407-3a32-7347-c1d0984dda71 | **manufactured\_on** (before) | **manufactured\_on** (after) | | ----------------------------- | ---------------------------- | | *2024-07-21* | `incorrect` | | *2024-07-19* | *2024-07-19* | | *06.08.2024* | *06.08.2024* | | *2024-07-16* | *2024-07-16* | | *2024-10-03* | `incorrect` | You apply the **Set Value by Datetime** rule box on Monday, July 22, 2024. Set Value if Empty [#set-value-if-empty] The **Set Value if Empty** rule box overwrites empty values in the current attribute with a desired static value. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value if Empty** rule box. UUID-c185eba1-2f87-4ae0-085f-10b81fb71e9c In **Static value to set**, enter the desired static value that the rule box should add in all empty values. Select **Save**. For example, you have the following values in your **availability** attribute and want all products with empty values to display *out of stock*. You can achieve this with the **Set Value if Empty** rule box by entering `out of stock` in **Static value to set**: | **availability** (before) | **availability** (after) | | ------------------------- | ------------------------ | | *in stock* | *in stock* | | | `out of stock` | | *in stock* | *in stock* | Set Value if Greater Than [#set-value-if-greater-than] The **Set Value if Greater Than** rule box checks if the current value contains a number greater than the provided threshold and, if so, overwrites the entire current value with a new desired string. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value if Greater Than** rule box. UUID-572e6f41-ca1f-a69e-d528-af8bd3154fb1 In **Value >**, enter a threshold for the rule box to compare your current numeric values against. In **Output**, enter a new desired string that should overwrite the current value if it exceeds the threshold. In **If column value is not a number**, select the desired behavior of the rule box if a current value isn't numeric: 1. *leave unchanged* doesn't modify non-numeric values at all. This is the default option. 2. *treat as 0* overwrites non-numeric values with `0`. 3. *return empty string* makes non-numeric values empty. Select **Save**. For example, you have the following values in your **items\_in\_stock** attribute and want to display *plenty* for all products that have more than 50 items in stock. You can achieve this with the following setup of the **Set Value if Greater Than** rule box: UUID-a82b3834-e8b0-6c8d-f54b-1a5f327f0bb0 | **items\_in\_stock** (before) | **items\_in\_stock** (after) | | ----------------------------- | ---------------------------- | | *7* | *7* | | *55* | `plenty` | | *50* | *50* | | *fifty-eight* | *fifty-eight* | Set Value if Less Than [#set-value-if-less-than] The **Set Value if Less Than** rule box checks if the current value contains a number less than the provided threshold and, if so, overwrites the entire current value with a new desired string. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value if Less Than** rule box. UUID-3b787e35-f6e4-3b4a-33fe-f2afc3197bba In **Value >**, enter a threshold for the rule box to compare your current numeric values against. In **Output**, enter a new desired string that should overwrite the current value if it is lower than the threshold. In **If column value is not a number**, select the desired behavior of the rule box if a current value isn't numeric: 1. *leave unchanged* doesn't modify non-numeric values at all. This is the default option. 2. *treat as 0* overwrites non-numeric values with `0`. 3. *return empty string* makes non-numeric values empty. Select **Save**. For example, you have the following values in your **items\_in\_stock** attribute and want to display *last item!* for all products that have only 1 item left in stock. You can achieve this with the following setup of the **Set Value if Less Than** rule box: UUID-bbbef73b-2659-9227-dd57-a37120e38143 | **items\_in\_stock** (before) | **items\_in\_stock** (after) | | ----------------------------- | ---------------------------- | | *7* | *7* | | *1* | `last item!` | | *2* | *2* | | *fifty-eight* | *fifty-eight* | Add a dynamic value if the current attribute meets a condition [#add-a-dynamic-value-if-the-current-attribute-meets-a-condition] The *Add static or dynamic values* rule box category contains the rule boxes **Add Column if Fits**, **Append/Prepend Column if Value Not Present**, and **Set Column if Empty**. These rule boxes let you add dynamic values of a selected attribute to the current attribute if the current value meets a condition. If you don't find a rule box with the needed condition in this section, see [Add a dynamic value if other attributes meet a condition](#section-idm243456096702326). Although these rule boxes are initially meant to check the contents of other attributes for a condition, they can also help you add dynamic values to your current attribute if your current attribute meets a condition. You just need to choose your current attribute in the setup. Add Column if Fits [#add-column-if-fits] The **Add Column if Fits** rule box lets you add the values of another attribute to your current values if the overall length of the resulting value doesn't exceed a desired character limit. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add Column if Fits** rule box. UUID-1ae19eba-fa82-0349-d8bf-512f61bab877 Select the attribute you want to add to your current values in **Column**. In **Mode**, select where you want to add the values of the chosen attribute within the current values: 1. *append* adds the string at the end of the current value. 2. *prepend* adds the string at the beginning of the current value. In **Max Length**, specify a character limit for the resulting values. Optionally, you can add some text before or after the added attribute value: 1. Enter the desired text in the input field **your text**. 2. Open the drop-down menu on the left to select *Text Before* or *Text After* and choose whether to add the text before or after the added attribute value. Select **Save**. For example, you have the following values in the **title** attribute and want to add the color of the product at the end of each title if the overall length of the resulting value doesn't exceed 150 characters. You can achieve this with the following setup of the **Add Column if Fits** rule box: UUID-2770bcff-fd1f-6823-c802-5da7488fd83f | **color** (no changes) | **title** (before) | **title** (after) | | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *Green* | *Kitchen Container for Organic Waste - Pine Wood & Stainless Steel for Organic Leftovers - Dishwasher-Safe - Removable Lid - Removable Insert* | `Kitchen Container for Organic Waste - Pine Wood & Stainless Steel for Organic Leftovers - Dishwasher-Safe - Removable Lid - Removable Insert - Green` | | *Orange* | *Medium-Size Kitchen Bin for Compost with Lid Indoor 8L - Green Plastic Container for Organic Waste - Ventilation Holes Preventing Humidity Build-Up and Odor Spreading to Kitchen* | *Medium-Size Kitchen Bin for Compost with Lid Indoor 8L - Green Plastic Container for Organic Waste - Ventilation Holes Preventing Humidity Build-Up and Odor Spreading to Kitchen* | The value *Medium-Size Kitchen Bin for Compost with Lid Indoor 8L - Green Plastic Container for Organic Waste - Ventilation Holes Preventing Humidity Build-Up and Odor Spreading to Kitchen* is over 150 characters long, so the rule box doesn't append the value *Orange* from **color**. Append/Prepend Column if Value Not Present [#appendprepend-column-if-value-not-present] The **Append/Prepend Column if Value Not Present** rule box adds the dynamic values of a selected attribute at the beginning or end of the current value if this data doesn't already exist in the current value. It also adds a space character to separate the added dynamic value from the rest of the current value. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Append/Prepend Column if Value Not Present** rule box. UUID-d626ccc8-d68d-cbf8-a237-873e8a04dd4e In **Column**, select the attribute whose values you want to add to the current attribute. If a current value doesn't have the data stored in this selected attribute, the rule box adds this data to the current value.The attributes listed here come from a previous stage. The values you add also come from a previous stage. In **Mode**, select a suitable value modification option: 1. *append* adds the dynamic value at the end of the current value and separates it with a space character. This is the default option. 2. *prepend* adds the dynamic value at the beginning of the current value and separates it with a space character. Optionally, you can add a static text before or after the added dynamic values: 1. In the **text** field at the bottom, enter the static text you want to add to your current values together with the chosen dynamic values. 2. In the drop-down menu on the left, select where you want to add the desired static text: 3. *Text Before* adds the static text before the dynamic value. You may need to add a space character after your static text to separate it from the dynamic value. 4. *Text After* adds the static text after the dynamic value. You may need to add a space character before your static text to separate it from the dynamic value. Select **Save**. For example, you have the following values in your **title** attribute and want to feature the name of the relevant brand from **brand** in your titles if the brand name isn't already present there. You want the newly added brand names to be introduced with *by* at the end of your product titles. You can achieve this with the following setup of the **Append/Prepend Column if Value Not Present** rule box: UUID-93681678-5580-89fd-d635-e0f33564015c | **brand** (no changes) | **title** (before) | **title** (after) | | ---------------------- | ---------------------------------------------------- | ---------------------------------------------------- | | *Massimo Dutti* | *Flat leather sandals with a bow* | `Flat leather sandals with a bow by Massimo Dutti` | | *& Other Stories* | *High-heel sandals with a buckle by & Other Stories* | *High-heel sandals with a buckle by & Other Stories* | | *COS* | *Square-toed loafers* | `Square-toed loafers by COS` | | | *Tall rubber boots* | *Tall rubber boots* | | *Mango* | | `by Mango` | Set Column if Empty [#set-column-if-empty] The **Set Column if Empty** rule box overwrites empty values in the current attribute with the desired dynamic values of a selected attribute. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Column if Empty** rule box. UUID-ed794d0e-c78c-aed7-c30d-197e0c281986 In **Select an Option**, select the attribute whose values you want to add to the empty values of the current attribute. The attributes listed here and their added values come from a previous stage. Select **Save**. For example, you have the following values in your **description** attribute and want all products with no descriptions to display the corresponding value from **title** as their description. You can achieve this with the **Set Column if Empty** rule box by choosing **title** in the rule box setup: | **title** (no changes) | **description** (before) | **description** (after) | | --------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | | *Flat leather sandals with a bow* | *Comfortable leather flats with an orthopedic sole that makes sure your feet don't get tired during long, busy days* | *Comfortable leather flats with an orthopedic sole that makes sure your feet don't get tired during long, busy days* | | *High-heel sandals with a buckle* | | `High-heel sandals with a buckle` | | *Square-toed loafers* | | `Square-toed loafers` | Add a static value if other attributes meet a condition [#add-a-static-value-if-other-attributes-meet-a-condition] The *Add static or dynamic values* rule box category contains the rule boxes **Set Value by Column Compare (Multicondition)**, **Set Value by Compare**, **Set Value if Column Contains**, **Set Value if Contains**, **Set Value if Empty (Conditional)**, **Set Value if Match (RegEx)**, **Set Value If Value In**, and **Set Value If Value Not In**. These rule boxes let you add static values to your current attribute if other attributes in your site meet a condition. Set Value by Column Compare (Multicondition) [#set-value-by-column-compare-multicondition] The **Set Value by Column Compare (Multicondition)** rule box adds a static value in the current attribute if both selected attributes meet a condition, such as contain desired values, contain no desired values, are less or greater than desired values, exactly equals desired values, etc. You can set up two different conditions using multiple values for each attribute. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value by Column Compare (Multicondition)** rule box. UUID-0c35978c-eadc-9f84-64b6-ee3075d75a95 In **Source Column 1**, select the first attribute whose values should determine if the rule box adds a static value in the current attribute. The attributes listed here and their searched contents come from a previous stage. In the first **Match type** drop-down menu, choose a condition that the values of your first selected attribute should meet: 1. *contains* modifies the current value if the selected attribute contains the provided comparison value. This is the default option. 2. *contains not* modifies the current value if the selected attribute doesn't contain the provided comparison value. 3. *\<* modifies the current value if a value in the selected attribute is numeric and is less than the provided comparison value. 4. *\<=* modifies the current value if a value in the selected attribute is numeric and is less than or equal to the provided comparison value. 5. *=* modifies the current value if a value in the selected attribute is numeric and equal to the provided comparison value. This option also works with text values. The rule box modifies the current value if a value in the selected attribute exactly matches the provided comparison value. The option is case-sensitive. 6. *>=* modifies the current value if a value in the selected attribute is numeric and is greater than or equal to the provided comparison value. 7. *>* modifies the current value if a value in the selected attribute is numeric and is greater than the provided comparison value. In **Source Column 2**, select the second attribute whose values should determine if the rule box adds a static value in the current attribute. The attributes listed here and their searched contents come from a previous stage. In the second **Match type** drop-down menu, choose a condition that the values of your second selected attribute should meet: 1. *contains* modifies the current value if the selected attribute contains the provided comparison value. This is the default option. 2. *contains not* modifies the current value if the selected attribute doesn't contain the provided comparison value. 3. *\<* modifies the current value if a value in the selected attribute is numeric and is less than the provided comparison value. 4. *\<=* modifies the current value if a value in the selected attribute is numeric and is less than or equal to the provided comparison value. 5. *=* modifies the current value if a value in the selected attribute is numeric and equal to the provided comparison value. This option also works with text values. The rule box modifies the current value if a value in the selected attribute exactly matches the provided comparison value. The option is case-sensitive. 6. *>=* modifies the current value if a value in the selected attribute is numeric and is greater than or equal to the provided comparison value. 7. *>* modifies the current value if a value in the selected attribute is numeric and is greater than the provided comparison value. In the field **Search Values Column1:Column2**, enter the comparison values for your conditions in the following format: *value for attribute 1:value for attribute 2*. To enter multiple combinations of values, start each pair from a new line. If you enter multiple value combinations, they follow the `OR` logic. The rule box modifies the current value if the values of the selected attributes meet the chosen conditions based on at least one of the provided value pairs. In **Set Value**, enter the static value that should modify the current value if both conditions are met. In the **assign** drop-down menu, select a suitable value modification option: 1. *assign* overwrites the current value with the desired static value. This is the default option. 2. *append* adds the desired static value at the end of the current value. You may need to add a space character before your static value to separate it from the rest of the value. 3. *prepend* adds the desired static value at the beginning of the current value. You may need to add a space character after your static value to separate it from the rest of the value. Select **Save**. For example, you have the following values in your **title** attribute and want to add the text *30% OFF* at the end of all titles of kids' products that are currently on sale. These products have *Yes* in the **sale** attribute and *kid* in the **age\_group** attribute. You want to avoid adding the text to products that belong both to kids' and adults' age groups. You can achieve this with the following setup of the **Set Value by Column Compare (Multicondition)** rule box: UUID-6a169413-6759-1493-f003-ec122e879276 | **sale** (no changes) | **age\_group** (no changes) | **title** (before) | **title** (after) | | --------------------- | --------------------------- | --------------------------------- | --------------------------------- | | *No* | *kid* | *Flat leather sandals with a bow* | *Flat leather sandals with a bow* | | *Yes* | *adult* | *High-heel sandals with a buckle* | *High-heel sandals with a buckle* | | *Yes* | *kid, adult* | *Square-toed loafers* | *Square-toed loafers* | | *Yes, on sale* | *kid* | *Eco-leather sneakers* | `Eco-leather sneakers 30% OFF` | | *Yes* | *kid* | *Tall rubber boots* | `Tall rubber boots 30% OFF` | If you select *contain* in the second **Match type** drop-down menu, the value *Square-toed loafers* changes to `Square-toed loafers 30% OFF` because *kid* is a part of the corresponding value in **age\_group**. If you also want to add the text *30% OFF* at the end of all titles of adult products on sale, which would change the title *High-heel sandals with a buckle* to `High-heel sandals with a buckle 30% OFF`, you can add another value pair in **Search Values Column1:Column2**: UUID-03c1bf45-9e0e-24b5-2665-41acd27895fe Set Value by Compare [#set-value-by-compare] The **Set Value by Compare** rule box adds a static value in the current attribute if a value in the selected attribute meets your desired condition, such as is less than or equal to a desired value, exactly equals a desired value, is greater than or equal to a desired value, etc. * The difference between **Set Value by Compare** and **Set Value if Contains** is that the former is mostly suitable for numeric values, while the latter works with alphanumeric values, provides more condition options, and lets you handle the cases when the condition isn't met. See [Set Value if Contains](#section-idm241706044023096246). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value by Compare** rule box. UUID-fcd23d57-7b29-58e8-f566-2f963730e39c In **If**, select the attribute whose values should determine if the rule box adds a static value in the current attribute. The attributes listed here and their searched contents come from a previous stage. In **Is**, select the condition that the values of the chosen attribute should meet: 1. *less than* modifies the current value if a value in the selected attribute is less than the provided comparison value. 2. *less or equal* modifies the current value if a value in the selected attribute is less than or equal to the provided comparison value. 3. *equal to* modifies the current value if a value in the selected attribute is equal to the provided comparison value. This option also works with text values. The rule box modifies the current value if a value in the selected attribute exactly matches the provided comparison value. The option is case-sensitive. 4. *greater than or equal* modifies the current value if a value in the selected attribute is greater than or equal to the provided comparison value. 5. *greater than* modifies the current value if a value in the selected attribute is greater than the provided comparison value. In **value to compare**, enter the comparison value you want to use for your condition. It can be a number or, less likely, a text string. In **Then**, select a suitable value modification option: 1. *assign column to* overwrites the current value with the desired static value. This is the default option. 2. *append* adds the desired static value at the end of the current value. You may need to add a space character before your static value to separate it from the rest of the value. 3. *prepend* adds the desired static value at the beginning of the current value. You may need to add a space character after your static value to separate it from the rest of the value. In **output if comparison is true**, enter the static value that should modify the current value if the condition is met. Select **Save**. For example, you have the following values in your **title** attribute and want to add the text *Cheap* at the beginning of titles for all cheaper products in the site, meaning that their values in the **price** attribute are less than 20. You can achieve this with the following setup of the **Set Value by Compare** rule box: UUID-56d8bcec-acce-4fba-199a-887b5212d532 | **price** (no changes) | **title** (before) | **title** (after) | | ---------------------- | --------------------------------- | --------------------------------------- | | *12.57* | *Flat leather sandals with a bow* | `Cheap Flat leather sandals with a bow` | | *323.69* | *High-heel sandals with a buckle* | *High-heel sandals with a buckle* | | *20.00* | *Square-toed loafers* | *Square-toed loafers* | | *3.39* | | `Cheap` | | *10.50* | *Tall rubber boots* | `Cheap Tall rubber boots` | Set Value if Column Contains [#set-value-if-column-contains] The **Set Value if Column Contains** rule box adds a static value in the current attribute if a selected attribute contains a corresponding search term. You can enter multiple pairs of search terms and desired static values in this rule box. * The difference between **Set Value if Contains** and **Set Value if Column Contains** is the ability of the latter to consider multiple search terms and desired static values, while the former lets you use conditions other than *contains* and handles the cases when the condition isn't met. See [Set Value if Contains](#section-idm241706044023096246). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value if Column Contains** rule box. UUID-762dd929-d37b-2139-77f2-34e294424535 In **Column**, select the attribute whose values should determine if the rule box adds a static value in the current attribute. The attributes listed here and their searched contents come from a previous stage. In the input area, use the format *search term:static value* to enter the desired search terms and static values. The rule box looks for the search terms in the chosen attribute and, if a search term is present there, uses the corresponding static value to modify the current value. To enter multiple pairs of search terms and static values, start each pair from a new line. In **Mode**, select a suitable value modification option: 1. *assign* overwrites the current value with the desired static value. This is the default option. 2. *append* adds the desired static value at the end of the current value and separates it from the rest of the value with a space character. 3. *prepend* adds the desired static value at the beginning of the current value and separates it from the rest of the value with a space character. In **Match Mode**, select how strict the match of the search term should be: 1. *broad* matches the search term with any part of a word within a value and isn't case-sensitive. The *broad* match mode can significantly increase your site processing times. If applicable, we recommend choosing the *exact* match mode instead. 2. *exact* matches the search term only with entire words within a value and is case-sensitive. In **Find**, select how many matches the rule box should search for if you have more than one pair of *search term:static value*: 1. *first* finds only the first match of a search term within a value and modifies the current value with one corresponding static value. This is the default option. 2. *all* finds all matches of all search terms within a value and modifies the current value with all corresponding static values. Select **Save**. For example, you have the following values in your **title** attribute and want to use the **description** attribute to add more information to your titles: * If a product description mentions the brand *Prada*, you want to add *High-Fashion* at the end of the title. * If a product description mentions the brand *Gucci*, you want to add *Haute Couture* at the end of the title. * If a product description mentions *skirt*, you want to add *Female* at the end of the title. * If a product description mentions *autumn*, you want to add *Rainproof* at the end of the title. You can achieve this with the following setup of the **Set Value if Column Contains** rule box: UUID-41a918da-48ef-c014-7393-c03e4c9b84ab | **description** (no changes) | **title** (before) | **title** (after) | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ---------------------------------------------------- | | *Everyday leather flats by Prada. Perfect for summer and easy to combine with all types of clothes.* | *Flat Leather Sandals With A Bow* | `Flat Leather Sandals With A Bow High-Fashion` | | *Soft-top shoes by Manolo Blahnik with a 9 cm heel, a round front, and an ankle chain element. Perfect for summer. An ideal option for chic looks with skirts and dresses.* | *High-Heel Sandals With A Buckle* | *High-Heel Sandals With A Buckle* | | *Glossy black leather shoes by Gucci with a 3D pattern, a 3 cm thick sole, a squared front, and a fringe deco element. Perfect for early to mid autumn and easy to combine with coats, pants, skirts, and other types of clothes.* | *Square-Toed Loafers* | `Square-Toed Loafers Haute Couture Female Rainproof` | If you choose *assign* to overwrite your titles with the relevant static values, you get the following output: | **title** (before) | **title** (after) | | --------------------------------- | -------------------------------------------------------------------------------------------------------------- | | *Flat Leather Sandals With A Bow* | `High-Fashion` | | *High-Heel Sandals With A Buckle* | *High-Heel Sandals With A Buckle* | | *Square-Toed Loafers* | `Rainproof` The rule box uses the static value of the last search term match. | If you choose *prepend* to add the relevant static values at the beginning of your titles, you get the following output: | **title** (before) | **title** (after) | | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *Flat Leather Sandals With A Bow* | `High-Fashion Flat Leather Sandals With A Bow` | | *High-Heel Sandals With A Buckle* | *High-Heel Sandals With A Buckle* | | *Square-Toed Loafers* | `Rainproof Female Haute Couture Square-Toed Loafers` With every search term match, the rule box adds every new corresponding static value at the beginning of the title. | Set Value if Contains [#set-value-if-contains] The **Set Value if Contains** rule box adds a static value in the current attribute if a selected attribute contains a desired value. Alternatively, the rule box can add a static value to the current attribute if the selected attribute meets other conditions, such as contains no desired value, is less or greater than a desired value, exactly equals a desired value, etc. * The difference between **Set Value by Compare** and **Set Value if Contains** is that the former is mostly suitable for numeric values, while the latter works with alphanumeric values, provides more condition options, and lets you handle the cases when the condition isn't met. See [Set Value by Compare](#section-idm24657897543319124). * The difference between **Set Value if Contains** and **Set Value if Column Contains** is the ability of the latter to consider multiple search terms and desired static values, while the former lets you use conditions other than *contains* and handle the cases when the condition isn't met. See [Set Value if Column Contains](#section-idm241079228253476252). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value if Contains** rule box. UUID-5f793e5c-9f6d-ba87-c451-86ed48cd9097 In **Source Column**, select the attribute whose values should determine if the rule box adds a static value in the current attribute. The attributes listed here and their searched contents come from a previous stage. In the **compare value** field, enter the comparison value you want to use for your condition. It can be a text string or a number. In the **contains** drop-down menu, choose the needed condition: 1. *contains* modifies the current value if the selected attribute contains the provided comparison value. This is the default option. 2. *contains not* modifies the current value if the selected attribute doesn't contain the provided comparison value. 3. *\<* modifies the current value if a value in the selected attribute is numeric and is less than the provided comparison value. 4. *\<=* modifies the current value if a value in the selected attribute is numeric and is less than or equal to the provided comparison value. 5. *!=* modifies the current value if a value in the selected attribute is numeric and doesn't equal the provided comparison value. This option also works with text values. The rule box modifies the current value if a value in the selected attribute doesn't exactly match the provided comparison value. The option is case-sensitive. 6. *=* modifies the current value if a value in the selected attribute is numeric and equal to the provided comparison value. This option also works with text values. The rule box modifies the current value if a value in the selected attribute exactly matches the provided comparison value. The option is case-sensitive. 7. *>=* modifies the current value if a value in the selected attribute is numeric and is greater than or equal to the provided comparison value. 8. *>* modifies the current value if a value in the selected attribute is numeric and is greater than the provided comparison value. In the **assign value** field, enter the static value that should modify the current value if the condition is met. In the **assign** drop-down menu, select a suitable value modification option: 1. *assign* overwrites the current value with the desired static value. This is the default option. 2. *append* adds the desired static value at the end of the current value. You may need to add a space character before your static value to separate it from the rest of the value. 3. *prepend* adds the desired static value at the beginning of the current value. You may need to add a space character after your static value to separate it from the rest of the value. 4. *leave unchanged* doesn't modify the current value at all. Optionally, you can choose an alternative value modification option for cases when your selected condition isn't met: 1. In the **handle no match** drop-down menu, choose what the rule box should do if the condition isn't met: 2. *leave unchanged* doesn't modify the current value at all. This is the default option. 3. *assign* overwrites the current value with an alternative static value, even if the current value is empty. 4. *append* adds an alternative static value at the end of the current value, even if the current value is empty. You may need to add a space character before your alternative static value to separate it from the rest of the value. 5. *prepend* adds an alternative static value at the beginning of the current value, even if the current value is empty. You may need to add a space character after your alternative static value to separate it from the rest of the value. 6. If your chosen value modification option requires an alternative static value, enter it in **change to**. Select **Save**. For example, you have the following values in your **title** attribute and want to add the text *30% OFF* at the end of all titles if a product is currently on sale, meaning that it has *Yes* in the **sale** attribute. You can achieve this with the following setup of the **Set Value if Contains** rule box: UUID-85836993-62d4-6f65-7e9a-9d1dd51535d6 | **sale** (no changes) | **title** (before) | **title** (after) | | --------------------- | --------------------------------- | ----------------------------------------- | | *Yes* | *Flat leather sandals with a bow* | `Flat leather sandals with a bow 30% OFF` | | *No* | *High-heel sandals with a buckle* | *High-heel sandals with a buckle* | | *Yes, on sale* | *Square-toed loafers* | `Square-toed loafers 30% OFF` | | *Yes* | | `30% OFF` | | | *Tall rubber boots* | *Tall rubber boots* | If you select *=* in the **contains** drop-down menu, the value *Square-toed loafers* stays unchanged because its corresponding value in **sale** contains additional symbols besides *Yes*. Set Value if Empty (Conditional) [#set-value-if-empty-conditional] The **Set Value if Empty (Conditional)** rule box finds empty values in the current attribute and overwrites them with a static value if a selected attribute meets a condition. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value if Empty (Conditional)** rule box. UUID-f2e6fa49-1541-4809-2ed4-94df8183c44a In **Source Column**, select the attribute whose values should determine if the rule box adds a static value in the empty values of the current attribute. The attributes listed here and their searched contents come from a previous stage. In the **compare value** field, enter the comparison value you want to use for your condition. It can be a text string or a number. In the **contains** drop-down menu, choose the needed condition: 1. *contains* modifies the current value if the selected attribute contains the provided comparison value. This is the default option. 2. *contains not* modifies the current value if the selected attribute doesn't contain the provided comparison value. 3. *\<* modifies the current value if a value in the selected attribute is numeric and is less than the provided comparison value. 4. *\<=* modifies the current value if a value in the selected attribute is numeric and is less than or equal to the provided comparison value. 5. *=* modifies the current value if a value in the selected attribute is numeric and equal to the provided comparison value. This option also works with text values. The rule box modifies the current value if a value in the selected attribute exactly matches the provided comparison value. The option is case-sensitive. 6. *!=* modifies the current value if a value in the selected attribute is numeric and doesn't equal the provided comparison value. This option also works with text values. The rule box modifies the current value if a value in the selected attribute doesn't exactly match the provided comparison value. The option is case-sensitive. 7. *>=* modifies the current value if a value in the selected attribute is numeric and is greater than or equal to the provided comparison value. 8. *>* modifies the current value if a value in the selected attribute is numeric and is greater than the provided comparison value. In **Set Value**, enter the static value that should overwrite your current empty values if the condition is met. Select **Save**. For example, you have the following values in your **shipping** attribute and want to add *free* to products with empty values if they weigh less than 0.5 kg according to the **weight** attribute. You can achieve this with the following setup of the **Set Value if Empty (Conditional)** rule box: UUID-4afc5030-1593-c48d-75b0-439979d6c867 | **weight** (no changes) | **shipping** (before) | **shipping** (after) | | ----------------------- | --------------------- | -------------------- | | *0.125* | | `free` | | *3.269* | *7.28* | *7.28* | | *0.200* | *1.57* | *1.57* | | *1.269* | | | | | *13.75* | *13.75* | | *0.250* | | `free` | Set Value if Match (RegEx) [#set-value-if-match-regex] The **Set Value if Match (RegEx)** rule box assigns a static value in the current attribute if a selected attribute contains a regex match. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value if Match (RegEx)** rule box. UUID-1b58e224-434d-6930-231e-63bef18bfb18 In **Column**, choose the attribute you want to search for regex matches. Enter a valid regex in **RegEx**. See [regex101](https://regex101.com/) to verify your regular expressions. Make sure to add a forward slash (`/`) or a hash sign (`#`) at the start and end of your regular expression. In **Assign**, specify the value that the current attribute should display if the platform finds a regex match in the searched attribute. In the **handle no match** drop-down menu, choose how the platform should treat the values of the current attribute if there is a product with no regex match in the searched attribute: 1. *leave unchanged* makes sure the values of the current attribute stay the same. 2. *assign* makes sure the platform changes the values of the current attribute. Enter what value the platform should assign to products with no matches in **change to**. Select **Save**. For example, you can use the **Set Value if Match (RegEx)** rule box to get the **price\_range** attribute to contain information on whether a product is cheap or expensive based on the values of the **price** attribute. UUID-d1e248e7-df2e-fbe9-9198-63a537828193 The regex `/\b(?:0*[1-9]|[12][0-9])\$/` lets the rule box search the **price** attribute for products that cost less than 30$. If the platform finds a product that costs less than that, it assigns the value *cheap* to this product in the **price\_range** attribute. If the platform discovers products that don't match the regex and cost 30$ or more, such products get the value *expensive*. | **price** (no changes) | **price\_range** (before) | **price\_range** (after) | | ---------------------- | ------------------------- | ------------------------ | | *11$* | *10-19$* | `cheap` | | *20$* | *20-29$* | `cheap` | | *90$* | *90-99$* | `expensive` | | *110$* | *110-119$* | `expensive` | Set Value If Value In [#set-value-if-value-in] The **Set Value If Value In** rule box adds a static value in the current attribute if a selected attribute contains a match of at least one of the provided search terms. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value If Value In** rule box. UUID-7a263775-271a-adf1-8ffa-14d0e7fb9487 In **Source Column**, select the attribute whose values should determine if the rule box adds a static value in the current attribute. The attributes listed here and their searched contents come from a previous stage. In the field **searchterms newline separated**, enter the search terms you want the rule box to find in the selected attribute. If you want to search for multiple terms, start each search term from a new line. In **Match**, select how strict the match of the search term should be: 1. *broad* matches the search term with any part of a value and isn't case-sensitive. The *broad* match mode can significantly increase your site processing times. If applicable, we recommend choosing the *exact* match mode instead. 2. *exact* matches the search term only with entire values and is case-sensitive. In **Set Value**, enter the static value that should overwrite your current values if the rule box finds a match in the selected attribute. Select **Save**. For example, you have the following values in your **season** attribute and want to add the text *autumn, winter* to products with the titles *Tall rubber boots* and *Square-Toed Loafers*. You can achieve this with the following setup of the **Set Value If Value In** rule box: UUID-f92a0012-3386-c151-27ff-da425cb180ca | **title** (no changes) | **season** (before) | **season** (after) | | ---------------------------------- | ------------------- | ------------------ | | *Tall rubber boots* | *all* | `autumn, winter` | | *Square-Toed Loafers* | *all* | `autumn, winter` | | *Columbia Rainproof Hiking Jacket* | *summer* | *summer* | The rule box doesn't change the value in the last row because the provided search term doesn't exactly match the corresponding title. That title uses a different case and has one more word and one more space character. Set Value If Value Not In [#set-value-if-value-not-in] The **Set Value If Value Not In** rule box adds a static value in the current attribute if a selected attribute contains no match of at least one of the provided search terms. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value If Value Not In** rule box. UUID-9fde8f87-1851-3bbd-cf0b-9237ea734500 In **Source Column**, select the attribute whose values should determine if the rule box adds a static value in the current attribute. The attributes listed here and their searched contents come from a previous stage. In the field **searchterms newline separated**, enter the search terms you want the rule box to look for in the selected attribute. If you want to search for multiple terms, start each search term from a new line. In **Match**, select how strict the match of the search term should be: 1. *broad* matches the search term with any part of a value and isn't case-sensitive. The *broad* match mode can significantly increase your site processing times. If applicable, we recommend choosing the *exact* match mode instead. 2. *exact* matches the search term only with entire values and is case-sensitive. In **Then**, select a suitable value modification option: 1. *assign* overwrites the current value with the desired static value. This is the default option. 2. *append* adds the desired static value at the end of the current value and separates it from the rest of the value with a space character. 3. *prepend* adds the desired static value at the beginning of the current value and separates it from the rest of the value with a space character. In **Set Value**, enter the static value that should modify your current values if the rule box finds no match in the selected attribute. Select **Save**. For example, you have the following values in your **season** attribute and want to change them to *autumn, winter* for all products except the ones titled *Flat leather sandals with a bow*, *High-heel sandals with a buckle*, and *Blue flip-flops*. You can achieve this with the following setup of the **Set Value If Value Not In** rule box: UUID-dd5244a4-9e04-72d2-6a2b-e4b431ce419b | **title** (no changes) | **season** (before) | **season** (after) | | ---------------------------------- | ------------------- | ------------------ | | *Tall rubber boots* | *all* | `autumn, winter` | | *Flat leather sandals with a bow* | *summer* | *summer* | | *Columbia Rainproof Hiking Jacket* | *summer* | `autumn, winter` | | *High-heel sandals with a buckle* | *summer* | *summer* | | *Blue Flip-Flops* | *all* | `autumn, winter` | The rule box changes the value in the last row because the provided search term doesn't exactly match the corresponding title. The title uses a different case. Add a dynamic value if other attributes meet a condition [#add-a-dynamic-value-if-other-attributes-meet-a-condition] The *Add static or dynamic values* rule box category contains the rule boxes **Set Column by Column Compare**, **Set Column if Contains**, **Set Column if not Empty**, **Set Value by Column Compare**, and **Set Value if List Match (String)**. These rule boxes let you add dynamic values of a chosen attribute to your current attribute if other attributes in your site meet a condition. Set Column by Column Compare [#set-column-by-column-compare] The **Set Column by Column Compare** rule box adds dynamic values in the current attribute if two selected numeric attributes meet a condition. For example, if a value in attribute A is greater than the value in attribute B, the rule box overwrites the current value with the value from attribute C. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Column by Column Compare** rule box. UUID-f59f9363-ba11-9445-3352-2b7f3e1db884 In the first **Select an Option** drop-down list, select the first attribute whose values should determine if the rule box adds dynamic values in the current attribute. The attributes listed here and their searched contents come from a previous stage. In the **>** drop-down menu, choose a condition that the values of your two selected attributes should meet: 1. *>* modifies the current value if a value in the first attribute is greater than the value in the second attribute. This is the default option. 2. *\<* modifies the current value if a value in the first attribute is less than the value in the second attribute. 3. *>=* modifies the current value if a value in the first attribute is greater than or equal to the value in the second attribute. 4. *\<=* modifies the current value if a value in the first attribute is less than or equal to the value in the second attribute. 5. *==* modifies the current value if a value in the first attribute is equal to the value in the second attribute. 6. *!=* modifies the current value if a value in the first attribute isn't equal to the value in the second attribute. In the second **Select an Option** drop-down list, select the second attribute whose values should determine if the rule box adds dynamic values in the current attribute. The attributes listed here and their searched contents come from a previous stage. In **set column**, select the attribute whose dynamic values should overwrite the current values if the chosen condition is true. The attributes listed here and their added dynamic values come from a previous stage. Select **Save**. For example, you have the following values in your **description** attribute and want to overwrite them with the values from **shipping\_conditions** if the value in **import\_tax** is greater than the value in **shipping\_cost**. You can achieve this with the following setup of the **Set Column by Column Compare** rule box: UUID-b43b3a49-b52d-e0dc-5f08-8c9593404431 | **import\_tax** (no changes) | **shipping\_cost** (no changes) | **shipping\_conditions** (no changes) | **description** (before) | **description** (after) | | ---------------------------- | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *74.44* | *17.57* | *Shipping across Germany within 5 working days. Shipping internationally within 15 working days. Special import conditions apply.* | *The manufacturer uses only natural and hypoallergenic materials to produce these dog beds.* | `Shipping across Germany within 5 working days. Shipping internationally within 15 working days. Special import conditions apply.` | | *0* | *3.69* | *Shipping across Germany within 2 working days. Shipping internationally within 5 working days.* | *The manufacturer uses only natural and hypoallergenic materials to produce these dog blankets. Colors available: brown, gray, green, and blue. Size range: XS, S, M, L, XL, XXL.* | *The manufacturer uses only natural and hypoallergenic materials to produce these dog blankets. Colors available: brown, gray, green, and blue. Size range: XS, S, M, L, XL, XXL.* | | *80.47* | *34.89* | *Shipping across Germany within 7 working days. Shipping internationally within 20 working days. Special import conditions apply.* | *The manufacturer uses only natural and hypoallergenic materials to produce these climbing trees for cats. Colors available: beige, gray, white, black, and brown. Size range: M, L, and XL.* | `Shipping across Germany within 7 working days. Shipping internationally within 20 working days. Special import conditions apply.` | Set Column if Contains [#set-column-if-contains] The **Set Column if Contains** rule box adds dynamic values in the current attribute if a selected attribute contains a desired value. Alternatively, the rule box can add dynamic values to the current attribute if the selected attribute meets other conditions, such as contains no desired value, is less or greater than a desired value, exactly equals a desired value, etc. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Column if Contains** rule box. UUID-ebc58bf0-2a0a-3748-5e38-ad98d9ac934a In **Source Column**, select the attribute whose values should determine if the rule box adds dynamic values in the current attribute. The attributes listed here and their searched contents come from a previous stage. In the **compare value** field, enter the comparison value you want to use for your condition. It can be a text string or a number. In the **contains not** drop-down menu, choose the needed condition: 1. *contains not* modifies the current value if the selected attribute doesn't contain the provided comparison value. This is the default option. 2. *contains* modifies the current value if the selected attribute contains the provided comparison value. 3. *\<* modifies the current value if a value in the selected attribute is numeric and is less than the provided comparison value. 4. *\<=* modifies the current value if a value in the selected attribute is numeric and is less than or equal to the provided comparison value. 5. *=* modifies the current value if a value in the selected attribute is numeric and equal to the provided comparison value. This option also works with text values. The rule box modifies the current value if a value in the selected attribute exactly matches the provided comparison value. The option is case-sensitive. 6. *!=* modifies the current value if a value in the selected attribute is numeric and doesn't equal the provided comparison value. This option also works with text values. The rule box modifies the current value if a value in the selected attribute doesn't exactly match the provided comparison value. The option is case-sensitive. 7. *>=* modifies the current value if a value in the selected attribute is numeric and is greater than or equal to the provided comparison value. 8. *>* modifies the current value if a value in the selected attribute is numeric and is greater than the provided comparison value. In the **assign** drop-down menu, select a suitable value modification option: 1. *assign* overwrites the current value with the dynamic value of the needed attribute. This is the default option. 2. *append* adds the dynamic value of the needed attribute at the end of the current value and separates it from the rest of the value with a space character. 3. *prepend* adds the dynamic value of the needed attribute at the beginning of the current value and separates it from the rest of the value with a space character. 4. *leave unchanged* doesn't modify the current value at all. In **Select an Option** next to the **assign** drop-down menu, choose the needed attribute whose dynamic values the rule box should use to modify your current values. The attributes listed here and their added dynamic values come from a previous stage. Optionally, you can choose an alternative value modification option for cases when your desired condition isn't met: 1. In the **handle no match** drop-down menu, choose what the rule box should do if the condition isn't met: 2. *leave unchanged* doesn't modify the current value at all. This is the default option. 3. *assign* overwrites the current value with a static value, even if the current value is empty. 4. *append* adds a static value at the end of the current value, even if the current value is empty, and separates it from the rest of the value with a space character. 5. *prepend* adds a static value at the beginning of the current value, even if the current value is empty, and separates it from the rest of the value with a space character. 6. If your chosen value modification option requires a static value, enter it in **change to**. Select **Save**. For example, you have the following values in your **title** attribute and want to add the dynamic values of the **sale\_percentage** attribute at the end of your titles for the products that cost 15.00 EUR and less according to their **sale\_price** attribute. If a product on sale costs more than 15.00 EUR, you want to add the text *ON SALE* at the end of the title. You can achieve this with the following setup of the **Set Column if Contains** rule box: UUID-9b1d78ba-591f-a380-767b-a5e996146736 | **sale\_price** (no changes) | **sale\_percentage** (no changes) | **title** (before) | **title** (after) | | ---------------------------- | --------------------------------- | --------------------------------- | ------------------------------------------ | | *10.50* | *17% OFF* | | `17% OFF` | | *300.00* | *8% OFF* | *Tall rubber boots* | *Tall rubber boots*`ON SALE` | | *15.00* | *58% OFF* | *Eco-leather sneakers* | *Eco-leather sneakers*`58% OFF` | | *2.30* | *33% OFF* | *Flat leather sandals with a bow* | *Flat leather sandals with a bow*`33% OFF` | | *4.45* | | *High-heel sandals with a buckle* | *High-heel sandals with a buckle* | Set Column if not Empty [#set-column-if-not-empty] The **Set Column if not Empty** rule box overwrites the values of the current attribute with the dynamic values of a selected attribute if the selected attribute isn't empty. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Column if not Empty** rule box. UUID-33c9e929-0245-6dfc-6cf3-920ca0588155 In **Select an Option**, select the attribute whose non-empty values the rule box should add in the current attribute. The attributes listed here and their added values come from a previous stage. Select **Save**. For example, you have the following values in your **price** attribute and want to overwrite them with the values of the **sale\_price** attribute if they aren't empty. This way, products without a sale price keep their current prices untouched. You can achieve this with the **Set Column if not Empty** rule box by choosing **sale\_price** in the setup: | **sale\_price** (no changes) | **price** (before) | **price** (after) | | ---------------------------- | ------------------ | ----------------- | | *10.50* | *12.57* | `10.50` | | | *323.69* | *323.69* | | *15.00* | *34.89* | `15.00` | | *2.30* | | `2.30` | Set Value by Column Compare [#set-value-by-column-compare] The **Set Value by Column Compare** rule box modifies your current values with either a static value or the dynamic values of the needed attribute if two selected attributes meet the defined conditions, such as contain desired values, contain no desired values, are less or greater than desired values, exactly equals desired values, etc. The second attribute and its condition are optional. You can use this rule box to set only one condition. If you set two, both conditions must be true for the rule box to modify the values of the current attribute. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value by Column Compare** rule box. UUID-69200e50-3645-7520-1847-72ef26d21d7e Set up the first condition that must be true for the rule box to modify your current values: 1. In **Source Column**, select the first attribute whose values should determine if the rule box modifies values in the current attribute. The attributes listed here and their searched contents come from a previous stage. 2. In the **contains** drop-down menu, choose the needed condition for your first attribute: 3. *contains* modifies the current value if the selected attribute contains the provided comparison value. This is the default option. 4. *contains not* modifies the current value if the selected attribute doesn't contain the provided comparison value. 5. *\<* modifies the current value if a value in the selected attribute is numeric and is less than the provided comparison value. 6. *\<=* modifies the current value if a value in the selected attribute is numeric and is less than or equal to the provided comparison value. 7. *=* modifies the current value if a value in the selected attribute is numeric and equal to the provided comparison value. This option also works with text values. The rule box modifies the current value if a value in the selected attribute exactly matches the provided comparison value. The option is case-sensitive. 6. *!=* modifies the current value if a value in the selected attribute is numeric and doesn't equal the provided comparison value. This option also works with text values. The rule box modifies the current value if a value in the selected attribute doesn't exactly match the provided comparison value. The option is case-sensitive. 7. *>=* modifies the current value if a value in the selected attribute is numeric and is greater than or equal to the provided comparison value. 8. *>* modifies the current value if a value in the selected attribute is numeric and is greater than the provided comparison value. 9. In the **compare source value** field, enter the comparison value you want to use for your first condition. It can be a number or a text string. Optionally, set up the second condition that must be true for the rule box to modify the current values: 1. In **Optional Column**, select the second attribute whose values should determine if the rule box modifies values in the current attribute. The attributes listed here and their searched contents come from a previous stage. 2. In the **contains** drop-down menu, choose the needed condition for your second attribute: 3. *contains* modifies the current value if the selected attribute contains the provided comparison value. This is the default option. 4. *contains not* modifies the current value if the selected attribute doesn't contain the provided comparison value. 5. *\<* modifies the current value if a value in the selected attribute is numeric and is less than the provided comparison value. 6. *\<=* modifies the current value if a value in the selected attribute is numeric and is less than or equal to the provided comparison value. 7. *!=* modifies the current value if a value in the selected attribute is numeric and doesn't equal the provided comparison value. This option also works with text values. The rule box modifies the current value if a value in the selected attribute doesn't exactly match the provided comparison value. The option is case-sensitive. 6. *=* modifies the current value if a value in the selected attribute is numeric and equal to the provided comparison value. This option also works with text values. The rule box modifies the current value if a value in the selected attribute exactly matches the provided comparison value. The option is case-sensitive. 7. *>=* modifies the current value if a value in the selected attribute is numeric and is greater than or equal to the provided comparison value. 8. *>* modifies the current value if a value in the selected attribute is numeric and is greater than the provided comparison value. 9. In the **compare source value** field, enter the comparison value you want to use for your second condition. It can be a number or a text string. Define how you want to modify your current values if the conditions are true: 1. Choose whether you want to modify the current values with a static value or the dynamic values of another attribute: 2. In **Set Value**, enter a static value if you want to modify your current values with it. 3. In **Set Column**, choose the needed attribute if you want to modify your current values with its dynamic values. If you enter a static value in **Set Value***and* choose an attribute in **Set Column**, the rule box uses only the dynamic values of the chosen attribute without the entered static value. 2. In the **assign** drop-down menu, select a suitable value modification option: 3. *assign* overwrites the current value with the provided static value or the dynamic value of the needed attribute. This is the default option. 4. *append* adds the provided static value or the dynamic value of the needed attribute at the end of the current value without separating the added value from the rest of the current value with a space character. If you are adding a static value, you may need to add a space character at the start of it to separate it from the rest of the value. If you are adding dynamic values, you can't separate them from the rest of the current values with spaces using this rule box. 5. *prepend* adds the provided static value or the dynamic value of the needed attribute at the beginning of the current value without separating the added value from the rest of the current value with a space character. If you are adding a static value, you may need to add a space character at the end of it to separate it from the rest of the value. If you are adding dynamic values, you can't separate them from the rest of the current values with spaces using this rule box. Select **Save**. For example, you have the following values in your **title** attribute and want to add the dynamic values from the **sale\_promo\_text** attribute at the end of all titles if a product costs 50 EUR or less and has the value *in stock* in **availability**. You can achieve this with the following setup of the **Set Value by Column Compare** rule box: UUID-337ea93e-2450-19c5-ef60-f0cf1330c3e7 | **price** (no changes) | **availability** (no changes) | **sale\_promo\_text** (no changes) | **title** (before) | **title** (after) | | ---------------------- | ----------------------------- | ---------------------------------- | --------------------------------- | --------------------------------- | | *12.57* | *out of stock* | *17% OFF* | *Flat leather sandals with a bow* | *Flat leather sandals with a bow* | | *323.69* | *in stock* | *8% OFF* | *High-heel sandals with a buckle* | *High-heel sandals with a buckle* | | *34.89* | *in stock* | *58% OFF* | *Square-toed loafers* | *Square-toed loafers*`58% OFF` | | *10.50* | *in stock* | | *Tall rubber boots* | *Tall rubber boots* | In the last row, the rule box would add the value of **sale\_promo\_text** at the end of the title *Tall rubber boots* if the added dynamic value weren't empty. If the product with the title *Square-toed loafers* had anything else besides *in stock* in **availability**, the rule box wouldn't change the title because the chosen second condition is *=*, which requires an exact match of the value. Set Value if List Match (String) [#set-value-if-list-match-string] The **Set Value if List Match (String)** rule box modifies the current attribute with replace terms from a replacement list if a selected attribute contains search terms from that replacement list. See [Lists](/docs/help-center/map-and-optimize-your-data/lists) for more information on using lists. Go to **Lists** from your site's main menu and add all terms you need to replace to the *Standard*, *Dynamic*, or *Attribute-based Replacement* list. See [Lists](/docs/help-center/map-and-optimize-your-data/lists#section-idm13275861981064) to choose a required type. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value if List Match (String)** rule box. UUID-c3be8140-47e9-44aa-a29b-e18cb0fdf993 In **Column**, select the attribute whose values should determine if the rule box modifies values in the current attribute. The attributes listed here and their searched contents come from a previous stage. In **List**, choose the needed replacement list. The rule box searches the chosen attribute for matches with the terms on this list. In **Format**, select a suitable value modification option: 1. *assign* overwrites the current value with a replace term from the chosen list. This is the default option. 2. *append* adds a replace term from the chosen list at the end of the current value and separates it from the rest of the value with a space character. 3. *prepend* adds a replace term from the chosen list at the beginning of the current value and separates it from the rest of the value with a space character. 4. *replace* finds a search term from the chosen list in the selected attribute, looks for the same match in the current attribute, and substitutes the match with a corresponding replace term. In **Find**, select how many list matches the rule box should search for in the selected attribute: 1. *first* finds only the first match of a search term within a value and modifies the current value with one corresponding replace term. This is the default option. 2. *all* finds all search term matches within a value and modifies the current value with all corresponding replace terms. In **Case**, select between *sensitive* and *insensitive* if the search needs to consider capitalization. This choice influences the search in both the selected and the current attributes. In **Match entire word**, select whether a term from the replacement list has to match an entire word within the value or it is enough to match a part of a word. This choice influences the search in both the selected and the current attributes. 1. *no* accepts search term matches if they match a part of a word or an entire word within the value. 2. *yes* accepts search term matches only if they match an entire word within the value. Optionally, you can choose an alternative value modification option for cases when a value in the selected attribute doesn't match any terms on the list: 1. In the **handle no match** drop-down menu, choose what the rule box should do if there is no match: 2. *leave unchanged* doesn't modify the current value at all. This is the default option. 3. *assign* overwrites the current value with a static value, even if the current value is empty. 4. If you choose *assign* as your alternative value modification option, enter the desired static value in **change to**. Select **Save**. For example, you have a *Standard Replacement* list called **replacement**. It maps the following values to their corresponding replace terms: UUID-ddffb770-97f9-64eb-c54f-bb4912ce6772 If your **title** attribute contains a search term from the *Standard Replacement* list and the **color** attribute contains the same search term, you want to substitute the color mentioned in the title with the corresponding replace term from the list. You want to search for all possible list matches within the attributes, ignore capitalization, and exclude cases when a search term matches only a part of a word instead of the whole word. You can achieve this with the following setup of the **Set Value if List Match (String)** rule box: UUID-8f1b873a-55f9-c13c-6221-c5ac4d6ebe79 | **color** (no changes) | **title** (before) | **title** (after) | | ------------------------------- | ----------------------------------------- | ------------------------------------------------- | | *This is a blackLeather sandal* | *Flat leather sandals with a bow, black* | *Flat leather sandals with a bow, black* | | *The color is orange* | *High-heel sandals with a buckle, orange* | *High-heel sandals with a buckle,*`yellowish red` | | *green* | *Square-toed loafers, black* | *Square-toed loafers, black* | | *Black, green* | *Tall rubber boots, black, green* | *Tall rubber boots,*`cosmo black, grass green` | If you choose to *append* terms from the list rather than *replace* them, your **title** attribute doesn't have to contain the search terms for the rule box to modify your current values. When appending the replace terms, you get the following result: | **color** (no changes) | **title** (before) | **title** (after) | | ------------------------------- | --------------------------------- | ------------------------------------------------ | | *This is a blackLeather sandal* | *Flat leather sandals with a bow* | *Flat leather sandals with a bow* | | *The color is orange* | *High-heel sandals with a buckle* | *High-heel sandals with a buckle*`yellowish red` | | *green* | *Square-toed loafers* | *Square-toed loafers*`grass green` | | *Black, green* | *Tall rubber boots* | *Tall rubber boots*`cosmo black grass green` | # Rule box category Edit image import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The category *Edit image* contains all rule boxes that can help you create and edit an image in Productsup. Using the rule boxes in this category, you can add a logo, cart, rating, or other image to your existing images, create a collage with relevant product images, and trim, resize, or rotate images. UUID-997e4020-0fdf-e6c9-b575-bce9e384e36a In many *Edit image* rule boxes, you can find the following terms: * *Padding* is a space between the content and the border of the defined area. * *Border* is a frame around the defined area. * *Margin* is a space outside the defined area. UUID-01c75af6-ef8e-7852-3ed1-2d4fa205a12b Add Cart Image [#add-cart-image] The **Add Cart Image** rule box lets you include an icon with a call-to-action (CTA) to prompting the customer to add a product to the cart. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add Cart Image** rule box. UUID-3505b793-92a8-7bb8-9b57-e67a750ba833 Select **Coordinates** to open the coordinates field and define the area where you want to locate your cart icon. In **Text**, enter a static text that should appear on the cart icon. In **Background color**, define the color of the area of the cart icon. In **Text color**, pick the cart icon text color. In **Margin (0-100)**, define the margin outside of your cart icon. In **Image Format**, select the type of the result image: *jpg* or *png*. Select **Save**. For example, you have the following image in your **image** attribute and want all images have the icon *Add to cart!* in the top corner. You can achieve this with the following setup of the **Add Cart Image** rule box: UUID-deb59cf7-2a9b-352b-0fca-ed9b1739a5e1 | **image** (before) | **image** (after) | | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | | UUID-660b6256-6c8b-b2a4-56c4-1181d018d716 | UUID-3382783c-b5c3-872a-4507-100553482e60 | Add Image [#add-image] The **Add Image** rule box lets you add a static or dynamic image on top of your original image. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add Image** rule box. UUID-78674427-9d62-b03b-2536-b55a52c9071a Select **Coordinates** to open the coordinates field and define the area where you want to locate your image. To select an image that you want to put on top of the original image, use one of the options: * To add an image from the outside of your imported data, enter the URL of the desired image in **Source**. * To add an image from another attribute, select the attribute containing your desired images in **Or Image Column** In **Transparency (0-100)**, select the transparency of the added image on a scale from 0 to 100, where *0* is non-transparent and *100* is fully transparent. In **Zoom**, choose among different zoom methods: a combination of *Top*, *Middle*, or *Bottom* with *Center*, *Left*, or *Right* to decide which parts of your image to crop away. In **Padding (0-100)**, define the amount of padding within the selected area, where *0* is no padding. In **Align Within Selection**, select the alignment type of your image: a combination of *Top*, *Middle*, or *Bottom* with *Center*, *Left*, or *Right*. In **Image Format**, select the type of the result image: *jpg* or *png*. Select **Save**. For example, you have the following image in your **image** attribute and want all images have a social media icon on it. You can achieve this with the following setup of the **Add Image** rule box: UUID-0ee8a401-7517-1c10-5ad7-32a8509b99bd | **image** (before) | **image** (after) | | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | | UUID-660b6256-6c8b-b2a4-56c4-1181d018d716 | UUID-468c0265-e182-c69b-e654-f03fab1a4cf6 | Add Image From Column [#add-image-from-column] The **Add Image From Column** rule box lets you add a static or dynamic image on top of your original image. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add Image From Column** rule box. UUID-68f203ea-733e-2bfc-149b-902abf976098 Select an attribute that contains the images in **Column**. Select **Save**. For example, you have the following image in your **image** attribute and want to add its URL to the **description** attribute. You can achieve this with the **Add Image From Column** rule box by selecting the **image** attribute in **Column**: | **image** (no changes) | description (before) | **description** (after) | | ---------------------------------------------------------------------------------------- | ---------------------------- | ---------------------------------------------------------------- | | UUID-660b6256-6c8b-b2a4-56c4-1181d018d716 | *Black hoodie with a pocket* | `Black hoodie with a pocket,https://productsup/black_hoodie.png` | The platform automatically adds a comma without a space before the following image URL. Add Image Layer [#add-image-layer] The **Add Image Layer** rule box lets you add a colored layer on top of an image as a canvas for a further text. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add Image Layer** rule box. UUID-d5e2f033-c041-e484-d8c3-1d39069b7e31 Select **Coordinates** to open the coordinates field and define the area where you want to locate your layer. Select the **Color** field to pick the desired color of the layer or enter a hex color code or select an attribute that contains the a hex color codes in **Color Column**. In **Transparency (0-100)**, select the transparency of the added layer on a scale from 0 to 100, where *0* is non-transparent and *100* is fully transparent. In **Border width (px)**, define the width of the border separating the layer from the image. In **Border color**, define the color of the border by picking the color in the color scheme or by entering a hex code. In **Border opacity**, select the opacity of your border on a scale, where *0* is full opacity and *100* is no opacity. In **Border position**, select the position of the border in relation to the layer: * *Center* adds the border on top of the layer's edges. * *Outside* adds the border outside the layer's edges. * *Inside* adds the border inside the layer's edges. In **Margin (px)**, define the margin outside the layer. Select **Save**. For example, you have the following image in your **image** attribute and want to add layer on top of it. You can achieve this with the following setup of the **Add Image Layer** rule box: UUID-541f76f9-2814-edfe-5b91-3fd13930db44 | **image** (no changes) | **image** (after) | | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | UUID-660b6256-6c8b-b2a4-56c4-1181d018d716 | UUID-58ce1968-42f3-ac12-e983-3fcc7974cb36 | Add Logo To Image [#add-logo-to-image] The **Add Logo To Image** rule box lets you add a static or dynamic logo on an image. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add Logo To Image** rule box. UUID-7879e426-926d-0a16-a28c-2238143c5585 Enter the URL where you store your logo in **Logo URL**, or select an attribute that contains your logos in **Logo Column**. In **Position from Top** and **Position from Left**, define the logo position on the image. The rule box divides the image into five clusters from top to bottom and from left to right. In **Logo Width**, select the percentage of the logo width. In **Rotate (clockwise)**, rotate the logo clockwise on *90*, *180*, or *270* degrees. In **Resize (width)** and **Resize (height)**, select the size of the resulting image. In **Grid**, select *show* to see the grid that may help you to position your logo. Don't forget to *hide* it before saving the final image. Select **Save**. For example, you have the following image in your **image** attribute and want to add a logo in the corner. You can achieve this with the following setup of the **Add Logo To Image** rule box: UUID-f17be78d-cb52-e136-f971-7a1dab551fcb | **image** (before) | **image** (after) | | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | UUID-660b6256-6c8b-b2a4-56c4-1181d018d716 | UUID-38aed072-c822-cf03-57a4-c1895c9a2af1 | Add Rating Image [#add-rating-image] The **Add Rating Image** rule box lets you add a star rating icon to an image. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add Rating Image** rule box. UUID-9012bfa1-3463-9131-ea71-019a0f43ef33 Select **Coordinates** to open the coordinates field and define the area where you want to locate your rating icon. Enter the number of the rating stars from *0* to *5* in **Rating (0-5)**, or select an attribute that contains ratings in **Rating Column**. In **Fill folor**, pick the filling color of the rating stars in the color scheme or by entering the hex code. In **Border color**, define the color of the ratings stars' border by picking the color in the color scheme or by entering the hex code. In **Margin (0-100)**, define the margin outside the rating stars. In **Image Format**, select the type of the result image: *jpg* or *png*. Select **Save**. For example, you have the following image in your **image** attribute and want to add the rating stars on the image. You can achieve this with the following setup of the **Add Rating Image** rule box: UUID-f924478b-8b1a-310f-671d-4d7382a3d62b | **image** (before) | **image** (after) | | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | UUID-660b6256-6c8b-b2a4-56c4-1181d018d716 | UUID-61f44802-a9cb-3ff9-1060-95ab21ae5f97 | Add Text To Image [#add-text-to-image] The **Add Text To Image** rule box lets you add text to a desired place on an image. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add Text To Image** rule box. UUID-701c5d4b-6380-bf43-9ec6-ba3aa80689c6 Select the attribute that contains the text you want to place on the image in **Input from**. Optionally, in **Text before**, enter a text you want to add before the text from the attribute. Optionally, in **Text after**, enter a text you want to add after the text from the attribute. Optionally, in **Max Text Length**, enter the maximum number of characters that your added text can contain. In **Line Number** and **Start Block**, define the text position on the image. The rule box divides the image into five clusters from top to bottom and from left to right. In **Text Width**, select the percentage of the text width. In **Font Color**, select the text color by picking the color in the color scheme or by entering the hex code. Select the desired text font in **Font**. In **Resize (width)** and **Resize (height)**, select the size of the resulting image. In **Grid**, select *show* to see the grid that may help you to position your text. Don't forget to *hide* it before saving the final image. Select **Save**. For example, you have the following image in your **image** attribute and want to add text on the image from **brand**. You can achieve this with the **Add Text To Image** rule box: | brand (no change) | **image** (before) | **image** (after) | | ----------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | MyBrand | UUID-660b6256-6c8b-b2a4-56c4-1181d018d716 | UUID-f9d927e5-393d-6af1-781b-7dd27d6f2522 | Add Text to Image Coordinates [#add-text-to-image-coordinates] The **Add Text to Image Coordinates** rule box lets you add a text to a desired place in an image. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add Text to Image Coordinates** rule box. UUID-ce154c47-a2b1-1d6e-a9c0-2d9feae550b8 Select **Coordinates** to open the coordinates field and define where you want to locate your text. Select the attribute that contains the text you want to place on the image in **Input from**. Optionally, in **Text Before**, enter a text that you want to add before the text from the attribute. Optionally, in **Text After**, enter a text that you want to add after the text from the attribute. Optionally, in **Max Text Length**, enter the maximum number of characters that your added text can contain. In **Font Color**, select the text color by picking the color in the color scheme or entering the hex code. Select the desired text font in **Font**. In **Align**, add the type of the text alignment: *Left*, *Center*, or *Right*. In **Padding (0-100)**, define the amount of padding within the selected area, where *0* is no padding. In **Max Font Size (px)**, define a maximum font size when you add multiple texts to ensure all texts have the same size. In **Image Format**, select the type of the result image: *jpg* or *png*. Select **Save**. For example, you have the following image in your **image** attribute and want to add the information about the available sizes on the image from **size**. You can achieve this with the following setup of the **Add Text to Image Coordinates** rule box: UUID-934af6db-8dd8-b20a-befa-35518dea9157 | size (no change) | **image** (before) | **image** (after) | | ---------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | *L* | UUID-660b6256-6c8b-b2a4-56c4-1181d018d716 | UUID-0b7bf97d-191d-d9c9-a819-da7362a95446 | Add URL Fragment [#add-url-fragment] A URL fragment is an internal page reference that appears at the end of a URL and begins with a hash character (`#`) followed by an identifier. It refers to a section within a web page. The **Add URL Fragment** rule box lets you add a static fragment at the end of all URLs in a current attribute: Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add URL Fragment** rule box. UUID-5ef7c610-a1e4-858f-26cd-dad16997d7f9 Enter a desired fragment in **Fragment (without #)**. Select **Save**. For example, you have the following values in the **URL** attribute and want to add the *#section-1* fragment to all links. You can achieve this with the **Add URL Fragment** rule box by entering `section-1` in **Fragment (without #)**: | **URL** (before) | **URL** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | *[https://www.amazon.com/Fluffy-Pajama-Pants-Green/dp/G00PJSF1UF](https://www.amazon.com/Fluffy-Pajama-Pants-Green/dp/G00PJSF1UF)* | `https://www.amazon.com/Fluffy-Pajama-Pants-Green/dp/G00PJSF1UF#section-1` | | *[https://www.amazon.com/Warm-Wool-Socks-Red/dp/R00SCKS1WO?currency=EUR\&utm\_medium=product\_sync\&utm\_source=google\&utm\_campaign=search\_organic](https://www.amazon.com/Warm-Wool-Socks-Red/dp/R00SCKS1WO?currency=EUR\&utm_medium=product_sync\&utm_source=google\&utm_campaign=search_organic)* | `https://www.amazon.com/Warm-Wool-Socks-Red/dp/R00SCKS1WO?currency=EUR&utm_medium=product_sync&utm_source=google&utm_campaign=search_organic#section-1` | Create Image [#create-image] The **Create Image** rule box lets you change any value in the attribute into a colored canvas that works as a basis for an image. You can use other edit image rule boxes to edit the image further. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Create Image** rule box. UUID-084a9af6-da5a-c50b-30ff-c5a5fec9a814 In **Width (px)**, define the canvas width in pixels. In **Height (px)**, define the canvas height in pixels. Select the **Color** field to pick the desired canvas color, enter a hex color code or select an attribute that contains the a hex color codes in **Or Color Column**. In **Image Format**, select the type of the resulting image: *jpg* or *png*. Select **Save**. For example, you have an empty **image** attribute and want to create images instead. You can achieve this with the following setup of the **Create Image** rule box: UUID-db04aa2f-a0e4-cc98-69fd-3babcd3fd59b | **image** (before) | **image** (after) | | ------------------ | ---------------------------------------------------------------------------------------- | | | UUID-47d20327-50a3-7578-268e-6422238a4de9 | Mosaic Template [#mosaic-template] The **Mosaic Template** rule box lets you create a collage using images from the selected attributes. You can add the **Create Image** rule box to create a canvas first. See [Create Image](#section-idm353455575689068). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Mosaic Template** rule box. UUID-28c3867f-d066-043c-94a7-18ef118b0adf In **Zoom**, define what part of the image you want to zoom by choosing among different zoom methods: a combination of *Top*, *Middle*, or *Bottom* with *Center*, *Left*, or *Right*. Or leave *None* not to zoom the image. In **Orientation**, select the collage orientation: * *Portrait* arranges the additional images below the main image. * *Landscape* arranges the additional images on the right from the main image. In **Image Column 1**, select the attributes where the rule box should take the main image. In **Image Column 2-6**, select the attributes from which the rule box should take the additional images. In **Image Format**, select the type of the resulting image: *jpg* or *png*. Select **Save**. For example, you want to have a collage of several images from the same attribute. You can achieve this with the following setup of the **Mosaic Template** rule box: UUID-11a2a0db-a294-a636-6f80-7537f27ee685 | **image** (before) | **image** (after) | | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | UUID-660b6256-6c8b-b2a4-56c4-1181d018d716 | UUID-beff82b1-3706-7bc8-fced-ef0e5ec96358 | Resize Image [#resize-image] The **Resize Image** rule box lets you resize, zoom, change the format, and add a colored background to an image. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Resize Image** rule box. UUID-86097ad7-73d2-0636-76fd-2b05304e8dc8 In **Width (px)**, define the canvas width in pixels. In **Height (px)**, define the canvas height in pixels. Select **No Background Color** if you don't want to add any background or select the **Background Color** field to pick the desired color or enter a hex color code. Select **Padding** to add the space between the objects in your image and the outer edge of your image. The platform adds padding to reach the size defined in Width and Height. For example, if a source image is 600x600 px and you want to modify it to 600x800 px, when you select **Padding**, the platform adds 0x200 px. The padding color is the same as in **Background Color**. In **Zoom**, define what part of the image you want to zoom by choosing among different zoom methods: a combination of *Top*, *Middle*, or *Bottom* with *Center*, *Left*, or *Right*. Or leave *None* not to zoom the image. In **Image Format**, select the type of the result image: *jpg* or *png*. In **Quality**, enter the quality percentage of the output JPEG image to reduce the weight. The value can range from 0 to 100. In **JPEG Size Limit (KB)**, enter the kilobyte limit of the output JPEG image to reduce the weight of the output image. Select **Save**. For example, you want to resize the images and change their background color in the **image** attribute. You can achieve this with the following setup of the **Resize Image** rule box: UUID-7f338301-3f2d-f363-12f1-6711399c80ae | **image** (before) | **image** (after) | | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | UUID-660b6256-6c8b-b2a4-56c4-1181d018d716 | UUID-e591245e-a387-0af2-3758-bc9989c12569 | Rotate Image [#rotate-image] The **Rotate Image** rule box lets you resize, mirror, change the format, and add a colored background to an image. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Resize Image** rule box. UUID-6cc06348-f8a1-db9a-4816-0cd9bae76a15 In **Rotate (degrees)**, define the angle of rotation. Select the **Background Color** field to pick the desired color or enter a hex color code. If you don't select any color, the background becomes white. In **Mirror**, select whether you want to mirror your images by choosing among *None*, *Flip (x-axis)*, or *Flop (y-axis)*. In **Image Format**, select the type of the resulting image: *jpg* or *png*. Select **Save**. For example, you want to rotate the images and change their background color in the **image** attribute. You can achieve this with the following setup of the **Rotate Image** rule box: UUID-12eca796-b599-b8ef-1ecc-ea59cfc8dc4f | **image** (before) | **image** (after) | | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | UUID-660b6256-6c8b-b2a4-56c4-1181d018d716 | UUID-1392f38a-7bc4-85ec-f76a-9cfab797fce0 | Separate Link and Take First Image [#separate-link-and-take-first-image] The **Separate Link and Take First Image** rule box lets you leave only the first image and remove all other comma-separated images from the attribute. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Separate Link and Take First Image** rule box. UUID-89587e6c-2cfa-e871-8bfb-c246039a1ee8 In **Delimiter**, define the delimiter that separates your images. Select **Save**. For example, you have several images in the **image** attribute and want to leave only the first image for each item. You can achieve this with the **Separate Link and Take First Image** rule box: | **image** (before) | **image** (after) | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | | *[https://yourdomain.com/image/product/12345.jpg,http://yourdomain.com/image/product/45678.jpg](https://yourdomain.com/image/product/12345.jpg,http://yourdomain.com/image/product/45678.jpg)* | `https://yourdomain.com/image/product/12345.jpg` | Separate Link and Take Last Image [#separate-link-and-take-last-image] The **Separate Link and Take Last Image** rule box lets you remove the first image and leave the rest of the comma-separated images in the attribute. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Separate Link and Take Last Image** rule box. UUID-2908b3e0-3506-15d3-f621-128e36e0f897 In **Delimiter**, define the delimiter that separates your images. Select **Save**. For example, you have three (3) images in the **image** attribute and want to remove only the first image for each item and leave the rest two (2) images. You can achieve this with the **Separate Link and Take First Image** rule box: | **image** (before) | **image** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *[http://yourdomain.com/image/product/55555.jpg,https://yourdomain.com/image/product/12345.jpg,http://yourdomain.com/image/product/45678.jpg](http://yourdomain.com/image/product/55555.jpg,https://yourdomain.com/image/product/12345.jpg,http://yourdomain.com/image/product/45678.jpg)* | [https://yourdomain.com/image/product/12345.jpg,http://yourdomain.com/image/product/45678.jpg,https://yourdomain.com/image/product/12345.jpg,http//:yourdomain.com/image/product/45678.jpg,https://yourdomain.com/image/product/12345.jpg,http://yourdomain.com/image/product/45678.jpg](https://yourdomain.com/image/product/12345.jpg,http://yourdomain.com/image/product/45678.jpg,https://yourdomain.com/image/product/12345.jpg,http//:yourdomain.com/image/product/45678.jpg,https://yourdomain.com/image/product/12345.jpg,http://yourdomain.com/image/product/45678.jpg) | Show Grid Image [#show-grid-image] The **Show Grid Image** rule box lets you apply a grid over the images to let you see the position of the image elements. The grid only appears in the preview and disappears in the exported image. Place this rule box below all other rule boxes to let it work properly. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Show Grid Image** rule box. UUID-817357d2-ce36-1fdf-ecc8-d315ad951b9b In **Grid**, select *show* to see the grid that may help you position your image elements. Remember to *hide* it before saving the final image. In **Image Format**, select the type of the resulting image: *jpg* or *png*. Select **Save**. For example, you have the following image in your **image** attribute and want to see the grid to check the position of your image elements. You can achieve this with the **Show Grid Image** rule box: | **image** (before) | **image** (after) | | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | UUID-61d3ef8d-08e1-ff0f-72ff-e9fe16f692f5 | UUID-a437e322-caab-19e7-ee7e-92470c10f841 | Trim Image [#trim-image] The **Trim Image** rule box removes the useless space around your product image. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Trim Image** rule box. UUID-d4db1aa1-22d4-ebeb-55fa-5c6cbd341244 Select the **Color** field to pick the desired background color or enter a hex color code. Select **No Background color** if you don't have any background color. In **Fuzziness (0-100)**, define the trim fuzziness from 0 to 100, where *0* means only the exact same color code as you selected in **Color**, and *100* removes the range of the shades similar to the selected color. In **Image Format**, select the type of the resulting image: *jpg* or *png*. Select **Save**. If you have an image without a background, the color that you select in the **Color** field fills your image background. You don't need to set any fuzziness in this case. For example, you want to remove all unused space and add a red background in your images. You can achieve this with the **Trim Image** rule box: UUID-7e447c22-9f8e-8438-0f58-56067304866a | **image** (before) | **image** (after) | | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | UUID-e610947f-5795-5a5f-7758-1081968a3c58 | UUID-e11f0d83-50b9-5b94-5ea1-421c630400ac | Trim Image Border [#trim-image-border] The **Trim Image Border** rule box removes the border from your images. Your images must have borders to let this rule box work properly. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Trim Image Border** rule box. UUID-641a1b10-b384-a612-b80c-6c9e2b8d3d91 In **Mode**, select one of two options: * *auto detect border color*: use this option if you don't know the border color. * *trim selected border color*: use this option if you know the border color. Select the **Border Color** field to pick the color or enter a hex color code. Select **Save**. For example, you have the following image in your **image** attribute and want to remove the border. You can achieve this with the **Trim Image Border** rule box: | **image** (before) | **image** (after) | | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | | UUID-41875a2a-14e1-f0a5-8f2c-83160e583667 | UUID-660b6256-6c8b-b2a4-56c4-1181d018d716 | Use Image Designer Template [#use-image-designer-template] The **Use Image Designer Template** rule box lets you apply some ready Image Designer templates to your images if you have only a limited Image Designer version. This rule box lets you test the Image Designer functionality on a limited number of images. See [Create and apply custom image templates](/docs/help-center/map-and-optimize-your-data/image-designer/create-and-apply-custom-image-templates). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Use Image Designer Template** rule box. UUID-9dec6d4c-11ad-fe55-dfa9-b5f92401f5d0 In **Template**, select one of the templates. Select **Save**. When you modify images, they go through the Productsup image servers. Each time you change and apply a template, the URL of the exported image changes and starts with `https://gfx.productsup.io/`. Use Image Designer Template from Attribute [#use-image-designer-template-from-attribute] The **Use Image Designer Template from Attribute** rule box lets you apply a particular image template for a specific product by reading the template name from a selected attribute in the data. Before using this rule box, ensure that your imported data contains an attribute with the image templates names. To use this rule box, you need the Image Designer feature activated in your organization. To activate Image Designer, contact your Customer Success Manager. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Use Image Designer Template from Attribute** rule box. UUID-3e4cc5c8-9981-acfc-043c-331ae3cc4e82 In **Attribute**, select the attribute that contains the templates names. The attribute comes from a previous stage. The attribute's values with the template names must match to the template names you create in Image Designer. The values are case insensitive. Select **Save**. For example, to add a template to your images, you need to add the rule box **Use Image Designer Template from Attribute** to your **image link** attribute and select the **image template** attribute containing the template names corresponding to each product ID, such as: | **id** | **image template** | | ------ | ------------------ | | *1* | *Christmas* | | *2* | *Warm Socks* | | *3* | *Last Pair* | # Find the needed rule box category import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Productsup offers more than 170 rule boxes, organized into categories, to help you modify your product data in Dataflow and Data View. To find the rule box you need, first identify which category is relevant for you. This document explains what data transformation tasks each rule box category can help you with. To find the list of all rule box categories in Productsup, do the following: Go to **Dataflow** or **Data View** from your site's main menu. Open the *Edit* menu: 1. In Dataflow, choose a relevant attribute in the intermediate or export stage. To choose an attribute in the export stage, first select the needed export from the drop-down menu in the top ribbon. 2. In Data View, use the drop-down menu in the top ribbon to select **Intermediate** or the needed export. Find a relevant attribute and select **Edit** in the attribute's column. Select **Large View**. Open the **All rule boxes** drop-down menu to see a list of all rule box categories available in Productsup. If you select a category, the *Available Boxes* panel on your right displays all rule boxes belonging to the chosen category. UUID-fd78a1ee-1357-a8e5-8acd-9b4813476cbb Rule box category All rule boxes [#rule-box-category-all-rule-boxes] The category *All rule boxes* contains all rule boxes globally available in Productsup. If you gain access to a non-global rule box, it appears in this category. Rule box category Add static or dynamic values [#rule-box-category-add-static-or-dynamic-values] The category *Add static or dynamic values* contains all rule boxes that can help you prepend, append, or assign desired values to an attribute. If needed, you can choose the requirements your current attribute values should meet for the platform to add new values. See [Add static or dynamic values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/add-static-or-dynamic-values) for more information on the rule boxes of this category. UUID-ae232370-7438-4ad9-b51a-421c5f8e66cc Static vs. dynamic values [#static-vs-dynamic-values] Adding a *static* value in an attribute means adding the same value to your products. For example, if you apply a rule box that appends the static value *BUY NOW* to the **title** attribute where the current values are *Red Wine Magnum*, *White Wine Standard*, and *Rosé Piccolo*, your products will have the following titles: UUID-6c134353-b735-2f05-f9ba-f374c9cb3cc9 Adding a *dynamic* value in an attribute means adding the values of another attribute to your products. For example, if you apply a rule box that appends the dynamic value of the **volume** attribute to the **title** attribute where the current values are *Red Wine Magnum*, *White Wine Standard*, and *Rosé Piccolo*, your products will have the following titles: UUID-bdcab987-91cb-f1cb-30ec-a681e5be047f If the values of the **volume** attribute change during the next site runs, the platform updates the **title** attribute with the corresponding updated values. For example, if the platform imports the value *2 L* instead of *1.5 L* for the product during the next site run, the platform updates the product's title from *Red Wine Magnum 1.5 L* to `Red Wine Magnum 2 L`. Rule box category Change string length [#rule-box-category-change-string-length] The category *Change string length* contains all rule boxes that can help you control the length of your attribute values based on word or character count. Knowing the length of your values, you can cut or extend your values with the rule boxes in this category. See [Change string length](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/change-string-length) for more information on the rule boxes of this category. UUID-65f0405d-da6d-e821-bc09-72b617ce31cf Rule box category Clean up values [#rule-box-category-clean-up-values] The category *Clean up values* contains all rule boxes that can help you detect and remove irregularities in your data. For example, you can filter GTINs, separate words, decode HTML and Base64, translate colors, remove consecutive whitespace, or remove whitespace at the beginning and end of the value. Besides that, you can detect and extract values using the rule boxes in this category. See [Clean up values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/clean-up-values) for more information on the rule boxes of this category. UUID-c22c19dd-e3c0-ba4e-ca3a-ffb00112b202 Rule box category Edit image [#rule-box-category-edit-image] The category *Edit image* contains all rule boxes that can help you create and edit an image in Productsup. Using the rule boxes in this category, you can add a logo, cart, rating, or other image to your existing images, create a collage with relevant product images, and trim, resize, or rotate images. See [Edit image](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/edit-image) for more information on the rule boxes of this category. UUID-997e4020-0fdf-e6c9-b575-bce9e384e36a Rule box category Edit text [#rule-box-category-edit-text] The category *Edit text* contains all rule boxes that can help you edit text values. Using the rule boxes in this category, you can perform a variety of tasks: * Change the text's case. * Remove emojis and duplicate words. * Use keywords in your texts to predict categories for your products. * Work with HTML tags in your texts. * Group the dynamic values of other attributes in the edited attribute. * Replace words in your texts with other desired terms. * Translate Google categories. See [Edit text](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/edit-text) for more information on the rule boxes of this category. UUID-69a672f4-6a35-e104-65e8-a8871343f942 Rule box category Edit URL [#rule-box-category-edit-url] The category *Edit URL* contains all rule boxes that can help you edit your URLs. For example, you can change link parameters, add URL fragments, shorten, decode, and encode URLs. You can also skip products if their current value isn't a URL. See [Edit URL](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/edit-url) for more information on the rule boxes of this category. UUID-800257c3-c1b7-f184-9009-11e77f23b35e Rule box category Google Merchant Center [#rule-box-category-google-merchant-center] The category *Google Merchant Center* contains all rule boxes that can help you prepare your product data for GMC. This category lets you set age groups, availability, conditions, gender, expiration dates, size types, and size systems to values accepted by Google. See [Rule box category Google Merchant Center](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-google-merchant-center) for more information on the rule boxes of this category. UUID-137581ee-8133-7652-0528-22f2da75e4a4 Rule box category Include or exclude products [#rule-box-category-include-or-exclude-products] The category *Include or exclude products* contains all rule boxes that can help you control which products the platform sends to your export channels and which ones it skips during export. For example, you can choose which values should or shouldn't be in an attribute to include or exclude products during export. You can also skip products if their attribute values are empty, exceed a specific string length, contain no URL, or meet other desired conditions. See [Include or exclude products](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/include-or-exclude-products) for more information on the rule boxes of this category. UUID-a66617e3-4a0b-ca39-8920-9433b2aca9f3 Rule box category Replace values [#rule-box-category-replace-values] The category *Replace values* contains all rule boxes that can help you search, compare, and replace strings in your attribute values. You can replace text strings and numbers as well as use regular expressions and lists with the rule boxes in this category. See [Replace values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/replace-values) for more information on the rule boxes of this category. UUID-95770ef6-02d1-01ba-a7df-a430000cdd9b Rule box category Use lists [#rule-box-category-use-lists] The category *Use lists* contains the rule boxes that can apply a list you created in **Lists** to a relevant attribute within your site. To use the rule boxes of this category, you first need to create a list. See [Lists](/docs/help-center/map-and-optimize-your-data/lists). See [Use lists](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/use-lists) for more information on the rule boxes of this category. UUID-14ea8b3b-995b-1221-d1e7-c21900644920 Rule box category Use regular expressions [#rule-box-category-use-regular-expressions] The category *Use regular expressions* contains all rule boxes that let you use regex to search, match, and replace values in your attributes. Some rule boxes in this category let you use regex to set age groups, conditions, gender, and size types and prepare your product data for Google Merchant Center. See [Rule box category Use regular expressions](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-use-regular-expressions) for more information on the rule boxes of this category. UUID-f279cebe-b09a-f721-ba28-f1613cd65945 Rule box category Work with date & time [#rule-box-category-work-with-date--time] The category *Work with date & time* contains all rule boxes that can help you convert date formats, set timestamps, and add values to your attributes based on a desired date and time. See [Work with date & time](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/work-with-date-time) for more information on the rule boxes of this category. UUID-993c5dca-855d-209c-20ce-464991dab65b Rule box category Work with HTML [#rule-box-category-work-with-html] The category *Work with HTML* contains all rule boxes that can help you extract desired data from an HTML body by ID, tag name, or XPath. See [Work with HTML](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/work-with-html) for more information on the rule boxes of this category. UUID-6f16ea5b-2680-a8b8-bd2d-3313dc891401 Rule box category Work with prices & math [#rule-box-category-work-with-prices--math] The category *Work with prices & math* contains all rule boxes that can help you perform calculations, set prices, add VAT, round up numbers, convert currencies, and add discounts. See [Work with prices & math](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/work-with-prices-math) for more information on the rule boxes of this category. UUID-e755cb70-7e9e-23df-1a72-9a8e8b57100d Rule box category Other [#rule-box-category-other] The category *Other* contains miscellaneous rule boxes that can help you modify your data in different ways. For example: * Add a comment to an attribute. This can be useful for storing information about data transformations happening in the attribute. * Create a SHA-256 or MD5 hash for the values of an attribute. * Extract desired data from a JSON body. * Generate a random number or a unique ID. * Assign a site tag to the attribute. * Sort values. See [Other](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/other) for more information on the rule boxes of this category. UUID-467dcc9f-f99f-5456-98c5-d3a72f43d9db # Rule box category Other import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The rule box category *Other* contains miscellaneous rule boxes that can help you modify your data in different ways. For example, add a comment to an attribute to store information about its data transformations, create a SHA-256 or MD5 hash for the values of an attribute, extract desired data from a JSON body, generate a random number or a unique ID, assign a site tag to the attribute, sort values, etc. UUID-467dcc9f-f99f-5456-98c5-d3a72f43d9db This category can be divided into several subgroups. In the following sections, you can find how to use the rule boxes of the category *Other*: * [Provide notes in attributes and rearrange attribute contents](#section-idm23456118738379) * [Generate numbers and hashes](#section-idm234568123386951) * [Extract data from values delimited with commas or semicolons](#section-idm234569715336698) * [Work with tracking links](#section-idm234572690711806) * [Work with JSON](#section-idm234561189944803) * [Work with site tags](#section-idm234573119882414) Provide notes in attributes and rearrange attribute contents [#provide-notes-in-attributes-and-rearrange-attribute-contents] The rule box category *Other* contains the rule boxes **Comment**, **Sort Values**, and **Sort Values in Cell** to let you perform housekeeping tasks, such as adding comments for better comprehension of attribute data and its transformations or rearranging the contents of your attribute values according to a desired order. Comment [#comment] The **Comment** rule box lets you add a note to an attribute. It doesn't change the data in the attribute; it only stores any needed information for reference. For example, you can use this rule box to explain how rule boxes transform the data in the attribute or what sort of data an attribute contains. You can see the added comment in the rule box setup in Data View and in a speech bubble in Dataflow. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Comment** rule box. UUID-8a47e464-a5aa-a78b-c16f-ca1abc4eb449 In the field **comment on your dataflow**, enter your desired note. Select **Save**. For example, you have the following values in the **title** attribute where you have applied complex data transformations. You want to add a note to this attribute without changing its data to explain how the applied rule boxes work. You can achieve this with the **Comment** rule box: UUID-e9917b38-d414-e5d4-b2fa-b5a682ab8ff0 | **title** (before) | **title** (after) | **title** in Dataflow | | ------------------------------------------------ | ------------------------------------------------ | --------------------------------------------------------------------------------------- | | *Flat leather sandals with a bow, black* | *Flat leather sandals with a bow, black* | UUID-e556c4da-c391-8b54-92ab-99e31f81d06c | | *High-heel sandals with a buckle, yellowish red* | *High-heel sandals with a buckle, yellowish red* | | | *Square-toed loafers, black* | *Square-toed loafers, black* | | Sort Values [#sort-values] The **Sort Values** rule box splits your values into items using a delimiter and rearranges the items in an ascending or descending alphabetical order. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Sort Values** rule box. UUID-0736fcc3-2bb4-7b9d-4256-6796412bc893 In **Delimiter**, enter the character or characters that separate items in your values. For example, the value *XS, S, M, L, XL* uses a comma and a space character (`,`) as a delimiter.If you don't provide any input in this field, the rule box uses one space character as a default delimiter. In **Order**, select how you want the rule box to rearrange the delimited items in your values: 1. *ascending* arranges items from A to Z. This is the default option. If any items start with symbols, such as `&`, `-`, or `>`, the rule box places them at the beginning of the value. 2. *descending* arranges items from Z to A. If any items start with symbols, such as `&`, `-`, or `>`, the rule box places them at the end of the value. Select **Save**. For example, you have the following values in the **colors** attribute and want to display all the mentioned colors alphabetically, from A to Z. You can achieve this with the following setup of the **Sort Values** rule box using a comma and a space character (`,`) as a delimiter: UUID-f096f847-4d43-1f67-017e-075266c458cf | **colors** (before) | **colors** (after) | | ---------------------------------------- | ---------------------------------------- | | *white, red, blue, yellow, green, black* | `black, blue, green, red, white, yellow` | | *yellow, orange, red, purple* | `orange, purple, red, yellow` | | *khaki-black-gray* | *khaki-black-gray* | If you use only a comma as a delimiter, the values change to `black, blue, green, red, yellow,white` and `orange, purple, red,yellow`. The rule box considers a space character as the first character in each item except for the first item. Sort Values in Cell [#sort-values-in-cell] The **Sort Values in Cell** rule box splits your values into items using a delimiter and rearranges the items alphabetically or in any desired order based on a user-defined pattern or a regular expression (regex). See [Rule box category Use regular expressions](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-use-regular-expressions) for more information on regex. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Sort Values in Cell** rule box. UUID-b69d89ba-e4c7-64d8-b1b3-e63c900c4cb5 In **Delimiter**, enter the character or characters that separate items in your values. For example, the value *XS, S, M, L, XL* uses a comma and a space character (`,`) as a delimiter.If you don't provide any input in this field, the rule box uses one space character as a default delimiter. Choose how you want to rearrange the delimited items in your values: 1. To rearrange the delimited items *alphabetically*, select the desired option in **Order**: 2. *ascending* arranges items from A to Z. This is the default option. If any items start with symbols, such as `&`, `-`, or `>`, the rule box places them at the beginning of the value. 3. *descending* arranges items from Z to A. If any items start with symbols, such as `&`, `-`, or `>`, the rule box places them at the end of the value. 4. To rearrange the delimited items *in a custom order*, select the desired options in **Mode** and **Sort (optional)**: 5. Choose *string* in **Mode** to define the needed sorting order with *text* using the **Sort (optional)** field. Enter one item per line.If a value contains items not mentioned in the sorting order, the rule box places them at the end of the value in the same order they appear in the value. 6. Choose *regex* in **Mode** to define the needed sorting order with *regex* using the **Sort (optional)** field. Enter one regex-coded item per line.If a value contains items not mentioned in the sorting order, the rule box places them at the end of the value in the same order they appear in the value. An example of a regex is `/([A-Z])\w+/`. If you run a search in a text and use this regular expression, you can find all words in the searched text that have uppercase letters from A to Z. In Productsup, you can use this regex as is or change the opening and closing forward slashes to hash signs: `#([A-Z])\w+#`.See [Rule box category Use regular expressions](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-use-regular-expressions) for more information on using regular expressions in Productsup. Select **Save**. For example, you have the following values in the **sizes** attribute and want to display all the mentioned sizes in the following order: XXS, XS, S, M, L, XL, XXL, XXXL. You can achieve this with the following setup of the **Sort Values in Cell** rule box using a comma and a space character (`,`) as a delimiter: | UUID-4695a92f-fcc3-0113-e20a-953be4056a7b | UUID-9a938e1f-e37b-7eae-207f-240b6be382c0 | | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | | **sizes** (before) | **sizes** (after) | | --------------------------------- | --------------------------------- | | *M, XS, XXXL, XXS, L, S, XL, XXL* | `XXS, XS, S, M, L, XL, XXL, XXXL` | | *L, S, XXS* | `XXS, S, L` | | *M, L, S, XXXS, 5XL, XS, XXL* | `XS, S, M, L, XXL, XXXS, 5XL` | | *L#S#XL* | *L#S#XL* | Alternatively, your **sizes** attribute can have values where the same size is referred to with a capital letter and the entire word. You can rearrange these values using regular expressions and the following setup of the **Sort Values in Cell** rule box: UUID-83485737-7232-7ed0-3086-79e8be2281e1 | **sizes** (before) | **sizes** (after) | | ------------------ | ----------------- | | *M, large, S* | `S, M, large` | | *L, small, M* | `small, M, L` | | *medium, L, S* | `S, medium, L` | Generate numbers and hashes [#generate-numbers-and-hashes] The rule box category *Other* contains the rule boxes **Create sha256 hash** and **Generate MD5 Hash** to let you create hashes for your attribute values. It also contains the rule boxes **Generate Random Number** and **Generate Unique ID** to let you generate numbers and IDs for your products. Create sha256 hash [#create-sha256-hash] The **Create sha256 hash** rule box uses the SHA-256 hash function to create a unique SHA-256 hash for your attribute values and overwrite the current values with the generated hashes. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Create sha256 hash** rule box. UUID-a1b81e2f-f10f-413b-a392-6c931073fcdc Select **Save**. For example, you have the following values in the **id** attribute and want to create a SHA-256 hash for each ID. You can achieve this with the **Create sha256 hash** rule box: | **id** (before) | **id** (after) | | --------------- | ------------------------------------------------------------------ | | *15486932* | `2a5f5d78947f7412c1fa1630110ba9d18e68f05505158e7b5371b9a1eefa5ce9` | | | `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855` | | *17854695* | `2fb8978e881fe30e825e100e815ba5c68462c6ba32d59743e3a05a39bcb12c67` | | *58467896* | `96f0ee7017509a61b5057e42490213465c28d3b8fb7d1a3e0ad36235c90744e7` | Generate MD5 Hash [#generate-md5-hash] The **Generate MD5 Hash** rule box uses the MD5 hash function to create a unique and encrypted MD5 hash for your attribute values and overwrite the current values with the generated hashes. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Generate MD5 Hash** rule box. UUID-57452b29-1477-a3d4-fc25-c956dca593eb Select **Save**. For example, you have the following values in the **id** attribute and want to create an MD5 hash for each ID. You can achieve this with the **Generate MD5 Hash** rule box: | **id** (before) | **id** (after) | | --------------- | ---------------------------------- | | *15486932* | `a484163adad7688a9bcbbd5c10dc753d` | | | `d41d8cd98f00b204e9800998ecf8427e` | | *17854695* | `098beffb0816618322ff7f516b6892a3` | | *58467896* | `9cceca57666899ff8af569302181e48d` | Generate Random Number [#generate-random-number] The **Generate Random Number** rule box creates random numbers and overwrites the current values with these numbers. You can use this rule box to generate IDs for your products. However, every product row gets a new random ID every time, which means one product can have multiple IDs if your site contains multiple rows for the same product. If you need IDs that uniquely identify products without creating ambiguity, see [Generate Unique ID](#section-idm243456814068830). With every refresh in Data View and every site run, the generated number changes. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Generate Random Number** rule box. UUID-548259c6-6d8d-38ba-f571-a7c96ffe5c71 Select **Save**. For example, you have mostly empty values in the **description\_id** attribute and want to generate random numbers to create description IDs. All the descriptions in your site are different, so you can safely generate random IDs for these descriptions without worrying about duplicates. You can achieve this with the **Generate Random Number** rule box: | **description\_id** (before) | **description\_id** (after) | | ---------------------------- | --------------------------- | | *33* | `81650656484473` | | | `33378361797681` | | | `95518347712979` | | | `69430528610410` | If you refresh Data View, the description IDs will change to new random numbers. Generate Unique ID [#generate-unique-id] The **Generate Unique ID** rule box creates unique IDs for products and overwrites the current values with these IDs. It generates the same ID for all products that have the same values in the current attribute or any other chosen attributes within your site. You can also generate IDs for your products based on values in multiple attributes so that products with the same values across all the chosen attributes have the same ID. You can use the Unique ID Generator data service to create IDs for all the products within your site, project, or organization. See [Create unique IDs for your products with the Unique ID Generator](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/create-unique-ids-for-your-products-with-the-unique-id-gener). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Generate Unique ID** rule box. UUID-9e4dec0e-62e7-5501-201d-3e230edfe331 In **Algorithm**, choose what type of algorithm the rule box should use to create your IDs.Options producing IDs with numbers only: * *SHA1 (48 digits)* uses the SHA-1 hash function to create roughly 48-character long IDs with numbers only. For example, `84044912709718804110787965505457268176973725696`. * *SHA256 (±70 digits)* uses the SHA-256 hash function to create roughly 70-character long IDs with numbers only. For example, `81983725597162597899440910891210119525448112224341689875515260969905123491840`. * *CRC32 (8 digits)* uses the cyclic redundancy check algorithm to create 10-character long IDs with numbers only. For example, `3212973355`. This is the default option. Options producing IDs with letters and numbers: * *SHA1 (40 digits)* uses the SHA-1 hash function to create 40-character long IDs with numbers and letters. For example, `0eb8b4484399e1de23588be80cdb85ee416ffbea`. * *SHA256 (64 digits)* uses the SHA-256 hash function to create 64-character long IDs with numbers and letters. For example, `b54124f069a39c825ff04eabd8b8ccbe81264179e1783d4046a9eece93eb8cc7`. In **Column**, select what attributes the rule box should use as a basis for ID generation. For example, if two products have the same value in the chosen base attributes, the rule box creates the same ID for both products. If you don't select an attribute, the rule box follows the same logic using the values of the current attribute. Select **Save**. For example, you have mostly empty values in the **id** attribute and want to create IDs based on the contents of **title** and **brand** because the combination of these values uniquely identifies your products. You can achieve this with the following setup of the **Generate Unique ID** rule box: UUID-1cf14a78-1db3-f6ab-cbb4-6c177a05fc51 | **title** (no changes) | **brand** (no changes) | **id** (before) | **id** (after) | | --------------------------------- | ---------------------- | --------------- | -------------- | | *Flat leather sandals with a bow* | *Massimo Dutti* | *33* | `2292198251` | | *High-heel sandals with a buckle* | *Manolo Blahnik* | | `3102086305` | | *Square-toed loafers* | *COS* | *24* | `3611269347` | | *Flat leather sandals with a bow* | *Massimo Dutti* | | `2292198251` | | *Square-toed loafers* | *& Other Stories* | | `1479925199` | The rule box identified the *Flat leather sandals with a bow* product by *Massimo Dutti* as the same product and assigned `2292198251` as an ID in both cases. Extract data from values delimited with commas or semicolons [#extract-data-from-values-delimited-with-commas-or-semicolons] The rule box category *Other* contains the rule boxes **Custom Product\_type** and **Xml Key Value Mapping** to let you extract the longest or the mapped part of a value from attributes delimited with commas or semicolons. Custom Product_type [#custom-product_type] The **Custom Product\_type** rule box uses a comma (`,`) as a delimiter to split your values into items, identify the longest item, and overwrite the current value with the longest item. If there are multiple longest items with the same number of characters, the rule box overwrites the current value with the longest item that appears last. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Custom Product\_type** rule box. UUID-eb938162-4d0d-4506-2d8a-28fc6f6f36db Select **Save**. For example, you have the following values in the **colors** attribute and want to display only the longest color in your values. You can achieve this with the **Custom Product\_type** rule box: | **colors** (before) | **colors** (after) | | ---------------------------------------- | ---------------------- | | *white, red, blue, yellow, green, black* | `yellow` | | *yellow, orange, red, purple* | `purple` | | *khaki - black - gray* | *khaki - black - gray* | Xml Key Value Mapping [#xml-key-value-mapping] The **Xml Key Value Mapping** rule box overwrites the current values with the needed parts of a value from a selected attribute if another selected attribute contains a match of a regular expression (regex). This rule box works specifically with two interconnected attributes whose values are delimited with a semicolon and a space character (`;`). For example, attribute A contains the value *key 1; key 2; key 3; key 4*, and attribute B contains the value *value 1; value 2; value 3; value 4*. The rule box uses a regex to find the needed key in attribute A and then overwrites the current value with the part of attribute B that corresponds to the needed key in attribute A. See [Rule box category Use regular expressions](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-use-regular-expressions) for more information on regex. The **Xml Key Value Mapping** rule box looks for one regex match only and ignores all subsequent regex matches in your key attribute. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Xml Key Value Mapping** rule box. UUID-445f4813-c34f-c931-df8a-60209f020fa3 In **Key Column**, select the attribute whose values the rule box should search using a regex. The attributes listed here and their searched contents come from a previous stage. In **Value Column**, select the attribute where the rule box should map the regex match to a corresponding part of the value. The rule box then uses the mapped part of the value from this attribute to overwrite the values in the current attribute.The attributes listed here and their searched contents come from a previous stage. In **Match**, enter a regular expression to find the needed key in the first selected attribute. An example of a regex is `/([A-Z])\w+/`. If you run a search in a text and use this regular expression, you can find all words in the searched text that have uppercase letters from A to Z. In Productsup, you can use this regex as is or change the opening and closing forward slashes to hash signs: `#([A-Z])\w+#`.See [Rule box category Use regular expressions](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-use-regular-expressions) for more information on using regular expressions in Productsup. Select **Save**. For example, the **attribute\_names** attribute contains names of multiple product attributes delimited with a semicolon and a space character (`;`), and the **attribute\_values** attribute contains the values of those attributes stored in the same order and delimited in the same way. You want to extract product IDs from the **attribute\_values** attribute into the **id** attribute. You can achieve this with the following setup of the **Xml Key Value Mapping** rule box: UUID-341a0d23-9f38-7ec3-0d61-f48269e6dd2c | **attribute\_names** (no changes) | **attribute\_values** (no changes) | **id** (before) | **id** (after) | | -------------------------------------- | ----------------------------------------------------------- | --------------- | -------------- | | *brand; price; title; id* | *Gucci; 1400.00 EUR; Tall rubber boots; 1547896544* | *1* | `1547896544` | | *title; ID; size; availability; brand* | *Eco-leather sneakers; 8475; ; out of stock;* | | `8475` | | *id; brand; color; title; id* | *971; Prada; yellow; Flat leather sandals with a bow; 4444* | *3* | `971` | If you want to extract brands from the **attribute\_values** attribute into the **brand** attribute, you can use the regex `/brand/` and get the following result: | **attribute\_names** (no changes) | **attribute\_values** (no changes) | **brand** (before) | **brand** (after) | | -------------------------------------- | ----------------------------------------------------------- | ------------------ | ----------------- | | *brand; price; title; id* | *Gucci; 1400.00 EUR; Tall rubber boots; 1547896544* | *C\&A* | `Gucci` | | *title; ID; size; availability; brand* | *Eco-leather sneakers; 8475; ; out of stock;* | | | | *id; brand; color; title; id* | *971; Prada; yellow; Flat leather sandals with a bow; 4444* | *H\&M* | `Prada` | Work with tracking links [#work-with-tracking-links] The rule box category *Other* contains the rule boxes **ePro Tracking** and **RefinedLabs Tracking** to let you create tracking links using attributes in your site. ePro Tracking [#epro-tracking] The **ePro Tracking** rule box percent-encodes your current URLs and transforms them into tracking or deep links using the `http://ad.eanalyzer.de/` domain and URL parameters populated with the desired static and dynamic values. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **ePro Tracking** rule box. UUID-075434d6-00f4-1dbc-c80b-7014d01bb7e8 Choose dynamic values for your output URLs: 1. In **group**, select the attribute whose values the rule box should add as values for the `group` property of your output URL. For example, it can be your **category** attribute. The attributes listed here and their contents come from a previous stage. 2. In **id**, select the attribute whose values the rule box should add as values for the `id` property of your output URL. For example, it can be your **id** attribute. The attributes listed here and their contents come from a previous stage. Optionally, you can add more parameters to your output URL. Use the following fields to add static values to all links: 1. In **TrKCatID**, enter your tracking category ID. 2. In **campid**, enter the ID of your tracking campaign. 3. In **zac**, enter a value for the `zac` property of your output URL. 4. In **client**, enter a value for the `client` property of your output URL. 5. In **channel**, enter a value for the `channel` property of your output URL. Select **Save**. For example, you have the following values in the **link** attribute and want to transform them into tracking URLs starting with `http://ad.eanalyzer.de/` and featuring your products' categories and IDs, as well as the tracking category ID and the campaign ID. You can achieve this with the following setup of the **ePro Tracking** rule box: UUID-192652ee-03a0-005c-7483-fd3b04fb7e29 | **category** (no changes) | **id** (no changes) | **link** (before) | **link** (after) | | ------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *Apparel & Accessories > Shoe Accessories* | *111* | *[https://www.your-store.com/images/white-socks-1?utm\_campaign=google\_play](https://www.your-store.com/images/white-socks-1?utm_campaign=google_play)\~* | `http://ad.eanalyzer.de/1147?campid=5846&group=Apparel+%26+Accessories+%3E+Shoe+Accessories&id=111&url=https%3A%2F%2Fwww.your-store.com%2Fimages%2Fwhite-socks-1%3Futm_campaign%3Dgoogle_play%E2%80%8B%7E` | | *Home & Garden > Linens & Bedding > Bedding > Blankets* | *222* | *[https://www.your-store.com/images/black-socks-1](https://www.your-store.com/images/black-socks-1)* | `http://ad.eanalyzer.de/1147?campid=5846&group=Home+%26+Garden+%3E+Linens+%26+Bedding+%3E+Bedding+%3E+Blankets&id=222&url=https%3A%2F%2Fwww.your-store.com%2Fimages%2Fblack-socks-1` | | *Apparel & Accessories > Clothing > Underwear & Socks* | *333* | *[https://www.your-store.com/images/black-socks-2](https://www.your-store.com/images/black-socks-2)* | `http://ad.eanalyzer.de/1147?campid=5846&group=Apparel+%26+Accessories+%3E+Clothing+%3E+Underwear+%26+Socks&id=333&url=https%3A%2F%2Fwww.your-store.com%2Fimages%2Fblack-socks-2` | RefinedLabs Tracking [#refinedlabs-tracking] The **RefinedLabs Tracking** rule box percent-encodes your current URLs and transforms them into tracking or deep links using the `http://r.refinedads.com/` domain and URL parameters populated with the desired static and dynamic values. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **RefinedLabs Tracking** rule box. UUID-cebfd03a-f9cd-bd0c-62db-80a3f0c863b8 Use the following fields to add static values to all links: 1. In **aid**, enter a value for the `aid` property of your output URL. 2. In **oid**, enter a value for the `oid` property of your output URL. Choose dynamic values for your output URLs: 1. In **c1**, select the attribute whose values the rule box should add as values for the `c1` property of your output URL. The attributes listed here and their contents come from a previous stage. 2. In **c2**, select the attribute whose values the rule box should add as values for the `c2` property of your output URL. The attributes listed here and their contents come from a previous stage. 3. In **c3**, select the attribute whose values the rule box should add as values for the `c3` property of your output URL. The attributes listed here and their contents come from a previous stage. Select **Save**. For example, you have the following values in the **link** attribute and want to transform them into tracking URLs starting with `http://r.refinedads.com/` and featuring your products' IDs, titles, and colors, as well as the export and client IDs. You can achieve this with the following setup of the **RefinedLabs Tracking** rule box: UUID-2210d0d0-30c1-b470-28b1-bacc87ef94c2 | **id** (no changes) | **title** (no changes) | **color** (no changes) | **link** (before) | **link** (after) | | ------------------- | --------------------------------- | ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *111* | *Flat leather sandals with a bow* | *white* | *[https://www.your-store.com/images/flats-1?utm\_campaign=google\_play](https://www.your-store.com/images/flats-1?utm_campaign=google_play)\~* | `http://r.refinedads.com/r.rfa?aid=1147&oid=5846&c1=111&c2=Flat+leather+sandals+with+a+bow&c3=white&url=https%3A%2F%2Fwww.your-store.com%2Fimages%2Fflats-1%3Futm_campaign%3Dgoogle_play%E2%80%8B%7E` | | *222* | *High-heel sandals with a buckle* | *yellow* | *[https://www.your-store.com/images/heels-2](https://www.your-store.com/images/heels-2)* | `http://r.refinedads.com/r.rfa?aid=1147&oid=5846&c1=222&c2=High-heel+sandals+with+a+buckle&c3=yellow&url=https%3A%2F%2Fwww.your-store.com%2Fimages%2Fheels-2` | | *333* | *Square-toed loafers* | *khaki* | *[https://www.your-store.com/images/loafers-1](https://www.your-store.com/images/loafers-1)* | [http://r.refinedads.com/r.rfa?aid=1147\&oid=5846\&c1=333\&c2=Square-toed+loafers\&c3=khaki\&url=https%3A%2F%2Fwww.your-store.com%2Fimages%2Floafers-1](http://r.refinedads.com/r.rfa?aid=1147\&oid=5846\&c1=333\&c2=Square-toed+loafers\&c3=khaki\&url=https%3A%2F%2Fwww.your-store.com%2Fimages%2Floafers-1) | Work with JSON [#work-with-json] The rule box category *Other* contains the rule boxes **Extract Value from Json** and **Extract with JSONPath** to let you extract the needed keys from JSON bodies. Extract Value from Json [#extract-value-from-json] The rule box **Extract Value from Json** extracts a value from a specific field within a JSON object. It works with JSON bodies that contain only one object. To extract values from JSON bodies with multiple objects, use the **Extract with JSONPath** rule box. See [Extract with JSONPath](#section-idm243456123111628). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Extract Value from Json** rule box. UUID-603a30f4-a1e3-417c-ba78-e8565f5e2a70 In **Extract from field**, enter the name of the key where you want to extract a value. Select **Save**. For example, you have the following values in your **GTIN** attribute and want to have only the GTINs in your values instead. You can achieve this with the **Extract Value from Json** rule box by entering `GTIN` in the setup: | **GTIN** (before) | **GTIN** (after) | | ------------------------------------------------------------------------------------------------------------------ | ---------------- | | `{ "GTIN":"4028516019993", "height":"30 MM", "color1":"black", "color2":"gray", "color3":"white" }` | `4028516019993` | | `{ "height":"50 MM", "GTIN":"4026402626043", "color1":"yellow", "color2":"orange", "color3":"" }` | `4026402626043` | Extract with JSONPath [#extract-with-jsonpath] The **Extract with JSONPath** rule box extracts values from specific fields within a JSON body using the path to the needed key. It is useful if your JSON bodies have multiple objects with the same or similar sets of keys. See [JSONPath Online Evaluator](https://jsonpath.com/) to learn about JSONPath syntax and test it. The **Extract with JSONPath** rule box supports Twig input. To reference values from other attributes, you can use a Twig template in your JSONPath. See [Twig-based rule box capabilities to enhance your product data](/docs/help-center/add-a-rule-box/advanced-rule-box-options/twig-based-rule-box-capabilities-to-enhance-your-product-dat) for more information on using Twig with rule boxes in Productsup. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Extract with JSONPath** rule box. UUID-c52bced8-2b8e-e9a4-efa0-bb4bf05f606f In **JSONPath**, enter the query to filter all keys in the JSON structure and extract the needed values. Optionally, you can use a Twig template inside your JSONPath to reference other attribute's values.If needed, you can use the AI-based JSONPath generator to create the needed JSONPath. 1. Select the **>\_** icon in the top-right corner of the rule box. UUID-b6a206c5-c041-0115-8b50-40fd85781f6c 2. Describe what you want to extract from the JSON body in the *JSONPath generator* window and select **Generate**. UUID-ef68f7e9-6d76-5ac9-d111-1c302d6a41a3 3. Select **Copy** and then choose **Dismiss**. 4. Paste the copied suggestion into the **JSONPath** field of the rule box. In **Output format**, select how the platform should display the extracted values: * *JSON* overwrites the current value with the extracted values formatted as a JSON body. This is the default option. * *Comma-separated list* overwrites the current value with the extracted values separated by commas. Select **Save**. For example, you have the following values in your **GTIN** attribute and want to have only the GTINs in your values instead. You can achieve this with the **Extract with JSONPath** rule box by entering `$.[?(@.GTIN != "")].GTIN` in **JSONPath**: | **GTIN** (before) | **GTIN** (after) | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | | `[ { "GTIN":"4028516019993", "height":"30 MM", "color1":"black", "color2":"gray", "color3":"white" }, { "height":"50 MM", "GTIN":"4026402626043", "color1":"yellow", "color2":"orange", "color3":"" }, { "height":"70 MM", "GTIN":"", "color1":"green", "color2":"blue", "color3":"purple" } ]` | `["4028516019993","4026402626043"]` | | `[ { "GTIN":"7564538217089", "color1":"black", "color2":"gray", "color3":"orange" }, { "GTIN":"7564538217000", "color1":"black", "color2":"white", "color3":"" }, { "GTIN":"", "color1":"lilac", "color2":"red", "color3":"yellow" } ]` | `["7564538217089","7564538217000"]` | If you want to extract values from your JSON bodies based on the values of another attribute, you can use a Twig template in your JSONPath. For example, you can use the JSONPath `$.[?(@.height == "{{ height }}")].GTIN` where the Twig `{{ height }}` lets you reference the needed GTIN within the JSON body to extract values as follows: | **height** (no changes) | **GTIN** (before) | **GTIN** (after) | | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | | *30 MM* | `[ { "GTIN":"4028516019993", "height":"30 MM", "color1":"black", "color2":"gray", "color3":"white" }, { "height":"50 MM", "GTIN":"4026402626043", "color1":"yellow", "color2":"orange", "color3":"" }, { "height":"70 MM", "GTIN":"", "color1":"green", "color2":"blue", "color3":"purple" } ]` | `["4028516019993"]` | | *50 MM* | `[ { "GTIN":"4028516019993", "height":"30 MM", "color1":"black", "color2":"gray", "color3":"white" }, { "height":"50 MM", "GTIN":"4026402626043", "color1":"yellow", "color2":"orange", "color3":"" }, { "height":"70 MM", "GTIN":"", "color1":"green", "color2":"blue", "color3":"purple" } ]` | `["4026402626043"]` | Work with site tags [#work-with-site-tags] The rule box category *Other* contains the rule boxes **Get Site-Tag by Name**, **Set Property Value**, and **Set To Site ID** to let your exported data contain information about the Productsup site where your product data originates from. Get Site-Tag by Name [#get-site-tag-by-name] The **Get Site-Tag by Name** rule box overwrites your current values with the value of the needed tag located in the settings of the site. It is useful when exporting data via API because it helps you learn what site the data comes from. See [Edit site settings](/docs/help-center/get-started/manage-your-organization-projects-and-sites/edit-site-settings#section-idm4537334570507234216798019084) to add a site tag. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Get Site-Tag by Name** rule box. UUID-222ace42-c12a-bef3-d761-f8ed0dd8f5b3 In **Tagname**, enter the name of the site tag whose value you want to add in the current attribute. Select **Save**. For example, you export your product data from multiple Productsup sites into one of your internal systems using an API. You see an issue with the product data in your internal system, but you don't know which site in Productsup to open to fix the issue. You can use site tags to help you locate the source site. In one of the sites, you create the following site tag: UUID-52b3c044-3a9d-af9a-c188-3525a4252405 In the same site, you create the **project\_country\_tag** attribute where you want to store the value of the corresponding site tag. You can achieve this with the **Get Site-Tag by Name** rule box by entering `project_country` as the tag name: | **project\_country\_tag** (before) | **project\_country\_tag** (after) | | ---------------------------------- | --------------------------------- | | \[empty] | `germany` | | \[empty] | `germany` | | \[empty] | `germany` | Set Property Value [#set-property-value] The **Set Property Value** rule box uses a Twig template to add site information, such as a site ID or a site tag, in your current values. It is useful when exporting data via API because it helps you learn what site the data comes from. See [Twig-based rule box capabilities to enhance your product data](/docs/help-center/add-a-rule-box/advanced-rule-box-options/twig-based-rule-box-capabilities-to-enhance-your-product-dat) to learn how to work with Twig in Productsup. See [Edit site settings](/docs/help-center/get-started/manage-your-organization-projects-and-sites/edit-site-settings#section-idm4537334570507234216798019084) to add a site tag if needed. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Property Value** rule box. UUID-b525fea2-c7d8-adb2-1061-367907fced95 In **Mode**, select a suitable value modification option: 1. *set* completely overwrites the current value with the desired site information. This is the default option. 2. *append* adds the desired site information at the end of the current value and separates it with a space character. 3. *prepend* adds the desired site information at the beginning of the current value and separates it with a space character. In **Template**, enter the Twig that should add the needed site information in the current attribute. For example, `{{ Site.id }}` adds a site ID and `{{Tags.tag1}}` adds the value of a site tag named *tag1*. Select **Save**. For example, you export your product data from multiple Productsup sites into one of your internal systems using an API. You see an issue with the product data in your internal system, but you don't know which site in Productsup to open to fix the issue. You can use site tags to help you locate the source site. In all the sites that export data to your internal system, you create a site tag called *project\_country* and assign the needed country value to it as follows: UUID-52b3c044-3a9d-af9a-c188-3525a4252405 Then, you create the **project\_country\_tag** attribute in all of these sites. In this attribute, you want to store the value of the corresponding site tag. In the site where the created site tag has the value *germany*, you add the following setup of the **Set Property Value** rule box to the **project\_country\_tag** attribute to add the needed site tag value as shown: UUID-bb80928c-310a-a1b5-7c1a-8f2ee6fc350b | **project\_country\_tag** (before) | **project\_country\_tag** (after) | | ---------------------------------- | --------------------------------- | | | `germany` | | | `germany` | | | `germany` | Now, instead of adding and setting up this rule box in all the other sites, you can use the bulk option *Add Dataflow Boxes* to copy this rule box setup to the other sites in bulk. See [Advanced rule box options](/docs/help-center/add-a-rule-box/advanced-rule-box-options#section-idm232217535173292). Set To Site ID [#set-to-site-id] The **Set To Site ID** rule box overwrites your current values with the ID of the current site. It is useful when exporting data via API because it helps you learn what site the data comes from. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set To Site ID** rule box. UUID-a01062a5-e5d7-9cb0-de04-050d2e1dbcf9 Select **Save**. For example, you export your product data from multiple Productsup sites into one of your internal systems using an API. You see an issue with the product data in your internal system, but you don't know which site in Productsup to open to fix the issue. You create the **site\_id** attribute in a site where the ID is *11118888*. In this attribute, you want to store the site ID. You can achieve this with the **Set To Site ID** rule box: | **site\_id** (before) | **site\_id** (after) | | --------------------- | -------------------- | | | `11118888` | | | `11118888` | | | `11118888` | # Rule box category Replace values import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The category *Replace values* contains all rule boxes that can help you search, compare, and replace strings in your attribute values. You can replace text strings and numbers as well as use regular expressions and lists with the rule boxes in this category. UUID-95770ef6-02d1-01ba-a7df-a430000cdd9b This category can be divided into several subgroups. In the following sections, you can perform the following replacement actions: * [Replace static text and translate Google categories](#section-idm232219540875962) * [Replace dynamic text based on a condition](#section-idm232219542144965) * [Convert special characters and code](#section-idm4614106873684833169843386072) * [Create text template using data from other attributes](#section-idm353458339224944) * [Replace values with list-based rule boxes](#section-idm353448163501348) * [Replace values using regular expressions](#section-idm234482911709419) Replace static text and translate Google categories [#replace-static-text-and-translate-google-categories] The *Replace values* rule box category contains the rule boxes to let you replace static values across all products in your attribute's column. The conditions are static and affect all products containing the search value. You can also translate your Google categories from one language to another. You can choose one of the following rule boxes: * [Text Replace](#N1658483877601) searches for a term in the attribute and replaces it with a needed value. * [Map-Replace](#section-idm4559654540299233166411708491) searches for several terms in the attribute and replaces whole words, parts of the words, or phrases within a string. * [Mapping](#N1658484066851) searches for several terms in the attribute and replaces only the entire string if it matches the search term. * [Translate Google Category](#section-idm353448164076954) translates your Google categories from one language to another. Consider using *Lists* instead of rule boxes if replacing over 100 terms. See [Replace feed terms with the Standard Replacement list](/docs/help-center/map-and-optimize-your-data/lists/replace-feed-terms-with-the-standard-replacement-list). Text Replace [#text-replace] The **Text Replace** rule box searches for a term in the attribute and replaces it with a needed value. Use this rule box to replace a term or remove excessive spaces. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Text Replace** rule box. UUID-96016eb7-a8a4-7c31-a157-8cf7318e0a42 Enter the value you want to replace in the **Search for** field. Enter the value you want to have instead of the existing value in the **Replace by** field. Leave the *Replace by* field empty if you want to remove your search term. To remove space, see [Clean up values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/clean-up-values). In **Case**, select whether the matches should be case-sensitive: * *Sensitive* replaces values only if the case of the value matches in *Search for* and *Replace by*. * *Insensitive* ignores the case of the values during matching. Select **Save**. For example, you have the following values in the **description** attribute. Your need to replace *women* with *female* in all products. You can achieve this by setting up the **Text Replace** rule box as follows: UUID-4bf17171-7a30-3df9-e8af-5f649ab917a6 | **description** (before) | **description** (after) | | ------------------------ | ----------------------- | | *Women's clothes* | `female's clothes` | | *women clothes* | `female clothes` | To remove excessive spaces from the string, enter a space in the **Search for** field and leave the **Replace by** empty. | **description** (before) | **description** (after) | | ------------------------ | ----------------------- | | *Discount !* | `Discount!` | Map-Replace [#map-replace] The **Map-Replace** rule box lets you replace several different values within a string. The rule box can replace whole words, parts of the words, or phrases within a string. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Map-Replace** rule box. UUID-3a56abf6-192d-d06c-0aa0-21007da103be Enter search value into the field. If you have multiple values, start each search value with a new line. The order of the input values is important. The rule box processes each replacement operation in order from top to bottom. The order change can lead to different results. Add the delimiter directly after your search term to separate it from the replace value. The rule box selects **Colon (:)** as a default. But if the colon (**:**) is a part of the phrase you want to replace, you can use another delimiter. You should choose your delimiter in the **List Delimiter** drop-down menu. Enter the replace value directly after the delimiter. In **Case**, select whether the matches should be case-sensitive: * *Sensitive* replaces values only if the case of the search and replace values. * *Insensitive* ignores the case of the values during matching. Select **Save**. For example, you have the following values in the **description** attribute. Your need to replace *Please note:* with *Discount!* and *Today* with *Only today* in all products. You can achieve this by setting up the **Map-Replace** rule box as follows: UUID-b5e113fd-7fc4-87f6-1416-936441259fed | **description** (before) | **description** (after) | | ------------------------------------------------------ | -------------------------------------------------------- | | *Please note: Today you get two for the price of one.* | `Discount! Only today you get two for the price of one.` | There are cases when the order of the search terms is important. For example, if you have values that differ only slightly, such as *blue dress* and *dress*, and you need to change them both to *female clothes*, consider the following order of entering your search terms in the rule box. The longest string should go first. UUID-3ed66397-53c2-547d-3fd4-28f86196a5aa | **description** (before) | **description** (after) | | ------------------------ | ----------------------- | | *blue dress* | `female clothes` | | *dress* | `female clothes` | With the reverse order of the search terms, the result looks as follows: UUID-f042c76e-d97f-9d7a-d3a1-f6888bedbe4a | **description** (before) | **description** (after) | | ------------------------ | ----------------------- | | *blue dress* | `blue female clothes` | | *dress* | `female clothes` | Mapping [#mapping] The **Mapping** rule box lets you replaces only the entire string if it matches the search term. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Mapping** rule box. UUID-d3cdad18-0cc8-aedf-a7ef-192c7d172de3 Enter search value into the field. If you have multiple values, start each search value with a new line. Add the colon delimiter (**:**) directly after your search value. Enter the replace value without spaces after the delimiter. In **Case**, select whether the matches should be case-sensitive: * *Sensitive* replaces values only if the case of the search and replace values. * *Insensitive* ignores the case of the values during matching. Select **Save**. For example, you have the following values in the **description** attribute. You need to replace *blue* with *pink*. You can achieve this by setting up the **Mapping** rule box as follows: UUID-ce49b8cc-e504-9f2d-ab7b-468c152173c1 | **description** (before) | **description** (after) | | ------------------------ | ----------------------- | | *blue* | `pink` | | *This product is blue.* | *This product is blue.* | The example shows that *This product is blue.* stays unchanged as the search term doesn't match the entire string. Translate Google Category [#translate-google-category] The *Replace values* rule box category contains the **Translate Google Category** rule box to let you translate your Google categories from one language to another. Google accepts only a predefined list of values in the **category** attribute. You can use a *Partner Taxonomy Mapping* list to ensure your **category** attribute contains values accepted by Google. See [Replace attributes with Partner Taxonomy Mapping list](/docs/help-center/map-and-optimize-your-data/lists/replace-attributes-with-partner-taxonomy-mapping-list) for more information. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Translate Google Category** rule box. UUID-032b21ed-f260-b5ca-c653-bb858d62d9fb In **Source Format**, select the current language and country of your Google categories.Choose *id* if your category attribute contains category IDs instead of spelled-out category names. In **Target Format**, select the language and country you want to translate your Google categories into.Choose *id* if you want to transform your spelled-out category names into category IDs. You can remove all invalid categories from your category attribute without translating them by selecting the same languages in **Source Format** and **Target Format**. Select **Save**. For example, your **category** attribute contains valid Google categories for the US in English, and you need to translate them into valid Google categories in German. | **category** (before) | **category** (after) | | ------------------------------------------------------- | ----------------------------------------------------------------- | | *Apparel & Accessories > Shoe Accessories > Slippers* | \[empty] | | *Home & Garden > Linens & Bedding > Bedding > Blankets* | `Heim & Garten > Bett- und Haushaltswäsche > Bettwäsche > Decken` | | *Apparel & Accessories > Clothing > Underwear & Socks* | `Bekleidung & Accessoires > Bekleidung > Unterwäsche & Socken` | If you select *id* in **Target Format** for the same use case, the rule box outputs the following: | **category** (before) | **category** (after) | | ------------------------------------------------------- | -------------------- | | *Apparel & Accessories > Shoe Accessories > Slippers* | | | *Home & Garden > Linens & Bedding > Bedding > Blankets* | `1985` | | *Apparel & Accessories > Clothing > Underwear & Socks* | `213` | Replace dynamic text based on a condition [#replace-dynamic-text-based-on-a-condition] The *Replace values* rule box category contains the rule boxes to let you replace dynamic values across all products in your attribute's column. You can choose one of the following rule boxes: * [Replace Dynamic Value](#N1658497608712) replaces the current attribute's values with another attribute's values or a static value. * [Replace if Column Contains](#N1658497622205) replaces a value if there is a match with a value from another attribute. * [Compare Columns](#N1658497639002) assigns a value if data in two attribute columns match. * [Replace In Between](#section-idm232219544406186) removes or replaces a value between two other values. * [Numeric Compare](#section-idm353448323123758) sets a value by comparing the values in two selected attributes. Replace Dynamic Value [#replace-dynamic-value] The **Replace Dynamic Value** rule box searches the current attribute for the values from the search attribute and replaces them with the values from the replace attribute or a static value. If the rule box doesn't find the search terms in the current attribute, no changes happen. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Replace Dynamic Values** rule box. UUID-9ec2dde7-83af-28e5-72b3-a5691a3fde31 In **Search Column**, choose an attribute where the rule box should take the search values. The attributes listed here and their searched contents come from a previous stage. In **Replace Column**, choose the attribute where the rule box takes the replace values. The attributes listed here and their searched contents come from a previous stage. If you don't want to take values from another attribute, enter a value in the **Static Value** that should appear in the current attribute. In **Match Type**, select the matching logic: * *broad* lets the rule box search for and replace part of the value, even if it is a part of the word. The matching is case-insensitive. * *exact* lets the rule box search for and replace values only if the entire words match. The matching is case-insensitive. The *broad* match mode can significantly increase your site processing times. If applicable, we recommend choosing the *exact* match mode instead. Select **Save**. For example, you need to replace the values in the **title** attribute that contain data from the **gender** attribute with the data from the **brand** attribute. You can achieve this by setting up the **Replace Dynamic Value** rule box as follows: UUID-38a88cca-153d-6bd4-f421-276c8d20365c | **gender** | **brand** | **title** (before) | **title** (after) | | ---------- | ------------ | ------------------ | -------------------- | | *female* | *Collection* | *female dress* | `Collection dress` | | *male* | *Collection* | *male t-shirt* | `Collection t-shirt` | | *Male* | *Collection* | *female dress* | `feCollection dress` | When the matching mode is *broad*, the rule box changes even the matching parts of the words. Replace if Column Contains [#replace-if-column-contains] The **Replace if Column Contains** rule box searches for the search term in another attribute and replaces the values in the current attribute with a replace term, in case of a match. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Replace if Column Contains** rule box. UUID-0f42cd57-0e54-64a1-1b44-42eb4723bf8b In **Column**, choose the attribute where the rule box should search for a value. The attributes listed here and their searched contents come from a previous stage. Enter the values in the following order, separating them with a colon **:** and following the template `search column:search for replace:replace`: * *search column* is a value to search for in the attribute chosen in **Column**. * *search for replace* is a value you want to replace in the current attribute, where you apply the rule box. * *replace* is a value that should replace the value in the current attribute. Select **Save**. For example, you need to replace *Adults* in the **age\_group** attribute with *Kids* if the rule box finds the word *small* in the **size** attribute. You can achieve this by setting up the **Replace if Column Contains** rule box as follows: UUID-c05cd881-3126-c25f-38ea-170f7428ffda | **size** (no changes) | **age\_group** (before) | **age\_group** (after) | | --------------------- | ----------------------- | ---------------------- | | *small* | *Adults* | `Kids` | | *medium* | *Adults* | *Adults* | Compare Columns [#compare-columns] The **Compare Columns** rule box compares values in two selected attributes and modifies the current value if the compared values match. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Compare Columns** rule box. UUID-3f5edd1e-a82e-2145-6850-4a782e528753 Select attributes you wish to compare in the **Column A** and **Column B** drop-down menus. The attributes listed here and their searched contents come from a previous stage. In **Handle match**, choose the action type if there is a match between the selected attributes and enter a replace value: * *leave unchanged* doesn't change the current value. * *assign* completely overwrites the current value with the set value. * *append* adds the set value at the end of the current value. * *prepend* adds the set value at the beginning of the current value. In **Handle no match**, choose the action type if there is no match between the selected attributes and enter a replace value: * *leave unchanged* doesn't change the current value. * *assign* completely overwrites the current value with the replace value. * *append* adds the replacement value at the end of the current value. * *prepend* adds the replace value at the beginning of the current value. Choose an action if one of the attributes doesn't exist: * *treat as empty* set an empty value. * *leave unchanged* doesn't change the current value. Select **Save**. The matching is case-sensitive, and the values should match completely. For example, you want to assign `50 EUR` to the **price** attribute if the values in **title** and **brand** match. You can achieve this by setting up the **Compare Column** rule box as follows: UUID-4a272504-a4dc-85ef-5e31-ccf15acc4873 | **brand** | **title** | **price** (before) | **price** (after) | | --------- | ----------------- | ------------------ | ----------------- | | *MyBrand* | *MyBrand* | *100 EUR* | `50 EUR` | | *Brand* | *MyBrand* | *90 EUR* | *90 EUR* | | *MyBrand* | *MyBrand dresses* | *89 EUR* | *89 EUR* | | | | | `50 EUR` | In this example, only the values of the first row match completely, and the rule box replaces the value in **price** with `50 EUR`. The values from the other two rows don't entirely match, and the rule box leaves them unchanged as per the settings. Also, if both values in the attributes are empty, the rule box considers this a match and sets the value according to your settings. Text Replace if Column Contains [#text-replace-if-column-contains] The **Text Replace if Column Contains** rule box searches for a term in the selected attribute and, if it finds it, replaces the value in the current attribute with a replacement value. This rule box works similarly to the **Map-Replace** rule box but also lets you set a condition for replacement. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Text Replace if Column Contains** rule box. UUID-afa02fd9-ed41-6183-3633-a6be1075bb0f In **Source Column**, select an attribute where the rule box should search for a value. The attributes listed here and their searched contents come from a previous stage. Select the matching logic: * *equals* lets the rule box search for and replace value only if the entire string matches. The matching is case-insensitive. * *contains* lets the rule box search for and replace value if part of the string matches. The matching is case-insensitive. In the **search** field, enter the term you want to replace in the current attribute. The matching is case-sensitive. In the **replace** field, enter the term you want to set instead of the existing term in the current attribute. Select **Save**. For example, you want to replace *female* with *lady* in the **gender** attribute if the rule box finds *women* in the **description** attribute. You can achieve this by setting up the **Text Replace if Column Contains** rule box as follows: UUID-093afaf9-9bc5-47d7-af65-67ef0fb2c1d9 | **description** | **gender** (before) | **gender** (after) | | ---------------------------- | ------------------- | ------------------ | | *Women's little black dress* | *female* | `lady` | | *Blue trousers* | *female* | *female* | | *Women's white t-shirt* | *Female* | *Female* | The example shows that **description** should contain an exact match to the search term but can have different capitalization. The second condition is that the term from the **search** field should exactly match the term in the current attribute, and it considers capitalization. Replace In Between [#replace-in-between] The **Replace In Between** rule box removes or replaces a value between two other values. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Replace In Between** rule box. UUID-c8ef139b-b724-2cfb-9db9-7eb70d83457d Enter the values that frame the term you want to replace in **From** and **To**. The rule box replaces the entire phrase, including the entered values. Add a replace value into the **Replace With** field. You can enter spaces or punctuation marks before and after the term to separate it from the rest of the words in the string. Select **Save**. For example, you need to replace all **description** values within the quotation marks with another value. You can achieve this by setting up the **Replace In Between** rule box as follows: UUID-be837b28-e54c-7d4c-41cd-5038aded87bc | **description** (before) | **description** (after) | | ------------------------ | ----------------------- | | *"white" dress* | `"new" dress` | | *"little black" dress* | `"new" dress` | If you enter `new` in **Replace With** without the quotes, the platform changes both values to `new dress`. Numeric Compare [#numeric-compare] The **Numeric Compare** rule box compares numeric values in two selected attributes and overwrites the values in the current attribute with a set value. The rule box can only handle numeric values without text or currency symbols. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Numeric Compare** rule box. UUID-fc04bd15-30ee-a200-9ff0-629705b80568 In the first and second **Select Option** drop-down menus, select the attributes that you want to compare and select the comparison operator between them: * *>* means that the first value is bigger than the second. * *\<* means that the first value is less than the second. * *>=* means that the first value is bigger or equal to the second. * *\<=* means that the first value is less or equal to the second. * *==* means that the first value is equal to the second. * *!=* means that the first value isn't equal to the second. The attributes listed here and their searched contents come from a previous stage. In the **handle match** field, enter the value you want to assign when the attribute finds a match for the comparison of two values from the selected attributes. In the **handle no match** field, enter the value you want to set instead of the values in the current attribute if there is no match for the comparison of two values of the selected attributes. You can choose how to set the value: * *leave unchanged* doesn't change the current value. * *assign* completely overwrites the current value with the set value. * *append* adds the set value at the end of the current value. * *prepend* adds the set value at the beginning of the current value. Select **Save**. For example, you need to replace all values in the **description** attribute with `Sale!` if the values in **price** are less or equal (*\<=*) to the values in **sale\_price**. You can achieve this by setting up the **Numeric Compare** rule box as follows: UUID-67c303a7-010f-32bf-1a44-2106e87190cb | **price** | **sale\_price** | **description** (before) | **description** (after) | | --------- | --------------- | ------------------------ | ----------------------- | | *70.00* | *99.00* | *Black dress* | `Sale!` | | *150.00* | *99.00* | *Blue dress* | *Blue dress* | Convert special characters and code [#convert-special-characters-and-code] The *Replace values* rule box category contains the rule boxes to let you convert special characters and encoding: * [Convert Special Characters](#section-idm234483232451559) changes special characters into letters. * [Convert Character Encoding](#section-idm234483232296632) converts your data from one encoding into another. * [Remove UTF-8 Control Characters](#N1724163199567) removes the hidden UTF-8 control characters. Convert Special Characters [#convert-special-characters] The **Convert Special Characters** rule box changes special characters to Latin letters, such as *€* to *EUR*, *Ü* to *UE*, *ß* to *ss*, and so on. Here is the full list of characters this rule box converts: | ä => `ae` | Ć => `C` | Ì => `I` | ß => `ss` | | --------- | -------- | --------- | ---------- | | á => `a` | Č => `C` | ñ => `n` | ś => `s` | | à => `a` | ë => `e` | ń => `n` | š => `s` | | â => `a` | è => `e` | Ñ => `N` | Ś => `S` | | æ => `ae` | é => `e` | Ń => `N` | Š => `S` | | ã => `a` | ê => `e` | ö => `oe` | ü => `ue` | | å => `a` | É => `E` | ô => `o` | û => `u` | | ā => `a` | È => `E` | ò => `o` | ù => `u` | | Ä => `Ae` | Ê => `E` | ó => `o` | ú => `u` | | À => `A` | Ë => `E` | õ => `o` | ū => `u` | | Á => `A` | Ė => `E` | œ => `o` | Ü => `Ue` | |  => `A` | î => `i` | ø => `o` | Û => `U` | | Æ => `Ae` | ï => `i` | ō => `oe` | Ù => `U` | | à => `A` | í => `i` | Ö => `Oe` | Ú => `U` | | Å => `A` | ī => `i` | Ô => `O` | Ū => `U` | | Ā => `A` | ì => `i` | Ò => `O` | ÿ => `y` | | ç => `c` | Î => `I` | Ó => `O` | Ÿ => `Y` | | ć => `c` | Ï => `I` | Õ => `O` | € => `EUR` | | č => `c` | Í => `I` | Œ => `Oe` | | | Ç => `C` | Ī => `I` | Ō => `O` | | Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Convert Special Characters** rule box. UUID-8644fb94-b353-38b1-8bf9-5f47b5704783 Select **Save**. For example, you have the *€* sign in the **price** attribute, and your export channel requires receiving all prices in the format *EUR*. You can achieve this with the **Convert Special Characters** rule box: | **price** (before) | **price** (after) | | ------------------ | ----------------- | | *7 €* | `7 EUR` | | *12€* | `12EUR` | The example shows that the rule box changes the special character even if there is no space between it and the rest of the text. Convert Character Encoding [#convert-character-encoding] The **Convert Character Encoding** rule box changes your encoded data into a different encoding. It can convert UTF-8, Windows-1251, and Windows-1252 characters into ASCII, US-ASCII, UTF-8, ISO-8859-1, Windows-1251, and Windows-1252. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Convert Character Encoding** rule box. UUID-ab163376-331e-5d4d-c515-3e0a57262b11 Select the encoding of your data in the **Source Encoding** drop-down menu: * *UTF-8* * *Windows-1251* * *Windows-1252* Select the encoding of your data in the **Target Encoding** drop-down menu: * *UTF-8* * *ASCII* * *US-ASCII* * *ISO-8859-1* * *Windows-1251* * *Windows-1252* In **Additional Options**, select what the rule box should do in case it can't find the corresponding representation to the character in the target encoding: 1. *TRANSLIT* lets the rule box find a similar character in the target encoding. 2. *IGNORE* lets the rule box discard the character. 3. *TRANSLIT & IGNORE* performs both *TRANSLIT* and *IGNORE*, whichever is more appropriate. Select **Save**. Remove UTF-8 Control Characters [#remove-utf-8-control-characters] The **Remove UTF-8 Control Characters** rule box removes hidden UTF-8 control characters, such as `\xc2\x80`, and replaces them with space or nothing. Sometime the import or export may fail because you data contains invisible characters. See [UTF-8 encoding table and Unicode characters](https://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=string-literal) for a list of them. Invisible Unicode characters don't have a visual representation. You can't see them, however they affect your data. To check if your value contains invisible characters, such as *\<0x9X>*, use a text editor or this [tool](https://www.soscisurvey.de/tools/view-chars.php). UUID-938e6909-1e3c-974f-7446-3f3748acb8ef You can remove them with the **Remove UTF-8 Control Characters** rule box. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Remove UTF-8 Control Characters** rule box. UUID-082bf08d-4d23-12d4-d96f-cc49e390801f In the **Replace with**, select what you want to get instead of the value: * *White space* sets the space instead of the removed code. * *No space* doesn't set anything instead of the removed code. Select **Save**. Create text template using data from other attributes [#create-text-template-using-data-from-other-attributes] The *Replace values* rule box category contains the rule boxes that let you insert values from several attributes into the text of the selected attribute. You can choose one of the following rule boxes: * [Text Template](#section-idm234583413526659) adds the values dynamically with the help of Twig. * [Text Template With List](#section-idm353458342433778) adds the values dynamically with the help of Twig and a list created in **Lists**. Text Template [#text-template] The **Text Template** rule box adds the values dynamically with the help of Twig. Twig is a template engine based on PHP that lets you add dynamic content to the template. See [Twig-based rule box capabilities to enhance your product data](/docs/help-center/add-a-rule-box/advanced-rule-box-options/twig-based-rule-box-capabilities-to-enhance-your-product-dat) for use cases and rules on how to create Twig codes. * The **Text Template** rule box functions similarly to the [Add static or dynamic values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/add-static-or-dynamic-values#section-idm243451110290446) rule box but lets you link values from several attributes together with static placeholder text. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Text Template** rule box. UUID-d5667726-3983-d457-c19e-b86007e61f53 Enter your text template in the input field.To add a dynamic value, enter the exact name of the attribute between two curly brackets and spaces at the beginning and end of the value, such as `{{ attribute_name }}`.The rule box uses the attributes and their contents from a previous stage. If the chosen attributes have any changes in their values in the same stage where you apply the rule box, the platform still uses the unchanged values as they come from a previous stage. Select the **>\_** icon in a rule box to get AI-based suggestions for Twig codes.To create the most accurate prompts, see our best practices in [Create the right prompt for the AI Twig generator](/docs/help-center/best-practices/create-the-right-prompt-for-the-ai-twig-generator). Select **Save**. For example, you need to create product descriptions in the **description** attribute from your **product\_type** and **brand** attributes. You can achieve this with the **Text Template** rule box by entering this Twig-based text template in the input field: `This is a {{ product_type }} by {{ brand }}.`. | **product\_type** (no changes) | **brand** (no changes) | **description** (before) | **description** (after) | | ------------------------------ | ---------------------- | ------------------------ | --------------------------------- | | *T-shirt* | *Nike* | | `This is a T-shirt by Nike.` | | *Training bra* | *Puma* | *Purple training bra* | `This is a Training bra by Puma.` | | | *Adidas* | *Adidas shorts* | `This is a by Adidas.` | Text Template With List [#text-template-with-list] The **Text Template With List** rule box applies a text template using Twig and values taken from a list created in **Lists**. See [Lists](/docs/help-center/map-and-optimize-your-data/lists) for more information on lists. Go to **Lists** from your site's main menu and add all terms you need to replace to the *Standard*, *Dynamic*, or *Attribute-based Replacement* list. See [Lists](/docs/help-center/map-and-optimize-your-data/lists#section-idm13275861981064) to choose a required type. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Text Template With List** rule box. UUID-5ff6a633-551c-d4b8-9e07-62edeb9e9696 Select **use list** to choose a list that contains the values you want to use in the text template. Enter your text template in the input field.To add a dynamic value, enter the exact name of the attribute between two curly brackets and spaces at the beginning and end of the value, such as `{{ attribute_name }}`.The rule box uses the attributes and their contents from a previous stage. If the chosen attributes have any changes in their values in the same stage where you apply the rule box, the platform still uses the unchanged values as they come from a previous stage.To refer to the values of the selected list and add them all separated with a comma and a space character (**,**), use the following Twig: `{{ ListValues | join(', ') }}`. Select the **>\_** icon in a rule box to get AI-based suggestions for Twig codes.To create the most accurate prompts, see our best practices in [Create the right prompt for the AI Twig generator](/docs/help-center/best-practices/create-the-right-prompt-for-the-ai-twig-generator). Select **Save**. For example, you have created the following list called *colors* and added all available product colors to it: UUID-ddffb770-97f9-64eb-c54f-bb4912ce6772 You need to create product descriptions in the **description** attribute using the values from the **title** attribute and the replace terms added to the list. You can achieve this with the following setup of the **Text Template With List** rule box: UUID-a08f5b9b-d12b-9f87-2d8e-8b115ebc7c58 | **title** (no changes) | **description** (before) | **description** (after) | | ---------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------ | | *T-shirt* | | `T-shirt. This product is available in cosmo black, yellowish red, grass green. Perfect for all sports activities.` | | *Training bra* | *Black training bra* | `Training bra. This product is available in cosmo black, yellowish red, grass green. Perfect for all sports activities.` | | | *Adidas shorts* | `. This product is available in cosmo black, yellowish red, grass green. Perfect for all sports activities.` | Replace values with list-based rule boxes [#replace-values-with-list-based-rule-boxes] The *Replace values* rule box category contains the replacement rule boxes to let you replace a large number of values in your data, adding them to a replacement list that you can apply to the following rule boxes. The rule boxes search for the list terms in the attribute's column and replace matching values in bulk: * **Replacement** applies a replacement list to substitute the matching complete words in the string with the mapped terms from the list. * **Replacement Sensitive** applies a replacement list to substitute the matching parts of the word, a complete word within a string, or an entire string with the terms from the list. * **Taxonomy Mapping** applies a replacement list to substitute the entire string or only a part of the string with the terms from the list. This rule box works best if you need to replace the category terms. See [Use lists](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/use-lists) to set up the rule boxes. Replace values using regular expressions [#replace-values-using-regular-expressions] The *Replace values* rule box category contains the rule boxes that let you use regular expressions to replace certain values. A regular expression (regex) is a sequence of characters that uses specific syntax or structure rules to define a search pattern. Using a regex, you can search your data for specific text pattern matches instead of exact text matches. You can choose one of the following rule boxes: * **Preg Match** scans the attribute for matches to the regex specified in the rule box until it finds the first match in a string. Then, it preserves the matching part and removes the rest of the string. * **Preg Match All** scans the attribute for matches to the regex specified in the rule box to find all matches within the entire string, while the **Preg Match** rule box stops scanning a value after the first match. * **Preg Replace** scans the attribute for matches to the regex specified in the rule box and replace all the matching values with a static value of your choice. See [Rule box category Use regular expressions](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-use-regular-expressions) to set up the rule boxes. # Rule box category Work with HTML import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The category *Work with HTML* contains all rule boxes that can help you extract desired data from an HTML body by ID, tag name, or XPath. UUID-6f16ea5b-2680-a8b8-bd2d-3313dc891401 This rule box category contains the following rule boxes: * [HTML getElementById](#section-idm243325295636608) lets you extract data from HTML code using IDs defined in the tags. * [HTML getElementByTagName](#section-idm243325295656104) lets you extract data from HTML code using tag names. * [HTML getElementByXpath](#section-idm243325295687536) lets you extract data from HTML code using paths to relevant elements within the code. The rule boxes in the category *Work with HTML* help you extract the needed data from the crawled HTML code after using the *Data Crawler* data service. If this is your case, you need to take the steps described in [Prerequisites](#section-idm4594798194915233253128169108) before using these rule boxes. If your use case doesn't involve the *Data Crawler* data service, you can skip these steps and use the rule boxes of this category to extract data from HTML. Extracting information from HTML code is a technically advanced task. If you require assistance, contact your in-house developers or Customer Success Manager or reach out to [support@productsup.com](mailto:support@productsup.com). Prerequisites [#prerequisites] If you want to use the rule box category *Work with HTML* to extract data from crawled HTML code after using the *Data Crawler* data service, first you need to: . Set up and run the *Data Crawler* data service. See [Crawl product landing pages with the Data Crawler](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/crawl-product-landing-pages-with-the-data-crawler). . Map the attribute **\_\_\_service\_datacrawler\_data** containing your source HTML code to an intermediate or export attribute where you can apply the needed rule boxes. . Identify the elements in the crawled HTML code that you need to extract data from: Open one of your crawled product pages and find the data you want to extract on the page. To access the HTML code of the needed page element, use your browser's functionality to open the developer's panel and inspect the page element containing your data. In the HTML code of the needed page element, find the tag that stores the needed data and copy the tag's name, featured ID, or Xpath. You can later choose a suitable rule box based on which element you can use to access the right HTML tag within your source code. Here are examples of these elements: 1. A tag's IDThe tag `
` has an `id` attribute containing the value `top-pager` in the following code snippet: ```
``` If you find a suitable tag ID that uniquely identifies the tag containing the data you want to extract, you can use the rule box **HTML getElementById**. 2\. A tag's nameThe tag named `
    ` contains two list items `
  • ` in the following code snippet: ```
    ``` If you find the name of a suitable tag that contains the data you want to extract, you can use the rule box **HTML getElementByTagName**. 3\. XpathAn Xpath is the full path to a chosen element in the code structure. Find the needed tag in the developer's panel of your browser, open the context menu, and select **Copy XPath**. For example, the first `
  • ` tag in the following code snippet has the Xpath `/div/ul/li[1]`. ```
    ``` If you find the needed Xpath that identifies the location of the code element containing the data you want to extract, you can use the rule box **HTML getElementByXpath**. Sometimes, the crawled code of your product page can differ from the code of that page accessed on your live website in the developer's panel of your browser. The Xpaths may vary as well. To get the Xpath to the needed element in your crawled code, you can: Copy your crawled code and paste it into a local file on your computer. Save the file as an HTML. Open the HTML file in your browser and proceed using the developer's panel. HTML getElementById [#html-getelementbyid] The rule box **HTML getElementById** extracts data from HTML code using a specific ID defined in a tag. If the rule box doesn't find the provided tag ID in a value, it empties the value. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **HTML getElementById** rule box. UUID-c58eff60-b735-6a0a-6b54-966fceb83b3b In **ID**, enter the tag ID that uniquely identifies the tag containing the data you want to extract. Select **Save**. For example, you have the following values in the **html\_code** attribute and want to extract product names from these HTML bodies. You can achieve this with the **HTML getElementById** rule box by entering `productName` as the tag ID: | **html\_code** (before) | **html\_code** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | | `

    Flat leather sandals with a bow

    ` | `Flat leather sandals with a bow` | | `

    High-heel sandals with a buckle

    ` | `High-heel sandals with a buckle` | HTML getElementByTagName [#html-getelementbytagname] The rule box **HTML getElementByTagName** extracts data from HTML code using a specific name of a tag. If the rule box doesn't find the provided tag name in a value, it empties the value. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **HTML getElementByTagName** rule box. UUID-be39c819-274d-93d6-2705-34847e4ff514 In **Tagname**, enter the name of the tag containing the data you want to extract. If a value contains multiple matches of the defined tag, you can enter a number in **Occurance** to let the rule box know which occurrence of the defined tag you want to extract: * Enter *0* or leave the field empty to extract the first occurrence of the tag. * Enter *1* to extract the second occurrence of the tag. If a value contains only one occurrence of the provided tag name, but you want to extract the second one, the rule box empties the value. Select **Save**. For example, you have the following values in the **html\_code** attribute and want to extract product names from these HTML bodies. You can achieve this with the **HTML getElementByTagName** rule box by entering `div` as the tag name: | **html\_code** (before) | **html\_code** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | | `

    Flat leather sandals with a bow

    High-heel sandals with a buckle

    ` | `Flat leather sandals with a bow` | | `

    High-heel sandals with a buckle

    ` | `High-heel sandals with a buckle` | HTML getElementByXpath [#html-getelementbyxpath] The rule box **HTML getElementByXpath** extracts data from HTML code using the Xpath leading to the element in the code that stores your data. If the rule box doesn't find the provided Xpath in a value, it empties the value. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **HTML getElementByXpath** rule box. UUID-65380f3f-7f69-1d2c-3bcd-94e4c3c9b3d8 In **XPath**, enter the path leading to the element in the code that contains the data you want to extract. If a value contains multiple matches of the defined path, you can enter a number in **Occurance** to let the rule box know which occurrence of the defined path you want to extract: * Enter *0* or leave the field empty to extract the first occurrence of the path. * Enter *1* to extract the second occurrence of the path. If a value contains only one occurrence of the provided path, but you want to extract the second one, the rule box empties the value. Select **Save**. For example, you have the following values in the **html\_code** attribute and want to extract product names from these HTML bodies. You can achieve this with the **HTML getElementByXpath** rule box by entering `//div/h1` as the Xpath: | **html\_code** (before) | **html\_code** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | | `

    Flat leather sandals with a bow

    High-heel sandals with a buckle

    ` | `Flat leather sandals with a bow` | | `

    High-heel sandals with a buckle

    ` | `High-heel sandals with a buckle` | Further work with the crawled data [#further-work-with-the-crawled-data] After extracting the needed data using the rule box category *Work with HTML*, you may need to drill further into your HTML data. For example, you can extract data via split strings or regex. Extract data via split strings [#extract-data-via-split-strings] To split the HTML code into bits and preserve only the needed parts of it, you can use the following split string rule boxes: * **Split String** splits a string into parts and removes the unneeded parts. * **Split String for PLA** splits a string into parts and removes the unneeded parts. If the rule box finds no splitter character in a string, it empties the string. * **Split String & Filter** splits a string into parts, removes the unneeded data, and trims the length of your resulting values according to a character limit. * **Split String and Count Items** splits a string into parts, counts them, and replaces the current value with the number of data parts found in it. See [Change string length](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/change-string-length) for more information on split string rule boxes. Extract data via regex [#extract-data-via-regex] To search your HTML data for information that matches specific search patterns defined using regular expressions, you can use the following regex rule boxes: * **Preg Replace** searches your data for regex matches and replaces the matches with values of your choice. * **Preg Match** searches your data for a regex match, preserves the matching part of the data, and removes the rest of the string. The **Preg Match** rule box stops scanning a string as soon as it finds a match, so the rule box saves only the first match if there are multiple matches in a string. * **Preg Match All** has the same functionality as the **Preg Match** rule box, but it lets the platform find and preserve multiple regex matches within a string. * **Set Value if Match (Regex)** specifies the values of one attribute based on the results of a regex search performed in another attribute. See [Rule box category Use regular expressions](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-use-regular-expressions) for more information on regex rule boxes. # Rule box category Change string length import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The category *Change string length* contains all rule boxes that can help you control the length of your attribute values based on word or character count. Knowing the length of your values, you can cut or extend your values with the rule boxes in this category. UUID-65f0405d-da6d-e821-bc09-72b617ce31cf This category can be divided into several subgroups. In the following sections, you can learn how to use the rule boxes of each subgroup: * [Count the number of characters or words](#section-idm234409194566318) * [Cut or extend text based on string length](#section-idm234409196982844) * [Extract specific parts of values with split string rule boxes](#section-idm232221351802675) * [Add a static or dynamic value if it fits a character limit](#section-idm23440920712381) Count the number of characters or words [#count-the-number-of-characters-or-words] The category *Change string length* contains the rule boxes **Character count** and **Word count** to let you count the number of characters and words in your attribute values. Character count [#character-count] The **Character count** rule box counts the number of characters or bytes in a text value and overwrites the current value with the result. You can also find out the number of characters in your attribute values using the *Length Distribution* section of the Analyzer feature. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Character count** rule box. UUID-12e41df3-ff2a-c0a7-c876-8160a7fd14ab In the drop-down menu, choose whether the rule box should count and output the number of bytes or characters. Select **Save**. For example, you have the following values in the **color** attribute. See how the **Character count** rule box counts the number of characters and overwrites the current values with the result if you select *character* in the drop-down menu: | **color** (before) | **color** (after) | | ------------------ | ----------------- | | *black* | `5` | | *red* | `3` | | | `0` | Word count [#word-count] The **Word count** rule box counts the number of words in a text value and overwrites the current value with the result. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Word count** rule box. UUID-da6c616d-be5c-5b84-2fcf-1f62aebe4d9c Select **Save**. For example, you have the following values in the **color** attribute. See how the **Word count** rule box counts the number of words and overwrites the current values with the result: | **color** (before) | **color** (after) | | ------------------ | ----------------- | | *black and white* | `3` | | *red* | `1` | | | `0` | Cut or extend text based on string length [#cut-or-extend-text-based-on-string-length] The rule box category *Change string length* contains the rule boxes **Cut first characters**, **Cut last characters**, **Cut last words**, **Extend Text**, **Trim Category Tree**, **Trim to 70 characters**, and **Trim to 150 characters** to let you reduce or increase the length of text values in your site. You can also use the *Shorten Text* and *Lengthen Text* data services to achieve similar results. See [Shorten, lengthen, or create text from attributes with AI data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/shorten-lengthen-or-create-text-from-attributes-with-ai-data). Cut first characters [#cut-first-characters] The **Cut first characters** rule box removes a desired number of characters at the beginning of your text values, including when it means cutting off a part of a word. This rule box can be useful if you need to meet a length limit for an attribute's values or remove the same part of text added at the beginning of all values. You can also use the *Shorten Text* data service to achieve similar results. See [Shorten, lengthen, or create text from attributes with AI data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/shorten-lengthen-or-create-text-from-attributes-with-ai-data). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Cut first characters** rule box. UUID-05fa25e8-7133-b2c2-18b6-7e0591808641 In the **Use** drop-down menu, choose whether the rule box should cut the number of characters or bytes at the beginning of each value. In the input field, enter a desired number of characters or bytes that the rule box should cut off. If a value is shorter than the number of characters in this field, the rule box empties the value. Select **Save**. For example, you have the following values in the **title** attribute and want to cut off the first 15 characters in each value because the sale is over. You can achieve this with the following setup of the **Cut first characters** rule box: UUID-934d5df9-2380-5b27-6b3f-cb80b7c92cf0 | **title** (before) | **title** (after) | | ----------------------------- | ----------------- | | *SALE! 50% OFF! Socks* | `Socks` | | *50% OFF Cap* | \[empty] | | *SALE! 50% OFF! Pajama Pants* | `Pajama Pants` | Cut last characters [#cut-last-characters] The **Cut last characters** rule box does a hard cut when a text value reaches a desired character limit, including when it means cutting off a part of a word. This rule box can be useful if you need to meet a length limit for an attribute's values. You can also use the *Shorten Text* data service to achieve similar results. See [Shorten, lengthen, or create text from attributes with AI data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/shorten-lengthen-or-create-text-from-attributes-with-ai-data). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Cut last characters** rule box. UUID-2b0db040-b024-abdd-b2af-7ae9be11cab7 In **Cut last characters if length exceeds ... characters**, enter a desired character limit to let the rule box cut off all following characters when a text length reaches the limit. Select **Save**. For example, you have the following values in the **title** attribute and want each value to stay within the limit of 15 characters. You can achieve this with the **Cut last characters** rule box by entering `15` as the limit: | **title** (before) | **title** (after) | | -------------------------------------- | ----------------- | | *Red Socks* | `Red Socks` | | *Pillow Case with Fluffy Eco-Feathers* | `Pillow Case wit` | | *Pajama Pants for Kids* | `Pajama Pants f` | Compare these results to how the **Cut last words** rule box works. See [Cut last words](#N1720605542410). Cut last words [#cut-last-words] The **Cut last words** rule box cuts off all words that exceed a desired character limit in a text value and ensures your text values don't break off in the middle of a word, unlike the **Cut last characters** rule box. This rule box can be useful if you need to meet a length limit for an attribute's values. You can also use the *Shorten Text* data service to achieve similar results. See [Shorten, lengthen, or create text from attributes with AI data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/shorten-lengthen-or-create-text-from-attributes-with-ai-data). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Cut last words** rule box. UUID-06f1e62a-5944-7e86-7034-dc3cad4df473 In **Cut last words if length exceeded**, enter a desired character limit to let the rule box cut off all words outside the character limit. Select **Save**. For example, you have the following values in the **title** attribute and want each value to stay within the limit of 15 characters. At the same time, you need each value to end with a full word. You can achieve this with the **Cut last words** rule box by entering `15` as the limit: | **title** (before) | **title** (after) | | -------------------------------------- | ----------------- | | *Red Socks* | `Red Socks` | | *Pillow Case with Fluffy Eco-Feathers* | `Pillow Case` | | *Pajama Pants for Kids* | `Pajama Pants` | Compare these results to how the **Cut last characters** rule box works. See [Cut last characters](#N1720606785014). Extend Text [#extend-text] The **Extend Text** rule box lets you increase the length of a text value by setting a desired character limit and, if a value is shorter, filling the rest of it with a desired text until it reaches the limit. If a value doesn't reach the character limit with the added text string, the rule box repeats the string as many times as necessary to reach the character limit. This rule box can be useful if you need to meet a minimum length requirement for an attribute's values. You can also use the *Lengthen Text* data service to achieve similar results. See [Shorten, lengthen, or create text from attributes with AI data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/shorten-lengthen-or-create-text-from-attributes-with-ai-data). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Extend Text** rule box. UUID-f871c649-603a-08eb-a2e7-325a1e312235 In **length of the output string**, enter a desired character limit that the rule box should meet when adding and repeating a string. If a current value exceeds the character limit you set in this field, the Extend Text rule box doesn't add any text to the value and doesn't cut it to fit the limit. In **fill character(s)**, enter the string you want the rule box to add and repeat in your text value until it reaches the desired character limit. In the drop-down menu, select where you want to add the string within the value: 1. *left* adds the string at the beginning of the current value. 2. *right* adds the string at the end of the current value. 3. *both* adds the string both at the beginning and end of the current value. Select **Save**. For example, you have the following values in the **short\_description** attribute and want each value to be exactly 30 characters long. Some values are shorter than that, so you want to add a piece of text to extend the length of those values and reach the desired 30-character limit. You can achieve this with the following setup of the **Extend Text** rule box: UUID-c3c5bea0-6786-5985-c3d6-c1b71a50a42c | **short\_description** (before) | **short\_description** (after) | | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | | *Red Socks* | `Red Socks. Next-Day Shipping.` There is a space character at the end of the value. | | *Pillow Case with Fluffy Eco-Feathers* | *Pillow Case with Fluffy Eco-Feathers* | | *Pajama Pants for Kids* | `Pajama Pants for Kids. Next-Da` | Trim Category Tree [#trim-category-tree] The **Trim Category Tree** rule box cuts off category items at the `>` delimiter if they exceed a defined character limit. This rule box can be useful if you need to meet a length limit for the **category** attribute. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Trim Category Tree** rule box. UUID-ff558197-72c7-db52-7bf8-10696917d0d1 In **Cut last categories at the delimiter '>' if length exceeds ... characters**, enter a desired character limit for your categories. Select **Save**. For example, you have the following values in the **category** attribute and want each value to stay within the limit of 50 characters. You can achieve this with the **Trim Category Tree** rule box by entering `50` as the limit: | **category** (before) | **category** (after) | | ------------------------------------------------------- | -------------------------------------------- | | *Apparel & Accessories > Shoe Accessories* | `Apparel & Accessories > Shoe Accessories` | | *Home & Garden > Linens & Bedding > Bedding > Blankets* | `Home & Garden > Linens & Bedding > Bedding` | | *Apparel & Accessories > Clothing > Underwear & Socks* | `Apparel & Accessories > Clothing` | Trim to 70 characters [#trim-to-70-characters] Google accepts values for the **brand** attribute if they are no longer than 70 characters. The **Trim to 70 characters** rule box does a hard cut when a text value reaches a 70-character limit, including when it means cutting off a part of a word. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Trim to 70 characters** rule box. UUID-e57cd4e0-6ab4-3ffb-f6fc-f13612a65225 Select **Save**. For example, you have the following values in the **brand** attribute and want each value to stay within the limit of 70 characters. You can achieve this with the **Trim to 70 characters** rule box: | **brand** (before) | **brand** (after) | | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------- | | *Natural History Museum and Royal Philharmonic Orchestra (RPO) Collaboration* | `Natural History Museum and Royal Philharmonic Orchestra (RPO) Collabo` | | *Harley-Davidson Motor Company* | `Harley-Davidson Motor Company` | Trim to 150 characters [#trim-to-150-characters] Google accepts values for the **title** attribute if they are no longer than 150 characters. The **Trim to 150 characters** rule box does a hard cut when a text value reaches a 150-character limit, including when it means cutting off a part of a word. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Trim to 150 characters** rule box. UUID-ad2b540f-32b4-f6b0-1cd9-53bb01238cd0 Select **Save**. For example, you have the following values in the **title** attribute and want each value to stay within the limit of 150 characters. You can achieve this with the **Trim to 150 characters** rule box: | **title** (before) | **title** (after) | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | *Kitchen Container for Organic Waste - Pine Wood & Stainless Steel for Organic Leftovers - Dishwasher-Safe - Removable Lid - Removable Insert* | `Kitchen Container for Organic Waste - Pine Wood & Stainless Steel for Organic Leftovers - Dishwasher-Safe - Removable Lid - Removable Insert` | | *Medium-Size Kitchen Bin for Compost with Lid Indoor 8L - Green Plastic Container for Organic Waste - Ventilation Holes Preventing Humidity Build-Up and Odor Spreading to Kitchen* | `Medium-Size Kitchen Bin for Compost with Lid Indoor 8L - Green Plastic Container for Organic Waste - Ventilation Holes Preventing Humidity Build-Up a` | Extract specific parts of values with split string rule boxes [#extract-specific-parts-of-values-with-split-string-rule-boxes] The category *Change string length* contains the rule boxes **Split String**, **Split String for PLA**, **Split String & Filter**, and **Split String and Count Items** to let you shorten the values of attributes containing category paths, lists, or other data types that involve multiple data points. Using these rule boxes, you can split each text value into data points using a delimiter and preserve only the needed parts of the value in an attribute. All split string rule boxes follow a specific method of numbering data points within strings using delimiters. This method supports both positive and negative numbers. For example, when applying any split string rule box to the category path *Animals & Pet Supplies > Pet Supplies > Dog Supplies > Dog Beds*, the platform assigns the following numbers to each step of the category path: | Positive numbers | `0` | `>` | `1` | `>` | `2` | `>` | `3` | | ---------------- | ------------------------ | -------------- | -------------- | ---------- | --- | --- | --- | | Category path | `Animals & Pet Supplies` | `Pet Supplies` | `Dog Supplies` | `Dog Beds` | | | | | Negative numbers | `-4` | `-3` | `-2` | `-1` | | | | Using these numbers and the greater-than sign (`>`) as a delimiter in a split string rule box, you can let the platform know which data points you want to retrieve and what character splits the string into data points. You can use both positive and negative numbers of data points in a split string rule box. However, if you need to retrieve a couple of data points at the end of a string, and the strings in your attribute don't always have the same number of data points, you should use negative numbers. Split String [#split-string] The **Split String** rule box uses delimiters and analyzes the values of an attribute to extract and save only those parts of the values you need. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Split String** rule box. UUID-49d0e3b4-b1c9-17d7-6dc6-2fec021ef7e5 Enter the delimiter character that splits your string into multiple data points in **Splitter**. The platform never displays the splitter in the output if you extract only one data point from the value. To see the splitter in the output value, you need to extract at least two data points. In **From**, enter the number of the data point from which the platform should start extracting information. The expected input format for this field is a digit.See the [previously shown numbering example](#informaltable-idm243305572252982) to identify the number of your desired data point. Enter how many data points you want the platform to extract from your values in **Items**.The expected input format for this field is a digit. Only positive numbers are acceptable. If you leave **Items** empty, the platform extracts all data points of the string, starting with the data point specified in **From**. Select **Save**. For example, you want to shorten a category path and keep only the first 2 category items in the **category** attribute. You can achieve this with the following setup of the **Split String** rule box: UUID-c406e167-c05d-58f4-f0eb-cc2e05827e15 | **category** (before) | **category** (after) | | ----------------------------------------------------------------- | --------------------------------------- | | *Animals & Pet Supplies > Pet Supplies > Dog Supplies > Dog Beds* | `Animals & Pet Supplies > Pet Supplies` | | *Home & Garden > Linens & Bedding > Bedding > Blankets* | `Home & Garden > Linens & Bedding` | | *Apparel & Accessories > Clothing* | `Apparel & Accessories > Clothing` | The **Split String** rule box can also let you extract information from a long text. For example, you want to extract product colors from the **description** attribute where all descriptions use the same template: *The manufacturer uses only natural and hypoallergenic materials to produce these \[products]. Colors available: color1, color2, and color3. Size range: size1, size2, and size3*. You can extract colors from these descriptions with the following setup of two **Split String** rule boxes: UUID-b670fb29-c734-4fbb-2920-3e54fca4616d There is a space character at the end of the input value `Colors available:`. | **description** (before) | **description** (intermediate values before applying the second rule box) | **description** (after) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------- | | *The manufacturer uses only natural and hypoallergenic materials to produce these dog beds. Colors available: black, gray, white, green, yellow, and lilac. Size range: XS, S, M, L, XL, and XXL* | `The manufacturer uses only natural and hypoallergenic materials to produce these dog beds. Colors available: black, gray, white, green, yellow, and lilac` | `black, gray, white, green, yellow, and lilac` | | *The manufacturer uses only natural and hypoallergenic materials to produce these dog blankets. Colors available: brown, gray, green, and blue. Size range: XS, S, L, and XXL* | `The manufacturer uses only natural and hypoallergenic materials to produce these dog blankets. Colors available: brown, gray, green, and blue` | `brown, gray, green, and blue` | | *The manufacturer uses only natural and hypoallergenic materials to produce these climbing trees for cats. Colors available: beige, gray, white, black, and brown. Size range: M, L, and XL* | `The manufacturer uses only natural and hypoallergenic materials to produce these climbing trees for cats. Colors available: beige, gray, white, black, and brown` | `beige, gray, white, black, and brown` | Split String for PLA [#split-string-for-pla] The **Split String for PLA** rule box uses delimiters and analyzes the values of an attribute to extract and save only those parts of the values you need. If the rule box finds no delimiter in a value, it empties the value to prevent you from sending incorrect data to your export channels. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Split String for PLA** rule box. UUID-e21eff4c-924c-4bb7-0f0c-9fa69e4d4ce7 Enter the delimiter character that splits your string into multiple data points in **Splitter**. The platform never displays the splitter in the output if you extract only one data point from the value. To see the splitter in the output value, you need to extract at least two data points. In **From**, enter the number of the data point from which the platform should start extracting information. The expected input format for this field is a digit.See the [previously shown numbering example](#informaltable-idm243305572252982) to identify the number of your desired data point. If you enter `0` in **From**, the platform starts extracting information from your first data point and, after finding no splitter character in the string, returns the entire string as if it consisted of one data point only.To have the Split String for PLA rule box empty the values that contain no splitter characters, specify any number in **From** but for `0` and negative numbers. Enter how many data points you want the platform to extract from your values in **Items**.The expected input format for this field is a digit. Only positive numbers are acceptable. If you leave **Items** empty, the platform extracts all data points of the string, starting with the data point specified in **From**. Select **Save**. Google accepts the following values for the **gender** attribute: | Rule box and setup | **category** (before) | **category** (after) | | ---------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------- | | UUID-30a50b3a-04fb-3872-9c57-da7960601f4a | *Animals & Pet Supplies > Pet Supplies > Dog Supplies > Dog Beds* | `Pet Supplies > Dog Supplies` | | *Apparel & Accessories > Clothing > Activewear* | `Clothing > Activewear` | | | *Arts & Entertainment --- Event Tickets* | `Arts & Entertainment --- Event Tickets` | | | UUID-3463db31-426b-e339-e9a6-6adfda07009a | *Animals & Pet Supplies > Pet Supplies > Dog Supplies > Dog Beds* | `Pet Supplies > Dog Supplies` | | *Apparel & Accessories > Clothing > Activewear* | `Clothing > Activewear` | | | *Arts & Entertainment --- Event Tickets* | | | See [Split String](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/change-string-length#section-idm4613280768827233045222567009) for more information. Split String & Filter [#split-string--filter] The **Split String & Filter** rule box uses delimiters and analyzes the values of an attribute to extract and save only those parts of the values you need. Additionally, it lets you limit the length of your resulting value. If the resulting value exceeds its maximum length, the rule box doesn't leave chunks of data points in the value. If a part of a data point doesn't fit into the character limit, the platform omits the data point from the resulting value entirely. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Split String & Filter** rule box. UUID-ce86f5c2-cbd2-c99e-7d6f-950703e81dea Enter the delimiter character that splits your string into multiple data points in **Splitter**. The platform never displays the splitter in the output if you extract only one data point from the value. To see the splitter in the output value, you need to extract at least two data points. In **From**, enter the number of the data point from which the platform should start extracting information. The expected input format for this field is a digit.See the [previously shown numbering example](#informaltable-idm243305572252982) to identify the number of your desired data point. Enter how many data points you want the platform to extract from your values in **Items**.The expected input format for this field is a digit. Only positive numbers are acceptable. If you leave **Items** empty, the platform extracts all data points of the string, starting with the data point specified in **From**. In **Max Length**, specify a character or byte limit for your resulting value. In **Limit by**, select between *Characters* and *Bytes*. Select *Bytes* in the **Limit by** to avoid rejection by the target system that has a byte limit, or if your attribute values contain non-ASCII characters, such as accents or language-specific characters. For example, Amazon Vendor has a 250-byte keyword limit for attribute value sizes, especially for generic keyword attributes. Select **Save**. Compare the output values of the **Split String** and **Split String & Filter** rule boxes applied to the same **category** attribute: | Rule box and setup | **category** (before) | **category** (after) | | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------ | | UUID-28f12385-28fb-14ef-13aa-7f294be5ff65 | *Animals & Pet Supplies > Pet Supplies > Dog Supplies > Dog Beds* | `Animals & Pet Supplies > Pet Supplies > Dog Supplies` | | *Apparel & Accessories > Clothing > Activewear* | `Apparel & Accessories > Clothing > Activewear` | | | *Arts & Entertainment > Concerts, Shows, & Other Events > Event Tickets* | `Arts & Entertainment > Concerts, Shows, & Other Events > Event Tickets` | | | UUID-96c13fd3-f9c1-60ee-4541-1934efe96a2b | *Animals & Pet Supplies > Pet Supplies > Dog Supplies > Dog Beds* | `Animals & Pet Supplies > Pet Supplies` | | *Apparel & Accessories > Clothing > Activewear* | `Apparel & Accessories > Clothing > Activewear` | | | *Arts & Entertainment > Concerts, Shows, & Other Events > Event Tickets* | `Arts & Entertainment` | | See [Split String](#section-idm4613280768827233045222567009) for more information. Split String and Count Items [#split-string-and-count-items] The **Split String and Count Items** rule box analyzes the values of an attribute to split them into separate data points and count how many data points each value contains. The rule box uses a delimiter to count the number of data points within a value and overwrites the value with the resulting total. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Split String and Count Items** rule box. UUID-11fae5b8-793f-4bf9-b916-e104e0f6782f In **Please select Separator!**, enter the character that splits your value into data points. If a value doesn't contain the defined delimiter character, the rule box considers it a value with one data point and outputs `1`. Select **Save**. For example, you have the following values in the **category** attribute and want to learn how many category items each product's category has. You can achieve this with the **Split String and Count Items** rule box by entering `>` as the delimiter: | **category** (before) | **category** (after) | | ----------------------------------------------------------------- | -------------------- | | *Animals & Pet Supplies > Pet Supplies > Dog Supplies > Dog Beds* | `4` | | *Home & Garden > Linens & Bedding > Bedding > Blankets* | `4` | | *Apparel & Accessories > Clothing* | `2` | | *Apparel & Accessories \~ Clothing* | `1` | Add a static or dynamic value if it fits a character limit [#add-a-static-or-dynamic-value-if-it-fits-a-character-limit] The category *Change string length* contains the rule boxes **Add Value if Fits** and **Add Column if Fits** to let you add a static or dynamic value to an attribute if the current value can fit the added string without exceeding a character limit. See [Find the needed rule box category](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category#section-idm234375746102324) for a definition of static and dynamic values. Add Value if Fits [#add-value-if-fits] The **Add Value if Fits** rule box lets you add a word or phrase to your current values if the overall length of the resulting value doesn't exceed a desired character limit. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add Value if Fits** rule box. UUID-d19b7987-387a-3995-c613-cf5a513c7353 In **Mode**, select where you want to add a string within the current value: 1. *append* adds the string at the end of the current value. To separate it from the rest of the text, add a space character at the beginning of your input in **Text**. 2. *prepend* adds the string at the beginning of the current value. To separate it from the rest of the text, add a space character at the end of your input in **Text**. Enter the string you wish to append or prepend to your current values in **Text**. Enter the desired character limit in **Max Length**. If a current value exceeds the character limit you set in this field, the Add Value if Fits rule box doesn't add any text to the value and doesn't cut it to fit the limit. Select **Save**. For example, you have the following values in the **title** attribute and want to add *ORDER NOW* at the end of each title if the overall length of the resulting value doesn't exceed 150 characters. You can achieve this with the following setup of the **Add Value if Fits** rule box: UUID-65e964d4-41f7-51e4-797a-687bb50361e0 A space character at the beginning of the input in **Text** separates the added text from the current value. | **title** (before) | **title** (after) | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *Kitchen Container for Organic Waste - Pine Wood & Stainless Steel for Organic Leftovers - Dishwasher-Safe - Removable Lid - Removable Insert* | `Kitchen Container for Organic Waste - Pine Wood & Stainless Steel for Organic Leftovers - Dishwasher-Safe - Removable Lid - Removable Insert ORDER NOW` | | *Medium-Size Kitchen Bin for Compost with Lid Indoor 8L - Green Plastic Container for Organic Waste - Ventilation Holes Preventing Humidity Build-Up and Odor Spreading to Kitchen* | `Medium-Size Kitchen Bin for Compost with Lid Indoor 8L - Green Plastic Container for Organic Waste - Ventilation Holes Preventing Humidity Build-Up and Odor Spreading to Kitchen` | The value *Medium-Size Kitchen Bin for Compost with Lid Indoor 8L - Green Plastic Container for Organic Waste - Ventilation Holes Preventing Humidity Build-Up and Odor Spreading to Kitchen* exceeds the 150-character limit, so the rule box doesn't add the text *ORDER NOW*. Add Column if Fits [#add-column-if-fits] The **Add Column if Fits** rule box lets you add the values of another attribute to your current values if the overall length of the resulting value doesn't exceed a desired character limit. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Add Column if Fits** rule box. UUID-1ae19eba-fa82-0349-d8bf-512f61bab877 Select the attribute you want to add to your current values in **Column**. In **Mode**, select where you want to add the values of the chosen attribute within the current values: 1. *append* adds the string at the end of the current value. 2. *prepend* adds the string at the beginning of the current value. In **Max Length**, specify a character limit for the resulting values. Optionally, you can add some text before or after the added attribute value: 1. Enter the desired text in the input field **your text**. 2. Open the drop-down menu on the left to select *Text Before* or *Text After* and choose whether to add the text before or after the added attribute value. Select **Save**. For example, you have the following values in the **title** attribute and want to add the color of the product at the end of each title if the overall length of the resulting value doesn't exceed 150 characters. You can achieve this with the following setup of the **Add Column if Fits** rule box: UUID-2770bcff-fd1f-6823-c802-5da7488fd83f | **color** (no changes) | **title** (before) | **title** (after) | | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *Green* | *Kitchen Container for Organic Waste - Pine Wood & Stainless Steel for Organic Leftovers - Dishwasher-Safe - Removable Lid - Removable Insert* | `Kitchen Container for Organic Waste - Pine Wood & Stainless Steel for Organic Leftovers - Dishwasher-Safe - Removable Lid - Removable Insert - Green` | | *Orange* | *Medium-Size Kitchen Bin for Compost with Lid Indoor 8L - Green Plastic Container for Organic Waste - Ventilation Holes Preventing Humidity Build-Up and Odor Spreading to Kitchen* | *Medium-Size Kitchen Bin for Compost with Lid Indoor 8L - Green Plastic Container for Organic Waste - Ventilation Holes Preventing Humidity Build-Up and Odor Spreading to Kitchen* | The value *Medium-Size Kitchen Bin for Compost with Lid Indoor 8L - Green Plastic Container for Organic Waste - Ventilation Holes Preventing Humidity Build-Up and Odor Spreading to Kitchen* is over 150 characters long, so the rule box doesn't append the value *Orange* from **color**. # Rule box category Clean up values import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The category *Clean up values* contains all rule boxes that can help you detect and remove irregularities in your data. For example, you can filter GTINs, separate words, decode HTML and Base64, translate colors, remove consecutive whitespace, or remove whitespace at the beginning and end of the value. Besides that, you can detect and extract values using the rule boxes in this category. UUID-c22c19dd-e3c0-ba4e-ca3a-ffb00112b202 This category can be divided into several subgroups. In the following sections, you can find how to use the rule boxes of the *Clean up values* category: * [Detect and extract information from an attribute](#section-idm232219360551454) * [Filter GTINs](#section-idm232219357000848) * [Decode special characters and remove HTML tags](#section-idm232219357363796) * [Add or remove spaces](#section-idm23221948603919) * [Remove parentheses and translate colors](#section-idm234379320036808) Detect and extract information from an attribute [#detect-and-extract-information-from-an-attribute] The rule box category *Clean up values* contains the rule boxes **Detect and Extract Value**, **Detect Brand**, and **Detect Color**. Using this rule box category, you can extract product information, such as brand or color, from one attribute into another. You can also detect and extract other desired values using lists. Detect and Extract Value [#detect-and-extract-value] You can find desired values in an attribute and extract them into another attribute. Using a *Standard Inclusion/Exclusion* list, the **Detect and Extract Value** rule box finds a match in a product's value and adds it to the attribute where you apply the rule box. The platform goes through the terms on your list in the order you added them to the list. First, the platform looks for a match of the first term. If it finds a match for this term in a product's value, it extracts the match to the attribute where you apply the **Detect and Extract Value** rule box. Then, the platform moves on to the next product. Once it scans all products for a match of the first term, it moves on to the second term on your list to see if the products with no match of the first term contain a match of the second term. This process finishes when the platform has scanned all terms on your list. It may finish earlier if the platform finds matches for all your products before reaching the end of the list. Before adding and setting up this rule box, you must go to **Lists** from your site's main menu and create a *Standard Inclusion/Exclusion* list with the values you want to extract. See [Exclude products with the Standard Inclusion/Exclusion list](/docs/help-center/map-and-optimize-your-data/lists/exclude-products-with-the-standard-inclusion-exclusion-list). The order of the values in your list determines which values the platform adds to the attribute where you apply the rule box. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Detect and Extract Value** rule box to the attribute where you want to add the extracted values. UUID-bf76e41f-c0b6-bd91-57fd-a5fa82f4a50a In **Input Column**, select the attribute where you want to search for matches. This drop-down list shows attributes available at the previous stage. In **Detection List**, select the Standard Inclusion/Exclusion list you created for the values you want to detect and extract. In **Mode**, select how you want to add the extracted values in your current attribute: 1. *assign* completely overwrites the current value with the extracted value. 2. *append* adds the extracted value at the end of the current value. 3. *prepend* adds the extracted value at the beginning of the current value. In **Match Type**, select how the platform should extract the values from your list: * *term can occur anywhere* takes the detected match from any place within the selected attribute's values, even if it is part of a word. * *just entire word* takes the detected match only if it matches an entire word within the selected attribute's values. * *content starts with* takes the detected match if it is at the start of the selected attribute's values, even if it is part of a word. * *content starts with entire word* takes the detected match only if it matches an entire word at the start of the selected attribute's values. In **Case**, select whether the matches should be case-sensitive: * *insensitive* ignores the case of text values when matching them to the values on the list. * *sensitive* checks if the case of the text values in the current attribute matches the case of the values on the list and extracts values only if the case matches. In **On No Match**, select what should occur if there is no match: * *set Empty* empties the value. * *set Original Value* doesn't change the current value. Select **Save**. For example, you have a *Standard Inclusion/Exclusion* list with the following values: * *purses* * *shoes and socks* * *sock* If a term on the list matches an entire word in the **short description** attribute values in the import stage, you want to extract it into the **description\_keywords** attribute in the intermediate stage. You add the **Detect and Extract Value** rule box to the **description\_keywords** attribute and set it up as follows: UUID-64f6af67-9cf2-db16-471d-510e9b8c4f4e Here is the data in your attributes after applying the rule box: | **short description** (no changes) | **description\_keywords** (before) | **description\_keywords** (after) | | ---------------------------------------- | ---------------------------------- | --------------------------------- | | *socks, shoes* | | | | *shoes and socks here* | | `shoes and socks` | | *it is a set of socks, pants, and shoes* | | | The values *socks, shoes* and *it is a set of socks, pants, and shoes* match the value *sock* from the list, but the rule box doesn't extract them into the attribute **description\_keywords** because they match a part of a word instead of an entire word. Detect Brand [#detect-brand] The **Detect Brand** rule box detects brands in one attribute and extracts them into another attribute. This rule box scans an attribute's values for a match of brand names stored in our database and adds the matches into the attribute where you apply the rule box. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Detect Brand** rule box. UUID-196c6ed0-85e1-205b-9ff1-d880ff4e8c2f Select the attribute that contains the brand information in the **Column** drop-down list. In **Output**, select what you want to do with the extracted brand values in your current attribute: 1. *assign* completely overwrites the current value with the detected brand value. 2. *append* adds the detected brand value at the end of the current value. 3. *prepend* adds the detected brand value at the beginning of the current value. 4. *remove* deletes the detected brand value from the current value. In **On No Match**, select what should occur if there is no brand match in your values: * *leave old value* doesn't change the current value. * *set empty* empties the value. Select **Save**. For example, you have the following values in your **title** attribute and want to extract the brands mentioned in the titles into the **brand** attribute. You can achieve this with the following setup of the **Detect Brand** rule box: UUID-9fd17349-c7af-2a96-f7b6-e8e852b952dd | **title** (no changes) | **brand** (before) | **brand** (after) | | ---------------------- | ------------------ | ----------------- | | *Nike sneakers* | | `Nike` | | *acer laptop* | *Asus* | `acer` | | *Gucci suit* | *Prada* | `Gucci` | Detect Color [#detect-color] The **Detect Color** rule box detects colors in one attribute and extracts them into another attribute. This rule box scans an attribute's values for a match of color names stored in our database and adds the matches into the attribute where you apply the rule box. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Detect Color** rule box. UUID-e65ab51b-7500-f159-4895-0059fec2c877 Select the attribute that contains the color information in the **Column** drop-down menu. In **Output**, select what you want to do with the extracted color values in your current attribute: 1. *append* adds the detected color value at the end of the current value. 2. *prepend* adds the detected color value at the beginning of the current value. 3. *assign* completely overwrites the current value with the detected color value. 4. *remove* deletes the detected color value from the current value. In **Language**, select which language your colors are in. The options are German, English, Spanish, French, Italian, Dutch, and Thai. If you select *all*, the rule box detects color names matching colors in any of these languages. In **On No Match**, select what should occur if there is no color match in your values: * *leave old value* doesn't change the current value. * *set empty* empties the value. Select **Save**. For example, you have the following values in your **title** attribute and want to extract the colors mentioned in the titles into the **color** attribute. You can achieve this with the following setup of the **Detect Color** rule box: UUID-59874d52-e4f6-22a5-2211-4b083cc2c7f1 | **title** (no changes) | **color** (before) | **color** (after) | | ---------------------- | ------------------ | ----------------- | | *Nike sneakers blue* | | `blue` | | *acer laptop silver* | *gray* | `silver` | | *Gucci suit black* | *dark* | `black` | Filter GTINs [#filter-gtins] Most exports require each product to have a valid product identifier, such as Global Trade Item Number (GTIN). GTIN is a unique and internationally recognized product identifier. The **Filter GTINs** rule box detects invalid GTINs via a checksum digit and deletes them. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Filter GTINs** rule box. UUID-f6978e32-5bf9-aa80-0d42-e9dd3266bffa Select one of the options in the **Advanced Behavior** drop-down menu to fix your values and make them valid GTINs: * *Fill up to 14 digits* adds one or more zeros at the beginning of the value until the value length reaches 14 digits. * *Fill up to 13 digits* adds one or more zeros at the beginning of the value until the value length reaches 13 digits. * *Trim leading zeroes* removes all zeros from the beginning of the value. * *Leave unchanged* keeps the original value. Select **Save**. For example, you have the following values in your **GTIN** attribute. You want to remove all invalid GTINs and ensure all valid GTINs are 14 digits long. You can achieve this with the **Filter GTINs** rule box by selecting *Fill up to 14 digits* as the advanced behavior: | **GTIN** (before) | **GTIN** (after) | | ----------------- | ---------------- | | *811571013579* | `00811571013579` | | *198002236142* | `00198002236142` | | *194743857492* | | The rule box checks if the GTINs are valid and adds zeros at the beginning of a value if the length of a valid GTIN is less than 14 characters. If a GTIN is invalid, the rule box empties the value. Decode special characters and remove HTML tags [#decode-special-characters-and-remove-html-tags] The rule box category *Clean up values* contains the rule boxes **Fix and Decode HTML**, **Decode base64 content**, and **Remove HTML Tags**. If you have pieces of code or HTML tags left in your data, you can convert them into readable text using these rule boxes. Fix and Decode HTML [#fix-and-decode-html] If your values have broken or encoded HTML tags, such as `&` or `ß` instead of `&` or `ß`, the **Fix and Decode HTML** rule box converts them into regular text characters. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Fix and Decode HTML** rule box. UUID-150d9e7f-9ce2-e1ac-e20b-d8810ab4ea59 Select **Save**. For example, you have the following values in your **category** attribute and want to fix the broken characters. You can achieve this with the **Fix and Decode HTML** rule box: | **category** (before) | **category** (after) | | ------------------------------------------------------- | ------------------------------------------------------- | | *Home & Garden > Linens & Bedding > Bedding > Blankets* | `Home & Garden > Linens & Bedding > Bedding > Blankets` | | *Apparel & Accessories > Clothing > Activewear* | `Apparel & Accessories > Clothing > Activewear` | | *Apparel & Accessories > Clothing > Underwear & Socks* | `Apparel & Accessories > Clothing > Underwear & Socks` | Decode base64 content [#decode-base64-content] If your values have broken or encoded base64 tags, the **Decode base64 content** rule box converts them into readable text. For example, you can convert *VGV4dCBFeGFtcGxl* into `Text Example`. To use the **Decode base64 content** rule box, you first should prepend the values in your attribute with `base64:`. See [Add static or dynamic values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/add-static-or-dynamic-values#section-idm243451095559490). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Decode base64 content** rule box. UUID-f86cbadc-f065-fd71-7a0e-0c18a3010862 Select **Save**. For example, you have the following values in your **category** attribute and want to decode them from base64 into regular text. You can achieve this with the **Decode base64 content** rule box: | **category** (before) | **category** (after) | | --------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | | *base64:SG9tZSAmIEdhcmRlbiA+IExpbmVucyAmIEJlZGRpbmcgPiBCZWRkaW5nID4gQmxhbmtldHM=* | `Home & Garden > Linens & Bedding > Bedding > Blankets` | | *base64:QXBwYXJlbCAmIEFjY2Vzc29yaWVzID4gQ2xvdGhpbmcgPiBBY3RpdmV3ZWFy4oCL* | `Apparel & Accessories > Clothing > Activewear` | | *QXBwYXJlbCAmIEFjY2Vzc29yaWVzID4gQ2xvdGhpbmcgPiBVbmRlcndlYXIgJiBTb2Nrcw==* | `QXBwYXJlbCAmIEFjY2Vzc29yaWVzID4gQ2xvdGhpbmcgPiBVbmRlcndlYXIgJiBTb2Nrcw==` | Remove HTML Tags [#remove-html-tags] The **Remove HTML Tags** rule box removes any leftover HTML tags, such as *\

    * or *\<\br>*, from your attributes. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Remove HTML Tags** rule box. UUID-d81a2227-e457-82f4-3745-25de86f0c20e Select **Save**. For example, you have the following values in the **description** attribute and want to extract text from these HTML bodies. You can achieve this with the **Remove HTML Tags** rule box: | **description** (before) | **description** (after) | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `

    Flat leather sandals with a bow

    ` | `Flat leather sandals with a bow` | | `

    High-heel sandals with a buckle

    ` | `High-heel sandals with a buckle` | | `

    Power Smoothie - Start the day with an energy boost.


    5 reasons to buy it:
    • Gluten free,
    • Vitality,
    • Iron and Calcium,
    • 100% organic,
    • Brazilian fruits: Acai (29%), Grape (25%), Mango (18%), Banana (17%), Pineapple (11%).

    ` | `Power Smoothie - Start the day with an energy boost. 5 reasons to buy it: Gluten free, Vitality, Iron and Calcium, 100% organic, Brazilian fruits: Acai (29%), Grape (25%), Mango (18%), Banana (17%), Pineapple (11%).` | Add or remove spaces [#add-or-remove-spaces] The rule box category *Clean up values* contains the rule boxes **Remove Consecutive Whitespace**, **Remove Spaces At Beginning and End (Trim)**, and **Separate Words**. If your attribute values have more or less space than necessary, you can use these rule boxes to clean up the text. Remove Consecutive Whitespace [#remove-consecutive-whitespace] If you have more than one consecutive space character between words, the **Remove Consecutive Whitespace** rule box removes excessive space. The words should remain separated with only one space. You can also remove or replace space using the **Text Replace** rule box. See [Text Replace](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/replace-values#N1658483877601). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Remove Consecutive Whitespace** rule box. UUID-58133870-d472-f59b-f3a9-5d254e1432f4 Select **Save**. For example, you have the following values in your **category** attribute and want to remove the extra spaces. You can achieve this with the **Remove Consecutive Whitespace** rule box: | **category** (before) | **category** (after) | | ------------------------------------------------------- | ------------------------------------------------------- | | *Home & Garden > Linens & Bedding > Bedding > Blankets* | `Home & Garden > Linens & Bedding > Bedding > Blankets` | | *Apparel & Accessories > Clothing > Activewear* | `Apparel & Accessories > Clothing > Activewear` | | *Apparel & Accessories > Clothing > Underwear & Socks* | `Apparel & Accessories > Clothing > Underwear & Socks` | Remove Spaces At Beginning And End (Trim) [#remove-spaces-at-beginning-and-end-trim] The **Remove Spaces At Beginning and End (Trim)** rule box removes unnecessary space characters at the beginning or end of your attribute's values. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Remove Spaces At Beginning And End (Trim)** rule box. UUID-83ed221d-d326-52e7-8d0d-1f95080ede96 Select **Save**. For example, you have the following values in your **description** attribute and want to remove the extra spaces. You can achieve this with the **Remove Spaces At Beginning and End (Trim)** rule box: | **description** (before) | **description** (after) | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *The manufacturer uses only natural and hypoallergenic materials to produce these dog beds. Colors available: black, gray, white, green, yellow, and lilac. Size range: XS, S, M, L, XL, and XXL* | `The manufacturer uses only natural and hypoallergenic materials to produce these dog beds. Colors available: black, gray, white, green, yellow, and lilac. Size range: XS, S, M, L, XL, and XXL` | | *The manufacturer uses only natural and hypoallergenic materials to produce these dog blankets. Colors available: brown, gray, green, and blue. Size range: XS, S, L, and XXL* There is additional whitespace at the beginning and end of this value. | `The manufacturer uses only natural and hypoallergenic materials to produce these dog blankets. Colors available: brown, gray, green, and blue. Size range: XS, S, L, and XXL` | Separate Words [#separate-words] If the text in your values uses the camel case, where the second word starts with a capital letter without a space to separate it from the first word, such as *brownShoes*, the **Separate Words** rule box removes the camel case. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Separate Words** rule box. UUID-aa413d6e-c306-f689-bc58-d911960dd06d Select **Save**. For example, you have the following values in your **description** attribute and want to separate the words in the camel case. You can achieve this with the **Separate Words** rule box: | **description** (before) | **description** (after) | | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | | *TheManufacturerUsesOnlyNaturalAndHypoallergenicMaterialsToProduceTheseDogBeds.* | `The Manufacturer Uses Only Natural And Hypoallergenic Materials To Produce These Dog Beds.` | | *ColorsAvailable: black, gray, white, green, yellow, and lilac.* | `Colors Available: black, gray, white, green, yellow, and lilac.` | Remove parentheses and translate colors [#remove-parentheses-and-translate-colors] The rule box category *Clean up values* contains the rule boxes **Remove Terms in Brackets** and **Translate Colors** to let you remove all terms in brackets from your texts and translate your color values into different languages. Remove Terms in Brackets [#remove-terms-in-brackets] The **Remove Terms in Brackets** rule box deletes text in parentheses from your values. It removes the text in brackets and the brackets themselves. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Remove Terms in Brackets** rule box. UUID-2727407c-de1c-d923-a282-3d2e0a4e2295 Select **Save**. For example, you have the following values in your **description** attribute and want to remove all text in brackets. You can achieve this with the **Remove Terms in Brackets** rule box: | **description** (before) | **description** (after) | | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------- | | *This is a great T-shirt, the very best (endorsed by world-famous jazz saxophonist Joshua Redman) one there is.* | `This is a great T-shirt, the very best one there is.` | | *All reviewers note the high quality of the material ().* | `All reviewers note the high quality of the material .` | If unneeded spaces remain in the value after applying this rule box, you can remove them with the **Text Replace** rule box by, for example, searching for `.` or `,` preceded with a space character and replacing them with `.` or `,`. See [Text Replace](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/replace-values#N1658483877601). Translate Colors [#translate-colors] The **Translate Colors** rule box detects colors in your values and translates them into English, German, French, Italian, Spanish, or Dutch. If you need to translate more than just color values, you can use a dedicated data service. See [Translate your feed with the Google Translate and Google Translate (Advanced) data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/translate-your-feed-with-the-google-translate-and-google-tra). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Translate Colors** rule box. UUID-443b929c-6d0b-a768-c62f-1781a7f79c50 In **Source Language**, select the language of your current values: * *English* * *German* * *French* * *Italian* * *Spanish* * *Dutch* In **Target Language**, select the language you want to translate your colors into. * *English* * *German* * *French* * *Italian* * *Spanish* * *Dutch* Select **Save**. For example, you have the following values in your **title** attribute and want to translate the colors mentioned in the values into German. You can achieve this with the **Translate Colors** rule box by selecting relevant source and target languages: | **title** (before) | **title** (after) | | ---------------------------- | ----------------------------- | | *Sandals - green - size 39* | *Sandals -*`grün`*- size 39* | | *Sneakers - white - size 40* | *Sneakers -*`weiß`*- size 40* | | *Clogs - purple - size 44* | *Clogs -*`lila` -*size 44* | # Rule box category Work with date & time import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The category *Work with date & time* contains all rule boxes that can help you convert date formats, set timestamps, and add values to your attributes based on a desired date and time. UUID-993c5dca-855d-209c-20ce-464991dab65b This rule box category contains the following rule boxes: * [Convert Datetime Format](#section-idm232219797422684) changes the date and time format. * [Convert to Timestamp](#section-idm232219797133078) converts a date to a timestamp. * [Limited Time Only](#section-idm232219797927674) adds a temporary text or discount based on a date. * [Set Column by Time](#section-idm232219797657656) assigns, appends, or prepends another attribute's value based on a date. * [Set Timestamp](#section-idm232219797000323) adds the current date and time to an attribute. * [Set Value by Datetime](#section-idm4524692355780834317490833812) assigns a value based on comparing the date in the attribute with today's or another date. Another option to work with time-bound values is to schedule rule boxes. See [Advanced rule box options](/docs/help-center/add-a-rule-box/advanced-rule-box-options). Convert Datetime Format [#convert-datetime-format] The **Convert Datetime Format** rule box changes the format of your date and time values. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Convert Datetime Format** rule box. UUID-fe626c46-5331-f2b1-45d4-54f91bf7f891 In **Source Format**, enter your current date format. See [PHP: date - Manual](https://www.php.net/manual/en/function.date.php) for the supported formats. If you want to convert your date format into a Unix timestamp, the attribute where you apply the rule box must contain the full date and time, including hours, minutes, and seconds. If it doesn't, the platform uses the provided date elements and adds the hours, minutes, and seconds of the moment when you saved the rule box or your last site run.To assume the missing time elements, the rule box uses the GMT zone and the `H:i:s` time format. In **Target Format**, enter the desired date and time format. For example, enter `U` to convert your regular date format into a Unix timestamp. See [PHP: date - Manual](https://www.php.net/manual/en/function.date.php) for other supported formats. Select **Save**. For example, the values in your **date** attribute are in one format, and you want to convert them to another format. You can achieve this with the following setups of the rule box **Convert Datetime Format**: | Rule box setup | **date** (before) | **date** (after) | | --------------------------------------------------------------------------------------- | ------------------- | ---------------- | | UUID-aeb0ec2a-3e71-259f-df3d-54f97d09598f | `20230525 18:05:45` | `25-05-2023` | | UUID-b25b82d4-c787-f076-d31f-3fc55947a86a | `20230525 18:05:45` | `1685030745` | | UUID-24e70aff-c9ae-83b7-23aa-7c65fe01b967 | `20230525` | `1685008255` | The last row shows how the rule box works if your current value doesn't include hours, minutes, and seconds. Namely, it uses the moment when you saved the rule box, which was at 09:50:55 GMT+0000. Convert to Timestamp [#convert-to-timestamp] The **Convert to Timestamp** rule box converts a date or a date-related text into a Unix timestamp using your current time zone. Examples of strings you can convert into timestamps using this rule box: * *now* * *June 2, 2023* * *next Thursday* See [PHP: strtotime - Manual](https://www.php.net/manual/en/function.strtotime.php) for the supported string formats you can convert into a timestamp. If the rule box doesn't support the date and time format of a value, it empties the value. To add the **Convert to Timestamp** rule box: Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Convert to Timestamp** rule box. UUID-2c295020-0536-cd0a-1da1-e84f79145025 Select **Save**. For example, you have the following values in the **date** attribute and want to convert them all to timestamps. You can achieve this with the **Convert to Timestamp** rule box: | **date** (before) | **date** (after) | | --------------------- | ---------------- | | *01.02.2023 10:48:01* | `1675244881` | | *01.02.2023* | `1675206000` | | *now* | `1721399979` | | *June 2, 2023* | `1685656800` | | *2025-04-10 22:00:18* | `1744315218` | | *last Thursday* | `1721253600` | The rule box uses your time zone to create timestamps, which in this example is GMT+1. If your values contain only a date without the exact time, such as *01.02.2023* instead of *01.02.2023 10:48:01*, the rule box **Convert to Timestamp** works as follows: * Assumes the time is `00:00` in your current time zone. * Converts the given date and the assumed time into the GMT zone. * Converts the full date and time in the GMT zone to a timestamp. This is why the full date and time *01.02.2023 10:48:01* in the GMT+1 time zone has the timestamp `1675244881`, but the same date without the time converts to `1675206000`. Limited Time Only [#limited-time-only] The **Limited Time Only** rule box temporarily changes a value in the attribute. This rule box can change a value by applying a discount, assigning a new value, and appending or prepending a string to a value. You can set the start and end dates or use dates stored in other attributes to create the timeframe when the platform should apply the desired changes. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Limited Time Only** rule box. UUID-383fb13b-90fc-61fd-6cc0-06005f374fa9 Use one of the following options to define the start date for applying the changes to your attribute: 1. Select a relevant attribute that stores the needed date in **Start Date via Column**.If you add your rule box in the intermediate stage, only import-stage attributes are available in this drop-down menu. If you add it in the export stage, only intermediate-stage attributes are available. 2. Enter a static date manually in **set Start Date**. For both options, your dates must be in the format *Y-m-d*, for example, *2024-01-31*. See [Convert Datetime Format](#section-idm232219797422684) to change the date format if needed. Use one of the following options to define the end date for applying the changes to your attribute: 1. Select a relevant attribute that stores the needed date in **End Date via Column**.If you add your rule box in the intermediate stage, only import-stage attributes are available in this drop-down menu. If you add it in the export stage, only intermediate-stage attributes are available. 2. Enter a static date manually in **set End Date**. For both options, your dates must be in the format *Y-m-d*, for example, *2024-01-31*. See [Convert Datetime Format](#section-idm232219797422684) to change the date format if needed. Choose how you want to change the values in your attribute: 1. If you want to add certain text to your attribute, enter the desired text in **Text** and choose how you want the rule box to add this text in **Mode**: 2. *assign* completely overwrites the current value with the desired text. 3. *append* adds the desired text at the end of the current value. 4. *prepend* adds the desired text at the beginning of the current value. 5. To add a discount to your attribute, enter the needed amount in **Discount** without the percent symbol (`%`). Select **Save**. For example, you have the following values in the **price** attribute and want to add a 30% discount to the prices of your products based on the start dates in **discount\_date**. The end of the sale should be on August 7, 2024. You can achieve this with the following setup of the **Limited Time Only** rule box: UUID-70347f29-d8bc-945d-c1e8-a919a878f537 | **discount\_date** (no changes) | **price** (before) | **price** (after) | | ------------------------------- | ------------------ | ----------------- | | *2024-07-10* | *300* | `210` | | *2024-07-22* | *34* | `23.8` | | *2024-08-22* | *3* | `3` | You apply the **Limited Time Only** rule box on July 22, 2024. Set Column by Time [#set-column-by-time] The **Set Column by Time** rule box assigns, appends, or prepends a value from another attribute based on a date-and-time condition. A date and time condition works as follows: . In the rule box setup, you choose a date attribute and select whether the date in that attribute should be in the past, future, or now to meet the desired date and time condition. . If the date meets the desired date and time condition, the platform assigns, appends, or prepends a value from a selected attribute to the current attribute. The **Set Column by Time** rule box may be helpful when launching a sale. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Column by Time** rule box. UUID-70d9039a-8226-9435-fce3-d01ec04290c2 In **Source Column**, choose your date attribute. In **Time Format**, enter the format used in your date attribute. See [PHP: date - Manual](https://www.php.net/manual/en/function.date.php) for the supported formats. In the drop-down menu, select your desired date and time condition: * *in the future* applies the change if the current value contains a future date. * *in the past* applies the change if the current value contains a past date. * *now* applies the change if the current value contains today's date. In **Column**, select the attribute that stores the values you want to add. In **Mode**, choose how you want to modify your current values if the date attribute meets the desired date and time condition: 1. *assign* overwrites the current value with the value of the attribute chosen in [see the relevant section](#N1685975454647). 2. *append* adds the value of the attribute chosen in [see the relevant section](#N1685975454647) at the end of the current value. 3. *prepend* adds the value of the attribute chosen in [see the relevant section](#N1685975454647) at the beginning of the current value. Select **Save**. For example, you are selling a popular sneaker model, but a newer one will drop soon, and you have that date in **release\_date**. Once the new sneaker model becomes available, you want to announce a sale and append a short text from the **sale\_promo\_text** attribute to the title of the older sneakers in **product\_title**. You can achieve this with the following setup of the **Set Column by Time** rule box: UUID-1945b157-00ab-e9e2-98da-2cd352672af6 | **release\_date** (no changes) | **sale\_promo\_text** (no changes) | **product\_title** (before) | **product\_title** (after) | | ------------------------------ | ---------------------------------- | -------------------------------- | ----------------------------------- | | *2024-07-21* | *25% OFF* | *FIRE Sneakers 2023, Brown* | `FIRE Sneakers 2023, Brown 25% OFF` | | *2024-10-03* | *25% OFF* | *FIRE Sneakers 2023, Orange* | `FIRE Sneakers 2023, Orange` | | *06.07.2024* | *25% OFF* | *FIRE Sneakers 2023, Pale Green* | `FIRE Sneakers 2023, Pale Green` | The platform checks whether the new sneakers' release date in **release\_date** has passed. As soon as that date passes, the platform appends the text from **sale\_promo\_text** to the title of your product. You apply the **Set Column by Time** rule box on July 22, 2024. Set Timestamp [#set-timestamp] The **Set Timestamp** rule box overwrites the values in an attribute with the current date and time in a desired time zone and format. See [PHP: date - Manual](https://www.php.net/manual/en/function.date.php) for the supported formats. This rule box renews the timestamp every time you run the site or refresh Data View. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Timestamp** rule box. UUID-97b88a22-bcc4-2101-ea4d-08e7ea225359 In **Format**, enter the date format that the rule box should use to add the current date and time to your attribute. See [PHP: date - Manual](https://www.php.net/manual/en/function.date.php) for the supported formats. To add a Unix timestamp instead of standard date formats, enter `U`. In **Timezone**, select the needed time zone. Select **Save**. For example, you have the following values in the **date** attribute and want to overwrite them with today's date in the format *DD.Mon YYYY*. You can achieve this with the **Set Timestamp** rule box by entering `d.M Y` in **Format** and choosing the needed timezone: | **date** (before) | **date** (after) | | ----------------- | ---------------- | | *2024-07-21* | `22.Jul 2024` | | | `22.Jul 2024` | | *06.07.2024* | `22.Jul 2024` | You apply the **Set Timestamp** rule box on July 22, 2024. Set Value by Datetime [#set-value-by-datetime] The **Set Value by Datetime** rule box compares a date value in an attribute with today's or another date to assign a new value based on the comparison. It follows this algorithm to compare dates and assign new values: | If | `today or another date` | **\<** | `date in the attribute`, | then | assign a new value. | | -- | ----------------------- | ------ | ------------------------ | ---- | ------------------- | You can choose other inequality symbols, not only the less-than sign (**\<**). Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Value by Datetime** rule box. UUID-33269b39-0fed-9fe2-f5f7-aa4ede7987d5 Enter the date format used in your attribute in **Date Format**. See [PHP: date - Manual](https://www.php.net/manual/en/function.date.php) for the supported formats. In **Operator**, choose an operator to compare the dates in your values to a desired date specified in Set Days: * `<` means the date specified in Set Days should be less than the date in the attribute. * `<=` means the date specified in Set Days should be less than or equal to the date in the attribute. * `>=` means the date specified in Set Days should be greater than or equal to the date in the attribute. * `>` means the date specified in Set Days should be greater than the date in the attribute. In **Set Days**, define the date you want to compare your current values to by entering `-` or `+` and a number of days: * Enter `+0` to compare your date values to today's date. * Enter `+1` to compare your date values to tomorrow's date. * Enter `-1` to compare your date values to yesterday's date. In **Set value**, enter the value you want to assign in the current attribute if a date in the attribute matches the set condition. Select **Save**. For example, you have the following values in the **manufactured\_on** attribute and want to overwrite them with the value *incorrect* if the date in the attribute is later than last Friday, July 19, 2024. You can achieve this with the following setup of the **Set Value by Datetime** rule box: UUID-6ac20b24-4407-3a32-7347-c1d0984dda71 | **manufactured\_on** (before) | **manufactured\_on** (after) | | ----------------------------- | ---------------------------- | | *2024-07-21* | `incorrect` | | *2024-07-19* | *2024-07-19* | | *06.08.2024* | *06.08.2024* | | *2024-07-16* | *2024-07-16* | | *2024-10-03* | `incorrect` | You apply the **Set Value by Datetime** rule box on Monday, July 22, 2024. # Rule box category Use lists import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The category *Use lists* contains the rule boxes that can apply a list you created in **Lists** to a relevant attribute within your site. To use the rule boxes of this category, you first need to create a list. See [Lists](/docs/help-center/map-and-optimize-your-data/lists). You can collect all the search terms in a list and then use a list in a needed rule box to replace, categorize, include, or exclude items. Use the rule boxes with lists when you have more than 30 terms. Also, you can reuse lists across multiple sites, making changes in one place. UUID-14ea8b3b-995b-1221-d1e7-c21900644920 This category can be divided into several subgroups. In the following sections, you can find how to use list-based rule boxes to perform the following actions: * [Replace values with list-based rule boxes](#section-idm234388372362115) * [Categorize and map values to classifications with lists-based rule boxes](#section-idm234388380919298) * [Include or exclude products with list-based rule boxes](#section-idm234388357357836) * [Detect and extract information from an attribute with list-based rule box](#section-idm234391477524279) Replace values with list-based rule boxes [#replace-values-with-list-based-rule-boxes] The *Use lists* rule box category contains the replacement rule boxes to let you replace certain values based on a condition. If you need to replace a large number of values in your data, you can add them to a list and apply one of the following rule boxes that will search for and replace parts of your data in bulk: * [Replacement](#section-idm234389788424418) applies a replacement list to substitute the matching complete words in the value with the mapped terms from the list. * [Replacement Sensitive](#section-idm234389854406382) applies a replacement list to substitute the matching parts of a word in a value, a complete word, or an entire value with the terms from the list. * [Taxonomy Mapping](#section-idm234390016150987) applies a Partner Taxonomy Mapping list to substitute the entire value or only a part of the value with the terms from the list. This rule box works best if you need to replace category terms according to your export partner taxonomy. Replacement [#replacement] The **Replacement** rule box substitutes the matching complete words within a value with the mapped terms from the list. If you need also to choose whether the matches should be case-sensitive and whether to leave the original value or empty the value if there’s no match in a value, use the [Replacement Sensitive](#section-idm234389854406382) rule box. Go to **Lists** from your site's main menu and add all terms you need to replace to the *Standard*, *Dynamic*, or *Attribute-based Replacement* list. See [Lists](/docs/help-center/map-and-optimize-your-data/lists#section-idm13275861981064) to choose a required type. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Replacement** rule box. UUID-d0e0dda6-63bb-6602-bc48-c305ca34e080 Choose the appropriate replacement list from the **Select an Option** drop-down menu. Select **Save**. For example, you want to replace the size abbreviations with whole words. You can achieve this by adding these terms to the replacement lists and setting up the **Replacement** rule box as follows: UUID-a50b7e0d-0817-16f4-42e0-bb86ff243d1e UUID-3ed4289f-5e25-24ff-2876-561458108dd8 | **size** (before) | **size** (after) | | ----------------- | ---------------------------- | | *S* | `small` | | *M* | `medium` | | *L size* | `large size` | | *S*, *M*, *XL* | `small, medium, extra large` | The rule box changes all matching values, even if they are parts of the value. For example, *L size* changes into `large size`. *S, M, XL* changes into `small, medium, extra large`. Replacement Sensitive [#replacement-sensitive] The **Replacement Sensitive** rule box lets you substitute the matching parts of a word in a value, a complete word, or an entire value with the terms from the list. Go to **Lists** from your site's main menu and add all terms you need to replace to the *Standard*, *Dynamic*, or *Attribute-based Replacement* list. See [Lists](/docs/help-center/map-and-optimize-your-data/lists#section-idm13275861981064) to choose a required type. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Replacement Sensitive** rule box. UUID-90737d62-f2ea-aaa1-43dd-66ba489a96e7 Choose the appropriate replacement list from the **Select an Option** drop-down menu. Select between *Case Sensitive* and *Case Insensitive* if the search needs to consider capitalization. Select between full and partial word matches from the drop-down: * *Exact Word* replaces a word only if it's a complete word that matches the search term. For example, if the value is *Texting is a good idea* and the list should replace *Texting* with `TESTING`, the result should be `TESTING is a good idea`. * *Not Exact Word* replaces a word even if only a part of the word matches the search term. For example, if the value is *Texting is a good idea* and the list should replace *Text* with `TEST`, the result should be `TESTing is a good idea`. Select the result you want to have in case of no match: * *Set Value if No Match* leaves the original value. * *Set Empty if No Match* empties the value. Select **Save**. For example, you need to correct a mistake in the description and replace all forms of the word `text` to `test`. You can achieve this by adding these terms to a replacement lists and setting up the **Replacement Sensitive** rule box as follows: UUID-23455ce4-14e1-c273-4ec8-fcb8cfb2e872 UUID-787dcdb1-8547-05df-be1d-a0cc0a4a8ea1 | **description** (before) | **description** (after) | | ------------------------------------------- | ------------------------------------------- | | *Texting cosmetics. Not texted on animals.* | `Testing cosmetics. Not tested on animals.` | The setting *Not exact Word* lets the rule box change all matching parts of words. Selecting *Exact Word* in the rule box settings changes only the entire word within the value. Taxonomy Mapping [#taxonomy-mapping] The **Taxonomy Mapping** rule box lets you replace your categories with categories from a partner's taxonomy, such as categories of Google Merchant Center, Amazon, eBay, and other channels. Matching a partner taxonomy ensures that your product categorization is correct. The replacement happens if the replacement term matches the entire value. Go to **Lists** from your site's main menu and add all terms you need to replace to the *Partner Taxonomy Mapping* list. See [Replace attributes with Partner Taxonomy Mapping list](/docs/help-center/map-and-optimize-your-data/lists/replace-attributes-with-partner-taxonomy-mapping-list) list. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the  **Taxonomy Mapping** rule box. UUID-8d10ee6a-de75-c1b4-5ed4-22e2bdcc8217 Choose a list from the **Select an Option** drop-down menu. In **Case Sensitivity**, choose *Match Sensitive* to perform a case-sensitive search in the attribute's values or *Match Insensitive* to ignore the case of the values. In **On No Match**, choose what should happen if there is no match with the values of the list: * *set to empty string* empties the value. * *set original value* leaves the original value. The checkbox **New taxonomy values should act as not matched, as log as there is no value assigned to them** lets you treat newly imported values: * *selected* – new unmatched values stay unchanged in the attribute. * *unselected* – new unmatched values stay unchanged, or the platform replaces them to empty values if you selected *set to empty string* in **On No Match**. Select **Save**. For example, you want to replace your current category names with partner taxonomy. You can achieve this by adding these terms to a Partner Taxonomy Mapping list and setting up the **Taxonomy Mapping** rule box as follows: UUID-16baef34-2ec9-9848-acc9-ef34688d3b15 UUID-d7b136a7-bde9-0fe7-d078-343f19567beb | **category** (before) | **category** (after) | | ---------------------------- | ------------------------------- | | *Shampoo* | `Beauty > Hair care` | | *Lipsticks* | `Beauty > Decorative cosmetics` | | *Lip balms* | | | *Shampoo, conditioner, mask* | | The rule box replaces only the entirely matching values. That's why the values *Lip balm* and *Shampoo, conditioner, mask* are empty. Categorize and map values to classifications with lists-based rule boxes [#categorize-and-map-values-to-classifications-with-lists-based-rule-boxes] The *Use lists* rule box category contains the categorization and mapping rule boxes to let you assign categories to the products and replace your custom categories with terms specific to a needed classification system. * [Classification Mapping](#section-idm234390064730298) applies the Classification Mapping list to the values of the **category** attribute to replace its values with the terms specific to a needed classification system, such as the ETIM classification. See [Set up the Classification Mapping list](/docs/help-center/map-and-optimize-your-data/lists/set-up-the-classification-mapping-list). * [Categorize by Keywords](#section-idm234390064916242) assigns a category based on the keywords found in the connected attribute. Classification Mapping [#classification-mapping] The **Classification Mapping** rule box replaces your current category values with the categories specific to the required classification system. Go to **Lists** from your site's main menu and add all terms you need to replace to the *Classification Mapping list*. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the  **Classification Mapping** rule box. UUID-2d055cc3-6ba4-8b43-2a3b-21846705daf8 Choose the list from the **List** drop-down menu. In **Case Sensitivity**, choose *Match Sensitive* to perform a case-sensitive search in the attribute's values or *Match Insensitive* to ignore the case of the values. In **On No Match**, choose what should happen if there is no match with the values of the list: * *set to empty string* makes the cell empty * *set original value* leaves the original value Select **Save**. For example, you want to replace your current categories with categories used in the ETIM-9.0 classification. You can achieve this by adding these terms to the *Classification Mapping* list and setting up the **Classification Mapping** rule box as follows: UUID-a243f654-817d-c0a6-57c8-b9904b112e0d UUID-528e3f00-664d-2512-f093-f605afade731 | **category** (before) | **category** (after) | | --------------------- | -------------------- | | *Heating* | `EC011686` | | *Ventilation* | `EC011606` | | *Tools* | `EC000181` | | *Water taps* | | In this example, the rule box replaces matching values with ETIM 9.0 classification categories and makes values that don't match empty. Categorize by Keywords [#categorize-by-keywords] The **Categorize by Keywords** rule box uses a replacement list to assign a category based on the keywords found in the needed attribute, such as **description** or **title**. This rule box can be useful if you don't need categorization for any specific classification system but want to create your categories based on the existing product titles or descriptions. The rule box can scan large texts to find the keywords and assign a corresponding category based on the highest score. The scoring rules are as follows: * If there is no match, the output is empty. * The text should have all the words from the search term in the replacing list. * The order of the words in the text doesn't matter. * Text matching is case-insensitive; for example, `blue` matches `Blue`. * The repeating words are counted only once. For example, `women’s shoes, ladies’ shoes, girls’ shoes` matched against `women's shoes, ladies' shoes` would score 3: `women's`, `ladies'`, `shoes`. * Only whole words match: the word `shoe` doesn't match `shoes`. * Every word, including 1-letter words, counts. For example, `Three Men in a Boat: To Say Nothing of the Dog` matched against `a dog` will result in a score of 2: `a` and `dog`. Create a list of terms you need to replace using the *Standard* or *Dynamic Replacement* list. See [Lists](/docs/help-center/map-and-optimize-your-data/lists#section-idm13275861981064) to choose a required type. In Dataflow, connect from import to intermediate the attribute containing keywords to the attribute where you want to store categories. For example, you can connect **description** to **category**. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Categorize by Keywords** rule box to the attribute where you want to store categories. UUID-79f32524-c06a-4485-99fa-12c8dc3dea7c In **Search in Column**, select an attribute where you want to search for the keywords from the list. Choose the replacement list from the **List** drop-down menu. Select **Save**. For example, you want to create categories based on the existing product descriptions. You can achieve this by adding terms to the replacement lists and setting up the **Categorize by Keywords** rule box as follows: UUID-adfd1235-4cc5-2fcb-ddd4-6594e4edb4eb UUID-fb1c2cc2-50de-a5a4-8761-6d997e56ad55 | **description** | **category** (before) | **category** (after) | | ------------------------------------------------------------------------ | --------------------- | -------------------- | | *Women's Top, Classic Cut, Basic Short Sleeve Crop Top, Crew Neck, Blue* | *clothes* | `Tops & T-Shirts` | | *Women's Top, Casual Cut, Basic Short Sleeve, Crew Neck, White* | *clothes* | `Tops & T-Shirts` | | *Women's Top, Basic Long Sleeve Crop Top, V-Neck, Red* | *clothes* | `Long Sleeves` | | *Women's Dress, Basic Long Sleeve, V-Neck, White* | *clothes* | `Long Dresses` | | *Women's Dress, Long, White* | *clothes* | `Long Dresses` | | *Women's Dress* | *clothes* | | In this example, the rule box replaces existing category values with the categories in the replacement list and makes values that don't match empty. The matching and category assignment is based on the scoring rules. In this example, the category with more unique words in the text wins. Also, when the number of unique words is equal, the exact match wins. For example, the fourth row contains two matches for two categories: `Long Sleeve` and `Dress Long`. The *Long Dresses* category wins as the keywords match exactly the search term in the list. In case of the *Long Sleeve* win, the text should contain `Top Long Sleeve`. UUID-cb753548-9295-de47-8a75-1213e8ce1cd6 Include or exclude products with list-based rule boxes [#include-or-exclude-products-with-list-based-rule-boxes] The *Use lists* rule box category contains the blacklist and whitelist rule boxes to let you exclude or include products during export if an attribute contains matches with the terms on the *Inclusion/Exclusion* list. * **Blacklist** excludes products from export if their attribute's values contain a term that matches the term in the selected *Inclusion/Exclusion* list. * **Blacklist Entire Word** excludes products from export if their attribute's entire values match a term in the selected *Inclusion/Exclusion* list. * **Negative Blacklist** excludes products from export if their attribute doesn't contain values that match a term in the selected *Inclusion/Exclusion* list. If you need to include certain products during export or protect specific terms from exclusion, use the **Whitelist** rule box. See [Include or exclude products](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/include-or-exclude-products) to set up these rule boxes. Detect and extract information from an attribute with list-based rule box [#detect-and-extract-information-from-an-attribute-with-list-based-rule-box] The *Use lists* rule box category contains the detect and extract rule boxes to let you find desired values in an attribute and extract them into another attribute. Using a *Standard Inclusion/Exclusion* list, the **Detect and Extract Value** rule box finds a match in a product's value and adds it to the attribute where you apply the rule box. See [Clean up values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/clean-up-values) to set up the rule box. # Rule box category Google Merchant Center import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The category *Google Merchant Center* contains all rule boxes that can help you prepare your product data for GMC. This category lets you set age groups, availability, conditions, gender, expiration dates, size types, and size systems to values accepted by Google. Some rule boxes in this category only apply to specific sales verticals. For example, the **Set Size Type** or **Set Gender** rule boxes mainly relate to clothing retailers. UUID-137581ee-8133-7652-0528-22f2da75e4a4 Select a link to go to the section describing the needed rule box: * [Set Age Group](#section-idm232221321747321) * [Set Age Group by Regex](#section-idm234388217401983) * [Set Availability](#section-idm232221322027537) * [Set Availability by Stock](#section-idm234388218581794) * [Set Condition](#section-idm232221322125998) * [Set Condition by Regex](#section-idm234388221071861) * [Set Expiration Date](#section-idm232221322333827) * [Set Gender](#section-idm232221322548479) * [Set Gender by Regex](#section-idm234388225267714) * [Set Identifier Exists](#section-idm4551344488440033327155444251) * [Set Size System](#section-idm234388228536953) * [Set Size Type](#section-idm232221322913584) * [Set Size Type by Regex](#section-idm2343882284476) * [Split String for PLA](#section-idm243441251445678) * [Translate Google Category](#section-idm23222132313624) Some rule boxes in this category use regular expressions (regex). See [Rule box category Use regular expressions](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-use-regular-expressions) to learn about regex. You can use the *Regex generator* available in these rule boxes to get a regex suggestion that suits your use case: Select a necessary rule box. Select **>\_** in a rule box and describe the result you want to achieve in the **Regex generator** window. Select **Generate**. Select **copy** below the **Answer** field. UUID-f2365ea1-4696-e83e-cf7c-29bfed0d3276 Paste the copied answer into the regex field of the rule box. Set Age Group [#set-age-group] Google accepts the following values for the **age\_group** attribute: * *adult* * *kids* * *infant* * *toddler* * *newborn* With the **Set Age Group** rule box, you can replace your current values with one of the valid age groups accepted by Google: Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Age Group** rule box. UUID-e704c8d3-9d99-6d38-226c-e3e9b25e5b79 Select the needed age group value from the drop-down menu. Select **Save**. For example, you have varying non-valid values in the **age\_group** attribute, and you want to change them all to the valid value *toddler*: | **age\_group** (before) | **age\_group** (after) | | ------------------------------------ | ---------------------- | | *children between 1 and 3 years old* | `toddler` | | *1-3 year olds* | `toddler` | | *toddlers* | `toddler` | Set Age Group by Regex [#set-age-group-by-regex] Google accepts the following values for the **age\_group** attribute: * *adult* * *kids* * *infant* * *toddler* * *newborn* With the **Set Age Group by Regex** rule box, you can use regular expressions to search your current values for matches and replace them with corresponding valid age groups accepted by Google. Once the **Set Age Group by Regex** rule box finds a regex match in a value, it changes the entire current value to the corresponding value accepted by Google. If one value contains multiple regex matches related to different age groups, the rule box assigns the age group related to the first regex match within the value. If the rule box doesn't find a regex match in a value, it assigns the value `adult` to make sure your **age\_group** attribute contains only valid entries. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Age Group by Regex** rule box. UUID-c327fa66-c78e-e181-1433-ae5b2e7602d2 In **Adult**, **Kids**, **Infant**, **Toddler**, and **Newborn**, enter regular expressions to search your values and replace the matching parts with a relevant age group value. Use the *Regex generator* by selecting **>\_** to get a regex suggestion. Select **Save**. For example, you have different non-valid values in the **age\_group** attribute, and you need to assign a valid age group to each product based on its current value. UUID-b90c4c3c-3e62-704c-94ae-a1db74d933eb With the regular expressions `/(women|female|men|male|adult|adults)/g` and `/(children|child|kid|kids|boy|girl|boys|girls)/`, you can search your current values for the possible alternatives to the valid *adult* and *kids* values and then change the current values to the appropriate valid age group. | **age\_group** (before) | **age\_group** (after) | | ----------------------- | ---------------------- | | *women* | `adult` | | *all ages* | `adult` | | *children, men* | `kids` | Set Availability [#set-availability] Google accepts the following values for the **availability** attribute: * *in stock* * *out of stock* * *preorder* * *backorder* With the **Set Availability** rule box, you can replace your current values with one of the valid availability types accepted by Google: Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Availability** rule box. UUID-9386b85c-0f94-8911-7570-819855a5cee0 Select the relevant availability type from the drop-down menu. Select **Save**. For example, you have different non-valid values in the **availability** attribute, and you want to change them all to the valid value *in stock*: | **availability** (before) | **availability** (after) | | ------------------------- | ------------------------ | | *available* | `in stock` | | *available for purchase* | `in stock` | | *in stock* | `in stock` | Set Availability by Stock [#set-availability-by-stock] Google accepts the following values for the **availability** attribute: * *in stock* * *out of stock* * *preorder* * *backorder* With the **Set Availability by Stock** rule box, you can use your **stock** attribute to automatically set your **availability** attribute to one of the valid availability types accepted by Google: Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Availability by Stock** rule box. UUID-e2d476a8-9f85-3c94-515c-3001b56b7750 Select the attribute with the stock information from the drop-down menu. This menu shows the attributes of the previous stage. Select **Save**. For example, you have your stock levels in the **stock** attribute, and you want to set your **availability** attribute to *in stock* or *out of stock* based on the stock level. UUID-510dc098-5211-d0ce-3644-099504e9d782 You add the **Set Availability by Stock** rule box to the **availability** attribute to let it change your current values in the following way: | **stock** (no changes) | **availability** (before) | **availability** (after) | | ---------------------- | ------------------------- | ------------------------ | | *45* | *available* | `in stock` | | *0* | *no longer available* | `out of stock` | | *2* | *last items left* | `in stock` | Set Condition [#set-condition] Google accepts the following values for the **condition** attribute: * *new* * *refurbished* * *used* With the **Set Condition** rule box, you can replace your current values with one of the valid conditions accepted by Google: Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Condition** rule box. UUID-8a6968bc-6fb0-24e6-55f7-6dcb4172c394 Select the relevant condition type from the drop-down menu. Select **Save**. For example, you have varying non-valid values in the **condition** attribute, and you want to change them all to the valid value *new*: | **condition** (before) | **condition** (after) | | ---------------------- | --------------------- | | *good as new* | `new` | | *signs of use* | `new` | | *new* | `new` | Set Condition by Regex [#set-condition-by-regex] Google accepts the following values for the **condition** attribute: * *new* * *refurbished* * *used* With the **Set Condition by Regex** rule box, you can use regular expressions to search your current values for matches and replace them with corresponding valid conditions accepted by Google. Once the **Set Condition by Regex** rule box finds a regex match in a value, it changes the entire current value to the corresponding value accepted by Google. If one value contains multiple regex matches related to different condition types, the rule box assigns the condition type related to the first regex match within the value. If the rule box doesn't find a regex match in a value, it assigns the value `new` to make sure your **condition** attribute contains only valid entries. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Condition by Regex** rule box. UUID-2fcf4179-be09-516d-20b2-f78224b71e89 In **New**, **Used**, and **Refurbished**, enter regular expressions to search your values and replace the matching parts with a relevant condition value. Use the *Regex generator* by selecting **>\_** to get a regex suggestion. Select **Save**. For example, you have different non-valid values in the **condition** attribute, and you need to assign a valid condition type to each product based on its current value. UUID-f6ea2b4b-2add-607f-dcc3-cd396a2549c8 With the regular expressions `/(from manufacturer|packaged|new)/`, `/(use|used)/`, and `/(refurbished|repaired|returned)/`, you can search your current values for the possible variants of the valid *new*, *used*, and *refurbished* values and then change the current values to the appropriate valid conditions. | **condition** (before) | **condition** (after) | | ---------------------- | --------------------- | | *returned, new* | `new` | | *signs of use* | `used` | | *brand new* | `new` | Set Expiration Date [#set-expiration-date] With the **Set Expiration Date** rule box, you can add an expiration date to the **expiration\_date** attribute as accepted by Google. In this rule box, you set the number of days left until the expiration date of an offer, and the rule box adds the corresponding date in the *YYYY-MM-DD* format to every product in the attribute. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Expiration Date** rule box. UUID-37056ad8-08af-4316-cf66-b76fe83076f7 In **Days to expire**, enter the number of days left until the offer or product expires. You can enter no more than 31 days in the Set Expiration Date rule box starting from today. If you add 32 days or more, it results in an empty value. Select **Save**. For example, you have varying non-valid date formats in the **expiration\_date** attribute, with all your products expiring at the same time (in 8 days). You can change all your expiration dates to the valid date format by entering `8` in **Days to expire**. | **expiration\_date** (before) | **expiration\_date** (after) | | ----------------------------- | ---------------------------- | | *July 9, 2024* | `2024-07-09` | | *09.07.2024* | `2024-07-09` | | *07/09/2024* | `2024-07-09` | Set Gender [#set-gender] Google accepts the following values for the **gender** attribute: * *unisex* * *female* * *male* With the **Set Gender** rule box, you can replace your current values with one of the valid gender options accepted by Google: Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Gender** rule box. UUID-2e6889d5-ca4e-5277-c225-c1f190f44788 Select the relevant gender option from the drop-down menu. Select **Save**. For example, you have varying non-valid values in the **gender** attribute, and you want to change them all to the valid value *unisex*: | **gender** (before) | **gender** (after) | | ------------------- | ------------------ | | *men, women* | `unisex` | | *all* | `unisex` | | *women, men* | `unisex` | Set Gender by Regex [#set-gender-by-regex] Google accepts the following values for the **gender** attribute: * *unisex* * *female* * *male* With the **Set Gender by Regex** rule box, you can use regular expressions to search your current values for matches and replace them with corresponding valid gender options accepted by Google. You need to provide regex only for *male* and *female* gender options. Products with no matches of these regular expressions get the value *unisex*. Once the **Set Gender by Regex** rule box finds a regex match in a value, it changes the entire current value to the corresponding value accepted by Google. If one value contains multiple regex matches related to different gender options, the rule box assigns the gender option related to the first regex match within the value. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Gender by Regex** rule box. UUID-2b456d92-8247-aefc-3827-aa03c011381b In **Male regex** and **Female regex**, enter regular expressions to search your values and replace the matching parts with a relevant gender option. Use the *Regex generator* by selecting **>\_** to get a regex suggestion. Select **Save**. For example, you have different non-valid values in the **gender** attribute, and you need to assign a valid gender option to each product based on its current value. UUID-21962417-b03c-608c-d6ae-1927afe88673 With the regular expressions `/\b(?:women|female|F)\b/` and `/\b(?:men|male|M)\b/`, you can search your current values for the possible variants of the valid *female* and *male* values and then change the current values to the appropriate valid gender option. The products that don't contain regex matches get the value *unisex*. | **gender** (before) | **gender** (after) | | ------------------- | ------------------ | | *women* | `female` | | *men and women* | `male` | | *M* | `male` | | *all* | `unisex` | Set Identifier Exists [#set-identifier-exists] Google uses the **identifier\_exists** attribute to see whether unique product identifiers (UPIs) are available for your product based on the values in the **brand**, **gtin**, **mpn**, and **category** attributes. See [Identifier exists](https://support.google.com/merchants/answer/6324478?hl=en#zippy=%2Cproducts-without-gtins-mpns-brands) for more information. With the **Set Identifier Exists** rule box, you can add the valid *true* or *false* values to your **identifier\_exists** attribute based on the contents of your **category** value. If an identifier (a brand, MPN, or GTIN) exists for a product, the **identifier\_exists** attribute stays empty, which equals *true* when exporting it to Google Merchant Center. If there is no identifier for a product, the attribute has the value *false*. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Identifier Exists** rule box. UUID-20483046-a56e-a622-9846-83896e0acf09 Select your category attribute from the drop-down menu. This menu shows the attributes of the previous stage. Select **Save**. Set Size System [#set-size-system] Google accepts the following values for the **size\_system** attribute: * *US* * *UK* * *EU* * *DE* * *FR* * *JP* * *CN* * *IT* * *BR* * *MEX* * *AU* With the **Set Size System** rule box, you can replace your current values with one of the valid size system options accepted by Google. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Size System** rule box. UUID-97c9be59-d4a9-99e6-b9e3-232fb57ab776 Select the relevant size system from the drop-down menu. Select **Save**. For example, you have varying non-valid values in the **size\_system** attribute, and you want to change them all to the valid value *UK*: | **size\_system** (before) | **size\_system** (after) | | ------------------------- | ------------------------ | | *United Kingdom* | `UK` | | *UK* | `UK` | | *Britain* | `UK` | Set Size Type [#set-size-type] Google accepts the following values for the **size\_type** attribute: * *regular* * *petite* * *plus* * *big* * *tall* * *maternity* With the **Set Size Type** rule box, you can replace your current values with one of the valid size types accepted by Google. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Size Type** rule box. UUID-0478d8b8-c0a0-365b-84dd-427642d9e664 Select the relevant size type from the drop-down menu. Select **Save**. For example, you have varying non-valid values in the **size\_type** attribute, and you want to change them all to the valid value *regular*: | **size\_type** (before) | **size\_type** (after) | | ----------------------- | ---------------------- | | *regular fit* | `regular` | | *usual* | `regular` | | \[empty] | `regular` | Set Size Type by Regex [#set-size-type-by-regex] Google accepts the following values for the **size\_type** attribute: * *regular* * *petite* * *plus* * *big* * *tall* * *maternity* With the **Set Size Type by Regex** rule box, you can use regular expressions to search your current values for matches and replace them with corresponding valid size types accepted by Google. Once the **Set Size Type by Regex** rule box finds a regex match in a value, it changes the entire current value to the corresponding value accepted by Google. If one value contains multiple regex matches related to different size types, the rule box assigns the size type related to the first regex match within the value. If the rule box doesn't find a regex match in a value, it assigns the value `regular` to make sure your **size\_type** attribute contains only valid entries. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Set Size Type by Regex** rule box. UUID-8c3dd378-da2c-5922-d419-cc2e75c24640 In **Regular**, **Petite**, **Plus**, and **Maternity**, enter regular expressions to search your values and replace the matching parts with a relevant size type. Use the *Regex generator* by selecting **>\_** to get a regex suggestion. Select **Save**. For example, you have different non-valid values in the **size\_type** attribute, and you need to assign a valid size type to each product based on its current value. UUID-f8625106-73e4-b712-8fcf-e1afa65b8ead With the regular expressions `/(regular|reg|usual)/`, `/(petite|smaller)/`, `/(plus|bigger)/`, and `/(maternity)/`, you can search your current values for the possible variants of these valid size types and then change the current values to the appropriate valid size types. | **size\_type** (before) | **size\_type** (after) | | ----------------------- | ---------------------- | | *one size* | `regular` | | *maternity clothes* | `maternity` | | *petite, regular* | `regular` | Split String for PLA [#split-string-for-pla] See [Change string length](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/change-string-length#section-idm232221351802675) for more information on split string rule boxes. The **Split String for PLA** rule box uses delimiters and analyzes the values of an attribute to extract and save only those parts of the values you need. If the rule box finds no delimiter in a value, it empties the value to prevent you from sending incorrect data to your export channels. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Split String for PLA** rule box. UUID-e21eff4c-924c-4bb7-0f0c-9fa69e4d4ce7 Enter the delimiter character that splits your string into multiple data points in **Splitter**. The platform never displays the splitter in the output if you extract only one data point from the value. To see the splitter in the output value, you need to extract at least two data points. In **From**, enter the number of the data point from which the platform should start extracting information. The expected input format for this field is a digit.See [this numbering example](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/change-string-length#informaltable-idm243305572252982) to identify the number of your desired data point. If you enter `0` in **From**, the platform starts extracting information from your first data point and, after finding no splitter character in the string, returns the entire string as if it consisted of one data point only.To have the Split String for PLA rule box empty the values that contain no splitter characters, specify any number in **From** but for `0` and negative numbers. Enter how many data points you want the platform to extract from your values in **Items**.The expected input format for this field is a digit. Only positive numbers are acceptable. If you leave **Items** empty, the platform extracts all data points of the string, starting with the data point specified in **From**. Select **Save**. Google accepts the following values for the **gender** attribute: | Rule box and setup | **category** (before) | **category** (after) | | ---------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------- | | UUID-30a50b3a-04fb-3872-9c57-da7960601f4a | *Animals & Pet Supplies > Pet Supplies > Dog Supplies > Dog Beds* | `Pet Supplies > Dog Supplies` | | *Apparel & Accessories > Clothing > Activewear* | `Clothing > Activewear` | | | *Arts & Entertainment --- Event Tickets* | `Arts & Entertainment --- Event Tickets` | | | UUID-3463db31-426b-e339-e9a6-6adfda07009a | *Animals & Pet Supplies > Pet Supplies > Dog Supplies > Dog Beds* | `Pet Supplies > Dog Supplies` | | *Apparel & Accessories > Clothing > Activewear* | `Clothing > Activewear` | | | *Arts & Entertainment --- Event Tickets* | | | See [Split String](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/change-string-length#section-idm4613280768827233045222567009) for more information. Translate Google Category [#translate-google-category] Google accepts only a predefined list of values in the **category** attribute. You can use a *Partner Taxonomy Mapping* list to ensure your **category** attribute contains values accepted by Google. See [Replace attributes with Partner Taxonomy Mapping list](/docs/help-center/map-and-optimize-your-data/lists/replace-attributes-with-partner-taxonomy-mapping-list) for more information. With the **Translate Google Category** rule box, you can translate your Google categories from one language to another. You can also change your Google categories in any language to the associated category IDs, which are the same for all languages. The rule box empties the values in those products that contain invalid categories. Take the steps from [Add a rule box](/docs/help-center/add-a-rule-box) to add the **Translate Google Category** rule box. UUID-032b21ed-f260-b5ca-c653-bb858d62d9fb In **Source Format**, select the current language and country of your Google categories.Choose *id* if your category attribute contains category IDs instead of spelled-out category names. In **Target Format**, select the language and country you want to translate your Google categories into.Choose *id* if you want to transform your spelled-out category names into category IDs. You can remove all invalid categories from your category attribute without translating them by selecting the same languages in **Source Format** and **Target Format**. Select **Save**. For example, your **category** attribute contains valid Google categories for the US in English, and you need to translate them into valid Google categories in German. | **category** (before) | **category** (after) | | ------------------------------------------------------- | ----------------------------------------------------------------- | | *Apparel & Accessories > Shoe Accessories > Slippers* | \[empty] | | *Home & Garden > Linens & Bedding > Bedding > Blankets* | `Heim & Garten > Bett- und Haushaltswäsche > Bettwäsche > Decken` | | *Apparel & Accessories > Clothing > Underwear & Socks* | `Bekleidung & Accessoires > Bekleidung > Unterwäsche & Socken` | If you select *id* in **Target Format** for the same use case, the rule box outputs the following: | **category** (before) | **category** (after) | | ------------------------------------------------------- | -------------------- | | *Apparel & Accessories > Shoe Accessories > Slippers* | | | *Home & Garden > Linens & Bedding > Bedding > Blankets* | `1985` | | *Apparel & Accessories > Clothing > Underwear & Socks* | `213` | # Add icons and clipart to your image template import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] In Image Designer, you can add different elements to your existing product images and enhance the design of your image templates with an extensive collection of icons and clipart. Add an icon [#add-an-icon] Go to **Designer** from your site's main menu. Select the **Insert** tab. Open the **Icon Font** section. UUID-32a12029-2121-bc66-a9e1-7fe67928b131 Drag a selected icon into the image preview area. Customize the corresponding icon layer in the *Layers* tab as desired. See [Icon layer settings](#section-idm4508754744604833635044576811). Select the floppy disk icon in the upper toolbar to save the changes. Icon layer settings [#icon-layer-settings] The Image Designer adds icons as *Icon* layers in the Layers tab. You can edit the icon with the following settings: * **X** and **Y**: Set icon coordinates to place your icon on the template. You can also drag the layer in the image preview area to achieve the same result. * **width**: Define the width of the output icon. * **height**: Define the height of the output icon. * **Rotation (deg)**: Define the rotation degree of the output icon. * **Stroke color**: Choose the color of the icon borders in the color picker. * **Stroke width**: Define the width of the icon borders. * **Transparency**: Select the transparency of the icon borders on a scale from 0% to 100%, where 0% means no transparency and 100% means fully transparent icon borders. * **Font color**: Define the icon color in the color picker. * **Font size**: Define the icon size in pixels. * **Font Transparency**: Select the icon transparency on a scale from 0% to 100%, where 0% means no transparency and 100% means a fully transparent icon. * **Horizontal alignment**: Choose the type of horizontal alignment. * **Vertical alignment**: Choose the type of vertical alignment. * **Render background**: Add a background color to the whole icon layer. * **Partial background**: Add a background color to the inserted icon only. * **Text Shadow**: Add a shadow to your icon. UUID-f8a4df7c-a617-f1e7-abea-08ddb3b8d1f6 Add a clipart [#add-a-clipart] Go to **Designer** from your site's main menu. Select the **Insert** tab. Open the **Clipart** section. UUID-b331e8ab-ff76-f0e3-2312-c9fdda5ae041 Drag a selected clipart element into the image preview area. Customize the corresponding image layer in the *Layers* tab as desired. See [Clipart layer settings](#section-idm232335342469844). Select the floppy disk icon in the upper toolbar to save your template. Clipart layer settings [#clipart-layer-settings] The Image Designer adds clipart elements as *Image* layers in the Layers tab. You can edit the clipart with the following settings: * **X** and **Y**: Set image coordinates to place your clipart on the template. You can also drag the layer in the image preview area to achieve the same result. * **width**: Define the width of the output image. * **height**: Define the height of the output image. * **Transparency**: Change the transparency of the clipart image on a scale from 0% to 100%, where 0% means no transparency and 100% means a fully transparent clipart image. * **Rotation (deg)**: Define the rotation degree of the output image. * **Crop Mode**: Cut off the sides, top, and bottom of the image. * **Slicing**: Activate **Slicing** to cut the image and then confirm the slicing. * **Source**: Insert an URL of the additional image from outside your feed. To change the URL, select the **Change URL** button and enter a new image URL. * **Reset filters**: Reset all your filter settings for a layer. * **brightness**: Increase the image brightness. * **hue**: Change the image coloring. * **grayscale**: Convert your image to black and white. * **invert**: Invert the colors by moving the slider to the right. * **contrast**: Increase the image shades. * **saturate**: Increase the image saturation. * **sepia**: Add a sepia filter to the image. * **blur**: Blur the image. UUID-89c90afa-d633-9fc1-cf25-4503291f6ddd # Add a rating to your image template import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] In Image Designer, you can add a rating to your image template and choose its design and shape, such as stars, concentric circles, a progress bar, and a Tripadvisor-branded rating. Each rating design type has some common and specific settings. Add a rating [#add-a-rating] Go to **Designer** from your site's main menu. Select the **Insert** tab. Open the **Elements** section. Drag the **Rating** element into the image preview area. Customize the rating layer in the *Layers* tab as desired. See [Rating layer settings](#section-idm23233535117954). Select the floppy disk icon in the upper toolbar to save the changes. Rating layer settings [#rating-layer-settings] The Image Designer adds a rating as *Rating* layer in the Layers tab. You can edit the rating layer with the following settings: Common rating settings [#common-rating-settings] All rating design types share the following settings: * **Input**: Select the attribute that contains the rating for products. If the attribute has an ex (**✘**) before its name, the product you are currently editing in Image Designer has an empty value in that attribute.If the attribute has a checkmark (**✔**) before its name, the product has a relevant value in the attribute. UUID-efdd5efd-7b8e-7710-2fb0-972145dcae27 * **Rating type**: Select the type of rating you want to use. * **Default value**: Enter the default static value for the rating score if needed. * **X** and **Y**: Set rating area coordinates to place your rating on the image template. You can also drag the layer in the image preview area to achieve the same result. * **width**: Define the width of the entire rating area. * **height**: Define the height of the entire rating area. * **Stroke color**: Choose the color of the rating symbols' borders in the color picker. * **Stroke width**: Define the width of the rating symbols' borders. * **Transparency**: Select the transparency of the rating symbols' borders on a scale from 0% to 100%, where 0% means no transparency and 100% means fully transparent borders. Star rating settings [#star-rating-settings] The star rating has all common settings and the following additional ones: * **Full star color**: Define the color for the inner part of the full rating symbol. * **Transparency**: Select the transparency for the inner part of the full rating symbol on a scale from 0% to 100%, where 0% means no transparency and 100% means a fully transparent rating symbol. * **Empty star color**: Define the color of the empty rating symbols. * **Transparency**: Select the transparency of the empty rating symbols on a scale from 0% to 100%, where 0% means no transparency and 100% means a fully transparent empty rating symbol. * **Don't fill empty**: Check this box to make empty stars transparent. * **Inner Radius**: Define the radius if you want the rating area to be angled. Concentric circles rating settings [#concentric-circles-rating-settings] The concentric circles rating consists of the outer and inner circles and has all common settings and the following additional ones: * **Fill**: Define the color for the inner part of the full rating symbols. * **Don't fill**: Check this box to make empty circles transparent. * **Transparency**: Select the transparency for the inner part of the full rating symbols on a scale from 0% to 100%, where 0% means no transparency and 100% means a fully transparent rating symbol. * **Inner margin**: Define the size of the inner circles. * **Spacing**: Define the distance between the circles. * **Rotation (deg**): Define the rotation degree of the rating area. Progress bar rating settings [#progress-bar-rating-settings] * **Fill**: Define the color of the inner or outer bar part. * **Don't fill**: Check this box to make the empty bar part transparent. * **Transparency**: Select the transparency of the inner or outer progress bar rating on a scale from 0% to 100%, where 0% means no transparency and 100% means a fully transparent progress bar. * **Inner margin**: Define the size of the inner circles. * **Rotation (deg)**: Define the rotation degree of the rating area. Tripadvisor rating settings [#tripadvisor-rating-settings] The Tripadvisor rating has the following settings: * **Input**: Select the attribute that contains the rating for products. If the attribute has an ex (**✘**) before its name, the product you are currently editing in Image Designer has an empty value in that attribute.If the attribute has a checkmark (**✔**) before its name, the product has a relevant value in the attribute. UUID-efdd5efd-7b8e-7710-2fb0-972145dcae27 * **Default value**: Enter the default static value for the rating score. * **X** and **Y**: Set the rating area coordinates to place your rating on the template. You can also drag the layer in the image preview area to achieve the same result. * **width**: Define the width of the rating area. * **height**: Define the height of the rating area. # Add a rectangular element to your image template import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] In Image Designer, you can add a rectangular element to your image template as a background for text or other design elements. Add a rectangular [#add-a-rectangular] Go to **Designer** from your site's main menu. Select the **Insert** tab. Open the **Elements** section. Drag the **Rect** element into the image preview area. Customize the corresponding Rect layer in the *Layers* tab as desired. See [Rect layer settings](#section-idm232335338592873). Select the floppy disk icon in the upper toolbar to save the changes. Rect layer settings [#rect-layer-settings] The Image Designer adds rectangular elements as *Rect* layers in the Layers tab. You can edit the Rect layer with the following settings: * **X** and **Y**: Set the element's coordinates to place your rectangular on the image template. You can also drag the layer in the image preview area to achieve the same result. * **width**: Define the width of the rectangular. * **height**: Define the height of the rectangular. * **Fill color**: Choose the color of the internal part of the rectangular in the color picker. * **Fill transparency**: Change the transparency of the rectangular on a scale from 0% to 100%, where 0% means no transparency and 100% means a fully transparent rectangular. * **Stroke color**: Choose the color of the borders of the rectangular element in the color picker. * **Stroke width**: Choose the width of the borders of the rectangular element. * **Transparency**: Change the transparency of the borders on a scale from 0% to 100%, where 0% means no transparency and 100% means fully transparent borders. * **Radius X** and **Radius Y**: Round the angles of the rectangular. * **Rotation (deg)**: Define the rotation degree of the rectangular. UUID-1c98f507-6bee-df81-ca24-a8998ea226fc # Image Designer interface & overview import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; How to navigate and access Image Designer [#how-to-navigate-and-access-image-designer] Please loging into the Productsup platform. Next, please do: Go to a desired Site in your Organization. Open the site's main menu on the left. Access **Image Designer**. Access Image Designer Image Designer interface [#image-designer-interface] Image Designer consists of: * Toolbar * Image preview * Editing tabs Image Designer interface Toolbar [#toolbar] The Image Designer toolbar buttons allow you perform the following: The Image Designer toolbar * The **Preview Product** arrows take you to the next or the previous product in your feed. Use it to preview how the designs apply to the images. * The **Search by** allows you find a specific product in the feed and preview the design instanteniously. You might want to search by SKU, ID, GTIN/EAN code, or even a Title, Theme, Product Line - the search is flexible, it will return all the matching products, and you can use the Preview Product arrows again to view all the images and decide if you are happy with the design. * The zoom-in (**+**) and zoom-out (**-**) buttons let you increase or decrease the image preview size. * The **"Eye" icon** lets you show or hide elements that are out of the design template frames. * The **Copy and Paste icons** let you copy and insert a selected layer. * The **Save**, **Undo** and **Redo** buttons perform the respective actions. Revert & repeat actions apply to your last actions, and you can choose a specific action from the drop-down menu. Image preview [#image-preview] The area below the toolbar displays a selected product image and all the applied layers. You can move, resize, and rotate the layers over the image as desired. Image Designer lets you preview only the first 50 images of your feed. If you fish to preview a specific product, please use **Search by** feature in the Toolbar. Editing tabs [#editing-tabs] On the right side of the Toolbar, you can find four (4) Editing tabs: Editing tabs in Image Designer . **Layers** is a list of transparent sheets that lets you edit separate design elements. See [Layers tab](#section-idm4582673833624033646784373035) for more details. . **Insert** represents different sets of elements - such as text, images, shapes, clipart, and icons, and the image uploader. All of these you can embed into an image template. See [Insert tab](#section-idm46014041341712336467936016) for more details. . **Templates** is a collection of the default templates offered by the Productsup platform and your custom templates. See [Templates tab](#section-idm4542019716217633646814511053) for more details. . **Settings** for the entire template. See [Settings tab](#section-idm4542019719320033646859333642) for more details. Layers tab [#layers-tab] Layers are the first tab in the Image Designer. Layers are transparent sheets that let you edit separate design elements. Every new element you add to the template in Image Designer appears as a separate layer. Actions with Layers [#actions-with-layers] You can perform the following actions with layers: * Change a layer position in the list by dragging and dropping it with the help of the left handle. Re-position layer in Image Designer * Rename layers with the "pen" icon. * Link and move several layers simultaneously. To do so, select the link icon for each necessary layer. * Hide a layer with the "eye" icon to reveal the layer beneath it. * Delete a layer with the "bin" icon. Actions with layers Layer types [#layer-types] Image Designer creates the following layer types when dragging elements from the *Insert* tab to the image template preview area. Each layer type has its specific settings. * **Rect**, or Rectangular is a layer for the *Rect* element from *Elements*. * **Text** is a layer for the *Text* element from *Elements*. * **DynamicText** is a layer for the *Dynamic Text* element from *Elements* or a clipart item from *Clipart*. * **Image** is a layer for the *Image from URL* element from *Elements*. * **DynamicImage** is a layer for the *Dynamic Image* element from *Elements*. * **CustomImage** is a layer for images uploaded in *Your Custom Images*. * **Icon** is a layer for an icon selected from *Icons*. * **Rating** is a layer for the *Rating* element from *Elements*. Insert tab [#insert-tab] Insert is the second tab in the Image Designer. Insert lets you add shapes, descriptions, graphical elements, clipart, and icons or upload custom images. You can drag and drop a necessary element to the preview area. Each added element creates an individual layer in the Layers tab, where you can edit it. The Insert tab consists of the following sections: Insert tab * **Elements** is a set of graphic elements, texts, and custom images. * **Clipart** is a set of clipart images. * **Icon Font** is a set of icons. * **Your Custom Images** is a tool for uploading and saving images in a library. Templates tab [#templates-tab] Templates is the third tab in the Image Designer. It consists of two sections: * **Global Templates** - a set of default image templates offered as an example by Productsup. It might be easier to start up with selecting pre-saved Global templates, edit those, and later save them as your custom templates. * **Your Templates** is a list of your custom image templates. You can edit, rename, or delete your custom templates, copy them to another Site, or share them over the Projects or for the entire Organization. You can also switch between the All, Intermidiate level, or Export level templates here. Templates tab Settings tab [#settings-tab] Settings is the fourth tab in the Image Designer. They apply to your entire active design template: . Select the **Stage the template will be implemented on** in Productsup: * choose **Intermediate Level** to make import-stage columns available for your template's dynamic text and image layers; * choose **Export Level** to make intermediate-stage columns available for your template's dynamic text and image layers. Stage setting . Add a **Grid** to align elements in the preview. You can select the variants: `None`, `10`, and `60`. The grid appears only during editing and doesn't appear on the final image. Grid 60 setting applied in the Image Designer . Change the **Canvas** settings - choose the Background as HEX or RGB code or the Template size to ensure the format meets the requirements of the export channel. The **Template Size** drop-down shows pre-defined template types and sizes in pixels. Canvas setting in the Image Designer . Apply **SVG filters** to all the layers simultaneously: * **Reset filters** resets all your filter settings for a layer. * **Brightness** increases the image brightness. * **Hue** changes the image coloring. * **Grayscale** converts your image to black and white. * **Invert** inverts the colors. * **Contrast** increases the image shades. * **Saturate** increases the image saturation. * **Sepia** adds the sepia filter to the image. * **Blur** softens the image. SVG filters applied in the Image Designer # Add static or dynamic text to your image template import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] In Image Designer, you can add static or dynamic text to your image template. Dynamic text is the value that the platform takes from an assigned column in your feed. Add a static text [#add-a-static-text] Go to **Designer** from your site's main menu. Select the **Insert** tab. Open the **Elements** section. Drag the **Text** element from the *Elements* section to the image preview area. Customize the corresponding Text layer in the *Layers* tab as desired. See [Static text layer settings](#section-idm353363502702036). Select the floppy disk icon in the upper toolbar to save your template. Add a dynamic text [#add-a-dynamic-text] Go to **Designer** from your site's main menu. Select the **Insert** tab. Open the **Elements** section. Drag the **Dynamic Text** element into the image preview area. Customize the corresponding DynamicText layer in the *Layers* tab as desired. See [Dynamic Text layer settings](#section-idm232335350868781). Select the floppy disk icon in the upper toolbar to save changes. Text settings [#text-settings] Static text layer settings [#static-text-layer-settings] The Image Designer adds a static text as *Text* layer in the Layers tab. You can edit the static text with the following settings: * **X** and **Y**: Set text area coordinates to place your text on the image template. You can also drag the layer in the image preview area to achieve the same result. * **width**: Define the width of the text. * **height**: Define the height of the text. * **Rotation (deg)**: Define the rotation degree of the text. * **Stroke color**: Choose the color of the text borders in the color picker. * **Stroke width**: Define the width of the text borders. * **Transparency**: Select the transparency of the text borders on a scale from 0% to 100%, where 0% means no transparency and 100% means fully transparent text borders. * **Font color**: Define the text color in the color picker. * **Font size**: Define the text size in pixels. * **Font Transparency**: Select the transparency of the text on a scale from 0% to 100%, where 0% means no transparency and 100% means fully transparent text. * **Line height (px)**: Define the line height in pixels. * **Text**: Add the static text. * **Superscript currency symbol and fractional** checkbox lets you superscript the currency symbol preceding the price and the fractional part of the price. You can use it only for the price attributes. * **Font family**: Choose between 800 different fonts from the [Google Fonts project](https://fonts.google.com/) or [Add custom text fonts](#section-idm4589732831417634241544667666). * **Font decorations**: Define the font decorations such as bold, italics, underline, or strikethrough. * The strikethrough font decoration applies to the entire value rather than a part of it, such as *"This is value"*. * **Horizontal alignment**: Choose the type of horizontal alignment. * **Vertical alignment**: Choose the type of vertical alignment. * **Word Spacing (px)**: Change the spacing between the words by filling in the number of pixels. * **Character Spacing (px)**: Change the spacing between the characters by filling in the number of pixels. * **Render background**: Add a background color to the whole text area. * **Partial background**: Add a background color to the inserted text only. * **Text Shadow**: Add a shadow to your text. UUID-cb7d5ece-e5b8-3dac-299c-4dc7e8f56a32 Dynamic Text layer settings [#dynamic-text-layer-settings] The Image Designer adds a dynamic text as *DynamicText* layer in the Layers tab. You can edit the dynamic text with the following settings: * **Input**: Select the attribute that contains the value you want to use as dynamic text. If the attribute has an ex (**✘**) before its name, the product you are currently editing in Image Designer has no value in that attribute. If you choose an attribute with an empty value, Image Designer displays the warning text `DYNAMIC TEXT - NO VALUE IN SELECTED COLUMN` in the product's image preview. However, if you send an image with an empty value to an export channel, the platform removes the warning text and displays a blank value instead.If the attribute has a checkmark (**✔**) before its name, the product has a relevant value in the attribute. UUID-efdd5efd-7b8e-7710-2fb0-972145dcae27 * **Max length**: Define the max length of the text. * **X** and **Y**: Set text area coordinates to place your text on the template. You can also drag the layer in the image preview area to achieve the same result. * **width**: Define the width of the text. * **height**: Define the height of the text. * **Rotation (deg)**: Define the rotation degree of the text area. * **Color**: Choose the color of the text. * **Stroke color**: Choose the color of the text borders in the color picker. * **Stroke width**: Define the width of the text borders. * **Transparency**: Select the transparency of the text borders on a scale from 0% to 100%, where 0% means no transparency and 100% means fully transparent text borders. * **Font color**: Define the text color in the color picker. * **Font size**: Define the text size in pixels. * **Font Transparency**: Select the transparency of the text on a scale from 0% to 100%, where 0% means no transparency and 100% means fully transparent text. * **Line height (px)**: Define the line height in pixels. * **Superscript currency symbol and fractional** checkbox lets you superscript the currency symbol preceding the price and the fractional part of the price. You can use it only for the price attributes. * **Font family**: Choose between 800 different fonts from the [Google Fonts project](https://fonts.google.com/) or [Add custom text fonts](#section-idm4589732831417634241544667666). * **Font decorations**: Define the font decorations such as bold, italics, underline, or strikethrough. * The strikethrough font decoration applies to the entire value rather than a part of it, such as *"This is value"*. * **Horizontal alignment**: Choose the type of horizontal alignment. * **Vertical alignment**: Choose the type of vertical alignment. * **Multiline**: Activate this button to write text in more than one row. * **Word Spacing (px)**: Change the spacing between the words by filling in the number of pixels. * **Character Spacing (px)**: Change the spacing between the characters by filling in the number of pixels. * **Render background**: Add a background color to the whole text area. * **Partial background**: Add a background color to the inserted text area. * **Text Shadow**: Add a shadow to your text. UUID-17ac5ecc-6805-66cc-dd02-d19d8d8a5149 Add custom text fonts [#add-custom-text-fonts] You can add custom text fonts used by your brand to make consistent design of your images. The font files you wish to upload must be one of the supported formats: *.otf*, *.woff*, or *.woff2*. To add custom fonts for texts in Image Designer: Add static or dynamic text as described in [Add a static text](#section-idm4542019718984033646934368685) or [Add a dynamic text](#section-idm4582677451142433646935232175). In **Layers** in the right panel, select the **Font family** drop-down menu. Scroll down in the menu and select **More Fonts**. UUID-87778bfd-85af-6b07-2fde-f77192f99b7c In the **Font Selector** pop-up window, select **Add custom font**. UUID-f388ace4-0b61-ea06-df53-a6de15c73e2c Drag and drop the font files to the upload area or select the highlighted area to choose a file from your computer. Select **OK**. UUID-36a9b5e3-f744-30df-5c65-0bf290332e8f For each uploaded font, in **Font Name**, enter a font name that should include the font variant, such as `Roboto regular` or `Arial italic`. Accurate labeling helps you distinguish among the added fonts. UUID-826ddc18-75c1-fd4f-808f-e376515ee76f In **Font Variant**, add the corresponding font variant such as `regular`, `bold`, or `italic`. If you leave the field empty, the platform considers the font as regular. Select the terms and conditions checkbox to confirm your right to use and distribute the uploaded fonts in your projects. Select **Add Fonts**. The new fonts are now available for use in your designs. To find and use your custom fonts, in the text layer, select the **Font family** drop-down menu, and select a needed font in **Your Selected Fonts**. # Image Designer import { Callout } from "fumadocs-ui/components/callout"; Introduction [#introduction] Image Designer - editing mode, full page view Image Designer is a Productsup image-editing application that helps you enhance images in your product feed within the platform. At scale. You can mix several images, overlay the descriptions, add a logo, price, or discount label to your images. Apply the same design template to all the images in your product feed or a certain selection of products. This is controlled by the *Use Image Designer Template* rule box in Dataflow and Data View. Image Designer supports the following image formats: * Input: JPG, JPEG, and PNG. * Output: JPG and PNG. What you can do with Image Designer [#what-you-can-do-with-image-designer] Image Designer helps you edit images in the following ways: * [Create and apply custom image templates](/docs/help-center/map-and-optimize-your-data/image-designer/create-and-apply-custom-image-templates.mdx). * [Add a new image](/docs/help-center/map-and-optimize-your-data/image-designer/add-a-new-image-to-your-image-template). * [Add static or dynamic text](/docs/help-center/map-and-optimize-your-data/image-designer/add-static-or-dynamic-text-to-your-image-template). * [Add icons and clipart images](/docs/help-center/map-and-optimize-your-data/image-designer/add-icons-and-clipart-to-your-template). * [Add product rating/reviews](/docs/help-center/map-and-optimize-your-data/image-designer/add-rating-to-your-template). * [Add a rectangular element](/docs/help-center/map-and-optimize-your-data/image-designer/add-a-rectangular-element-to-your-template). * [Search and preview any product in your feed](/docs/help-center/map-and-optimize-your-data/image-designer/search-for-a-product-in-the-image-designer-preview.mdx). For a walkthrough of the Image Designer application and features, read [Image Designer interface & overview](/docs/help-center/map-and-optimize-your-data/image-designer/interface-image-designer). How to obtain Image Designer access [#how-to-obtain-image-designer-access] Image Designer is an additional service that requires contract amendment. However, you can test it with limited access without activating the full version. In the limited version, you can see and try the same features as in the full version, but apply the template only to a limited number of images. | Full Image Designer | Limited Image Designer | | -------------------------------------------------------------------- | ------------------------------------------------------------------------------ | | Apply the templates to all products in the feed. | Apply the templates only to 50 random products. | | Apply the templates with the rule box *Use Image Designer Template*. | Apply the templates with the rule box *Use Image Designer Template (limited)*. | To activate the full version of Image Designer, reach out to your Customer Success Manager or contact [support@productsup.com](mailto:support@productsup.com). # Create and apply custom image templates import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Productsup provides a collection of pre-designed global templates to let you edit your product images in Image Designer. The global templates are available to all customers. Instead of creating a template from scratch, you can select a needed global template and edit it with the tools of Image Designer. You can choose from the following global templates: * Dynamic Multiple Images * Dynamic Long * Close-Up Material * Side Slant * Sale * Dynamic Three Images * Dynamic * Blank Image * Three (3) Travel templates Create a custom image template [#create-a-custom-image-template] Go to **Designer** from your site's main menu. Select the **Templates** tab. Select a desired template from **Global Templates**. Customize the template in the *Layers*, *Insert*, and *Settings* tabs. Select the floppy disk icon in the upper toolbar to save your custom template. Once created, the template automatically shows up in the *Your Templates* section of the *Templates* tab. By default, your product image preview area shows the first image from your current site feed, and you can preview only one image at a time. Select another product image using the **Preview Product** arrows in the Image Designer toolbar. The preview shows an image placeholder if your feed has no images. Edit your custom templates [#edit-your-custom-templates] Go to **Designer** from your site's main menu. Select the **Templates** tab. Select a desired template from **Your Templates**. UUID-1e4895fc-5cba-6d92-cf41-1280ef24017b In the *Your Templates* section, you can do the following actions with your templates: * Rename a template: Go to the **Templates** tab. Scroll down to the *Your Templates* section. Select the pen icon next to the template's default name and enter the desired name. Select the checkmark icon (**✔**) to confirm. Select **Save**. * Delete a template: Go to the **Templates** tab. Scroll down to the *Your Templates* section. Open the drop-down menu of the needed template's area on the right. Select **Delete**. Select **OK** in the pop-up window to confirm your action. * Copy a template to another site: Go to the **Templates** tab. Scroll down to the *Your Templates* section. Open the drop-down menu of the needed template's area on the right and choose **Copy To Another Site**. UUID-73cc549e-8b5d-a4b3-11ed-c924884196ba Choose a site in the *Select Site* pop-up and select **OK**. * Make a template available for a project or the entire organization. Go to the **Templates** tab. Scroll down to the *Your Templates* section. Open the drop-down menu of the needed template's area on the right and choose a needed level. UUID-1c1517d3-a573-2292-6e72-d6ac237c1e38 Apply image templates to your product images [#apply-image-templates-to-your-product-images] To export your edited images to the destination, you need to apply the templates with a rule box: Go to **Data View** from the site's main menu. Select **Edit** in the necessary image column. Select **Add Box** and search for the *Use Image Designer Template* rule box. UUID-d685ec30-1fa5-7ed5-90b8-f88d9104d90f The limited Image Designer version lets you use only the *Use Image Designer Template (limited)* rule box. With this rule box, you can test the functionality with a limited number of images. Select the needed template from the **Template** drop-down menu. Select **Save**. When you modify images, they go through the Productsup image servers. Each time you change and apply a template, the URL of the exported image changes and starts with `https://gfx.productsup.io/`. # Search and preview any product in the Image Designer import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] By default, the Image Designer preview shows the first 50 products of your product feed, and you can move between them with the **Preview Product** arrows. The Product Search feature lets you jump straight to a specific product instead of paging through the list. You can search by **any product attribute**, such as ID, SKU, GTIN, Title, etc - no limitation here. The search is case-insensitive and supports partial values, and the preview navigates to the products that match your query. How to search for a product in the Image Designer preview [#how-to-search-for-a-product-in-the-image-designer-preview] Go to **Designer** from your site's main menu. Select an attribute in the drop-down next to **Search by** in the upper toolbar. For example, `sku`. Enter a full or partial value in the search input and select the magnifying glass icon. image-designer-product-search Use the **Preview Product** arrows to move between the matching products. The counter below the arrows shows your position in the search results, for example, `Match 1 of 1`. The preview shows the selected product with all layers of your template, so you can check how the template renders for that exact product before saving it. Clear the search input to return to the default preview of your feed's products. When to use the Product Search [#when-to-use-the-product-search] The product search is useful in the following scenarios: * You run prioritized product campaigns, such as hero SKUs or limited assortments, and need to verify the template on the exact products of the campaign. * Your feed is large or contains duplicates, and the product you want to preview is not among the first products of the feed. * You use your own prioritization logic and want to confirm which product variant the template picks up. # Add a new image to your image template import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] In Image Designer, you can apply images over your existing product image using one (1) of the following ways: . Upload a static image file to the platform image library and use it for all templates within the site where you uploaded it. See [Add a static image](#section-idm4631011274931233646918317425). . Add an image via the URL of the storage that contains the image. See [Add an image via the URL](#section-idm4631011230899233646920029781). . Add a dynamic image from a selected column in your feed. See [Add a dynamic image](#section-idm4582677101676833646919969093). Add a static image [#add-a-static-image] You can upload images from your computer and use them for all templates within the site where you uploaded them. You can find all uploaded images in the **Your Custom Images** section of the Insert tab. To add an image: Go to **Designer** from your site's main menu. Open the **Insert** tab. Scroll down to the section **Your Custom Images**. Upload images by dragging them into the upload area or selecting **Or click here to upload**. UUID-ffe9e39c-6e90-8767-00df-b6107464e849 To see the uploaded image details, select **Show Upload Details**. Drag the uploaded image to the image preview area. Customize the corresponding custom image layer in the *Layers* tab. See [Set up an image layer](#section-idm4556118247084833685000640929). UUID-476486cd-bc56-69a0-b4d2-6b7a26c2ab27 Select the floppy disk icon in the upper toolbar to save the changes. Add an image via the URL [#add-an-image-via-the-url] You can upload images via the URL of the storage that keeps them. Go to **Designer** from your site's main menu. Open the **Insert** tab. Open the **Elements** section. Drag the **Image from URL** element into the image preview area. Enter the image URL in the pop-up window and select **Add**. Customize the corresponding image layer in the *Layers* tab as desired. See [Set up an image layer](#section-idm4556118247084833685000640929). UUID-89c90afa-d633-9fc1-cf25-4503291f6ddd Select the floppy disk icon in the upper toolbar to save the changes. Add a dynamic image [#add-a-dynamic-image] You can add an image from a selected column in your feed. Go to **Designer** from your site's main menu. Open the **Insert** tab. Open the **Elements** section. Drag the **Dynamic Image** element into the image preview area. Customize the corresponding Image layer in the Layers tab as desired. See [Set up an image layer](#section-idm4556118247084833685000640929). UUID-a749cfda-9c67-b342-82c6-6efd616bc69a Select the floppy disk icon in the upper toolbar to save the changes. Set up an image layer [#set-up-an-image-layer] Whenever you add an image to the image template, the platform creates a new layer and gives it a name according to its type and order. To locate a necessary layer, go to the **Layers** tab and select one of the following: * For a static image, select the corresponding layer named such as `CustomImage: Layer-XX`. * For an image added via URL, select the corresponding layer named such as `Image: Layer-XX`. * For a dynamic image, select the corresponding layer named such as `DynamicImage: Layer-XX`. To edit your image layer, set up the following: The settings of all image types are almost the same. The difference is only in the **Input** and **Source** fields. * (For Dynamic Image layer only) **Input**: Select the attribute that contains the value you want to use as a dynamic image. If the attribute has an ex (**✘**) before its name, the product you are currently editing in Image Designer has no image.If the attribute has a checkmark (**✔**) before its name, the product has a relevant image in the attribute. UUID-efdd5efd-7b8e-7710-2fb0-972145dcae27 * **X** and **Y**: Set image coordinates to place your image on the template. You can also drag the layer in the image preview area to achieve the same result. * **width**: Define the width of the image. You can also change the image size right in the image preview area. * **height**: Define the height of the image. You can also change the image size right in the image preview area. * **Transparency**: Set the transparency of the image on a scale from 0% to 100%, where 0% means no transparency and 100% means a fully transparent image. * **Rotation (deg)**: Define the rotation degree of the image. * **Crop Mode**: Cut off the sides, top, and bottom of the image. * **Slicing**: Slice the image into pieces. * **Source**: To change the image, do one (1) of the following actions depending on the image layer type: * For *CustomImage* layers, choose the needed image from the drop-down menu to change an image. * For *Image* layers, select the **Change URL** button and enter the URL of a new image. * **Reset filters**: Reset all your filter settings for this layer. * **brightness**: Increase the image brightness. * **hue**: Change the image coloring. * **grayscale**: Convert your image to black and white. * **invert**: Invert the colors. * **contrast**: Increase the image shades. * **saturate**: Increase the image saturation. * **sepia**: Add a sepia filter to the image. * **blur**: Blur the image. # Advanced rule box options import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] While optimizing your product data with the help of rule boxes in Data View or Dataflow, you can apply the following advanced options to rule boxes: * [Pause a rule box](#N1659614411807) * [Delete a rule box](#N1659614423545) * [Duplicate a rule box](#section-idm232219334686326) * [Apply rule boxes to segments](#section-idm4496911623404833190509284293) * [Schedule rule boxes to run at a specific time](#section-idm232219334970168) UUID-82bb89f2-4daf-1585-0a9b-daa4e5ff9418 Also, you can copy and apply rule boxes across multiple sites with the Bulk Option functionality. See [Apply rule boxes in bulk across multiple sites](#section-idm232217535173292) for more information. Pause or delete a rule box [#pause-or-delete-a-rule-box] To terminate the effect of a rule box, you may pause or delete it. Pause a rule box [#pause-a-rule-box] To temporarily pause a rule box and re-activate it later: Go to **Data View** from the site's main menu. Choose the needed export or the intermediate stage in the dropdown on the left. Select **Edit** in the attribute's column where you have a rule box. Select the wrench icon 🔧 in the top right-hand corner of the rule box. Select the **pause (||)** icon. UUID-27a5b4c4-7d09-1c77-34a5-f20eabd9a132 Select **Save**. To activate the rule box again, repeat the previous instructions and select the play icon **(▶︎)** in [step 5](#N1659514972415). Delete a rule box [#delete-a-rule-box] To remove the rule box: Go to **Data View** from the site's main menu. Choose the needed export or the intermediate stage in the dropdown on the left. Select **Edit** in the attribute's column where you have a rule box. Select the wrench icon 🔧 in the top right-hand corner of the rule box. Select the red **trash** icon. Select **Save**. Duplicate a rule box [#duplicate-a-rule-box] To apply the same rule box several times for the same attribute, but with slightly different settings, you can duplicate a rule box and its settings. To duplicate a rule box: Go to **Data View** from the site's main menu. Choose the needed export or the intermediate stage in the dropdown on the left. Select **Edit** in the attribute's column where you have a rule box. Select the wrench icon 🔧 in the top right-hand corner of the rule box. Select the **duplicate** icon. UUID-41cada18-d075-f5dd-7f0a-ebbe6632aec4 Select **Save**. Apply rule boxes to segments [#apply-rule-boxes-to-segments] If you need to edit only a part of your products, you can combine these products into a segment and apply rule boxes to the whole segment without affecting other products. Before applying rule boxes to specific product segments, you must first create a segment. To learn how to create segments, see [Use segments to apply rule boxes to specific product groups](/docs/help-center/map-and-optimize-your-data/data-view/use-segments-to-apply-rule-boxes-to-specific-product-groups#section-idm23222108490782). To apply rule boxes to segments: Go to **Data View** from your site's main menu. Choose the needed export or the intermediate stage in the dropdown on the left. Select **Edit** in the attribute column where you want to apply a rule box to a product segment. If you have already added the needed rule box, proceed to the next step. If not, choose **Select an Option**, select the needed rule box, and set it up. Select the wrench icon 🔧 in the top-right corner of the rule box. Select the label icon 🏷 at the top of the rule box and go to the *Available Segments* window to select the plus icon **+** next to the needed product segment. UUID-fc6c55f1-fa16-5ca0-87db-c0ffd60e038a You can select several segments in one rule box. In this case, the platform applies the rule box to all products matching all selected segments. Select **Save**.The rule box affects the products of the selected segment only. The rest of the products remain unchanged. If you need to apply rule boxes to products based on the contents of multiple attributes, you can use the Rule box conditions feature available in Dataflow. See [Apply rule boxes based on conditions](/docs/help-center/add-a-rule-box/apply-rule-boxes-based-on-conditions). Schedule rule boxes to run at a specific time [#schedule-rule-boxes-to-run-at-a-specific-time] You can schedule rule boxes to run at a specific time. For example, if you want to offer discounts on products on weekends. The timezone of the rule boxes is the same as the site's timezone. You can't change it by yourself. If you need to change the timezone, contact [support@productsup.com](mailto:support@productsup.com). In your request, indicate the following: * needed timezone * the site IDs where you want to apply the timezone. Schedule a rule box for a specific day [#schedule-a-rule-box-for-a-specific-day] To schedule a rule box for a specific day of the week and time interval: Go to **Data View** from the site's main menu. Choose the needed export or the intermediate stage in the dropdown on the left. Select **Edit** in the attribute's column where you have a rule box. Select the wrench icon 🔧 in the top right-hand corner of the rule box. In the Box Scheduling section, select **Execute on specific days**. UUID-b80e0ee7-39a2-b59d-68ef-830699a817e3 Select **Add Date**. Pick a day of the week from the dropdown. Select the **Begin** and **End** times. Select **Save** at the top of the toolbar. You can schedule as many timeframes as desired by repeating the previous actions. After you add a schedule, a little clock icon appears next to the scheduled rule box. UUID-63f8440b-3a18-ce51-2d1b-e87c07de345c Schedule a rule box between two dates [#schedule-a-rule-box-between-two-dates] Go to **Data View** from the site's main menu. Choose the needed export or the intermediate stage in the dropdown on the left. Select **Edit** in the attribute's column where you have a rule box. Select the wrench icon 🔧 in the top right-hand corner of the rule box. In the Box Scheduling section, select **Execute between two dates**. UUID-39af6b94-4907-f50d-5e79-351a16de045c Define both **Start** and **End** dates or just one of them. Select **Save** at the top of the toolbar. If you define only a Start date, the rule box works for all runs starting this date. If you define only an End date, the rule box works for all runs before the end date. If you define the Start and End dates, the rule box works for all runs between and on those dates. Apply rule boxes in bulk across multiple sites [#apply-rule-boxes-in-bulk-across-multiple-sites] If you need to add the same rule boxes to multiple sites, use the Bulk Option functionality to save time. Your sites must have the same attribute names to apply rule boxes in bulk. Set up the rule boxes in one site. Go to the organization or project level. Select **Bulk Option** in the upper ribbon. A new page opens. UUID-0825a97e-b71c-6bbe-e850-9210a13f9c13 In the *Choose Sites* step, choose the site where you created the rule boxes and select **Next Step**. In the *Choose Operation* step, select **Add Dataflow Boxes** and confirm your choice by selecting **Next Step**. In the *Operation Details* step, choose the stages that contain the rule boxes in the **Dataflow** dropdown. If you choose *Intermediate - Export*, select the export containing your rule boxes from the **Export** dropdown. All sites where you want to apply the rule boxes must have the selected export. In the *Connections* section, select the connections that contain the rule boxes you want to copy and apply in bulk.You can see the rule boxes applied to each connection. UUID-bcba70fe-9a8e-a453-7589-5a761944c795 To let the platform display the sites where you want to copy the rule boxes, select the projects they belong to in the *Target Projects* section. Search for your desired sites in the **Target Sites** search field. If you are adding rule boxes between the intermediate and export stages, find the *Channels* column and select the exports where you want to apply the copied rule boxes. Select **Execute**. In the *Confirmation* step, check the results of the applied changes.You can leave this screen by selecting **Return to organization page**. You can also go to one of the sites where you performed the changes by selecting the name of the needed site. # Twig-based rule box capabilities to enhance your product data import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Twig is a template engine based on PHP that lets you add dynamic content to the template. You can transform your data with the help of Twig in the rule boxes such as *Text Template*, *Text Template with Lists*, and *Math Template* in Data View or Dataflow. Twig lets you make text transformations, do math calculations, dynamically update URLs, and apply simple conditional logic. This document shows some examples of using Twig to optimize your product data. Use rule boxes with Twig to edit the text and do calculations [#use-rule-boxes-with-twig-to-edit-the-text-and-do-calculations] You can enhance your data with the help of rule boxes that can use Twig to dynamically change the content of the attributes in Data View or Dataflow. To add a rule box, take the following steps: Go to **Data View** from the site's main menu. Choose the needed export or the intermediate stage in the drop-down menu on the left. Select **Edit** in the attribute column where you want to apply the rule box: * To create or edit text in the attributes, use the rule boxes *Text Template* or *Text Template with Lists*. See [Create text template using data from other attributes](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/replace-values#section-idm353458339224944) to learn how to set up these rule boxes. * To make math calculations in the attributes, use the *Math Template* rule box. See [Work with prices & math](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/work-with-prices-math) to learn how to set up the rule box. Enter your text with Twig to integrate attributes' values in your text. See [Add Twig in the rule boxes](#section-idm4625748940313634263541042005). Select **Save**. Add Twig in the rule boxes [#add-twig-in-the-rule-boxes] To get the needed result with Twig, create the Twig code according to the rules: . The Twig should begin and end with curly brackets and spaces such as `{{ text }}`. . The contents of Twig are case-sensitive meaning that if you refer to an attribute with a Twig, you need to enter the attribute's name exactly as it is in the feed. For example, `{{ Long_description }}` or `{{ long_description }}`. . To get values from certain attributes and insert them into the template of the rule box with Twig, use the necessary Twig syntax: * If the attribute name consists only of alphanumeric characters and underscores, you can refer to it using this syntax: `{{ attribute_name }}`. * If the attribute name contains spaces, dots, commas, or other special characters, you can refer to it using this syntax: `{{ fromField('attribute name')|raw }}`. Alternatively, you can rename such an attribute using only alphanumeric characters and underscores. Then, you can refer to the renamed attribute in a Twig using the standard syntax `{{ attribute_name }}`.If renaming an attribute isn't an option, you can copy it, rename the copy, and use the copy in a Twig. . To edit the attribute's current value, use `currentValue`: * If the value consists only of alphanumeric characters and underscores, you can refer to it using this syntax: `{{ currentValue }}`. * If the value contains spaces, dots, commas, or other special characters, you can refer to it using this syntax: `{{ fromField('currentValue')|raw }}`. Use AI-generator for Twig suggestions [#use-ai-generator-for-twig-suggestions] If you need a suggestion for a possible Twig, use our AI-based Twig generator. Select the **>\_** icon in a rule box. UUID-33f340e1-450f-53c9-3747-61208fae6f96 Describe the aim and result you want to achieve in the Twig generator window and select **Generate**. UUID-98f3cf17-c3cf-7963-59a3-9cad44e95011 Select **Copy** below the **Answer** field. Paste the copied answer into the Twig field of the rule box. To create the most accurate prompts, see our best practices in [Create the right prompt for the AI Twig generator](/docs/help-center/best-practices/create-the-right-prompt-for-the-ai-twig-generator). Refer to a site with Twig [#refer-to-a-site-with-twig] Some sites use shared elements. To distinguish data among the sites, it is possible to add a site tag or site ID in the data feed. See [Edit site settings](/docs/help-center/get-started/manage-your-organization-projects-and-sites/edit-site-settings) to learn how to add a tag to a site. If you need to refer to a site in your data feed, you can use Twig for site ID such as `{{Tag.SiteID}}` or a site tag such as `{{Site.Tags.XXX}}`, where XXX is the tag key that you can set in the site settings. UUID-2cd41b45-159c-d84a-a470-659de0832a0e Leave a comment for Twig [#leave-a-comment-for-twig] It is helpful to add a comment to your Twig in the rule boxes to keep a reminder for your colleagues and yourself of the purpose or logic of the change. To leave a comment for a Twig, use the format `{# … #}` and enter the necessary text inside the brackets. For example, `{# it's a comment to remind you what this Twig edits #}`. The comments are invisible in the data feed and you can only see them when you open the rule box. Use cases for data editing with Twig [#use-cases-for-data-editing-with-twig] Here are some use cases where you can use Twig: | Use case | Attribute value | Text Template with Twig | Result | | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------- | | **Create a text**: Create simple product descriptions in the description attribute using values from *product\_type* and *brand*. | product\_type: `T-shirt`brand: `Nike` | `This is a {{ product_type }} from {{ brand }}.` | `This is a T-shirt from Nike.` | | **Create a URL**: In the link attribute, create a URL that includes *brand*, and *category*. | brand: `Nike`category: `T-shirts` | `https://www.store-example.com/{{ brand }}/{{ category }}` | `https://www.store-example.com/Nike/T-shirts` | | **Set value if empty**: Change the current value to `brand new` if it is empty. | The current attribute is empty | `{% if currentValue == '' %}{{'brand new'}}{% else %}{{currentValue}}{% endif %}` | `brand new` | | **Prepend the text**: Prepend the text `'cheap'` if the price is lower than 130. | The current attribute: `red jacket` | `{% if price < 130 %}Cheap {{currentValue}}{% else %}{{currentValue}}{% endif %}` | `Cheap red jacket` | # Manage an FTP server hosted by Productsup import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Once you create your FTP server, you can manage it directly in Productsup. Reset the FTP server password [#reset-the-ftp-server-password] Go to the organization level and select **FTP Accounts**. Select the arrow to expand the drop-down menu. Select **Reset Password**. UUID-bd1c0d49-52af-f119-b532-d20d86a405d2 Enter and then repeat the new password. Delete an FTP server [#delete-an-ftp-server] When you delete an FTP server you created, be aware that you should first back up all hosted files. Additionally, any data feed that you export to the FTP will fail once you delete the FTP server. Ensure that you change the export destination for your data feeds. Go to the organization level and select **FTP Accounts**. Select the arrow to expand the drop-down menu. Select **Remove**. UUID-ef6c5921-4fa9-3cb6-54b1-655b4ce8f9e7 # Create and manage an FTP server import { Callout } from "fumadocs-ui/components/callout"; If you need an FTP server to import or export data, you can use an FTP server hosted by Productsup. Creating and managing FTP servers through Productsup is only possible for admin users. # Create an FTP server hosted by Productsup import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; FTP (File Transfer Protocol) servers are the software used for transferring files across the Internet and facilitating remote data sharing between computers. FTP server lets you organize your files and provide access to other users to download them remotely. The FTP server gives you storage protected with a username and password. Productsup lets you create an account at an FTP server to transfer and store your files. Create an FTP account [#create-an-ftp-account] Go to the organization level and select **FTP Accounts**. UUID-20ab6434-d7eb-372e-f91a-8578492c910f Select **ADD FTP ACCOUNT**. Create a username for your FTP server and enter it in the **Username** field. Enter and repeat your password. Select **Save**. Get credentials for your FTP server [#get-credentials-for-your-ftp-server] After creating an account, you get the link to the FTP server where you can store your files. This link never changes. You need the credentials, for example, to access an FTP client to transfer files between your computer and the server. See [Upload files to or download them from an FTP server](#section-idm4525956711566433418746304707). | **Host name** | [ftp://ftp.productsup.com/](http://) | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Username** | Defined upon creation | | **Password** | Defined upon creation | | **Port number** | For FTP servers, the global port number is `21`.For SFTP servers, the global port number is `22`. These are default port numbers. If arranged with the administration, your specific port number can differ. Contact [support@productsup.com](mailto:support@productsup.com) if you experience issues with your connection. | See [Reset the FTP server password](/docs/help-center/get-started/create-and-manage-an-ftp-server/manage-an-ftp-server-hosted-by-productsup#section-idm232209163571939). Upload files to or download them from an FTP server [#upload-files-to-or-download-them-from-an-ftp-server] You can transfer files between the FTP server and your computer. You need to install a program on your computer, such as [Cyberduck](https://cyberduck.io/) or [FileZilla](https://filezilla-project.org/), to transfer files between the FTP server and your computer. Use your FTP server's credentials to access it and upload or download files. Import files from the FTP server to Productsup [#import-files-from-the-ftp-server-to-productsup] You can use files from the FTP server as a data source to import them into the Productsup platform: Create an FTP account and get the credentials. See [Create an FTP account](#section-idm4525956770785633418778107327). Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Feed URL* and select **Add**. Give it a custom name as desired and select **Continue**. In **Source URL**, add a link to your file stored on the FTP server. In **Description (optional)**, edit the name of the data source as needed. As you can store multiple files on the FTP server, you need to enter the URL with the complete path to your file within the server in **Source URL** — for example, `ftp://ftp.productsup.com/yourfile.csv`. Enter a username and password for your FTP account. Select **Save**. Export files to the FTP server from Productsup [#export-files-to-the-ftp-server-from-productsup] You can export your feed from a site in Productsup to the FTP server hosted by Productsup. See [Add an FTP, SFTP, or FTPS destination](/docs/help-center/export-data-feeds/set-up-an-export-destination/add-an-ftp-sftp-or-ftps-destination) for setup instructions. # Transport Server Data Retention Policy According to the *Productsup Platform Description – Version Q2-2023-V1, updated May 29, 2023*, the retention policy for the files stored on the Productsup Transport Server is as follows: * Removal of Files stored on Transport Server: * Productsup removes files older than 12 months stored on the Transport Server. To prolong their lifetime, you can export the same files again to reset the 12-month Time-To-Live (TTL). * Files with dynamic filenames: * Files with filenames containing a dynamic template fragment ( `{{ ... }}` ) have a 30-day TTL. Productsup removes files if you haven't updated them. See [Legal](https://www.productsup.com/legal/) for more information. # Billing section import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; The Billing section lets administrators add and modify their billing information. To access Billing, select your profile icon in the top-right corner and choose **Billing**. UUID-213f6466-dbd4-af4f-3d98-481589a2dcd8 You can only see the *Workspaces* link leading to the [Retail platform](https://retail.productsup.com/dashboard/insights) if you have a Retail platform account. Prerequisites [#prerequisites] You must be an administrator of your Productsup organization to access the **Billing** section. Payment Settings tab [#payment-settings-tab] The Payment Settings view lets you set up an automatic payment method on your organization. You can choose to pay your invoices by direct debit or credit card if the Productsup Finance team has set up [Zuora](https://www.zuora.com/products/billing-software/) on your organization. Productsup supports the following credit cards: Mastercard, Visa, and American Express. You can also select a default payment method or remove payment methods. Productsup only offers the direct debit payment option in the European, United Kingdom, and Australian regions. Contact [support@productsup.com](mailto:support@productsup.com) if you have any questions. Productsup does not store any credit card data. Payment provider [Zuora](https://www.zuora.com/products/billing/) stores all credit card payment data. Add direct debit or credit card [#add-direct-debit-or-credit-card] To add a direct debit or credit card payment method, select the **Payment Settings** tab in the Billing section and **Add payment method**. UUID-a3c3e853-9e51-4281-7b38-aafb3380afe7 Select **Direct debit** or **Credit card** and choose **Continue** at the bottom of the window. UUID-1fc88c51-0a8f-9aad-079f-76233a0c85e8 Enter your payment details in all fields and select **Add**. This process directs you to the region-specific direct debit modal based on the account setup in Zuora. For example, if your billing address is in France, your country's banking details are pre-populated by the EU (SEPA) direct debit modal. Once you return to the Payment Settings view, choose a payment method and select **Set as default payment method**. To remove a payment method, select the delete icon. You can't delete the default payment method. You must select another payment method as default before being allowed to delete an active default method. UUID-e0d3f289-7b8c-05a3-1f9e-63d51b950c35 # Set up User Management import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Learn how to set up User Management, add new users, remove users, and change user access to sites and projects. To learn more about multiple user types, see [User types and permissions](/docs/help-center/get-started/user-management/user-types-and-access-rights). To access User Management, you must be a user admin in your organization. All changes, such as adding new users, removing existing ones, and changing access permissions, must be performed by the organization admin(s). The Productsup Support Team cannot make those changes. Access User Management [#access-user-management] To access User Management: Go to **User Management** from your [organization's](/docs/help-center/get-started/manage-your-organization-projects-and-sites/your-productsup-organization) main menu. UUID-bb13f71d-b1bb-76cf-3e38-fd7b0d95a683 Here's an overview of all users associated with your organization. UUID-09d2943b-a6e7-7513-f502-29880d69eaf9 Add new users [#add-new-users] Go to **User Management** from your organization's main menu. Select **INVITE USERS** in the top right-hand corner of the *User Management* page. Add the email address(es) of those you wish to invite. 1. You can add one email address per line to invite multiple users at once. Select if your user should have **Admin** or **User** access. 1. After making a selection, you can give them access to the appropriate sites or projects. 2. When adding sites or projects, you should define whether access should be Read-Write or Read-Only. Select **Save**. UUID-4569ba0e-e73e-8bf5-5445-a267458900bd * The users you invited now receive an email prompting them to accept an invitation to join your organization. * The email prompts your invited users to accept this invitation. * Upon accepting it, they will be prompted to configure their account by setting their name, password, email address, the country they are in, and the language they want to use in the platform. * After accepting the invitation, your new users will have access to Productsup. Any invites sent to new users will be valid for 30 days. After this, the link expires. The address will then disappear from the list of invited users in your User Management. Remove users [#remove-users] Go to **User Management** from the main menu at the organization level. Select the arrow to expand the **Edit** drop-down menu for the user you want to delete. UUID-fd032f35-b623-7645-c508-65405451c28b Select **Delete**. To delete admin users, you should first change their role from *Admin* to *User*. See [Change user/admin role](#section-idm232207392753555). Without changing the user role, you can't delete admin users. UUID-35e75c08-60ca-da20-7c09-668ab9030a53 Give users access to sites/projects [#give-users-access-to-sitesprojects] To give access to users, either Read-Write or Read-Only, to sites or projects: Go to **User Management** from your organization's main menu. Select the button showing the number of sites the user has access to. UUID-3b5fe4b0-c091-9193-ce10-085ab79954d4 **Add**, **change**, or **delete** access to sites and projects. Change user/admin role [#change-useradmin-role] You can elevate users to administrators as well as demote administrators to users. Go to **User Management** from your organization's main menu. To demote a person from an admin profile, select **Edit** from their user profile in User Management: 1. In **Role**, change their role from *Admin* to *User*. UUID-1295ec2f-3da4-10bc-a2a2-6ed97e413765 2. Select **Save**. 3. Add any sites/projects you wish the user to have access to. To elevate a user with read-only or read-write access: 1. Select edit on their user profile in **User Management**. 2. Under settings, change the role to **Admin**. 3. Select **Save**. # Two-factor authentication (2FA) feature import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Two-factor authentication (2FA) requires you to prove your identity using a device you own besides your standard login credentials. An authenticator sends a code to an app on your mobile phone to confirm your identity. You can use a third-party authenticator app, such as Google Authenticator, which you can install to your phone in [App Store](https://apps.apple.com/us/app/google-authenticator/id388497605) and [Play Market](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2\&hl=en\&gl=US). There are two ways to activate 2FA: * You can activate 2FA for your user in user profile settings. See [Set up user profile](/docs/help-center/get-started/user-management/set-up-user-profile#section-idm232205856133962) for step-by-step instructions. * You can activate 2FA for all users within your Productsup organization if you are an admin of that organization. See [Activate 2FA for all users within the organization](#section-idm23220705515061) for step-by-step instructions. If you change your mobile device, you can turn two-factor authentication off to disconnect the old device and save the settings. Then, reactivate 2FA and connect the new device. See [Set up user profile](/docs/help-center/get-started/user-management/set-up-user-profile) for step-by-step instructions. If you don't have access to your 2FA device anymore, contact [support@productsup.com](mailto:support@productsup.com). Activate 2FA for all users within the organization [#activate-2fa-for-all-users-within-the-organization] Select the cogwheel icon UUID-ce09c8b4-4286-bcd4-de46-a409fac3e748 at the bottom of your organization's main menu. UUID-36341eec-8c91-f393-9f7b-76e31f456174 The **Organization settings** page opens in a new tab. Toggle **Force two-factor authentication for the entire organization** to activate the feature. UUID-42654ca8-d487-65d1-b324-ff1269b7ad24 Select **Save**. If you activate 2FA for all users, ensure every user in your organization recognizes this change. 2FA forces all users to authenticate during their next login, so they won't be able to access your Productsup organization without first setting up 2FA. # Usage data dashboard and overage calculations import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; According to the Productsup License Agreement, you get access to the platform based on your contract entitlement. If you exceed your entitlement and overuse the platform, you face additional charges for overages. The platform automatically calculates overages based on particular metrics. This document explains the formulas used to calculate excessive use of the Productsup platform. The Usage data dashboard overviews your platform usage and helps you understand charges and overages. The Usage data dashboard shows the essential metrics affecting invoices, such as items, exports, sites, users, and syndication frequency overages. The dashboard is available in the Billing section of the platform, and only organization admins can access it. You can also download the detailed usage reports in CSV format. To access the Usage data dashboard: Select your admin profile icon in the top-right corner and choose **Billing**. Select the *Usage* tab. You can find metrics' meanings under the info icon UUID-fbc49e13-5768-77ad-f36e-7a4b052faa9f next to each metric name. UUID-418591ab-d0e4-ed44-3d27-4dda2c6993ed Overage calculation metrics [#overage-calculation-metrics] The platform calculates overages for the following metrics: * [Max items](#section-idm4520563288896033230246059519) * [Exports](#section-idm4634253574464033230248710409) * [Users](#section-idm4561994551683233230348428299) * [Sites](#section-idm4566155644926433230350696624) * [Syndication frequency overages](#section-idm4631468298771233551804415214). Overage calculations exclude the sandbox project usage. See [Use your sandbox project for testing purposes](/docs/help-center/best-practices/use-your-sandbox-project-for-testing-purposes). Max items [#max-items] The platform identifies the maximum items imported or exported daily for each non-manual site run for every organization or edition and calculates the monthly overage. Non-manual runs are the ones that use the site scheduling, a trigger of another site, or an API triggers the site. The formula for overage calculation is: `Overage = [the highest number of items per day within a month] - [your service entitlement]` For example, if the item entitlement is `5000`, the overage calculation looks as follows: UUID-f705938d-245e-42ff-091a-ca8feee102c2 The overage for January 2021 is 5000, calculated as `10000 actual items - 5000 items from the entitlement`. There are no overages in February 2021, as the platform imported or exported exactly 5000 items. Exports [#exports] The platform takes daily snapshots of the number of your configured main and standard exports for every organization or edition and calculates the monthly overage. The overage calculations for the exports metric takes into account export clustering. See [Export clustering](#section-idm4561994500652833230356936418) to learn how it works. The formula for overage calculation is: `Overage = [the total number of clustered exports within a month] - [your service entitlement]` The platform doesn’t count the sandbox project’s exports. See [Use your sandbox project for testing purposes](/docs/help-center/best-practices/use-your-sandbox-project-for-testing-purposes). For example, if the exports entitlement is `60`, the overage calculation looks as follows: UUID-84720fcf-cfc6-7883-ee75-59afc5f4baec The overage for January 2021 is 40, calculated as `100 added exports - 60 exports from the entitlement`. There are no overages in February 2021, as the customer added only 50 exports. Export clustering [#export-clustering] The Productsup platform uses export clustering to calculate overages for exports. Productsup has three (3) types of exports: * Standard export: highlighted in *green* in the following example tables. * Main export: highlighted in *yellow* in the following example tables. * Sub-export: highlighted in *red* in the following example tables. Standard exports [#standard-exports] A standard export is the default export that doesn't have any classifications or sub-exports. For example, *Google Merchant Center*. To count standard exports on the site level, use the following formula: `[The same standard export added N times] = N` For example: UUID-e837cea8-12a8-223c-34e0-150ca0e4a958 The platform counts the standard export A every time you add it, which makes up three (3) exports. Main exports [#main-exports] The main export is a standard export that can have one or more sub-exports associated with it. For example, *Upljft - Basic catalog* is the main export for sub-exports *Upljft - Country feed* and *Upljft - Language feed*. This system helps to avoid overages by clustering multiple similar sub-exports that send data to the same channel but for different countries, languages, etc. To count main exports on the site level, use the following formulas: * `[The same main export added N times] = 1`For example: UUID-5a98236a-470d-8d22-6aa7-ca6c4932f19c The platform counts the standard export A every time you add it, which makes up two (2) exports, while it counts the main export B as one (1) export although added twice. In total: three (3) exports. * `[N different main exports added] = N`For example: UUID-b0cf8ea0-28f6-18d7-cc19-a0df1ed0d7a0 The platform counts the standard export A every time you add it, which makes up two (2) exports, while it counts the main export B as one (1) export although added twice. The platform counts main export C added once as one (1) export. In total: four (4) exports. Sub-exports [#sub-exports] A sub-export is an export that belongs to the main export and helps cluster multiple similar exports that send data to the same channel but for different countries, languages, etc. However, there might be cases where a sub-export doesn’t belong to the main export because there is no need of the main export for certain setups. In this case, the platform creates a non-global placeholder as the main export and associates sub-exports with it. For example, FabDis exports, such as *Fabdis 3.0 - C01\_Extension*, are sub-exports that belong to the non-global placeholder main export *FabDis 3.0 - Master Channel Shell*. To count sub-exports on the site level, use the following formulas: * `[The same sub-export added N times] = 1`For example: UUID-dad97a80-eec3-c65e-7f69-a53f5da33272 The platform counts the standard export A and the main export B as two (2) exports, while it counts the sub-export C belonging to the main export D as one (1) export although it is added twice. In total: three (3) exports. * `[N different sub-exports belonging to the same main export] = 1`For example: UUID-6b0b2d3f-9a3d-eace-63ba-06d6e3a052e6 The platform counts the standard export A and main export B as two (2) exports, and it counts all sub-exports belonging to the same main export D as one (1) export, although they are added three times (twice for C and once for F). In total: three (3) exports. * `[Sub-exports from N different main exports] = N`For example: UUID-914331ca-4886-7a76-9490-6abfdcc0ab09 The platform makes the following calculations: 1. Counts every time you add each standard export A and H per site, which makes five (5) exports. 2. Counts the main exports B and E only once for each export type per site, regardless of how many times you added them. This makes four (4) exports. 3. Counts two (2) sub-exports C belonging to the main export D, and one (1) sub-export F belonging to the main export G, only once for each main export per site. This makes three (3) exports. 4. In total: 12 exports. Users [#users] The platform makes a daily snapshot of the number of users in each organization or edition and calculates the monthly overage. The formula for overage calculation is: `Overage = [the highest number of users daily within a month] - [your service entitlement]` For example, if the users entitlement is `10`, the overage calculation looks as follows: UUID-116bb9b6-46a0-daf8-ec77-b3e3e1077255 The overage for January 2021 is `10-10=0`. For February and March 2021, it is `15-10=5`. Sites [#sites] The platform makes a daily snapshot of the number of sites or catalogs in every Seller/Vendor Onboarding Module in each organization and calculates monthly overage. The formula for overage calculation is: `Overage = [the highest number of sites within a month] - [your service entitlement]` For example, if the sites entitlement is 10, the overage calculation looks as follows: UUID-fc5708c3-9f27-c449-416d-e95530115812 The overage for January 2021 is `30-10=20`. For February and March 2021, it is `10-10=0` and `5-10=-5,` and both result in zero (0) overages. Syndication frequency overages [#syndication-frequency-overages] The platform makes a daily snapshot of the number of syndications per export in each organization and calculates the monthly overage. Syndication is the sum of exports runs per site per day. The platform doesn't count manual site runs triggered when you select the **Export** or **Run** buttons. However, if the manual site run triggers another site run, the triggered site run counts as syndication and increases the total syndication frequency count by one (1). To prevent overages in this case, check the triggering settings of your sites in **Scheduling**. See [Set up scheduling and triggering processes in Scheduling](/docs/help-center/dashboard-and-monitor/set-up-scheduling-and-triggering-processes-in-scheduling) for more information. Suppose the organization has three (3) active exports: A and B in site 1, and C in site 2. The syndication frequency entitlement per export is 1. The following syndication frequency happened during January 2021: * 01.01.2021: Three (3) syndications for export A, one (1) for export B, and one (1) for export C. * 02.01.2021: Two (2) syndications for export A, one (1) for export B, and two (2) for export C. * 03.01.2021: One (1) syndications for each export. UUID-2c13abde-f1af-5add-2183-b16fd11ef35a The platform doesn’t count the number of syndications but only the fact of exceeding the entitlement per export per day, and sums up these daily cases for a month. In this example, the number of daily syndications with overages on 01.01.2021 is only one (1) because only export A exceeds the entitlement. On 02.01.2021, it is two (2) as two (2) exports exceed the entitlement. And on 03.01.2021, there were no overages. See the following table: UUID-faa94dbf-83a1-a090-2321-b90fe8c4da95 January overages equal the sum of one (1) exceeding syndication case on 01.01.2021 and two (2) cases on 02.01.2021, which makes three (3) in total for January. See the following table: UUID-a20be908-ae31-d30d-8779-efb18edc3bf2 Syndication frequency overages details [#syndication-frequency-overages-details] You can view details of syndication frequency overages per day: Select a necessary month bar on the *Syndication frequency overages* graph. UUID-598aa538-36da-0763-8e66-181fcd66b4d2 Select a necessary day bar on the *Syndication frequency overages* graph. UUID-4199a2cb-97c2-0230-ecad-3ce33e72e782 The *Syndication Frequency Overages Details* table shows all sites that lead to overages. You can check the following metrics for each site in your organization for a selected day: * **Overage** * **Exports** * **Entitlement** * **Syndications** UUID-f568a1d9-6b70-68d7-431f-f568e530e9d7 You can take the following actions: . Select another day. Open the day picker dropdown. The red dots in the top-right corner of a day indicate the days with overages. UUID-90331f7a-5ec1-9bf6-7149-006f8a33c47d Select a necessary day. . View the list of exports for each site and deactivate unnecessary exports to reduce overages: Select a number next to the necessary site in the *Exports* column to go to the *Overview* tab of the Exports page of the site. Check the active exports and deactivate unimportant exports. . View the scheduling of each site: Hover over a necessary site line and select **View Scheduling** to get to the *Site Scheduling* tab in Scheduling. Adjust your schedule to match your entitlement. See [Schedule your site runs in Site Scheduling](/docs/help-center/dashboard-and-monitor/set-up-scheduling-and-triggering-processes-in-scheduling#section-idm4498060092667233567717425562). Download the usage reports [#download-the-usage-reports] You can download the detailed usage reports in CSV format. The reports contain information for one (1) selected month with daily data. You get a *.zip* folder named `usage-report-YYYY-MM` that consists of the following CSV files: * Excluded sites with names * Exports with names * Max items with names * Sites with names * Syndication frequency with names * Users with names You can download the reports only for the months starting from November 2022. To download the reports, do the following: Go to the *Usage* tab. Select the download icon UUID-3f97ce99-598d-6cdf-a31a-799d8f58dade . UUID-d48a8b54-d8c8-08ba-e2af-f091b147e454 Select the year and month for the report. UUID-93932d16-108a-29d1-74ef-dba766720dfc Select **Download**. Format the downloaded usage report [#format-the-downloaded-usage-report] If the CSV files show all data in a single cell instead of separate rows and columns, you may need to set a delimiter in the Table settings of your tool: For *Numbers* on macOS, do as follows: Select the **Table** button. Select the **Adjust Import Settings…** button. Select a comma (**,**) in **Separate Value Using**. Select **Update Table**. For *Microsoft Excel*, do as follows: Go to the **Data** tab. In **Get & Transform Data**, select **From Text/CSV**. In **Import Data**, find and select your CSV file. In **Text Import Wizard**, select **Delimited** and select **Next**. Choose a comma (**,**) or a semicolon (**;**) as a delimiter and select **Next**. Check if the preview shows all the necessary columns highlighted and select **Next**. Choose the appropriate data format for each column, such as *General*, *Text*, or *Date*, and select **Finish**. The Productsup Help Center disclaims all responsibility and accountability for the accuracy and relevance of the processes, features, UI elements, and other information mentioned in these instructions about third-party tools. The instructions aim to help you perform activities outside the Productsup platform. # Set up user profile time zone import { Callout } from "fumadocs-ui/components/callout"; Your import and export times use the time zone that you set in your user profile. Any time zone you set only affects your Productsup profile. This means you can select one time zone and see all site run times in this time zone, whilst your colleague with another time zone will see different run times for the same site. A new user sees the default European time zone set for Berlin (GMT+1). UUID-97adbd75-091b-5e0b-427b-7fc9f9151f7d Change the time zone for your user profile [#change-the-time-zone-for-your-user-profile] To choose a time zone for your user profile, select the profile icon in the top-right corner of the page from the organization, project, or site level: UUID-f17228ce-ef8a-6dda-7e5b-09bed1757e2a You can only see the *Workspaces* link leading to the [Retail platform](https://retail.productsup.com/dashboard/insights) if you have a Retail platform account. *Billing* is only available to admin users. See [Usage Data Dashboard and overage calculations](/docs/help-center/get-started/user-management/usage-data-dashboard-and-overage-calculations). Alternatively, go directly to [user profile settings](https://platform.productsup.com/profile). In your profile settings, you can use the **Timezone** drop-down menu to choose the needed time zone. UUID-c44d2633-5197-2910-cd12-90d51272cf9a Schedule a site for a specific time zone [#schedule-a-site-for-a-specific-time-zone] The default time zone for Scheduling is the time zone you have set in your user profile. But you can also select a different time zone in Scheduling. UUID-5d30e801-b3cd-68dc-ad13-e8419e67b215 See [Set up scheduling and triggering processes in Scheduling](/docs/help-center/dashboard-and-monitor/set-up-scheduling-and-triggering-processes-in-scheduling#section-idm4615619487793633569328756071) for more details about scheduling. Reporting is always in UTC [#reporting-is-always-in-utc] If you compare the reporting data with another tracking system, such as Amazon or Google Analytics, you need to use UTC. Otherwise, you are not comparing the same time ranges. The time zone for Reporting is always UTC. You can't change this. See \[component:17350]. # User types and access rights import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] There are two user types in Productsup: . Admin . User Users may have Read-Write or Read-Only access rights depending on the project or site they get access to. UUID-48fe2096-3cba-beed-357a-fa607f861db4 Admins [#admins] Admins have the right to perform all actions within an organization. This includes: * Accessing all projects and sites * Creating, changing, and deleting all projects and sites * Inviting and deleting users * Providing users with access to sites or projects * Specifying Read-Write or Read-Only access rights for users in each site or project * Changing the rights of other administrators in the organization or demoting administrators to users. Follow these steps to add new users if you are an administrator: Go to **User Management** from your organization's main menu. Select **INVITE USERS** in the top right-hand corner of the *User Management* page. Add the email address(es) of those you wish to invite. 1. You can add one email address per line to invite multiple users at once. Select if your user should have **Admin** or **User** access. 1. After making a selection, you can give them access to the appropriate sites or projects. 2. When adding sites or projects, you should define whether access should be Read-Write or Read-Only. Select **Save**. UUID-4569ba0e-e73e-8bf5-5445-a267458900bd To learn how to delete users or change user access rights, see [Set up User Management](/docs/help-center/get-started/user-management/set-up-user-management). Read-Write users [#read-write-users] A *Read-Write user* has access to the projects or sites that an administrator has made available to them only. Such users have the right to change those projects or sites as needed: * Edit site data * View and use all features on the site level * Create new sites Read-Write users don't have the right to: * Invite new users * See the list of all users in an organization * Assign additional access rights to themselves The administrator grants the required access if a user needs access to additional sites or projects. At the site level, a Read-Write user has access to these features: * **Dashboard** * **Data Map** * **Authentication** * **Data Sources** * **Data Services** * **Exports** * **Designer** * **Scheduling** * **Dataflow** * **Data View** * **Lists** * **ROI Strategy** * **Reporting** * **Error Log** * **Monitor** * **Activity** * **Tracking** * **Settings** At the project level, Read-Write users have access to: * **Overview** * **Authentication** * **Reporting** * **Reporting** * **Settings** At the organization level, Read-Write users can access only **Overview** and **Authentication**. Read-Only users [#read-only-users] A *Read-Only user* has the right to view only the sites or projects that an administrator has made available to them and can't edit anything in the platform. The administrator grants the required access if a user needs access to additional sites or projects. Read-Only users have access to a restricted list of Productsup features. At the site level, Read-Only users can access these features: * **Dashboard** * **Data Map** * **Data Services** * **Exports** * **Data View** * **Reporting** At the project level, Read-Only users have access to: * **Authentication** * **Reporting** At the organization level, Read-Only users can access only **Overview** and **Authentication**. # Set up single sign-on (SSO) import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; As an admin user, you can configure single sign-on (SSO) to let the users within your organization log in to all related applications with one set of login credentials. There are three variants of login for users in Productsup: . *Regular login* lets users log in with their Productsup credentials. This option is available to all users before you configure SSO. UUID-93d15b36-aeb2-40b9-e033-069b3a3cdd2b . *Enabled SSO* lets users log in with either Productsup or SSO credentials. This option is available when you have already enabled SSO but haven't finalized the configuration yet. You can stop the SSO configuration process on this step if you want to enable SSO in parallel with regular login. This step also lets you test your SSO before proceeding to enforced SSO. . *Enforced SSO* lets users only log in using SSO credentials. This option is available as soon as you finalized the SSO configuration process and enforced single sign-on. Once you set up enforced SSO, you can't remove it and roll back to the previous step. Contact [support@productsup.com](mailto:support@productsup.com) if you need to remove the enforced SSO settings. To log in with enforced SSO, users have two options: 1. Go to `subdomain.productsup.com` created for your organization after enabling SSO. The link redirects you to the Productsup login page with the SSO login button. Select the button to land on the Identity Provider (IdP) login page where you must provide your IdP credentials, such as Google account login and password. 2. Go to `platform.productsup.com` and enter the email associated with the Productsup account. If their account has enforced SSO, the platform redirects you to the Productsup login page with the SSO login button as described in [Option a](#N1717772494218). UUID-6cf4cc1e-a828-834b-1b00-0b831696ef65 Prerequisites [#prerequisites] To set up SSO, you need: . An account with an Identity Provider (IdP), such as Google, Microsoft, AWS, etc. . The admin access rights to your IdP account interface to set up SSO for users in your organization. . The Identity Provider (IdP) metadata file. See [Prepare the IdP metadata file](#section-idm4519154337857632442011241752). . The admin access rights in Productsup. Prepare the IdP metadata file [#prepare-the-idp-metadata-file] Identity Provider (IdP) is a service that stores and verifies user identity. To use the SSO feature in Productsup, you must upload your IdP metadata file to the platform. The Productsup platform then creates metadata information for you to share with your IdP. When the configuration is ready, Productsup, as an SSO provider, checks user identity with the IdP when users log in. For example, to learn how to get the IdP file from Microsoft Entra ID, see [Configure Microsoft Entra SSO](https://docs.microsoft.com/en-us/azure/active-directory/saas-apps/samlssoconfluence-tutorial#configure-azure-ad-sso). The IdP metadata XML file that you receive from your IdP should contain the following: * IdP or Entity ID. * Certificate. * SSO URL. * Redirect URL. The service provider metadata XML file contains: * Entity ID * Redirect URL * Logout URL * SSO Assertion Consumer Service URL Set up SSO [#set-up-sso] To set up SSO in Productsup for your organization: Select the cogwheel icon UUID-ce09c8b4-4286-bcd4-de46-a409fac3e748 at the bottom of your organization's main menu. UUID-36341eec-8c91-f393-9f7b-76e31f456174 The **Organization settings** page opens in a new tab. Select the **Single Sign-On (SSO)** tab on the left-hand side. UUID-486cbe03-77da-e31b-4c62-62c013154d81 Take the following steps: 1. [Configure single sign-on](#section-idm4631883022056034293075463896). 2. [Enable single sign-on](#section-idm4519154055641632442014087608). 3. [Test the setup](#section-idm4559435165608034293217215196). 4. [Enforce single sign-on](#section-idm4519153987779232442025574732) (optional). Configure single sign-on [#configure-single-sign-on] In this step, you need to provide you organization subdomain information: In the **Configure single sign-on** section, select **Configure**. UUID-4078a8bb-aa45-4d6e-0aa0-57f7a7b1b07d Enter your organization's subdomain name, for example, `yourcompany.productsup.com`, and select **Continue**. UUID-8bbc4ed6-0120-4a7c-154e-150d9bd20b6d Copy the **Entity ID** and **Sign on URL and Reply URL (ACS URL)** using the **Copy** buttons and paste them into your IdP's admin console. Select **Continue**. UUID-cf65b1c3-31fa-25ff-fc1a-fcdba186ba8e Drag and drop your IdP's metadata XML file or select **BROWSE** to add the file from your computer. Select **Finish**. UUID-10a450fe-effe-9e82-5e56-2641b91156cb The platform fills out the **Entity ID/Issuer** and **SSO URL** fields automatically, but your IdP's XML file must contain the Productsup *Entity ID* and *SSO URL*. You have now configured SSO. Continue with [Enable single sign-on](#section-idm4519154055641632442014087608). Enable single sign-on [#enable-single-sign-on] In this step, you can enable SSO and test it to ensure everything works correctly and all users in your organization can access the platform via SSO. In the *Enable single sing-on* section, select **Enable**. UUID-30642cd1-49f5-f3ad-9dc7-e3958c6d6881 A pop-up window appears with the following message:\*By enabling SSO, you can start testing for your organization. Testing SSO allows users in your organization to confirm if they can log in via Single Sign-on without issue.\**Note: Once you enable testing, we will use Just-In-Time (JIT) provisioning if a user attempts to log in to your Productsup organization via SSO using an email address not associated with a Productsup user. This automates user account creation with basic permissions.* UUID-6b18c80b-1850-5476-9993-7bbeaee7eccf *Just-In-Time (JIT)* is an authentication method that automates user account creation using the information from the IdP.Basic permissions are access rights given to the users who logged in with SSO. Newly-created SSO users don't have access to projects or sites until the admin provides it to them in the organization's User Management. Select **Enable** in the pop-up to turn on SSO. You have enabled SSO. Take the following steps to test it. Test the setup [#test-the-setup] Select **Copy URL** in the bottom of the *Test the setup* section. UUID-5000aeb8-7a27-7e98-fada-82e928416003 Log in using SSO. Before testing, log out of the account, use the incognito mode or another browser. If you don't want to enforce SSO for your users, you can stop here and share the copied subdomain URL with your users to let them log in via the URL. Or they can still log in using their Productsup credentials. Enforce single sign-on [#enforce-single-sign-on] Enforcing SSO enables your users to log in only via SSO, not with the Productsup credentials. Ensure the user accounts are compatible with your SSO Identity Provider. For example, their registered platform emails must match the SSO IdP, such as an Outlook email address matches the Outlook IdP. If you invite users to an additional organization that isn't SSO enforced, they may still log in via an email and a password. Once you enforce SSO, you can't remove the enforced SSO configuration. Contact [support@productsup.com](mailto:support@productsup.com) if you need to remove the enforced SSO settings. Now you can only enforce SSO for the emails with specific domain names: In **Domain name**, enter one or multiple domain names separating them with `##`. UUID-f8edaf96-34fb-e782-352d-d17cfa93b0dd Select **I have tested the SSO, and I'm ready to enforce it now**. This checkbox activates the **Enforce** button. Select **Enforce** in the top right corner. In the pop-up, enter the same organization's subdomain name that you entered in the step [Test the setup](#section-idm4559435165608034293217215196). Select **Enforce** to confirm the SSO enforcement. UUID-113fc464-1307-73d6-882b-e5dce05a2e41 You have now turned on SSO for users in your organization. # Set up user profile import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Personalize your Productsup user profile settings, such as your name, email, password, job title, country, timezone, and language. In profile settings, you can also enable two-factor authentication (2FA). Access your user profile settings [#access-your-user-profile-settings] To access user profile settings, select the profile icon in the top-right corner of the page from the organization, project, or site level. Alternatively, go directly to [user profile settings](https://platform.productsup.com/profile). UUID-f17228ce-ef8a-6dda-7e5b-09bed1757e2a You can only see the *Workspaces* link leading to the [Retail platform](https://retail.productsup.com/dashboard/insights) if you have a Retail platform account. *Billing* is only available to admin users. See [Usage Data Dashboard and overage calculations](/docs/help-center/get-started/user-management/usage-data-dashboard-and-overage-calculations). Change your profile name and email [#change-your-profile-name-and-email] You can change your profile name and email in profile settings. However, if your email is the main email registered for your organization, you can't change it in your profile settings. Contact [support@productsup.com](mailto:support@productsup.com) to change the main email registered in Productsup for your organization. To change your name and email: Go to *Profile settings* from your user profile icon in the top-right corner of the page. Enter your name and email in **Full Name** and **Your email**. UUID-055d6151-e776-a8b7-d1bf-573234992d4a Select **Save**. If you have updated your email, go to your inbox to confirm the new email address. Change your password [#change-your-password] You can change your password in the user profile settings. Go to *Profile settings* from your user profile icon in the top-right corner of the page. Select **Change** near the **Current password** field to open the *CHANGE PASSWORD* window. Enter your existing password in **Current password**. UUID-d247843e-91e8-d740-6de0-a9ac33c9ee22 Add a new password that meets platform requirements in **New password** and repeat it in **Confirm new password**. Your password must contain at least 12 characters, 1 number, both lower- and uppercase letters, and 1 special character, such as `#`, `?`, `!` and so on. Select **Save**. Enter job title, location, and timezone [#enter-job-title-location-and-timezone] Enter your job title, location, and timezone to better identify your professional role and place within your organization. Go to *Profile settings* from your user profile icon in the top-right corner of the page and enter your position in **Job title**. UUID-6a573734-75df-3553-ea91-2d7ffa632cb9 Select your location in **Country** and choose a suitable option in **Timezone**. Select **Save**. See [Set up user profile time zone](/docs/help-center/get-started/user-management/set-up-user-profile-time-zone) for more information. Change the platform language [#change-the-platform-language] You can use the Productsup platform in English, German, or French. To choose the needed language option, do the following: Go to *Profile settings* from your user profile icon in the top-right corner of the page. In **Language**, select the desired language. UUID-0eb105e6-1517-8430-6521-d18e241b5fe2 Select **Save**. Use two-factor authentication (2FA) [#use-two-factor-authentication-2fa] You can set two-factor authentication (2FA) as a login standard for your organization. Go to *Profile settings* from your user profile icon in the top-right corner of the page. Use the toggle **Enable two factor authentication** to start the setup and select **Save**. UUID-087c4a64-3985-8816-394e-4dea3e95bea0 When the platform saves your new settings, you see the following pop-up window. Select **Continue** to proceed. UUID-90954c66-4913-7308-8293-558aa8f87d8c On the login page, enter your email and password to see 2FA instructions.Follow the instructions on the page *Mobile Authenticator Setup* to install an authenticator app and add a device. You can use the following apps: * Google Authenticator * FreeOTP * Microsoft Authenticator UUID-6474abfd-97ce-4ca7-6eec-b62a7d15becf Enter a code from your authenticator app in **One-time code**. You will need to enter authentication codes in this field every time when logging in. When logging in, use the last added code in your authenticator app called `Productsup: {your-address@email.com}`. If you have used 2FA with Productsup previously, you may have multiple codes with this name in the app. All previously added codes are no longer relevant. If desired, provide a name for your authentication device in **Device Name**. Select **Submit**. Changed phones? [#changed-phones] If you change your mobile device, you can turn two-factor authentication off to disconnect the old device and save the settings. Then, reactivate 2FA and connect your new device by following the previously mentioned steps. Lost your phone? [#lost-your-phone] If you don't have access to your 2FA device anymore, contact [support@productsup.com](mailto:support@productsup.com). # Remove duplicate products with the Unique Rows Filter service import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] If you need to remove duplicate rows from the Productsup Platform, you can use the unique rows filter service. You can define which attribute to check for uniqueness. You may also consider skipping unique values directly in an export feed. Ensure you have set a [unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) to use this service. Add the Unique Rows Filter service [#add-the-unique-rows-filter-service] To add the Unique Rows Filter service: Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Then choose *Unique Rows Filter*, and select **Add**. UUID-279518ad-84d1-39f6-48f6-5d4372845774 (Optional) In **Name**, give the new service a custom name. (Optional) Define a custom column prefix in **Column prefix**. The platform uses a column prefix when a service generates multiple columns from one service and needs a common prefix for all new columns. The *Unique Rows Filter* service is only available on the import level for the **Service Data Level** function. Select **Add**. In **Uniqueness Column**, select the column you wish to filter for uniqueness in the drop-down list. In **Occurrence**, choose **first** or **last** value occurrences from the selected *Uniqueness Column* you want to keep in your import feed. The platform removes other occurrences during the import process. Select **Save**. UUID-fb04bd0f-1708-dc84-870b-a34d95d5f8a5 For example, you can use the Unique Rows Filter service for the following scenario. This scenario imports the first occurrence of every ID and removes all duplicates. | id | title | stock | | --- | ---------------------------- | ----- | | `1` | `Amazing Shoes` | `4` | | `1` | `Amazing Shoes in blue` | `4` | | `2` | `Great Jeans` | `1` | | `3` | `Wonderful T-Shirt` | `5` | | `3` | `Wonderful T-Shirt in green` | `4` | In the previous configuration, the uniqueness column is `title`, and the selected occurrence is *first*. Here are the results: | id | title | stock | | --- | ------------------- | ----- | | `1` | `Amazing Shoes` | `4` | | `2` | `Great Jeans` | `1` | | `3` | `Wonderful T-Shirt` | `5` | Edit an existing Unique Rows Filter service [#edit-an-existing-unique-rows-filter-service] To edit settings for your Unique Rows Filter service: Go to **Data Services** from your site's main menu. Choose the *Unique Rows Filter* data service and select the settings cogwheel icon (**⚙**). Delete an existing Unique Rows Filter service [#delete-an-existing-unique-rows-filter-service] To delete your Unique Rows Filter service: Go to **Data Services** from your site's main menu. Choose the *Unique Rows Filter* data service and select the settings cogwheel icon (**⚙**). Scroll to the bottom of the page and select **Remove this service**. # Split one column into multiple columns with the Explode Columns service import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] If your data feed contains a column with a list of values, you can split the column into multiple columns using the Explode Columns data service. For example, you have the following data at the import stage and wish to split the `color` column: | id | color | | -- | ----------------------- | | 1 | `red`, `green`, `blue` | | 2 | `gray`, `black`, `blue` | After applying the Explode Columns data service, your output may look similar to the following: | id | color\_1 | color\_2 | color\_3 | | -- | -------- | -------- | -------- | | 1 | `red` | `green` | `blue` | | 2 | `gray` | `black` | `blue` | The Explode Columns data service is available for the import and intermediate stages. Prerequisites [#prerequisites] To set up the Explode Columns data service, you need: . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. . A column in your feed that contains a list of values separated by a delimiter. Add the Explode Columns data service [#add-the-explode-columns-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Explode Columns*, select **Add**, and give it a desired name and column prefix.By default, `___exploded` is the column prefix. UUID-649638ef-a14e-0b2f-d793-4adf95bdac9e Choose the stage containing the columns you want to split in **Service Data Level** and select **Add**. Select the column you want to split from the drop-down list **Column that will be split into multiple columns**. If you choose **Import** in **Service Data Level** in [see the relevant section](#N1676387000216), the drop-down list **Columns that will be split into multiple columns** displays the columns of your import stage. If you choose **Intermediate**, the drop-down list contains your intermediate-stage columns. In **Delimiter**, select the delimiter that separates the values in the column you want to split. Select **Save**. UUID-223f0513-6110-0eda-7dab-03eff9f1da18 Repeat steps starting with [see the relevant section](#N1676387043550) if you want to split more columns with the Explode Columns data service. The platform shows all exploded columns in a table at the bottom of the data service setup page. UUID-7cb74901-8654-d2be-d6b7-e48625c45636 For the platform to process a new data service, select **Run** in the top-right corner of your site's view. Edit the Explode Columns service [#edit-the-explode-columns-service] Go to **Data Services** from your site's main menu. Search for your data service. Select the cogwheel icon (**⚙**) next to the desired data service to edit settings. Select **Save**. Delete the Explode Columns service [#delete-the-explode-columns-service] Go to **Data Services** from your site's main menu. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Restructure your import data with the Pivot Layout data service import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] If your data feed has multiple rows representing attributes for the same product, you may need to reorganize your product attributes into columns to do attribute mapping in Dataflow properly. The Pivot Layout data service is available for the import stage only. The Pivot Layout data service scans the column containing your attribute names, creates a new column for each attribute, and sets the value in that column as stated in your value column. As a result, each product in your feed appears only once as a single row: UUID-24c37b2d-57bd-2d70-a767-60748514c309 In the example above, only one column identifies each product, *id*. The Pivot Layout data service can also work with multiple columns that uniquely identify products. The benefits of using the Pivot Layout data service are as follows: * The new attribute columns are instantly available in Dataflow, and you can map them to your intermediate and export stages. * You don't need to transform your import files manually to represent data in the format required by your export channels. * You can apply lists on the data service setup page to let the platform change the attribute names and values in bulk according to a necessary taxonomy. Prerequisites [#prerequisites] To use the Pivot Layout data service, you need to: . Import your data into a Productsup site. . Make sure your imported data has product-identifying columns, a column containing attribute names, and a column containing values corresponding to those attributes. Add the Pivot Layout data service [#add-the-pivot-layout-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Pivot Layout*, select **Add**, and give it a desired name. UUID-2ba9757a-b898-d858-f814-e2005c4e942a Choose *Import* in **Service Data Level** and select **Add**. In **Rows**, choose the columns that uniquely identify your products. You can select multiple columns. The order of the selected columns influences the order of rows in your feed. In **Attribute name column**, choose the column that contains the names of your product attributes. The platform scans this column to create a new column for each attribute name. Optionally, use the drop-down menu **Attribute name mapping list (optional)** to choose a list created in *Lists* if you need to change your current attribute names in bulk.See [Lists](/docs/help-center/map-and-optimize-your-data/lists) to create and set up a taxonomy mapping or replacement list. In **Attribute values column**, choose the column that contains the values of your product attributes. The platform scans this column to fill the cells of the new attribute columns with their corresponding values for each unique product. Optionally, use the drop-down menu **Attribute values mapping list (optional)** to choose a list created in *Lists* if you need to change your current attribute values in bulk.See [Lists](/docs/help-center/map-and-optimize-your-data/lists) to create and set up a taxonomy mapping or replacement list. Select **Save**. For the platform to process a new data service, select **Import** or **Run** in the top-right corner of your site's view\.As soon as the site finishes processing your data, you can see the new structure of your data at the import stage in Data View and Dataflow. If you can't see the columns the Pivot Layout data service added to your feed in Data View, ensure the platform hasn't hidden them: Go to **Data View** from your site's main menu and choose *Import* in the drop-down list on your left. Select the menu icon on the right and then select the eye icon. Find the hidden attributes in the list and select the eye icon next to each attribute you want Data View to display. Close the pop-up menu. If your data feed has more columns than you defined in the data service setup fields **Rows**, **Attribute name column**, and **Attribute values column**, the platform removes these columns from your restructured feed. To see warnings about column deletion, you can open the Run log panel by selecting its icon in the top-right corner of your view while the site is running. UUID-561c2268-3fb6-38ad-f690-b69e67011557 Edit the Pivot Layout data service [#edit-the-pivot-layout-data-service] After saving the setup of the Pivot Layout data service, you can only edit the lists used for replacing your attribute names and values. If your newly selected list has a different set of attributes, the platform adds new columns for new attributes and deletes the columns of the attributes that aren't on the list anymore. Any changes in the lists affect the columns after each site run. The fields **Rows**, **Attribute name column**, and **Attribute values column** are non-editable. If you need to edit these fields in a data service you already saved, you should delete the current data service, run the platform to reset the imported data, and create a new data service. See [Delete the Pivot Layout data service](#section-idm243319908032630). To edit the Pivot Layout data service: Go to **Data Services** from your site's main menu. Search for your data service. Select the cogwheel icon (**⚙**) next to the desired data service and choose the needed lists. Select **Save**. For the platform to process an edited data service, select **Import** or **Run** in the top-right corner of your site's view. Delete the Pivot Layout data service [#delete-the-pivot-layout-data-service] Go to **Data Services** from your site's main menu. To stop a data service from restructuring your feed without deleting the data service itself, you can choose the pause icon next to the desired data service. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Split parent items to create product variants with the Split Variants data service import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] If a product attribute in your feed contains all product variants, such as sizes or colors, in one (1) row, you can split these product variants into separate rows using the Split Variants data service. The Split Variants data service is only available for the import stage. For example, the following feed contains the *size* attribute that stores all sizes of each product in the same row, separated by a comma: | parent\_id | size | title | | ---------- | ------ | ---------- | | 1 | XS,S,L | t-shirt | | 2 | XS,M | polo shirt | After applying the Split Variants data source with the **Mutliply Variants** mode, each size takes a separate row, and the feed looks as follows: | parent\_id | size | title | | ---------- | ---- | ---------- | | 1 | XS | t-shirt | | 1 | S | t-shirt | | 1 | L | t-shirt | | 2 | XS | polo shirt | | 2 | M | polo shirt | The Split Variants data service creates more rows in your feed, increasing the number of imported and maintained products. This service is the opposite of the Merge Variants data service. See [Combine product variants into one parent item with the Merge Variants data service](/docs/help-center/map-and-optimize-your-data/data-services/combine-product-variants-into-one-parent-item-with-the-merge). Prerequisites [#prerequisites] To set up the Split Variants data service, you need: . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier). . Products in your feed that contain variants in one of their attributes. Add the Split Variants data service [#add-the-split-variants-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Split Variants* and select **Add**. UUID-5bdc9edf-6007-a034-8ed3-522d0e2feb66 Give the service a desired name and column prefix, and select **Add**. By default, `___service_split` is the column prefix. Select **Add Split Column**. Select the column that you want to split in **Source Columns**. The source column is typically the *parent\_id* or the *item\_group\_id* attribute. In **Delimiter**, enter the character that currently separates the values in the source column. In **Split mode**, select from one of the options. See [Set up split modes](#section-idm4589942687297633671130114533) for more information. Select **Save**. UUID-eeb1a757-140b-3ac9-08f9-defabf5dc8a0 To run the data service, select **Import** in the top-right corner of your site's view. Set up split modes [#set-up-split-modes] You can select from three (3) different modes to split your product variants: * **Multiply Variants** mode creates separate rows for each product variant. * **Aggregate Variants** mode creates separate rows for each product variant combining values from different columns according to their position in a row. * **Static Variants** appends and/or prepends static strings to the attribute values creating a new row for each added variant. Multiply Variants split mode [#multiply-variants-split-mode] The Multiply Variants split mode lets you select one (1) or more source attributes to split them into new rows with all possible combinations of product variants. For example, you have the following feed: | id | size | color | | --- | ----- | -------- | | 123 | S,M,L | blue,red | To split product variants of products by sizes and colors into separate rows, use the following setup: . Select **Add Split Column**. . Select `size` and `color` in **Source Columns** and enter a comma (`,`) in **Delimiter**. Using Multiple Variants, you must add one (1) or several columns in **Source Columns**. . Select **Multiply Variants** in **Split mode**. UUID-dfc2c564-d52f-4835-25cf-0f7186871c2a . Select **Import** in the top-right corner of your site's view to let the platform split the product variants into separate rows as follows: | id | size | color | | --- | ---- | ----- | | 123 | S | red | | 123 | M | red | | 123 | L | red | | 123 | S | blue | | 123 | M | blue | | 123 | L | blue | Aggregate Variants split mode [#aggregate-variants-split-mode] The Aggregate Variants split mode lets you split two (2) or more columns into separate product variant rows combining values by their position in the source columns. For example, you have the following feed: | id | country | food | | --- | ----------------------------- | ---------------------- | | 123 | France,Germany,United Kingdom | cheese,sausage,pudding | To split variants of products into separate rows where each row contains a country and its corresponding food, use the following setup: . Select **Add Split Column**. . Select `country` and `food` in **Source Columns** and enter a comma (`,`) in **Delimiter**. Using Aggregate Variants, you must add at least two (2) columns in **Source Columns**. . Select **Aggregate Variants** in **Split mode**. UUID-d9c83afc-5af5-bd60-b91c-49f27c8563de . Select **Import** in the top-right corner of your site's view to let the platform split the product variants into separate rows as follows: | id | size | color | | --- | -------------- | ------- | | 123 | France | cheese | | 123 | Germany | sausage | | 123 | United Kingdom | pudding | Static Variants split mode [#static-variants-split-mode] The Static Variants split mode lets you append and/or prepend static variants to the attribute values creating a new row for each variant. For example, you have the following feed: | id | title | | --- | ---------------------- | | 123 | My product is the best | To append the static variants `Alpha`, `Bravo`, and `Charlie` to the *title* attribute, use the following setup: . Select **Add Split Column**. . Select `title` in **Source Columns**. The Static Variants split mode is only available if you select one (1) column in **Source Columns**. . Select **Static Variants** in **Split mode**. UUID-d9c83afc-5af5-bd60-b91c-49f27c8563de . Enter variants separated by a comma in **Comma separated list of variants**. . In **Variant Format**, enter how you want the data service to add your variants to the attribute. By default, the value is `{{ value }} {{ variant }}`, which means that your variant appears after the title value. . Select **Save**. UUID-bf4da1b1-b85b-e4b7-757f-d24a700fa562 . Select **Import** in the top-right corner of your site's view to let the platform split the product variants into separate rows as follows: | id | title | | --- | ------------------------------ | | 123 | My product is the best Alpha | | 123 | My product is the best Bravo | | 123 | My product is the best Charlie | Edit the Split Variants data service [#edit-the-split-variants-data-service] Go to **Data Services** from your site's main menu. Search for your data service. Select the cogwheel icon (**⚙**) next to the desired data service to edit settings. Select **Save**. Delete the Split Variants data service [#delete-the-split-variants-data-service] Go to **Data Services** from your site's main menu. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Data Services import { Callout } from "fumadocs-ui/components/callout"; Introduction [#introduction] A Productsup data service is a tool that lets you enhance and restructure your product feed using the Data Services feature. This section covers the data services that let you restructure and optimize your product data. See [Enhance your import data through Data Services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services) for more information on the data services that help to enhance your product feed with additional data. Some data services are available at an additional cost in all platform editions. If you are unsure whether the desired data service is free, reach out to your Customer Success Manager or contact [support@productsup.com](mailto:support@productsup.com). All Productsup data services fall into one of the following categories: * *ID Generators* - Enhance your products with columns containing unique product or category IDs. * *Crawlers* - Let you crawl your product or image links to extract additional product data or image properties and add them to your site. * *Merge/Split Feed* - Let you manage product variants by splitting a product into multiple product variants or merging multiple product variants into one product. * *Implode/Explode/Group Columns* - Let you manage your columns by merging and splitting them. They also help you manipulate your column values to enhance the feed with more data. * *Exclude Rows from Import* - Remove duplicate products from your feed based on product IDs. * *Travel Services* - Enrich your feed with geographical data and information related to weather and travel. * *Pricing* - Let you add price comparison data to your feed. * *AI Services* - Use machine learning to transform or enrich your data by, for example, removing image backgrounds or detecting image colors. Prerequisites [#prerequisites] All data services require you to: * Add a unique item identifier in your site. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. The rest of the prerequisites are individual to each data service. You can see the relevant prerequisites in a document dedicated to the data service of your interest. See [Arrange the processing order of your data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services#section-idm4653092417062433346529892231) to set up the order according to which Productsup should execute your data services. # Group data across multiple rows with the Group Attributes data service import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; The *Group Attributes* data service lets you create a new attribute in your site to group values from a chosen attribute for all products that have the same value in a grouping attribute. For example, for all products in your site that have the same value in the grouping attribute **id**, you can create a new attribute **\_\_\_grouped** and populate it in the following ways: * Add all values of a chosen attribute. See [Concat method](#N1684769874080). * Count values of a chosen attribute and output the result. See [Count method](#N1684769892570). * Identify and save the highest or lowest value in a chosen attribute. See [Max and Min methods](#N1684769951508). * Produce a sum of all values of a chosen attribute. See [Sum method](#N1684769929250). The service works based on the SQL function `GROUP BY`. See [SQL Tutorial](http://www.sql-tutorial.net/sql-group-by.asp) for more information. The *Group Attributes* data service is available for the import and intermediate stages. Prerequisites [#prerequisites] To set up the *Group Attributes* data service, you need: . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. Add the Group Attributes data service [#add-the-group-attributes-data-service] Go to **Data Services** from your site's main menu and select **Add Service**. Search for *Group Attributes*, select **Add**, and rename the data service as desired. UUID-0a06923f-3904-fb5d-bf2c-e5dc5ec70103 Choose the stage containing the attributes you want to group in **Service Data Level** and select **Add**. This takes you to the data service setup: UUID-ec7d6652-352c-2151-3020-7c274ba14c15 Select the attribute containing the values you wish to group from the drop-down menu **Attribute containing the values**. If you choose **Import** in **Service Data Level** in [see the relevant section](#step-idm351683120570619), the drop-down menu **Attribute containing the values** displays the attributes of your import stage. If you choose **Intermediate**, the drop-down menu shows your intermediate-stage attributes. In the drop-down menu **Import attribute you want to group by**, select the import-stage attribute which should determine your value-grouping range. If multiple products have the same value in this grouping attribute, the data service analyzes the values of these products in the attribute chosen in [see the relevant section](#step-idm353366241141236) and groups the values of these products in a newly-created attribute named in [see the relevant section](#N1739875634135) by performing the action chosen in [see the relevant section](#N1739875407524)To choose several grouping attributes, hold the *CTRL* (or *CMD*) key while selecting.In **Import attribute you want to group by**, you can't choose an attribute that contains only empty values. If you do so and try to save the data service setup, the platform shows an error and prompts you to change your attribute selection: UUID-8ff2eacb-577c-86a4-c872-52d1d4e6687a Enter the desired name of the new attribute in **Result attribute**.The system creates a new attribute to store the grouped data without overwriting your existing attributes. The platform prepends the attribute name specified in this field with the prefix you set in [see the relevant section](#N1683194128497). Select the grouping method from the **Method** drop-down menu. For the Concat method only: In **Delimeter**, select the delimiter that separates the grouped values in the new attribute. Activate **Concat unique** if you don't want to display duplicate values. Select **Save**. For the platform to process a new data service, select **Run** in the top-right corner of your site's view. Output examples of different grouping methods [#output-examples-of-different-grouping-methods] While setting up the data service, you can select from five different data-grouping methods in the **Method** drop-down menu: * *Concat* * *Count* * *Max* * *Min* * *Sum* Here is a sample feed we can use to show how each grouping method works: | id | item\_group\_id | stock | size | color | discount\_in\_percent | | -- | --------------- | ----- | ---- | ----- | --------------------- | | 1 | 123 | 4 | S | red | 10 | | 2 | 123 | 2 | S | blue | 15 | | 3 | 123 | 1 | L | blue | 25 | | 4 | 456 | 5 | 38 | black | 7 | | 5 | 456 | 4 | 38 | blue | 15 | | 6 | 456 | 7 | 38 | green | 5 | | 7 | 456 | 2 | 40 | green | 10 | Concat method [#concat-method] Use the **Concat** method to combine all values from different products in one attribute. Example: To concat sizes for products with the same **item\_group\_id**, use the following setup: * **Attribute containing the values**: `size` * **Import attribute you want to group by**: `item_group_id` * **Result attribute**: `concat_sizes` * **Method**: *Concat* * **Delimiter**: *,COMMA* * **Concat unique**: off Using this setup, the system groups all sizes of the products with the same **item\_group\_id** in a newly created **\_\_\_concat\_sizes** attribute: | id | item\_group\_id | stock | size | color | discount\_in\_percent | \_\_\_concat\_sizes | | -- | --------------- | ----- | ---- | ----- | --------------------- | ------------------- | | 1 | 123 | 4 | S | red | 10 | S,S,L | | 2 | 123 | 2 | S | blue | 15 | S,S,L | | 3 | 123 | 1 | L | blue | 25 | S,S,L | | 4 | 456 | 5 | 38 | black | 7 | 38,38,38,40 | | 5 | 456 | 4 | 38 | blue | 15 | 38,38,38,40 | | 6 | 456 | 7 | 38 | green | 5 | 38,38,38,40 | | 7 | 456 | 2 | 40 | green | 10 | 38,38,38,40 | The system combines the data without any spaces between characters. Count method [#count-method] Use the **Count** method to count the number of product variations. Example: To count the number of product variations with the same **item\_group\_id**, use the following setup: * **Attribute containing the values**: `item_group_id` * **Import attribute you want to group by**: `item_group_id` * **Result attribute**: `count_variations` * **Method**: *Count* Using this setup, the system counts all product variations with the same **item\_group\_id** and records the result in a newly created **\_\_\_count\_variations** attribute: | id | item\_group\_id | stock | size | color | discount\_in\_percent | \_\_\_count\_variations | | -- | --------------- | ----- | ---- | ----- | --------------------- | ----------------------- | | 1 | 123 | 4 | S | red | 10 | 3 | | 2 | 123 | 2 | S | blue | 15 | 3 | | 3 | 123 | 1 | L | blue | 25 | 3 | | 4 | 456 | 5 | 38 | black | 7 | 4 | | 5 | 456 | 4 | 38 | blue | 15 | 4 | | 6 | 456 | 7 | 38 | green | 5 | 4 | | 7 | 456 | 2 | 40 | green | 10 | 4 | Max and Min methods [#max-and-min-methods] Use the **Max** or **Min** methods to find and display the highest or lowest value. Example: To return the highest discount among all products with the same **item\_group\_id**, use the following setup: * **Attribute containing the values**: `discount_in_percent` * **Import attribute you want to group by**: `item_group_id` * **Result attribute**: `max_discount` * **Method**: *Max* Using this setup, the system compares discounts of all products with the same **item\_group\_id** and records the highest value in a newly created **\_\_\_max\_discount** attribute: | id | item\_group\_id | stock | size | color | discount\_in\_percent | \_\_\_max\_discount | | -- | --------------- | ----- | ---- | ----- | --------------------- | ------------------- | | 1 | 123 | 4 | S | red | 10 | 25 | | 2 | 123 | 2 | S | blue | 15 | 25 | | 3 | 123 | 1 | L | blue | 25 | 25 | | 4 | 456 | 5 | 38 | black | 7 | 15 | | 5 | 456 | 4 | 38 | blue | 15 | 15 | | 6 | 456 | 7 | 38 | green | 5 | 15 | | 7 | 456 | 2 | 40 | green | 10 | 15 | Sum method [#sum-method] Use the **Sum** method to return the numerical sum of products matching the selected conditions. Example: To sum the stock for products with the same **item\_group\_id** and **color**, use the following setup: * **Attribute containing the values**: `stock` * **Import attribute you want to group by**: `item_group_id` and `color` * **Result attribute**: `stock_sum` * **Method**: *Sum* Using this setup, the system sums the values of all products with the same **item\_group\_id** and **color** and records the numbers in a newly created **\_\_\_stock\_sum** attribute: | id | item\_group\_id | stock | size | color | discount\_in\_percent | \_\_\_stock\_sum | | -- | --------------- | ----- | ---- | ----- | --------------------- | ---------------- | | 1 | 123 | 4 | S | red | 10 | 4 | | 2 | 123 | 2 | S | blue | 15 | 3 | | 3 | 123 | 1 | L | blue | 25 | 3 | | 4 | 456 | 5 | 38 | black | 7 | 5 | | 5 | 456 | 4 | 38 | blue | 15 | 4 | | 6 | 456 | 7 | 38 | green | 5 | 9 | | 7 | 456 | 2 | 40 | green | 10 | 9 | Edit the Group Attributes data service [#edit-the-group-attributes-data-service] Go to **Data Services** from your site's main menu. Change the settings of the needed data service: 1. To deactivate a data service, choose the pause icon next to the desired data service. 2. Select the cogwheel icon (**⚙**) next to the desired data service to edit other settings and select **Save**. Delete the Group Attributes data service [#delete-the-group-attributes-data-service] Go to **Data Services** from your site's main menu. To stop a data service from affecting your feed without deleting the data service itself, you can choose the pause icon next to the desired data service. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Merge multiple columns with the Implode Columns service import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] If you wish to unite multiple columns with corresponding values into one column, you can merge these columns using the Implode Columns data service. For example, you can merge the varying color columns in the following data source: | id | color\_1 | color\_2 | color\_3 | | --- | -------- | -------- | -------- | | `1` | `red` | `green` | `blue` | | `2` | `gray` | `black` | `blue` | After applying the Implode Columns data service, your data may look similar to the following: | id | color\_1 | color\_2 | color\_3 | \_\_\_imploded\_all\_colors | | --- | -------- | -------- | -------- | --------------------------- | | `1` | `red` | `green` | `blue` | `red,green,blue` | | `2` | `gray` | `black` | `blue` | `gray,black,blue` | The Implode Columns data service is available for the import and intermediate stages. Prerequisites [#prerequisites] To set up the Implode Columns data service, you need: . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. . A number of relevant columns in your feed that you want to merge. Add the Implode Columns data service [#add-the-implode-columns-data-service] Go to **Data Services** from your site's main menu, and select **Add data service**. Search for *Implode Columns*, select **Add**, and give it a desired name and column prefix.By default, `___imploded` is the column prefix. UUID-0532cd10-bc89-b805-620f-963255af84af Choose the stage containing the columns you want to merge in **Service Data Level** and select **Add**. Select the columns you want to implode from the **Columns that you want to use as input** drop-down list or write the column names directly into the input text field.If you chose **Import** in [see the relevant section](#step-idm243349476307592), the drop-down list **Columns that you want to use as input** displays the columns of your import stage. If you chose **Intermediate** in that field, the drop-down list contains your intermediate-stage columns. * Alternatively, you can check the **Use regex** box and enter a valid PHP regex into the input text field. See [Rule box category Use regular expressions](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-use-regular-expressions) and [Pattern Syntax](https://www.php.net/manual/en/reference.pcre.pattern.syntax.php) for more information. In the field **Column that will be created and populated with the selected columns above**, enter a name for your merged output column. The platform uses the column prefix and the name you specify in this step to produce the full name of the new column. For example, if you use the default column prefix `___imploded` and the output column name is `all_colors`, the full name of the new imploded column is `___imploded_all_colors`. In **Delimiter**, select the delimiter that separates the values of different columns once you merge them.You can choose from a list of popular delimiters or enter a custom delimiter in the input text field that appears after selecting **Custom**. Select **Save**. For the platform to process a new data service, select **Import** or **Run** in the top-right corner of your site's view. If you can't see the columns that the Implode Columns data service added to your feed in Data View, ensure the platform hasn't hidden them: Go to **Data View** from your site's main menu and choose the relevant stage or export in the drop-down list on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the custom prefix `___imploded` and select the eye icon next to each attribute you want Data View to display. Close the pop-up menu. The naming of the attributes created by the Implode Columns data service depends on the column prefix you chose in [see the relevant section](#step-idm243349476184336). The attribute names the data service generates always start with three underscores (`___`), which means the platform doesn't send those attributes to your export channels. You can add multiple instances of this data service by repeating these steps. The platform shows all imploded columns and their source columns in a table at the bottom of the data service setup page. UUID-7504ff24-18d3-ffdd-8305-98246c6271ba Edit the Implode Columns data service [#edit-the-implode-columns-data-service] Go to **Data Services** from your site's main menu. Search for your data service. Select the cogwheel icon (**⚙**) next to the desired data service to edit settings. Select **Save**. Delete the Implode Columns data service [#delete-the-implode-columns-data-service] Go to **Data Services** from your site's main menu. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Combine product variants into one parent item with the Merge Variants data service import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; The *Merge Variants* data service lets you combine all attribute values of all product variants with the same ID into one item. Alternatively, you can use any attribute other than an ID as a basis to merge your product variants. The *Merge Variants* data service is available for the import stage only. For example, if you have product variants in your data feed, it may look similar to this: | **product\_id** | **variant\_id** | **size** | **color** | **discount\_code** | | --------------- | --------------- | -------- | --------- | ------------------ | | *1* | *1-1* | *XS* | *green* | | | *1* | *1-2* | *S* | *green* | *SALE20* | | *1* | *1-3* | *L* | *blue* | | | *2* | *2-1* | *XS* | *red* | | | *2* | *2-2* | *M* | *yellow* | | You can merge all product variants with the same value in the **product\_id** attribute. This means that, instead of several product variants with the same product ID, you create one item in your feed and combine attribute values for all relevant product variants. After applying the *Merge Variants* data service, your feed can look as follows: | **product\_id** | **variant\_id** | **size** | **color** | **discount\_code** | | --------------- | --------------- | -------- | ------------ | ------------------ | | *1* | `1-1,1-2,1-3` | `XS,S,L` | `green,blue` | `,SALE20,` | | *2* | `2-1,2-2` | `XS,M` | `red,yellow` | `,` | This example illustrates removing duplicate values for each merged attribute. You can also keep them in your merged values. Prerequisites [#prerequisites] To set up the *Merge Variants* data service, you need: . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. Add the Merge Variants data service [#add-the-merge-variants-data-service] Go to **Data Services** from your site's main menu and select **Add Service**. Search for *Merge Variants*, select **Add**, and rename the data service as desired. UUID-4d830efd-513c-d31f-8ec2-960bf87ab9c3 Select **Add** to go to the data service setup page: UUID-d6888636-28b1-e7eb-f986-564f6a182b9b Select **Add Merge Column** to open a pop-up window. In the drop-down menu **Source Columns**, select the import-stage attribute that should be the basis for merging your product variants.In **Source Columns**, you can't choose an attribute if 100% of its values are empty. If you do so and try to save the data service setup, the platform shows an error and prompts you to change your attribute selection: UUID-a0dbc398-9ac4-548a-1fe3-d099f057fa03 In **Delimeter**, select the delimiter that should separate your combined values in the merged attributes. If you don't select a delimiter, the platform merges values without separating them with any characters. Select **Add** to close the pop-up window and return to the data service setup page. If you don't want to display duplicate values in the merged attributes, leave **Concat unique** checked. Uncheck this box to keep duplicates in the merged attributes. For the platform to process the new data service, select **Import** in the top-right corner of your site's view. Edit the Merge Variants data service [#edit-the-merge-variants-data-service] Go to **Data Services** from your site's main menu. Change the settings of the needed data service: 1. To deactivate a data service, choose the pause icon next to the desired data service. 2. Select the cogwheel icon (**⚙**) next to the desired data service to edit other settings. Delete the Merge Variants data service [#delete-the-merge-variants-data-service] Go to **Data Services** from your site's main menu. To stop a data service from affecting your feed without deleting the data service itself, you can choose the pause icon next to the desired data service. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Information security and data protection import { Callout } from "fumadocs-ui/components/callout"; At Productsup, customer data confidentiality and the service's reliability are essential. Productsup is committed to a comprehensive company-wide information security program and continues to participate in independent external security validations, such as being certified according to ISO/IEC 27001. Authentication [#authentication] With SAML 2.0-based single sign-on (SSO), we allow our customers to access our service through an identity provider (IDP) of their choice. Our platform has strict requirements for password complexity and uses two-factor authentication (2FA) to provide an extra layer of security. Data Centers [#data-centers] Our servers are hosted at state-of-the-art data center parks that provide excellent and environmentally friendly infrastructure. These data centers meet strict safety requirements and hold certifications such as ISO/IEC 27001. Our cloud hosting provider is also certified for various security and privacy standards, including ISO 27001, ISO 27017, ISO 27018, SOC1, SOC2, and SOC3. DDoS Protection [#ddos-protection] Our hosting provider's automated DDoS protection system recognizes almost all attack patterns in advance, allowing it to block attacks and thwart most of them effectively. It uses the latest hardware appliances and sophisticated perimeter security technologies, providing first-rate protection against large-scale DDoS attacks. Incident Response [#incident-response] We have established policies and procedures for responding to potential security incidents. Our dedicated incident response team manages all security incidents. In the event of an incident, affected customers will be informed and quickly updated by our support team while our teams fix the issue. In addition, the operational status of our platform components is always available for our customers under [https://status.productsup.io/](https://status.productsup.io/). Privacy [#privacy] Fulfilling our data privacy and security commitments is essential to us. Therefore, we have ensured that our processes, data processing agreements (DPAs), and other protections in place comply with GDPR requirements. Our compliance with GDPR requirements is regularly audited through our external DPO Nils Möllers (Keyed GmbH). Reliability [#reliability] To ensure the safety of our customers' data, we perform incremental backups every hour and full backups every day, storing them both on- and off-site. We test our data restoration procedure regularly. If needed, we can smoothly switch to another infrastructure region, as core components are redundantly deployed across two geographically separated hosting locations. Secure Development [#secure-development] At Productsup, security is managed throughout every stage of our software development lifecycle (SDLC). This involves the application of development procedures and secure coding principles, consideration of OWASP Top 10 vulnerabilities, and fully automated code reviews with strict quality gates, among others. Vulnerability Scanning [#vulnerability-scanning] Productsup uses advanced network and web application vulnerability scanners to identify vulnerabilities and potential security threats. Identified vulnerabilities are assessed by our development and infrastructure operations team and remediated subsequently. In addition, we regularly undergo external security assessments through independent third parties. Encryption [#encryption] Our service uses HTTPS with modern TLS (1.2) implementations only and strong ciphers to encrypt all data while in transit. For sensitive data at rest, column-level encryption is applied (AES256), and user credentials are salted and hashed. Exporting data to third parties A necessary aspect of feed management is sending product feeds to data to external channels such as Google, Facebook, Amazon, and hundreds more. The method of integration with these channels depends on the use case. Each external channel will receive the data over a destination. For example, this could be an FTP Server or an API connection. The encryption varies, depending on the destination. You are advised to make yourself aware of the type of encryption of these destinations before using them. Encryption types of the most popular Productsup destinations Here is a brief list of some of the most popular Productsup destinations and appropriate encryption methods and security information: | Destination | Encryption method | Security protocol | | -------------------------- | ------------------------------------------------- | ----------------- | | Productsup Server | TLS1.2 | HTTPS | | Productsup Platform API | TLS, SSLv3 | HTTPS | | Google Merchant Center API | TLS, SSLv3 | HTTPS | | Facebook Marketing API | TLS, SSLv3 | HTTPS | | SFTP Server | AES, 3DES, or other, depending on the target host | SSH | | Productsup SFTP Server | aes256-ctr, aes192-ctr,aes128-ctr | SSH | | FTP Server | None | FTP | | SAP Product Content Hub | TLS, SSLv3 | HTTPS | SAP Product Content Hub data is sent through the Productsup Platform API. # Supported browsers The Productsup platform and the Content Portal run best on the latest versions of Chrome, Firefox, Safari, and Edge (Chromium-based). See the following links for the latest browser versions: * [Firefox](https://www.mozilla.org/en-US/firefox/) * [Chrome](https://www.google.com/chrome/) * [Safari](https://www.apple.com/safari) * [Edge (Chromium)](https://www.microsoft.com/en-us/edge) If you experience any issues displaying the platform properly, contact the Support Team at [support@productsup.com](mailto:support@productsup.com). Include a screenshot of the issue and list your browser version. See [Report a platform-related issue to Support](/docs/help-center/best-practices/report-a-platform-related-issue-to-support). # Product feed management and automation benefits Introduction [#introduction] Automating product feed allows you to keep product data up-to-date across multiple channels automatically. Product feed, also known as a product data feed or data feed, refers to product information files. These feed files vary; see the following list for some commonly-used formats: * CSV - Comma-separated value * JSON - JavaScript Object Notation * TXT - Text files * XLS - Excel file spreadsheet * XML - Extensible Markup Language Marketers, for instance, use product feed across sales and marketing channels to communicate product data from one end to another. This product data can contain product size information, colors, availability, product images, etc. Online merchants use this data to display product listings to customers in the E-commerce space accurately. Depending on the marketplace, the formatting and structure of the product feed typically follow guidelines set by any specific channel. Automate the display of product feed across several channels to reduce the amount of time needed to optimize data feeds across all channels. Productsup [#productsup] Productsup is a SaaS feed management software solution for data feed integration, optimization, and distribution. Productsup lets you manage product feed by automating the import, optimization, and export of product data feed. You can import product data feed from multiple sources, including API integrations. From spreadsheets to product information management (PIM) solutions, integrate product data feed in several formats and sizes. Automation use and benefits [#automation-use-and-benefits] Productsup offers you a range of solutions to efficiently manage product feed, integrate marketplaces, onboard vendors, suppliers, third-party data providers, and use with product content syndication or PIM platforms. Managing product feed with Productsup helps marketplaces and brands structure and enhance their product content across thousands of retail and digital channels. Automating pricing updates and inventory, along with data mapping, defining product categories, scheduling imports, and even excluding products for export, is where automation becomes most beneficial. And the importation and exportation of product feed is the most efficient way to communicate this data seamlessly throughout multiple channels. High-quality product feed [#high-quality-product-feed] Channels rely on product feeds to display product listings to shoppers reliably. The higher the quality of your product feed means the more accessible your products are to vendors and clients by matching merchant-set algorithms. Accuracy [#accuracy] Product feed must be accurate, as marketplaces and channels rely on accurate data to display your products. Marketplaces can be a highly competitive space, where inaccuracies in your data feed may cause a loss of clients. Save time and money [#save-time-and-money] Save time by automating updates and the processing of your data feeds. You’ll also save money by managing your product feed data from one platform. Productsup lets your marketing campaigns reach their maximum potential, reducing waste on ad spend, costs-per-clicks, lost conversions, etc. Get started [#get-started] See [Set up User Management](/docs/help-center/get-started/user-management/set-up-user-management) for getting started in the Productsup platform. # Network information import { Callout } from "fumadocs-ui/components/callout"; All requests originate from the IP ranges listed below. **These ranges belong exclusively to Productsup** — no other organization sends traffic from them — so there is no need to configure a proxy in the platform. You must allowlist the **entire range**, not a single IP address. Productsup might use any address in these blocks, and the specific source IP for any given request is not stable. Productsup IP ranges [#productsup-ip-ranges] * IPv4: `185.252.140.0/22` * IPv6: `2a13:7840::/29` For more information about the Productsup network, see [AS200249](https://www.peeringdb.com/net/31954) on PeeringDB. CIDR and netmask notation [#cidr-and-netmask-notation] The `/22` and `/29` suffixes are CIDR notation — a compact way of writing a whole range of IP addresses in one line. Instead of listing every individual address, the suffix tells your firewall how large the range is. For example, `185.252.140.0/22` means "this address and the 1,023 addresses that follow it." Most modern firewalls, load balancers, and server tools accept this CIDR format directly — paste the range as written and you are done. Some older or simpler IPv4 tools split the range into two separate fields: a starting IP address and a *netmask* (sometimes called a *subnet mask*). The netmask is just a different way of describing the same range size. If your tool asks for both, use the values below. | CIDR | Starting IP | Netmask | | ------------------ | --------------- | --------------- | | `185.252.140.0/22` | `185.252.140.0` | `255.255.252.0` | IPv6 has no netmask equivalent — the protocol only uses CIDR notation (the `/29` prefix length). Enter `2a13:7840::/29` directly wherever your tool accepts an IPv6 range. # Error log codes and troubleshooting overview import { Callout } from "fumadocs-ui/components/callout"; Introduction [#introduction] Error log is the platform's feature that shows all the records of the errors and warnings that occurred during the import, export, or run. When you open a list of projects, you can see the number of errors and warnings per site. To see more details on them, open the error log. UUID-089ac0b7-88d7-be94-d0e6-832c3896a151 Locate Error Log [#locate-error-log] To access the error log: . Go to **Error Log** from your site's main menu. . Alternatively, in the site's **Dashboard**, select the **View error log** link in the Warnings and Errors section. The section displays the number of warnings and errors from the last run of the site and the severity level of the errors: *Medium*, *High*, or *Low*. UUID-1297c324-e395-010e-8772-3e9be79184c3 Error log [#error-log] Error log displays all warnings and errors represented in a table view: UUID-5bdc83f3-a97e-f25d-7a34-1171b78e0955 * **Result** - indicates whether the process failed or generated warnings. * **Datetime** - shows the date and time when the process took place. * **Process ID** - shows a unique ID of every process such as import, export, or run. * **# Errors** - shows the number of times errors occurred. * **# Warnings** - shows the number of times warnings occurred. * **Purge** - lets you remove the entry from the list. You can open each record to see the details of every process, namely: UUID-350e8451-92d4-302e-ffa8-acd30c47a87a * The orange labels for warnings and red labels for different severity levels for errors. * **Process** with its ID. You can select the arrow (**>**) icon for each entry to expand more details. * **Score** - the entry's rank, with 0 for the lowest and 1000 for the highest score. * **Code** - the error code by which you can search for the meaning of the error and find possible solutions in our Help Center. See [Error codes and possible solutions](#section-idm4558182659704032694736461777). * The **Snooze/Blacklist** drop-down menu with the following actions: * **Add to Blacklist** - an entry will not appear in your error history until you remove it from the blacklist. * **Snooze for 24 hours** - an entry won't appear in your error history for 24 hours. * **Snooze for 7 days** - an entry won't appear in your error history for 7 days. * **Snooze for 14 days** - an entry won't appear in your error history for 14 days. * **Snooze for 30 days** - an entry won't appear in your error history for 30 days. Beneath the error history, a table shows all snoozed or blacklisted errors, where you can unsnooze or remove from Blacklist the needed errors. UUID-07e8f524-091e-25c5-3e76-2bf1957e6605 Error codes and possible solutions [#error-codes-and-possible-solutions] If you run into an issue in the platform and see an error code or message in your error log, here's a summary of what they mean and some possible solutions to help you resolve the issue. | Error code | Description of error | Possible cause for error | Possible solution | | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `10000` | `Download Failed or File is empty` | Downloading the feed from the source was unsuccessful or the file did not contain any data. This could indicate an invalid URL or error when during the file creation process. | - Make sure the Source URL, and if applicable, the username and password are all correct. - Make sure the Productsup Platform has permission to access this file. You may need to make sure the file has read permissions, and if the source server blocks outbound traffic, allowlist Productsup's IP ranges (see [Network information](/docs/help-center/get-started/productsup-fundamentals/network-information)). - Confirm the file is not empty, the file path and filename exist, and there are no typographical errors. | | `10008` | `Export not enabled for this site` | You have not mapped any Dataflow connections to the intermediate and or export stages yet. | Map your product data from the import stage to the export stage. | | `10012` | `FTP Transfer: Could not connect to host` | The FTP server has a firewall and only allows certain IP addresses to connect to it. | If the FTP server only allows certain IPs, allowlist Productsup's IP ranges (see [Network information](/docs/help-center/get-started/productsup-fundamentals/network-information)). | | `10018` | `No exports enabled yet` | You have not added export channels to the site yet.You have set **Upload** on all export channels to **Off**. | - Add an export channel. - Confirm that you set **Upload** to **On** for at least one export channel. | | `10031` | `Import File Empty or Missing CSV Header` | When you import XML files as data sources, you convert them into CSV files, which then lets you manipulate those products in the platform. Sometimes this conversion can go wrong and the generated CSV file is missing its header.This can also occur when you import a CSV, but you add XML settings in the setup and vice versa. | Contact [support@productsup.com](mailto:support@productsup.com). | | `10032` | `Failed to connect expanding CSV. Skipping.` | Your additional data source is unable to connect with the main data source correctly. Could be because the ID columns are incorrectly set. | Go to your additional data source settings and confirm that the ID columns are set correctly. To learn more about additional data sources and how to add them to your site, see [Enhance your products with additional data sources](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources). All settings are case-sensitive. | | `10036` | `No files to upload to export destination since all products have been skipped. If this is not expected, please review your skipping rules` | Your skipping rule boxes have caused the platform to skip all of your products for this specific export channel. | Review your skipping rules to confirm that they are not skipping rows or products by accident. | | `10042` | `FTP Remote Folder not Found` | The platform is unable to find the folder on the FTP server to upload the exported feed file to. | In your export channel’s FTP server destination setup, confirm that both the **FTP Host** is correct and the FTP directory exists on the server. | | `10044` | `FTP Upload failed` | A generic error message, usually followed by a more detailed message, often indicating an error with the export destination. | Check the error log for more detailed information about the error message. | | `10055` | `Index column doesn't exist` | The column chosen to connect the main data source to an additional data source doesn't exist during import. It can happen possibly due to the order of operations of import, data services, and column creation. | - Go to your additional data source settings. - Confirm that the ID columns are set correctly. The column chosen as **ID Column From Your Main Feed** can't be a column created by a data service from this site. See [Enhance your products with additional data sources](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources), to learn more about additional data sources and how to add them to your site. | | `10064` | This message uses the actual numbers and attribute names from your site. See an example:`50 items (100%) of column "shipping" contains an invalid shipping value` | Some of the products in the given attribute contain incorrect values. | - Check the warning message to find information about the export and attribute where your products contain incorrect values. - Go to the needed site and export, select **Analyze** in the column of the relevant attribute, and see what causes the problem with your values | | `10078` | `Unable to download Feed or Feed is empty` | - The data source was unable to download. - The data source contained no data. - The server containing the file uses a firewall and only allows specific IP addresses to connect to it. | - Confirm the source URL or host is correct, and if applicable, the username and password as well. - Confirm the Productsup platform has permission to access this file (read permissions). - Confirm the file is not empty. - If the server uses a firewall, allowlist Productsup's IP ranges (see [Network information](/docs/help-center/get-started/productsup-fundamentals/network-information)). | | `10079` | `Downloaded Additional Feed is empty` | The downloaded additional data source contains no data. | Check with your local IT team since the logic to populate this data source, before the Productsup platform pulls it, may contain a bug. | | `10080` | `Main feed doesn't contain any products` | - The main data source contains no data. - The contained data is distorted. | Check with your local IT team since the logic to populate this data source, before the Productsup platform pulls it, may contain a bug. | | `10081` | `No Data Source defined yet.` | The site has no data sources set up, so the run cannot begin since there is no available data for download. | Set up a data source. | | `10082` | `Request to URL forbidden (HTTP Status 403)` | The platform does not have permission to access the URL. | Check if the URL needs credentials. If it requires an IP allowlist, allowlist Productsup's IP ranges (see [Network information](/docs/help-center/get-started/productsup-fundamentals/network-information)). | | `10083` | `File not found at URL (HTTP Status 404)` | - The hosted file is in another URL. - The URL expired. | Double-check and update the file URL in the **Data Sources** > **Settings** tab. | | `10097` | `FTP Transfer: Could not login at host` | - The credentials you used to access the FTP could be incorrect. - The FTP server only allows *Passive Mode*. | - Confirm you are using the correct credentials. - Activate **Passive Mode** in the **Data Sources** > **Settings** tab. | | `10104` | `IO Service \{{ UserInfo.Metadata. service_name }}\" failed"` | The activated IO service may not be compatible with your data. | Check the settings of the IO service. If they look correct, contact Technical Support at [support@productsup.com](mailto:support@productsup.com). | | `10115` | `Feed upload failed` | A generic error indicates that either the destination settings are not correct or the platform cannot access the destination. | - Check the destination settings for possible typographical errors or incorrect credentials. - If the destination requires an IP allowlist, allowlist Productsup's IP ranges (see [Network information](/docs/help-center/get-started/productsup-fundamentals/network-information)). - If everything looks correct, contact Technical Support at [support@productsup.com](mailto:support@productsup.com). | | `10117` | `Conditionally mandatory attribute is empty` | A [conditionally mandatory attribute](/docs/export-template-management/attributes/conditionally-mandatory-attributes) has no value for products where one of its conditions is met. The attribute becomes mandatory when one of its configured conditions is met; for example, when `batteries_required` equals `true` or when the trigger attribute contains any non-empty value. | - Provide a value for the attribute on the affected products, or review the attribute's conditions in the Developer Portal. - Go to the site and export, and select **Analyze** in the attribute's column to see which products are affected. | | `10118` | `Conditionally mandatory attribute failed validation` | A [conditionally mandatory attribute](/docs/export-template-management/attributes/conditionally-mandatory-attributes) has a value that fails one of its Analyzer Tests (for example, length, format, numeric range, or allowed values) for products where one of its conditions is met. | - Correct the values so they pass the attribute's Analyzer Test, or review the test configuration in the Developer Portal. - Go to the site and export, and select **Analyze** in the attribute's column to see which products and values are affected. | | `10200` | `Unable to download file from FTP/SFTP/FTPS/FTPES` | The server may use a firewall or require different credentials. | Check if the platform needs credentials. If the server requires an IP allowlist, allowlist Productsup's IP ranges (see [Network information](/docs/help-center/get-started/productsup-fundamentals/network-information)). | | `10202` | `Columns for Id Service were missing` | The platform did not set up the **ID Column** in **Data Sources** > **Settings**, or it disappeared. | Go to **Data Sources** > *Settings* tab, find the section *Unique item identifier*, and define one or more attributes that uniquely identify items in your feed. | | `10211` | `Aborted due to Error Monitoring Configuration` | Monitor event conditions were met, so the platform aborted the current run. | Go to the error log to see which Monitor event was met. If it appears as expected, you can snooze the Monitor event for a specific period. | | `10212` | `File decompression of download source {{ UserInfo.Datasource }} failed` | File decompression of download source `{{ UserInfo.Datasource }}` failed. | - Check with your IT team to see how they have compressed the file. - Check the file, as an uncompressed file might contain the wrong extension. For example, containing a .zip or .gz extension. | | `10222` | `Could not upload {{ UserInfo. Metadata.cnt }} products. Mandatory attributes were missing` | The export is missing mandatory attributes that the target channel sets. | Confirm all mandatory attributes in the export channel have mapped connections to them. Mandatory attributes appear blue in **Dataflow**. | | `10224` | `Channel not enabled for this site` | The platform is refreshing **Data View** for a channel that is currently inactive. | Check if it’s expected that the channel is inactive. If so, you can ignore this error message. | | `10250` | `List {{ UserInfo.Id }} download failed. Read access is required?` | The platform may have restrictions for accessing or downloading the file. | - Confirm that everyone with the list URL has at least read access and rights to download the file. - If importing from Google Sheets, check that the URL ends with `/export? format=csv`. | | `10313` | `Column '{{ UserInfo.Column }}' disappeared from source feed` | A previously imported column in Productsup no longer exists in the platform. This could be the case if you removed it from the data source or because the data source has failed to import. | Verify if the imported column should not exist. If it should, check with your IT team and confirm the data source that contained the column was set up correctly and did not fail to import. If it failed, review the corresponding error message. | | `10314` | `Column '{{ UserInfo.Column }}' appeared as new column in the source feed` | A warning message letting you know that the site imported a new attribute from your data sources. The warning message mentions the name of the new attribute instead of the curly brackets shown in this example. | There must have been a change in your data sources, which resulted in the site importing a new attribute. No specific actions required. You can use the new attribute in your site if needed. | | `10322` | `Destination Failed` | Generic error message for a failed upload to an export destination. May occur because of incorrect credentials, a server outage, or other technical reasons. | Check the error log for further information or contact [support@productsup.com](mailto:support@productsup.com) to investigate. | | `10323` | `Product Count Changed from Import to Intermediate` | This error message indicates an inconsistency in the database regarding the number of products in the import and intermediate stage. | Contact [support@productsup.com](mailto:support@productsup.com) to investigate. | | `10330` | `Product Count Changed from Intermediate to {{ UserInfo.Metadata. currentStage }}` | This error message indicates an inconsistency in the database regarding the number of products in the intermediate column and the listed export channel. | Contact [support@productsup.com](mailto:support@productsup.com) to investigate. | | `10343` | `Could not upload {{ UserInfo. Metadata.cnt }} of {{ UserInfo. Metadata.total }} products {{ UserInfo. Metadata.rate }}% to Bing Content API` | The platform could not upload a percentage of products via the Bing Content API. | Check that all mandatory attributes are present. Mandatory attributes appear in blue in **Dataflow**. | | `10344` | `Failed to connect expanding SQLite. Skipping.` | This error indicates that the database was not able to expand with additional data. | Check that you have the correct column names in the **Additional Data Source** settings. Check for possible typos, the correct case, for example, `ID` vs `id`, or if the column exists in **Data Sources** > **Additional Data Sources** > the **Content Mode** section. | | `10345` | `Maximum Product Count Exceeded. Please Contact Productsup Support: support@productsup.com` | This error comes from a predefined value of the maximum number of products the platform allows for import and acts as a safeguard to prevent performance limitations or accidental overages. | Confirm you did not accidentally try to import too many products. If you need to increase the limit, contact [support@productsup.com](mailto:support@productsup.com), as they can adjust this limit according to your needs. | | `10352` | `Maximum processing time exceeded` | This error refers to the threshold set in the Monitor event **Site run exceeds given number of hours**. For example, this could occur because of new rules applied in the Dataflow or Data View, or slow down and upload speeds. The number correlates to previous durations. | Review your Monitor settings. If the run time seems unusually high, contact [support@productsup.com](mailto:support@productsup.com) to investigate. | | `10354` | `Unable to parse XML file` | A generic error message, usually followed by a more detailed message, could indicate a corrupted file. | Check the error log for more information. | | `10370` | `XSL Transformation Failed (Export {{ UserInfo.Metadata.export_id }}: {{ UserInfo.Metadata.name\|raw }})` | An error occurred while attempting to transform the export XML file using an XSL Template. This may occur because the XML structure changed or the XSLT is invalid. | If you set up the XSLT, go to the settings of the specified export and check if you can find any inconsistencies between the XSL Template under XSL Template for XML Export and the original XML. Otherwise, contact Technical Support at [support@productsup.com](mailto:support@productsup.com) to investigate. | | `10380` | `Invalid Dynamic Filename` | This occurs when an export uses a dynamic filename or URL, and the used Twig that generates the filename or URL is invalid. | Confirm that the used Twig that builds the filename or URL is valid. See [Import dynamic URLs](/docs/help-center/import-data-feeds/import-your-data-into-productsup-advanced-settings/import-dynamic-urls) for both imports and exports. | | `10513` | `Processing Error` | A generic error message indicating an issue with the data processing in the database. | Contact [support@productsup.com](mailto:support@productsup.com) to investigate. | | `10514` | `Service Failed` | A generic error message indicating a failed data service. | - Go to **Data Sources** > *Settings* tab, find the section *Unique item identifier*, and define one or more attributes that uniquely identify items in your feed. - If the setup looks correct, contact [support@productsup.com](mailto:support@productsup.com) to investigate. | | `10515` | `Too many input columns provided` | The hard limit of columns in the import is 2.000 | - Check if there are any unnecessary columns and remove them from your import source. - Services may create additional columns, such as *Explode Columns*. - If the import file is an XML or JSON file, it might help to reduce the threshold for **Bundle repeating nodes** found in **Data Source** options > **Content Options** > **XML Settings**. | | `10517` | `Destination upload failed because of missing required file configuration` | The failed export doesn't have a file to send data to | Go to the settings of the failed export and check if there is a file added in the *Files* panel at the bottom of the export setup page. If not, select **Add File**, define a desired filename and extension in **Filename**, and select **Save**. | # Edit or delete a project import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Once a project is set up, you can edit its name or delete it entirely. You can use projects to organize your sites as you wish. This could be per country, per brand, per branch, or in any other way that suits your organization and use case. Navigate to a project [#navigate-to-a-project] Go to the organization level. Select the project name. Edit a project name [#edit-a-project-name] Go to the project level. Go to **Settings** from the project's main menu. project_level_settings Enter a new name in the **Project name** field. rename_project Select **Save**. Delete a project [#delete-a-project] To delete a project, it must not have any sites in it. You must first delete the sites. This is built-in as a safeguard to ensure that your feeds cannot easily be removed. Go to the project level. Go to **Settings** from the project's main menu. Go to the **advanced settings**. delete_project_advanced_settings Select **Delete Project**. # Add a project import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] According to the Productsup data structure, each site should exist in a project. The project is a container for sites, and you need to add a project to your Productsup organization before creating sites. It is up to you to define the names and hierarchy of your projects and sites within Productsup. Add a project to your organization [#add-a-project-to-your-organization] You may have access to several organizations, each of which has its projects, sites, and settings. If you have only one organization, you can go to the organization level one of the following ways: 1. Select your organization name at the top of the main menu (highlighted in red). 2. Select your organization name in the breadcrumbs (highlighted in blue). 3. Go directly to the link ending with your organization ID, for example, `https://platform.productsup.com/overview/account/123456`. UUID-ee0b693c-ee98-f447-42eb-5c6b76119d5c Select **Add Project**. Enter a name for your project. Select **Save**. This action creates a project and redirects you to the project level in Productsup, where you can see an overview of the selected project and all its sites. UUID-de299425-ffc4-22a3-adec-8e1d317858a2 To see an overview of all projects within your organization, go to the organization level described in [Step 1](#N1650895275458). Project's main menu [#projects-main-menu] You can open the project-level menu by selecting it in breadcrumbs. UUID-c1881d68-eb23-6a0f-2248-5a65069e6e75 The project's main menu features include: * **Overview**: an overview of all sites within the selected project available for you according to your access rights. * **Dashboard**: an overview of errors and warnings occurring in the sites belonging to the project. * **Authentication**: a feature that lets you add and view your authentications with external systems. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems) for more information. * **Monitor**: a feature that lets you set up email alerts for error events and process breaks. See [Monitor events overview](/docs/help-center/dashboard-and-monitor/ensure-data-quality-in-monitoring/monitor-events-overview) for more information. * **Activity**: a summary of maintained and exported products by a selected month. * **Reporting**: settings to generate and download performance reports for clicks and orders of the selected exports. * **Settings**: a page where you can rename, delete, or move a site to another project. The list of available features depends on your user access rights. See [User types and access rights](/docs/help-center/get-started/user-management/user-types-and-access-rights) for more information. Use the navigation bar of the project level [#use-the-navigation-bar-of-the-project-level] Once you've created a project, you can use the upper ribbon to apply various actions to the sites within the chosen project. UUID-038859c0-4c43-77fa-6e92-f792c19ae326 * Use the **Search** field to find a site by its name. * Use the **Filter**, **Recent**, **Exports**, and **Tags** drop-down menus to filter sites within the selected project based on their states, time of creation, available exports, and tags. You can add tags in the project level: Select the **Tag** drop-down menu in the needed project line. Select **Add new tag** or select a tag from the list of existing tags. UUID-3caef1e5-c65d-3994-a314-57d9b4b676ea Add key and value and select **Save**. In the project level, you can only add new tags or select from the existing tags. To edit or delete tags, go to the **Setting** in the site level. See [Edit site settings](/docs/help-center/get-started/manage-your-organization-projects-and-sites/edit-site-settings#section-idm234666106254992). * To search for errors, select **Errors** and start typing the error name. Select the necessary error from the drop-down list and choose **Search** to see the sites with the error.To get the meaning of the errors, see [Error log codes and troubleshooting overview](/docs/help-center/get-started/manage-your-organization-projects-and-sites/error-log-codes-and-troubleshooting-overview). Alternatively, you can view the error history in **Error Log** in the main menu. UUID-dc2baded-a3a9-1a65-8d90-7259c220218e Use **Clear Filters** in the upper ribbon to restore the page view before the error searching. * Select the graph icon to change the project view and have different columns describing your sites. By default, the warning view is active. * The graph view provides such columns as *ID*, *Title*, *State*, *Imported*, *Changed*, *Export(ed)*, *Tags*, *Last Duration*, and *Last/Next Run*. UUID-11e9bfe0-64c3-8f84-5dc2-8711d27c865b * The warning view provides such columns as *ID*, *Title*, *State*, *Errors/Warnings*, *Imported*, *Last Duration*, and *Last/Next Run*. UUID-6ba1f861-8784-84f3-1b1b-683e077f57a2 The *Errors/Warnings* column shows the number of errors and warnings during the last run. To see the list of errors, hover over the red cross icon. To see the list of warnings, hover over the orange exclamation mark icon. UUID-d898163d-fcf7-474a-100c-c9d4b75d8b45 * Perform a bulk action on multiple projects and sites simultaneously by selecting **Bulk Option**. See [Use bulk options to perform actions across multiple sites](/docs/help-center/get-started/manage-your-organization-projects-and-sites/use-bulk-options-to-perform-actions-across-multiple-sites) for more information. * Select **Download** to download a list of all sites within the selected project as a CSV file. * Select **Clear Filters**, to restore the default state of the page before using any filters. * Sort through sites by any column selecting the column title and using the up and down arrows. # Manage your organization, projects, and sites Learn how to manage your Productsup organization, projects, and sites. Also, learn how to use them. There are two main levels in a Productsup organization: * **Projects:** A portfolio or folder that groups and organizes sites, for example, by region, country, or branch. * **Sites:** Productsup processes and maintains feeds within sites. You can create several exports in a site. # Edit site settings import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] To structure and organize your Productsup organization, you can use various site settings. This document gives you an overview of the high-level site settings. Change the name of a site [#change-the-name-of-a-site] Go to **Settings** from the site's main menu. Enter the new name in **Title**. UUID-af2dce2b-9dd1-4a41-e55c-524e1bdf2d15 Select **Save**. Add a logo to a site [#add-a-logo-to-a-site] You can see a site's logo between the **Title** and **State** columns of the site's row on the project and organization overview pages. In the following screenshot, the globe image is an example of a logo added to a site. UUID-6952e04e-09f2-d895-0a85-b8d01e0a1990 Go to **Settings** from the site's main menu. Add a link to your logo in **Logo URL**. Select **Save**. Add a comment to a site [#add-a-comment-to-a-site] You can add comments to sites to keep things organized and help other users of the platform understand the purpose of each site better. Go to either the organization or the project level. Select the comment bubble at the end of the chosen site's row. Enter your comment and select **Save**. To see your comment, hover over the comment bubble or select it. Sites with comments have a black comment bubble, while sites with no comments have a white comment bubble. UUID-b6670fda-a90b-871f-1111-ac543ec31225 Site's tags [#sites-tags] Tags let you do the following actions: * Filter sites by tags on the project level in the Overview. See [Add a project](/docs/help-center/get-started/manage-your-organization-projects-and-sites/add-a-project#section-idm4519495076728033017925908111). UUID-5088c6e4-0e3b-3c00-4f60-ff36a3f07712 * Refer to the necessary sites when using some rule boxes. See [Replace values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/replace-values#section-idm353458339224944) and [Other](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/other#section-idm234573119882414). * Simplify the site references when making some operations via Platform API. You can use a textual representation of a site instead of storing the site ID. In this case, the site tags must be unique within an organization. Add tags to a site [#add-tags-to-a-site] Go to **Settings** from the site's main menu. Choose the **Tags** tab. UUID-ec0fdd1c-877c-b0c6-4dbc-f08386db26ff Add key and value in the **Add new tag** section and select **Add Tag**. Edit or delete tags [#edit-or-delete-tags] UUID-f8e89bfb-9808-439a-55c9-57792430d9de Go to **Settings** from the site's main menu. Choose the **Tags** tab. Next to the needed tag, select **Edit** to change the tag or select **Remove** to delete the tag. You can't edit the platform-generated tags. Move a site to a different project [#move-a-site-to-a-different-project] Go to **Settings** from the site's main menu. From the **Project** drop-down menu, select the project where you want to move the site. UUID-ab50b11f-da02-0b30-0321-f6e3a80f2112 Select **Save**. Move multiple sites to a different project in bulk [#move-multiple-sites-to-a-different-project-in-bulk] You can move multiple sites into a different project at once: Go to either the organization or the project level. Select **Bulk Option** in the upper ribbon. Tick the boxes next to the sites you want to move and select **Next Step**. Select **Move into Project** and choose **Next Step**. From the **Project** drop-down menu, select the project where you want to move the sites. If one of the sites you are moving has lists shared on the project level, this project loses access to the lists as the lists' source site moves to a different project. The lists become available to the target project chosen in the **Project** drop-down menu. Select **Execute**. Reset data in a site [#reset-data-in-a-site] You can delete all product data from a site but preserve all site configurations, such as data sources, mapping, rule boxes, and exports. To reset the data: Go to **Settings** from the site's main menu. Choose the **Advanced Settings** tab. Select **Reset** in the **Reset Data** panel. UUID-521fa8ad-1a08-dadb-615f-b499a322976e Select **Yes**. Reset data for multiple sites in bulk [#reset-data-for-multiple-sites-in-bulk] You can reset data for multiple sites at once: Go to either the organization or the project level. Select **Bulk Option** in the upper ribbon. Tick the boxes next to the sites where you want to reset data and select **Next Step**. Select **Reset Sites** and choose **Next Step**. Select **Execute**. Disable or pause a site [#disable-or-pause-a-site] By default, sites are always active in the platform. They import data from your data sources, process it by applying rule boxes and mapping attributes, and export it to the selected channels. If you want to deactivate a site, there are two (2) options: . Pause a site's export. In this case, the site still imports data from your data sources and processes it without exporting it to any channels. . Disable a site. In this case, the site no longer imports, processes, or exports any data. Even if the site uses scheduling or triggering settings, no run occurs. To pause or disable a site, use one of the following procedures. From the site level [#from-the-site-level] Go to **Dashboard** from the site's main menu. In the top-right corner, select the **Active** drop-down menu. To pause the export of this site, select **Paused**. To disable this site, select **Disabled**. From the organization or the project level [#from-the-organization-or-the-project-level] Go to either the organization or the project level. Select the green play icon (**▶︎**) in the **State** column of the desired site. To pause the export of this site, select **Paused Upload**. To disable this site, select **Disabled**. To change the state of multiple sites in bulk, use the Bulk Option feature: Go to the organization or the project level and select **Bulk Option**. Tick the boxes next to the desired sites and select **Next Step**. Select **Activate/Deactivate Sites** and choose **Next Step**. Choose the desired state and select **Execute**. Delete a site [#delete-a-site] Go to **Settings** from the site's main menu. Choose the **Advanced Settings** tab. In the **Delete this Site** panel, select **Yes, delete this Site**. UUID-c53bf7e6-3d7d-184f-9d9e-b9584b239b9c Select **Yes**. Delete multiple sites in bulk [#delete-multiple-sites-in-bulk] Go to either the organization or the project level. Select **Bulk Option** in the upper ribbon. Tick the boxes next to the sites you want to delete and select **Next Step**. Select **Delete Sites** and choose **Next Step**. Select **Execute**. # View your Activity Log and Summary import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; With the Activity feature, you can keep track of the following: * All your applied, edited, scheduled, and deleted rule boxes. * All rule box conditions added to, moved within, or deleted from attributes. * All added and deleted connections in Dataflow. * All added, edited, and deleted user-generated attributes. * The number of monthly maintained and exported items. UUID-e3c65727-49c9-6e43-ed46-b5ea3199e264 Locate the Activity page [#locate-the-activity-page] To access the Activity page, go to **Activity** from your organization's, project's, or site's main menu. * If you access the Activity page from the organization or site level, you can see two tabs: * The *Activity Log* tab displays all activities related to rule boxes, connections, rule box conditions, and user-generated attributes. * The *Activity Summary* tab shows the number of monthly maintained and exported items for the organization. * If you access the Activity page from the project level, you can see only the *Activity Summary* tab with the number of monthly maintained and exported items for each site in a project. Activity Log [#activity-log] Activity Log displays your users' activities in Dataflow and Data View: * Adding, editing, pausing, scheduling, or deleting rule boxes. * Applying rule box conditions to attributes, moving them within attributes, or removing them from attributes. * Adding or deleting connections in Dataflow. * Adding, editing, and deleting user-generated attributes. Your Activity Log displays a table containing the following information: * **Activity** shows the name of the logged activity. * **Type** displays the type of performed activity, such as *Add*, *Edit*, *Order change*, and *Delete*. The current version doesn't show the scheduling of rule boxes and changes of Dataflow versions. * **Location** shows the project and site of the activity. * **Timestamp** displays the time when the activity occurred based on the time zone selected in your profile. See [Set up user profile time zone](/docs/help-center/get-started/user-management/set-up-user-profile-time-zone). * **User** records the name and email of the user who performed the activity. UUID-a47c9249-a2e5-3c9d-a7ee-72b0b3cf0bb8 Search for the needed user activities in the top toolbar [#search-for-the-needed-user-activities-in-the-top-toolbar] You can search for the needed user activities using the search bar or the filters displayed next to it: UUID-03b6d34d-1501-c134-7a43-802056888e82 . In **Activity**, choose the entity that the needed activity relates to and select **Apply**: * *Dataflow connection* shows an added or deleted connection between attributes in Dataflow. * *Dataflow rule box* shows a rule box added, edited, moved, or deleted in Data View or Dataflow. * *Rule box condition* shows an applied, moved, or deleted rule box condition in Data View or Dataflow. * *User-generated attribute* shows an added, edited, or deleted attribute in the intermediate or export stage in Dataflow. UUID-1c51dc6e-b3c2-a4bf-167b-9b5c38e0e12c . In **Type**, choose the needed type of activity and select **Apply**: * *Add* shows activities where a user added a rule box, a connection, a rule box condition, or a user-generated attribute. * *Edit* shows activities where a user changed a rule box setup or renamed a user-generated attribute. * *Order change* shows activities where a user changed the order of rule boxes and rule box conditions in an attribute. * *Delete* shows activities where a user deleted a rule box, a connection, a rule box condition, or a user-generated attribute. UUID-b94a49a6-7ecc-27fa-5592-26b7583c0fa8 See the activity details [#see-the-activity-details] Select any activity in Activity Log to view its details: . The rule box activity details page shows the following information: UUID-6729f654-153c-9aa1-aaf5-7c35226cfe9c * *Add*, *Edit*, *Order change*, and *Delete* identify the type of action related to the rule box. * *User* shows the user who performed the change. * *Location* displays the organization, project, and site where the change happened. * *Timestamp* logs the time of the change. * *Rule box name* shows which rule box relates to the change. * The *Before* and *After* panels display: * The settings of the rule box before and after the change. This is only visible for *Edit* activities. * In **Attribute Name**, the attribute where a user applied the rule box. * In **Rule Box Order**, the number indicating the order in which a user applied the rule box to the attribute. See [Rule box order](/docs/help-center/add-a-rule-box#note-idm243488719234062). * In **Stage**, the stage or export where a user applied the rule box. . The activity details page of a Dataflow connection shows the following information: UUID-38045b63-a1fa-7352-4e0c-5d07084f9d0e * *Add* and *Delete* identify the type of activity related to the connection in Dataflow. * *User* shows the user who performed the change. * *Location* displays the organization, project, and site where the change happened. * *Timestamp* logs the time of the change. * *Connection* shows the stages where the connection changed. If the connection changed between the intermediate and export stages, you can also see the name of the specific export related to the change. * The names of the attributes between which a user changed the connection. . The activity details page of a rule box condition shows the following information: UUID-f0a05324-b5ae-ac4a-b2a4-37c196f6447e * *Add*, *Order change*, and *Delete* identify the type of activity related to the rule box condition. * *User* shows the user who performed the change. * *Location* displays the organization, project, and site where the change happened. * *Timestamp* logs the time of the change. * The *Before* and *After* panels display: * In **Attribute Name**, the attribute where a user applied the rule box condition. * In **Rule Box Order**, the number indicating the order in which a user applied the rule box condition to the attribute. See [Rule box order](/docs/help-center/add-a-rule-box#note-idm243488719234062). * In **Stage**, the stage or export where a user applied the rule box condition. . The activity details page of a user-generated attribute shows the following information: UUID-5aa8bbe5-63f7-d7c8-8dda-827e657950fc * *Add*, *Edit*, and *Delete* identify the type of activity related to the user-generated attribute. * *User* shows the user who performed the change. * *Location* displays the organization, project, and site where the change happened. * *Timestamp* logs the time of the change. * The *Before* and *After* panels display: * In **Attribute Name**, the name of the affected attribute. * In **Stage**, the stage or export where a user added, edited, or deleted the attribute. Activity Summary [#activity-summary] Your Activity Summary displays two KPIs: * **Maintained items** (previously *Maintained Products*) show the average monthly number of imported items per site, project, or organization available in Activity. The platform calculates the average number of items in the import and intermediate stages and displays the higher of the two numbers. See a calculation example in the following table. * **Exported items** (previously *Exported Products*) show the total monthly number of exported items per site, project, or organization available in Activity. The platform keeps your data for one (1) year only. The Activity Summary tab shows you the maintained and exported items for a selected month per project when you are at the organization level. But if you access the Activity Summary tab from the project level, you can see the maintained and exported items per each site within this project. And if you access it from the site level, the Activity Summary tab displays the maintained and exported items only for the current site. UUID-97e4a281-54c4-157d-ade8-219166cd9bf6 To view your import and export activities for a certain month, choose the month from the dropdown in the top right corner. UUID-a51221eb-ee82-08e0-2d5d-7979987459b5 Example of maintained items calculation: In the following table, you can see that the platform triggered a run four times during the month and imported 7,525 items on average (30,100 divided by 4). At the same time, the platform passed 10,000 items on average to the Intermediate stage (20,000 divided by 2). Since the Intermediate average is higher than the Import average, the Activity Summary displays `10,000` as the number of Maintained items for that month. | Event | Item count on Import | Item count on Intermediate | Description | | ------ | -------------------- | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Run #1 | `100` | `0` | The platform triggered an import, but the file was faulty and only imported 100 out of 10,000 items. The platform passed nothing to the intermediate and export stages. | | Run #2 | `10,000` | `0` | The platform triggered an import again and imported all items successfully. The platform passed nothing to the intermediate and export stages. | | Run #3 | `10,000` | `10,000` | The platform triggered an import and export for all items and passed them to the intermediate stage and then to the export stage. | | Run #4 | `10,000` | `10,000` | Scheduling triggered another data import and export, successfully passing all imported items. | | | `7,525` | `10,000` | Average maintained items. | The Activity Summary data might differ from your invoice if you moved a site from your testing or sandbox project to a live project. For example, in January, the sandbox site had 1,000 maintained items. You moved this project to live in February. Now, if you select January to review Activity Summary for January, you see 1,000 maintained items under the live project, even though in that month, they belonged to a sandbox project. Download Activity Summary [#download-activity-summary] You can download the Activity Summary data as a CSV file for one of the past 12 months as follows: In the *Activity Summary* tab, select a month from the dropdown on the right. Select **Export CSV**. UUID-de13c39a-3cc6-5b0e-fa44-f531eb700839 # Create or copy a site import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; A site is the smallest structural entity in the platform. Your Productsup organization can have multiple projects where you can add multiple sites. A site contains your imported data, the optimizations you apply to it, and the exports where you can send your data. Sites are usually your main workspace in the Productsup platform. Similar to projects, you can organize your sites per country, brand, language, export, etc. Dashboard is the homepage of every site. Here, you can see the site's stats and get quick access to troubleshooting features. UUID-09173611-2b26-e4f2-47fd-aef6f1db8568 When creating a site, you have two options: . Creating a new site and manually setting it up from scratch. . Copying an existing site and reusing its settings. Create a site [#create-a-site] You have created a new site. The platform opens it in your current browser tab, leading you directly to Data Sources to let you start setting up your new site. See [Import your data into Productsup](/docs/help-center/import-data-feeds/import-your-data-into-productsup) for next steps. UUID-107562d2-1877-e622-dd68-c69f742d3a58 Go to a project where you want to add a site. UUID-a39fc03d-631f-932c-2101-edc932cd8a80 Select **Add Site**. Enter a name for your site in **Title**. Leave the option *Create a new Site* in the **Create or Copy** dropdown. Select **Add**. Copy a site [#copy-a-site] Copying a site saves time and reduces the probability of errors caused by configuring sites manually.
    Productsup copies the following entities from the source site: Additionally, you can choose to copy: Productsup doesn't copy:
    • Data sources and unique item identifier settings.
    • Exports.
    • Dataflow connections and rule boxes.
    • Segments from Data View.
    • Data service settings.
    • Tracking settings.
    • All lists shared on the site level.
    • ROI rules from ROI Strategy.
    • Site tags from Settings.
    • Export destinations.
    • Site scheduling and triggering settings.
    • Tracking data: the platform copies tracking settings into the new site, but all tracking data is only available in the source site. ROI rules based on tracking KPIs, such as clicks and orders, don't work in the new site.
    • Organization- and project-level lists: the availability of lists shared on the project and organization level depends on where your new site exists. If the new site exists in the same project or organization as the source site, your new site automatically uses all lists shared within that project or organization. If you delete a list shared on the project or organization level from the source site where it was originally created, all sites in the same project or organization lose access to it.
    You can use bulk actions to copy multiple sites at once. See [Use bulk options to perform actions across multiple sites](/docs/help-center/get-started/manage-your-organization-projects-and-sites/use-bulk-options-to-perform-actions-across-multiple-sites). To copy a site, take these steps: Go to the organization level in Productsup by performing one of the following actions: 1. Select your organization name at the top of the main menu (highlighted in red). 2. Select your organization name in the breadcrumbs (highlighted in blue). 3. Go directly to the link ending with your organization ID, for example, `https://platform.productsup.com/overview/account/123456`. UUID-ee0b693c-ee98-f447-42eb-5c6b76119d5c Select the name of the project where you wish to add a site. Select **Add Site**. Enter a name for your site in **Title**. Select *Create a copy of an existing Site* from the **Create or Copy** dropdown. In the *Select a Site* pop-up, choose the site you want to copy in **Select a Site to copy**. Choose **Select**. This action closes the pop-up and shows you further site settings. UUID-54382da2-2d9d-e5bb-e071-ed504fe8f026 If you want to copy all export destinations from the source site, select **Copy with Export Destinations**. If you copy a site with its export destinations, the destinations of both the source and the new site have the same settings, such as file names, folders, buckets, etc.The *Productsup Server* destination is the only one that remains unique and gets a new link and file name when you copy it. To copy all scheduling and triggering settings from the source site, select **Copy with Scheduling & Triggering**. To copy all shared dataflow settings from the source site to the new one, select **Copy with Shared elements**. This option lets you copy only the sites that already have a shared dataflow\.It is impossible to copy a site with this option if the selected source site is also the source site for the shared dataflow settings. If you still need to copy this type of site, do it without the **Copy with Shared elements** option and then manually set up the shared dataflow in **Shared Dataflow** at the organization level. See [Share dataflow with other sites](/docs/help-center/map-and-optimize-your-data/dataflow/share-dataflow-with-other-sites) to learn more. Select **Copy Selected Site**. Site statuses [#site-statuses] Using site statuses, you can manage which sites run or export data and which ones don't. There are three site statuses in Productsup: * **Active**: In an active site, the platform uses the existing triggers and schedules to run the site automatically. It imports, processes, and exports data as expected. This is the default site status. * **Paused**: In a paused site, the platform uses the existing triggers and schedules to partially run the site. It imports and processes your data, but it doesn't send any data to any of the added export destinations. Even if you manually run a paused site, the platform doesn't export the data. Using paused sites is a good way to test data optimization strategies without exporting any data to your target channels before it's ready. The platform considers items in paused sites as maintained items. * **Disabled**: In a disabled site, the platform doesn't apply any existing triggers or schedules to import, process, or export data. Disabled sites don't run.The platform doesn't consider items in disabled sites as maintained items. UUID-63ecf511-2975-c0b2-ba6c-d2ad7a665c05 Besides the site level, you can also change a site's status at the project and organization level in Overview using the dropdown in the *State* column. Site's main menu [#sites-main-menu] You can open and collapse the site-level menu using the arrow at the bottom of the menu. UUID-b62ca6a9-80fc-6618-c118-3cab043ee5dd The features available in the site's main menu are: UUID-96c9099d-47a0-1335-c36e-e5633e25d4de * **Dashboard**. You can see an overview of a site, including the number of imported and exported items, errors and warnings, import history overview, core readiness score, and site run times. See [Dashboard at the organization, project, and site level](/docs/help-center/dashboard-and-monitor/dashboard-at-the-organization-project-and-site-level). * **Data Map**. You can get a visual overview of where your data is coming from, what happens to it, and what exports it goes to. See [View your site's flowchart in Data Map](/docs/help-center/dashboard-and-monitor/view-your-sites-flowchart-in-data-map). * **Authentication**. You can add and view your authentications with external systems. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems). * **Data Sources**. You can add new data sources and select a unique item identifier. See [Add a main data source to import your products](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-a-main-data-source-to-import-your-products). * **Data Services**. You can add and view data services that can enhance and restructure your data feed. See [Enhance your import data through Data Services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services) and [Restructure your data in Data Services](/docs/help-center/map-and-optimize-your-data/data-services). * **Exports**. You can add and set up exports and view the export history. See [Export data feeds](/docs/help-center/export-data-feeds). * **Designer**. You can edit images in your data feed. See [Image Designer](/docs/help-center/map-and-optimize-your-data/image-designer). * **Scheduling**. You can create schedules and trigger events so that your sites run automatically. See [Set up scheduling and triggering processes in Scheduling](/docs/help-center/dashboard-and-monitor/set-up-scheduling-and-triggering-processes-in-scheduling). * **Dataflow**. You can get an overview of attribute mapping from import to export. See [Map your data from import to export in Dataflow](/docs/help-center/map-and-optimize-your-data/dataflow). * **Data View**. You can view your data and use rule boxes to optimize it. See [Data View](/docs/help-center/map-and-optimize-your-data/data-view). * **Lists**. You can include, exclude, replace, or map values in your data feed. See [Lists](/docs/help-center/map-and-optimize-your-data/lists). * **ROI Strategy**. You can optimize your data feed using performance tracking data and KPIs. * **Reporting**. You can generate and download performance reports for clicks and orders for selected exports. * **Error Log**. You can see all errors and warnings occurring within site runs. See [Error log codes and troubleshooting overview](/docs/help-center/get-started/manage-your-organization-projects-and-sites/error-log-codes-and-troubleshooting-overview). * **Monitoring**. You can set up email notifications or other monitoring actions for site run failures or irregularities. See [Monitor events overview](/docs/help-center/dashboard-and-monitor/ensure-data-quality-in-monitoring/monitor-events-overview). * **Activity**. You can get a summary of the maintained and exported items for a selected month or see user activity in your site. See [View your Activity Log and Summary](/docs/help-center/get-started/manage-your-organization-projects-and-sites/view-your-activity-log-and-summary). * **Tracking**. You can track and analyze performance by collecting clicks, keywords, conversions, and other statistics from your exports. * **Settings**. You can rename, delete, or move a site to another project. The list of available features depends on your user access rights. See [User types and access rights](/docs/help-center/get-started/user-management/user-types-and-access-rights) for more information. # View runtime and estimations in the header Introduction [#introduction] You can view your site’s runtimes in the header to give you a better understanding of run durations. View your estimated runtime or historical information, such as when a run occurred and how long it lasted. View inactive run header information [#view-inactive-run-header-information] On any site-level page, for inactive runs, hover your mouse over the **Run** button to view: * *The Last run (date, time)* * *Estimated duration (amount of time)* * *Last run’s duration (amount of time)* UUID-8eac86ed-23d3-1483-5dd8-9d5724177427 **Note:** While on a site-level page, Productsup updates the *Estimated duration once a minute*. View active run header information [#view-active-run-header-information] After selecting the **Run** button to trigger a run, hover your mouse over **Run** to view: * *Run’s estimated duration (amount of time)* * *Last run (date, time)* * *Last run’s duration (time)* UUID-b4c05139-04ba-4947-fc5e-f4c084e79cbf View queued-run status on site-level pages [#view-queued-run-status-on-site-level-pages] View queued-runs information on any site-level page by hovering your mouse over the **Importing**, **Processing**, and **Exporting** header statuses. Read a tooltip pop-up message displaying the following information: * *There are runs on hold since (day, time)* * *The Run started (day, time)* * *Run’s estimated duration (amount of time in hours, minutes)* * *Last run’s duration (amount of time in hours, minutes)* UUID-f6f4a9eb-c8d6-ef0a-3031-8736aa314f02 Read more about site-level statuses in the *View queued-runs in the header document*. Have questions? Contact [support@productsup.com](mailto:support@productsup.com). # View queued runs in the header import { Callout } from "fumadocs-ui/components/callout"; Introduction [#introduction] When you schedule or trigger runs on-demand, they generally begin when they’re supposed to. For runs that don’t start when expected, they may have fallen into a queue. There are several reasons why runs can fall into a queue. One reason can be that a run produced an error, which prevented it from being processed. The other is that an earlier run took longer than expected. In the Productsup platform, you can view the status of queued runs at the site level, all from the site-level header. View queued runs pop-up warning message [#view-queued-runs-pop-up-warning-message] On every site-level page, a pop-up warning message displays, *There are runs on hold since (date, time)*, if all of the following conditions are met: . You scheduled a run, or it was manually triggered by another site or API connection . The run is ongoing . The run blocks at least one other run’s start. This typically occurs when the estimated time of completion exceeds the next run’s start UUID-db03b06e-ea59-4e0a-d5e2-ed1216e5bdf3 You can close this pop-up message by selecting the **X** selector. The queued runs pop-up warning message reappears after every browser restart or when the queue clears. View queued runs header status [#view-queued-runs-header-status] Confirm if you have queued runs by checking the site-level header on any site-level page. Queued runs display one of the following header statuses: * **Importing** * **Processing** * **Exporting** The **Importing**, **Processing**, and **Exporting** site-level headers indicate: * That you scheduled a run, or it was manually triggered by another site or API connection * A run is ongoing * A run blocks at least one other run’s start, because its estimated time of completion exceeds the next run’s start View queued runs status on site-level pages [#view-queued-runs-status-on-site-level-pages] View queued runs information on any site-level page by hovering your mouse over the **Importing**, **Processing**, and **Exporting** header statuses. UUID-9286b7d0-1a9b-b637-b88c-87e1f755b7c7 The tooltip pop-up message displays the following information: * *There are runs on hold since (day, time)* * *The Run started (day, time)* * *Run’s estimated duration (amount of time in hours, minutes)* * *Last run’s duration (amount of time in hours, minutes)* Have questions? Contact [support@productsup.com](mailto:support@productsup.com). # Your Productsup organization import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; The organization level consists of all information in Productsup related to your company, such as all projects and their sites, user management, monitoring, and more. Find your organization [#find-your-organization] You may have access to several organizations, each of which has its projects, sites, and settings. If you have only one organization, you can go to the organization level one of the following ways: . Select your organization name at the top of the main menu (highlighted in red). . Select your organization name in the breadcrumbs (highlighted in blue). . Go directly to the link ending with your organization ID, for example, `https://platform.productsup.com/overview/account/123456`. UUID-ee0b693c-ee98-f447-42eb-5c6b76119d5c If you have multiple organizations, to switch to the necessary organization level, take the following steps: Select the arrow next to your organization name at the top of the side menu. Search for or select the necessary organization from the list. UUID-435e1cfe-188b-1b18-2688-26e25380e626 Overview of your organization level [#overview-of-your-organization-level] The organization level of the platform provides you with an overview of all projects within your Productsup organization. You can select the right arrow icon (**>**) on a project to expand it and get an overview of its sites. For example, the expanded *Tracking Data* project has the site *Tracking Data for Retailer Demo*. UUID-4e297e74-4fe4-d228-c12c-ceb9542000bc In the upper ribbon of the overview of the projects in your organization, you can search for, sort, and filter your projects and sites with the help of the following options: * Use the search bar to find a project or a site by name. You can also search for the sites containing specific attributes and connections between the stages. * Use the **Projects only**, **Filter**, **Recent**, **Exports**, and **Tags** dropdowns to filter projects and sites based on their states, exports, and tags. * Select **Errors** to see the projects and sites that have the error you are looking for. * Select the graph or warning icon to change the view of your organization overview and have a different set of columns describing your projects and sites: * The graph view focuses on exports. * The warning view focuses on errors and warnings. UUID-92953b20-21f9-cd69-7e20-f89594608a2a * Perform a bulk action on multiple projects and sites simultaneously by selecting **Bulk Option**. See [Use bulk options to perform actions across multiple sites](/docs/help-center/get-started/manage-your-organization-projects-and-sites/use-bulk-options-to-perform-actions-across-multiple-sites) for more information. * Select **Unfold all Projects** to expand all projects and see all their sites in your organization overview. * Select **Download** to download a list of all projects and sites within your organization as a CSV file. * Use **Clear Filters** to bring the selected options to the default state. UUID-f1920f79-3108-60d4-ae1f-5e7d8b00d2df Search for sites by their attributes in the needed stage and connections between them [#search-for-sites-by-their-attributes-in-the-needed-stage-and-connections-between-them] You can search for the sites based on their attributes and connections between them in different stages. Enter an attribute name and desired connection in the search bar in the top right corner of the Projects Overview page. Use one of the following search requests, entering the needed attributes instead of AAA, BBB, and CCC: | Search request | Description | | -------------------------- | -------------------------------------------------------------------------------------------------- | | import: AAA --> | All sites with the connection between the import attribute AAA and any intermediate attribute. | | import: AAA -/-> | All sites with no connection between the import attribute AAA and any intermediate attribute. | | import: AAA --> BBB | All sites with the connection between the import attribute AAA and the intermediate attribute BBB. | | import: AAA -/-> BBB | All sites with no connection between the import attribute AAA and the intermediate attribute BBB. | | import: --> BBB | All sites with the connection between the intermediate attribute BBB and any import attribute. | | import: -/-> BBB | All sites with no connection between any import attribute and the intermediate attribute BBB. | | intermediate: BBB --> | All sites with the connection between the intermediate attribute BBB and any export attribute. | | intermediate: BBB -/-> | All sites with no connection between the intermediate attribute BBB and any export attribute. | | intermediate: BBB --> CCC | All sites with the connection between the intermediate attribute BBB and the export attribute CCC. | | intermediate: BBB -/-> CCC | All sites with no connection between the intermediate attribute BBB and the export attribute CCC. | | intermediate: --> CCC | All sites with the connection between the export attribute CCC and any intermediate attribute. | | intermediate: -/-> CCC | All sites with no connection between any intermediate attribute and the export attribute CCC. | Select the Enter key to see the sites meeting the search request. For example, enter *import: image-->image*. As a result, the platform shows all sites where the **image** attribute in the import stage connects to the **image** attribute in the intermediate stage. UUID-558c8cdf-d170-937b-0a5a-00f6a2571ac3 You can only filter sites but not the exports within them. If a site contains multiple exports, some exports may meet the search request, while others may not. Organization's main menu [#organizations-main-menu] You can open the organization-level menu by selecting your organization's name at the top of the main menu. UUID-ca5e2784-34e5-059a-876d-e5ebba47816f The organization's main menu features include: * **Overview**: an overview of all projects and sites available to you according to your access rights. * **Dashboard**: an overview of the errors and warnings occurring in all projects and sites on this organization. * **Authentication**: a feature that lets you add and view your authentications with external systems. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems) for more information. * **User Management**: a feature that lets you add, edit, and remove users and change their access to sites and projects. See [User Management](/docs/help-center/get-started/user-management) for more information. * **Monitor**: a feature that lets you set up email alerts for error events and process breaks. See [Monitor events overview](/docs/help-center/dashboard-and-monitor/ensure-data-quality-in-monitoring/monitor-events-overview) for more information. * **FTP Accounts**: a feature that lets you add your FTP accounts in Productsup. * **Activity**: a summary of maintained and exported items by a selected month. * **Shared Dataflow**: a feature that lets you configure Dataflow once and reuse it across multiple sites. See [Share dataflow with other sites](/docs/help-center/map-and-optimize-your-data/dataflow/share-dataflow-with-other-sites). The number of available menu options depends on your user access rights. For example, the *User Management* menu option is only available to users with administrator rights. See [User types and access rights](/docs/help-center/get-started/user-management/user-types-and-access-rights) for more information. Edit Organization settings [#edit-organization-settings] Users with admin rights can access the Organization settings by selecting the cogwheel icon  UUID-ce09c8b4-4286-bcd4-de46-a409fac3e748  in the lower-left corner of the main menu. UUID-36341eec-8c91-f393-9f7b-76e31f456174 The **Organization settings** page opens in a new tab. On the left-hand side, you can choose what you want to configure: Organization settings or single sign-on (SSO). In the **Organization settings**, you can do the following actions: * Change the company name. * Force the two-factor authentication (2FA) for the entire organization. UUID-9a8cd25b-049d-f851-70bf-ecdf892972b4 Select **Save** when you've made all the needed changes. To set up single sign-on (SSO), see [Set up single sign-on (SSO)](/docs/help-center/get-started/user-management/set-up-single-sign-on-sso). Switch between Productsup and Retail platforms [#switch-between-productsup-and-retail-platforms] The [Productsup](https://platform.productsup.com/) and [Retail](https://retail.productsup.com/) platforms share the same login. If you use both platforms, you can switch between them using the Projects and Workspaces icons on the side panel on the left. Also, from this panel, you can go to Content Portal. See [Productsup Retail Platform Help Center](https://retail-docs.productsup.com/en/) for end-user documentation. To go to Workspaces or Content Portal: Select the **Workspaces** or **Content Portal** icon in the side panel on the left. UUID-700910a1-ede9-3043-1d21-45b1255d5e55 # Use bulk options to perform actions across multiple sites import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] When working with your data, you may need to perform the same action across multiple sites. To save time, you can use the Bulk Option feature and perform this action once while applying the needed changes across multiple sites in bulk. You can find the Bulk Option feature in the upper ribbon at the organization and project level. If you use it at the organization level, you can apply bulk actions to all sites of your organization. If you use this feature at the project level, you can apply changes only to the sites located within one project. UUID-0825a97e-b71c-6bbe-e850-9210a13f9c13 Full list of available bulk actions [#full-list-of-available-bulk-actions] Productsup offers bulk actions to save time when optimizing your product data across sites. The following bulk actions can affect the site dataflow: * Add Dataflow Boxes * Add Dataflow Connection * Copy Exports * Map Dataflow Boxes from one dataflow * Map import column(s) to multiple exports To mitigate the risks, save a Dataflow version before making any of these bulk actions. See [Manage versions in Dataflow](https://help.productsup.com/en/29493-29497-organize-your-dataflow-columns-and-attributes.html#UUID-29d1496f-2f39-6677-788e-f7daf8528370_section-idm232216577475068). Here is the full list of available bulk actions: | Bulk action name | Description | | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *Activate/Deactivate Sites* | Changes the site status by pausing the chosen sites to let them stop running or making them active again to resume site runs. | | *Add Dataflow Boxes* | Copies rule boxes from a connection in the source site into the same connection in the target sites while overwriting the existing rule boxes in this connection. To copy rule boxes from one site to another, you need to make sure your target sites have the same connection as the one you are copying rule boxes from. | | *Add Dataflow Connection* | Connects attributes between the import and intermediate or the intermediate and export stages in multiple sites. To create a connection between attributes in multiple sites, you need to make sure all the selected sites have the needed attributes in the respective stages.If you need to create a connection in one site only, go to **Dataflow** and add it there. | | *Copy Data Sources* | Copies data sources and their settings from the selected source site to the target sites. | | *Copy Exports* | Copies exports and their settings from the selected source site to the target sites. You can also choose to copy the export's destinations and dataflow. | | *Copy Segments* | Copies Data View segments from the selected source site to the target sites. | | *Delete Exports* | Deletes the chosen exports from the selected site. | | *Delete Sites* | Deletes the selected sites. Be careful while using this bulk action. It deletes the selected sites along with all their data sources, data services, exports, rule boxes, and other settings. | | *Disable Export* | Pauses the chosen export to stop it from sending data to its destinations during the following site runs. | | *Enable Export* | Adds a new export to the chosen sites in bulk. | | *Import* | Starts a partial run in the selected sites to let them import data from the active data sources. | | *Import & Export All* | Starts a full run in the selected sites to let them import, process, and send data to the active export destinations. | | *Map Dataflow Boxes from one dataflow* | Copies the rule boxes of the selected connections into the export of the same template within the same site.If you added two (2) Google Merchant Center exports to your site, you can add and set up the needed rule boxes for one of the Google Merchant Center exports and use this bulk action to copy all the configured rule boxes to the other Google Merchant Center export within this site. To copy rule boxes from one export template to the other, you need to first map all the relevant attributes in the target export template. | | *Map import column(s) to multiple exports* | Connects the selected import-stage attributes to the respective attributes of one or more exports in this site. | | *Move into Project* | Moves the selected sites to a different project. | | *Remove Service Data Source* | Removes the additional data sources created by the added data services while leaving the related data services and their settings intact. | | *Reset Sites* | Removes all product data from the selected sites while leaving all the other site settings intact. If a site has a delta export, the next site run imports all product data from the active data sources, applies the added data optimizations, and then exports all the products in the site to the destination of this delta export. | Set up the needed bulk action [#set-up-the-needed-bulk-action] In this section, you can find the general steps necessary to add a bulk action: Go to the organization or project level and select **Bulk Option** in the upper ribbon.The platform opens a page featuring the first of four (4) steps. UUID-a75fed38-3934-de63-c1a0-2872c8395556 In *Step 1*, choose the site or sites where you want to apply the changes and select **Next Step**. You see the full list of bulk actions only if you select one (1) site in *Step 1*. If you select multiple sites, the platform shows a reduced list of bulk actions in *Step 2*: | - *Activate/Deactivate Sites* - *Add Dataflow Connection* - *Delete Sites* - *Disable Export* - *Enable Export* | - *Import* - *Import & Export All* - *Move into Project* - *Remove Service Data Source* - *Reset Sites* | | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | In *Step 2*, choose the bulk action and select **Next Step**. In *Step 3*, provide more details for the desired bulk action and select **Execute**. If you use **Copy Exports** bulk action in this step, you can choose what you want to copy. Choosing the following options affects the target site's dataflow as follows: * If you choose **Copy import-intermediate**, the platform overwrites the entire import-intermediate stage of the target site's dataflow, including column names, dataflow connections, and rule boxes. * If you choose **Copy intermediate-export**, the platform overwrites the entire intermediate-export stage of the target site's dataflow, including column names, dataflow connections, and rule boxes. UUID-a1398326-170e-8a6b-844a-1893d5177df0 If you aren't sure that you want these changes, save a Dataflow version before making the **Copy Exports** bulk action to have an opportunity to revert to the original dataflow. See [Manage versions in Dataflow](https://help.productsup.com/en/29493-29497-organize-your-dataflow-columns-and-attributes.html#UUID-29d1496f-2f39-6677-788e-f7daf8528370_section-idm232216577475068). In *Step 4*, view the performed changes.You can leave this screen by selecting **Return to organization page**. You can also go to one of the sites where you performed the changes by selecting the name of the needed site. See the following documents for the specific steps to set up the needed bulk action: * [Apply rule boxes in bulk across multiple sites](/docs/help-center/add-a-rule-box/advanced-rule-box-options#section-idm232217535173292) * [Move multiple sites to a different project in bulk](/docs/help-center/get-started/manage-your-organization-projects-and-sites/edit-site-settings#section-idm232209042059852) * [Change the state of multiple sites in bulk](/docs/help-center/get-started/manage-your-organization-projects-and-sites/edit-site-settings#tip-idm243411323387524) * [Reset data for multiple sites in bulk](/docs/help-center/get-started/manage-your-organization-projects-and-sites/edit-site-settings#section-idm232209049596325) * [Delete multiple sites in bulk](/docs/help-center/get-started/manage-your-organization-projects-and-sites/edit-site-settings#section-idm232209057735875) * [Map attributes across multiple sites in bulk](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export#section-idm4605326145878432706744933005) * [Manually importing multiple sites in bulk](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-a-main-data-source-to-import-your-products#section-idm243410997409660) # Set up the Walmart Marketplace Product Creation export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; The Walmart Marketplace Product Creation export lets you create new product listings on Walmart Marketplace and update existing ones directly from Productsup. It connects via the Walmart Marketplace REST API and currently supports the US marketplace. Prerequisites [#prerequisites] Before setting up the Walmart Marketplace Product Creation export, confirm the following: * You have an approved Walmart Marketplace seller account (US) with access to Seller Center. * You are ready to authorize Productsup to access your Walmart account. You do this as part of [Configure the destination](#configure-the-destination) below. Add the export [#add-the-export] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for **Walmart Marketplace - US - Product Creation** and select **Add**. Select the export's name link. Configure the destination [#configure-the-destination] Select **Add Destination** and choose *Walmart Marketplace Products* from the dropdown. Give it a name as desired and select **Save**. In **Authentication**, choose an existing authentication or select **Add New Authentication**. Selecting **Add New Authentication** redirects you to Walmart's authorization page. After you approve access, Walmart redirects you back to Productsup automatically. Toggle **Active** to **On** to activate the destination. Select **Save**. Set up category mapping [#set-up-category-mapping] Walmart has more than 6,700 product types, each with its own required and optional category-specific attributes. Map your product categories to Walmart's categories using a Classification Mapping list so Productsup knows which attributes to make available to you. Not every Walmart category is available in Productsup today. If a category you need doesn't appear when you set up the Classification Mapping list below, contact [support@productsup.com](mailto:support@productsup.com) to request it. Automotive product types that require fitment data (vehicle compatibility submitted as ACES/PIES files) aren't supported. If you sell automotive parts that require fitment, contact your Customer Success Manager before setting up this export. Go to **Lists** from your site's main menu and select **ADD LIST**. Choose **Classification Mapping** and select **Continue**. In **Name**, give your list a desired name. In **Classification**, choose **Walmart Marketplace - US - Product Creation**. In **Stage**, select **Import** to replace your imported categories with the categories accepted by Walmart. In **Attribute**, choose your category attribute from your imported attributes. Select **Add**. Map your categories, pre-populated in the right-hand column, to the corresponding Walmart product categories in the **Replace term** column. Create a new Classification Mapping list every time you change the category attribute in your data source or import new category values into your site. Map attributes in Dataflow [#map-attributes-in-dataflow] Go to **Dataflow** from your site's main menu and select **Walmart Marketplace - US - Product Creation** in the dropdown on the left. Map your category attribute in the import stage to `__category_path` in the intermediate stage. Select `__category_path` in the intermediate stage to add the Classification Mapping rule box. Choose the list you created in [Set up category mapping](#set-up-category-mapping) from the **List** dropdown, and configure **Case Sensitivity** and **On No Match** as needed. Select **Save**. Select **Run** or **Import** in the top-right corner to load your categories and attributes into Dataflow. This first run is expected to fail — no data is exported yet. Its only purpose is to load the Walmart categories and their attributes into Dataflow. Once the run completes, open the **Classifications** dropdown in the top toolbar of Dataflow. It now lists all your mapped Walmart product categories. Refresh the page if the dropdown doesn't appear. Select each category in the **Classifications** dropdown and map its relevant attributes from import to export. Attributes with a fork icon next to their name are specific to the selected category. Set up variants [#set-up-variants] If your products have variants, for example different sizes, colors, or counts of the same product, set up each variant as a separate row. All variants in a group share the same `variantGroupId`. Map the following attributes: | Attribute | Description | | :---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `variantGroupId` | The same value for every item in the variant group. | | `isPrimaryVariant` | Set to *Yes* for exactly one item in the group — typically the top-selling item or the one with the most inventory. This is the item Walmart displays by default. | | `variantAttributeNames` | Up to three attributes that vary within the group, for example *size*, *color*, or *countPerPack*. Each attribute you list here must also be mapped and visible at the export stage, or the submission fails. | For example, a curtain set available in 2 sizes and 6 colors needs 12 rows, all sharing the same `variantGroupId`. Set up swatch images [#set-up-swatch-images] For visual variants such as color, you can provide swatch images that Walmart displays on the item page. Map the following attributes: | Attribute | Description | | :----------------------- | :----------------------------------------------------------------------------------------------------------- | | `swatchVariantAttribute` | The attribute the swatch represents, for example *color*. | | `swatchImageUrl` | The URL of the swatch image for each variant. Walmart recommends a resolution of 100 x 100 pixels at 72 ppi. | Include swatch image URLs on every row when you resubmit variants. Leaving them out can remove existing swatch images from the live listing. Common pitfalls [#common-pitfalls] | Pitfall | What to do | | :----------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | | The first export run fails | This is expected. The first run only loads Walmart's categories and attributes into Dataflow. Map the remaining mandatory attributes and run again. | | The Classifications dropdown doesn't show your categories | Refresh the page after the first run. If categories still don't appear, check that your category attribute is correctly mapped to `__category_path`. | | A category you need isn't in the Classification Mapping list | Contact [support@productsup.com](mailto:support@productsup.com) to request it. | | Variant submissions are rejected | Confirm that every attribute listed in `variantAttributeNames` is also mapped and visible at the export stage. | # Add CJ Affiliate Products Delta API export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; CJ Affiliate is one of the biggest online advertising companies operating worldwide in the affiliate marketing industry. You can use the *CJ Affiliate Products Delta API* export template in Productsup to send your new or updated product data to CJ Affiliate via API. The export uses delta logic, meaning it sends only updated product data instead of the entire catalog. Prerequisites [#prerequisites] To send your products to CJ Affiliate, you need: . An account in CJ Affiliate. Set up CJ Affiliate Products Delta API export [#set-up-cj-affiliate-products-delta-api-export] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *CJ Affiliate Products Delta API*, hover over it, and select **Add**. UUID-9e2f0c31-a0f4-351b-eafb-ba936d758643 Go to **Exports** and select *CJ Affiliate Products Delta API*. Select **Add Destination**. Select *Commission Junction* from the **Destination** dropdown, and choose **Save**. In **Company Id**, enter your CJ Company Id. In **Access Token**, enter your Cj Access Token. Leave the **Feedback Import** toggle **On** to let the platform receive feedback files from CJ Affiliate in case of export errors to troubleshoot the setup. Toggle **Active** to **On** to activate the destination. Select **Save**. UUID-ffbebac1-51be-d9e1-626c-90fbfefc34d3 Go to **Dataflow** from the site's main menu and choose the added export from the dropdown in the top ribbon on the left. Map the attributes from import to export. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) for more information. Your export must have the **AdID** attribute containing the advertiser link IDs for every product from CJ Affiliate. If it is missing in the import file, add it as and additional data source. Or, if only few products are missing the AdIDs, add the attribute in the export stage of the Dataflow and add values using the *Static Value* rule box. See [Add static or dynamic values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/add-static-or-dynamic-values#section-idm243451095539816) to learn how to add a static value. If you want to add many additional images, you must add custom attributes like **additionalImageLink.1** and **additionalImageLink.2**, up to 20 attributes. Each attribute should only contain one image URL. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export#section-idm4605326417364832706742715884) to learn how to add custom attributes. Check your export readiness. See the following section. Check your export readiness [#check-your-export-readiness] Use analyzer tests in Data View to check your data completeness and readiness for export. Go to **Data View** from your site's main menu and select *CJ Affiliate Products Delta API* from the dropdown at the top left-hand side. Select **Full View** in the top ribbon and refresh the Data View page. For each attribute, select **Analyze** to ensure your data meets the CJ Affiliate requirements. Alternatively, select the **Overview** dropdown and choose **Readiness**. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view) for more information. UUID-b12edf76-a2cf-6c9d-7f85-3f5b5a8ac6dc See the core readiness score and correct the data using rule boxes, if needed. UUID-288e1bec-5bb2-f770-0962-1bc383227ffe Once your data is ready, select **Run** in the top-right corner of your view to send your products to CJ Affiliate. You can open the Run log panel  UUID-747bc54c-fc18-5927-c8d7-b2c173ad5d86 to check the export progress. # Add Cdiscount Offers export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Cdiscount is one of the largest e-commerce platforms in France. It offers a various products, including electronics, household appliances, and food. The *Cdiscount Offers* export lets you send pricing and stock updates for items already listed on Cdiscount. You can't send new items with it. You can also synchronize order between Producstup and Cdiscount using the the *Cdiscount Orders* data source and the *Cdiscount Order Shipment Delta API* export. See [Set up order sync for Cdiscount](/docs/help-center/export-data-feeds/special-export-setups/set-up-order-sync-for-cdiscount). Add the Cdiscount Offers export [#add-the-cdiscount-offers-export] You can send your offer updates to the items that are already listed on Cdiscount. Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Cdiscount Offers*, hover over it, and select **Add**. UUID-5b331a9e-0f92-3906-4e2d-9d5c956d79d5 In the *Exports* page, select the name of the added export to set it up. Select **Add Destination**, choose *CDiscount offers* from the dropdown, give it a name as desired, and select **Save**. Enter the seller ID in **Seller ID**. Toggle **Preprod environment** to **On** to send offers to the sandbox environment without affecting live Cdiscount data. You can use Preprod environment only if you requested Octopia to enable it for you in Productsup. Toggle **Active** to **On** to activate the destination. Select **Save**. UUID-f984e11e-683b-a008-3e45-60d991e65629 Go to **Dataflow** from the site’s main menu. Choose your *Cdiscount Offers* from the dropdown on the top left. Connect the attributes from the import to export stages. Cdiscount requires the following mandatory attribute: * **Offer/ProductEan** * **Offer/Price** * **Offer/Stock** * **Offer/SellerProductId** * **Offer/EcoPart** * **Offer/ProductCondition** Ensure each of these attributes has values. The platform won't export the offers with empty attributes to Cdiscount. If your data is ready, select **Run** or **Export this export** in the upper right corner of the page. If you want to receive feedback files, contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) to enable this feature. # Add Magento 2.x Product Export import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Magento 2.x Product Export lets you export products from the Productsup platform to a Magento 2.x instance. Use the Magento Product Export to enhance your data and provide more product information. Add and set up export [#add-and-set-up-export] To add the *Magento 2.x Product Export* in Productsup: Go to **Exports** from your site’s main menu. Select **ADD EXPORT** and search for *Magento 2.x Product Export.* UUID-507fd602-26c8-312a-5795-f50132d00cbb Select **Add** and confirm adding it again as an export. In the export setup, select **Add Destination** and choose *Magento 2 API Product Export* from the drop-down list. Now enter a destination **Name**. UUID-e04357ea-d1e2-ba3c-59e8-59bd811a164a In **Authentication**, choose **Select authentication**. Then choose an available authentication from the drop-down list or select **Add New Authentication**. You can also choose to use pre-existing export tags from another platform in **Authentication**. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems) to set up authentication with another platform. Add your Magento store URL in **Base URL**. Switch **Feedback import** to **On** if you want an error file returned to the platform once your data export finishes. Go to step [10](#N1616685345815) if **Feedback import** is set to **Off**. Choose a column that you want to receive a feedback import file on in **Main feed connection column**. Enter the column that connects to your feedback import in **Feedback file connection column**. Select a **Magento Version** from the drop-down list. Turn on the destination by switching **Active** to **On**. Select **Save**. UUID-a668a1d2-05d5-91fa-2c60-980dc36b6d9a # Add Google Product Inventory Feed (LIA) export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Google Local Inventory Ads (LIA) are Google Shopping ads that provide your customers with up-to-date information on prices, availability, and location of your in-store items. Google Local Inventory Ads (LIA) information is an additional data feed to the Google Merchant Center (GMC) main data feed. Productsup lets you prepare the Google LIA additional data feed using one of the export templates: . The *Google Product Inventory Feed (LIA)* export sends your data to selected destination, such as an SFTP of your choice. We recommend this export for exporting feeds with over 10M items. . The *Google LIA Delta API* export sends your data directly to Google via API. This export sends only the updated items, rather than re-sending the entire catalog. The Google LIA exports are part of the *LIA Module*, available at an additional cost in all platform editions. Contact your Customer Success Manager to discuss adding it to your organization. Productsup still supports the legacy variant of the Google LIA export called *(Legacy) Google Local Product Feed (LIA)*, in case you are already using it. Prerequisites [#prerequisites] Before setting up any Google LIA exports, follow these steps: . Create a Google account and enable your local inventory ads. See Google Local inventory onboarding guide: * [Step 1: Enable local inventory ads or free local product listings](https://support.google.com/merchants/answer/3425157?hl=en\&ref_topic=7023401). * [Step 2: Add your business information](https://support.google.com/merchants/answer/7457386?hl=en\&ref_topic=7023401). * [Step 3: Link your Business Profiles and select your business group](https://support.google.com/merchants/answer/10507042?hl=en\&ref_topic=7023401). * [Step 4: Select a landing page experience for your local inventory ads](https://support.google.com/merchants/answer/10507043?hl=en\&ref_topic=7023401). * [Step 5: Upload a primary feed](https://support.google.com/merchants/answer/10947084?hl=en\&ref_topic=7023401). The Productsup Help Center doesn't bear any responsibility for the accuracy of the information provided in the [Google Local inventory onboarding guide](https://support.google.com/merchants/answer/3540291?hl=en\&visit_id=638112759963254050-2537880770\&ref_topic=7023401\&rd=1). The steps of the guide aim to help you follow the process between the Productsup platform and Google instances. . Have a separate site for GMC in Productsup and set up the *Google Merchant Center* export for your main feed. See [Add Google Merchant Center export](/docs/help-center/export-data-feeds/add-export/add-google-merchant-center-export). If you want to make a product available online only and prevent it from appearing in certain locations, use the **\[excluded\_destination]** attribute. . Set up a new site in Productsup for the Google LIA export. See [Create or copy a site](/docs/help-center/get-started/manage-your-organization-projects-and-sites/create-or-copy-a-site). The GMC feed and the LIA feed must be in different sites. The reason is that the Google LIA data feed can have the same item ID multiple times for every store where the item is available, unlike the GMC feed, which has unique IDs per item. That leads to different settings for the two sites. Add and set up the Google Product Inventory Feed (LIA) export [#add-and-set-up-the-google-product-inventory-feed-lia-export] If you want to prepare and first get your data feed in an SFTP and then manually upload the feed to the Google account, use the *Google Product Inventory Feed (LIA)* export: Go to **Exports** from your Google LIA site's main menu and select **ADD EXPORT**. Search for *Google Product Inventory Feed (LIA)*, hover over the export, and select **Add**. UUID-35c16162-e50d-a212-d37b-4f9949148707 On the Exports page, select the name of the added export to set it up. Select **Add Destination**, choose a necessary destination from the dropdown, give it a name as desired, and then select **Save**. You can choose any destination matching Google's requirements. See [Upload options](https://support.google.com/merchants/answer/188477). Go to the **Settings** tab and ensure that **Product Uniqueness** is unselected to let products repeat multiple times in the data feed for different stores. UUID-16689317-dd63-f557-0784-19379ae658d1 Go to **Dataflow** and map all mandatory attributes for Google Product Inventory Feed (LIA) from import to export. The mandatory attributes are in blue. * **id** shows an individual SKU or item ID. SKUs may appear multiple times in the feed because numerous store locations may have the same items. Ensure that your GMC and LIA feeds use the same ID values. * **store code** shows in which stores customers can find the items. The store code values are case-sensitive and must match the store codes in your Google Business Profiles. See [Google Business Profile](https://www.google.com/business/) for more information. * **availability** shows whether an item is in or out of stock. As of June 15, 2023, the **quantity** attribute is no longer mandatory, while **availability** is required. See [2023 Merchant Center product data specification update](https://support.google.com/merchants/answer/13648265?sjid=11833305773604807122-EU%7Chttps://support.google.com/merchants/answer/13648265?sjid=11833305773604807122-EU%7Csmart-link). UUID-c7420d2d-a98c-98cc-98ff-5f21049a2200 Select **Export** in the top right corner of the page to run the export. Next, finalize the setup process on the GMC side and upload your LIA feed to Google. Finalize your registration in Google and submit LIA data [#finalize-your-registration-in-google-and-submit-lia-data] To finalize the setup process and upload your LIA feed to Google, you must complete your registration in Google Merchant Center. See [Local inventory onboarding guide](https://support.google.com/merchants/answer/3061590?hl=en\&ref_topic=7023401) and follow the steps: * [Step 6b: Create a local product inventory feed - Step 3: Upload your local products inventory feed](https://support.google.com/merchants/answer/7023001?hl=en\&ref_topic=7023401) * [Step 6c: Verify your About page (Austria, Germany, and Switzerland only)](https://support.google.com/merchants/answer/3061590) * [Step 7: Request inventory verification](https://support.google.com/merchants/answer/7455784?hl=en\&ref_topic=7023401). * [Step 8: Link your Merchant Center and Google Ads accounts (local inventory ads only)](https://support.google.com/merchants/answer/7022488?hl=en\&ref_topic=7023401). * [Step 9a and 9b: Enable local products in your Shopping campaigns](https://support.google.com/merchants/answer/10506537?hl=en\&ref_topic=7023401). Add and set up the Google LIA Delta API export [#add-and-set-up-the-google-lia-delta-api-export] Alternatively, if you want to send your data directly to Google via API, use the *Google LIA Delta API* export: Go to **Exports** from your Google LIA site's main menu and select **Add export**. Search for *Google LIA Delta API*, hover over the export, and select **Add**. UUID-ccc2fb78-9fcf-b13b-9882-8b8c5ca895d2 On the Exports page, select the name of the added export to set it up. Select **Add Destination**, choose *Google LIA Delta Export* from the dropdown, give it a name as desired, and then select **Save**. Enter your Google Merchant Center account ID in **Account ID**. Select **Add New Authentication** or choose a previously created authentication from the **Select authentication** dropdown. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems) to set up authentication with another platform. Enter your merchant ID in **Merchant ID** to send data directly to the selected Merchant Center account. If you have a multi-client Merchant Center account, enter the ID of the relevant sub-account. If you have several sub-account, you must add and set up a separate export for each of them. Leave **Feedback Import** on **On** if you want to receive a response directly from GMC in case of any export failures. Toggle **Active** to **On** to activate the destination. Select **Save**. Go to **Dataflow** and map all mandatory attributes for Google LIA from import to export. The mandatory attributes are in blue. * **productId** shows a unique item identifier. * **price.value** shows the price of an item. * **price.currency** contains the currency code for the price, following ISO currency standards such as *USD* or *EUR*. * **availability** indicates whether the item is in stock. * **storeCode** contains the code of the specific local store. * **language** shows the code of the language used to display information about an item, such as *en* for English. * **country** contains the code of the country where the store is located. * **merchantID** shows the unique identifier of the Google Merchant Center account. UUID-6b3df7cf-b172-a935-166b-2f456a8c0061 Select **Export** in the top right corner of the page to run the export. # Add Digitec Galaxus export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Digitec Galaxus is the largest online retailer in Switzerland that operates two online shops called digitec and Galaxus and runs several physical outlets across different German- and French-speaking parts of the country. The digitec store primarily focuses on selling electronics, while Galaxus offers a broader array of products spanning household, DIY, sports, office, fashion, and other categories of goods. Prerequisites [#prerequisites] . An established partnership with Digitec Galaxus. See [Join our merchant programme!](https://www.galaxus.ch/en/page/join-our-merchant-programme-12462). . An FTP server account and connection data.Digitec Galaxus supports submitting all product data to their marketplace through an FTP server. See [Data Transmission](https://confdg.atlassian.net/wiki/spaces/PI/pages/168665885047/Product+Data) for more info on establishing your FTP server access and contact Digitec Galaxus to get your FTP connection data. Digitec Galaxus exports in Productsup [#digitec-galaxus-exports-in-productsup] There are four separate Digitec Galaxus exports in the Productsup platform: Stammdaten, Verfügbarkeit und Preis, Eigenschaften, and Zubehör. Each of these exports contains different sorts of data that you can submit to the Digitec Galaxus marketplace. Stammdaten, Verfügbarkeit und Preis, and Eigenschaften are obligatory exports that you must set up to send your products to Digitec Galaxus. The Zubehör export is optional. Digitec Galaxus - Stammdaten export [#digitec-galaxus---stammdaten-export] The Stammdaten export contains all basic product data, such as product ID, GTIN, category, product description, product title, image URLs, etc. This export can contain German, French, Italian, and English product data. Language variations of attributes' names end with a corresponding language code: `_DE`, `_FR`, `_IT`, `_EN`. Digitec Galaxus - Verfügbarkeit und Preis export [#digitec-galaxus---verfügbarkeit-und-preis-export] The Verfügbarkeit und Preis export contains data on stock levels and prices for every product from the Stammdaten export. Digitec Galaxus - Eigenschaften export [#digitec-galaxus---eigenschaften-export] The Eigenschaften export enriches your product data with attributes relevant for the customer, such as product color, size, material, features, technical details, etc. This export can contain German, French, Italian, and English product data. Language variations of attributes' names end with a corresponding language code: `_DE`, `_FR`, `_IT`, `_EN`. The Eigenschaften export requires a separate row for every attribute of a product, which is why the CSV output file contains as many rows for each product as the number of German attributes that product has. Every row in the output file contains the following columns: UUID-a2be22f1-ade8-2b0d-ef45-67f3b25f186d * `ProviderKey` - This is the product ID. * `SpecificationKey` - This is the ID of the product attribute described in this row. * `SpecificationGroup_LanguageCode` - This is the attribute group to which the attribute described in this row belongs. For example, if a row describes the attribute height, its attribute group can be dimensions. You can specify your attribute group in multiple languages. * `SpecificationKey_LanguageCode` - This is the attribute's name. You can specify it in multiple languages. * `SpecificationValue_LanguageCode` - This is the attribute's value. You can specify it in multiple languages. Currently, Productsup doesn't support the columns `SpecificationKey` and `SpecificationGroup_LanguageCode` because they aren't mandatory for the Eigenschaften export. Productsup leaves them blank in the output file without affecting the overall success of exporting products to Digitec Galaxus. Digitec Galaxus - Zubehör export [#digitec-galaxus---zubehör-export] The Zubehör export is optional. You don't have to set it up in Productsup to send your products to the Digitec Galaxus marketplace. However, you can set it up to supplement your products from the Stammdaten feed with related items that customers can buy as accessories to those products. This export has only two attributes: `ProductKeyMainProduct` and `ProductKeyAccessoryProduct`. Add and set up the exports [#add-and-set-up-the-exports] To add the Digitec Galaxus exports to Productsup, follow these steps for each export. The Stammdaten, Verfügbarkeit und Preis, and Zubehör exports have the same setup process, while the setup of the Eigenschaften export has some differences outlined in notes throughout the steps. Go to **Exports** from your site’s main menu. Select **ADD EXPORT** and search for *Digitec Galaxus - Stammdaten*, *Digitec Galaxus -Verfügbarkeit und Preis*, *Digitec Galaxus - Eigenschaften*, or *Digitec Galaxus - Zubehör*. UUID-1e218f6c-ee8b-bf60-e888-399768068bdc Select **Add** on the needed channel, give it a custom name if you desire, and again select **Add**. Select **Add Destination** and choose *SFTP/FTP/FTPS Server* from the drop-down list. Enter a custom name as desired in **Name** and select **Save**. In the destination setup, select the needed protocol in **Protocol**, enter your connection data in **Host**, **Username**, **Password**, and **Directory**, select **On** in **Active**, and then select **Save**. See [Export your data to an FTP, SFTP, or FTPS server](/docs/help-center/export-data-feeds/set-up-an-export-destination/add-an-ftp-sftp-or-ftps-destination) for more details. UUID-02f61a68-a84a-c8bd-f25c-6e7053a1a498 For export testing purposes, you can select **Add Destination** once more and choose *Productsup Server* from the drop-down list, enter a custom name as desired in **Name**, and select **Save**. Using this destination, you can look at your output files before sending them to Digitec Galaxus. For the Eigenschaften export, don't add any destination and skip Step 3 altogether. This export doesn't require any destination because of the writer class added in Step 4. This step is relevant for the Eigenschaften export only.Go to the *Labels, Tags & Sorting* tab on the channel setup page. In the **Export Tags** panel, find the **Key** field and add `custom_csv_writer_class`. In **Value**, add `ProductsUp_Csv_File_Writer_DigitecGalaxus_VollstandigeEigenschaften`. Select **Add Tag** and then select **Save**. In Dataflow, Productsup maps the mandatory attributes of the export stage with their respective attributes in the intermediate stage automatically. If you want to map non-mandatory attributes, you must do it manually.Go to **Dataflow** and select the needed export in the drop-down menu on the left. Check that your import stage has the information required for the relevant export attributes. If not, add the needed information to your data source and trigger an import by selecting **Import** in the upper-right corner of your view in **Dataflow**. The Eigenschaften export in **Dataflow** automatically creates two attributes in the export stage: `ProductKey` and `ProviderKey`. To set up your export properly, you need to add the rest of the relevant attributes to the export stage manually.The attributes you add here should be the product attributes you want to display on Digitec Galaxus, such as color, brand, size, etc. Later, the writer class you added in the channel setup restructures products and attributes in the output file featuring the `SpecificationKey_LanguageCode` and `SpecificationValue_LanguageCode` columns.To add an attribute to the export stage in Dataflow: 1. Go to **Dataflow** from your site's main menu 2. Select **Drop or Click to add new field** under the export stage 3. Give the attribute a name 4. Select **Save** UUID-ccfed459-faf9-9155-2358-d76bd817c2ce Mind that Productsup follows specific attribute naming rules while processing the export. Make sure to: * Use the language codes `_FR`, `_IT`, `_EN` at the end of attribute names in French, Italian, and English, respectively. * Use either the language code `_DE` or no language code at all at the end of attribute names in German. The minimum requirement for the Eigenschaften export to work is one (1) attribute in German per row. Once you have all the needed information in the import stage and all relevant attributes in the export stage, select the node of a chosen attribute in one stage and drag a line from that node to the node of a corresponding attribute in the next stage to map the attributes. You should map all relevant attributes from import to intermediate and then from intermediate to export. # Add Amazon Inventory and Price Update SP-API export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; The *Amazon Inventory and Price Update SP-API* export lets you send updates on inventory and prices for the items on Amazon. This API-based export uses delta files, sending only new, updated, and deleted items to Amazon instead of the entire catalog. See [Add Amazon Seller Central – Product Creation (US) export](/docs/help-center/export-data-feeds/add-export/add-amazon-seller-central-product-creation-us-export) to learn more about the Amazon ecosystem in Productsup. Prerequisites [#prerequisites] Before adding the *Amazon Inventory and Price Update SP-API* export in Productsup, you need to: . Create an Amazon seller account. You need to provide your account data to Productsup to connect to Amazon via the Selling Partner API. . Upload your data to Amazon. . Import your inventory and price updates to Productsup. Add and set up Amazon Inventory and Price Update SP-API export [#add-and-set-up-amazon-inventory-and-price-update-sp-api-export] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Amazon Inventory and Price Update SP-API*, hover over it, and select **Add**. On the Exports page, select the name of the added export to set it up. Select **Add Destination** and choose *Amazon Price & Inventory export* from the drop-down list, give it a name as desired, and select **Save**. UUID-191b9bb5-91c5-cdb0-51ac-2f3c27d7538d In **Authentication**, choose the Amazon authentication you previously set up in your organization, project, or site. If you haven't set up Amazon authentication yet, perform the following steps: 1. Select **Add New Authentication**. UUID-6c723739-f030-e9c5-8e46-70795b0e4af4 2. Select *Amazon Authentication (BETA version by Amazon)* in **Type**. You can optionally give your authentication a name. 3. Select **Next**. 4. If applicable, select **Region** and **Country** to choose your marketplace country and locale. 5. Select **Connect**. Before proceeding, Productsup redirects you to Amazon to finalize your authentication. After completing the authentication setup, Amazon redirects you back to Productsup. 6. Close the confirmation window to proceed. Choose the market of interest in **Marketplace ID**. Enter your merchant token from your Amazon seller account in **Seller ID**. Switch **Active** to *On* to activate the destination. Select **Save**. Next, map the attributes for the export. See the following section. Map the attributes to Amazon Inventory and Price Update SP-API export [#map-the-attributes-to-amazon-inventory-and-price-update-sp-api-export] To update price and inventory using JSON-based feeds, you must map mandatory attributes from the import to export stage in Dataflow. Go to **Dataflow** from your site's main menu and select *Amazon Inventory and Price Update SP-API* in the drop-down menu on the left. Map all mandatory attributes from import to export: * **SKU** is a unique identifier to track and manage your inventory. * **FulfillmentCenterID** is the name of the fulfillment channel. Possible values are `DEFAULT (MFN)`, `AMAZON_NA (FBA)`, `AMAZON_EU (FBA)`, and `AMAZON_JP (FBA)`. Depending on your fulfillment method, the mapping should be as follows: * MFN (Merchant Fulfilled Network) is a shipping method where you list your items on Amazon international marketplaces and choose to ship them by yourself to each customer.If MFA is your fulfillment method, unmap the **FulfillmentCenterID** attribute. The platform will automatically consider the `DEFAULT (MFN)` value for this attribute. * FBA (Fulfillment by Amazon) is a service that lets you outsource order fulfillment, including storage, packing, and shipping, to Amazon.If FBA is your fulfillment method, map the **FulfillmentCenterID** attribute containing your fulfillment method as a value. It's impossible to switch from MFN to FBA and back by changing the attribute's values. First, you need to change your fulfillment method in your Amazon account and only then adjust the feed in Productsup. See [List products for Fulfillment by Amazon](https://sellercentral.amazon.com/help/hub/reference/external/200141220?initialSessionID=144-0577865-4577356\&ld=NSGoogle\&pageName=US%3ASD%3AFBA-main) for mote information. * **Quantity** is the MFN quantity available for fulfillment. * **StandardPrice** is a standard price when you haven't scheduled any discounted price. * **StandardPrice.currency** is the currency of the **StandardPrice** attribute. Optionally, you can map the following attributes: * **RestockDate** is the date when an item will be available again. The date format should be `yyyy-mm-dd`. * **FulfillmentLatency** is the handling time for MFN fulfillment. The format is the number of days. * **Available** shows `true` or `false` for the MFN inventory instead of providing a quantity value. Map either **Available** or **Quantity**. You can't map both; otherwise, you will get an error from Amazon. * **MinimumSellerAllowedPrice** is the minimum price for automated pricing. * **MaximumSellerAllowedPrice** is the maximum price for automated pricing. * **Sale.StartDate** and **Sale.EndDate** contain the discounted price start and end dates. The date format is `yyyy-mm-dd`. * **Sale.SalePrice** is a discounted price. If your data is ready, select **Run** or **Export** in the upper right corner of the page. If you don't want to run the entire site, including all active exports set up in it, you can go to **Exports**, select the Amazon Inventory and Price Update SP-API export, and then choose **Export this export**. # Add Meta Shops Ads exports to sell your products on Meta import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Meta Shops Ads are the new shopping format where Meta owns the checkout experience and lets social media users shop, order, and pay directly in the Meta apps. This leads to a smoother shopping experience, higher conversion rates, and more transparent ad performance, which yields a higher return on ad spend. Meta Shops Ads are currently in closed beta testing in the US. The general release of the new ads is due in mid-2023 in the US. There are currently no plans to expand Meta Shops Ads to countries other than the US. To support customers interested in selling products in the US via the new Meta Shops Ads, Productsup has built an ecosystem that sends product and order data to Meta Shops Ads: . *Meta Shops Ads Main*Meta requires receiving your full product catalog every 24 hours and your product data updates every hour. This API-based export uses the destinations *Meta Shops Ads: Data Feed* and *Meta Shops Ads: Delta Upload* to send your full product catalog or product data updates to Meta Shops Ads and meet these requirements. . *Meta Shops Ads - Price & Stock Update*Meta requires receiving your price and stock updates every 15 minutes. This API-based export sends your products' price and stock changes to Meta to meet this requirement. . *Meta Shops Ads - Order Import*This data source imports order data from Meta to let you send it to your order management system. When you import an order from Meta into Productsup, the order status on Meta changes from `CREATED` to `IN_PROGRESS`. . *Meta Shops Ads - Order Fulfilment Export*When your orders have the status `IN_PROGRESS`, you can send shipment and tracking information to Meta using this API-based export. You can notify customers of full and partial shipments. A partial shipment of the order means that not all of the ordered items are in one shipment. You receive a payment transfer from Meta when you confirm the order's shipment and send the corresponding tracking details to Meta. . *Meta Shops Ads - Order Cancellation Export*If you can't accept and ship an order, you can send cancellation information to Meta using this API-based export. You can cancel orders fully or partially. A partial cancellation means that some products in the order are still going to be shipped. Only orders with the status `IN_PROGRESS` can be canceled. . *Meta Shops Ads - Order Refund*If you need to refund an order that you have already shipped, you can send refund information to Meta using this API-based export. You can refund only orders with the status `COMPLETED` or `IN_PROGRESS`. Refunds can be full or partial. The Meta Shops Ads ecosystem in Productsup doesn't manage ads. It only helps you send the needed product and order updates to Meta. You need to manage your ads on Meta. To send your product and order data to Meta Shops Ads, you need to set up this ecosystem in the following order: *Meta Shops Ads Main*. See [Send your full product catalog and its updates to Meta](#section-idm4578928862486433696783562844). *Meta Shops Ads - Price & Stock Update*. See [Send your price and stock updates to Meta](#section-idm4635650123020833696783840529). *Meta Shops Ads - Order Import*. See [Import orders from Meta](#section-idm241684839243865). All exports dealing with order data. See [Send order data to Meta](#section-idm243369678487728). Prerequisites [#prerequisites] The entire Meta Shops Ads ecosystem in Productsup is currently available to a limited number of customers only. If you want to gain access to it, reach out to your Customer Success Manager or contact [support@productsup.com](mailto:support@productsup.com). To set up the Meta Shops Ads ecosystem in Productsup, you need: . A project in your Productsup organization where you are going to create multiple sites pushing and pulling data from Meta. In this separate project, you need to create a separate site for each Meta Shops Ads export. The data source *Meta Shops Ads - Order Import* should also have a separate dedicated site. A separate project for all Meta Shops Ads sites is a recommended option. If it doesn't fit your overall organization structure, you can ignore this advice.However, splitting all product-data exports into separate sites is mandatory to keep your setup easy to manage and let you set up the needed site-running schedules. . A Facebook account. . A commerce account ID that you can find in Commerce Manager on Meta. . A catalog ID that you can find in Commerce Manager on Meta. . A Meta Shops Ads authentication created on the project or organization level to use it across all Meta Shops Ads sites. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems) for more information.Add this authentication as follows: 1. Go to **Authentication** from your organization's or project's menu and select **ADD AUTHENTICATION**. 2. In **Type**, select *Meta Shops Ads Authentication*, give it a custom name as desired, and select **Next**. 3. In **CMS ID**, enter your commerce account ID. UUID-aa020694-87c8-b38e-e85d-770e952cf73f 4. In **Business Name**, enter your business's name as displayed on Meta. 5. Select your location's timezone and currency in the respective fields. 6. Select **Connect** for Productsup to redirect you to a Meta account page where you can give Productsup access to your Meta account. Follow the instructions on Meta to connect the systems. On the *Open your shop* screen, uncheck the box **Facebook ads** to skip creating an ad account and pixel on Meta. 7. Once ready, select **Done** to let Meta redirect you back to Productsup. Close the confirmation window in Productsup to proceed. Add exports to send product data to Meta [#add-exports-to-send-product-data-to-meta] Productsup should be your source of truth for product data. Creating and managing products on Meta directly can cause errors on Meta's site when you run exports in Productsup. Send your full product catalog and its updates to Meta [#send-your-full-product-catalog-and-its-updates-to-meta] According to the Meta Shops Ads requirements, you need to send your full product catalog to Meta once every 24 hours and all product data updates (delta files) once every hour. To set up different scheduling for the full catalog and delta exports, create two (2) separate sites in your Meta Shops Ads project. Full product catalog [#full-product-catalog] One of the sites you created in your Meta Shops Ads project is going to send your full product catalog to Meta. Open this site and follow these steps: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Meta Shops Ads Main*, hover over it, and select **Add**. UUID-8cd267c8-7def-c065-c1df-acbd73fb15b1 On the Exports page, select the name of the added export to set it up. Select **Add Destination**, choose *Meta Shops Ads: Data Feed* from the drop-down list, give it a name as desired, and then select **Save**. UUID-ba9c77ff-95cb-4420-575c-82ea8a2c1c36 In **Product Catalog ID**, enter the catalog ID of your relevant catalog in Commerce Manager. In **Feed Name**, enter the name that Meta should display in Commerce Manager as the name of your product catalog. Toggle the **Compression** button to *On* if you want the site to export your feed as a *.zip* file. In **Authentication**, select the Meta Shops Ads authentication you have added to your Productsup organization or project. Toggle the **Active** button to *On* to activate the destination. Select **Save**. Go to **Lists** and add two (2) lists: 1. Add a Partner Taxonomy Mapping list to map your categories to the expected Google category taxonomy by selecting **ADD LIST** and choosing **Partner Taxonomy Mapping**. Then, select **Continue**. 2. Add a Classification Mapping list to map your categories to Meta's categories by selecting **ADD LIST** and choosing **Classification Mapping**. Then, select **Continue**. Give each list a desired name, select **Google MC - US** in **Taxonomy** or **Meta Shops Ads Main** in **Classification**, and choose **Import** in **Stage**. | UUID-0c34cf6f-97d7-3e51-dc9f-f14653957142 | UUID-2cf0ccea-ff28-dfed-6cdb-628b1ee45a39 | | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | In both list types, select the **Attribute** field to choose the attribute in your import stage that contains your products' category data. Then, select **Add** at the bottom of the page to add the list. In both list types, go through all the values of your category column and select corresponding Google or Meta categories in the **Replace term** column. UUID-c2f3e530-53c5-c709-5844-a3ee7a04273b Go to **Dataflow** and select **Meta Shops Ads Main** from the drop-down menu on the left. Map all the needed attributes from import to export. The attributes list you see in the export stage is relevant for products of all your categories. Map your import-stage category attribute to both `category_path` and `google_product_category` in the intermediate stage to add the needed rule boxes and apply the lists. Add rule boxes to apply your created lists to the needed attributes: 1. Select `google_product_category` in the intermediate stage and open the **Select an Option** drop-down menu on the right to find and add the rule box **Taxonomy Mapping**. Choose your Partner Taxonomy list in **List** and select **Save**. 2. Select `category_path` in the intermediate stage and open the **Select an Option** drop-down menu on the right to find and add the rule box **Classification Mapping**. Choose your Classification Mapping list in **List** and select **Save**. To let the site display your category-specific attributes in Dataflow, select **Run** in the top-right corner of your view. This run will fail because you haven't yet mapped all the mandatory attributes, so no data export occurs at this stage. The aim of the run is to import the needed categories and attributes in Dataflow. Once the site run finishes, the **Classifications** drop-down menu appears in the upper ribbon in Dataflow. Select each category in this drop-down menu to let Dataflow display the relevant category-specific attributes in the export stage. Map all the needed attributes from import to export. UUID-851628c1-299a-3792-c36e-44bb28a60f66 If you can't see the **Classifications** drop-down menu when the site run finishes, try refreshing your page. Go to **Scheduling** and add a schedule to run your site every 24 hours.See [Set up scheduling and triggering processes in Scheduling](/docs/help-center/dashboard-and-monitor/set-up-scheduling-and-triggering-processes-in-scheduling) for more information. UUID-591a7d68-add3-9517-9e3d-593f31df5f14 Once all the settings are ready, you can send your product data to Meta. Start a site run manually by selecting **Run** in the top-right corner of your view or let your added schedule perform your first site run automatically at the defined time. Delta files [#delta-files] The other site you created in your Meta Shops Ads project is going to send product data updates (delta files) to your Meta account. Open it and repeat all the steps you just took in the site that exports your full product catalog. Keep in mind the following modifications: * In [see the relevant section](#N1685026414810), choose the destination *Meta Shops Ads: Delta Upload*. UUID-fd7114eb-e739-ed4b-be13-a010953eb42e * Skip [see the relevant section](#N1685027038044) and [see the relevant section](#N1685027088633). * In [see the relevant section](#N1685027672771), add a schedule to run your site every hour instead. UUID-a170a16a-e2bc-1b92-cdf7-2af70bbba12a Send your price and stock updates to Meta [#send-your-price-and-stock-updates-to-meta] According to the Meta Shops Ads requirements, you need to send your price and stock updates to Meta every 15 minutes. Create a separate site in your Meta Shops Ads project and follow these steps: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Meta Shops Ads - Price & Stock Update*, hover over it, and select **Add**. UUID-fbcdbb91-1e34-e9ed-95b3-1df392b31d9d On the Exports page, select the name of the added export to set it up. Select **Add Destination**, choose *Meta Shops Ads - Stock and Price Delta Export v1 - DEV* from the drop-down list, give it a name as desired, and then select **Save**. UUID-c501711e-5419-ff73-b794-77fc855558f8 In **CMS ID**, enter your commerce account ID. In **Product Catalog ID**, enter the catalog ID of your relevant catalog in Commerce Manager. In **Authentication**, select the Meta Shops Ads authentication you have added to your Productsup organization or project previously. Toggle the **Feedback Import** button to *Off* if you don't want the platform to receive feedback files from Meta.This feature is active by default to let Productsup receive a feedback file from Meta's Graph API in case of errors. This helps to troubleshoot the export setup. Toggle the **Active** button to *On* to activate the destination. Select **Save**. Scroll down on the export setup page to find the *Delta Files* section. Select **Update Files** and then select **Save** to add delta files to your export. Go to **Dataflow** and select **Meta Shops Ads - Price & Stock Update** from the drop-down menu on the left to map all the needed attributes from import to export. Go to **Scheduling** to let your site run every 15 minutes. See [Set up scheduling and triggering processes in Scheduling](/docs/help-center/dashboard-and-monitor/set-up-scheduling-and-triggering-processes-in-scheduling) for more information. To set up a scheduling interval of 15 minutes, create four (4) schedules with the following setup in **Quick selection** and **Hour(s)**: UUID-8d8673bd-befe-b15a-355c-fcbdf3d75a12 In **Minutes**, uncheck the **Random** box and enter `00`, `15`, `30`, and `45` in the four schedules respectively. Once all the settings are ready, you can send your price and stock updates to Meta. Start a site run manually by selecting **Run** in the top-right corner of your view or let the schedules perform your first site run automatically at the defined time. Import orders into Productsup and send order data to Meta [#import-orders-into-productsup-and-send-order-data-to-meta] Import orders from Meta [#import-orders-from-meta] You can sync your Meta orders with your order management system, such as Shopify, via Productsup. Create a separate site in your Meta Shops Ads project and follow these steps: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Meta Shops Ads - Order Import*, select **Add**, give it a name as desired, and then choose **Continue**. UUID-d7a7980a-3ba1-44d5-409f-5ad53b2e016f In **CMS ID**, enter your commerce account ID. If you want to import orders created within a specific timeframe only, enter the desired dates in **Updated before** or **Updated after**. The expected input format is *YYYY-MM-DD*. If you want your Productsup site to import orders with specific statuses only, enter them in **Order state** and separate them with commas.The supported order statuses are: 1. `FB_PROCESSING` 2. `CREATED` 3. `IN_PROGRESS` 4. `COMPLETED` See [Commerce Platform Overview](https://developers.facebook.com/docs/commerce-platform/order-management/overview#order_state) for more information on order statuses and the order flow. To import specific types of orders only, enter them in **Order filter** and separate them with commas.The supported order types are: 1. `no_shipments` imports orders that you haven't shipped yet. 2. `has_cancellations` imports orders that contain canceled items. 3. `no_cancellations` imports orders that contain no canceled items. 4. `has_refunds` imports orders that contain refunded items. 5. `no_refunds` imports orders that contain no refunded items. In **Authentication**, select the Meta Shops Ads authentication you have added to your Productsup organization or project previously. Specify the desired name of the data source in **Description (optional)**. Select **Save**. Go to **Exports** from your site's main menu and select **ADD EXPORT**. Find your order management system, add it as an export, set it up, and map the needed attributes in Dataflow. Choose **Run** in the upper-right corner of the page to let the site import your order data and send it to your order management system. When you import an order from Meta into Productsup, the order status on Meta changes from `CREATED` to `IN_PROGRESS`. Send order data to Meta [#send-order-data-to-meta] To send shipment, cancellation, and refund data to Meta, create three (3) separate sites in your Meta Shops Ads project and follow these steps to add the needed export in each site: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Meta Shops Ads - Order*, hover over one of the following exports, and select **Add**: 1. *Meta Shops Ads - Order Cancellation Export* 2. *Meta Shops Ads - Order Fulfilment Export* 3. *Meta Shops Ads - Order Refund* UUID-7daf18cc-35ea-c6be-0dc4-b1d648afd4b4 Select the name of the added export and choose **Add Destination** to add and set up the following export destinations: 1. For the export *Meta Shops Ads - Order Cancellation Export*, choose the destination *Meta Shops Ads - Order Cancellation Export*. 2. For the export *Meta Shops Ads - Order Fulfilment Export*, choose the destination *Meta Shops Ads - Order Fulfilment Export*. 3. For the export *Meta Shops Ads - Order Refund*, choose the destination *Meta Shops Ads - Order Refund*. Change the names of the added destinations as desired and select **Save**. On the setup page of each destination, take these steps: 1. In **CMS ID**, enter your commerce account ID. 2. In **Authentication**, select the Meta Shops Ads authentication you have added to your Productsup organization or project previously. 3. Toggle the **Feedback Import** button to *Off* if you don't want the platform to receive feedback files from Meta.This feature is active by default to let Productsup receive a feedback file from Meta's Graph API in case of errors. This helps to troubleshoot the export setup. 4. Toggle the **Active** button to *On*. 5. Select **Save**. Go to **Dataflow** from the site's main menu. Choose the added Meta Shops Ads exports in the drop-down menu on the left and map the following attributes from import to export: | Export name | Export-stage attributes | | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *Meta Shops Ads - Order Cancellation Export* | The full list of export-stage attributes: - `facebook_order_id` - `quantity` - `reason_code`See [Cancel order](https://developers.facebook.com/docs/commerce-platform/order-management/cancellation-refund-api#reason_code) for a list of accepted cancellation reason codes. - `reason_description` - `restock_items` - `retailer_id` If you do a full cancellation, the order status on Meta changes to `COMPLETED`. If you cancel an order partially, the order status stays `IN_PROGRESS` until shipped. | | *Meta Shops Ads - Order Fulfilment Export* | The full list of the mandatory export attributes: - `facebook_order_id` - `item_quantity` - `item_retailer_id` - `tracking_carrier` - `tracking_number` - `fulfillment_location_id` or all of the following: The platform doesn't highlight these attributes as mandatory because they are conditional. Meta requires either `fulfillment_location_id` or the full following list. - `address1` - `address2` - `city` - `country_code` - `postal_code` - `province_code` - `state` - `zip` | | *Meta Shops Ads - Order Refund* | The platform doesn't highlight the attributes listed below as mandatory because they depend on your refund type. To refund an order in full, you need to send only two (2) attributes to Meta: - `facebook_order_id` - `reason_code`See [Refund order](https://developers.facebook.com/docs/commerce-platform/order-management/cancellation-refund-api#refund_reason_code) for a list of accepted refund reason codes. To refund an order partially, you need to send either this list of attributes: - `deduction_type` - `deduction_amount` - `shipping_refund.amount` - `shipping_refund.currency` - `retailer_id` - `item_refund_amount.amount` - `item_refund_amount.currency` Or this one: - `deduction_type` - `deduction_amount` - `item_refund_quantity` If you plan to do both full and partial order refunds, you should create two (2) separate sites for the export *Meta Shops Ads - Order Refund* and set up the full and partial refund flows separately. | If your data is ready, select **Run** in the upper-right corner of your view to send order data to Meta. In your order data sites, the feed structure is product-based, meaning that every row is a product. If an order contains multiple products, those products have the same `facebook_order_id` or `tracking_number`. Based on a unique identifier like this, the site groups all products belonging to one order during export and sends notifications to customers about the order or shipment on the whole, and not about separate items in them. # Migrate your Google Content API for Shopping export to the multi-threading destination import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Productsup has implemented the multi-threading feature that lets you export the feed updates up to 6 times faster than before. Previously, you could only use the single-thread approach with destinations such as **Google Content API for Shopping** and **Google Content API for Shopping (single account)** and send updates to Google Merchant Center (GMC) in one bucket one by one. Therefore, for large feeds, the export could take hours. The multi-threading feature lets the platform combine the updates into multiple buckets and then send them to GMC in parallel. Benefits of multi-threading feature for you: . Faster export of product feed updates to GMC. For example, the live tests showed that, with multi-threading, the platform exported updates for 2.6 million products in 1,5 instead of 9 hours. . Possibility to schedule more frequent updates as the export takes less time. The number of updates still shouldn't exceed the defined quota limit. . The import or export schedules that depend on the completion of the export *Google Content API for Shopping* can also start earlier than before. Adjust schedule settings if needed. To let you use the multi-threading feature, we implemented a new destination **Google Content API (single account + multi-thread)**. UUID-d02ebd8b-7218-2751-4b6b-8e6c7e75b3fa The new destination with the multi-threading feature is available for you only if you upload your product feeds to Google Merchant Center via API and for that purpose currently use the export **Google Content API for Shopping** with the destinations such as **Google Content API** or **Google Content API (single account)**. The multi-threading destination isn't available to the export **Google Merchant Center** that uses destinations such as **Productsup Server**, **Google Merchant Center FTP**, and **Google Merchant Center SFTP**. Migrate your existing Google Content API for Shopping to the multi-threading destination [#migrate-your-existing-google-content-api-for-shopping-to-the-multi-threading-destination] You need to migrate your exports to the multi-threading destination by *May 1, 2024*. You can plan to do it at a time and pace comfortable for you. If you don't migrate your exports by May 1, 2024, Productsup will migrate them automatically. The destination *Google Content API for Shopping (single account)* will no longer be available in the platform. To migrate your **Google Content API for Shopping** export to the multi-threading destination: Go to **Exports** from the main menu of the site that contains your *Google Content API for Shopping* export. On the *Exports Overview* page, select your currently active export *Google Content API for Shopping*. UUID-cbed78f2-bf26-e647-8b8e-072f308860a1 Select **Add Destination**, choose **Google Content API (single account + multi-thread)** from the **Destination** drop-down list, leave the default name in **Name**, and then select **Save**. UUID-d02ebd8b-7218-2751-4b6b-8e6c7e75b3fa Configure your destination: In **Merchant Center ID**, add the ID of your GMC account. This ID should be the same Merchant Center ID as in the previous destination. You can go to the export **Overview** page, select **Setup** the previous destination **Google Content API (single account)**, and copy the ID from the **Merchant Center ID**. UUID-b73fa95f-dda4-354e-4f23-2d04afa69bd2 With the new multi-threading destination, you don't need Merchant Center Parent ID anymore. In **Target Country** and **Target Language**, select the same values as in the previous destination. In **Authentication to use**, select the same authentication as in the previous destination. Switch **Enable Error Log File** to **On**. This option lets you view the details of the issues during the recent runs in *Error Log*. Switch **Active** to **On** to activate the destination. Select **Save**. You may leave all other fields with the default settings. Go back to the *Overview* tab of the export *Google Content API for Shopping* and select the **Settings** tab. UUID-fdae540f-ece7-c62c-0805-61c69bed0b7f Select **;SEMICOLON** in the **CSV Separator** drop-down menu and select **Save**. UUID-9bfb8a36-e179-17dc-086a-da4f4d816a09 Go back to the **Overview** tab and deactivate the previous destination: Select **Setup** for the previous destination. UUID-3a1475e0-f9ca-01a6-debf-647b63452b65 Switch **Active** to **Off**. Select **Save**. Select **Export this export** or **Run** at the top-right corner of the page to run the export with the new destination. Monitoring and troubleshooting [#monitoring-and-troubleshooting] The multi-threading feature has been successfully tested in the development and live environments. However, we recommend monitoring your exports and checking your Google Merchant Center seller center after the migration to ensure that everything is correct. In rare cases, you may encounter issues such as **daily or per min/request quota is hit** that may cause the export failure. This issue is a known response from Google Content API meaning that the defined limits are consumed, and Google stops receiving updates from the Productsup platform for the given period. This issue may happen when you send millions of updates several times a day for the same subaccount. To prevent this issue, we recommend scheduling exports less frequently or increasing the intervals between the full uploads. In case of issues or if you need assistance with the migration reach out to your Customer Success Manager or contact [support@productsup.com](mailto:support@productsup.com). # Add Ceneo export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; *Ceneo.pl* is Poland's most popular comparison site, founded in 2005. Ceneo allows customers compare product offers from more than 18,000 Polish online stores. Productsup created the integration that lets you export your data feed in XML format to Ceneo. Set up Ceneo export [#set-up-ceneo-export] Go to **Exports** from your site's main menu, and select **Add export**. Search for *Ceneo*, hover over it, and select **Add**. UUID-fda63e14-73e1-4a84-a5ad-33cd26737195 On the Exports page, select the name of the added export to set it up. Select **Add Destination**. Select the needed destination option from the **Destination** dropdown, and select **Save**. See [Find the most suitable export destination](/docs/help-center/best-practices/find-the-most-suitable-export-destination) to choose a destination. Select **Save**. Go to **Dataflow** from the site's main menu and choose the added export from the dropdown in the toolbar. Map the attributes from import to export. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) for more information. For additional images, you must add and map the **img\_i** attribute in the export stage by selecting **Drop or Click to add new attribute**. These attributes may have multiple values separated by a comma (`,`). UUID-630a7419-b6cf-f899-909f-292f5212828f If your data is ready, select **Run** or **Export** in the upper right corner of the page. If you don't want to run the entire site, including all active exports set up in it, you can go to **Exports**, select the added *Ceneo* export, and then choose **Export this export**. # Add Attentive Product Export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Attentive is a US-based SMS marketing platform that lets you send personalized text messages to your customers. Productsup has built Attentive Product Export that lets you create and update your product catalog on Attentive to use the catalog products for SMS messages to your customers. Prerequisites [#prerequisites] To proceed with the Attentive Product Export setup, you need: . An active Attentive account. . The API key that you can create in your [Attentive account](https://ui.attentivemobile.com/signin?redir=%2Fintegrations). Select **Write** in **Product Catalog**. . A contact of your Customer Success Manager at Attentive. You need to contact them to check if the platform sent or updated the product catalog correctly. Add and set up the export [#add-and-set-up-the-export] To add Attentive Product Export in Productsup: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Attentive Product Export*, hover over it, and select **Add**. UUID-bf471dbe-e553-f7df-f8f6-f129fa46241b On the *Exports* page, select the name of the added export to set it up. Select **Add Destination**, choose *Attentive* from the drop-down list, give it a name as desired, and then select **Save**. In **Attentive API Key**, enter the API key you got in your Attentive account to let the Productsup platform authenticate in your Attentive account. UUID-b325f0d3-07e1-9652-144d-dea724c04aff Switch **Sendbox Mode** to **On** if you want to test the export first. Ask your Attentive Customer Success Manager to help you check that the platform exported products correctly. Then, return the setting to **Off** to send the live feed. Switch **Active** to **On** to activate the destination. Select **Save**. Go to **Dataflow** and select your Attentive Product Export from the drop-down menu in the upper ribbon. Map all the needed attributes from import to export and run the export. Each attribute in the Dataflow columns acts as a variant of a product. The `product_id` attribute is the identifier that binds different variants into one product. Various attributes on Attentive can have multiple values and there can be up to 100 variants. These attributes are: * `product_option` * `product_attributes` * `variant_option` * `variant_attributes` * `product_images` UUID-f2570de7-4bc8-9736-46a8-1deb7452e403 By default, you have 3 iterations of the same attributes: * `product_option1_name`, `product_option2_name`, `product_option3_name` * `product_option1_position`, `product_option2_position`, `product_option3_position` * `product_option1_values`, `product_option2_values`, `product_option3_values` If needed, you can add more attributes with the help of the button **Drop or Click to add new attribute** and use the naming convention such as of the default attributes. For example, `product_option4_name`. UUID-85c8b45e-0e99-cc1d-c1ec-e4aa417cc565 Some fields accept multiple values in a single field. Use `#` as the separator between values. The following fields support multiple values: * `product_categories` — for example, `Footwear#Sportswear` * `product_tags` — for example, `sale#new-arrival` * `product_collections` — for example, `Summer#Outlet` * `product_option{N}_values` — for example, `S#M#L#XL` Verify the catalog export [#verify-the-catalog-export] The Attentive settings don't let you check if the platform sent or updated the product catalog correctly. Contact your Attentive Customer Success Manager and ask them to check it for you. Also, Attentive’s API doesn't provide feedback on the status of the product catalog. Therefore, the Productsup platform can't give you any feedback on errors that could have happened during the export. You can check the analyzer tests to ensure your data is correct. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view). # Add Joor export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Joor is the largest B2B e-commerce platform used by over 380,000 retailers and 14,000 brands to connect and grow sales around the world. In Productsup, you can add the export *Joor - Product Assets* to send your product images to Joor via API. This export is a delta-based export that sends only the new, changed, or deleted product assets to Joor instead of exporting the entire asset catalog during every site run. Prerequisites [#prerequisites] To send product images to Joor, you need: . A Joor account. . Authentication data for your Joor account, such as the API secret and key, as well as your account ID, username, and password. . A data structure in your site that suits the requirements of the Joor export. Every product-asset combination should be a separate row in your site: * If a product has multiple assets, this product appears in the site in as many rows as there are assets for this product. * If an asset belongs to multiple products, this asset appears in the site in as many rows as there are products with this image. Set up Joor - Product Assets export [#set-up-joor---product-assets-export] Go to **Exports** from your site's main menu, and select **Add export**. Search for *Joor - Product Assets*, hover over it, and select **Add**. UUID-ce63a398-083b-1440-6d07-2c5121003a32 Go to **Dataflow** from the site's main menu and choose the added export from the dropdown in the toolbar. Map the attributes from import to export. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) for more information.The only non-mandatory attribute is `asset_external_id` that can contain your seller-defined image IDs.The mandatory attributes are as follows: * `asset_filename` should contain a unique name of the image as you want Joor to display it. * `asset_source_url` should contain the image URL. * `asset_type` should contain the value *image*. The export doesn't support any other asset types. * `display_order` should contain a number to arrange the order in which Joor displays all images of one product. If a product has only one image, the value in this attribute should be *1*. * One of the following attribute options containing product identifiers that connect your assets to the related products. * If your site has product IDs defined by Joor, you must provide them in `product_id`. * If your site has seller-defined product IDs, you must provide them in `product_external_id` and `product_identifier`. Go to **Exports** and select *Joor - Product Assets*. Select **Add Destination**. Select *Joor Product Assets* from the **Destination** drop-down menu, and choose **Save**. UUID-f08cc3cf-28f8-c4c9-27db-02be3e4957db Toggle **Sandbox mode?** to *On* if you want to send product images to your Joor sandbox. To send product images to your production organization, leave it *Off*. If you want to delete all assets that your products already have on Joor and substitute them with new assets, toggle **Replace existing assets?** to *On*. To keep the assets your products already have on Joor, leave it *Off*. This option only deletes assets for the products featured in your export data. The products that your export data doesn't include keep their existing assets. In **Joor Client ID** and **Joor Client Secret**, provide your Joor API authentication data. In **Account ID**, enter the ID of your Joor account. In **Joor Username** and **Joor Password**, enter your Joor account credentials. In **Batch Size**, enter the desired number of product assets that the platform should send to the Joor API per request. By default, the recommended batch size is `10`. Leave the **Feedback Import** toggle *On* to let the platform receive feedback files from the Joor API in case of export errors. This helps to troubleshoot the setup. Toggle **Active** to *On* to activate the destination. Select **Save**. If your data is ready, select **Run** or **Export this export** in the upper right corner of the page to let the platform send your product images to Joor via API. # Add export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Select from a variety of export templates to add exports or set up your custom exports using blank export templates. Choose you export template from the following categories: * Search engines * Comparison shopping * Shop systems * Marketing and advertising * Marketplaces * Social media * Retailers and distributors * PIM systems * Classification standards * Custom-built * Data pools and product databases * Order sync * Other If the export template you are looking for isn't on the list, contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) to request it. Add export [#add-export] To add a new export: Go to **Exports** from your site’s main menu. Select **Add export** in the top right corner. If you add your first export, select **ADD EXPORT** in the middle of the page. UUID-861419d4-433c-a3e3-0951-bed77ff4945f UUID-916fbad2-1edb-6f36-e6b6-be8e62f5c3ee Select the close icon **X** in the top right corner to return to the Exports page without saving any changes. Search for the export template name in the search field or choose your export template category from the list on the left. UUID-1815730e-84ef-13a4-b55e-dbad16faa370 Select **See all** to unfold a complete list of export templates. If necessary, sort the results by popularity or alphabet. For that, select **See all** on the right and choose a sorting option from the **Sort by** dropdown. UUID-19af844e-d89f-5a20-a851-54f0083a0c73 Select a necessary export template name in the list to open its description. UUID-a6b986f5-7fb3-3979-600f-76f987a50ee2 Not all export templates have descriptions yet. The Productsup team is working on adding them. You can select one or several export templates: * To select one (1) export, hover over the necessary export template and select **Add**. UUID-c5e3b5df-17c5-8348-e4fa-52f365ec7b69 * To select several export templates, select the corresponding checkboxes next to their names. Confirm the choice by selecting **Add exports** at the bottom of the page. UUID-ab1b5944-fcac-17fb-b2e8-420793224987 If you don't want to proceed with the chosen export templates, uncheck the box for the number of selected exports or select the trash bin icon. The *Export Overview* page opens with your export templates already added. Now, you can set up your exports. Set up your export [#set-up-your-export] When you add one or more exports, the platform automatically returns you to the *Exports* page, where you can view the list of all added export templates and set them up individually. Every export's setup page consists of four (4) tabs: * Overview * Settings * Labels, Tags & Sorting * Pricing In most cases, you only need to set up the destination in the *Overview* tab. Overview tab [#overview-tab] In the export's Overview tab, you can view your export dashboard and add destinations and files. The export dashboard gives you an overview of your export runs: UUID-6f378c6f-8659-f0ee-604a-1c310ad48707 * *Last Export* shows the date and time of the previously run export. * *Next Export* shows the date and time of the next scheduled export if you have set it up . * *Items* shows the quantity of exported items. * *Channel* is the name of the export template used for the current export. To set up your export, you must add a destination in **Destinations**: Select **Add Destination**. UUID-378fd981-7d3e-d6f5-afdb-2c4662709197 Select a destination from the dropdown and then edit its name as needed in **Name**. UUID-0f467505-5948-727e-fbb2-83145085d8a3 Select **Save**. To learn more about destinations, see [Set up an export destination](/docs/help-center/export-data-feeds/set-up-an-export-destination). You change the file name or limit the number of items per file: Select **Setup** in the *Files* section. UUID-335dcd27-016b-dd8e-2b6f-e4498f70db54 Enter the desired filename and a valid feed format extension in the **Filename** field. Valid feed formats are `.xml`, `.csv`, `.txt`, `and .tsv`. If you want to compress the file, consider using extensions such as `.bz2`, `.zip`, or `.gz`. Enter the number of items you want to export per file in the **Limit (Products per File)** field. Here is some guidance: * To export all items from the file without limits, set the limit to `0`. This means that the export begins with the first item, skipping the table header. * Enter the target value to limit the number of items in your data feed. Limiting can be helpful in case you want to test and try out a new export. You can limit the number of items, for example, to 100, to avoid sending your entire catalog. Select **Save**. To split the data feed into several files: Select **Add File** in the *File* section. Enter the desired filename and a valid feed format extension in the **Filename** field. Valid feed formats are `.xml`, `.csv`, `.txt`, `and .tsv`. If you want to compress the file, regard such extensions as `.bz2`, `.zip`, or `.gz`. Enter the number of items you want to export per file in the **Limit (Products per File)** field. Select **Save**. If you add a second feed, you are not exporting to the channel twice. You only split the export into two (2) feeds in equal parts. Or if you set a limit per file, the platform splits the feeds according to the set limits. For example, if your data feed contains 1,000 items and you set up three (3) files with a 200-item limit, the platform only exports 600 items. The remaining 400 items aren't present in any file. To avoid this situation, set a limit of `0` in your last file to ensure you export all items. If the number of items is less than the sum of all file limits, the platform doesn't update unnecessary files. If you want to receive empty files instead, turn on the *Allow empty files* option in the *Settings* tab. See [Settings tab](#section-idm243459226017834). If you want to export once as a CSV and once as an XML file, you must set up two (2) separate exports for this. You can add a dynamic filename with Twig: Select the **Setup** button in the *Files* section. Enter the filename in the following format: * To use the site and export names as dynamic placeholders in the filename:`{{ Site.id ~ "" ~ Export.name | replace({ "/":"" }) }}.txt` UUID-4a349276-5a91-e5f3-bbe6-eb68f11de845 * To add the export name and date, enter the following filename:`{{ Export.name | replace({ " ":"" }) ~ "" ~ "now" | date("Ymd") }}.csv` Settings tab [#settings-tab] In the export's Settings tab, you can you can activate the following settings of your export output: UUID-46042343-35b9-cec5-ee7c-a08c750bd1ed In **CSV Separator**, select the separator. Leave **CSV Enclosure** selected if you want to enclose data in CSV files containing more than one word or number. Enclosure prevents the platform from incorrectly parsing data when it encounters a delimiter. Select **Enable Pixel Tracking** to activate a tracking pixel, a small piece of code in the form of a pixel that you implement in your website code. When you select **Enable Pixel Tracking**, the **Tracking column** dropdown appears to let you choose the needed attribute. Select **Enable Redirect Tracking** to activate redirect tracking, which collects your site ID, export ID, and product ID. It sets a cookie for the conversion pixel. Select **Shorten Tracking URL** if your channel only accepts a limited number of characters in the tracking URL. When you select **Shorten Tracking URL**, the **Tracking column** dropdown appears to let you choose the needed attribute. We don't support using plugins any longer but if your output file requires a specific format, such as JSON or XLSX. Take the following steps: On the export setup page, go to the *Settings* tab, leave the **Export-Plugin** empty and select **Save**. Open the tab *Labels, Tags & Sorting*, find the section *Export Tags*, and enter the following under **Add new tag**: 1. In **Key**, enter `custom_csv_writer_class`. 2. In **Value**, enter `ProductsUp_Csv_File_Writer_Json`. Select **Add tag** to save it. UUID-c1fdf18f-5be9-498d-e432-6a003e787b6c For an Excel XLSX plugin, enter the following value in the **Export-Plugin** field on the export's *Settings* page: * `\Export\Xlsx` UUID-f382bd7e-d278-b5c8-3ac2-66368d76d293 Contact [support@productsup.com](mailto:support@productsup.com) if you need help with a non-JSON or Excel XLSX plugin. Select **Allow empty files (0 products)** to let Productsup export empty files. It can be helpful if you create internal reports. For example, you can export a file that reports image URLs that lead to a 404 page. In this case, having an empty file with headers is suitable. In **Product Uniqueness**, choose the attribute in the dropdown that you consider unique for your export and select **Add**. The platform prevents duplicate values and exports unique items. You can see **id** selected by default, but you can remove it and select one or more attributes of your choice. Select **Hide unmapped attributes on the Intermediate** to hide unmapped attributes on the intermediate stage. Select **Save**. In some specific exports, such as blank exports, you may find the following settings: Select **Export as XML** to send your file as XML. Remember to change the filename extension to *.xml*. Select **XSL Template for XML Export** to use an XSL template as a style sheet for your XML export. Use **Add Header before Main Header in CSV (optional)** and **Add Header after Main Header in CSV (optional)** if your channel requests additional headers before or after the CSV attribute's header name. You can use these settings in *Blank Export (empty)* and *Blank Export (with ID)*. UUID-fd451ef6-3901-49ce-55b5-4aa340c063b1 Request the on-demand setting **Replace Main Header in CSV (optional)** if you need to replace the header row of your CSV export file with a header that suits your needs. **Replace Main Header in CSV (optional)** is available in one export only: *Blank Export (with ID)*.To have the **Replace Main Header in CSV (optional)** filed in any other export, contact [support@productsup.com](mailto:support@productsup.com) or your Customer Success Manager. This service is free of charge. To replace the header row in your CSV export file: Go to **Exports** from your site's main menu and select the needed export. Select the **Settings** tab. In **Replace Main Header in CSV (optional**), enter your new header row and separate the names of the attributes with a comma (`,`). The platform omits the commas in the output file.For example, enter the string *product\_ID,product\_title,price* for the CSV export file to contain the header row `product_IDproduct_titleprice`.If you enter the string *product\_ID, product\_title, price,* the platform outputs an export file with the header row `product_ID product_title price`. You can use empty and dynamic attribute names in **Replace Main Header in CSV (optional)**: 1. Empty attribute names.You can enter a space character instead of the attribute's name in between commas if you need an attribute without a name. For example, enter *product\_ID, ,price* for the CSV export file to contain the header **product\_ID price**. 2. Dynamic attribute names.If you need an attribute to contain dynamic data, such as today's date, you can enter a Twig expression instead of the attribute's name in between commas. For example, enter *product\_ID, \{\{ "now"|date("m/d/Y") }}, price* for the CSV export file to contain the header **product\_ID 06/22/2022 price**. Select **Save**. Labels, Tags & Sorting tab [#labels-tags--sorting-tab] In the export's Labels, Tags & Sorting tab, you can set up labels, tags, and sorting for your export. . Labels.If you have many different exports, labels help you categorize them. You can later use these labels as filters in Exports. To add a label: Go to **Exports** from your site's main menu and select the export you want to modify. Select the **Labels, Tags & Sorting** tab. Add one or more labels separated by a comma (`,`) in **Labels**. UUID-df1f962d-eea6-d7b7-11e5-5df788735f33 Select **Save**.Once you've created a label(s), the *Labels* dropdown appears in the *Exports* page, and you can search for your exports with particular labels: Go to **Exports** from your site’s main menu. If any export has a label, you can see it below the export's names. Select **Labels** and choose the desired label(s) from the dropdown. Select **Apply**. UUID-32756f2f-cd0c-b6b1-5ebd-29a4c3efb30b . Export Tags.*Export Tags* let you distinguish attribute titles for each exported item. Go to **Exports** from your site's main menu and select the export you want to modify. Select the **Labels, Tags & Sorting** tab. In the *Export Tags* section, enter **Key** and **Value**. UUID-d783bbb5-4ebf-ed2d-00bc-94ddb1543f78 Select **Add Tag**. You can also use **Predefined Tags** from an external system by connecting to it via the chosen authentication from the dropdown. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems) to set up authentication with an external system. Here are two examples of the key and value entries to get the desired outcome:Desired outcome #1: BMEcat without CDATA ( `` ) - * Key: *custom\_xml\_writer\_class* * Value: *ProductsUp\_Xml\_File\_Writer\_BMEcatWithoutCDATA* * Output result: `Here is the value from the attribute` Desired outcome #2: Show CSV output with enclosures ( `‘’ or ““ or ||` ) - * Key: *custom\_csv\_writer\_class* * Value: *ProductsUp\_Csv\_File\_Writer\_AllEnclosured* * Output result: `‘row1’;’row2’;’size’;’price’;’product_id’` . Sorting.*Sorting* lets you define the order of items in the export based on a specific attribute, mode, and direction. UUID-204cc1b3-58f1-0de4-5923-845444236ce3 Choose an attribute in **Select Column**. Choose a sorting mode in **Select Mode**, which can be *Alphabetical*, *Numerical*, or *Natural*. Choose a sorting order in **Select Direction**, which can be either *Ascending* or *Descending*. Select **Add Sorting Rule**. Pricing tab [#pricing-tab] Add a pricing model for your export to calculate costs in the *Reporting* page. UUID-fd2ddb52-6dab-7ef3-a9cd-980366ca0eb7 Build your export from scratch [#build-your-export-from-scratch] In some cases, the existing export templates may not cover your needs. Then, you can build an export from scratch using blank exports. There are four (4) types of blank exports: Blank Export (empty), Blank Export (with ID), Delta Blank Export, and Export2Datasource Blank. See [Build your exports from scratch](/docs/help-center/export-data-feeds/add-export/build-your-exports-from-scratch) for more information. To add a new blank export: Go to **Exports** from your site’s main menu and select **Add export**. Select the necessary blank export template in the gray banner under the search field. UUID-66c1a6b9-78f2-b3fb-d559-aee7bf9db90a After adding a blank export template, you need to set it up. Each blank export has its setup peculiarities. See [Build your exports from scratch](/docs/help-center/export-data-feeds/add-export/build-your-exports-from-scratch) for more information. Edit an export name [#edit-an-export-name] You can modify the export's name. This is helpful when you use the same export template for different exports. For example, you can differentiate *Google Merchant Center*, *Google Merchant Center (clothes only)*, etc. UUID-96d4ab47-47ff-1038-98ae-d4442ad3282e To modify an export's name: Go to **Exports** from your site's main menu and select the cogwheel icon (**⚙**) next to the export you want to modify. Select the **Edit** icon next to the export's name. UUID-9093bb66-58bd-773f-3af4-3e2e04c67d2c Modify the export's name and add a short description. Select the checkmark icon to save your modifications. View the export run status and reorder the export attributes [#view-the-export-run-status-and-reorder-the-export-attributes] When you are in any export setup page, you can see a specific main menu on the left from where you can go to the **Status** or **Order Attributes** pages, or return to the **Setup** page. Status page [#status-page] The Status page becomes available in the main menu when you are in any export setup page. UUID-7326c280-65e6-c2ac-f6d5-4b9829d53157 The Status page lets you see the following information about all past export runs: * *Export Started* shows the data and time when the export run started. * *Export Finished* shows the data and time when the export run completed. * *Number of exported Products* shows the number of items exported during the export run. UUID-068957b2-68f6-04a5-d78a-9ac060cf1f0e Order Attributes page [#order-attributes-page] The *Order Attributes* page becomes available in the main menu when you are in any export setup page. You can change the order of attributes in your final output feed by selecting and dragging them up and down as needed. The colors of the attributes have specific meanings: * When the attributes are in their initial order, they are green. UUID-4de4fe08-59b6-d2d8-102f-83650320ed9e * When you change the order, the attributes turn black. To reset the order to its original state, select **Reset column order to initial state**. When you change the order of the attributes, you can see the result in the export stage of Dataflow. To see it: Go to **Dataflow** and select the needed export from the dropdown on the left. Select **View** in the upper ribbon and select **Sort by**. UUID-1d4f8240-c663-1045-dc64-baa6be7ea824 Select **Export Order** in the dropdown. Check the export stage in the Dataflow. # Add Facebook Dynamic Ads (Delta Upload) export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The *Facebook Dynamic Ads (Delta Upload)* export sends changed products to [Facebook Commerce Manager](https://business.facebook.com/commerce/), one of Meta Business Manager tools, via the Facebook Marketing API. This export uses delta files, which means it sends only new, updated, and deleted products to Facebook instead of the entire catalog. The export doesn't send unchanged products to Commerce Manager, which helps reduce site-running times. With your product catalog available in Commerce Manager, you can advertise your products to wide audiences across the entire Meta ecosystem based on users' interests and previous behavior. The Meta ecosystem includes Facebook, Instagram, Messenger, and the Audience Network. See [Add Facebook Dynamic Ads export](/docs/help-center/export-data-feeds/add-export/add-facebook-dynamic-ads-export) for the difference between this export and other Facebook exports available in Productsup. Prerequisites [#prerequisites] To send your product catalog to Facebook Commerce Manager using the export *Facebook Dynamic Ads (Delta Upload)*, you need: . A Facebook business account with at least one product catalog created in it. . The ID of the catalog where you want to send your products. . A Facebook authentication in your Productsup organization.To add a Facebook authentication: Go to **Authentication** from the organization's, project's, or site's menu and select **Add Authentication**. In **Type**, select *Facebook*, give it a desired name, and select **Next**. Select **Connect** for Productsup to redirect you to a Facebook page where you can give Productsup access to your Facebook business account. Once ready, Facebook redirects you back to Productsup. Close the confirmation window to proceed. Set up the Facebook Dynamic Ads (Delta Upload) export [#set-up-the-facebook-dynamic-ads-delta-upload-export] Go to **Exports** from your site's main menu, and select **Add export**. Search for *Facebook Dynamic Ads (Delta Upload)*, hover over it, and select **Add**. UUID-c56b04a9-5f82-4d0e-4a21-8be05b0071a9 Go to **Dataflow** from the site's main menu and choose the added export from the dropdown in the toolbar. Map all relevant attributes from import to export. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) for more information.There are only 9 mandatory attributes for Facebook: UUID-28b253cc-8611-07a8-a5a0-e5c995ef9d37 Go to **Exports** and select *Facebook Dynamic Ads (Delta Upload)*. Select **Add Destination**. Select *Facebook Marketing API: Data Feed Delta* from the **Destination** drop-down menu, and choose **Save**. UUID-638b1994-8a42-7224-7257-901b22ed5433 In **Product сatalog id**, enter the ID of the product catalog in Commerce Manager where you want to send your products. If you have already created an authentication for Facebook in your current site, project, or organization, you can choose it in the **Facebook authentication** drop-down menu. If not, see [Prerequisites](#N1736181018845). Leave the **Feedback import** toggle *On* to let the platform receive feedback files from the Facebook Marketing API in case of export errors. This helps to troubleshoot the setup. Ignore the toggle **Replace instead of Patch**. It is a legacy setting that no longer affects how the destination works. Toggle **Active** to *On* to activate the destination. Select **Save**. Go to **Data View**. In the top ribbon, select *Readiness* from the **Overview** drop-down menu to see what data transformations are necessary to meet Facebook's product data requirements. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view) for more information on using the Analyzer feature. If your data is ready, select **Run** or **Export** in the top-right corner of the page. If the run finishes with issues, you can go to **Error Log** to troubleshoot. Go to your Facebook business account to check that Facebook has successfully uploaded all your product data changes to the needed catalog. In case of issues, get back to Productsup and go to **Data Sources** to access Facebook's feedback about your export in the additional data source *Feedback data from destination Facebook Marketing API: Data Feed Delta*. This additional data source is only available if you have turned on the setting **Feedback import**. # Add TikTok Product Catalog API export import { Step, Steps } from "fumadocs-ui/components/steps"; Use the TikTok Product Catalog API export template to upload products to your product catalog. The export uses delta logic, which means that it exports only updated data instead of the entire product feed data. See [TikTok for Business Developers](https://ads.tiktok.com/marketing_api/docs?id=1701890909484033) for more information about TikTok API for Business. Add and set up the export [#add-and-set-up-the-export] To add the TikTok API export in Productsup: Go to **Exports** from your site’s main menu and select **ADD EXPORT**. Search for *TikTok Product Catalog API* , hover over it, and select **Add**. UUID-a462fb59-b19c-10f9-fa57-17673b8ab5e4 On the **Exports** page, select the name of the added export template to set it up. Select **Add Destination** and choose *TikTok Business Center API* from the dropdown. Give it a name as desired, and select **Save**. UUID-1a9fd0ef-2624-9419-1ce3-0f2e227d644e Enter your TikTok Ads Manager organization ID in **TikTok Business Center ID**. In **Catalog ID**, enter your TikTok catalog ID. The destination searches for catalogs without an ID if this field is left empty. Enter a name to locate your catalog in **Catalog Name**. The platform attempts to find a catalog with a matching name, country, and currency. Specify your locale in **Target Country**. Select the currency of your locale in **Currency**. If a catalog doesn't exist, the platform automatically creates one when you select **Create Catalog**. In **Authentication to use**, select an existing authentication from the dropdown or create a new TikTok authentication by selecting **Add New Authentication**. * To add a new authentication, the platform then redirects you to TikTok once you select **Type** and enter the **Name** of your authentication. Then, select **Next** and **Connect** and enter your TikTok credentials to proceed. UUID-a276c6b8-9f61-088a-0554-372255d477a3 If you want an error file returned to the platform once your data export finishes, switch **Feedback import** to **On**. If not, skip this step and go to step [15](#N1630676389653). Select the attribute where you want to receive a feedback import file in **Main feed connection column**. Enter the attribute that connects to your feedback import in **Feedback file connection column**. Switch **Active** to *On* to activate the destination. Select **Save**. UUID-15eb863d-df90-b0fe-1e7e-5567aa9252ef # Migrate your Google Content API export to Merchant API (single account) import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Google is shutting down the Content API for Shopping on August 18, 2026, in favor of the new Merchant API (generally available since July 2025). If you use a Content API-based destination to export your product data to Google Merchant Center, you need to migrate to the Merchant API destination before that date to keep your exports running. This migration is mandatory, but full feature parity is maintained and your export templates require no changes. You only need to add the new destination, configure it, and disable the old one. Throughout this guide, **data source** refers to a data source (feed) as configured in Google Merchant Center — not a Productsup data source — unless explicitly labeled **Productsup data source** or **feedback data source** (both of which are Productsup entities used in the feedback-file workflow described in [Enable the feedback file](#enable-the-feedback-file)). Scope [#scope] This migration covers Content API to Merchant API destinations only. If you deliver your Google feed via SFTP or FTP, this guide does not apply to you. Moving from SFTP to API is a separate change that uses different export templates and isn't required as part of this migration. Choose your data source strategy (optional) [#choose-your-data-source-strategy-optional] We recommend keeping the same data source (feed) you already use: map **Feed Label**, **Content Language**, and **Default Currency Code** to the correct target as described in this guide. This approach requires no manual intervention in Google Merchant Center. This matches Google's "Keep existing Content API data sources" option: data sources created with the Content API for Shopping remain fully compatible with the Merchant API. See [Choose your data source strategy](https://developers.google.com/merchant/api/guides/compatibility/data-sources#choose-data-strategy) in Google's documentation for more information. Destination name mapping [#destination-name-mapping] The following table maps the old destination to its Merchant API replacement. | Old destination (Content API) | New destination (Merchant API) | | :------------------------------ | :----------------------------------- | | Google Content API for Shopping | Google Merchant API — single account | What changes in the destination settings [#what-changes-in-the-destination-settings] The destination configuration has changed. The **Target Country** and **Target Language** dropdowns are replaced by three free-text fields. Before, with the Content API destination: | Field | Example value | | :----------------------------- | :--------------------- | | **Target Country** (dropdown) | *United Arab Emirates* | | **Target Language** (dropdown) | *English* | After, with the Merchant API destination: | Field | Description | Example value | | :------------------------ | :--------------------------------------------------------------------------------------------------------------------------------------- | :------------ | | **Feed Label** | Replaces Target Country. Uppercase ISO country code. Maximum 20 characters (A–Z, 0–9, hyphen, underscore). Immutable after feed creation | `AE` | | **Content Language** | Replaces Target Language. ISO 639-1 two-letter code in lowercase. Google validates this server-side and flags mismatches | `en` | | **Default Currency Code** | New field. ISO 4217 three-letter uppercase currency code. See the field mapping table for valid values per country | `AED` | Use the ISO 3166-1 alpha-2 country code in uppercase as your **Feed Label** (for example, `AE`, `ES`, `GB`) to keep it consistent with how Merchant Center identifies data sources and to ensure you continue pushing to the same primary data source. This value is immutable once the data source is created, so confirm it before saving. Example: United Arab Emirates / English [#example-united-arab-emirates--english] | Old setting | Old value | New field | New value | | :-------------- | :--------------------- | :-------------------- | :-------- | | Target Country | *United Arab Emirates* | Feed Label | `AE` | | Target Language | *English* | Content Language | `en` | | — | — | Default Currency Code | `AED` | Full field mapping reference [#full-field-mapping-reference] Use this table to find the correct values when you configure the new destination. **Feed Label** uses the uppercase ISO country code, **Content Language** uses the lowercase ISO 639-1 code, and **Default Currency Code** uses the uppercase ISO 4217 code. | Old: Target Country | Feed Label | Content Language(s) | Default Currency Code | | :------------------- | :--------- | :------------------ | :-------------------- | | Argentina | `AR` | `es` | `ARS` | | Australia | `AU` | `en` | `AUD` | | Austria | `AT` | `de` | `EUR` | | Bahrain | `BH` | `ar` | `BHD` | | Belarus | `BY` | `ru` | `BYN` | | Belgium | `BE` | `fr` / `nl` / `de` | `EUR` | | Brazil | `BR` | `pt` | `BRL` | | Canada | `CA` | `en` / `fr` | `CAD` | | Chile | `CL` | `es` | `CLP` | | Colombia | `CO` | `es` | `COP` | | Czechia | `CZ` | `cs` | `CZK` | | Denmark | `DK` | `da` | `DKK` | | Ecuador | `EC` | `es` | `USD` | | Egypt | `EG` | `ar` | `EGP` | | Ethiopia | `ET` | `en` | `ETB` | | Finland | `FI` | `fi` / `sv` | `EUR` | | France | `FR` | `fr` | `EUR` | | Georgia | `GE` | `ka` | `GEL` | | Germany | `DE` | `de` | `EUR` | | Ghana | `GH` | `en` | `GHS` | | Greece | `GR` | `el` | `EUR` | | Hong Kong | `HK` | `zh` / `en` | `HKD` | | Hungary | `HU` | `hu` | `HUF` | | India | `IN` | `en` / `hi` | `INR` | | Indonesia | `ID` | `id` | `IDR` | | Ireland | `IE` | `en` / `ga` | `EUR` | | Israel | `IL` | `he` | `ILS` | | Italy | `IT` | `it` | `EUR` | | Japan | `JP` | `ja` | `JPY` | | Jordan | `JO` | `ar` | `JOD` | | Kazakhstan | `KZ` | `ru` | `KZT` | | Kenya | `KE` | `en` | `KES` | | Kuwait | `KW` | `ar` | `KWD` | | Lebanon | `LB` | `ar` | `LBP` | | Malaysia | `MY` | `ms` / `en` | `MYR` | | Mauritius | `MU` | `en` / `fr` | `MUR` | | Mexico | `MX` | `es` | `MXN` | | Netherlands | `NL` | `nl` | `EUR` | | New Zealand | `NZ` | `en` | `NZD` | | Nigeria | `NG` | `en` | `NGN` | | Norway | `NO` | `no` | `NOK` | | Oman | `OM` | `ar` | `OMR` | | Paraguay | `PY` | `es` | `PYG` | | Peru | `PE` | `es` | `PEN` | | Philippines | `PH` | `en` / `tl` | `PHP` | | Poland | `PL` | `pl` | `PLN` | | Portugal | `PT` | `pt` | `EUR` | | Romania | `RO` | `ro` | `RON` | | Russia | `RU` | `ru` | `RUB` | | Saudi Arabia | `SA` | `ar` | `SAR` | | Singapore | `SG` | `en` / `zh` | `SGD` | | Slovakia | `SK` | `sk` | `EUR` | | South Africa | `ZA` | `en` | `ZAR` | | South Korea | `KR` | `ko` | `KRW` | | Spain | `ES` | `es` | `EUR` | | Sweden | `SE` | `sv` | `SEK` | | Switzerland | `CH` | `de` / `fr` / `it` | `CHF` | | Taiwan | `TW` | `zh` | `TWD` | | Tanzania | `TZ` | `sw` / `en` | `TZS` | | Thailand | `TH` | `th` | `THB` | | Turkey | `TR` | `tr` | `TRY` | | Uganda | `UG` | `en` | `UGX` | | Ukraine | `UA` | `uk` | `UAH` | | United Arab Emirates | `AE` | `ar` / `en` | `AED` | | United Kingdom | `GB` | `en` | `GBP` | | United States | `US` | `en` / `es` | `USD` | | Uruguay | `UY` | `es` | `UYU` | | Uzbekistan | `UZ` | `uz` | `UZS` | | Vietnam | `VN` | `vi` | `VND` | | Zambia | `ZM` | `en` | `ZMW` | | Zimbabwe | `ZW` | `en` | `USD` | Migrate to the Merchant API destination [#migrate-to-the-merchant-api-destination] Take a few screenshots of your current product output before you start. The new destination has been validated internally, but a before-and-after reference lets you confirm it produces identical results, and gives you something to compare against if anything looks unexpected. Go to **Destinations** and add *Google Merchant API — single account*. Configure the destination: enter **Feed Label**, **Content Language**, and **Default Currency Code** using the field mapping table, and complete all other required credentials. Switch **Active** to **On** and select **Save**. Disable the previous destination *Google Content API for Shopping* and select **Save**. Run the site to push your data through the new destination and confirm the output looks correct. No further action is needed. Export templates require no changes. Important settings to check before and during the switch [#important-settings-to-check-before-and-during-the-switch] Enable the feedback file [#enable-the-feedback-file] Switch on the feedback file to keep visibility into actionable insights if products get rejected due to data quality issues. If something goes wrong, the feedback file is available as an additional downloadable Productsup data source, showing what's failing and why. Some clients don't use the feedback file, so sites can fail silently. This isn't caused by the migration — it's caused by unrelated data quality issues that only the feedback file would surface. If you enable the feedback file and start seeing more errors than before, two separate things are usually happening: . **Real product-level errors from Google become visible.** Many accounts never had the feedback file enabled under the Content API, so Google's product-level rejections went unnoticed. In most cases, these errors are pre-existing catalogue or data-quality issues that existed before the migration. . **Unmapped-items notifications appear as separate UI noise.** The feedback file arrives as an additional feedback data source in Productsup and isn't automatically mapped to your main Productsup data source. This can trigger extra notifications that look like errors but aren't actual export problems. To reduce this noise, map ID to ID from the feedback data source to your main Productsup data source, or snooze the notification on the feedback data source. Use Force Full Upload and Cleanup with care [#use-force-full-upload-and-cleanup-with-care] Only switch on **Force Full Upload** or **Cleanup** when there's a clear, identified need — for example, when Productsup and Google Merchant Center are de-synced and products still exist in GMC that Productsup has no record of, and only when Productsup is the single source of truth for that data source (feed). Leaving these options on unnecessarily increases the risk of hitting your daily quota limits. Disable them again as soon as the sync is back to normal. Set the Full Upload Interval correctly [#set-the-full-upload-interval-correctly] Google removes products from Merchant Center if they haven't been refreshed within 28 days. **Full Upload Interval** controls how often Productsup sends your entire catalogue to Google as a full upload, rather than only new or changed products. This refreshes every product's timestamp, including unchanged ones, and prevents Google from dropping them after 28 days. Do not set **Full Upload Interval** to `0`, especially on a schedule that runs daily. A value of `0` forces a full upload on every run, which removes the delta export benefit and significantly increases the risk of hitting your daily quota. The more often you export, the larger this value should be, closer to 28. The less often you export, the smaller it should be, for example `7`–`14`, so unchanged products still get refreshed before Google's 28-day cutoff. Do not use Dry Run for this migration [#do-not-use-dry-run-for-this-migration] **Dry Run** is intended for new clients who are still testing their data setup before going live. If your site is already running in production, using Dry Run interferes with your normal delta and export flow. Add and activate the new destination as described in [Migrate to the Merchant API destination](#migrate-to-the-merchant-api-destination) instead. After the switch [#after-the-switch] Once you've switched, the data source may still be labeled *Content API* inside Google Merchant Center. This is expected and won't affect your exports. The label in Merchant Center hasn't been renamed yet, but the underlying integration is already Merchant API and continues to work after August 18, 2026. To confirm the switch was successful, check that: * Products in the data source (feed) have an update timestamp after the switch. * There has been a successful run since the switch. * The feedback file shows no issues. Fallback procedure [#fallback-procedure] If something goes wrong after switching, restore your previous setup: Disable the new *Google Merchant API — single account* destination. Re-enable the old *Google Content API for Shopping* destination. Restart the delta on the site and run it again to restore normal data flow. Contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) immediately to report the issue. Act quickly. The faster you switch back, the shorter the gap in data delivery. FAQ [#faq] Do I need to update my export templates? [#do-i-need-to-update-my-export-templates] No. Export templates for *Google Content API for Shopping* remain unchanged. Only the destination changes. What actually changes in the destination configuration? [#what-actually-changes-in-the-destination-configuration] The **Target Country** and **Target Language** dropdowns are replaced by three free-text fields: **Feed Label** (for example, `AE`), **Content Language** (for example, `en`), and **Default Currency Code** (for example, `AED`). See [What changes in the destination settings](#what-changes-in-the-destination-settings) for the full breakdown and the field mapping table for all 71 countries. Will my data source in Merchant Center change? [#will-my-data-source-in-merchant-center-change] No. If you follow this guide and use the recommended Feed Label, an uppercase ISO country code, Productsup pushes to the same primary data source (feed) as before. No manual action is needed in Merchant Center. See [Choose your data source strategy](#choose-your-data-source-strategy-optional). After the switch, my data source in Merchant Center is still labeled Content API. Did the migration fail? [#after-the-switch-my-data-source-in-merchant-center-is-still-labeled-content-api-did-the-migration-fail] No, this is expected. Even though the data source may still show as *Content API* in the Merchant Center UI, you're already exporting via the new Merchant API destination under the hood, and it continues working past August 18, 2026, as long as you've switched to *Google Merchant API — single account* in Productsup. See [After the switch](#after-the-switch). Why are we still using Google Content API export templates? [#why-are-we-still-using-google-content-api-export-templates] This is intentional. The Merchant API destination was built to work with your existing Content API export templates, so you don't need to change them now or in the future. Do I still need to choose between the single-account and multi-threading destinations? [#do-i-still-need-to-choose-between-the-single-account-and-multi-threading-destinations] No. The new *Google Merchant API — single account* destination handles this automatically. It's a unified solution that replaces both the *Google Content API (single account)* and *Google Content API (single account + multi-thread)* destinations, so you no longer need to choose between them. What happens if I don't migrate by August 18, 2026? [#what-happens-if-i-dont-migrate-by-august-18-2026] The Content API stops accepting requests and your exports fail until you switch to a Merchant API destination. What if I only use one feed? [#what-if-i-only-use-one-feed] No additional action is needed. Data is pushed to your main catalogue automatically. What is the correct Feed Label value? [#what-is-the-correct-feed-label-value] Use the ISO 3166-1 alpha-2 country code in uppercase, for example `GB`, `ES`, `AE`. It must match the feed label configured in Merchant Center. This value cannot be changed after the data source (feed) is created. How do I confirm the switch was successful? [#how-do-i-confirm-the-switch-was-successful] Check that products in the data source (feed) have an update timestamp after the switch, that there's been a successful run since, and that the feedback file shows no issues, or only pre-existing issues unrelated to the migration. See [After the switch](#after-the-switch). What if something goes wrong after switching? [#what-if-something-goes-wrong-after-switching] Follow the [Fallback procedure](#fallback-procedure): disable the new Merchant API destination, re-enable the old Content API destination, restart the delta, run again, and contact us immediately. Act quickly, since the faster the fallback, the shorter the gap in data delivery. Should I turn on Force Full Upload or Cleanup during the switch? [#should-i-turn-on-force-full-upload-or-cleanup-during-the-switch] Only if there's a clear, identified need, for example if Productsup and Google Merchant Center are de-synced and Productsup is the single source of truth for that data source (feed). Otherwise, leave them off. See [Use Force Full Upload and Cleanup with care](#use-force-full-upload-and-cleanup-with-care). What should Full Upload Interval be set to, and why does it matter? [#what-should-full-upload-interval-be-set-to-and-why-does-it-matter] Never `0`. Google removes products that haven't been refreshed in 28 days, and Full Upload Interval refreshes unchanged products so they aren't dropped. As a rule of thumb, the more frequently your site runs, the higher this number should be, closer to 28. The less frequently it runs, the lower it should be, for example `7`–`14`. See [Set the Full Upload Interval correctly](#set-the-full-upload-interval-correctly). I'm seeing frequent internal_error responses in the feedback file. What's going on? [#im-seeing-frequent-internal_error-responses-in-the-feedback-file-whats-going-on] The Merchant API is still going through some instability on Google's side. `internal_error` and similar transient failures are typically temporary issues on Google's side rather than something caused by your setup or by Productsup. See Google's [Merchant API known issues](https://developers.google.com/merchant/api/known-issues) for current known issues. # Add TikTok Shop exports import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; TikTok Shop provides a new, native checkout experience for TikTok users and lets them shop, order, and pay without leaving the TikTok app. This leads to a smoother shopping experience, higher conversion rates, and more transparent ad performance, which yields a higher return on ad spend. TikTok Shop is currently available in the United States, the United Kingdom, Spain, France, Germany, and Italy. Currently, Productsup can support you in selling your products on TikTok Shop only in the UK, Germany, and the US. To let you sell your products on TikTok Shop, Productsup has built an ecosystem that sends product and order data to TikTok Shop and imports order data from TikTok Shop into Productsup: . \*TikTok Shop - Product Catalog API (US)\*This export creates, updates, and deletes products on TikTok Shop via API for the US market and contains the attributes relevant to products of all product categories. When setting up this export, you also use multiple category-specific attributes that let you send products of relevant product categories to TikTok Shop. This export sends only delta updates to TikTok Shop instead of exporting the entire product catalog during every site run. . \*TikTok Shop - Product Catalog API (UK)\*This export creates, updates, and deletes products on TikTok Shop via API for the UK market and contains the attributes relevant to products of all categories. When setting up this export, you also use multiple category-specific attributes that let you send products of relevant product categories to TikTok Shop. This export sends only delta updates to TikTok Shop instead of exporting the entire product catalog during every site run. . TikTok Shop - Product Catalog API (DE)This export creates, updates, and deletes products on TikTok Shop via API for the German market. When setting up this export, you also use multiple category-specific attributes that let you send products of relevant product categories to TikTok Shop. Currently, it supports only a limited number of categories under *Health & Beauty*. Contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) to request the necessary categories. This export sends only delta updates to TikTok Shop instead of exporting the entire product catalog during every site run. . *TikTok Shop - Shipment Notifications API*This export sends shipping updates to TikTok Shop via API to let you send tracking information to TikTok and inform customers on TikTok that you shipped their orders. This export sends only new shipment data to TikTok Shop instead of sending the entire product catalog during every site run. . *TikTok Shop Order Import*This API-based data source imports orders from TikTok Shop into Productsup to let you send the order data to your order management system. Prerequisites [#prerequisites] To set up the TikTok Shop ecosystem in Productsup, you need: . Product variants in your product data.Your data should support product variants, which means multiple rows in your data source can represent one main product that varies in size, color, model, etc.All products in your data feed must have **product\_id** and **parent\_id**. The **product\_id** attribute uniquely identifies product variants, and the **parent\_id** attribute links all product variants to their main product.If a product doesn't have variants, it still must have the **parent\_id** attribute. It can just have the same value as the **product\_id** attribute.See [Mind product variants and their attributes](#section-idm243374369527850) for more information. If your data doesn't support product variants and doesn't have the needed main product and variant IDs, you need to optimize your data in Productsup to ensure that it meets the TikTok Shop requirements. . A project in your Productsup organization where you are going to create three (3) sites, pushing and pulling data from TikTok Shop. In this separate project, you need to create a separate site for each TikTok Shop export and data source. This is a recommended option. If a separate TikTok Shop project doesn't fit your overall organization structure, you can ignore this advice. . A TikTok seller account and a shop set up on TikTok Shop. See [Set Up TikTok Shop Using TikTok Seller Center](https://ads.tiktok.com/help/article/set-up-tiktok-shop-using-tiktok-seller-center?lang=en) for more information. . A list of all TikTok categories you want to sell products in. This integration has [category-specific attributes exports](/docs/help-center/glossary#N68b809d75a5fd). Productsup supports only some categories by default. But we can add missing categories upon request. It may take around two weeks to add support for your request. To request the necessary categories or countries for this integration, contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) and provide the following information: * List of categories. See [Product Categorisation](https://seller-sg.tiktok.com/university/essay?knowledge_id=7643185937581825\&from_article=1\&identity=1) for more information on choosing the right TikTok Shop product categories. * List of countries. Now, we only support the UK, Germany, and the US. . An approval from TikTok to sell products of specific categories and brands. Some brands and categories on TikTok Shop are invite-only, so you need to reach out to TikTok to get their approval to work with the categories and brands that aren't publicly available. . A TikTok Shop authentication created on the project or organization level to use across all TikTok Shop sites. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems) for more information.Add this authentication as follows: 1. Go to **Authentication** from your organization's or project's menu and select **ADD AUTHENTICATION**. 2. In **Type**, select the needed authentication type based on your country of interest, give it a custom name as desired, and select **Next**: * Select *TikTok Shop US Authentication* if you want to sell products on the US market. * Select *TikTok Shop Non-US Authentication* if you want to sell products on the UK or German markets. 3. Select **Connect** for Productsup to redirect you to a TikTok account page where you can give Productsup access to your account. Follow the instructions on TikTok to connect the systems. | UUID-9f9a9b4a-b6a1-f315-d5a1-e9230bb53304 | UUID-11d0fbf5-028b-744b-1fef-f91d28ba583a | | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | 4. Once ready, TikTok redirects you back to Productsup to finish the authentication process. Close the confirmation window in Productsup to proceed. Send products to TikTok Shop [#send-products-to-tiktok-shop] To send your products to TikTok Shop in the US, Germany, or the UK, you first need to add and set up the export *TikTok Shop - Product Catalog API (US)*, *TikTok Shop - Product Catalog API (DE)*, or *TikTok Shop - Product Catalog API (UK)* and create a *Partner Taxonomy Mapping* list for your category attribute. Your next steps depend on what attributes you want to send to TikTok Shop. If you plan to send any of the following attribute types, you need to take additional steps to set them up: * The brand attribute * Attributes that require predefined values * Multi-value attributes * Product variant attributes See the following sections for information on setting up the export itself and working with each attribute type listed above. To see what data in your feed doesn't meet the export channel requirements, you can use the Analyzer feature. See \[component:65264] for more information on identifying the data that needs optimization. See [TikTok Shop Partner Center API Documents](https://partner.tiktokshop.com/doc/page/262784?external_id=262784) for reference on TikTok Shop's requirements for each attribute. Add and set up your TikTok Shop export [#add-and-set-up-your-tiktok-shop-export] In the site dedicated to the TikTok Shop export, add and set up the needed export as follows: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for the needed export based on your country of interest, hover over it, and select **Add**: * Search for and add *TikTok Shop - Product Catalog API (US)* if you want to sell products on the US market. UUID-5f534def-dd5e-2b5f-8d74-b92fb1401bee * Search for and add *TikTok Shop - Product Catalog API (UK)* if you want to sell products on the UK market. UUID-39fba53d-f4fe-ae77-65ae-ab120f44e168 * Search for and add *TikTok Shop - Product Catalog API (DE)* if you want to sell products on the German market. UUID-29ac6e3c-bee0-41c2-ecaf-520441ba72f3 On the Exports page, select the name of the added export. Select **Add Destination**, choose *TikTok Shop Export Products* from the dropdown, give it a name as desired, and then select **Save**. UUID-1113ce73-1500-6c2d-6213-8b7489bd8a7b In **Authentication**, select the TikTok Shop authentication you have added to your Productsup organization or project. To let the platform create a file and log all calls to the TikTok Shop API, toggle the **Log API calls** button to *On*. You can also toggle **Log headers of API calls** to *On* to let the logs feature request and response headers. You can use these settings to troubleshoot your export setup on demand, but you shouldn't use them permanently because they slow down the export process. Toggle the **Enable Feedback File** button to *Off* if you don't want the platform to receive feedback files from TikTok.This feature is active by default to let Productsup receive a feedback file from the TikTok Shop API in case of export errors. This helps to troubleshoot the setup. Toggle the **Active** button to *On* to activate the destination. Select **Save**. Go to **Lists** from your site's main menu and select **ADD LIST**. Choose **Partner Taxonomy Mapping** and select **Continue**. Give the list a desired name, select the needed taxonomy in **Taxonomy**, and choose **Import** in **Stage**: * Search for and add the taxonomy *Tiktok US categories with ids* if you want to sell products on the US market. UUID-8201a930-6b62-3907-271e-64f523c96f5e * Search for and add the taxonomy *Tiktok UK categories with ids* if you want to sell products on the UK market. * Search for and add the taxonomy *Tiktok DE categories with ids* if you want to sell products on the German market. Select the **Attribute** field to choose the attribute in your import stage that contains your products' category data. Then, select **Add** at the bottom of the page to add the list. Go through all the values of your category attribute in the column on the left and select the corresponding TikTok Shop categories in the **Replace term** column. UUID-c2f3e530-53c5-c709-5844-a3ee7a04273b You must create and set up a new Partner Taxonomy Mapping list every time you modify the chosen category attribute in your data source and import its new values into your site. Otherwise, the already existing list can't upload your new values, and you can't map them to the corresponding TikTok Shop categories. Once you create a new Classification Mapping list, you need to choose it in the related rule box. Go to **Dataflow** and select the added export from the dropdown on the left. Map all the needed attributes from import to export. The attributes you see in the export stage are relevant for products of all your TikTok categories. Map your import-stage category attribute to both **category\_id** and **category\_path** in the intermediate stage to add the needed rule boxes and apply the Partner Taxonomy Mapping list. Select **category\_id** in the intermediate stage and open the **Select an Option** dropdown on the right to find and add the rule boxes: 1. Search for and select **Taxonomy Mapping**. Choose your category list in **List**. 2. Search for and select **Split String**. Enter `|` in **Splitter**, `0` in **From**, and `1` in **Items**. Select **Save**.This way, the **category\_id** attribute contains only the ID of the needed category. Select **category\_path** in the intermediate stage and open the **Select an Option** dropdown on the right to find and add the rule boxes: 1. Search for and select **Taxonomy Mapping**. Choose your category list in **List**. 2. Search for and select **Split String**. Enter `|` in **Splitter**, `1` in **From**, and `1` in **Items**. Select **Save**.This way, the **category\_path** attribute contains only the path of the needed category. To let the site display your category-specific attributes in Dataflow, select **Run** in the top-right corner of your view. This run will fail because you haven't yet mapped all the mandatory attributes, so no data export occurs at this stage. The aim of the run is to import the needed categories and attributes in Dataflow. Once the site run finishes, the **Classifications** dropdown appears in the top ribbon in Dataflow. Select each category in this dropdown to let Dataflow display the relevant category-specific attributes in the export stage. Map all the needed attributes from import to export. UUID-851628c1-299a-3792-c36e-44bb28a60f66 If you can't see the **Classifications** dropdown when the site run finishes, try refreshing your page. Set up the brand attribute [#set-up-the-brand-attribute] When receiving brand information about a product, TikTok Shop requires the ID of that brand. To satisfy this requirement, you need to create a Partner Taxonomy Mapping list in your site and map your current brand attribute with the brand IDs expected by TikTok: Go to **Lists** from your site's main menu and select **ADD LIST**. Choose **Partner Taxonomy Mapping** and select **Continue**. Give the list a desired name, select **Tiktok brands with ids** in **Taxonomy**, and choose **Import** in **Stage**. UUID-c954ca55-f751-a3c1-251f-6a1cc454ccdf Select the **Attribute** field to choose the attribute in your import stage that contains your products' brand data. Then, select **Add** at the bottom of the page to add the list. Go through all the values of your brand attribute in the column on the left and select the corresponding TikTok-recognized brands and brand IDs in the **Replace term** column. UUID-b225c038-7b2c-d310-40f6-165b88861fee You must create and set up a new Partner Taxonomy Mapping list every time you modify the chosen brand attribute in your data source and import its new values into your site. Otherwise, the already existing list can't upload your new values, and you can't map them to the corresponding brands and brand IDs recognized by TikTok Shop. Go to **Dataflow** and select **TikTok Shop Product Export API Main** from the dropdown on the left. To apply the brand-mapping list to your attributes and extract the needed data from it, select **brand\_id** in the export stage and open the **Select an Option** dropdown on the right to find and add the rule boxes: 1. Search for and select **Taxonomy Mapping**. Choose your brand-mapping list in **List**. 2. Search for and select **Split String**. Enter `|` in **Splitter**, `0` in **From**, and `1` in **Items**. Select **Save**.This way, the **brand\_id** attribute contains only the IDs of the needed brands, as required by TikTok Shop. Set up attributes that require predefined values [#set-up-attributes-that-require-predefined-values] For some attributes, TikTok Shop accepts predefined values only and requires receiving the IDs of those values together with the values themselves. For example, TikTok Shop accepts only the values *Foldable* and *Non-Foldable* for the attribute `product_attribute. Foldable Furniture#100887` and also expects to receive those values' IDs *1002263* and *1002263* in this attribute. You thus need to send the values as follows: `Foldable:::::1002263` and `Non-Foldable:::::1004668`. To check which attributes in your feed require predefined values with value IDs: Go to **Dataflow** and select your export from the dropdown on the left. For category-specific values, open the **Classification** dropdown and select the needed category. In the **Overview** dropdown, select **Readiness**. The platform highlights problematic attributes in orange or red. Select the readiness percentage under the name of each problematic attribute. If the attribute supports only predefined values, you will see a similar pie chart in the *Analyzer tests* section and a list of the supported values for this attribute. UUID-19b7bf14-9b37-5ec5-244d-456e599985a6 See \[component:65264] for more information on the Analyzer and export readiness scores. To provide the right values and the relevant value IDs in the attributes that support only predefined values, do the following for each of these attributes: Go to **Lists** from your site's main menu and select **ADD LIST**. Choose **Partner Taxonomy Mapping** and select **Continue**. Give the list a desired name, select **Tiktok non-customized with ids** in **Taxonomy**, and choose **Import** in **Stage**. UUID-a5357328-3087-2b9a-3698-7c9b7ab3c484 Select the **Attribute** field to choose the attribute in your import stage that should contain predefined values. Then, select **Add** at the bottom of the page to add the list. Go through all the values of your chosen attribute in the column on the left and select the corresponding values supported by TikTok Shop in the **Replace term** column. UUID-354b1c5b-d6fe-f346-18a2-05ebfdaf6429 You must create and set up a new Partner Taxonomy Mapping list every time you modify the chosen attribute in your data source and import its new values into your site. Otherwise, the already existing list can't upload your new values, and you can't map them to the corresponding predefined TikTok Shop values with IDs. Go to **Dataflow** and select your export from the dropdown on the left. To apply the list to the chosen attribute and extract the needed data from it, select the relevant attribute in the export stage and open the **Select an Option** dropdown on the right to find and add the rule boxes: 1. Search for and select **Taxonomy Mapping**. Choose your list in **List**. 2. Search for and select **Split String**. Enter `|` in **Splitter**, `1` in **From**, and `1` in **Items**. Select **Save**. Set up multi-value attributes [#set-up-multi-value-attributes] TikTok Shop allows some attributes to contain multiple values. Here are some of these attributes: * Images * Material * Delivery service IDs To see if an attribute can send multiple values to TikTok Shop, you can use the Analyzer feature. If an attribute doesn't have analyzer tests at the export stage in the Analyzer, the attribute is likely to support multiple values. See \[component:65264] for more information on the Analyzer feature. You can also see which attributes support multiple values in your TikTok account. Most multi-value attributes are category-specific. For all the attributes that should send multiple values to your TikTok Shop account, do the following: Go to **Dataflow** and select your export from the dropdown on the left. Map an attribute from the import stage to the corresponding multi-value attribute in the intermediate stage. Select the attribute in the intermediate stage and open the **Select an Option** dropdown on the right to find and add the rule boxes. Search for and select **Append/Prepend Column**. UUID-1aae6a86-4060-591c-49c7-93eb2d03019b In **Column**, choose another attribute that should add its value to the multi-value attribute. Then, select **append** in **Mode**. In the **text** field, enter `#` to separate the value of the added attribute from the current value. Open the **Select an Option** dropdown to search for and select **Text Replace**. UUID-61646542-d63a-082c-8572-c3943200a815 Enter `#` in **Search for** and `#` in **Replace by**. With the suggested settings, the Append/Prepend Column rule box adds the value of your chosen attribute to the current value in your edited multi-value attribute by using the number sign (`#`) and a space before it as a delimiter.Don't forget to enter the space before `#` in **Search for** to let the Text Replace rule box remove the space. Select **Save**. If you want to add more than one (1) attribute to a multi-value attribute in the intermediate stage, you need to add as many Append/Prepend Column rule boxes as necessary to append all the desired values.Mind that the order of the rule boxes matters. The higher a rule box is in the list of added rule boxes, the earlier a site processes and applies it to the data. So the order of the Append/Prepend Column rule boxes from top to bottom should be the same as your desired order of values in the attribute.You should add the Text Replace rule box only once, and it should be at the bottom of the rule box list. Mind product variants and their attributes [#mind-product-variants-and-their-attributes] The TikTok Shop product data scheme uses main products and product variants. All products in your feed must have **product\_id** and **parent\_id**. The **product\_id** attribute uniquely identifies product variants, and the **parent\_id** attribute links all product variants to their main product. The platform considers the first product variant with a new **parent\_id** as both a product variant and the main product. All product variants have the same values as their main products in such attributes as **parent\_id**, **product\_name**, **images**, **category\_id**, **description**, etc. However, some attributes can contain values individual to each product variant. The names of these varying attributes start with **sku.**, except for **product\_id**. When modifying the data in your feed, you shouldn't let product variants with the same **parent\_id** have different values in the shared attributes. But the values in **product\_id** and the **sku.** attributes can differ per product variant. Import orders from TikTok Shop [#import-orders-from-tiktok-shop] To let Productsup import your orders from TikTok Shop, do the following in the site dedicated to the TikTok Shop data source: TikTok users can cancel orders within one (1) hour after placing an order. You can import orders created within the last hour, but you shouldn't ship them right away. Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *TikTok Shop Order Import*, select **Add**, give it a name as desired, and then choose **Continue**. UUID-bde35242-8441-95aa-37eb-4608785bce50 In the **Order Status Filter** area, select the statuses that orders should have for Productsup to import them. If you don't select any order statuses, the platform imports orders of all statuses. Hold the *Ctrl* or *Cmd* key to select multiple order statuses. *Shift* helps to select a range of statuses. See [Fulfillment Process Integration Design](https://partner.tiktokshop.com/doc/page/273742) for more information on the TikTok Shop order status flow. If you want to import orders created within a specific timeframe only, enter the needed number of days in **Earliest Order Creation Time** or **Earliest Order Update Time**. The expected input format is a digit in both fields.For example, if you enter `7` in **Earliest Order Creation Time**, the platform imports only the orders created within the last seven (7) days. To import orders updated within the past three (3) days, enter `3` in **Earliest Order Update Time**. In **Authentication selection**, select the TikTok Shop authentication you have added to your Productsup organization or project. Specify the desired name of the data source in **Description (optional)**. Select **Save**. Go to **Exports** from your site's main menu and select **ADD EXPORT**. Find your order management system, add it as an export, set it up, and map the needed attributes in Dataflow. Choose **Run** in the top-right corner of the page to let the site import your order data and send it to your order management system. Send shipment updates to TikTok Shop [#send-shipment-updates-to-tiktok-shop] There are two (2) types of shipping methods available on TikTok Shop: . Self-shipping, which you manage yourself. . Shipping managed by TikTok. * Currently, Productsup supports only self-shipping and doesn't allow splitting and batching packages. * TikTok users can cancel orders within one (1) hour after placing an order. You shouldn't ship orders created within the last hour because there is a cancellation risk. To send shipment updates to TikTok Shop and notify your customers of the shipment process, do the following in the site dedicated to the TikTok Shop shipment export: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *TikTok Shop - Shipment Notifications API*, hover over it, and select **Add**. UUID-a58cfc18-f49f-21bc-9621-26aa2b65bf13 On the Exports page, select the name of the added export to set it up. Select **Add Destination**, choose *TikTok Shop Shipment Notification Export* from the dropdown, give it a name as desired, and then select **Save**. UUID-e6de1113-e44e-1379-192e-523487b8759b In **Authentication selection**, select the TikTok Shop authentication you have added to your Productsup organization or project. Toggle the **Feedback Import** button to *Off* if you don't want the platform to receive feedback files from TikTok.This feature is active by default to let Productsup receive a feedback file from the TikTok Shop API in case of export errors. This helps to troubleshoot the setup. Toggle the **Active** button to *On* to activate the destination. Select **Save**. Go to **Dataflow** and select your TikTok Shop - Shipment Notifications API export from the dropdown on the left. Map all the needed attributes from import to export. Once all the settings are ready, you can send your shipment updates to TikTok Shop. Select **Run** in the top-right corner of your view to send the data. # Add CrossEngage (JSON) export import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The CrossEngage (JSON) export lets you send product data to your CrossEngage instance directly from the platform. Using the Crossengage (JSON) export, you must access a plug-in in the platform to convert your data as a JSON file. Add and set up export [#add-and-set-up-export] To add and set up the *Crossengage (JSON)* export in Productsup: Go to **Exports** from your site’s main menu. Select **ADD EXPORT** and search for *Crossengage (JSON)*. Select **Add** and confirm adding it again as an export. UUID-f21567af-a518-19b5-f1cd-2efc537a07ee Now, select **Add Destination** and choose your desired destination from the drop-down list. (Optional) In **Name**, you can customize the destination name. Select **Save**. UUID-7727dbb6-313e-c2e1-8625-1246b3db18c0 Enter the credentials or settings for your destination, as necessary. Before converting your feed file to JSON, rename it to *xxx.json*. For example, `myexamplecrossengfile.json`. Go to the **Settings** tab in the Crossengage (JSON) export channel and confirm that `,COMMA` appears in **CSV Separator**. To confirm that the export plug-in functions correctly, switch the **CSV Enclosure** button to **On**. In **Export-Plugin**, enter the following path for the plug-in: `\Export\JsonCrossengage`. UUID-51e12ae5-e4bb-a017-0714-fa2807a3f059 Select **Save**. # Add TikTok Product Catalog export import { Step, Steps } from "fumadocs-ui/components/steps"; The TikTok Dynamic Product Ads feature automatically retargets users with relevant product ads based on their activities inside advertiser apps and websites. Use the TikTok Product Catalog to push your product catalog with enhanced product information for your Dynamic Product Ads. This export creates a CSV catalog feed file for uploading your products to the catalog. To export product data using delta logic, use the *TikTok Product Catalog API* export instead. See [Add TikTok Product Catalog API export](/docs/help-center/export-data-feeds/add-export/add-tiktok-product-catalog-api-export). See [TikTok for Business Developers](https://ads.tiktok.com/marketing_api/docs?id=1701890909484033) for more information on connecting to your TikTok for Business. Add and set up the export [#add-and-set-up-the-export] To add the TikTok Product Catalog export in Productsup: Go to **Exports** from your site’s main menu and select **ADD EXPORT**. Search for *TikTok Product Catalog* , hover over it, and select **Add**. UUID-9f902e35-f9b9-1810-4af6-a5eae57fceab On the **Exports** page, select the name of the added export template to set it up. Select **Add Destination** and choose your desired destination from the dropdown, for example *Productsup Server*. Give it a name as desired, and select **Save**. See [Find the most suitable export destination](/docs/help-center/best-practices/find-the-most-suitable-export-destination) to learn what destination fits you. UUID-a0e8b147-2a47-bda9-bd94-3c787546993b Select **Save**. # Add Bing Shopping export import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Bing Shopping is a key Microsoft Advertising platform that lets customers search for products from various sellers. Prerequisites [#prerequisites] To set up the Bing Shopping export, you need: . Your Microsoft Advertising account. Set up Bing Shopping export [#set-up-bing-shopping-export] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Bing Shopping*, hover over it, and select **Add**. UUID-2a044af9-dad9-557b-1b7f-448164680a83 Go to **Exports** and select your *export name*. Select **Add Destination**, choose the needed destination from the Destination drop-down menu, and select **Save**. You can choose any standard flat-file destination option, such as *Productsup Server* or *SFTP/FTP/FTPS Server*. UUID-976e9e55-8fd3-9610-ac50-b7fcab759f6f Select **Save**. Go to **Dataflow** from the site's main menu and choose the added export from the drop-down menu in the top ribbon on the left. Map the attributes from import to export. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) for more information. When your data is ready, select **Run** or **Export this export** in the upper right corner of the page. Productsup creates a link to the TXT output file. To find it, scroll to the *Filename* section at the bottom of the export setup page. Copy the link and paste it into the file in your Microsoft Advertising account to upload your products. # Set up the Amazon Product Export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; The Amazon Product Export lets you create new product listings on Amazon and update existing ones directly from Productsup. It works for both Seller Central (third-party sellers) and Vendor Central (first-party vendors) accounts, and connects via Amazon's Selling Partner API (SP-API). Prerequisites [#prerequisites] Before setting up the Amazon Product Export, confirm the following: * You have an active Amazon Seller Central or Vendor Central account. * You have your **Seller ID** (Seller Central) or **Vendor Code** (Vendor Central). You can find these in the left-hand navigation or the product listing view in your Amazon account. * The marketplace you want to export to is available in the export list. See [Add the export](#add-the-export). * Your Amazon account is in good health: valid payment method, correct VAT or tax details, and no outstanding compliance issues. If authentication fails during setup, the most common cause is an issue with your Amazon account — for example, an expired payment method or missing VAT details — and not a Productsup error. Check your Amazon account health before raising a support request. Add the export [#add-the-export] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for the marketplace you want to export to. Exports follow the naming format: * **Amazon Seller Central – Product Creation (XX)** for Seller Central accounts * **Amazon Vendor Central – Product Creation (XX)** for Vendor Central accounts Replace **XX** with the country code of your target marketplace, for example *US*, *DE*, or *AU*. Amazon export list showing Seller Central entries for US, AU, CA, MX, DE, and ES If the marketplace you need is not in the list, that region is not yet supported. Contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) to request it. Hover over the export and select **Add**. Configure the destination [#configure-the-destination] On the **Exports** page, select the name of the export you added. Select **Add Destination**. From the dropdown, choose the destination that matches your account type: * *Amazon Seller Central Products* for Seller Central accounts * *Amazon Vendor Central Products* for Vendor Central accounts Give the destination a name and select **Save**. In **Authentication**, select an existing authentication or select **Add New Authentication** to connect your Amazon account via OAuth. Selecting **Add New Authentication** redirects you to Amazon to complete the authorisation. Once authorised, Amazon redirects you back to Productsup automatically. In **Marketplace ID**, select the country or region you are exporting to. This must match the export you selected in [Add the export](#add-the-export). If you are using a Seller Central account, enter your Amazon Seller ID in **Seller ID**. If you are using a Vendor Central account, enter your Amazon Vendor Code in **Vendor Code**. Destination settings panel showing authentication, Marketplace ID set to Germany, Vendor Code field, Feedback Import toggled on, and Category Specific Attributes toggled on Switch **Feedback Import** to *On*. This is required to receive error feedback from Amazon after each export run. Keep **Category Specific Attributes** set to *On*. Switch **Active** to *On* and select **Save**. Set up category mapping [#set-up-category-mapping] You must map your attributes to the Amazon categories using a *Classification Mapping* list to let Productsup know which category-specific attributes should be available to you. Go to **Lists** from your site's main menu and select **ADD LIST**. Select **Classification Mapping** and select **Next**. ADD LIST screen with Classification Mapping selected In **Name**, give the list a descriptive name, for example *Amazon classification mapping*. In **Classification**, select the Amazon export you added in [Add the export](#add-the-export), for example *Amazon Seller Central – Product Creation (DE)*. In **Stage**, select whether your category data comes from the **Import** or **Intermediate** stage. In **Attribute**, select the attribute in your data that contains your product categories. Configure Classification Mapping list showing Name, Classification, Stage, and Attribute fields Select **Add**. Map the category values pre-populated in the list to the corresponding Amazon categories. Map attributes in Dataflow [#map-attributes-in-dataflow] Go to **Dataflow** from your site's main menu and select your Amazon export in the dropdown on the left. Map your category attribute to `__category_path` in the intermediate stage, and apply the *Classification Mapping* rule box using the list you created in [Set up category mapping](#set-up-category-mapping). Select **Run** in the top-right corner of your view. This run will fail — this is expected. The platform uses this run to retrieve the category-specific attribute (CSA) templates from Amazon for the product types in your data. After the run completes, the **Classifications** dropdown appears in the Dataflow toolbar. Use the **Classifications** dropdown to switch between CSA sub-channels and map the attributes for each product type. Some attributes only appear for specific sub-channels — these are the category-specific ones. Dataflow view showing __category_path mapped and the Classifications dropdown open with Amazon Vendor – DE – BRAKE_ROTOR visible Once all attributes are mapped across all sub-channels, check your export readiness before going live. See [Check your export readiness](#check-your-export-readiness). Check your export readiness [#check-your-export-readiness] Use the Readiness analysis tool in Data View to verify your data meets Amazon's requirements before going live. Go to **Data View** from your site's main menu and select your Amazon export from the dropdown on the top left. Select the **Overview** dropdown and choose **Readiness**. Review the readiness score and use rule boxes to correct any flagged issues. Aim for 100% readiness before running a live export. Monitor results after submission [#monitor-results-after-submission] Amazon validates your products in stages — first when you submit them, then through asynchronous compliance checks — before they ever reach a buyer. Productsup does not just send your product data to Amazon; it also brings back the issues Amazon raises during and after submission. That means you can spot errors early, act on them in time, and keep your products live. Channel Feedback for Amazon [#channel-feedback-for-amazon] Channel Feedback is your one-stop dashboard for monitoring product feed issues on Amazon. Instead of hunting through raw error logs, you get a structured, prioritised view of everything Amazon has accepted, rejected, or flagged — all in one place. Channel Feedback for the Amazon export requires activation per site. Contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) with your site ID to request it. See everything at a glance [#see-everything-at-a-glance] The Channel Feedback History page records every feed submission from the past 30 days. Open any export to see what happened, compare results over time, and track your progress as you resolve issues. Feedback from both product submission and compliance checks appears here. Channel Feedback History page showing a list of exports with feedback status, products exported, total issues, errors, and download options Comparing exports over time in Channel Feedback History The following statuses may appear in the history list: | Status | What it means | | -------------------- | ------------------------------------------------------ | | *Received* | Feedback successfully synced — ready to review | | *Partially Received* | Some feedback synced, but the report may be incomplete | | *Not Received* | Sync failed — raise a support ticket for investigation | | *Awaiting* | Sync in progress — check back in a few minutes | | *0 issues found* | No errors or warnings reported for this run | You can download the raw feedback as a CSV file from the history list. Get to the bottom of every issue [#get-to-the-bottom-of-every-issue] Select any export in the history list to open the Channel Feedback Detail page, which shows exactly what Amazon reported back. For each issue, you can see: * How serious it is — whether it is a critical error blocking your products or a suggestion for improvement. * Which field has the problem — price, description, image, and so on, identified immediately. * How many products are affected — so you can gauge the impact at a glance. * What to do about it — clear error messages that make sense. You can switch between two views to investigate issues the way that suits you: * **View by issue** — feedback grouped by error message, with the affected attribute, severity, and the number of products affected by each issue. * **View by product** — feedback grouped by product ID, so you can see every issue tied to a single item. Channel Feedback Detail page — View by issue, showing severity, affected attribute, and number of products per issue Channel Feedback Detail page — View by product, showing every issue affecting a single item Jump straight to the problem products [#jump-straight-to-the-problem-products] When you spot an issue, select **Affected Products** to open a filtered Data View showing only the products with that specific problem — with the affected field already highlighted. You can see exactly which products need attention and act on them immediately, without searching through your entire catalog manually. Channel Feedback reflects Amazon's synchronous validation only. A product accepted at this stage is not guaranteed to be live on Amazon. See [Check for downstream issues](#check-for-downstream-issues) to catch issues that arise after acceptance. Check for downstream issues [#check-for-downstream-issues] Amazon runs a second round of validation hours after the initial acceptance. Issues at this stage do not appear in Channel Feedback. To check for downstream issues, set up an Amazon Product Import datasource using the **Listings API** source. The platform pulls your products back from Amazon with any errors or warnings flagged after acceptance — equivalent to the product issues view in Seller Central or Vendor Central. The Listings API supports up to 1,000 products per call. Use SKU or severity filters to narrow results when working with large catalogs. If the Listings API and the Amazon UI show conflicting results, treat the **Amazon UI as the source of truth**. Discrepancies between the two are an Amazon-side issue. As an alternative, log in to your Seller Central or Vendor Central account directly and review product issues there. Common issues [#common-issues] | Issue | Likely cause | What to do | | -------------------------------------------------------- | ----------------------------------------- | -------------------------------------------------------------------------------------------------------------- | | Authentication fails | Amazon account health issue | Check your Amazon account for expired payment details, missing VAT, or compliance flags | | Products rejected in Channel Feedback | Incorrect or missing attribute values | Review the error messages, correct the data, and run the export again | | Product accepted but not visible on Amazon | Amazon downstream async validation failed | Check via the Product Import (Listings API) datasource or Seller/Vendor Central | | Product not in Channel Feedback and not on Amazon | Submission may have failed silently | Contact [support@productsup.com](mailto:support@productsup.com) with the affected SKU(s) | | Marketplace or product type missing from the export list | Not yet supported | Contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) to request it | # Add Idealo Partner API v2.0 export import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] This section describes how you can modify and upload your feed to the Idealo Partner API v2.0 in the Productsup platform. See Idealo's [Partner Web Service (PWS 2.0) API documentation](https://import.idealo.com/docs/#_put). In the platform, choose from three (3) Idealo Partner API v2.0 export templates to upload your feed: * Idealo Partner API v2.0 - Price Comparison Offers export template for products available for price comparison. * Idealo Partner API v2.0 - Offers Export template for products available for direct checkout and price comparisons on Idealo. * Idealo Partner API v2.0 - Partial Offer Updates for updates to existing products only. Requirements [#requirements] You need to map two attribute groups in *Dataflow* to set up an Idealo Partner API v2.0 successfully: `paymentCosts` attributes - You must provide a value for at least one (1) payment cost field and for any payment method you accept. UUID-ee0dfaeb-801f-8eed-df79-abb74365c7bb * If you do not want to associate a cost, enter `0.00`. `energyLabels`, referred to as EEK (Energy Efficient Class) attributes - You must have values for applicable products, for example, electronics, lighting, and tires, for these fields, as required under EU law: UUID-ae3cda5e-ab8a-4344-3d67-5486c5014e93 See: * [Elektronische Geräte](https://idealo.us8.list-manage.com/track/click?u=55d1194af6621aef71dfb168f\&id=621b39b7b7\&e=3cb2722f36) * [Reifen](https://idealo.us8.list-manage.com/track/click?u=55d1194af6621aef71dfb168f\&id=ab17deae6c\&e=3cb2722f36) * [Lichtquellen](https://idealo.us8.list-manage.com/track/click?u=55d1194af6621aef71dfb168f\&id=a3d2e5828e\&e=3cb2722f36) You can also learn more in Idealo's API documentation regarding labels. See [Partner Web Service (PWS 2.0) API Documentation](https://import.idealo.com/docs/#_put). Delete products from Idealo Partner API v2.0 [#delete-products-from-idealo-partner-api-v20] Productsup applies delta logic to capture products removed from import data and automatically delete them from Idealo. Delta logic means that when you remove offers from the import data, the platform compares products to the previous run and identifies changed and deleted products. The platform changes or deletes those products from the export during the next run. Unchanged products stay without changes. Idealo Partner API v2.0 - Price Comparison Offers [#idealo-partner-api-v20---price-comparison-offers] Use the Idealo Partner API v2.0 - Price Comparison Offers export template for products available for price comparison. Go to **Exports** from your site’s main menu. Select **ADD EXPORT** and search for *Idealo Partner API v2.0 - Price Comparison Offers*. UUID-44f38f43-de0f-cdec-e2e6-20f74ec52261 Select **Add**, give it a custom name if you desire, and select **Add** again. Under **Destinations**, select **Add Destination** and choose *Idealo Offer Export API* from the drop-down list. Optionally, you can customize the destination's description in **Name**. UUID-6d5b5b0f-8a74-819b-c6d6-745d3474c4f9 In **Client ID** and **Client Secret**, enter your Idealo client credentials. Enter the Idealo **Shop ID** for shop orders. (Optional) To continue with the feedback import option, switch **Feedback import** to **On**. Use this option if you want an error file returned to the platform once your data export finishes. The platform returns the feedback error file to your site as an additional data source with the following: * `SKU`: Your product ID. This field contains the default name or the name you defined during setup in step [3](#N1641219469571). * `**___idealo_id**`: The Idealo product ID. * `**___idealo_status**`: Product upload status. For example, `OK`, `failed`, and `ignored`. * `**___idealo_status_message**`: The reason why the upload failed for this product. For example, `Mandatory field 'title' is missing or empty!` Turn on the destination by switching **Active** to **On**. Select **Save**. UUID-11dc8687-15af-fd6e-62e9-3a546344f2e5 Idealo Partner API v2.0 - Offers Export [#idealo-partner-api-v20---offers-export] Use the Idealo Partner API v2.0 - Offers Export template for products available for direct checkout and price comparisons on Idealo. Go to **Exports** from your site’s main menu. Select **ADD EXPORT** and search for *Idealo Partner API v2.0 - Offers Export*. UUID-1fcce15d-ea84-cf8d-9bb0-22a5e6a677b6 Select **Add**, give it a custom name if you desire, and select **Add** again. Under **Destinations**, select **Add Destination** and choose *Idealo Offer Export API* from the drop-down list. Optionally, you can customize the destination's description in **Name**. UUID-6d5b5b0f-8a74-819b-c6d6-745d3474c4f9 In **Client ID** and **Client Secret**, enter your Idealo client credentials. Enter the Idealo **Shop ID** for shop orders. (Optional) To continue with the feedback import option, switch **Feedback import** to **On**. Use this option if you want an error file returned to the platform once your data export finishes. The platform returns the feedback error file to your site as an additional data source with the following: * `SKU`: Your product ID. This field contains the default name or the name you defined during setup in step [3](#N1641220327143). * `**___idealo_id**`: The Idealo product ID. * `**___idealo_status**`: Product upload status. For example, `OK`, `failed`, and `ignored`. * `**___idealo_status_message**`: The reason why the upload failed for this product. For example, `Mandatory field 'title' is missing or empty!` Turn on the destination by switching **Active** to **On**. Select **Save**. UUID-11dc8687-15af-fd6e-62e9-3a546344f2e5 Idealo Partner API v2.0 - Partial Offer Updates [#idealo-partner-api-v20---partial-offer-updates] Use the Idealo Partner API v2.0 - Partial Offer Updates for updates to existing products only. This method is efficient since there are fewer attributes required to send. Go to **Exports** from your site’s main menu. Select **ADD EXPORT** and search for *Idealo Partner API v2.0 - Partial Offer Updates*. UUID-efabb3fb-f13b-f016-82dc-d48358622f88 Select **Add**, give it a custom name if you desire, and select **Add** again. Under **Destinations**, select **Add Destination** and choose *Idealo Offer Updates API* from the drop-down list. Optionally, you can customize the destination's description in **Name**. UUID-c662b7f5-19d1-b33a-e546-82ffa37a50ef In **Client ID** and **Client Secret**, enter your Idealo client credentials. Enter the Idealo **Shop ID** for shop orders. (Optional) To continue with the feedback import option, switch **Feedback import** to **On**. Use this option if you want an error file returned to the platform once your data export finishes. The platform returns the feedback error file to your site as an additional data source with the following: * `SKU`: Your product ID. This field contains the default name or the name you defined during setup in step [3](#N1641220304541). * `**___idealo_id**`: The Idealo product ID. * `**___idealo_status**`: Product upload status. For example, `OK`, `failed`, and `ignored`. * `**___idealo_status_message**`: The reason why the upload failed for this product. For example, `Mandatory field 'title' is missing or empty!` Turn on the destination by switching **Active** to **On**. Select **Save**. UUID-2f1f2e3c-803c-4291-0aa2-7f4fc297fbdb # Set up the Walmart Marketplace Price & Inventory export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Walmart Marketplace treats pricing and inventory as two separate updates. Productsup provides a dedicated export and destination for each: * **Walmart Marketplace Pricing update**, sent to the *Walmart Marketplace Price export* destination. * **Walmart Marketplace Inventory update**, sent to the *Walmart Marketplace Inventory export* destination. Both update products you've already listed on Walmart Marketplace. Prerequisites [#prerequisites] * You have an approved Walmart Marketplace seller account (US) with access to Seller Center. * You have set up the [Walmart Marketplace Product Creation export](/docs/help-center/export-data-feeds/add-export/add-walmart-marketplace-product-creation-export), or your products are otherwise already listed on Walmart Marketplace. Set up the pricing export [#set-up-the-pricing-export] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for **Walmart Marketplace Pricing update** and select **Add**. Select the export's name link. Select **Add Destination** and choose *Walmart Marketplace Price export* from the dropdown. Give it a name as desired and select **Save**. In **Authentication**, choose the Walmart authentication you previously set up, or select **Add New Authentication** to connect your account. Toggle **Active** to **On** and select **Save**. Go to **Dataflow** and select **Walmart Marketplace Pricing update** in the dropdown on the left. Map your price attributes from the intermediate to the export stage. The export uses **SKU** as the delta key to match rows to your existing listings. Select **Run** in the top-right corner to send your pricing updates to Walmart. Set up the inventory export [#set-up-the-inventory-export] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for **Walmart Marketplace Inventory update** and select **Add**. Select the export's name link. Select **Add Destination** and choose *Walmart Marketplace Inventory export* from the dropdown. Give it a name as desired and select **Save**. In **Authentication**, choose the Walmart authentication you previously set up, or select **Add New Authentication** to connect your account. Toggle **Active** to **On** and select **Save**. Go to **Dataflow** and select **Walmart Marketplace Inventory update** in the dropdown on the left. Map your inventory attributes from the intermediate to the export stage. The export uses **SKU** as the delta key to match rows to your existing listings. Select **Run** in the top-right corner to send your inventory updates to Walmart. Walmart limits pricing and inventory updates to 6 runs per day. If you need to update more often, request a higher limit directly from Walmart Marketplace. # Add Magento 2.x Stock and Price Export import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Magento 2.x Stock and Price Export lets you export products from the Productsup platform to a Magento 2.x instance. Use the Magento Stock and Price Export to enhance your data and provide more product information. Add and set up export [#add-and-set-up-export] To add the Magento 2.x Stock and Price Export in Productsup: Go to **Exports** from your site’s main menu. Select **ADD EXPORT** and search for *Magento 2.x Stock and Price Export.* UUID-fc7d0a61-ec7b-7d83-3070-492def2f630f Select **Add** and confirm adding it again as an export. In the export setup, select **Add Destination** and choose *Magento 2 API Stock and Price Export* from the drop-down list. Now enter a destination **Name**. UUID-4eaa8786-c9c9-03d1-be2f-75706015131e In **Authentication**, choose **Select authentication**. Then choose an available authentication from the drop-down list or select **Add New Authentication**. You can also choose to use pre-existing export tags from another platform in **Authentication**. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems) to set up authentication with another platform. Add your Magento store URL in **Base URL**. Switch **Feedback import** to **On** if you want an error file returned to the platform once your data export finishes. Go to step [10](#listitem-idm11616685403177) if **Feedback import** is set to **Off**. Choose a column that you want to receive a feedback import file on in **Main feed connection column**. Enter the column that connects to your feedback import in **Feedback file connection column**. Select a **Magento Version** from the drop-down list. Turn on the destination by switching **Active** to **On**. Select **Save**. UUID-16b4e020-6eb1-e8ba-0230-b111c953d6c4 # Add Google Responsive Search Ads export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] This document explains the necessary steps for exporting your product ads using the Google Responsive Search Ads export. And how to use your exports during campaign creation in Google Ads. The Google Responsive Search Ads export replaced the Google Ads API export. Productsup sunset the Google Ads (API) in anticipation of Google discontinuing support for expanded text ads on 30 June 2022. You can create Google Ads campaigns, even if you don't list your products in Google Merchant Center, such as real estate listings. To export ads to the Google Ads API, follow these required steps: Add Google Ads authentication. Set up the Google Responsive Search Ads export. Set up the Google Responsive Search Ads destination. Add your Google Ads authentication [#add-your-google-ads-authentication] To add and set up Google Ads authentication: Go to **Authentication** from the site's main menu. Then select **ADD AUTHENTICATION**. UUID-16d3cd75-a9a0-9109-fb9c-f753f3da04a6 Next, select *Google Ads* from the drop-down menu and enter a custom name as desired in **Name**. Then select **Next**. UUID-4e96a2b5-b945-637c-22ae-56f30056a148 After selecting **Connect**, you can now proceed to Google to authenticate and authorize your Google and Productsup connection. UUID-6a28ead6-aecc-1989-3fbe-75dfac7748f1 Set up the Google Responsive Search Ads export [#set-up-the-google-responsive-search-ads-export] Go to **Exports** and select **ADD EXPORT**. Next, choose the *Google Responsive Search Ads* export and select **Add**. Confirm the export again by selecting **Add**. UUID-f8f651fd-9a74-42c4-87c0-8888e8d13132 To set up the export destination, select **Add Destination**, and choose *Google Responsive Search Ads* from the drop-down menu. Now enter a custom name if you desire in **Name**. UUID-0361000f-e196-f921-18c0-6f16cb945209 In **Authentication to use**, select **Add New Authentication** or choose **Select authentication**. Choose the authentication you previously set up in step [1](#N1618330122474). You can also use pre-existing export tags from another platform in **Authentication**. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems) to set up authentication with another platform. Now, enter the **Manager customer ID** and **Campaign owner customer ID**, and **Campaign ID** found in your Google Ads account. Enter a value in **Final URLs column values separator** to separate URLs. The default separator is a comma (`,`). Turn on the destination by switching **Active** to **On**, then select **Save**. UUID-72d2f0c8-7f08-8329-e4b7-39b9c980e452 Create your campaign ads in Productsup and then perform an export to send them to Google Ads. Creating Adgroups [#creating-adgroups] You can find the different Adgroups that structure your text ads within your Google Ads account. Aside from assigning existing Adgroups to your text ads, you can dynamically create them. By populating the `group_name column`, the export to API creates the Adgroups if they are not yet present in Google Ads. Populate export columns in Dataflow [#populate-export-columns-in-dataflow] Add export column fields to populate ad content, as seen in the following expanded text ad examples: UUID-d454a489-8831-de37-0e45-10b444592405 The following content was necessary to create the expanded text ad, as previously shown: | Export Column | Content | | --------------- | ---------------------------------------------------- | | `headlinePart1` | Cruise to Mars #12QjNuTP | | `headlinePart2` | Best Space Cruise Line | | `description` | Buy your tickets now! | | `finalUrls` | [http://www.example.com/0](http://www.example.com/0) | | `path1` | all-inclusive | | `path2` | deals | Run log and warnings [#run-log-and-warnings] You can open the Run log while the site is processing to get live responses from the Google Responsive Search Ads export. Select the **Run log** icon in the top-right corner. UUID-1d843065-afeb-583b-144c-9591ffdc7933 The Run log can warn you about trademark violations, unapproved word usage, and syntax errors. # Add Google Things To Do export import { Step, Steps } from "fumadocs-ui/components/steps"; *Things to do* is an area within Google Travel where users can discover and book tours, activities, and attractions. You can list your tours, activities, and attractions, providing descriptions, prices, and availability information. When users select a listing, they get to the operator's website and can book directly without any Google's commission. You can use the *Google Things To Do* export in Productsup to upload your product feed to Google in the specified JSON format. Prerequisites [#prerequisites] To set up the *Google Things To Do* export, you need: . Create a Things to do centre account and Secure File Transfer Protocol (SFTP) endpoints in Google. During the setup, you need to provide the following SSH key to Google: | `ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDNnqgT4GoIWhMaY7kp1XvLJXjWLy7Q49ltWaLGbFFN80GzWWWRYOjpGZSPi8KgvkbACkbGu5kYDGYDy+jBlhiiI/XDTO02h5ZNjkaEHJ8s/FMqhaY6eOwwiRfQDdwBAoPY5yxZI/yfsdP3lJaZgZykyMPCiYviUK662j1H6gvLBFcIhROCD1BIby5x2JgRck7apgkEWAmdArWjCDJCMtouEb1X90gQZwgkzsZDDiE8gKxFvqyMoLtCM2Vo6caC/IyIX9mrj9cOhsOOYxK1LCHZTOL1UiYkDGGJpaItyQwjkVuQ4ACuWv1eVGGWCZCw7dShntBOuY4ryu5YzcAbBGm8r/lzdZ+bVnmBeCC8Cf1Al+46jV+KmpVkqcXeLuWCA1rk9xLPv0fa92DFQcRW5x9GLV+Kq25Q4F34RxmQ3LLX6gTky+MhVa8NFBijRcTiaPrTyjzlRKS2acYuX8rnBFfI9l8MqDPzZq0XEjO2HJNzmAzknwFR6ZogDzxUybu+GbU= google-things-to-do@productsup.com` | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | See [Things to do centre: Starter guide](https://support.google.com/google-ads/answer/13387362?hl=en-AU#:~:text=Initial%20setup,in%20Things%20to%20do%20centre.) for more information. | Set up Google Things To Do export [#set-up-google-things-to-do-export] Go to **Exports** from your site's main menu and select **Add export**. Search for *Google Things To Do*, hover over it, and select **Add**. UUID-91e46608-43b8-145f-e559-721dfc2a8573 In Exports, select the added export *Google Things To Do*. Select **Add Destination**. Select *Google Things To Do* from the **Destination** drop-down menu, and choose **Save**. In **SFTP Host**, enter your SFTP server address without prefixes, such as `sftp://`. In **Port**, enter the port number that the platform should use to establish a connection with your SFTP server. By default, the platform uses port `22`. In **SFTP Username**, enter your server username. If you want to send your data to a specific folder on your SFTP server, provide the path to the desired folder in **SFTP Directory**. By default, the platform sends your data to the root folder. Leave the **Feedback Import** toggle *On* to let the platform receive feedback files from the Google API in case of export errors. This helps to troubleshoot the setup. Toggle **Active** to *On* to activate the destination. Select **Save**. UUID-b6c05286-438c-c46d-b0f2-6fd7624e568f Go to **Dataflow** from the site's main menu and choose the added export from the drop-down menu in the top ribbon on the left. Map the attributes from import to export. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) for more information. Use the following recommendations: 1. The platform creates the attributes for the data in English. If you need to add attributes containing the data in other languages, you can add user-generated attributes in Dataflow. Provide them with the names according to the following naming convention: `product.title.[language abbreviation]` such as **product.title.en** for English, **product.title.de** for German, and so on. 2. For sections with multiple values, such as product features, product media, and product options, for the sake of brevity, we support only one value by default. If you need more values, you can add them by creating separate user-generated attributes. Name them the same way as shown in the example: * For **product.media\[0].url**, add **product.media\[1].url**, **product.media\[2].url**, and so on. * For **option\[0].id**, add **option\[1].id**, **option\[2].id**, and so on. * For **option\[0].price\_option\[0].id**, add **option\[0].price\_option\[1].id**, **option\[0].price\_option\[2].id**, and so on. 3. To provide coordinates in the coordinates attribute, use the comma (`,`) separator, such as `-25.3510319200353,131.03269662583725`. 4. As the products for Things to do can serve different user experiences, the mandatory attributes may vary, which we can't highlight on the platform as usual. You can find the list of mandatory attributes that you must map in [Required and recommended fields](https://developers.google.com/actions-center/verticals/things-to-do/guides/partner-integration/required-fields#:~:text=Note:%20By%20providing%20the%20required,other%20fields%20are%20considered%20optional.\&text=%5B1%5D%20Experience%20module%20may%20choose,tickets%20and%201st%20party%20experiences.). If your data is ready, select **Run** or **Export** in the upper right corner of the page. If you don't want to run the entire site, including all active exports set up in it, you can go to **Exports**, select the added *Google Things To Do* export, and then choose **Export this export**. # Add DoorDash exports import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] DoorDash is a US-based on-demand delivery platform where grocery and convenience retailers list their products for local delivery. Productsup has built the DoorDash exports to let you keep your DoorDash listings up to date automatically — your product catalog, your store-level pricing and availability, and your store opening hours. DoorDash keeps three kinds of data separate — your product catalog, your store-level inventory, and your store details. Productsup provides four channels across them. You can add one, some, or all of them, depending on what you need: | Channel | What it sends | When to use it | | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | | **DoorDash Items - API** | Your product catalog — names, descriptions, images, and categories. | You need your products listed on DoorDash. | | **DoorDash Inventory - API** | Store-level pricing and availability as a delta — only what has changed since the last run is sent directly to DoorDash. | You need ongoing, incremental price and stock updates per store. | | **DoorDash Inventory Pull - API** | Store-level pricing and availability as a full catalogue — every run prepares a complete per-store file that DoorDash collects itself. | You have large or batch-style stock updates, or DoorDash prefers to pull a full file. | | **DoorDash Store Management - API** | Each store's opening hours and holiday hours. | You need your store hours synced to DoorDash. | Inventory has two flows: choose **DoorDash Inventory - API** for incremental delta updates pushed to DoorDash, or **DoorDash Inventory Pull - API** for full-catalogue files that DoorDash pulls. Use one or the other, not both, for a given store. Each channel is added and set up separately, following the same steps. The DoorDash exports cannot delete items or create stores. DoorDash has no delete operation, so to remove a product you mark it as unavailable instead. The **DoorDash Store Management - API** channel only updates stores that already exist on DoorDash — it cannot create new ones. Prerequisites [#prerequisites] To add a DoorDash export, you need: . A DoorDash merchant account with API access enabled. . Your DoorDash API credentials: **Developer ID**, **Key ID**, and **Signing Secret**. You enter these in the destination settings in Productsup. . For the **DoorDash Store Management - API** channel, the stores you want to update must already be live on DoorDash. Add and set up the export [#add-and-set-up-the-export] Repeat these steps for each DoorDash channel you want to use. Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for the DoorDash channel you need — *DoorDash Items - API*, *DoorDash Inventory - API*, *DoorDash Inventory Pull - API*, or *DoorDash Store Management - API* — hover over it, and select **Add**. On the *Exports* page, select the name of the added export to set it up. Select **Add Destination**, choose the matching DoorDash destination from the drop-down list, give it a name as desired, and then select **Save**. Enter your DoorDash API credentials in **Developer ID**, **Key ID**, and **Signing Secret**. These let the Productsup platform authenticate with your DoorDash account. Switch **Active** to **On** to activate the destination. Select **Save**. Go to **Dataflow** from your site's main menu and select the added export from the drop-down menu in the upper ribbon. Map the attributes from import to export, then run the export. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) for more information. Map repeating fields [#map-repeating-fields] The channel template already includes the columns you map your data into. Some fields can repeat — for example, a store's opening hours or a product's images — and these come as numbered columns ending in `_1`, `_2`, `_3`, and so on. The template ships with a set number of these columns. If a store or product needs more, add the next-numbered column following the same name. | What repeats | Already in the template | Add more as | | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | | Store opening hours (Store Management) | `open_hours_day_index_1` to `_8`, each with its matching `open_hours_start_time_N` and `open_hours_end_time_N` | `open_hours_day_index_9`, `_10`, and so on, with matching start and end times | | Store holiday and special hours (Store Management) | `special_hours_date_1` to `_5`, each with its start time, end time, and closed value | `special_hours_date_6`, `_7`, and so on | | Product images (Items) | `image_url_1` | `image_url_2`, `image_url_3`, and so on | For a day that has a break — for example, a store that closes for lunch — map that day a second time in the next available block. A seven-day store with one lunch break maps into blocks `_1` to `_8`. Keep the numbering in order from 1, with no gaps. A missing number stops the platform from picking up every column after it. Map product attributes [#map-product-attributes] The **DoorDash Items - API** channel can send DoorDash product attributes — extra descriptive properties such as *limited edition*, *alcohol vintage*, or *battery required*. You do not need these built into the template in advance; you add them yourself using custom numbered columns. Each attribute uses two columns that share the same number: a name column and a value column. . Add a name column, `product_attribute_1_name`, and set its value to the attribute's name exactly as DoorDash expects it — for example, `limited_edition`. . Add one value column for that same attribute, chosen by the attribute's type: | Value column | Attribute type | Accepted values | | ----------------------------------------- | -------------- | ------------------------------------------ | | `product_attribute_1_multi_select_string` | Text | One value, or several separated by commas | | `product_attribute_1_multi_select_double` | Number | One number, or several separated by commas | | `product_attribute_1_single_select_bool` | True or false | `true` or `false` | To send a second attribute, add `product_attribute_2_name` with its own value column, then `_3`, and so on. The name column and its value column must always share the same number. For example, `product_attribute_2_name` pairs only with `product_attribute_2_multi_select_string` — not with `product_attribute_1_multi_select_string`. Delta export and category updates [#delta-export-and-category-updates] The **DoorDash Items - API** channel is a delta export. Productsup's delta engine decides, per item, whether to send it as a POST (a new item, never sent before) or a PATCH (a modified item that has already been sent). Once an item has been sent once, every later export of that item goes out as a PATCH. DoorDash's API only accepts category data (`item_categorizations`) on a POST. DoorDash rejects a PATCH that carries category data, and the whole item fails with the error "Item categorizations update using PATCH is not supported." This has a practical consequence: for an item already sent once, a normal re-export cannot update its category. The delta always sends that item as a PATCH, which can never carry category data. To force every item back through POST and send category data again, reset the site data in the site's **Advanced Settings**. This resets the delta completely, so the next export run treats every item as new and sends full category data for all of them. Resetting the site data resets the delta for the entire site, not just category data. The next export run resends every item as a POST. Check the feedback file [#check-the-feedback-file] After each export, the platform retries any failed records automatically. Anything that still fails is written to a feedback file that names the product or store that failed and the reason DoorDash gave. The feedback file is the first place to look when something does not appear on DoorDash as expected. The following table covers the most common issues: | What you see | Likely cause | What to do | | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | | Some items show errors on the first run | The items already exist on DoorDash, and the export had no way to know | This is expected. Later runs correct themselves. | | Every record fails | Missing, incorrect, or expired credentials in the destination settings, or a DoorDash outage | Check your credentials in the destination settings, then check DoorDash's status. | | A store's hours are rejected | The hours were not in the format DoorDash expects | Check the feedback file for that store and review the hours formatting in your feed. | | A store update fails with "not found" | That store is not set up on DoorDash yet | Use a store that is already live on DoorDash. | | A product attribute does not appear on DoorDash | The name column and value column do not share the same number, the value column type is wrong, or the value is empty | Check that the `product_attribute_N_name` column and its value column use the same number, and that the value is not blank. | | An item fails with "Item categorizations update using PATCH is not supported" | The item was already sent once, so the delta exported it as a PATCH, which cannot carry category data | See [Delta export and category updates](#delta-export-and-category-updates). Reset the site data if you need category data resent. | | An error never appears in the feedback file | DoorDash reported the problem after accepting the request | Check your DoorDash developer portal. | # Add Google Merchant Center export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; [Google Shopping](https://shopping.google.com/) shows your products as search results in the *Shopping* tab of Google Search. Google Shopping ads are product advertisements visible across the entire Google ecosystem. Although possible locations of your Google Shopping ads depend on your chosen type of Google Shopping campaign, your product ads can generally appear in Google Shopping, Google Search, Google Images, Google Maps, etc. In Productsup, you can use multiple exports to send your data to Google Merchant Center (GMC), which lets you post your products in Google Shopping and advertise them with Google Shopping ads. You can send different types of data to Google Merchant Center from Productsup using different exports: | Type of data | Exports in Productsup that send this data to GMC | | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | General product data (titles, images, prices, descriptions, brands, stock levels, etc.) | *Google Merchant Center*, *Google Content API for Shopping*, or *Google Content API for Shopping (multi)*.See the following sections in this document for the setup of these exports. | | Promotion data and promo text for ads | *Google Merchant Promotions* or *Google Merchant Center - Promotions (API)*.See [Add Google Merchant Promotions export](/docs/help-center/export-data-feeds/special-export-setups/add-google-merchant-promotions-export).See [Add Google Merchant Center - Promotions (API) export](/docs/help-center/export-data-feeds/special-export-setups/add-google-merchant-center-promotions-api-export). | | Star-based product ratings, overall number of product reviews, and other reviews data | *Google Product Ratings* or *Google Products Reviews* | Choose how you want to send data to GMC [#choose-how-you-want-to-send-data-to-gmc] The Productsup platform lets you export your product feed to Google Merchant Center. The specific way of setting up the export in the platform depends on how you want GMC to ingest your product data: . Via URL generated by Productsup. . Via SFTP server provided by Google Merchant Center. Google stopped supporting FTP in Merchant Center. See [End of support for FTP in Merchant Center](https://support.google.com/merchants/answer/13033917) for more information. . Via API integration between Productsup and GMC that lets you automate and schedule data uploads. You can choose any option based on the number of products you have and the rate of their data changeability: * If your feed contains few products and the data doesn't change often, consider using the URL or the SFTP server. * If your feed contains many products and the data constantly updates, select API. With API, you can only send product data updates to GMC instead of entire feeds, which speeds up the export. Prerequisites [#prerequisites] To export your product data to Google Merchant Center via URL, you need: . A Google Merchant Center account. . Product data containing the needed product attributes. See [Product data specification](https://support.google.com/merchants/answer/7052112) for information on all mandatory and optional attributes for GMC. To export your product data to Google Merchant Center via SFTP, you need: . A Google Merchant Center account. . Relevant SFTP server credentials, such as a username and a password. . Product data containing the needed product attributes. See [Product data specification](https://support.google.com/merchants/answer/7052112) for information on all mandatory and optional attributes for GMC. To export your product data to Google Merchant Center via API, you need: . A Google Merchant Center account. . GMC authentication in your Productsup organization. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems) for more information.To add GMC authentication to your Productsup organization: Go to **Authentication** from the organization's, project's, or site's menu and select **ADD AUTHENTICATION**. In **Type**, select *Google Merchant Center*, give it a custom name as desired, and select **Next**. Select **Connect** for Productsup to redirect you to a Google account page where you can give Productsup access to your Google Merchant Center account. Once ready, Google redirects you back to Productsup. Close the confirmation window to proceed. . Your Merchant ID that Google assigned to your payment profile. See [Find your Merchant ID](https://support.google.com/paymentscenter/answer/7163092?hl=en) for more information. . Product data containing the needed product attributes. See [Product data specification](https://support.google.com/merchants/answer/7052112) for information on all mandatory and optional attributes for GMC. . A clear strategy for migrating to the API export method: You can skip this requirement if you have never uploaded any products to your GMC account. * If you have already uploaded product data to your Google Merchant Center account, use the same product IDs you used with your previous data upload mechanisms to avoid data conflicts and loss. * You must stop uploading product data using other mechanisms and let the API method in Productsup be the only way you send product data to your GMC account. Upload data to Google Merchant Center via URL [#upload-data-to-google-merchant-center-via-url] To upload your product data to Google Merchant Center via URL, add the Google Merchant Center export template to your site and use the Productsup Server destination: Go to **Exports** from your site's main menu and select **Add export**. Search for *Google Merchant Center*, select **Add**, give it a name as desired, and again select **Add**. UUID-bd325c3b-1fec-13ba-4e83-4a9b977179e6 Select **Add Destination**, choose *Productsup Server* from the dropdown, give it a name as desired, and then select **Save**. UUID-3e24346b-c5a9-5e6e-30d7-786da3260a9f Go to **Dataflow** to locate all the attributes mandatory for Google Merchant Center and map them from import to export. Go to **Data View** to optimize your data as needed. See [Rule box category Google Merchant Center](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-google-merchant-center) for more information. Upload data to Google Merchant Center via the SFTP server [#upload-data-to-google-merchant-center-via-the-sftp-server] To upload your product data to GMC via the SFTP server, add the Google Merchant Center export template to your site and use the Google Merchant Center SFTP destination: Go to **Exports** from your site's main menu and select **Add export**. Search for *Google Merchant Center*, select **Add**, give it a name as desired, and again select **Add**. UUID-bd325c3b-1fec-13ba-4e83-4a9b977179e6 Select **Add Destination**, choose *Google Merchant Center SFTP* from the dropdown, give it a name as desired, and select **Save**. Set up Google Merchant Center SFTP destination: 1. In **User**, enter your SFTP server username. 2. In **Password**, enter the password for your SFTP server account. 3. Select **On** in **Active** to activate the destination. 4. Select **Save**. Go to **Dataflow** to locate all the attributes mandatory for Google Merchant Center and map them from import to export. Go to **Data View** to optimize your data as needed. See [Rule box category Google Merchant Center](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-google-merchant-center) for more information. Upload data to Google Merchant Center via API [#upload-data-to-google-merchant-center-via-api] When you use the API option to upload your product feed to Google Merchant Center, Productsup continuously processes all changes you perform in your data and syncs only the changed parts of the data with GMC. The API uploads delta files only. Besides automating data synchronization and helping you work with more products, uploading data to GMC via API lets Productsup receive error responses from GMC as feedback files in *Data Sources*. You can troubleshoot your product data optimizations using these files. To upload your product data to GMC via API, you should use one of the following export templates: . *Google Content API for Shopping*. Use this option to export one product feed to one Google Merchant Center account. If you have multiple parent GMC accounts to which you want to send your feed, add and set up multiple templates of the Google Content API for Shopping export to your site. . *Google Content API for Shopping (multi)*. Use this option to export one product feed to multiple sub-accounts within your parent GMC account. With the Google Content API for Shopping (multi) export, you can use multithreading to push products to GMC in parallel and speed up your exports. Add Google Content API for Shopping export [#add-google-content-api-for-shopping-export] Google recommends limiting the size of the product batches you export from Productsup into GMC. The default batch size is 1,000 products. You can expect that Productsup typically sends batch sizes ranging from 100 to 1,000 products. Go to **Exports** from your site's main menu and select **Add export**. Search for *Google Content API for Shopping*. Select **Add**, give it a name as desired, and again select **Add**. UUID-e92b5256-4e04-c48d-5ee5-d2697d9f85b4 Select **Add Destination** and choose *Google Content API (single account)* from the dropdown. You can optionally customize the destination's description in **Name**. Select **Save**. UUID-5ae96901-65fc-2e90-9ed3-94b1773d09c3 In **Merchant Center ID**, enter your [Merchant ID](#listitem-idm243381106444736). If you have a multi-client GMC, enter the Merchant ID of your sub-account. Select the appropriate target country and language for the feed in **Target Country** and **Target Language**. Define how often you want the platform to perform a complete product upload in **Full Upload Interval (in days)**. To avoid product expiration, the platform exports new, deleted, changed, and unchanged products during a complete upload performed once every defined time interval. Google Merchant Center deactivates unchanged products after 30 days or sooner if a specified number of days have passed. In **Merchant Center Cleanup**, choose **Yes** to delete products within GMC that do not originate from Productsup. By default, this option is disabled.*This setting should only be used once*. You can enable it if you are migrating from other service providers to Productsup. Once the migration is over, you should disable this setting. Keeping this setting enabled can cause unexpected product deletions. For example, during a full catalog export, the destination matches the items it exports from your site with the products already available in your GMC. If a product in your GMC isn't present in the export, the destination removes it from GMC. Choose your GMC authentication in **Authentication to use**. If you haven't created the authentication in the platform yet, select **Add New Authentication** and create it, as previously seen in [Prerequisites](#listitem-idm241690553222369). Select **On** in **Enable Error Log File** to let Productsup upload feedback files that contain export-related errors as a new data source. You can also download the zipped errors file from the Run log. UUID-1d268d00-6460-64d6-db15-24fe27409261 The ZIP folder may contain error logs spread across different files. You can search for something specific in the logs using a keyword, for example, `product ID`. Some text editors let you search for a keyword across all files in a ZIP file. In **Log API calls**, select **On** for the platform to log calls to the GMC API. You can find the logs in the Run log. In **Log headers of API calls**, select **On** to add response headers to the logs. In **API call logging end time**, enter a date using the `YYYYMMDD` or `YYYY-MM-DD` format, stating when the platform should stop logging API calls. Do not let this feature run indefinitely, as it generates excessive files and slows exports. Turn on the destination by selecting **On** in **Active**. Select **Save**. Go to **Dataflow** to locate all the attributes mandatory for Google Merchant Center and map them from import to export. Go to **Data View** to optimize your data as needed. See [Rule box category Google Merchant Center](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-google-merchant-center) for more information. The API is more restrictive than the SFTP or URL upload. If you upload an incorrect category or your feed is missing mandatory attributes, the product upload fails. Add Google Content API for Shopping (multi) export [#add-google-content-api-for-shopping-multi-export] Google recommends limiting the size of the product batches you export from Productsup into GMC. The default batch size is 1,000 products. You can expect that Productsup typically sends batch sizes ranging from 100 to 1,000 products. Go to **Exports** from your site's main menu and select **Add export**. Search for *Google Content API for Shopping (multi)*. Select **Add**, give it a name as desired, and again select **Add**. UUID-df874b19-7aad-4fac-48c1-84d608ccdb8e Select **Add Destination** and choose *Google Content API (multi account)* from the dropdown. You can optionally customize the destination's description in **Name**. Select **Save**. UUID-426e296d-98b3-435f-e8d0-d3d7825cd62c In **Parent Merchant Center**, enter the [Merchant ID](#listitem-idm243381106444736) of your GMC sub-account. In **Merchant Reference Column**, choose the attribute within your feed that contains your merchant center name, merchant center ID, or seller ID. Select the appropriate target country and language for the feed in **Target Country** and **Target Language**. Define how often you want the platform to perform a complete product upload in **Full Upload Interval (in days)**. To avoid product expiration, the platform exports new, deleted, changed, and unchanged products during a complete upload performed once every defined time interval. Google Merchant Center deactivates unchanged products after 30 days or sooner if a specified number of days have passed. Choose your GMC authentication in **Authentication to use**. If you haven't created the authentication in the platform yet, select **Add New Authentication** and create it, as previously seen in [Prerequisites](#listitem-idm241690553222369). Select **On** in **Create Merchant Centers** to let the platform create new merchant centers in your GMC account. This option only works when you use the merchant center name or seller ID as your merchant reference in **Merchant Reference Column**. By default, this option is on. Select **On** in **Enable Error Log File** to let Productsup upload feedback files that contain export-related errors as a new data source. You can also download the zipped errors file from the Run log. UUID-1d268d00-6460-64d6-db15-24fe27409261 The ZIP folder may contain error logs spread across different files. You can search for something specific in the logs using a keyword, for example, `product ID`. Some text editors let you search for a keyword across all files in a ZIP file. In **Merchant Center Cleanup**, choose **Yes** to delete products within GMC that do not originate from Productsup. By default, this option is disabled.*This setting should only be used once*. You can enable it if you are migrating from other service providers to Productsup. Once the migration is over, you should disable this setting. Keeping this setting enabled can cause unexpected product deletions. For example, during a full catalog export, the destination matches the items it exports from your site with the products already available in your GMC. If a product in your GMC isn't present in the export, the destination removes it from GMC. In **Reference Validation (regex)**, leave the default value `#.+#` for Productsup to check whether your products follow the data structure required by GMC. Once the platform validates your products, it can send them to Google Merchant Center. From the **Merchant Reference Type** drop-down list, choose one of the following options depending on what the attribute you chose in **Merchant Reference Column** contains: * **Merchant Reference Column contains the Merchant Center Name** * **Merchant Reference Column contains the Merchant Center ID** * **Merchant Reference Column contains the Seller ID** Enter the name of each newly created merchant center account in **New Merchant Account Name**. This setting applies only if you use the seller ID as a merchant reference. Select **On** in **Remove Empty Subaccounts** to remove empty sub-accounts from your Google Merchant Center before running a new export. With this option On, the API deletes empty sub-accounts every time the site runs. In **Log API calls**, select **On** for the platform to log calls to the GMC API. You can find the logs in the Run log. In **Log headers of API calls**, select **On** to add response headers to the logs. In **API call logging end time**, enter a date using the `YYYYMMDD` or `YYYY-MM-DD` format, stating when the platform should stop logging API calls. Do not let this feature run indefinitely, as it generates excessive files and slows exports. Turn on the destination by selecting **On** in **Active**. Select **Save**. Go to **Dataflow** to locate all the attributes mandatory for Google Merchant Center and map them from import to export. Go to **Data View** to optimize your data as needed. See [Rule box category Google Merchant Center](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/rule-box-category-google-merchant-center) for more information. The API is more restrictive than the SFTP or URL upload. If you upload an incorrect category or your feed is missing mandatory attributes, the product upload fails. Export your feed to GMC via API [#export-your-feed-to-gmc-via-api] When you export to GMC via API, you can't download your export file from the Files panel in the Overview tab of your export setup. Export your product feed by selecting **Export** or **Run** in the top-right corner of your site's view. Make sure to export unavailable products with the status `out of stock`. Otherwise, they appear available in GMC. Once the run completes, you can see the result in the Run log. To open it, select the **Run log** icon in the top-right corner of your site's view. UUID-c49d07b2-0eaa-f8b5-552c-4619a1132b0a If the export fails, you can check error messages in the Run log provided that you have turned on the **Enable Error Log File** option as previously seen in [see the relevant section](#step-idm241657788961800) or [see the relevant section](#step-idm243316491590336). Otherwise, correct your feed and try again.You can also go to **Error Log** and open your site's last run to see what went wrong with it. UUID-c477cdef-f5c6-f4f7-582c-51dd086544f1 After the first upload in GMC, your products could take longer than expected to display in your organization. If you have already exported your feed to GMC via API, the process should take less time. # Add Google Analytics 4 exports import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Google has announced the sunsetting of Universal Analytics by July 2023 and a move to the platform's new version called Google Analytics 4. Productsup has added five (5) Google Analytics 4 export channels that let you send data to your GA4 instances: . *Google Analytics 4 - Cost Data Export* – This export template lets you import cost data, such as campaign costs, into GA4 and get a better overview and analysis of campaign performance and ROI. . *Google Analytics 4 - Item Data Export* – This export template lets you import item data into GA4 and measure user behavior, traffic, conversions, and other metrics at the product level. . *Google Analytics 4 - Offline Data Export* – This export template lets you import offline data from sources that don't have an internet connection into GA4 to enrich the data collected online. . *Google Analytics 4 - User Data Export (client-ID)* – This export template lets you import user data, such as last purchase date or loyalty rating, into GA4 to improve user segmentation and remarketing audiences. Use this export template if you identify users by Client ID assigned to each unique user of your website. . *Google Analytics 4 - User Data Export (user-ID)* – This export template lets you import user data, such as last purchase date or loyalty rating, into GA4 to improve user segmentation and remarketing audiences. Use this export template if you identify users by User ID assigned only to logged-in users. You can still use *Google Analytics Product Export* while using Universal Analytics. But we encourage you to move to the new Google Analytics 4 exports as soon as you move to GA4. All these exports use the flat-file approach, where Productsup generates a CSV file with the needed data to let you upload it to your Google Analytics property manually. See [About Product Data](https://support.google.com/analytics/answer/6066852) for more information on uploading product data to Google Analytics 4. Prerequisites [#prerequisites] To upload the product data from Productsup to GA4, you need to: * Have an active GA4 account. Set up Google Analytics 4 exports [#set-up-google-analytics-4-exports] To set up the necessary GA4 exports: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for the needed Google Analytics 4 export, hover over it, and select **Add**. UUID-3cc0bd6b-7fd4-8180-3bea-a6dbdaae0d9a Go to **Dataflow** from the site's main menu and choose the added export from the dropdown in the toolbar. Map the attributes from import to export. Use the **Automap connections** drop-down menu in the top ribbon to let the platform automatically connect the attributes. UUID-6fdde14a-a605-ad25-11cb-ae35d3e6ee47 Go to **Exports** and select the name of the needed export. Select **Add Destination**. Select *Productsup Server* from the **Destination** drop-down menu and select **Save**. If you want to send your CSV file to an FTP, SFTP, or FTPS server, select *SFTP/FTP/FTPS Server* as a destination. If you don't have a server account yet, you can create one using the **FTP Accounts** feature in Productsup. See [Export your data to an FTP, SFTP, or FTPS server](/docs/help-center/export-data-feeds/set-up-an-export-destination/add-an-ftp-sftp-or-ftps-destination) for more details. If your data is ready, select **Run** or **Export this export** in the upper right corner of the page. To download the output CSV file, select the link to the file that appears in the *Filename* section at the bottom of the export setup page. UUID-1cc3fcb1-b5a8-f4a4-e6ee-2b4fcc2eafe9 Import the downloaded file to your GA4 account. # Add Bazaarvoice export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Bazaarvoice is a platform brands can use to integrate user-generated content such as product reviews, ratings, Q\&As, and visual and social content. Our Bazaarvoice integration enables you to syndicate your product catalog to Bazaarvoice to map the UGC to the correct products. The export generates an XML file and sends it to Bazaarvoice's SFTP. If your product catalog is above 750,000 products, Bazaarvoice sometimes recommends splitting it into multiple XML files. You should confirm with your Bazaarvoice contact whether you should do this in your case. Productsup provides the **Split feed** feature in the Bazaarvoice destination setup page, which lets you split the feed into multiple files. Prerequisites [#prerequisites] To add the Bazaarvoice export, you need to: . Create a Bazaarvoice account, if you don't have one. . Get the SFTP credentials for Bazaarvoice. Set up Bazaarvoice export [#set-up-bazaarvoice-export] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Bazaarvoice*, hover over it, and select **Add**. UUID-290da605-bde6-1109-dd83-fd3e7b288cd6 Go to **Dataflow** from the site's main menu and choose the added export from the drop-down menu in the top ribbon on the left. Map the attributes from import to export. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) for more information. The Bazaarvoice mapping has the following peculiarities: * This export supports custom attributes. You need to set them up individually. The attribute name should start with *Attribute@*. See [Filter catalog data based on custom product attributes](https://knowledge.bazaarvoice.com/wp-content/conversations/en_US/Collect/xml_feed.html#filter-catalog-data-based-on-custom-product-attributes) for more information. For example, to pass the custom attribute **example**, create the custom attribute **Attribute\@example** on the export stage and map the relevant attributes to this attribute from the previous stages. * Bazaarvoice has a concept of product families and bundles. See [Configure product families](https://knowledge.bazaarvoice.com/wp-content/conversations/en_US/Collect/xml_feed.html#using-the-product-feed) for more information. You need to map the family and bundle name to the **BV\_FE\_FAMILY** and **BV\_FE\_EXPAND** attributes respectively. * Starting from the Bazaarvoice version 15.1, the **Currency** attribute accepts prices with currency such as `19.99 EUR`. The output on XML may look as follows: ``` ``` * The **EAN**, **UPC**, **MPN**, and **ModelNumber** attributes accept multiple values separated by comma. For example, mapping of `123456789101,123456789102,123456789103` to the **EAN** attribute results in the following XML: ``` 123456789101 123456789102 123456789103 ``` * If you have localized brand and category names, create custom attributes for them in the following format: `ATTRIBUTENAME@ATTRIBUTEVALUE`.For example, if you create the attributes: * **BrandName\_locale\@en\_CA** with value `Second Brand CA` * **BrandName\_locale\@fr\_CA** with value `Deuxième marque CA` along with the standard attributes: * **BrandExternalId** with value `BBB` * **BrandName** with value `Second Brand`, the platform creates the following output in XML: ``` BBB Second Brand Second Brand CA Deuxième marque CA ``` Go to **Exports** and select *Bazaarvoice*. Select **Add Destination**. Select *Bazaarvoice* from the **Destination** drop-down menu, and choose **Save**. In **XML Feed name**, enter the feed name of generated file. In **SFTP Host**, provide your server host starting with `sftp://`. The target host must be one of Bazaarvoice’s supported Staging or Production servers, which are each region-specific. See [Bazaarvoice Knowledge Base](https://docs.bazaarvoice.com/articles/#!ratings-reviews-legacy-prr/product_feeds/a/sftp-connection-values). | Environment | Region | Server Host | | ----------- | ------ | --------------------------------- | | Staging | Europe | sftp\://sftp7-stg.bazaarvoice.com | | Staging | US | sftp\://sftp-stg.bazaarvoice.com | | Production | Europe | sftp\://sftp7.bazaarvoice.com | | Production | US | sftp\://sftp.bazaarvoice.com | In **SFTP Port**, enter `22`. In **SFTP Directory**, enter the directory where the platform should export the file. By default, it is `/import-inbox`. Provide you your SFTP credentials in **SFTP Username** and **SFTP password**. If you don't know your SFTP credentials or your file location, contact [Bazaarvoice Support](https://knowledge.bazaarvoice.com/wp-content/knowledge/en_US/Contacting_support.html). In **Remote File Name**, enter the name of the generated XML file. By default, it is `bazaarvoice.xml`. In **Product Feed Version**, enter your feed version or leave the default `http://www.bazaarvoice.com/xs/PRR/ProductFeed/14.7`. See [XML feed](https://knowledge.bazaarvoice.com/wp-content/conversations/en_US/Collect/xml_feed.html#example-xml-feed) for more information. Optionally, in **Category file URL**, enter your category file URL. Optionally, in **Category File Delimiter**, select a delimiter. Leave the **Encoding Fix** toggle *On* to ensure the data is UTF-8 encoded. Toggle it to **Off** if you want to export the data with default encoding. Leave the **Splits feed** toggle *On* to split the files containing over 750,000 products into separate XML files, as required by Bazaarvoice. Toggle **Active** to *On* to activate the destination. Select **Save**. If your data is ready, select **Run** or **Export this export** in the upper right corner of the page. # Add Bol export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Bol is an online retail platform and one of the largest e-commerce websites in the Netherlands and Belgium. It’s an online marketplace where customers can buy a wide range of products, including books, electronics, clothing, and home goods. Currently, we support only nl and nl/be languages and a specific list of categories. To let you sell your products on Bol, Productsup has built an ecosystem that sends products and offers data to Bol and imports order data from Bol into Productsup. The ecosystem consists of four (4) exports and two (2) data sources to let you manage your products and orders on Bol: . \*Bol Products Delta API (NL, BE)\*This export creates and sends products to your Bol account. Usually, first, you send the products to Bol and then, for those placed products, you send the offers. But if your products are already on Bol, you can only send the offers and skip this export. When setting up this export, you also need to use multiple category-specific exports that contain category-specific product attributes (CSA). Also, this product creation export is a delta-based export that sends only the new, changed, or deleted products to Bol instead of exporting the entire product catalog during every site run. . *Bol Offers Management Delta*This export creates and sends new offers to Bol, updates existing ones, and deletes the ones that are no longer in the import feed. An offer is your individual product listing on Bol where you offer a certain product for a certain price with certain shipment conditions. Use this export after sending the products to Bol. It is a delta-based export that sends only the new, changed, or deleted product listings to Bol instead of exporting the entire catalog during every site run. . *Bol Order Shipment Delta*This export updates shipment-related data on Bol. . *Bol Order Cancellation Delta*This export lets you acknowledge order cancellation from a buyer on Bol. . *Bol Offers*This data source lets you upload your offers from Bol to Productsup to use them for *Bol Offers Management Delta*. . *Bol Orders*This data source lets you upload the orders from Bol to Productsup to use them for *Bol.com orders cancellation delta export* and *Bol Order Shipment Delta*. Prerequisites [#prerequisites] To set up the Bol ecosystem in Productsup, you need to: . Create a project in your Productsup organization and, in this project, create separate sites for each Bol import: products, offers, and orders. This is a recommended option. If a separate Bol project doesn't fit your overall organization structure, ignore this recommendation. . Create a retailer account on Bol, if you don't have one. See the [guide to working with Bol’s Retailer API](https://api.bol.com/retailer/public/Retailer-API/index.html) for more information on registering as a retailer on Bol. . Have login and password for your Bol retailer account. . Prepare a list of the Bol categories you want to sell the products in. This integration has category-specific channels. Productsup supports only some categories by default. But we can add missing categories on request. It may take around two weeks to add support for your request. To request the necessary categories, countries, or languages for this integration, contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) and provide the following information: * List of categories. * Region or language. We currently support NL, NL/BE. You can request FR, FR/BE. . Import your products to Productsup as the main data source. The feed should contain the category differentiator to map your categories to the Bol's categories. . Set up a *Classification Mapping* list for categories. Bol re-authentication (upcoming) [#bol-re-authentication-upcoming] Bol is introducing [more detailed permission controls](https://api.bol.com/retailer/public/Retailer-API/fine-grained-access.html) for connected platforms. From *mid-August*, you need to re-authenticate your Bol account through Productsup and approve the specific permissions listed below. This doesn't change any of Productsup's capabilities on Bol. Re-authenticating is required to stay compatible with Bol's new security requirements. Existing connections keep working until they expire; after that, you must re-authenticate to avoid interruptions to your offers, orders, or shipments. | Permission | Used for | | -------------------------- | ----------------------------------------------------------------------------- | | **Manage offers** | Creating and updating offers, prices, and stock, and importing current offers | | **Manage Product Content** | Sending product titles, descriptions, and attributes to Bol | | **Manage Orders** | Importing orders and order statuses, and cancelling order items | | **Manage shipments** | Sending shipment and track-and-trace notifications to Bol | Approve all four permissions to keep every feature working as expected. Set up a Classification Mapping list for Bol [#set-up-a-classification-mapping-list-for-bol] If you use specific category names, you must map them to the Bol categories with the help of the *Classification Mapping* list so that Productsup knows which sub-channels should be available to you, and Bol would receive the correct category names. Go to **Lists** from your site's main menu and select **ADD LIST**. UUID-9281947d-c6cf-5007-53d3-db0023db5d1f Choose **Classification Mapping** and select **Continue**. UUID-97ed9356-5ba0-634a-3edb-e34711f23e0b In **Name**, give your list a custom name to help you identify it among others. You can later edit it. In **Classification**, select **Bol Products Delta API (NL, BE)**. UUID-77315e81-6e68-c32e-81a9-44c0f27a3c69 In **Stage**, choose the **Import** stage to replace values with the classification categories. In **Attribute**, enter and select attributes from the list of pre-defined values from your selected import attribute's column. The platform later populates the list with the values of this attribute to let you choose and map the needed category values. Optionally, toggle on the **Share list** button and choose one of the following: 1. **Account level** shares this list with all sites across all projects under this organization. 2. **Project level** shares this list with all sites under this project. If you share the list at the organization or project level, the platform updates the list during an import from the original site where you created the list. Select **Add**. Map your categories to the Bol categories. Go through all the values of your category attribute in the column on the left and select the corresponding Bol categories in the **Replace term** column. You must create and set up a new Classification Mapping list every time you modify the chosen category attribute in your data source and import its new values into your site. Otherwise, the already existing list can't upload your new values, and you can't map them to the corresponding Bol categories. Once you create a new Classification Mapping list, you need to choose it in the related rule box. After setting up the export as explained in the next section, you can map the attributes and apply the Classification Mapping list with the rule boxes. Send your products to Bol [#send-your-products-to-bol] In the site dedicated to sending your products to Bol, add and set up the export *Bol Products Delta API (NL, BE)*: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Bol Products Delta API (NL, BE)*, hover over it, and select **Add**. UUID-3bdecd3d-2f44-8d3f-a7da-9fe665b49ee8 On the **Exports** page, select the name of the added export to set it up. Select **Add Destination**, choose *Bol.com Product Delta Export (NL/BE)* from the drop-down list, give it a name as desired, and select **Save**. In **Authentication selection**, select an existing one or select the **Add New Authentication** button. The platform redirects you to the Bol retailer account. UUID-e99d988b-bdc6-7cf7-bdb9-df4773d44e98 Leave the **Feedback Import** button *On* to let Productsup receive a feedback file from the Bol API in case of export errors. This helps troubleshoot the setup. Leave the **Category Specific Attributes** button *On* to map category-specific attributes in Dataflow. Toggle the **Active** button to *On* to activate the destination. Select **Save**. Go to **Dataflow** and select *Bol Products Delta API (NL, BE)* from the drop-down menu on the left. Set up the main channel: Map the `category` attribute in the import level to `__gpc_code` and `gpc_code_name` in the intermediate stage. UUID-1f8e5a2e-59c5-9fd9-6524-05b02efec0c6 For both **\_\_gpc\_code** and **gpc\_code\_name**, on the intermediate level, add the **Classification Mapping** rule box and choose the list created in [Set up a Classification Mapping list for Bol](#section-idm353416186897364). UUID-0068d6cd-a9c4-2664-8837-aba62df01503 For **\_\_gpc\_code**, on the intermediate stage, add the **Split String** rule box below the *Classification Mapping* rule box and enter the following values: * **Splitter**: a single space without the quotation marks * **From**: `0` * **Items**: `1` UUID-d37eebc0-1327-f496-c5bd-6d812bb97035 For **gpc\_code\_name**, on the intermediate stage, add the **Split String** rule box below the *Classification Mapping* rule box and enter the following values: * **Splitter**: a single space without quotation marks * **From**: `1` * **Items**: `1` UUID-cbab6834-3e41-c7b5-3260-7bda51df1991 Ensure you saved all changes. Map these and other necessary attributes from the import to the export stage. To let the site display your category-specific attributes in Dataflow, select **Run** or **Import** in the top-right corner of your view. This run will fail because you haven't yet mapped all the mandatory attributes, so no data export occurs at this stage. The aim of the run is to import the needed categories and attributes into Dataflow. Once the site run finishes, the **Classifications** drop-down menu appears in the upper ribbon in Dataflow. Select each category in this drop-down menu to let Dataflow display the relevant category-specific attributes in the export stage. Map all the needed attributes from import to export. UUID-851628c1-299a-3792-c36e-44bb28a60f66 If you can't see the **Classifications** drop-down menu when the site run is complete, refresh your page. If some attributes are missing on the intermediate stage, add them manually. Go to **Data View** from the same site's main menu and choose *Bol Products Delta API (NL, BE)* from the drop-down menu on the top left-hand side. For each attribute, select **Analyze** to ensure your data is compliant with the Bol expectations. Alternatively, select the **Overview** drop-down and choose **Readiness**. Once your data is ready, select **Run** in the top-right corner of your view to send your products to Bol. Import your offers to Productsup [#import-your-offers-to-productsup] After you have exported your products, you can import your offers to Productsup as an additional data source and map them by EAN (European Article Number) to the products. This allows Productsup to identify which EANs the platform has already placed as offers on Bol and which it should send as new offers. To import your offers: Go to **Data Sources** from the main menu of the site dedicated to the Bol offers. Select **ADD DATA SOURCE**. Add your products as the main data source. For example, you can use the *Google Sheets* data source. It should be the same product feed that you used in the site dedicated to product creation. Go back to the **Data Sources** page, search for *Bol Offers* in the **Search** bar, and select **Add**. Give your data source a custom name as desired, then select **Continue**. UUID-642773f8-ae74-b865-aa3f-6e852fe6b4aa Set up your data source: In **Authentication selection**, select an existing one or select the **Add New Authentication** button. The platform redirects you to the Bol retailer account. Optionally, add a description. Select **Save**. After the platform redirects you to **Data Sources**, select the cogwheel icon (**⚙**) next to your newly added data source. Scroll down to the **Content Mode** panel and select **Additional Data Source**. In the **Additional Data Source Types** section, leave **Additional Data Source Values Always (Default)** selected by default. This option lets you replace the main data source values with the additional data source values, even if the additional data source values are empty. UUID-a2e43bee-de53-8052-d819-8e7c235b87d0 In **ID Column In This Feed**, enter the column's name within your additional data source that contains the products EANs. This field is case-sensitive. In the **ID Column From Your Main Feed** drop-down menu, select a column in your main data source that Productsup should map to the products EANs. * The platform updates the offers for the products with the same EANs in the main and additional data sources, instead of creating new offers. * The platform creates new offers for the products with EANs that don't match between the main and additional data sources. * The platform deletes the offers related to EANs that aren’t in the feed anymore. Select **Save**. Select **Import** to import your offers to Productsup. If your **fulfilment.method** attribute contains FBR, you must provide the number of delivery days in the **deliveryCode** attribute. If your **fulfilment.method** attribute contains FBB, you must set `null` in the **deliveryCode** attribute. See [Update an offer](https://api.bol.com/retailer/public/Retailer-API/v9/functional/retailer-api/offers.html#_update_an_offer) for more information about specific attribute settings. Send your offers to Bol [#send-your-offers-to-bol] After you have imported the offers, you can add and set up *Bol Offers Management Delta* in the site dedicated to offers: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Bol Offers Management Delta*, hover over it, and select **Add**. UUID-e01cbc53-d79c-0bdd-f127-a38725b0e0ab On the **Exports** page, select the name of the added export to set it up. Select **Add Destination**, choose *Bol Offers Management Delta* from the drop-down list, give it a name as desired, and then select **Save**. In **Authentication selection**, select an existing one or select the **Add New Authentication** button. The platform redirects you to the Bol retailer account. Leave the **Feedback Import** button *On* to let Productsup receive a feedback file from the Bol API in case of export errors. This helps troubleshoot the setup. Toggle the **Active** button to *On* to activate the destination. Select **Save**. Go to **Dataflow** and map the attributes from import to export. The **economic\_operator\_id** attribute is mandatory now for creating a valid offer. To get the ID: Add the economic operator manually in the Bol. seller’s account. Import the ID via API using Postman or similar tool. See [Economic Operator API - V1 (1.0.4)](https://api.bol.com/registry/redoc/economic-operators/economic-operators-v1.html) for more information. Add the ID of the created operator to the **economic\_operator\_id** attribute. Ensure you map **economic\_operator\_id** attribute from import to export in Dataflow. Contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) if you need help with adding your economic operator ID. Once your data is ready, select **Run** in the top-right corner of your view to send your offers to Bol. Running the offers export in less than 15 minutes after the previous run results in retrieving the same export file. You need to wait at least 15 minutes after the previous export run to send the new, updated, or deleted offers. Import orders from Bol [#import-orders-from-bol] To let Productsup import your orders from Bol, do the following in the site dedicated to the Bol orders: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Bol Orders*, select **Add**, give it a name as desired, and choose **Continue**. UUID-cc43d40c-15c7-76bf-ebb9-e3e98e07304c Set up your data source: In **Fulfilment method**, select the fulfillment option that Productsup should import: * **FBR** imports only orders fulfilled by the retailer. * **FBB** imports only orders fulfilled by Bol. * **ALL** imports both FBR and FBB. In **Status**, select the order status that Productsup should import: * **OPEN** imports only open orders excluding shipped and canceled orders. * **SHIPPED** imports only shipped orders. * **ALL** imports both open and shipped orders. Set either **Change interval minute** or **Latest change date** that are mutually exclusive: * In **Change interval minute**, you can set how many minutes passed since the latest change on an ordered product. You can enter the values from `1` to `60`. * In **Latest change date**, you can select the date when the latest change happened on an ordered product. You can select the date in the period of up to three (3) months. Bol recommends using *Change interval minute*. See [Bol's Best practices - order process](https://api.bol.com/retailer/public/Retailer-API/v9/functional/retailer-api/orders-shipments.html#_filtering_order_items_by_fulfilment_method). In **Authentication selection**, select an existing one or select the **Add New Authentication** button. The platform redirects you to the Bol retailer account. Optionally, add a description. Select **Save**. Select **Import** to import your orders. During the time between retrieving an open order and shipping it, a customer can still request cancellation. If there is a long time between retrieving an open order and shipping, we recommend retrieving all the open orders again before shipping to check for possible cancellation requests from the customers. Send order cancellation updates to Bol [#send-order-cancellation-updates-to-bol] To change the status of your orders on Bol and inform your customers about order status changes, after importing the orders from Bol to Productsup, you can add and set up *Bol Order Cancellation Delta* in the site dedicated to orders: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Bol Order Cancellation Delta*, hover over it, and select **Add**. UUID-4db7c524-404a-c1bf-4676-c5ca898dae1d On the Exports page, select the name of the added export to set it up. Select **Add Destination**, choose *Bol Order Cancellation Delta* from the drop-down list, give it a name as desired, and select **Save**. In **Authentication selection**, select an existing one or select the **Add New Authentication** button. The platform redirects you to the Bol retailer account. Leave the **Feedback Import** button *On* to let Productsup receive a feedback file from the Bol API in case of export errors. This helps troubleshoot the setup. Toggle the **Active** button to *On* to activate the destination. Select **Save**. Once your data is ready, select **Run** in the top-right corner of your view to send your data about cancellations to Bol. If a customer only cancels a single item within an order, you only need to cancel this one item and ship the other ordered items. To confirm the cancellation of a single ordered item within an order, assign the value *REQUESTED\_BY\_CUSTOMER* to the **reasonCode** attribute. Don't use the reason *REQUESTED\_BY\_CUSTOMER* without a customer cancellation. For example, when the item is out of stock, as it negatively impacts your performance scores. Send shipment notification updates to Bol [#send-shipment-notification-updates-to-bol] To change the status of your shipment at Bol and inform your customers about it, you can add and set up *Bol Order Shipment Delta* in the site dedicated to orders after importing the orders from Bol to Productsup. Bol supports shipment in three (3) different ways: 1. *LVB/FBB* means that Bol handles the order from start to end. Therefore, the shipment export doesn't include FBB orders. 2. *FBR with own shipping labels* means that you process these orders by yourself and must provide the information about them with tracking numbers and transporter codes to Bol. See [Transporters](https://api.bol.com/retailer/public/Retailer-API/v9/functional/retailer-api/orders-shipments.html#_transporters). 3. *FBR with shipping labels purchased via Bol* isn't supported by Productsup. If you haven't handled the order within three (3) days of the expected delivery date, Bol automatically cancels such FBR orders and this negatively impacts your performance score. An order can consist of one or more items. All mutations in the API depend on an item. This means you ship or cancel every item separately using its **orderItemId**. Even if you ship them in one box, the API needs separate confirmations or cancellations per item. The order remains open until you shipped all items. It stays open also for the already shipped items from the same order. Correspondingly, there are two ways of setting up the shipment or cancellation export: . [Set up shipping or cancellation per orderItem](#section-idm234553733872264). . [Set up shipping or cancellation of the entire order in one package per orderId](#section-idm234553762431943) Set up shipping or cancellation per orderItem [#set-up-shipping-or-cancellation-per-orderitem] Bol prefers this approach. This setup gives you full control over each item in an order. For example, it lets you ship one (1) order in multiple parcels if needed or to confirm the customer's cancellation of a specific item from the order. You must import `trackingNumber` and `careerCode` per **orderItemId** to Productsup. Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Add your order management system as the main data source and set it up. Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Bol Order Shipment Delta*, hover over it, and select **Add**. UUID-8e528643-6833-01cd-25c1-6db17306e4b0 You may also choose to add the *Bol Order Cancellation Delta* export instead. On the Exports page, select the name of the added export to set it up. Select **Add Destination**, choose *Bol Order Shipment Delta* from the drop-down menu, give it a name as desired, and select **Save**. In **Authentication selection**, choose an existing authentication or select the **Add New Authentication** button. The platform redirects you to the Bol retailer account. Leave the **Feedback Import** button *On* to let Productsup receive a feedback file from the Bol API in case of export errors. This helps you troubleshoot the setup. Toggle the **Active** button to *On* to activate the destination. Select **Save**. Go to **Dataflow** and map the attributes from import to export. Once your data is ready, select **Run** in the top-right corner of the page to send your shipment notifications to Bol. Set up shipping or cancellation of the entire order in one package per orderId [#set-up-shipping-or-cancellation-of-the-entire-order-in-one-package-per-orderid] This approach doesn't let you control the shipment or cancellation of individual items in an order. If a customer cancels only one (1) item of an order, you must handle this manually to prevent a negative impact from Bol. This setup lets you ship or cancel orders without storing and managing **orderItemIds** in your main order management system. It is enough to import **trackingNumber** and **careerCode** per **orderId** to Productsup. To set up this type of the shipping or canceling export: Add *Bol Orders* as a main data source as described in [Import orders from Bol](#section-idm4611366625382434168764530978). Add your order management system as an additional data source. See [Enhance your products with additional data sources](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources). Map the main and additional data sources by **orderId** in the **ID Column In This Feed** and **ID Column From Your Main Feed**. Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Bol Order Shipment Delta*, hover over it, and select **Add**. UUID-8e528643-6833-01cd-25c1-6db17306e4b0 You may also choose to add the *Bol Order Cancellation Delta* export instead. On the Exports page, select the name of the added export to set it up. Select **Add Destination**, choose *Bol Order Shipment Delta* from the drop-down menu, give it a name as desired, and select **Save**. In **Authentication selection**, select an existing authentication or select the **Add New Authentication** button. The platform redirects you to the Bol retailer account. Leave the **Feedback Import** button *On* to let Productsup receive a feedback file from the Bol API in case of export errors. This helps you troubleshoot the setup. Toggle the **Active** button to *On* to activate the destination. Select **Save**. Go to **Dataflow** and map the attributes from import to export. Once your data is ready, select **Run** in the top-right corner of your view to send your shipment notifications to Bol. # Add the Amazon Offer Creation export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; The Amazon Offer Creation export lets you list a new offer (price, condition, and availability) on an Amazon ASIN that already exists in Amazon's catalog. This is different from the Amazon Product Export: it does not create a new product or touch the ASIN's content data, and it does not require category-specific attribute (CSA) mapping. Use it when you want to co-list against an existing catalog entry rather than create a listing from scratch. Once an offer exists, use the [Amazon Inventory and Price Update SP-API export](/docs/help-center/export-data-feeds/add-export/add-amazon-inventory-and-price-update-sp-api-export) to keep its price and stock current. The Offer Creation export only creates new offers — it does not update existing ones. Prerequisites [#prerequisites] Before setting up the Amazon Offer Creation export, confirm the following: * You have an active Amazon Seller Central account. This export is not available for Vendor Central accounts. * You know the ASIN you want to attach each offer to. If you only have a barcode (UPC, EAN, GTIN, ISBN, or JAN), see [Find Amazon ASINs by barcode](/docs/help-center/import-data-feeds/import-data-from-third-party-external-systems/find-amazon-asins-by-barcode) first. * The marketplace you want to export to is available in the export list. See [Add the export](#add-the-export). * Your Amazon account is in good health: valid payment method, correct VAT or tax details, and no outstanding compliance issues. Amazon restricts who can list an offer against certain ASINs — for example, brand-registered or gated products. If Amazon rejects your offer for this reason, you or your client need approval from Amazon or the brand owner before the offer can go live. This is an Amazon policy, not a Productsup limitation. Add the export [#add-the-export] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for the marketplace you want to export to. Exports follow the naming format **Amazon Seller Central – Offer Creation (XX)**, where **XX** is the country code of your target marketplace, for example *US*, *DE*, or *FR*. If the marketplace you need is not in the list, that region is not yet supported. Contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) to request it. Hover over the export and select **Add**. Configure the destination [#configure-the-destination] On the **Exports** page, select the name of the export you added. Select **Add Destination**, choose *Amazon Seller Offer Creation Delta Export* from the dropdown, give it a name, and select **Save**. In **Authentication**, select an existing authentication or select **Add New Authentication** to connect your Amazon account via OAuth. Selecting **Add New Authentication** redirects you to Amazon to complete the authorization. Once authorized, Amazon redirects you back to Productsup automatically. In **Marketplace ID**, select the country you are exporting to. This must match the export you selected in [Add the export](#add-the-export). In **Seller ID**, enter your Amazon Seller ID. Leave this blank to use the Seller ID of the account you authenticated with in step 3. Switch **Active** to *On* and select **Save**. Map your data [#map-your-data] Unlike the full Amazon Product Export, this export does not use category-specific attribute templates. Amazon resolves the product category for you, based on the ASIN, so you only map the offer fields below. | Field | Required | Notes | | :------------------------------------------------- | :------- | :------------------------------------------------- | | SKU | Yes | Your own identifier for this offer | | ASIN | Yes | The existing Amazon ASIN you're co-listing against | | Condition | Yes | For example *new\_new* or *used\_good* | | Price | Yes | Your offer price, with currency | | Fulfillment channel | Yes | Whether you or Amazon (FBA) fulfill this offer | | Quantity | Yes | Available stock for this offer | | Handling time, sale price, and other offer details | No | Optional fields available in Dataflow | Go to **Dataflow** from your site's main menu and select your Amazon Offer Creation export in the dropdown on the left. Map your attributes to the fields listed above in the intermediate stage. Select **Run** in the top-right corner of your view to submit your first offers. Monitor results after submission [#monitor-results-after-submission] An unknown, missing, or invalid ASIN is skipped rather than escalated to full product creation. Check your export's feedback to find and fix these rows. A rejection specific to one offer, such as an invalid attribute value, is skipped so the rest of your export continues. Review the feedback for the affected SKU, correct the issue, and the offer is resubmitted on the next run. Submission is asynchronous — a successfully submitted offer may take a few minutes to appear against the ASIN in Seller Central. To check on a specific offer immediately, set up an Amazon Product Import datasource using the **Listings API** source. Common issues [#common-issues] | Issue | Likely cause | What to do | | :--------------------------------------------------- | :------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Offer skipped with feedback | ASIN is missing, invalid, or has no product type in this marketplace | Confirm the ASIN exists in this marketplace, or find it with [Find Amazon ASINs by barcode](/docs/help-center/import-data-feeds/import-data-from-third-party-external-systems/find-amazon-asins-by-barcode) | | Offer rejected due to brand or category restrictions | The ASIN is brand-gated or otherwise restricted | Get approval from Amazon or the brand owner before listing against this ASIN | | Offer accepted but not visible on Amazon | Amazon's asynchronous validation is still processing | Wait a few minutes, then check via the Amazon Product Import (Listings API) datasource or Seller Central | | Authentication fails | Amazon account health issue | Check your Amazon account for expired payment details, missing VAT, or compliance flags | | Marketplace missing from the export list | Not yet supported | Contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) to request it | # Build your exports from scratch import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Build exports from scratch using a blank export if existing export templates don't suit your needs. Blank export is a blank canvas that you can customize as you need. There are four types of blank export templates in Productsup: . *Blank Export (empty)*. This blank export template lets you manually create a custom set of attributes in the export stage of Dataflow to meet the requirements of the desired channel. See [Set up Blank Export (empty) and Blank Export (with ID)](#section-idm455072265296483337401677465) for more information.Use *Blank Export (empty)* in the following cases: * To create custom exports, test your exports, or use them in reports. * To create an item setup sheet. See [Use an item setup sheet](/docs/help-center/export-data-feeds/special-export-setups/use-an-item-setup-sheet#section-idm463502822158883297643722671) for more information. * To download a feed with more than 10,000 items. See [First steps with Data View](/docs/help-center/map-and-optimize-your-data/data-view/first-steps-with-data-view#section-idm232217635442184) for more information. . *Blank Export (with ID)*. This blank export template is similar to *Blank Export (empty)* but has the **id** attribute pre-defined as a mandatory attribute in the export stage in Dataflow. See [Set up Blank Export (empty) and Blank Export (with ID)](#section-idm455072265296483337401677465) for more information. . *Delta Blank Export*. This blank export template lets you work with delta updates. The most popular use case for Delta Blank Export involves exporting only new, changed, and removed items to your channels without exporting items with unchanged data. Delta updates reduce transport time and data volume for big feeds requiring few updates. See [Set up Delta Blank Export](#section-idm4557758669414433380650892281) for more information. . *Export2Datasource Blank*. This blank export template lets you compile data from different sites within one organization into a single bucket and use this bucket as a data source in another data-accumulating site. See [Set up Export2Datasource Blank](#section-idm4663886527628833382440260539) for more information. There are no analyzer tests for blank exports. Add a blank export [#add-a-blank-export] To add a blank export to your site, take the following steps: > > In Exports, you can see the added export. See the next sections for further setup steps based on the chosen blank export template. > Go to **Exports** from your site's main menu. Select **Add export**. Select the necessary blank export in the gray banner under the search field. UUID-66c1a6b9-78f2-b3fb-d559-aee7bf9db90a Set up Blank Export (empty) and Blank Export (with ID) [#set-up-blank-export-empty-and-blank-export-with-id] *Blank Export (empty)* and *Blank Export (with ID)* let you create custom exports if none of the ready-made export templates fit your needs. These export templates are blank canvases where you can manually add and map the desired attributes in Dataflow. The process of setting up the exports *Blank Export (empty)* and *Blank Export (with ID)* is similar: Take the steps from [Add a blank export](#section-idm353337036706384) to add *Blank Export (empty)* or *Blank Export (with ID)*. Go to **Dataflow** from the site's main menu and select your blank export from the dropdown on the left of the top toolbar. Map the needed attributes from intermediate to export by dragging a connection from an attribute in the intermediate stage to **Drop or Click to add new field** in the export stage. UUID-63ea3aaf-7279-067b-8416-31832c27e29f For *Blank Export (with ID)*, the **id** attribute is the only mandatory attribute. You must connect it with a corresponding attribute in the intermediate stage. Go to **Exports**, find your blank export in the list of exports, and toggle its status in the *Status* column to **Active**. Select the name of your blank export in the *Export name* column. On the export setup page, select **Add Destination**. Select the needed destination option from the **Destination** dropdown, and choose **Save**. See [Find the most suitable export destination](/docs/help-center/best-practices/find-the-most-suitable-export-destination) to choose a destination. Set up your destination, and toggle **Active** to *On* to activate it. Select **Save** when done. Select **Export this export** in the top-right corner of the page to send your data to the destination. Alternatively, the platform exports the data during the next scheduled run. Set up Delta Blank Export [#set-up-delta-blank-export] When you work with extensive data feeds, data processing in the platform may take a long time. With the help of *Delta Blank Export*, which uses delta updates, you can send only updated data to the needed channel. Delta updates are a way of storing or transmitting data in the form of differences, called deltas, rather than complete data sets. With delta updates, the platform doesn't export unchanged items, which allows it to reduce transport time and data volume for large feeds. The platform uses a unique item identifier, such as an ID, GTIN, or variant ID, to identify each item and compare its current data to its data from the previous run. The platform generates up to four (4) types of files for delta updates, depending on the data changes: * **New**: items new to the feed. * **Changed**: items that have been in the feed before, but the data has changed. * **Deleted**: items that aren't in the feed anymore because of skip rules or deletions. * **Unchanged**: items that have been in the feed before and haven't changed. Use *Delta Blank Export* in the following cases: * If you don't expect your entire data feed to change frequently. * If your target channel requires you to export your data feed as delta updates due to technical requirements on their side. Apart from *Delta Blank Export*, several partner-specific export templates have similar delta update features. For example, *Salesforce Commerce Cloud B2C: Inventory (Delta)* or *Facebook Dynamic Ads (Delta Upload)*. If you need support exploring your optimal solution, reach out to your Customer Success Manager or contact [support@productsup.com](mailto:support@productsup.com). To set up your *Delta Blank Export*, take the following steps: Take the steps from [Add a blank export](#section-idm353337036706384) to add *Delta Blank Export*. Go to **Dataflow** from the site's main menu and select your blank export from the dropdown on the left of the top toolbar. Map the needed attributes from intermediate to export by dragging a connection from an attribute in the intermediate stage to **Drop or Click to add new field** in the export stage. UUID-a91ef686-345e-5ee7-a62a-6adf6131ef72 The export stage already has the **id** attribute. You must connect it with a corresponding attribute in the intermediate stage. Go to **Exports**, find your blank export in the list of exports, and toggle its status in the *Status* column to **Active**. Select the name of your blank export in the *Export name* column. On the export setup page, select **Add Destination**. Select the needed destination option from the **Destination** dropdown, and choose **Save**. See [Find the most suitable export destination](/docs/help-center/best-practices/find-the-most-suitable-export-destination) to choose a destination. Set up your destination, and toggle **Active** to *On* to activate it. Select **Save** when done. 1. Some export destinations, for example, *Productsup Server*, may automatically create a file in the *Files* section on the export setup page. You don't need this file for *Delta Blank Export*. If you see an automatically created file, select **Setup** next to the file, then select **Delete**, and then confirm the action. On the export setup page, select **Update Files** in the *Delta Files* section. A pop-up displays four files for delta updates: unchanged, new, modified, and deleted. Modify the file names as needed. UUID-62d59f9f-7ba1-a46a-01e8-c74eb126f046 If the pre-configured extension of the files doesn't match requirements, contact [support@productsup.com](mailto:support@productsup.com). In the *Delta Files* pop-up, toggle **Add Site ID to Delta Filenames** to *On* if your destination receives files with delta updates from multiple sites or systems. Enabling this option appends the site ID to the file names, allowing you to distinguish between files from different sites. Select **Save** to close the *Delta Files* pop-up. Select **Export this export** in the top-right corner of the page to send your data to the destination. Alternatively, the platform exports the data during the next scheduled run. After each export run, you can download any file with delta updates in the *Filename* section at the bottom of the export setup page. Generate empty delta files [#generate-empty-delta-files] You may want the platform to generate files with delta updates for deleted or new items, even if such files are empty. It is necessary if your destination or target channel always expects to have four files (new, changed, deleted, and unchanged) with every export run. Otherwise, your destination or channel might ingest files from previous runs, which can cause ID conflict issues and item duplicates. To enable the generation of empty files, follow the steps: Your target channel or destination settings must also allow empty files. They may discard these empty files if they interpret them as obsolete or unchanged. Go to **Exports** and select your *Delta Blank Export*. Go to the *Settings* tab. Check the box **Allow empty files (0 products)**, and select **Save** at the bottom of the page. UUID-237b5045-0aa8-7648-0519-d81646f52075 Export data in JSON and avoid creating empty delta files in Delta Blank Export [#export-data-in-json-and-avoid-creating-empty-delta-files-in-delta-blank-export] If you use the `\Export\Json` plugin to export data in JSON files, the platform ignores whether you have checked the box **Allow empty files (0 products)** and always creates empty delta files for each export run. If you want to both export your data in the JSON format and avoid creating empty delta files, you should take these steps: On the export setup page, go to the *Settings* tab, remove `\Export\Json` in **Export-Plugin**, and select **Save**. Open the tab *Labels, Tags & Sorting*, find the section *Export Tags*, and enter the following under **Add new tag**: 1. In **Key**, enter `custom_csv_writer_class`. 2. In **Value**, enter `ProductsUp_Csv_File_Writer_Json`. Select **Add tag** to save it. UUID-c1fdf18f-5be9-498d-e432-6a003e787b6c Check your Delta Blank Export history [#check-your-delta-blank-export-history] Go to **Exports** from your site's main menu. Go to the *Export history* tab. Activate the option **Show delta file changes** to view the export history with a breakdown of all types of delta updates. Set up Export2Datasource Blank [#set-up-export2datasource-blank] *Export2Datasource Blank* lets you compile data from different sites within an organization into one bucket and use this bucket as a data source in another data-accumulating site. UUID-f3f9daf8-f131-4423-4e7c-bfba22f53a27 For example, you run a marketplace and, in the Productsup platform, you have hundreds of sites exporting your separate product feeds to the designated Google Merchant Center accounts. In this case, you may want a site that combines these different feeds into one main feed and exports it to price comparison channels, Facebook, or other systems. If you did it manually, you would have to create exports in each site, send data for each export to the Productsup Server, and then add each separate Productsup Server link as a data source in one data-accumulating site. Instead, you can use the *Export2Datasource Blank* export and export all your separate feeds into a bucket. Later, you can use this bucket as a single data source. Contact [support@productsup.com](mailto:support@productsup.com) if you want to use this feature. Since it's an advanced tool, you may need assistance with the initial setup. Prerequisites [#prerequisites] To be able to export to and import from buckets, your Productsup organization should meet the following requirements: * All sites from which you want to send data to the same bucket should have the export *Export2Datasource Blank* with the same bucket name. You can create a copy of the export if you plan to use it multiple times without starting from scratch. See [Add export](/docs/help-center/export-data-feeds/add-export#section-idm353339436030962) for more information. * If you have several buckets in your organization, each should have a unique name. Otherwise, the platform can't distinguish which bucket it should send data to. * All sites that send data to the same bucket should have feeds with the same structure. Export2Datasource Blank setup steps [#export2datasource-blank-setup-steps] Take the steps from [Add a blank export](#section-idm353337036706384) to add *Export2Datasource Blank*. Go to **Dataflow** from the site's main menu and select your blank export from the dropdown on the left of the top toolbar. Map the needed attributes from intermediate to export by dragging a connection from an attribute in the intermediate stage to **Drop or Click to add new field** in the export stage. UUID-3cc20fc3-7694-9b61-dd44-eeb6d727d807 The export stage already has the **id** attribute. You must connect it with a corresponding attribute in the intermediate stage. Go to **Exports**, find your blank export in the list of exports, and toggle its status in the *Status* column to **Active**. Select the name of your blank export in the *Export name* column. On the export setup page, select **Add Destination**. Select *Export to Data Source* from the **Destination** dropdown and select **Save**. UUID-e6881d3d-5869-de42-3911-a286dcc2ec52 On the destination setup page, add a unique bucket name in **Bucket**. You can't choose an already-created bucket in this field. If you want to send your data to an existing bucket, you must manually enter the existing bucket name. The field is case-sensitive. By default, the destination doesn't export skipped items. To include skipped items in the export, toggle **Allow skipped rows** to *On*. By default, the destination includes platform-generated attributes, for example, created by a data service, into the export and sends them to the bucket. This allows you to use these attributes in other sites without needing to apply the same data services or other features again. If you don't want to export these attributes to the bucket, toggle **Remove Passthru Columns** to *On*. By default, the destination sends empty attributes to the bucket. To avoid sending empty attributes to the bucket, toggle **Remove Empty Columns** to *On*. By default, the destination sends the export output file to the bucket regardless of whether it contains any data. To avoid exporting files without data, toggle **Prevent Empty Upload** to *On*. Toggle **Active** to *On* to activate the destination. Select **Save**. UUID-c21f2810-7d87-7f46-616c-fc4194ecd3ee Select **Export this export** in the top-right corner of the page to send your data to the destination. Alternatively, the platform exports the data during the next scheduled run. *Export to Data Source* is a destination and not a file format. As a result, you can't edit file settings, such as file name, item limit, sorting actions, or item count. Import data from a bucket via the data source Export to Data Source [#import-data-from-a-bucket-via-the-data-source-export-to-data-source] To import data from a bucket into a data-accumulating site, take the following steps to set up the data source *Export to Data Source*: Go to **Data Sources** from the site's main menu, and select **Add data source**. Search for *Export to Data Source*, select **Add**, give it a name as desired, and then select **Continue**. UUID-ddf16353-54df-1e93-d2fa-2543e6132f92 Select a necessary bucket from **Bucket**. If you don't see a list of existing buckets and haven't set one up in *Exports*, see [Set up a bucket destination](/docs/help-center/export-data-feeds/set-up-an-export-destination/set-up-a-bucket-destination). To include skipped items in the import, toggle **Allow skipped rows** to *On*. To skip importing data that came from invalid sites, toggle **Clear invalid sites** to *On*. To remove platform-generated attributes from the import, toggle **Remove Passthru Columns** to *On*. In **Description (optional)**, add a description for your data source. It substitutes the data source name in the *Overview* tab in *Data Sources*. UUID-23cd6b5d-90af-fac5-4bcd-494adce5047d Select **Save** and select **Import** in the top-right corner of the page. # Add Kaufland exports and import order data from Kaufland import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Kaufland is a large marketplace that offers a wide variety of products. It is very popular in Germany, with [Kaufland.de](https://www.kaufland.de/) attracting over 30 million visitors monthly. The marketplace is expanding to Czechia, Slovakia, Poland, Austria, Italy, and France with country-specific storefronts. To let you sell your products on Kaufland, Productsup has built an ecosystem that sends product and order data to Kaufland and imports order data from Kaufland into Productsup: . *Kaufland Product Creation*This API-based export lets you create and update products on Kaufland and contains the attributes relevant to products of all categories. When setting up this export, you also use multiple category-specific exports that contain category-specific product attributes. The product creation export is a delta-based export that sends only the new, changed, or deleted products to Kaufland instead of exporting the entire product catalog during every site run. . *Kaufland Inventory Export*This API-based export lets you create and update your product listings on Kaufland. It is a delta-based export that sends only the new, changed, or deleted product listings to Kaufland instead of exporting the entire catalog during every site run. . *Kaufland Orders Fulfilment Export*This API-based export sends order fulfillment updates to Kaufland to let you inform customers on Kaufland about the status of their orders. This is a delta-based export that sends only new order fulfillment data to Kaufland instead of sending the entire order catalog during every site run. . *Kaufland Order Units*This API-based data source imports orders from Kaufland into Productsup to let you send the order data to your order management system. Prerequisites [#prerequisites] To set up the Kaufland ecosystem in Productsup, you need: . A project in your Productsup organization. In this separate project, you need to create separate sites for each of the following types of data that you send to and receive from Kaufland: * Products * Inventories * Orders * Order fulfillment details This is a recommended option. If a separate Kaufland project doesn't fit your overall organization structure, you can ignore this recommendation. . A Kaufland Seller Center account. See [Become a seller on the Kaufland online marketplaces!](https://www.kaufland.de/seller-signup/en/) for more information on registering as a seller on Kaufland. . An API key and API secret that you can find in your Kaufland Seller Center account. . A list of all Kaufland categories you want to sell products in. These integrations use category-specific attributes. Productsup supports only some categories by default. But we can add missing categories on request. It may take around two weeks to support your request. To request the necessary categories for Kaufland, contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) and provide a list of categories. Decide which Kaufland export you should set up first [#decide-which-kaufland-export-you-should-set-up-first] The Kaufland data schema distinguishes between a product and an inventory. In Kaufland terms, a product is a set of metadata about an item that sellers offer on Kaufland. A collection of such products on Kaufland is equivalent to a catalog of all items sold on the platform. An inventory is your individual product listing, or offer, on Kaufland. You offer a certain product for a certain price with certain shipment conditions. Every seller has an inventory per each product they sell on Kaufland. Here is a diagram to help you identify what Kaufland export you need to set up first based on what data you want to send: UUID-4f4b9e4c-441e-e18e-2996-c9a0a8d064e3 Your next steps depend on the option recommended by the diagram: * See [Send products to Kaufland](#section-idm4485930642996833736842961611) to set up the *Kaufland Product Creation* export. Once done, you can move on to setting up *Kaufland Inventory Export*. * See [Send inventories to Kaufland](#section-idm4591664900384034064977314961) to set up *Kaufland Inventory Export*. If your products are already available on Kaufland, you can skip setting up the product creation export. Send products to Kaufland [#send-products-to-kaufland] In the site dedicated to sending your products to Kaufland, add and set up the *Kaufland Product Creation* export: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Kaufland Product Creation*, hover over it, and select **Add**. UUID-6c4539f8-2b4c-93c2-3c42-5fe6a3a8a0ef On the Exports page, select the name of the added export to set it up. Select **Add Destination**, choose *Kaufland Product Export* from the drop-down list, give it a name, and then select **Save**. UUID-2df60321-9eec-1ff8-8f9a-3808bed4ffc7 In **Client Key** and **Secret Key**, enter the API key and secret you got in your Kaufland Seller Center to let the Productsup platform authenticate in your Kaufland account. In **Locale**, choose the market where you plan to sell products: * *de-DE* – German storefront in the German language. * *cs-CZ* – Czech storefront in the Czech language. * *sk-SK* – Slovakian storefront in the Slovakian language. * *pl-PL* – Polish storefront in the Polish language. * *de-AT* – Austrian storefront in the German language. * *it-IT* – Italian storefront in the Italian language. * *fr-FR* – French storefront in the French language. Leave the **Feedback Import** toggle *On* to let the platform receive feedback files from the Kaufland API in case of export errors. This helps to troubleshoot the setup. Leave the **Category Specific Attributes** toggle *On* to map category-specific attributes in Dataflow. Toggle the **Active** button to *On* to activate the destination. Select **Save**. See [Map category-specific attributes for Kaufland](#section-idm4602196929054434191328897484) to proceed. Map category-specific attributes for Kaufland [#map-category-specific-attributes-for-kaufland] To proceed with setting up your *Kaufland Product Creation* export, you need to create a Classification Mapping list for your categories and map all relevant category-specific attributes: Go to **Lists** from your site's main menu and select **ADD LIST**. Choose **Classification Mapping** and select **Continue**. Give the list a desired name and select *Kaufland Product Creation* in **Classification**. UUID-3bc4e95e-9e53-1c33-bea5-6238fbfe8027 Choose **Import** in **Stage** and select the **Attribute** field to find the attribute in your import stage that contains your products' category data. Then, select **Add** at the bottom of the page to add the list. Map your categories to the corresponding Kaufland categories in the **Replace term** column. UUID-c2f3e530-53c5-c709-5844-a3ee7a04273b You must create and set up a new Classification Mapping list every time you modify the chosen category attribute in your data source and import its new values into your site. Otherwise, the already existing list can't upload your new values, and you can't map them to the corresponding Kaufland categories. Once you create a new Classification Mapping list, you need to choose it in the related rule box. Go to **Dataflow** and select *Kaufland Product Creation* from the drop-down menu on the left. Map all the needed attributes from import to export. The attributes you see in the export stage are relevant for products of all your Kaufland categories. Map your import-stage category attribute to `category` in the intermediate stage. Then, map it to both `category` and `___category_path` in the export stage to add the needed rule boxes and apply the Classification Mapping list. Select `category` in the intermediate stage and open the **Select an Option** drop-down menu on the right.Search for and select **Classification Mapping**. Choose your category list in **List** and select **Save**. To let the site display your category-specific attributes in Dataflow, select **Run** or **Import** in the top-right corner of your view. This run will fail because you haven't yet mapped all the mandatory attributes, so no data export occurs at this stage. The aim of the run is to import the needed categories and attributes into Dataflow. Once the site run finishes, the **Classifications** drop-down menu appears in the upper ribbon in Dataflow. Select each category in this drop-down menu to let Dataflow display the relevant category-specific attributes in the export stage. Map all the needed attributes from import to export. UUID-851628c1-299a-3792-c36e-44bb28a60f66 If you can't see the **Classifications** drop-down menu when the site run finishes, try refreshing your page. Once your data is ready, select **Run** in the top-right corner of your view to send your products to Kaufland. Product safety attributes [#product-safety-attributes] The export *Kaufland Product Creation* has the following attributes dedicated to help you comply with the General Product Safety Regulation (GPSR): * **ce\_certificate** * **product\_safety\_contact.address** * **product\_safety\_contact.email\_address** * **product\_safety\_contact.name** * **product\_safety\_contact.phone\_number** * **safety\_guidelines** Although these attributes are optional, we highly recommend populating them with relevant values and sending them to your Kaufland account to be GPSR-compliant. UUID-7cfe138a-b6b7-a545-f546-e63a7f84a6fa Send inventories to Kaufland [#send-inventories-to-kaufland] You can send your inventories to Kaufland only when your products already exist there. In the site dedicated to sending your inventories to Kaufland, add and set up *Kaufland Inventory Export*: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Kaufland Inventory Export*, hover over it, and select **Add**. UUID-67582146-d689-7fbb-02c1-35b0be52642d On the Exports page, select the name of the added export to set it up. Select **Add Destination**, choose *Kaufland Inventory Export* from the drop-down list, give it a name as desired, and then select **Save**. UUID-654d761d-650b-14c5-f8c2-369cfd4bd683 In **Client Key** and **Secret Key**, enter the API key and secret you got in your Kaufland Seller Center to let the Productsup platform authenticate in your Kaufland account. In **Storefront**, enter the market where you plan to send your product listings: * *de* – Germany. * *cz* – Czechia. * *sk* – Slovakia. * *pl* – Poland. * *at* – Austria. * *it* – Italy. * *fr* – France. Leave the **Feedback Import** toggle *On* to let the platform receive feedback files from the Kaufland API in case of export errors. This helps to troubleshoot the setup. Toggle the **Active** button to *On* to activate the destination. Select **Save**. Go to **Dataflow** and select *Kaufland Inventory Export* from the drop-down menu on the left. Map all the needed attributes from import to export. See [Inventory CSV Files](https://sellerapi.kaufland.com/?page=inventory-files) for more information on attribute requirements. The `ean` attribute contains the ID of the product from the *Kaufland Product Creation* export, while the `id` attribute uniquely identifies each inventory. Once your data is ready, select **Run** in the top-right corner of your view to send your inventories to Kaufland. Import orders from Kaufland [#import-orders-from-kaufland] To let Productsup import your orders from Kaufland, do the following in the site dedicated to the Kaufland data source: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Kaufland Order Units*, select **Add**, give it a name as desired, and then choose **Continue**. UUID-1f9045e5-fc1c-ebac-3345-5e7564767882 In **Client Key** and **Secret key**, enter the API key and secret you got in your Kaufland Seller Center to let the Productsup platform authenticate in your Kaufland account. In **Storefront**, choose the market where you want to import your order data from: * *de* – Germany. * *cz* – Czechia. * *sk* – Slovakia. * *pl* – Poland. * *at* – Austria. * *it* – Italy. * *fr* – France. In **Status**, select the status that orders should have for Productsup to import them. The default option is *open*. * *open* – A customer created a new order on Kaufland. Customers can still cancel orders with this state within 15 minutes after placing them. * *need\_to\_be\_sent* – You received the order and need to dispatch it to the customer. Use this order status to import only the orders you haven't yet sent to your customers. * *sent* – You dispatched the order to the customer. * *received* – The customer received your order. This order status is only available if you provide tracking information. * *cancelled* – You or the customer canceled the order. * *sent\_and\_autopaid* – You dispatched the order that the customer has paid for, but you haven't provided any tracking information. The 21-day period until payout has ended, and you can now receive payment for this order unit. * *returned* – You received a return from the customer. * *returned\_paid* – You received a return and refunded the cost of the related order items to the customer. See [Managing orders](https://sellerapi.kaufland.com/?page=orders) for more information on managing orders on Kaufland. If you want to import orders created within a specific timeframe only, choose the suitable options in **Updated Since** or **Created from**.For example, if you choose *24 hours* in **Created from**, the platform imports only the orders created within the last 24 hours. To import orders updated within the past seven (7) days, choose *7 days ago* in **Updated Since**. Specify the desired name of the data source in **Description (optional)**. Select **Save**. Go to **Exports** from your site's main menu and select **Add export** to find and add your order management system. Set up the added export and map its relevant attributes in Dataflow. Choose **Run** in the top-right corner of the page to let the site import your order data from Kaufland and send it to your order management system. Send order fulfillment updates to Kaufland [#send-order-fulfillment-updates-to-kaufland] To change the status of your orders on Kaufland and inform your customers about order status changes, do the following in the site dedicated to the Kaufland order fulfillment export: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Kaufland Orders Fulfilment Export*, hover over it, and select **Add**. UUID-a50bbf21-462a-4414-266d-02292df7bd75 On the Exports page, select the name of the added export to set it up. Select **Add Destination**, choose *Kaufland Orders Fulfilment Export* from the drop-down list, give it a name as desired, and then select **Save**. UUID-741b6487-ec4f-707f-a12d-a38d9d78bf98 In **Client Key** and **Secret Key**, enter the API key and secret you got in your Kaufland Seller Center to let the Productsup platform authenticate in your Kaufland account. Leave the **Feedback Import** toggle *On* to let the platform receive feedback files from the Kaufland API in case of export errors. This helps to troubleshoot the setup. Toggle the **Active** button to *On* to activate the destination. Select **Save**. Go to **Dataflow** and select *Kaufland Orders Fulfilment Export* from the drop-down menu on the left. Map all the needed attributes from import to export: * `item_order_unit` contains the ID of the order unit. See [Managing orders](https://sellerapi.kaufland.com/?page=orders) for the explanation of the order unit term. * `fulfilment_action` contains the action you are taking regarding the order. The accepted values are *fulfil*, *send*, and *cancel*. If the value is *send*, you should provide tracking information in `tracking_number` and `carrier_code`. It isn't mandatory, but it is a best practice. See [Carrier Codes](https://sellerapi.kaufland.com/?page=order-files#carrier-codes) or check the analyzer tests for a full list of accepted carrier codes.If the value is *cancel*, you must provide a reason for cancellation in `cancel_reason`. This is mandatory. See [Cancellation Reasons](https://sellerapi.kaufland.com/?page=order-files#cancellation-reasons) or check the analyzer tests for a full list of accepted values. Once all the settings are ready, you can send your order fulfillment updates to Kaufland. Select **Run** in the top-right corner of your view to send the data. # Add Facebook Dynamic Ads export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] This document covers the setup of the export *Facebook Dynamic Ads* and the difference between all Facebook exports available in Productsup. Using Productsup, you can send your product catalog to [Facebook Commerce Manager](https://business.facebook.com/commerce/), one of Meta Business Manager tools. With your product catalog available in Commerce Manager, you can advertise your products to wide audiences across the entire Meta ecosystem based on users' interests and previous behavior. The Meta ecosystem includes Facebook, Instagram, Messenger, and the Audience Network. Productsup offers the following exports to send data to the Meta ecosystem: | Export name | Export purpose and description | | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | *Facebook Dynamic Ads* | Sending your product catalog to Facebook Commerce Manager, where you can find it as a data feed added in the *Data sources* tab.You can use this export as a file or API-based export. For a detailed breakdown of the differences and advantages of these options, see [this table below](#informaltable-idm243509337719856).This export sends your entire catalog to Commerce Manager. If you have millions of products, exporting the entire catalog may take considerable time.See the following sections in this document for information on setting up this export. | | *Facebook Dynamic Ads (Delta Upload)* | Sending changed products to Facebook Commerce Manager via the Facebook Marketing API. This export uses delta files, which means it sends only new, updated, and deleted products to Facebook instead of the entire catalog. The export doesn't send unchanged products to Commerce Manager, which helps reduce site-running times.When this export runs, it creates a *Productsup* app in the *Data sources* tab in Commerce Manager that uploads the changed data into your product catalog.See [Add Facebook Dynamic Ads (Delta Upload) export](/docs/help-center/export-data-feeds/add-export/add-facebook-dynamic-ads-delta-upload-export). | | *Facebook Localized Catalog - Country Feed* | Sending additional country-specific data as a supplement to your product catalog in Facebook Commerce Manager. Useful for cases when you sell products across multiple countries that use different currencies or units of measurement.You can use this export as a file or API-based export. For a detailed breakdown of the differences and advantages of these options, see [this table below](#informaltable-idm243509337719856).This export sends your entire catalog to Commerce Manager. If you have millions of products, exporting the entire catalog may take considerable time.See [Facebook Localized Ads template](/docs/help-center/export-data-feeds/facebook-localized-ads-template). | | *Facebook Localized Catalog - Language Feed* | Sending data in multiple languages as a supplement to your product catalog in Facebook Commerce Manager. Useful for cases when you sell products across multiple countries that use different languages.You can use this export as a file or API-based export. For a detailed breakdown of the differences and advantages of these options, see [this table below](#informaltable-idm243509337719856).This export sends your entire catalog to Commerce Manager. If you have millions of products, exporting the entire catalog may take considerable time.See [Facebook Localized Ads template](/docs/help-center/export-data-feeds/facebook-localized-ads-template). | Documentation on *Facebook Local Product Feed (LIA)*, *Facebook Dynamic Ads Video*, *Facebook Travel Ads - Flight Feed*, *Facebook Travel Ads - Destination Feed*, *Facebook - Automotive Inventory Ads*, and *Facebook Real Estate* is coming soon. Although you can find the *Instagram* export in Productsup, we recommend using *Facebook Dynamic Ads* or *Facebook Dynamic Ads (Delta Upload)* to advertise your products on Instagram. The *Instagram* export doesn't get regular maintenance and updates, unlike the Facebook exports. Prerequisites [#prerequisites] To send your product catalog to Facebook Commerce Manager using the export *Facebook Dynamic Ads*, you need: . A Facebook business account with at least one product catalog created in it. . Only relevant if you choose to send your product catalog to Facebook Commerce Manager via the Facebook Marketing API: 1. The ID of the catalog where you want to send your products. 2. A Facebook authentication in your Productsup organization.To add a Facebook authentication: Go to **Authentication** from the organization's, project's, or site's menu and select **Add Authentication**. In **Type**, select *Facebook*, give it a desired name, and select **Next**. Select **Connect** for Productsup to redirect you to a Facebook page where you can give Productsup access to your Facebook business account. Once ready, Facebook redirects you back to Productsup. Close the confirmation window to proceed. Set up the Facebook Dynamic Ads export [#set-up-the-facebook-dynamic-ads-export] Go to **Exports** from your site's main menu, and select **Add export**. Search for *Facebook Dynamic Ads*, hover over it, and select **Add**. UUID-f0ada9ad-e668-a15b-e742-5fb5ec387fd3 Go to **Dataflow** from the site's main menu and choose the added export from the dropdown in the toolbar. Map all relevant attributes from import to export. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) for more information.There are only 9 mandatory attributes for Facebook: * **brand** * **condition** * **id** * **image\_link** * **link** * **price** * **availability** * **description** * **title** Go to **Exports** and select *Facebook Dynamic Ads*. Select **Add Destination** and choose the needed destination from the **Destination** drop-down menu: 1. You can choose any standard file destination, such as *Productsup Server* or *SFTP/FTP/FTPS Server*. 2. You can select the API-based destination *Facebook Marketing API: Data Feed*. UUID-82cd2098-7de9-0bd0-2b19-c971077f41e5 \| Destination | What it does | When to choose it | How to set it up | | A file destination, such as *Productsup Server* or *SFTP/FTP/FTPS Server*. | A file destination generates a file and sends your entire product catalog to that file. When running your first export with this destination, you need to manually upload the generated file to Commerce Manager to let Facebook import your data from it. The manual file upload is a one-time action. | - You have a smaller product catalog and/or do less frequent data updates.A smaller product catalog can contain hundreds or thousands of products as opposed to millions. | See [Find the most suitable export destination](/docs/help-center/best-practices/find-the-most-suitable-export-destination) to choose your file destination option and find a document covering its setup. | | -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | The API-based destination *Facebook Marketing API: Data Feed* | *Facebook Marketing API: Data Feed* generates a file, sends your entire product catalog to that file, and automatically uploads the file to Commerce Manager. This destination also lets you comply with Facebook's file size requirements thanks to compression and automatically splitting your product catalog into multiple files if needed. The destination lets you configure any desired schedule for Facebook to import your product catalog. | - You have a large product catalog with millions of products and/or do frequent data updates to achieve more real-time data synchronization. - You want to receive feedback from Facebook to troubleshoot your data in Productsup. If your use case fits both points and you want to speed up your exports to Facebook by sending only changed data to Commerce Manager, you may want to consider the export *Facebook Dynamic Ads (Delta Upload)* with its own API- and delta-based destination. See [Add Facebook Dynamic Ads (Delta Upload) export](/docs/help-center/export-data-feeds/add-export/add-facebook-dynamic-ads-delta-upload-export). | See [the following section](#section-idm234723382307493) to set up the API-based destination *Facebook Marketing API: Data Feed*. | Go to **Data View**. In the top ribbon, select *Readiness* from the **Overview** drop-down menu to see what data transformations are necessary to meet Facebook's product data requirements. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view) for more information on using the Analyzer feature. When your export setup and product data are ready, select **Run** or **Export** in the top-right corner of the page. If the run finishes with issues, you can go to **Error Log** to troubleshoot. Go to your Facebook business account: 1. If you are using the destination *Facebook Marketing API: Data Feed*, check that Facebook has successfully uploaded all your products to the needed catalog. 2. If you are using any other destination, go to the *Data sources* tab in your Commerce Manager to upload the generated file as your data feed. You can copy the link to your generated file in Productsup on the export setup page in the section *Files* or the destination setup page. Set up the destination Facebook Marketing API: Data Feed [#set-up-the-destination-facebook-marketing-api-data-feed] If you have already created an authentication for Facebook in your current site, project, or organization, you can choose it in the **Authentication** drop-down menu. If not, see [Prerequisites](#N1734534896927). In **Product Catalog ID**, enter the ID of the product catalog in Commerce Manager where you want to send your products. If you don't want to use *Productsup Product Feed* as the default name of a data feed added in the *Data sources* tab in Commerce Manager, enter a different name for your data feed in **Feed Name**. In **Market country**, choose the country where you want to advertise and sell your products. In **Default currency**, choose the currency of the prices in your product catalog. If you don't choose a currency here, `USD` is the default option added to your product catalog's metadata in Commerce Manager. If your product catalog includes millions of products, you may need to compress it and split it into multiple files to meet Facebook's file size requirements and speed up the export.See [File formats and size limits for data feeds](https://www.facebook.com/business/help/120325381656392?id=725943027795860#Formats) for more information on Facebook's file size limits for data feeds. 1. Toggle **Compression** to *On* to compress your product catalog and send it as a GZIP file to Facebook. 2. Toggle **Multiple feeds** to *On* if your overall export file size exceeds Facebook's requirements and you plan to send your product catalog in multiple files. If you turn this setting on, you need to add another file to your export. Once you finish the destination setup and select **Save**, the platform takes you to the setup page of your *Facebook Dynamic Ads* export, where you should select **Add File** at the bottom of the page. See [Overview tab](/docs/help-center/export-data-feeds/add-export#para-idm243469430052168) for more information. UUID-cd4df07e-998b-eb73-b5b0-67c96265e6f5 3. Toggle **Delete other feeds** to *On* if you have enabled the setting **Multiple feeds** and want Facebook to delete previously added files if a new export has fewer products and doesn't need as many files. Set up a schedule for Facebook imports in **Replace Interval**, **Update Interval**, and **Trigger download**. See [the following section](#section-idm234730258165143) for detailed instructions. Toggle **Active** to *On* to activate the destination. Select **Save**. Set up a schedule for Facebook to import your export data [#set-up-a-schedule-for-facebook-to-import-your-export-data] Once you set up your Facebook imports, go back to [see the relevant section](#N1736513150146) in the previous section to finish the destination setup. There are different ways to set up how often Productsup generates your export file and how often Facebook imports data from it: * On the Productsup side, you can generate your export file whenever necessary by running your *Facebook Dynamic Ads* export manually or setting up automatic site runs in Scheduling. See [Set up scheduling and triggering processes in Scheduling](/docs/help-center/dashboard-and-monitor/set-up-scheduling-and-triggering-processes-in-scheduling). * On the Facebook side, you can use different fields in the setup of the *Facebook Marketing API: Data Feed* destination: * Use the setting **Trigger download** if you want Facebook to import data from your export file based on site runs in Productsup. * Set up a desired schedule using the fields **Replace Interval** and **Update Interval** if you want to disconnect Facebook imports from site runs in Productsup. More information on these fields: | Field name | What it does | How to set it up | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Trigger download** | Lets Facebook import data from your export file as soon as Productsup finishes uploading data to it. Ties Facebook imports to Productsup exports. | Toggle **Trigger download** to *On* to let Facebook upload your entire product catalog every time Productsup finishes updating it in the generated export file. | | **Replace Interval** | Uses a defined schedule to let Facebook overwrite your previously imported products with new data from the generated export file. This option updates the data of your previously imported products, creates new products added to the export file, and deletes previously uploaded products that are no longer in the export file.You must create a site-running schedule in Productsup to let Facebook timely import up-to-date product data. This schedule should run less often than the update interval. Allow for your average site run time between your scheduled Productsup exports and your replace interval on the Facebook side. | Specify how often you want Facebook to overwrite your previously uploaded products with a new batch in **Replace Interval**.You can configure this interval *only once* before sending your product catalog to Commerce Manager for the first time. Use the following templates to define the needed replace interval: - Enter `h` for hourly uploads. - Enter `d:12` for daily uploads at noon or `d:18:30` for daily uploads at 6:30 PM. - Enter `w:3:20` for weekly uploads on Wednesdays at 8 PM. - Enter `m:20:1` for uploads on the twentieth of each month at 1 AM. | | **Update Interval** | Uses a defined schedule running more often than the replace interval to let Facebook update your previously imported products with new data from the generated export file. This option updates the data of your previously imported products and creates new products added to the export file. No product deletions occur at this stage.You must create a site-running schedule in Productsup to let Facebook timely import up-to-date product data. This schedule should run more often than the replace interval. Allow for your average site run time between your scheduled Productsup exports and your update interval on the Facebook side. | Use the same templates as in your replace interval to specify how often Facebook should update your catalog in **Update Interval**.You can configure this interval *only once* before sending your product catalog to Commerce Manager for the first time. | There are three scenarios for using these settings: . \*\*\*Using only replace and update intervals.\*\*\*Data updates on Facebook can happen on a fixed schedule of Facebook imports without interference. Real-time data updates aren't possible. All data changes must wait for the next update cycle to appear in Commerce Manager.To use this scenario, set **Trigger download** to *Off*. . \*\*\*Using only triggered downloads.\*\*\*Data updates on Facebook can happen on a fixed schedule created in Productsup or follow manual site runs in Productsup. This lets you change your data in Commerce Manager at any moment, allowing near real-time updates, which is ideal for rapidly changing data like inventory levels or flash sales.To use this scenario, remove the default input `d:12` from **Replace Interval** to avoid unnecessary Facebook imports. . \*\*\*Using intervals and triggered downloads together.\*\*\*Data updates on Facebook can happen on a fixed schedule of Facebook imports and follow manual site runs or site-running schedules in Productsup. This can help you achieve near real-time updates with a fallback mechanism of scheduled Facebook imports in case of API or system issues causing triggered downloads to fail. However, this scenario requires meticulous timing to prevent intervals and triggered downloads from interfering with each other. We recommend using the replace and update intervals without triggered downloads if multiple exports in your Productsup organization send data to the same product catalog in Commerce Manager. # Add monitor event for imported items increase import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Use a monitor event to signal an increase in imported products. Add Number of imported items increased error event [#add-number-of-imported-items-increased-error-event] First, make sure that a large fluctuation in imported products is not common for the site. Next, go to **Monitor** from your site-level menu and select **ADD ERROR EVENT**. Choose the stage **Import** and select **Continue**. Select the error event, **Number of imported Items increased**, then select **Continue**. Enter a percentage value in **Threshold** to trigger an error event. When exceeded, the threshold value initiates an error event notification. Choose the **Severity Level** that you have determined to be appropriate for the error event. Select the action(s) you want to occur in case of an error event and select **Add**. If you select the **Send Email Notification** option, you will receive an email indicating the affected site and list name(s). You can view the newly added monitoring event in **Monitor** on the **All** tab. Have questions? Contact [support@productsup.com](mailto:support@productsup.com). # Set up Monitor for your feeds import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Let Productsup help you stay on top of your feed status automatically by setting error events and receiving notifications when events occur. In Monitor, you can set up email and chat tools, such as Slack and Microsoft Teams, to receive error notifications to an audience of your choice. Here are some questions you may have in regards to your feeds, such as: * Did the data from our back-end update successfully? * Am I missing key attributes in my feeds? * Do my feeds meet all partner channel expectations? * Do we have high latency when providing our data to clients? You can set up monitoring *events* to address those questions and set up notifications or trigger a run to stop processing runs entirely. For more information on available event types, see [Monitor events overview](/docs/help-center/dashboard-and-monitor/ensure-data-quality-in-monitoring/monitor-events-overview). * Only Administrators or Users with *Read/Write access can manage monitoring*. * Ensure you have defined a *unique item identifier* in **Data Sources** on the *Settings* tab. See [Add a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier). Set up error events [#set-up-error-events] You can add or edit and configure events for multiple sites or projects. Add/edit a monitoring event [#addedit-a-monitoring-event] Go to **Monitor** in the main menu from the site, project, or organization level. Select **ADD ERROR EVENT**. To edit a pre-existing event, select the event's settings button and choose **Edit**. UUID-905527e0-693a-3649-6980-76d24fbb9d91 To create a new event, select one of the following stages: *Import*, *Intermediate*, *Export*, or *General*, and select **Continue**. Choose your event and select **More** to get the event's details. Then, either choose **Select** within the event description box or select **Continue** from the *ADD ERROR EVENT* view to proceed. Configure your event by selecting a **Severity Level**. Some of the events can have the *Threshold (%)* field. For example, these are all the events on the intermediate level. These events only happen upon reaching a predetermined threshold. UUID-a0ba8f82-efd4-afed-7f9d-b05d98e63461 Select the action you want to trigger when an error event occurs. Choose among **Stop Processing**, **Email Notification**, or **Slack Notification**. Select **Add**. Your error event is now active for all stage sub-levels. Set up the Import failed for Data Source event [#set-up-the-import-failed-for-data-source-event] For the *Import failed for Data Source* monitor event, you should also define Data Source after [Step 5](#N1671641574126) of the previous section. UUID-73db3cc8-8108-a2e5-feb9-4b94a67b46e7 Here are the rules depending on the level where you add an event: When you add an event at the organization or project level: * There is no *Choose data source(s) to which the error event should be applied* section step. The platform automatically selects all data sources. * The platform creates only one event for all data sources. * When you add new data sources, the platform automatically includes them in the monitoring. If an event already exists on the organization level, the project-level event overrides it, but only for the data sources belonging to this project. All other data sources follow the organization level's event settings. When you add an event on the site level: * The *Choose data source(s) to which the error event should be applied* section appears in the wizard, and you must select all or specific data sources. * The platform creates individual events for each data source. * When you add new data sources, the platform doesn't include them in the monitoring automatically, even if you choose **Select All** for data sources. Set up error event notifications [#set-up-error-event-notifications] To stay informed of error events, you can set up automated notification messages via email, Slack, or Microsoft Teams. You can use email, Slack, and Microsoft Teams notifications combined. Set up email notifications for single email addresses [#set-up-email-notifications-for-single-email-addresses] Go to **Monitor** in the main menu. Set up a new monitoring event or edit a pre-existing one. See [Add/edit a monitoring event, step 2](#N1617256897000). Toggle the **Send Email Notification** button to the **On** position. Enter the recipient's email address in the **Email Notification** field. Select **Add**. UUID-d7fecda7-5095-897b-8e1b-5c1a9305bbac Repeat the process as necessary and select **Save**. Set up group email notifications [#set-up-group-email-notifications] You can also set up error event notifications sent to group email addresses. Go to **Monitor** in the main menu. Create a new error event or edit a pre-existing one. To add a new group notification, select **Group Notifications**. Next, select **ADD GROUP**. Choose **Email** and select **Continue**. In **Name**, enter a group name. Next, add the group email address in **Members** and select **Add**. (Optional) Toggle the **Assign responsibilities** button to the **On** position. Assigning responsibilities lets you define which types of error event notifications your specified groups receive. Then choose the **Severity Level** for group notifications. Select **Finish**. UUID-3ee855f5-e126-bd1f-233f-9498628c4a8a To edit error event group notifications, choose the group error type on the overview page. Then select the settings button and choose **Edit**. Modify the settings and select **Save**. UUID-d401130b-b7dd-27ab-fd56-4aaf9ec08f72 Set up Slack group notifications [#set-up-slack-group-notifications] You can receive notifications directly in Slack. Similar to email notifications, you can send notifications to personal Slack chats, including yours, or a multi-person chat where you're a member. You can also receive notifications in Slack channels. Go to **Monitor** in the main menu. Set up a new Slack monitoring event or edit a pre-existing one. To add a connection to your Slack chat or channel, you must first select **Group Notifications** and perform the setup. Next, select **ADD GROUP**. Choose Slack and select **Continue**. A pop-up window appears where you can enter your Slack login credentials. Select a personal Slack chat or channel that you want to notify from the drop-down list under *Where should Productsup App post?* UUID-d9e8f1b9-adfa-396e-c515-8e44dd383ca0 Set up Slack notifications [#set-up-slack-notifications] Go to **Monitor** in the main menu. Add a new monitoring event or edit a pre-existing one. See Add/edit a connection to your Slack chat or Slack channel [step 2](#listitem-idm11617293024670). Toggle the **Slack Notification** button to the **On** position. In **Slack Notification**, enter the name of the Slack channel or Slack chat you want to notify. Select **Add**. UUID-c49b6e0d-54b0-4a22-b56b-cebac987c23e Repeat the process as necessary and select **Save**. Set up Microsoft Teams group notifications [#set-up-microsoft-teams-group-notifications] Connect your Microsoft Teams account to Productsup to automatically receive error event notifications on the platform. You can set up notifications and assign them to specific groups for each monitoring event. You must have a Microsoft Teams account to set up notifications from the Productsup platform. See [Microsoft Teams](https://www.microsoft.com/en-us/microsoft-teams/group-chat-software) for an account. Go to **Monitor** in the main menu. Set up a new Microsoft Teams monitoring event or edit a pre-existing one. To add a connection to your Microsoft Teams channel, you must first select **Group Notifications** and perform the setup. Next, select **ADD GROUP**. Choose *Microsoft Teams* and select **Continue**. A pop-up window appears where you can enter your Microsoft Teams login credentials.You then advance to Microsoft Teams to decide which channels you want to set up for notifications. UUID-022843ab-4ae9-0651-643b-e0037b0b40dd Set up Microsoft Teams notifications [#set-up-microsoft-teams-notifications] Go to **Monitor** in the main menu. Create a new error event or edit a pre-existing one. To add a new group notification, select **Group Notifications**. Next, select **ADD GROUP**. Choose *Microsoft Teams* and select **Continue**. Select the **Choose a channel** drop-down list and find and select the channel name. UUID-d2b64bd7-75e2-cf66-f0d2-f880bb95c6f8 (Optional) Toggle the **Assign responsibilities** button to the **On** position. Assigning responsibilities lets you define which types of error event notifications your specified groups receive. Then choose the **Severity Level** for group notifications. Select **Continue**. To edit error event group notifications, choose the group error type on the overview page. Then select the settings button and choose **Edit**. Modify the settings and select **Save**. UUID-9b10b1f7-7953-3eed-07eb-4ddc02707de5 Set up notifications based on severity levels [#set-up-notifications-based-on-severity-levels] Severity levels let you assign a level of importance to specific error events. For notifications via email groups or Slack, you can include a severity level to the notification. In other words, email groups or Slack channels automatically receive error event notifications when they match the severity level you set. You can also use severity levels to moderate which target groups should receive specific notifications. Add a severity level to an email group, Slack, or Microsoft Teams channel [#add-a-severity-level-to-an-email-group-slack-or-microsoft-teams-channel] Go to **Monitor** in the main menu. Select the **Group Notifications**. Either add a new monitoring group or edit the pre-existing one. (Optional) Toggle the **Assign responsibilities** button to the **On** position. Assigning responsibilities lets you define which types of error event notifications your specified groups receive. Then choose the **Severity Level** for group notifications. Select **Add** to add the email group or Slack channel. Repeat the process as necessary and select **Save**. Now notifications are sent to the email group, Slack, or Microsoft Teams channel that you assigned a severity level. UUID-bcc1a3e0-9fe3-bc7d-315f-ea661b34cc0a Stop feeds from processing based on monitoring events [#stop-feeds-from-processing-based-on-monitoring-events] When you add an error event, such as being notified via email or Slack, you can also stop the site from processing runs. When turned on, your error event triggers this action. For example, if an import failure causes a significant drop in products, you probably want to avoid creating feeds with a large number of missing products. The platform stops processing runs when a run triggers an event. In other words, if you set an import monitoring event, the site does not process the intermediate or export stages. Set up a monitoring event to stop the processing of a site [#set-up-a-monitoring-event-to-stop-the-processing-of-a-site] Go to **Monitor** in the main menu. Set up a new monitoring event or edit a pre-existing one. See [Add/edit a monitoring event](#N1617274838955). Toggle the **Stop Processing** button to **On**. UUID-b2f33811-cb76-c8c3-53de-168ce75a2416 # Add monitor event - Unmapped Categories import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] In the platform, you can define which actions you want to occur for unmapped categories in your data feeds during a run. Set up the *Unmapped Categories* error event to perform any or a combination of the following: * Stop processing a run. * Receive an email notification. * Receive a Slack notification. Add Unmapped Categories error event [#add-unmapped-categories-error-event] To begin, you need to add the **Taxonomy Mapping** rule box to your site in Data View or Dataflow. Then in **Monitor**, choose the previously created list you want to trigger for an *Unmapped Categories* error event when a product category is unmapped. Go to Lists from your site's main menu and find an exiting or create a new list that contains the unmapped categories you want to monitor. UUID-7901c82b-c685-c19d-b99e-64b953c9a3b3 Add the **Taxonomy Mapping** rule box to your site in Data View or Dataflow. Go to **Monitor** and select **ADD ERROR EVENT**. UUID-da374d45-fe7b-c60f-6f7b-9cc575410bf6 Choose the **General** stage and select **Continue**. Select the event **Unmapped Categories** and select **Continue**. UUID-f8e9264e-698c-aa5d-240f-db863c379c87 You can only apply one (1) error event to each separate list. Choose the list that you want to apply the error event to and select **Continue**. Optionally, enter a percentage value in **Threshold** to trigger an error event. When exceeded, the threshold value initiates an error event notification. UUID-53edb0e7-201b-a566-6e1a-555e55a6b2b0 Select **Low**, **Medium**, or **High** in **Severity Level** to prioritize your desired error event. Select which action(s) you want to occur in case of an error event and select **Add**. If you select the **Send Email Notification** option, you will receive an email indicating the affected site and list name(s). You can now view the newly added monitoring event in **Monitor** from the **All** tab. Monitor only displays *Unmapped Categories* for the lists you added under the **Taxonomy Mapping** rule box in Data View or Dataflow. UUID-a3e510c8-31ce-3eb5-05e9-b1f1ef6a23ff # Add monitor events for failed file import import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Import file failed to download or is empty in the first main feed [#import-file-failed-to-download-or-is-empty-in-the-first-main-feed] Use the **Import file failed to download or is empty (first main feed)** error event if downloads of the feed from the main source were unsuccessful. An invalid URL, missing data, or an error during the file creation process could cause the import file failure. Add an error event in **Monitor** that notifies you of failed/empty files for import from the first main feed. Go to **Monitor** from your site-level menu and select **ADD ERROR EVENT**. Choose **Import Stage** and select **Continue**. Select the event **Import file failed to download or is empty (first main feed)** then, select **Continue**. UUID-44faff62-7137-31a9-7977-732a9d927d56 Enter a **Severity Level** that you have determined to be appropriate for the error event. Select which action(s) you want to occur in case of an error event and select **Add**. If you select the **Send Email Notification** option, you will receive an email indicating the affected site and list name(s). You can view the newly added monitoring event in **Monitor** on the **All** tab. Import failed for Data Source [#import-failed-for-data-source] Use the Import failed for Data Source error event to report a data source that’s unable to download a file(s) or contained no records. Add an error event in **Monitor** that notifies you of a data source that did not download/contained any files for import. Go to **Monitor** from your site-level menu and select **ADD ERROR EVENT**. Choose **Import Stage** and select **Continue**. Select the event **Import failed for Data Source**, then select **Continue**. UUID-d1a917ed-a20a-73fb-4af6-70500ef7d682 Enter a **Severity Level** that you have determined to be appropriate for the error event. Select the action(s) you want to occur in case of an error event and select **Add**. If you select the **Send Email Notification** option, you will receive an email indicating the affected site and list name(s). You can view the newly added monitoring event in **Monitor** on the **All** tab. Have questions? Contact [support@productsup.com](mailto:support@productsup.com). # Monitor events overview import { Callout } from "fumadocs-ui/components/callout"; Introduction [#introduction] The Monitor feature lets you check the data processing status at any stage. You can set up the error events conditions on which the platform stops the data processing and notifies you by email, Slack, or Microsoft Teams. This document provides an overview of different error events you can see and set up in Monitor. Prerequisites [#prerequisites] * Have the Administrators or Read-Write users access rights. * Ensure you have defined a unique item identifier in Data Sources. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. Set error events [#set-error-events] You can access **Monitor** at the site, project, or organization level. UUID-172af4d2-6fc9-c62d-470e-e1aad8c8f258 In **Monitor**, Productsup offers over 25 error event types within four (4) groups: . Import . Intermediate . Export . General Monitor error events in the import stage [#monitor-error-events-in-the-import-stage] You can monitor the data processing in the import stage. | Monitoring event | Description | | ------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Import failed for Data Source | A data source couldn't import products, or the import feed was empty and contained no records. | | Import file failed to download or is empty (first main feed) | The platform couldn't import the feed from your first main data source, or the feed contained no data. There could be an invalid URL or an error during the file creation. | | Item Identifier attribute disappeared | The attribute assigned as a unique item identifier in Data Sources has disappeared from the import feed. | | Mapped attribute has been removed from Data Sources | A mapped attribute has disappeared from a data source. This may indicate errors on the data source side caused by file creation processes. This can also mean an issue with appending an additional data source to your feed. | | New attribute added to Data Sources | A new attribute appeared in one of the data sources, or you set up a data source and added new attributes to the feed. | | Number of days without a change in Data Sources | The content of a data source hasn't changed within a specified number of days. This can indicate that the file updating process doesn't work or the URL is outdated. | | Number of import file download retries | This monitoring event shows the number of retries the platform performs to import a file if the previous import attempts failed. You can use this monitoring event if you know that the connection to a data source is unstable. | | Number of imported items decreased | The number of imported items has decreased compared to the last import. Big drops may indicate source file issues, such as a misconfiguration or an invalid syntax, which impacts the data import. | | Number of imported items increased | The number of imported items has increased compared to the last import. Significant increases may indicate source file issues, such as a misconfiguration or an invalid syntax, which impacts the data import. | | Number of Imports without a change in Data Sources | The contents of a data source haven't changed in a given number of runs. This may indicate that the file update process doesn't work or the URL is outdated. | Monitor error events in the intermediate stage [#monitor-error-events-in-the-intermediate-stage] You can monitor data processing in the intermediate stage. | Monitoring event | Description | | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Percentage of added items | A given percentage of new items appeared in the feed. These items weren't involved in the previous site run. | | Percentage of deleted items | A given percentage of items disappeared from the feed. These items were present in the feed after the previous site run. | | Percentage of modified items | A given percentage of items between the import and intermediate stages contains modified attributes as compared to the previous run. These modifications could come from the data source or through the changes with rule boxes applied in Dataflow and Data View. | Monitor error events in the export stage [#monitor-error-events-in-the-export-stage] You can monitor your data processing in the export stage. | Monitoring event | Description | | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Feed upload failed | The export failed. For example, if an export destination is unreachable or the credentials are wrong. | | Fewer items exported | The platform exported fewer items compared to the last run. This could be due to fewer items in the feed, skip rules, or ROI rules. | | More Products Exported | The platform exported more items compared to the last run. This could indicate adding more items to the feed or deactivating skip or ROI rules active in the previous run. | | Percentage of added items in a delta export | A given percentage of new items appeared in a delta export. These items weren't present in the feed during the previous run or didn't appear in the output due to skip rules. | | Percentage of deleted items in a delta export | A given percentage of items disappeared from a delta export. These items are no longer present in or skipped from the feed compared to the last run. | | Percentage of missing values in all mandatory attributes | A given percentage of items contained missing values in all mandatory attributes. These values were initially absent in the data source or disappeared from the output due to rule boxes applied in Dataflow or Data View. | | Percentage of missing values in all optional attributes | A given percentage of items in a delta export have changes in their attributes compared to the previous run. These modifications could come directly from your data source or through rule boxes applied in Data View or Dataflow. | | Percentage of modified items in a delta export | A given percentage of items in a delta export contains modified attributes absent in the previous run. These modifications could come from the intermediate stage, or you could add them with the rule boxes in Dataflow or Data View. | | Percentage of values in all mandatory attributes that failed a set Analyzer test | A given percentage of values in all mandatory attributes failed the Analyzer test in Data View. This applies to all columns that use such tests. | | Percentage of values in all optional attributes that failed a set Analyzer test | A given percentage of values in all optional attributes failed the Analyzer test in Data View. This applies to all columns that use such tests. | Some of the events can have a **Threshold (%)** field. For example, these are all the events on the intermediate level. These events only appear in the error log upon reaching the defined threshold. UUID-a0ba8f82-efd4-afed-7f9d-b05d98e63461 For exports, you can choose to monitor all export channels, specific export templates, or specific export channels: UUID-9295c6d8-f4de-fcd7-b03e-944ac3fe8b4f Monitor general platform events [#monitor-general-platform-events] You can monitor the entire data processing of a site from import to export. | Monitoring event | Description | | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Site run exceeds given number of hours | A site run exceeds a given time limit. For example, this could be due to applying new rule boxes in Dataflow or Data View or a slow speed while downloading data from a data source or uploading data to an export destination. The given number of hours equals the previous durations. Consider your previous run durations to set an adequate threshold. | | Unmapped Categories | Some of the lists in a given site have unmapped categories. | Example of using the monitoring event *Site run exceeds given number of hours*: You run your site once an hour, and the process typically takes 15 minutes. If the run takes longer than one hour, the platform fails to update your data in time and run your site according to your export schedule. To solve the problem, you can set up the event *Site run exceeds a given number of hours* to let the platform stop processing a delayed run and send you a notification or the error. Set up monitoring events at the site, project, or organization level [#set-up-monitoring-events-at-the-site-project-or-organization-level] You can set up monitoring events on different platform levels to apply the same settings to multiple sites or projects: * Set up monitoring on the organization level to apply settings across all projects and all sites in your organization. * Set up monitoring on the project level to apply settings across all sites in the project. * Set up monitoring on the site level to apply settings only to the relevant site. Priority of events at different levels [#priority-of-events-at-different-levels] If some of the monitoring event settings applied over your entire organization, project, site or export don't fit a certain project, site, or export, you can override them by adding a monitoring event on a lower level: * Site settings override project and organization settings. * Project settings override organization settings. * The same monitoring event added only for one specific export overrides the monitoring event set for all exports at the same site. For example, if you set the **Fewer items exported** event for all exports with a threshold of `30%` and the same event for the Google Merchant Center export with a threshold of `50%`, the site will only stop processing if the GMC export has 50% fewer items exported. UUID-34db207f-83c1-ad59-ffad-c45123ae1df7 If there are any event conflicts at different platform levels, the platform displays the priority monitoring event in white and all other overridden monitoring events in gray. For other sites in the project without a specialized event on the site level, you can only see the project monitoring events. UUID-7daec45e-258f-f17e-c693-c0a8bf85d4af # Export your data to Google Cloud Storage import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] All exports in Productsup have the option of sending data to Google Cloud Storage: * The destination *Google Cloud Storage* sends data to Google Cloud Storage using a regular Google account. * The destination *Google Cloud Storage (service account)* sends data to Google Cloud Storage using a Google service account. Prerequisites [#prerequisites] To set up the *Google Cloud Storage* destination in Productsup, you need: . A regular Google account. . A Google storage authentication in your Productsup organization.To add a Google storage authentication: Go to **Authentication** from the organization's, project's, or site's menu and select **ADD AUTHENTICATION**. In **Type**, select *Google Storage Authentication*, give it a desired name, and select **Next**. Select **Connect** for Productsup to redirect you to a Google account page where you can give Productsup access to your Google Cloud Storage. Once ready, Google redirects you back to Productsup. Close the confirmation window to proceed. . The name of the bucket where you want to send data. To set up the *Google Cloud Storage (service account)* destination in Productsup, you need: . A Google service account key in JSON. See [Create and delete service account keys](https://cloud.google.com/iam/docs/keys-create-delete). . The name of the bucket where you want to send data. Set up the destination Google Cloud Storage [#set-up-the-destination-google-cloud-storage] Choose the destination *Google Cloud Storage* if you use a regular Google account for data transfer between systems. Go to **Exports** from your site's main menu and select an export from the list to open the export setup page. If your site doesn't have the needed export yet, select **ADD EXPORT** to find and add an export. On the export setup page, select **Add Destination**, choose *Google Cloud Storage* from the drop-down list, give it a name, and then select **Save**. UUID-ad043f2a-bd59-5e41-8dbc-3f55bf705429 On the destination setup page, choose the needed Google storage authentication in **Authentication** if your organization, project, or site already has it. If not, add the needed authentication by selecting **Add New Authentication** as shown in [Prerequisites](#section-idm454171530072963422219036491). Then, choose the added authentication in the **Authentication** drop-down list on the destination setup page. UUID-dce0e263-5c30-fbf0-5a90-fce4d7db3e30 In **Bucket**, enter the name of the bucket where you want to send data.You can enter both static and dynamic bucket names in this field. See [Dynamic bucket and directory names](#section-idm460360552784963422726602192). If you want to send your data to a specific folder in your Google Cloud Storage bucket, provide the path to the desired folder in **Directory**. By default, the platform sends your data to the root folder.You can enter both static and dynamic folder names in this field. See [Dynamic bucket and directory names](#section-idm460360552784963422726602192). Toggle **Active** to *On* to activate the destination. Select **Save**. When your data is ready for export, select **Run** in the top-right corner of your page to let the platform import, process, and send your data to the destinations of all active exports in your site.If you want to run only the export where you added your Google storage destination, you should: Select **Import** to let the site import and process your data. Go to **Exports**, select the needed export, and choose **Export this export**. UUID-4dc3b8ea-8a3d-6707-9b32-68260c06e0df Once the site finishes the export, you can go to your Google storage bucket to check the uploaded data. If everything is as expected, you can let your export channel system start an import from the bucket. Set up the destination Google Cloud Storage (service account) [#set-up-the-destination-google-cloud-storage-service-account] Choose the destination *Google Cloud Storage (service account)* if you use a Google service account for data transfer between systems. Typically, service accounts are the preferred option for virtual machines and applications. Go to **Exports** from your site's main menu and select an export from the list to open the export setup page. If your site doesn't have the needed export yet, select **ADD EXPORT** to find and add an export. On the export setup page, select **Add Destination**, choose *Google Cloud Storage (service account)* from the drop-down list, give it a name, and then select **Save**. UUID-86b6e5ea-e1dc-a5ff-3153-e7590f7612eb On the destination setup page, provide your Google service account key in **Service Account Key**. It must be in JSON. UUID-5560c077-43db-a5b6-3233-4cfd32c6b636 In **Bucket**, enter the name of the bucket where you want to send data.You can enter both static and dynamic bucket names in this field. See [Dynamic bucket and directory names](#section-idm460360552784963422726602192). If you want to send your data to a specific folder in your Google Cloud Storage bucket, provide the path to the desired folder in **Directory**. By default, the platform sends your data to the root folder.You can enter both static and dynamic folder names in this field. See [Dynamic bucket and directory names](#section-idm460360552784963422726602192). Toggle **Active** to *On* to activate the destination. Select **Save**. When your data is ready for export, select **Run** in the top-right corner of your page to let the platform import, process, and send your data to the destinations of all active exports in your site.If you want to run only the export where you added your Google storage destination, you should: Select **Import** to let the site import and process your data. Go to **Exports**, select the needed export, and choose **Export this export**. UUID-4dc3b8ea-8a3d-6707-9b32-68260c06e0df Once the site finishes the export, you can go to your Google storage bucket to check the uploaded data. If everything is as expected, you can let your export channel system start an import from the bucket. Dynamic bucket and directory names [#dynamic-bucket-and-directory-names] In both Google Cloud Storage destinations, the fields **Bucket** and **Directory** support static and dynamic bucket or folder names. A dynamic bucket or folder name can use information like the name or ID of a site or export. For example, if you send data to multiple buckets from different locations in Productsup, the names of these buckets may correspond to the names of the sites or exports that send data to them. This is where you can use dynamic bucket or folder names in the destination setup. * `{{Site.name}}` uses the name of a site as a bucket or folder name. * `{{Site.id}}` uses the ID of a site as a bucket or folder name. * `{{Export.name}}` uses the name of an export as a bucket or folder name. * `{{Export.id}}` uses the ID of an export as a bucket or folder name. If the names of your sites or exports contain a forward slash `/`, and so do your folder names in Google Cloud Storage, you need to replace the forward slash in your Google Cloud Storage folder names with another symbol, such as `_`, because `/` indicates a new folder in the **Directory** field input. When you replace `/` with `_` or another symbol in your folder names, you need to add a replace filter to the **Directory** field input. For example, if you want to use a folder path that contains a folder with a site name and a folder with an export name where the site name folder now has `_` instead of `/`, the field input should be `{{Site.name| replace({ "/":"_" })}}/{{Export.name}}`. # Export your feed as an Email import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; The Email destination generates and hosts your feed, then issues an email to the assigned inbox with a URL link to the file. The issued email will resemble this example: UUID-6555be22-9140-e4e9-551a-0d62436b910f Prerequisites [#prerequisites] Fully configure an Export. See [Add export](/docs/help-center/export-data-feeds/add-export). Add and configure one of the supported destinations: . Productsup Server . SFTP/FTP/FTPS Server . Excel Macro Files (xlsm) . Image Exporter (FTP or SFTP) The Email destination picks up the file URL link directly from the other configured destination, and sends the email to the configured email address. This process doesn't work if the Email destination is the only one added to an export, or if the other destination is not one of the supported types. If you want to use an FTP server to share export output files with third parties via links in an email, make sure the email recipients have access to that FTP server. How to configure the Email destination [#how-to-configure-the-email-destination] The steps you need to take to set up the emails depend on the kind of data your export produces: * See [Configure the Email destination to export products and other data](#section-idm4584738277248033515670282627) if your export produces a variety of product data types. * See [Configure the Email destination to export images](#section-idm4560251483396833515669583895) if your export produces **image data only**. Configure the Email destination to export products and other data [#configure-the-email-destination-to-export-products-and-other-data] Follow these steps after you have completed the prerequisites: Go to **Exports** from your site's main menu and select the cogwheel icon (**⚙**) next to the desired export. Select **Add Destination** and choose the *Email* destination from the drop-down list, give it a name as desired, and select **Save**. UUID-1f3c6c5a-abab-d25e-c74c-4df4d5c4d808 On the destination setup page, enter the email addresses that should receive output file links in **Recipients**. If you need to enter multiple email addresses, separate them with a comma (`,`). For example, `email1@example.com,email2@example.com`. To add carbon copy and blind carbon copy recipients, you can enter their email addresses in **CC** and **BCC**. Separate the addresses with a comma (`,`) if necessary. If you have only one email in **Recipients** and add the same email in **BCC**, the destination fails. In **Subject**, enter the subject line of your email. You can use Twig to create dynamic subject lines. For example, `Productsup - {{ Export.name }}` is the default field value that adds the name of this destination's export to the subject line. See [Twig - The flexible, fast, and secure PHP template engine](https://twig.symfony.com/). In **Reply to**, add an address where your recipients can send a reply to the auto-generated email. Otherwise, they send it directly to [support@productsup.com](mailto:support@productsup.com). In **Custom Body Addition**, you can enter the text you want the platform to add to the email body. The platform adds this text at the bottom of the email above the signature. In **Time Format**, choose a time format the platform should use to add a timestamp to your email. Toggle the **Active** button to *On* to activate the destination. Select **Save**. Select **Run** or **Export** in the top-right corner of your view to let the site run the export. Configure the Email destination to export images [#configure-the-email-destination-to-export-images] Follow these steps after you have completed the prerequisites: Exporting images is only supported if you implemented the **Image Exporter** destination during the prerequisites. Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Image Exporter*, hover over this export, and select **Add**. UUID-d6a13169-e52d-0d4b-eeea-d676f745f185 On the Exports page, select the name of the added export to set it up. Select **Add Destination**, choose *Image Exporter (FTP or SFTP)* from the drop-down list, give it a name as desired, and select **Save**. UUID-c1c16a65-f725-f0ea-6140-a628f732b16b In the destination setup, enter your connection data in **FTP Hostname**, **FTP Username**, and **FTP Password**. The hostname should include a prefix, such as `ftp://your.example-hostname.com`. The hostname has to start with `ftp://` or `sftp://`. In **Base path**, you can enter a path to the server folder where you want to store the images. In **Concurrency**, you can enter how many images the export should simultaneously download and send to your server. The expected input format is a digit. If you have a lot of products in your site, the number in this field should not be high. In **Download Progress Notification Interval**, you can enter how many images the platform should send to the server before notifying you of the export's progress. The expected input format is a number. The destination sends your images to the server as separate image files. To let the destination send your images to the server in a *.zip* file, give that file a desired name in **Zipfile (optional)**. The platform uses the input you provide in this field and adds `_0001` as a postfix to create the full name of the *.zip* file. For example, the full name of your exported file can be *name-example\_0001.zip*. If you provide a desired name for your *.zip* file in step 9, you can also use the **Zip Size Limit** field to specify a maximum file size in bytes. The expected input format is a number. If the size of the *.zip* file with all your exported images exceeds this limit, the destination sends the images to the server in multiple *.zip* files. Each *.zip* file has its number specified in a postfix that the platform adds to its name. For example, if the platform splits all your images into three (3) files, their names can be *name-example\_0001.zip*, *name-example\_0002.zip*, and *name-example\_0003.zip*. If you enter `0` in this field, the destination sends all images to one *.zip* file on your server without restricting its size or amending its name with a postfix. Toggle the **Skip failures** button to *On* to let the destination ignore image download failures and export the rest of the images. Toggle the **Active** button to *On* to activate the destination. Select **Save**. Go to **Dataflow**, select **Image Exporter** in the drop-down menu on the left, and map all required attributes from import to export. Test the destination by selecting **Run** or **Export** in the top-right corner of your view to let the site run the export. The Image Exporter export sends only new and changed images to your destination. If your destination doesn't receive any images, you may have to change your image data, such as image links or names, to make images eligible for export. Configure the Email destination as described in steps 2-11 of [How to configure the Email destination](/docs/help-center/export-data-feeds/set-up-an-export-destination/export-your-feed-as-an-email#how-to-configure-the-email-destination). Troubleshooting: if you receive no email [#troubleshooting-if-you-receive-no-email] If you set everything up and run your export, but the recipients don't get an email, perform the diagnostic steps below: Open the Run log panel in the top-right corner of your view. If you see the notification *Destination Failed* highlighted in red, go to **Error Log** to check what destination failed during the last run: 1. If the Email destination failed, go to the settings of the affected export and check if: 1. The spelling of the added email addresses is correct. 2. The **Active** field is *On*. 3. The same email isn't both in **Recipients** and **BCC**. 2. If your main destination failed, such as FTP server or Image Exporter (FTP or SFTP), go to the setup page of the affected export and check the settings of the main destination, such as credentials or file paths. If there are no errors in the Run log, then check the site Error Log for errors. If no errors are found in either, then check your email Spam and Promotions folder. Check with your internal admin who manages your email service to evaluate if the email might have been blocked. If issues persist after exhausting these diagnostic steps, contact [support@productsup.com](mailto:support@productsup.com). The Image Exporter export sends only new and changed images to your destination. If your Image Exporter (FTP or SFTP) destination doesn't receive any images, you may have to change your image data, such as links or names, to make images eligible for export. For example, add a rule box to one of the image attributes. # Set up an export destination For all exports in the Productsup platform, you can choose a desired destination to send your data to. It makes sense to use some exports in combination with a specific destination. For example, you should use the export *TikTok Shop Product Export API Main (US)* with the destination *TikTok Shop Export Products*. You can find instructions on how to set up such export-specific destinations in the documents dedicated to the relevant exports. Other destinations are non-specific to exports. You can add and set them up for most exports in Productsup to let the platform send your export data to a desired location. This section of the help center explains how to set up these destinations. See [Find the most suitable export destination](/docs/help-center/best-practices/find-the-most-suitable-export-destination) for guidance on choosing the needed export destination. # Add the HTTP Post Request destination import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Most exports in Productsup can send data to the *HTTP Post Request* destination. This is a general API destination that can send data to a REST API endpoint. It isn't specific to any particular API. You can use the *HTTP Post Request* destination if your export channel system has a REST API endpoint that can import data. You can also use it to send your data to a WebDAV server, which can be an alternative to FTP. Prerequisites [#prerequisites] To set up the *HTTP Post Request* destination, you need to find the following details in the API documentation of your export channel system: . The host URL of the API with the needed endpoint for importing data. . The query that your API request should use. . The way the platform should push your product data to the API. . The name of the file attribute within the API request. . The product file extension that the API accepts.By default, Productsup generates CSV export files that contain your product data. If the API doesn't accept CSV files, you may need to go to the *Settings* tab on your export setup page and use the **Export-Plugin** or **Export as XML** fields to let the export generate a file with the needed extension. See [Add export](/docs/help-center/export-data-feeds/add-export#section-idm243459226017834) for more information and contact [support@productsup.com](mailto:support@productsup.com) if you need help. . The headers or any other information required within an API request. . The authentication method and the associated credentials: 1. If your API authenticates requests via an API key, get the needed key. 2. If your API authenticates requests via login credentials, get the needed username and password. 3. If your API can sync with Productsup via an SLS certificate, create an *SSL Certificate* authentication in **Authentication**. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems). Set up the HTTP Post Request destination [#set-up-the-http-post-request-destination] Setting up the *HTTP Post Request* destination is a technically advanced task. Contact [support@productsup.com](mailto:support@productsup.com) if you need help. Go to **Exports** from your site's main menu and select an export from the list to open the export setup page. If your site doesn't have the needed export yet, select **ADD EXPORT** to find and add an export. On the export setup page, select **Add Destination**, choose *HTTP Post Request* from the drop-down list, give it a name, and then select **Save**. UUID-3af128d5-b739-0283-43e8-ec707596375d On the destination setup page, enter your API address with the data import endpoint in **URL**. UUID-a995a286-bdab-f41a-644d-4ae0add30283 Toggle **Append filename to the URL** to *On* if your API requires the URL to feature the name of the file you want to upload. Select the needed query in **Method**: * `POST` * `PUT` In **Transfer**, choose how the platform should push data from your export file to the API: * *binary data body* pushes your export file as is, without form fields. * *multipart/form-data (Form Based)* pushes your export file as HTML, with form fields. * *form field content* pushes only the contents of your export file's form fields. In **File field name**, enter the name of the file attribute where the platform should state the export file name within the API request body. The default file attribute name is `file`. In **Headers, key - value delimited by ":"**, provide the names of the needed API request headers and their respective values as required by the API. Follow the pattern *key1:value1* and start each new key-value pair on a new line. In **Additional form fields, key - value delimited by ":"**, provide any other required parts of the API request and their respective values. Follow the pattern *key1:value1* and start each new key-value pair on a new line. If you need to authenticate with the API, use one of the following options: * Add your API key in **Headers, key - value delimited by ":"** following the pattern *Authentication:11111-11111-11111-1111-111111111*. The API documentation should specify the name of the authentication header. * Enter your login credentials in **Username (Optional)** and **Password (Optional)**. * Use the Authentication feature in Productsup to authenticate via an SSL certificate. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems).If your organization, project, or site already has the needed authentication added, you can choose it in the **Authentication** drop-down list. If you don't have the needed authentication in Productsup yet, you can create it by selecting **Add New Authentication**: In **Type**, select *SSL Certificate*. Give your authentication a desired name and select **Next**. In the window *SSL Certificate - Type: SSL Certificate*, enter your certificate type and provide the base64-encoded certificate. Enter a password if needed and then select **Save**. Select the newly created authentication in the **Authentication** drop-down list on the destination setup page. Toggle **Upload response contents** to *On* to let the platform receive feedback files from the API in case of export errors. This helps to troubleshoot the setup. You can find the uploaded feedback file at the bottom of the export setup page. The name of the feedback file is the same as your export file with `.response` at the end. Toggle **Active** to *On* to activate the destination. Select **Save**. When your data is ready for export, select **Run** in the top-right corner of your page to let the platform import, process, and send your data to the destinations of all active exports in your site.If you want to run only the export where you added your API destination, you should: Select **Import** to let the site import and process your data. Go to **Exports**, select the needed export, and choose **Export this export**. UUID-4dc3b8ea-8a3d-6707-9b32-68260c06e0df Once the site finishes the export, you can check if your export channel system imported the data as expected. Send data to a WebDAV server [#send-data-to-a-webdav-server] You can use the *HTTP Post Request* destination to send data to a WebDAV server. Take the steps outlined in the previous section with the following details in mind: . Toggle **Append filename to the URL** to *On*. . Choose `PUT` in **Method** and *binary data body* in **Transfer**. . Leave `file` in **File field name** and `Content-type: text/plain` in **Headers, key - value delimited by ":"**. # Add the Productsup Server destination import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The *Productsup Server* export destination is available for all exports in Productsup. This destination sends your data to a server hosted by Productsup and generates a link to that location. You can use this link in your export channel system to let it import your data via URL. The data you send to the *Productsup Server* destination isn't password-protected. It is accessible via the generated link without any login data. The *Productsup Server* destination keeps your historical files for 12 months since they were last requested. Your Productsup organization admin can contact [support@productsup.com](mailto:support@productsup.com) if your company needs to delete files from the Productsup Server. Send data to the Productsup Server destination [#send-data-to-the-productsup-server-destination] Go to **Exports** from your site's main menu and select an export from the list to open the export setup page. If your site doesn't have the needed export yet, select **ADD EXPORT** to find and add an export. On the export setup page, select **Add Destination**, choose *Productsup Server* from the drop-down list, give it a name, and then select **Save**.This generates a link for your export data: * When you first add the *Productsup Server* destination, you can find the generated link at the bottom of the export setup page both in the *Files* panel under **Link(s)** and in the *Filename* section.While the link remains red, it is just a placeholder, and the platform hasn't generated the actual file yet. If that is the case, you see the message: "*Red files have not yet been exported. Import & Export the Site to create the files.*" UUID-424f3c47-72da-d466-3a8f-187dfe7dc239 * After the first run of the *Productsup Server* destination, you can find the generated link in the *Filename* section only. The link turns black, so it is no longer a placeholder and the file already exists at this URL. When your data is ready for export, select **Run** in the top-right corner of your page to let the platform import, process, and send your data to the destinations of all active exports in your site.If you want to run only the export where you added the *Productsup Server* destination, you should: Select **Import** to let the site import and process your data. Go to **Exports**, select the needed export to open the export setup page, and choose **Export this export**. UUID-4dc3b8ea-8a3d-6707-9b32-68260c06e0df You can also run only one export from the main page in Exports: 1. Hover over the needed export and select **Export** at the end of its row. UUID-fcbe570f-39e5-d570-c168-60f9e59b3122 Once the site finishes the export, you can copy the Productsup Server link in the *Filename* section on the export setup page. Then, paste it into your desired export channel system to let it import your data. # Add the Amazon S3 destination import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] All exports in Productsup have the option of sending data to Amazon S3 using the destination *Amazon S3*. Using this destination, you can export your data to an object storage for analysis, backup, archiving, or other purposes. Prerequisites [#prerequisites] To set up the destination *Amazon S3*, you need: . The region of the Amazon S3 account where you need to send data. . The name of the bucket where you need to send data. . Authorization data for the needed Amazon S3 bucket, such as an access key ID and a secret access key. See [Managing access keys for IAM users](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html). Set up the destination Amazon S3 [#set-up-the-destination-amazon-s3] Go to **Exports** from your site's main menu and select an export from the list to open the export setup page. If your site doesn't have the needed export yet, select **ADD EXPORT** to find and add an export. On the export setup page, select **Add Destination**, choose *Amazon S3* from the drop-down list, give it a name, and then select **Save**. UUID-0bedeb48-c105-91d9-3956-e62cbba09a9d To let Productsup authenticate in the needed Amazon S3 account, provide your authorization data in **Access Key ID** and **Secret Access Key**. UUID-7200cfc0-51ab-9cb2-dacf-48b86794cdce In **Region**, choose the location of your Amazon S3 account. In **Bucket**, enter the name of the bucket where you want to send data. If you want to send your data to a specific folder in your Amazon S3 bucket, provide the path to the desired folder in **Base Path**. By default, the platform sends your data to the root folder. Toggle **Active** to *On* to activate the destination. Select **Save**. When your data is ready for export, select **Run** in the top-right corner of your page to let the platform import, process, and send your data to the destinations of all active exports in your site.If you want to run only the export where you added your Amazon S3 destination, you should: Select **Import** to let the site import and process your data. Go to **Exports**, select the needed export, and choose **Export this export**. UUID-4dc3b8ea-8a3d-6707-9b32-68260c06e0df Once the site finishes the export, you can go to your Amazon S3 bucket to check the uploaded data. If everything is as expected, you can let your export channel system start an import from the bucket. # Export your data to an FTP, SFTP, or FTPS server import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Most exports in Productsup can send data to FTP, SFTP, and FTPS servers, via the flexible *SFTP/FTP/FTPS Server* destination: * FTP (File Transfer Protocol) is a standard communication protocol for transferring and exchanging files between a server and a client. FTP often uses plain-text authentication via standard login data, such as username and password. If configured so, FTP can enable users to connect to servers anonymously. * SFTP (SSH File Transfer Protocol) is a data transfer protocol for exchanging data between a server and a client that uses a secure channel, such as SSH, and is accessible to authenticated users only. * FTPS (File Transfer Protocol Secure or File Transfer Protocol SSL) is an extension of the standard FTP that supports Transport Layer Security (TLS). When using FTPS, a client and a server establish a traditional FTP connection and then use port 21 to establish an additional SSL connection before authenticating users or transferring data. * FTPS Implicit is an older method of securing FTP connections that uses port 990 to establish an SSL connection between a server and a client before authenticating users or transferring data. Reference channel or third-party service documentation to determine the correct server type. If you need additional support evaluating the correct server type and configuration of the destination, contact [support@productsup.com](mailto:support@productsup.com). The *SFTP/FTP/FTPS Server* destination doesn't support the inclusion of basic auth within FTP, SFTP, or FTPS URLs. For example `ftp://[user[:password]@]host[:port]/[url-path]`. Instead, each destination contains individual fields for the **URL Host**, **Directory**, **Username**, and **Password**. Prerequisites [#prerequisites] Obtain the login credentials for the target server before you begin: . If the target export channel requires uploads to a specific server, get the host and user credentials specific to that server. . If the export channel permits the use of third-party FTP servers, you can use an FTP server provided and hosted by Productsup. Go to **FTP Accounts** from your organization's main menu to create an FTP server and set up its credentials. See [Create an FTP server hosted by Productsup](/docs/help-center/get-started/create-and-manage-an-ftp-server/create-an-ftp-server-hosted-by-productsup) for more details. UUID-20ab6434-d7eb-372e-f91a-8578492c910f The FTP Accounts feature is available to admin users only. You may need to contact your organization's admin to create a new FTP server or get the credentials of an existing one. Set up the SFTP/FTP/FTPS Server destination [#set-up-the-sftpftpftps-server-destination] Go to **Exports** from your site's main menu and select an export from the list to open the export setup page. If your site doesn't have the needed export yet, select **ADD EXPORT** to find and add an export. On the export setup page, select **Add Destination**, choose *SFTP/FTP/FTPS Server* from the drop-down list, give it a name, and then select **Save**. UUID-4fafa0d2-5d3a-49c6-a56f-963799e6880b On the destination setup page, select the needed server protocol in **Protocol**. The available options are: * FTP * FTPS * SFTP * FTPS Implicit Provide your server host in **Host**. Leave out prefixes, such as `ftp://`, `sftp://`, or `ftps://`. In **Port**, enter the number of the port that the platform should use to establish a connection with your server. If you leave this blank, the platform uses the default port of the chosen protocol. For example, port `22` for SFTP connections and port `21` for FTP connections. Enter your server credentials in **Username** and **Password**. Or provide your base64-encoded private SSH key in **SSH Key must be (PEM format, RSA, ECDSA, or Ed25519, blank passphrase)** instead of the password. If you want to send your data to a specific folder on your server, provide the path to the desired folder in **Directory**. By default, the platform sends your data to the root folder. Toggle the **Passive Mode** button to choose the desired type of server connection. If you turn this option *On*, the platform uses the passive mode for data transfer letting the client connect to the server, which is more suitable for scenarios featuring a firewall. If you leave this option *Off*, the platform uses the active mode letting the server connect to the client. Define the platform's behavior in case of server failure or inactivity: 1. In **Timeout**, enter the number of seconds the platform should wait before considering a request failed due to server inactivity. By default, the platform waits for `300` seconds. 2. In **Max Retries on Failure**, enter the number of new attempts the platform should automatically make in case of request failure. By default, the platform retries sending data `3` times. If you want the platform to add an empty *.fin* file to your server every time it successfully finishes uploading data to the server, toggle **Enable fin file** to *On* and provide the desired name and extension for this file in **Fin File Name** and **Fin File Extension**. If you don't want the platform to create such a file on your server, leave **Enable fin file** off. If you provide a desired name and extension for the *.fin* file, the full name of the file uses the pattern *\{provided-name}.\{provided-extension}*. When a new data upload starts, the platform automatically deletes the old *.fin* file. The default input in **Fin File Name** is `{{ file_name }}`. The default input in **Fin File Extension** is `fin`. This makes the default full name of the file `{export-file-name-without-extension}.fin`. You can find your export file name at the bottom of the export setup page. If you enter `{{ base_file_name }}` in **Fin File Name** and keep `fin` as the extension, the full name of the file is `{export-file-name-with-extension}.fin`. Toggle **Enable ssh dss/rsa host key algorithms** to *On* if your SFTP server uses the deprecated [SSH-RSA](https://www.openssh.com/txt/release-8.8) or [SSH-DSS](https://www.openssh.com/txt/release-7.0) host key algorithms. Use this option only if the Productsup support team suggests it. Toggle **Enable ssh rsa pubkey algorithm** to *On* if you want to use more modern signature algorithms for public key authentication. This option defines the accepted algorithms for your public key to prove its identity to the server and replaces older, less secure options like SSH-RSA (RSA with SHA-1) with more modern algorithms, such as `ssh-ed25519` and `rsa-sha2-256` or `rsa-sha2-512`. Toggle **Enable ssh diffie-hellman-group14-sha1 key exchange algorithm** to *On* if your SFTP server uses `diffie-hellman-group14-sha1`, an outdated key exchange method used for establishing a secure connection. Use this option only if the Productsup support team suggests it. In **SSH cipher**, enter the encryption algorithm used for data transfer. Use this field only if your server requires you to explicitly specify the cipher algorithm. In **Override remote file name**, provide the desired name for your export file if you want this destination to produce an export file with a name that differs from the one specified on the export setup page. Toggle **Active** to *On* to activate the destination. Select **Save**. When your data is ready for export, select **Run** in the top-right corner of your page to let the platform import, process, and send your data to the destinations of all active exports in your site. To run only the export where you added your destination: Select **Import** to let the site import and process your data. Go to **Exports**, select the needed export, and choose **Export this export**. UUID-4dc3b8ea-8a3d-6707-9b32-68260c06e0df Once the site finishes the export, you can use a desktop app like [Cyberduck](https://cyberduck.io/) or [FileZilla](https://filezilla-project.org/) to log into your server and check the uploaded files. If everything is as expected, you can let your channel start an import from the server. # Set up a bucket destination import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Productsup lets you store your export data in a bucket on the Productsup server. You can choose from a list of buckets you previously set up or establish a new bucket destination in Exports. All data feeds set to use the same bucket must have the same structure. Set up a bucket destination in Exports [#set-up-a-bucket-destination-in-exports] Go to **Exports** from your site's main menu and choose your single-merchant site export. Go to step [4](#listitem-idm11655379799814) if you have already set up your export. To add an export, select **ADD EXPORT** and search for your export. Next, select **Add**. Select **Add** again to confirm it as an export. Give your export a custom name if desired, then select **Add**. On the Exports page, select the name of the added export to set it up. Select **Add Destination** and choose *Export to Data Source* from the dropdown. Give it a name as desired, and select **Save**. UUID-2fb635d3-c45e-1008-7f51-83d4c49daba0 On the destination setup page, add a unique bucket name in **Bucket**. You can't choose an already-created bucket in this field. If you want to send your data to an existing bucket, you must manually enter the existing bucket name. The field is case-sensitive. By default, the destination doesn't export skipped items. To include skipped items in the export, toggle **Allow skipped rows** to *On*. By default, the destination includes platform-generated attributes, for example, created by a data service, into the export and sends them to the bucket. This allows you to use these attributes in other sites without needing to apply the same data services or other features again. If you don't want to export these attributes to the bucket, toggle **Remove Passthru Columns** to *On*. By default, the destination sends empty attributes to the bucket. To avoid sending empty attributes to the bucket, toggle **Remove Empty Columns** to *On*. By default, the destination sends the export output file to the bucket regardless of whether it contains any data. To avoid exporting files without data, toggle **Prevent Empty Upload** to *On*. Toggle **Active** to *On* to activate the destination. UUID-76ed4569-1b97-1e54-bea5-a23ec05fb0e5 Select **Save**. Select **Export this export** in the top-right corner of the page to send your data to the destination. Alternatively, the platform exports the data during the next scheduled run. *Export to Data Source* is a destination and not a file format. As a result, you can't edit file settings, such as file name, item limit, sorting actions, or item count. # Add the Microsoft Azure Blob Storage destination import { Step, Steps } from "fumadocs-ui/components/steps"; All exports in Productsup have the option of sending data to Microsoft Azure Blob Storage using the destination *Microsoft Azure Blob Storage*. Using this destination, you can export your data to a data lake for analysis or backup. Prerequisites [#prerequisites] To set up the destination *Microsoft Azure Blob Storage*, you need: . The name of the Microsoft Azure Blob Storage account where you need to send data. . The storage account key to let Productsup authenticate in the needed Azure storage account. See [Authorize with Shared Key](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key). . The name of the container in the relevant storage account. Set up the destination Microsoft Azure Blob Storage [#set-up-the-destination-microsoft-azure-blob-storage] Go to **Exports** from your site's main menu and select an export from the list to open the export setup page. If your site doesn't have the needed export yet, select **ADD EXPORT** to find and add an export. On the export setup page, select **Add Destination**, choose *Microsoft Azure Blob Storage* from the drop-down list, give it a name, and then select **Save**. UUID-ed4100f1-15be-bfd8-ce32-a1c6edfdbae6 In **Authentication Type**, select *Access Key* or *SAS Token*: * If you selected *Access Key*, enter your Microsoft Azure Blob Storage account information in **Storage account name** and **Access key**. * If you selected *SAS Token*, enter your shared access signature in **SAS Token** and **SAS Blob Endpoint**. UUID-abc5c828-6e3b-3379-dd64-9bc6b899f98c In **Container**, enter the full URL to the hosted file. Optionally, in **Bath Path**, define a filepath and create new subfolders. Toggle **Active** to *On* to activate the destination. Select **Save**. When your data is ready for export, select **Run** in the top-right corner of your page to let the platform import, process, and send your data to the destinations of all active exports in your site.If you want to run only the export where you added your Azure storage destination, you should: Select **Import** to let the site import and process your data. Go to **Exports**, select the needed export, and choose **Export this export**. UUID-4dc3b8ea-8a3d-6707-9b32-68260c06e0df Once the site finishes the export, you can go to your Azure container to check the uploaded data. If everything is as expected, you can let your export channel system start an import from the container. # Add a BigQuery destination import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] BigQuery is part of the Google Cloud Platform. It is a data warehouse service that Google Cloud clients can use to store, organize, and analyze data. You can send data to BigQuery from a Productsup site by adding a BigQuery destination to an export. Prerequisites [#prerequisites] * You have set up at least one export in your Productsup site. If you haven't already done this, see [Add export](/docs/help-center/export-data-feeds/add-export). * You can select *GCP BigQuery Export* as a destination on the setup page of the export containing the data you want to send to BigQuery. If it doesn't appear as an option, contact [support@productsup.com](mailto:support@productsup.com) for assistance. * Before exporting data from Productsup, go to BigQuery and set it up to ensure it accepts external tables formatted following the Productsup scheme. Add a BigQuery destination [#add-a-bigquery-destination] Adding a BigQuery destination to an existing export channel lets you send product data to BigQuery. You can add a BigQuery destination as follows: Go to **Exports** from your site's main menu and select the name of the needed export to open its setup page. On the export setup page, select **Add Destination**. UUID-66697a18-d4d3-aaf6-aae5-6397c43e4e3b Select *GCP BigQuery Export* from the **Destination** drop-down menu. Select **Save**. Set up the BigQuery export destination [#set-up-the-bigquery-export-destination] After adding a BigQuery destination, you need to set it up. For data to transfer to BigQuery successfully, set up the destination as follows: Select **Google Cloud Platform: BigQuery** in the **Authentication** drop-down menu. Enter your BigQuery credentials in the following input fields: * **Project ID** - This input field refers to the unique ID associated with each BigQuery project. * **Dataset** - In this input field, enter the specific data set you wish to target in your BigQuery project. * **Table** - Specify the table in your BigQuery data set where you want to export your Productsup data. UUID-87c4c799-c693-d4ca-fe59-a516f97f4ccf Select **Save**. Your setup is now ready. The platform sends your data to BigQuery during the following manual or scheduled site run. # LLM.txt import { Callout } from "fumadocs-ui/components/callout"; import { Steps, Step } from "fumadocs-ui/components/steps"; Overview [#overview] Productsup enables you to source data from your product data feed and output two key elements required for llm.txt: . An llm.txt file for your web development team to embed on your website. . A JSON file hosted by Productsup, accessible only to OpenAI IP addresses. llm.txt is a temporary method that allows LLMs to crawl or scrape data from your website. It will be replaced as the industry adopts designated agentic commerce feed formats. Until then, it is a practical way to ensure your product data is available to AI agents that search your website directly. Steps in Productsup [#steps-in-productsup] Add the *OpenAI* export. Add the *OpenAI (llm.txt)* destination. Configure the Dataflow. There is no required or standard schema for the product data included in the file. Connect the columns that contain the data your organization wants available for AI agents. When configuration is complete, process the site. Two events occur: * Productsup generates the LLM.txt template, embedded in the export page. * Productsup sends the product data to OpenAI private IP endpoints. Steps for your web development team [#steps-for-your-web-development-team] Retrieve the LLM.txt template from the export page and provide it to your web development team to embed on your website. Your web development team can find more details in the [primary llm.txt documentation](https://llmstxt.org/). # OpenAI Product Feed import { Callout } from "fumadocs-ui/components/callout"; import { Steps, Step } from "fumadocs-ui/components/steps"; Overview [#overview] *OpenAI Product Feed New* enables you to make products discoverable inside ChatGPT. OpenAI has sunset the API method for main product feed onboarding until at least late 2026. OpenAI's future plans include using the API for frequent updates, such as price and availability changes. Until OpenAI releases these updates, it supports an SFTP-based approach. Productsup customers should migrate any pre-existing *OpenAI API - Product Feed* export to the *OpenAI Product Feed New* export. Prerequisites in OpenAI [#prerequisites-in-openai] [Register with OpenAI](https://developers.openai.com/commerce/guides/get-started) to obtain SFTP credentials. Steps in Productsup [#steps-in-productsup] Add the *OpenAI Product Feed New* export. Add the *SFTP/FTP/FTPS Server* destination. Configure the following fields: * **Protocol:** *SFTP* * **Host:** *determined by your OpenAI SFTP* * **Port:** *determined by your OpenAI SFTP* — defaults to `22` in most cases. * **Username:** *determined by your OpenAI SFTP* * **Password:** *determined by your OpenAI SFTP* OpenAI accepts .csv file extension, which is Productsup's default. However, you must contact your OpenAI representative for pre-approval before submitting your feed in this format. Configure the Dataflow. See the [OpenAI product data specification](https://developers.openai.com/commerce/specs/file-upload/products?version=currently-stable) for column requirements. # Agentic Commerce (AI) Exports import { Callout } from "fumadocs-ui/components/callout"; Overview [#overview] As search behavior shifts from traditional keyword queries to AI-driven conversations, Productsup supports Answer Engine Optimisation (AEO) — ensuring product data is structured for AI agents (ChatGPT, Perplexity, Copilot, Gemini) to interpret and recommend products with high confidence. The field of agentic commerce moves fast. If you have questions about channels and methods not covered in the current docs, contact your Productsup representative. Supported AI exports [#supported-ai-exports] | | Objective | Technical summary | | :------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------- | :---------------------------------------------------------------------- | | [**Google UCP**](/docs/help-center/export-data-feeds/agentic-commerce-ai-exports/google-ucp) | Support for Native Checkout experiences | Submission of required attributes via main or supplemental Google feeds | | [**OpenAI Product Feed**](/docs/help-center/export-data-feeds/agentic-commerce-ai-exports/openai-product-feed) | Direct high-scale catalog ingestion (new standard) | Direct delivery to OpenAI SFTP using Parquet or compressed formats | | [**LLM.txt**](/docs/help-center/export-data-feeds/agentic-commerce-ai-exports/llm-txt) | Organic discovery and web scraping guidance | Flat file generated by Productsup and hosted on client root domain | | [**Perplexity**](/docs/help-center/export-data-feeds/agentic-commerce-ai-exports/perplexity) | Out-of-the-box solution for North American retailers | Direct SFTP delivery using Perplexity-provided credentials | # Google Conversational Attributes import { Callout } from "fumadocs-ui/components/callout"; import { Steps, Step } from "fumadocs-ui/components/steps"; AI-driven shopping is changing how buyers find and evaluate products — through AI Mode in Search, conversational agents, and other AI-powered surfaces. To help these systems represent your products accurately, Google Merchant Center supports a set of **conversational attributes**. These attributes let you submit richer, more nuanced product information than a standard feed allows: answers to the questions buyers actually ask, links to related products and accessories, and detailed variant options such as size, color, and fit. Feeding this context to Google helps AI systems and conversational agents understand your products the way a well-briefed salesperson would, so buyers find the right product faster — whether they're browsing traditional search results or asking an AI assistant a question. This feature is built for Productsup clients who already export a product feed to Google Merchant Center and want to enrich that feed with conversational depth, without touching or risking the integrity of their core product data. Because this export complements your existing Google Merchant Center feed rather than replacing it, it's available at no additional cost. Available conversational attributes include: | Attribute | What it's for | Example | | :-------------------------------------------- | :-------------------------------------------------------------------------- | :--------------------------------------------------------------------------------- | | **Question and answer** `question_and_answer` | Product-specific FAQs — the questions buyers actually ask, and your answers | *"Does it have a headphone jack?" → "This version doesn't have a headphone jack."* | | **Document link** `document_link` | Links to related PDFs, such as manuals or assembly instructions | `https://example.com/manual.pdf` | | **Related product** `related_product` | Cross-sells, accessories, or required parts, linked by identifier | `accessory:gtin:811571013579` | | **Item group title** `item_group_title` | A shared title for a product with multiple variants | *"Google Pixel 9"* | | **Variant option** `variant_option` | The specific properties that distinguish one variant from another | *"display:XL,memory:512GB,color:moonstone"* | | **Popularity rank** `popularity_rank` | How a product ranks in popularity as a percentage of your inventory | `95.5` | This data is sent to Google Merchant Center to enrich your main product feed. Before setting up conversational attributes, make sure your primary product feed is already flowing into GMC through one of the supported Productsup export options. Prerequisites [#prerequisites] Google recommends submitting conversational data as a supplemental data source, layered on top of your existing primary feed, rather than folding it into the primary feed itself. Keeping these attributes in a separate feed also makes the setup easier to manage and reduces the risk of formatting issues affecting your primary feed — particularly for complex attributes such as `question_and_answer`, where quotation marks can be misinterpreted during import. Before setting up the export in Productsup, prepare a supplemental data source in Google Merchant Center: In your [Merchant Center account](https://merchants.google.com/), go to **Settings** → **Data sources**. Select the **Supplemental sources** tab, then **Add supplemental product data**. The **Supplemental sources** tab only appears once the **Advanced data source management** add-on is enabled on your account. Choose your source type (file, Google Sheets template, or API), and enter: * **File name** — must exactly match the file you submit, including its extension. * **Product ID** — ties your supplemental data back to the matching product in your primary feed. * **Data source label** — a name to help you identify this data in Ads campaigns. * **Language** — the language your product data is written in. Link the new supplemental source to the primary data source it should enrich. See Google's guide to [creating a supplemental data source](https://support.google.com/merchants/answer/14990942?hl=en\&ref_topic=12672304#supplementaldatasource) for full details, and the [conversational attributes reference](https://support.google.com/merchants/answer/17085370?hl=en) for how each attribute works and how to format its values. Add the Google Merchant Center Conversational Attributes export [#add-the-google-merchant-center-conversational-attributes-export] Go to **Exports** in your site's main menu and select **Add export**. Search for **Google Merchant Center Conversational Attributes**, hover over it, and select **Add**. Search results showing the Google Merchant Center Conversational Attributes export Set the recommended file settings for this export: file format `.tsv`, separator `\t` (TAB), and CSV enclosure disabled. While `.tsv` is the recommended format, CSV and XML are also supported if they better fit your existing setup. File format setting set to .tsv Separator set to TAB with CSV enclosure disabled These settings avoid formatting issues with structured attributes such as `question_and_answer`, where quotation marks combined with CSV enclosure can cause the data to be parsed incorrectly. Select the newly added **Google Merchant Center Conversational Attributes** export, then select **Add Destination**. Choose one of two ways to deliver conversational data to GMC, matching how your supplemental data source is configured: * **Productsup Server** — hosts the generated file on Productsup's servers. Provide the file's URL as the source when configuring the supplemental data source in GMC, or upload it manually. See Google's guide on [uploading products to Merchant Center](https://support.google.com/merchants/answer/11586438?sjid=2884237056074078383-EU) for how GMC consumes a hosted file. * **SFTP/FTP/FTPS** — use the credentials Google provides when you set up the supplemental feed data source in GMC. See [Choose how you want to send data to GMC](/docs/help-center/export-data-feeds/add-export/add-google-merchant-center-export#choose-how-you-want-to-send-data-to-gmc) for the full walkthrough of both destination options. Go to **Dataflow** to locate the conversational attributes available for Google Merchant Center, and map them from import to export. This export provides separate fields for each supported attribute. Structured attributes — `question_and_answer`, `document_link`, `related_product`, and `variant_option` — provide multiple numbered fields, for example `variant_option[1].name` and `variant_option[2].name`. Map the raw values from your product data into the corresponding fields; the platform combines them into the structure Google requires when the export runs. If your source data is already formatted the way Google expects it, you can map that pre-formatted value directly to the attribute instead — the platform uses it ahead of any numbered fields you've also mapped. See [Map each conversational attribute](#map-each-conversational-attribute) for details on every field. Go to **Data View** to review the mapped data before the export runs. See [Before exporting](#before-exporting) for what to check. Map each conversational attribute [#map-each-conversational-attribute] The numbered fields on structured attributes also let you use rules to decide which information populates each field, depending on the data available for each product. Already have a value formatted the way Google expects? Map it directly to the attribute instead of splitting it into numbered fields — the platform prioritizes it over any numbered fields you've also mapped. Product ID [#product-id] The `id` field is required for this export. Map exactly the same product ID that your primary feed sends to Google Merchant Center. Google matches conversational data to existing products by ID — if the identifiers don't align, your enrichment data doesn't attach to the right products and the update has no effect. Also map `item_group_id` when it's available, even if it's already included in your primary feed. Question and answer [#question-and-answer] `question_and_answer` provides product-specific questions and answers. This export supports up to 30 pairs per product, with separate fields for each pair: * `question_and_answer[1].question` / `question_and_answer[1].answer` * `question_and_answer[2].question` / `question_and_answer[2].answer` * up to `question_and_answer[30]` Map the raw question and the raw answer into the corresponding fields — for example: | Field | Example value | | :-------------------------------- | :------------------------------------------ | | `question_and_answer[1].question` | Does it have a headphone jack? | | `question_and_answer[1].answer` | This version doesn't have a headphone jack. | There's no need to add quotation marks or build Google's final syntax manually — the platform applies the required formatting during export. Document link [#document-link] `document_link` provides links to product-related documents, such as manuals, user guides, or assembly instructions. This export supports up to 5 links per product: * `document_link[1]` * `document_link[2]` * up to `document_link[5]` Map each document URL into the corresponding field — for example, `document_link[1]` → `https://example.com/product-manual.pdf`. The platform builds the required output structure during export. Item group title [#item-group-title] `item_group_title` provides a shared title for products that belong to the same variant group. Describe the general product without variant-specific details such as size or color. | Field | Example value | | :----------------- | :-------------------------------------- | | Product title | Organic Cotton T-Shirt – Black – Size M | | `item_group_title` | Organic Cotton T-Shirt | `item_group_title` requires an `item_group_id` on the product. Make sure the corresponding item group ID is available and mapped. Popularity rank [#popularity-rank] `popularity_rank` indicates a product's relative popularity, expressed as a value between `0.0` and `100.0`. Map your calculated value directly into `popularity_rank` — no additional formatting is required. Define the ranking logic based on your own business data, and apply a consistent methodology across your assortment so values stay comparable. Related product [#related-product] `related_product` links the current product to related products — cross-sells, accessories, or required parts. This export supports up to 30 related products, each defined by three fields: | Field | Description | | :------------------------------------- | :-------------------------------------------------------------------------------- | | `related_product[1].identifier` | The identifier of the related product, matching the type set in `identifier_type` | | `related_product[1].identifier_type` | The type of identifier provided | | `related_product[1].relationship_type` | How the two products are related | `identifier_type` accepts: | Value | Description | | :----- | :------------------------------------------------- | | `id` | The product ID from your product data source | | `gtin` | The product's GTIN, such as UPC, EAN, JAN, or ISBN | `relationship_type` accepts: | Value | Description | | :------------------ | :---------------------------------------------------- | | `part_of_set` | Part of the same set or product line | | `required_part` | Required for the product to function | | `often_bought_with` | Commonly purchased together | | `substitute` | An alternative to the current product | | `different_brand` | The same or an equivalent product under another brand | | `accessory` | An accessory for the current product | For example: | Field | Example value | | :------------------------------------- | :------------ | | `related_product[1].identifier` | CASE123 | | `related_product[1].identifier_type` | `id` | | `related_product[1].relationship_type` | `accessory` | Use the next numbered fields for additional related products, up to 30, each with its own complete set of values. Map only the raw values — the platform combines them into the format Google requires during export. Variant option [#variant-option] `variant_option` captures the specific information that distinguishes one product variant from another within the same item group. Which attributes qualify depends on your product data and how the products sharing an `item_group_id` differ — for clothing, that might be size, color, material, or fit. This export supports up to 30 variant options, each with a separate name and value field: * `variant_option[1].name` / `variant_option[1].value` * `variant_option[2].name` / `variant_option[2].value` * up to `variant_option[30]` Map only the raw name and value — the platform generates Google's required `variant_option` structure during export. Example: map variant options with rules [#example-map-variant-options-with-rules] Suppose products in the same item group vary by size and color. For `variant_option[1].name`, create a rule: if `size` has a value, set the value to *Size*. Rule setting variant_option[1].name to the value Size For `variant_option[1].value`, create a rule: if `size` has a value, take the value from the `size` attribute. Rule setting variant_option[1].value from the size attribute For `variant_option[2].name`, create a rule: if `color` has a value, set the value to *Color*. Rule setting variant_option[2].name to the value Color For `variant_option[2].value`, create a rule: if `color` has a value, take the value from the `color` attribute. Rule setting variant_option[2].value from the color attribute This produces, for example: | Field | Example value | | :------------------------ | :------------ | | `variant_option[1].name` | Size | | `variant_option[1].value` | M | | `variant_option[2].name` | Color | | `variant_option[2].value` | Black | Continue the same pattern for additional variant options. Rules are also useful for excluding attributes that don't actually distinguish the variants. For example, if every product in an item group shares the same size, size isn't a distinguishing attribute for that group — create a rule to leave the corresponding variant option empty in that case. The key is to look at the products sharing an `item_group_id` and identify which attributes genuinely distinguish them from each other. Before exporting [#before-exporting] Before you export the feed, review the mapped attributes in Data View and confirm: * `id` exactly matches the ID used in your main Google Merchant Center feed. * `item_group_id` is provided wherever relevant. * Question and answer values are mapped without manually added formatting. * All required fields are populated for each related product. * For `related_product` and `variant_option`, make sure every sub-field in a numbered entry is mapped — a partially filled entry (for example, an identifier without its `identifier_type`, or a name without its value) is dropped from the export entirely. * Variant options represent attributes that actually distinguish products within the same item group. * Variant option names and values use matching numbered positions. * Irrelevant variant information is left empty. * The export uses the recommended `.tsv` file format, TAB separator, and disabled CSV enclosure. Expected export output [#expected-export-output] When the export runs, the platform combines the individual fields into the structure Google Merchant Center expects for the supplemental feed. For example, a product might produce the following output: | Attribute | Example exported value | | :-------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | | `id` | TSHIRT123-BLK-M | | `item_group_id` | TSHIRT123 | | `item_group_title` | Organic Cotton T-Shirt | | `popularity_rank` | 92.5 | | `document_link` | `https://example.com/product-guide.pdf`, `https://example.com/care-instructions.pdf` | | `question_and_answer` | "Is this product waterproof?":"Yes, this product is waterproof.", "Does it have a headphone jack?":"No, this version doesn't have a headphone jack." | | `related_product` | accessory:id:CASE123, often\_bought\_with:id:BAG456 | | `variant_option` | Size:M, Color:Black | Best practices [#best-practices] * **Don't duplicate what you already have.** If your `description`, `product_highlight`, or `product_detail` attributes already cover a piece of information, leave it out of the conversational attributes to avoid redundant, bloated feeds. * **Start with your best Q\&A content.** Pull from real customer questions — support tickets, live chat logs, product review comments — rather than guessing what buyers might ask. This is where conversational attributes add the most value for AI-driven surfaces. * **Keep variant data consistent.** Use the same naming conventions for `variant_option` values (for example, always `color`, not sometimes `colour`) across your whole catalog so AI systems can reliably group and compare variants. * **Confirm the Advanced data source management add-on is enabled** in GMC before you start. Without it, the **Supplemental sources** tab doesn't appear, and setup stalls at the first step. * **Remember this is additive, not destructive.** Conversational attributes can't add or remove products, and submitting them doesn't affect your existing products' approval status, making this a low-risk way to enrich what's already working. # Perplexity import { Callout } from "fumadocs-ui/components/callout"; import { Steps, Step } from "fumadocs-ui/components/steps"; Overview [#overview] Perplexity accepts a standard product data feed via SFTP upload. This channel is largely similar to other flat-file product feed standards. Productsup pre-populates the Dataflow with mandatory and optional columns. Perplexity's feed documentation is currently decentralized and may be evolving. Productsup will continue to refine this documentation as Perplexity's agentic feed model solidifies. If you find any aspect unclear or out of date, contact your Productsup representative for support. Prerequisites in Perplexity [#prerequisites-in-perplexity] [Sign up for Perplexity](https://www.perplexity.ai/hub/legal/merchant-program-terms-of-service) and get approved. Upon approval, you receive SFTP access. Steps in Productsup [#steps-in-productsup] Add the *Perplexity* export. Add the *SFTP/FTP/FTPS Server* destination. Configure the following fields: * **Protocol:** *SFTP* * **Host:** *determined by your Perplexity SFTP* * **Port:** *determined by your Perplexity SFTP* — defaults to `22` in most cases. * **Username:** *determined by your Perplexity SFTP* * **Password:** *determined by your Perplexity SFTP* Configure the Dataflow, connecting all mandatory columns at minimum. * While the API method is supported by Perplexity, they do not guarantee access to all merchants. * Productsup currently supports only the SFTP method. * Productsup supports only the .csv file format out of the box, not .xml. # Google UCP import { Callout } from "fumadocs-ui/components/callout"; import { Steps, Step } from "fumadocs-ui/components/steps"; Overview [#overview] Google UCP (Universal Commerce Protocol) enables Merchant Center account holders to use Native Checkout. UCP is only available to merchants who fulfill from within the U.S. and have a U.S. bank account. Apply for access via Google's [UCP Integration Interest Form](https://support.google.com/merchants/contact/ucp_integration_interest). Google requires submission of a flat-file Supplemental feed, uploaded to your Google SFTP. While Google supports .csv and .xml, Productsup recommends .csv and does not currently support the .xml format out of the box. See [Universal Commerce Protocol](https://support.google.com/merchants/answer/16837055?hl=en-IE\&sjid=10010394131284263347-NA) for more information. The Google UCP feed documentation is rapidly evolving. Productsup will continue to refine this documentation as Google's agentic feed model solidifies. If you find any aspect unclear or out of date, contact your Productsup representative for support. Prerequisites in Google [#prerequisites-in-google] Complete the technical implementation as outlined in the UCP developer guide. This is required before you begin onboarding. [Fill out the UCP Integration Interest Form](https://support.google.com/merchants/contact/ucp_integration_interest?sjid=10010394131284263347-NA). When Google selects you to participate, they notify you and grant access to the onboarding experience in Merchant Center. You receive a sandbox environment to validate your integration, including your UCP profile, identity linking, and Native Checkout APIs. [Configure your return policy in Merchant Center](https://developers.google.com/merchant/ucp/guides/merchant-center#11_return_policy). [Configure your customer support information in Merchant Center](https://developers.google.com/merchant/ucp/guides/merchant-center#12_customer_support_info). Steps in Productsup [#steps-in-productsup] Add the *Google Merchant Center UCP* export. Add an [export destination](/docs/help-center/export-data-feeds/set-up-an-export-destination). Two options are supported: * **Productsup Server** — generates a public HTTPS URL, which you can configure for fetch in GMC. * **SFTP/FTP/FTPS Server** — pushes the file directly to SFTP. This requires configuration to target the Google SFTP, available via Merchant Center. If you are using the SFTP destination, configure the following fields: * **Protocol:** *SFTP* * **Host:** `partnerupload.google.com` * **Port:** `19321` * **Username:** *Your SFTP username, found in your Google Merchant Center SFTP settings* * **Password:** *Your SFTP password, generated in your Merchant Center account. This differs from your Merchant Center password. Your SFTP password is available in the details of any file-based data source in Merchant Center.* Configure the Dataflow. Ensure the `ID` and `native_commerce` columns are connected at the export stage. `native_commerce` is a boolean and must contain `true` for products eligible for Native Checkout, or `false` otherwise. The `consumer_notice` column is optional, but is required if your products must legally be accompanied by consumer warnings in your listing regions. See [Google's product warnings documentation](https://developers.google.com/merchant/ucp/guides/merchant-center#22_product_warnings) for details. **Attention Shopify users:** If Shopify Products is the primary data source in your site, connect the optional column `merchant_item_id` in the export dataflow. The `merchant_item_id` data is available in the import column `admin_graphql_api_id`. Example: `admin_graphql_api_id: gid://shopify/ProductVariant/46041514213588`. In the dataflow, connect the import column `admin_graphql_api_id` directly to the export column `merchant_item_id`. Testing [#testing] Process the site to generate the Supplemental feed file. Make the final configuration in GMC: * **Productsup Server destination:** obtain the URL from the export page, create a new Supplemental feed in GMC, and configure the source to fetch the URL. * **SFTP/FTP/FTPS Server destination:** the file uploads automatically to the SFTP — data updates in GMC within 24 hours. # Import CSV files - advanced settings import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] A comma-separated values (CSV) file is a plain text file containing lists of data separated or delimited by a comma. Additionally, you can separate data in a CSV file with other delimiters as well, such as a colon (`:`), semi-colon (`;`), or a tilde (`~`). You can refer to files where you separate columns by tabs as TSV files. You should treat TSV and CSV files similarly. The following is an example of a typical CSV file: ``` id,title,price,size 1,"Red Shirt","20 EUR",Small 2,"Blue Shirt","25 EUR",Large ``` To import CSV files, you must add the *Feed URL* or *Local File Import* data source in Data Sources. UUID-98e4da85-c3ba-db1a-8c05-6287ee5637e7 *See  and  for more information.* CSV Settings [#csv-settings] CSV files are typically not as complex to import as [JSON](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-json-files-advanced-settings) or [XML](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-xml-files-advanced-settings) files. In most cases, the auto-detect feature imports your file as desired. For non-standard cases, you may have to modify some of the import settings. Non-standard encoding [#non-standard-encoding] Each saved file comes with encoding, which gives you information on how to import the file's content. The most standard encoding for CSV files is UTF-8. Other common encodings are: * UTF-16 * UTF-32 * ANSI * Windows-1251 * Windows-1252 If your file differs from the standard, you must add this information to the platform. Defining the encoding ensures you import data as expected. To define the encoding type: Go to **Data Sources**, then select the appropriate import channel's settings cogwheel (⚙). Next, scroll down to **Content Options** and **CSV Settings**. From here, enter your encoding type in **Encoding**. See [Import a file from a URL](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-a-file-from-a-url#section-idm243298858936996) for more information. UUID-acf41d88-1135-eda1-9da5-48eeff881ddf If the delimiter is not a comma [#if-the-delimiter-is-not-a-comma] If the delimiter in your file is not a comma, you need to add this information to the platform. Defining the delimiter helps you import the data as expected. To define the delimiter: Go to **Data Sources**, then select the appropriate import channel's settings cogwheel (⚙). Next, scroll down to **Content Options** and **CSV Settings**. Then, enter your encoding type in **Delimiter**. Non-standard enclosure [#non-standard-enclosure] Enclose data in CSV files containing more than one word or number, for example, using quotation marks. Enclosures prevent the platform from incorrectly parsing platform data when it encounters a delimiter. ``` id,title,price,size,description 1,"Red Shirt","20 EUR",Small,"This is a great product, I tested it myself" ``` From the previous example, the written description contains a comma (`,`): `This is a great product, I tested it myself.` Enclosing the description field with quotation marks tells the platform to treat the entire description as one field. If you forget the enclosure, you might import the description split into two fields: * `This is a great product` * `I tested it myself` Use a quotation mark (`"`) on either side of the data as the standard enclosure method. If you want to use another enclosure, you can define it in the platform. To define the enclosure: Go to **Data Sources**, then select the appropriate import channel's settings cogwheel (⚙). Next, scroll down to **Content Options** and **CSV Settings**. Then, enter your enclosure method in **Enclosure**. The platform automatically removes the enclosure and does not appear in your import data. Manage non-standard headers [#manage-non-standard-headers] A CSV file typically has a header in the first line. The header indicates the file's column names. ``` id,title,price,size 1,"Red Shirt","20 EUR",Small ``` The previous CSV example results in the following import data: | Id | Title | Price | Size | | -- | --------- | ------ | ----- | | 1 | Red Shirt | 20 EUR | Small | * You can define your header row using the **Header in Row** field. * If you are missing a header, add it to your feed containing all the desired column names using the **Prepend Header Row**. * If you want to rename your columns for the imported data directly, you can provide a new header by using the **Replace Header Row** field. To edit header information: Go to **Data Sources**, then select the appropriate import channel's settings cogwheel (⚙). Next, scroll down to **Content Options** and **CSV Settings**. Lastly, make changes as necessary to the following header fields. UUID-e11f6ce6-8379-3cc3-4ea7-88211d43766d Add a prefix to the attributes imported from your CSV file [#add-a-prefix-to-the-attributes-imported-from-your-csv-file] If you have numerous data sources added to one site, you may need to know which attributes come from which data sources. You can distinguish between attribute sources by adding prefixes to the names of your attributes. For example, the attribute `price` imported from a data source called *CSV1* can get the prefix `CSV1@` for the platform to display the full name of this attribute as `CSV1@price`. To add a prefix to the names of attributes that Productsup imports from your CSV file, follow these steps: Go to **Data Sources** from your site's main menu and select the cogwheel icon (**⚙**) next to the relevant data source. Find the **Content Options** panel at the bottom of the data source setup page and select **CSV Settings**. In **Prepend a String to the Header Columns**, enter the prefix you want to add to the names of the attributes imported from this data source. Select **Save all settings**. On the **Data Sources** page, open the **Settings** tab and modify the name of your unique item identifier in **ID Column** according to the new prefix of the relevant attribute name. You can skip this step if your site doesn't have a unique item identifier or your unique item identifier comes from a different data source with no attribute name prefix. # Import JSON files - advanced settings import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; JSON explained [#json-explained] JSON (JavaScript Object Notation) is a human-readable format for exchanging data between systems. It consists of key-value pairs that can look similar to this: `{"id": "1111"}`. In this example, *id* is the attribute key, and *1111* is the attribute value. In a JSON file, every key is enclosed in double quotation marks. Every value can be a string, array, object, or number. If a value is a string, it is also enclosed in double quotation marks. Here is an example of a typical JSON file that stores data for one product in one object: ``` { "id": "1111", "title": "Shirt", "size": "L", "price": "30 EUR", "stock": "5" } ``` If a JSON file stores data for multiple products, the file contains an array that opens and closes with a square bracket. Inside the array, each product is an object that opens and closes with a curly bracket: ``` [ { "id": "1111", "title": "Shirt", "size": "L", "price": "30 EUR", "stock": "5" }, { "id": "2222", "title": "Pants", "size": "S", "price": "60 EUR", "stock": "3" } ] ``` You can import your raw JSON files into Productsup using the following data source options: * Feed URL. See [Import a file from a URL](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-a-file-from-a-url) for more information. * Local File Import. See [Import a file from your computer](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-a-file-from-your-computer) for more information. * Basic API Request with JSON Response. UUID-23d2a152-0b3a-c3ac-a13f-ee9f6cecb8f9 * Productsup Stream API and Productsup Platform API. See [Import data via the Productsup Stream API](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-from-apis#section-idm4582691268902433399454193933) and [Import data via the Productsup Platform API](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-from-apis#section-idm232211500950421) for more information. * Specific data sources for PIM and other systems that use atypical JSON code. To read and interpret JSON files correctly, the platform parses them before uploading their contents to your site. To ensure that parsing goes smoothly, you can use various JSON settings while setting up your data source option. Nested JSON files with complex structures may require custom development efforts on the Productsup side to let the platform parse them correctly. Reach out to your Customer Success Manager or contact [support@productsup.com](mailto:support@productsup.com) if you need help. Import a JSON file with a root node [#import-a-json-file-with-a-root-node] Some JSON files have root nodes. A root node is a key that contains an array storing all your products. It serves as an entry point from which the platform should start importing products in your file. The root node in the following example is `products`: ``` { "products": [ { "id": "1111", "title": "Shirt", "size": "L", "price": "30 EUR", "stock": "5" }, { "id": "2222", "title": "Pants", "size": "S", "price": "60 EUR", "stock": "3" } ] } ``` If your JSON file contains a root node and you don't specify it on the data source setup page, the import fails. To specify a root node for your JSON file: Go to **Data Sources** from your site's main menu and select the cogwheel icon (**⚙**) next to the relevant data source. Find the *Content Options* panel at the bottom of the data source setup page and select **Json Settings**. In **Root Node**, enter the key that serves as a root node in your JSON file. Don't include quotation marks in this field; only add the name of the key, for example, `products`. UUID-6a229505-3b05-301f-fca9-8c13fd60e941 If your relevant root node is nested deep in the file's structure, you can use either option: 1. Enter the name of the relevant key only. 2. Specify the whole path leading up to the relevant key, such as `products>garden-furniture>spring-collection`. Select **Save all settings**. Import a JSON file with variant keys [#import-a-json-file-with-variant-keys] If your products are available in multiple sizes or colors, your JSON file may store this data in variant keys in each product. In the following example, the variant key `sizes-and-stock` contains different sizes and the related stock data: ``` { "products": [ { "id": "1111", "title": "Shirt", "price": "30 EUR", "sizes-and-stock": [ { "size": "L", "stock": "5" }, { "size": "S", "stock": "2" } ] }, { "id": "2222", "title": "Pants", "price": "60 EUR", "sizes-and-stock": [ { "size": "L", "stock": "3" }, { "size": "M", "stock": "5" } ] } ] } ``` When importing products with variant keys, the platform creates one row per product by default and adds new columns for all attributes and values stored within the variant key. This is why you get the following data in your site: | id | title | price | sizesandstock\_0\_size | sizesandstock\_0\_stock | sizesandstock\_1\_size | sizesandstock\_1\_stock | | ---- | ----- | ------ | ---------------------- | ----------------------- | ---------------------- | ----------------------- | | 1111 | Shirt | 30 EUR | L | 5 | S | 2 | | 2222 | Pants | 60 EUR | L | 3 | M | 5 | However, the platform can also import variant keys as separate product rows: | id | title | price | sizesandstock\_size | sizesandstock\_stock | | ---- | ----- | ------ | ------------------- | -------------------- | | 1111 | Shirt | 30 EUR | L | 5 | | 1111 | Shirt | 30 EUR | S | 2 | | 2222 | Pants | 60 EUR | L | 3 | | 2222 | Pants | 60 EUR | M | 5 | To let the platform import variant keys as separate product rows, use the **Variant Node** setting on the data source page: Go to **Data Sources** from your site's main menu and select the cogwheel icon (**⚙**) next to the relevant data source. Find the *Content Options* panel at the bottom of the data source setup page and select **Json Settings**. In **Variant Node**, enter the variant key of your JSON file. Don't include quotation marks in this field; only add the name of the key, for example, `sizes-and-stock`. UUID-afd1959b-18ed-cb84-3e62-97c533a0bb5a If your file also has a root node, remember to enter it in **Root Node**. See [Import a JSON file with a root node](#N1681748301861). Select **Save all settings**. Bundle repeating keys into one column [#bundle-repeating-keys-into-one-column] A JSON file may have a key with an array that stores multiple values. For example, see the `size` key: ``` { "id": "1111", "title": "Shirt", "price": "30 EUR", "size": [ "XS", "M", "L" ] } ``` By default, the platform creates a new column for each value in the array and imports the data as follows: | id | title | price | size\_0 | size\_1 | size\_2 | | ---- | ----- | ------ | ------- | ------- | ------- | | 1111 | Shirt | 30 EUR | XS | M | L | However, you can bundle the repeating values into one column and let the platform import the data this way: | id | title | price | size | | ---- | ----- | ------ | -------- | | 1111 | Shirt | 30 EUR | XS, M, L | You can use any delimiter to separate values. To bundle repeating values into one column: Go to **Data Sources** from your site's main menu and select the cogwheel icon (**⚙**) next to the relevant data source. Find the *Content Options* panel at the bottom of the data source setup page and select **Json Settings**. Check the **Bundle** box to enable the setting. In **Bundle Delimiter**, enter the symbol that should separate your repeating values in a column. The default separator is a comma (`,`). UUID-2acfc9b2-d635-fac0-9d68-c268267a03ce If your file also has a root node, remember to enter it in **Root Node**. See [Import a JSON file with a root node](#N1681748301861). Select **Save all settings**. Exclude specific keys from a JSON file [#exclude-specific-keys-from-a-json-file] You can let the platform exclude specific keys during import. For example, you may want the platform not to import the key `updatedOn` into your Productsup site: ``` { "id": "1111", "title": "Shirt", "size": "L", "updatedOn": "17.04.2023" } ``` To let the platform skip an unneeded key: Go to **Data Sources** from your site's main menu and select the cogwheel icon (**⚙**) next to the relevant data source. Find the *Content Options* panel at the bottom of the data source setup page and select **Json Settings**. In **Exclude Items**, enter the key you want to skip during import. Don't include quotation marks in this field; only add the name of the key, for example, `updatedOn`. UUID-09dc17c7-6ac2-e1b0-6de3-845fb0d12084 To exclude multiple keys during import, separate them with a comma. Select **Save all settings**. Transform a JSON file into a CSV file [#transform-a-json-file-into-a-csv-file] Some export channels prefer uploading CSV files rather than JSON files. In these cases, you may want to transform your JSON file into a CSV file before Productsup imports it: Go to **Data Sources** from your site's main menu and select the cogwheel icon (**⚙**) next to the relevant data source. Select the *Advanced Settings* tab and choose **I/O Settings**. In the **Transform JSON to CSV** option, select **Add**. UUID-82429519-bd7b-e999-7791-e1caa7697616 Use the fields **Product Path** and **Multiline** to provide the platform with the needed transformation details. See [Transform JSON to CSV](/docs/help-center/import-data-feeds/import-your-data-into-productsup-advanced-settings#listitem-idm243363621862244) to fill out these fields. Select **Save**. # Import XML files - advanced settings import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; XML explained [#xml-explained] XML (Extensible Markup Language) is a versatile file format for storing, transmitting, and reconstructing data. An XML file typically has a tree structure with various nodes nested at different depths. Each node in the tree structure is an XML element enclosed in the opening and closing tags, for example, `XYZ`. Here is an example of an XML file: ``` Yellow shirt Medium 20 EUR 30 EUR Blue shirt Large 25 EUR ``` You can import your raw XML files into Productsup using the following data source options: * Feed URL. See [Import a file from a URL](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-a-file-from-a-url) for more information. * Local File Import. See [Import a file from your computer](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-a-file-from-your-computer) for more information. The platform parses XML files before uploading their contents into your site to read and interpret the files correctly. To ensure that parsing goes smoothly, you can use various XML settings while setting up your data source option. Root nodes in an XML file [#root-nodes-in-an-xml-file] In XML, a root node is the parent node for all the nodes in the file. In Productsup, however, a root node is the desired point in an XML file from which the platform should start importing your products. In the following example of an XML file, the root node, as perceived by XML, is `items`. Productsup can import products from this file with no errors if you define the root node as `items`, but it is a Productsup best practice to set the root node as `product!`. This way, the parser imports all products stored in the `` nodes. ``` Yellow shirt Medium 20 EUR 30 EUR Blue shirt Large 25 EUR ``` Productsup scans XML files for a root node during every run automatically. You can check if the parser detects the correct root node in **Root nodes suggestions**. If it doesn't, you must set it up manually. To define a root node manually: Go to **Data Sources** from your site's main menu and select the cogwheel icon (**⚙**) next to the relevant data source. Find the **Content Options** panel at the bottom of the data source setup page and select **XML Settings**. Add the relevant root node in **Root Node**. UUID-5d4696ce-6a2a-4763-8456-1cecbb1a4c85 Use the following syntax to define root nodes: 1. Use `!` to let the platform import all nodes with the defined name as products and all their children nodes as attributes.Root node example: `product!`. 2. Use `>` as a delimiter between node levels to define a path to your root node and import a specific part of your XML file.Root node example: `items>product>title`. 3. Use root node paths to import product variants from XML files with simple structures. For example, you can have a file similar to this: ``` products UK Red shirt M XL products US Blue shirt S XS ``` In such a file, product variants inherit all attributes within ``, which lets the root node `feed>product_list>products` import the following data into Productsup: | size | product\_@attributes\_lang | product\_product\_list\_name | product\_product\_list\_title | | ---- | -------------------------- | ---------------------------- | ----------------------------- | | M | en | products UK | Red shirt | | XL | en | products UK | Red shirt | | S | en | products US | Blue shirt | | XS | es | products US | Blue shirt | 4. Use tag attributes, such as `lang=xyz`, where *xyz* is the desired tag, to narrow down the list of imported products.From an XML file similar to the one shown previously, the root node `products lang=es` lets the platform import the following: \| size | \| --- | \| XS | 5. Use `#n`, where *n* is the number of the parent node you want to import products from. The counting starts at `1`. The parent node must contain a list of products as child nodes. Use a space to separate the tag from the rest of your root node.From an XML file similar to the one shown previously, the root node `products #1` lets the platform import the following: \| size | \| --- | \| M | \| XL | You can use both tag attributes and parent node numbers in a root node at the same time. For example, `products lang=es #2`. Select **Save all settings**. See [Import a file from a URL](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-a-file-from-a-url) for more information. Add a max depth to scan the file [#add-a-max-depth-to-scan-the-file] Max depth defines how deep into the tree structure of your XML file the parser should go when searching for the root node and extracting your product data. The platform doesn't scan more levels of the tree structure than the maximum depth defines. Adding the max depth setting can reduce your data source processing time. An XML file always starts at a depth of `0`. In the following example, the node `products` is at a depth of `2`. If you set the max depth of this file to `2`, the platform identifies the root node as `product_list!` and imports data stored at a depth of `2` because the root node itself is at a depth of `1`. ``` // depth 0 // depth 1 Products UK // depth 2 Red shirt 20 GBP // depth 3 Medium // depth 4 Extra Large ``` To specify a max depth: Go to **Data Sources** from your site's main menu and select the cogwheel icon (**⚙**) next to the relevant data source. Find the **Content Options** panel at the bottom of the data source setup page and select **XML Settings**. Add the relevant max depth in **Max Depth** and select **Save all settings**.A digit is the expected input format. By default, the max depth is `4`. UUID-02e6de9b-ffe8-00c7-89ed-16629720e138 Add or replace an XML declaration [#add-or-replace-an-xml-declaration] An XML declaration is usually the first line of code in an XML file that identifies the file as XML and contains the XML version and the encoding used in the file. Here is a sample XML declaration: ``` ``` To add a missing or replace a wrong XML declaration: Go to **Data Sources** from your site's main menu and select the cogwheel icon (**⚙**) next to the relevant data source. Find the **Content Options** panel at the bottom of the data source setup page and select **XML Settings**. If your declaration is missing, add it in **Prepend Header Row**.If your declaration is incorrect, replace it in **Replace Xml Declaration**. UUID-b0d6adae-ad75-2dac-f41f-6390b6e03d10 Select **Save all settings**. Bundle repeating nodes into one column [#bundle-repeating-nodes-into-one-column] If your XML file has products whose nodes appear multiple times, the platform imports such nodes as separate columns. If you don't want the platform to import such nodes separately, you can bundle repeating nodes into one column based on how many times they appear. The following XML file has multiple color variants in one size of a T-shirt product: ``` T-shirt Medium Yellow Red Blue Green ``` By default, the platform imports this file similar to this: | title | size | color\_0 | color\_1 | color\_2 | color\_3 | | ------- | ------ | -------- | -------- | -------- | -------- | | T-shirt | Medium | Yellow | Red | Blue | Green | If you bundle the four `color` nodes and use a colon (`:`) to separate the nodes' values, the platform imports the data similar to this: | title | size | color | | ------- | ------ | --------------------- | | T-shirt | Medium | Yellow:Red:Blue:Green | To bundle repeating nodes: Go to **Data Sources** from your site's main menu and select the cogwheel icon (**⚙**) next to the relevant data source. Find the **Content Options** panel at the bottom of the data source setup page and select **XML Settings**. Enter the number of repeating nodes that the platform should bundle into one column in **Bundle repeating nodes**.A digit is the expected input format. By default, the platform bundles nodes that appear at least 11 times. In **Bundle delimiter**, specify the character that should separate the values of the repeating nodes in your column. By default, the delimiter is a comma (`,`). UUID-20d07f32-52f3-055a-45bf-0385f41aa8f5 Select **Save all settings**. Repair broken data in your XML file [#repair-broken-data-in-your-xml-file] Sometimes XML files contain broken data. You can solve some of the broken data issues while importing your data into the Productsup platform: . XML files may contain broken UTF-8 control characters. Although such unprinted characters can't appear in your product feed, they can cause parsing errors. For the parser to ignore broken control characters, you can use the **Repair control characters** option. . Some XML files have a DTD (Document Type Declaration), which is a line of code that usually comes right after the XML declaration: ``` // XML declaration // DTD ``` For the parser not to break because of the DTD, you can use the **Remove DTD** option. . You may have a missing parent node in an XML file: ``` 111 222 ``` If you run an import with such an XML file, the platform can't detect a root node and parse the file, so the import fails.For the parser not to break because of a missing parent node, you can use the **Repair parent node** option. If you check the box without specifying the parent node's name, the platform automatically adds the parent node `PUP_ROOT` to your file. . An XML file can have empty nodes. In the following example, the node `` contains no value: ``` T-shirt Medium Yellow ``` By default, the platform skips empty nodes and doesn't import them. To import empty nodes as columns with blank values, you can use the **Allow empty node** option.If you use the **Allow empty node** option for the previously-shown XML file, the imported data looks similar to this: | title | size | color | rating | | ------- | ------ | ------ | ------ | | T-shirt | Medium | Yellow | | To repair broken XML data: Go to **Data Sources** from your site's main menu and select the cogwheel icon (**⚙**) next to the relevant data source. Find the **Content Options** panel at the bottom of the data source setup page and select **XML Settings**. Choose any options required to repair your XML data: 1. **Repair control characters** 2. **Remove DTD** 3. **Repair parent node** 4. **Allow empty node** Select **Save all settings**. Add a prefix to the attributes imported from your XML file [#add-a-prefix-to-the-attributes-imported-from-your-xml-file] If you have numerous data sources added to one site, you may need to know which attributes come from which data sources. You can distinguish between attribute sources by adding prefixes to the names of your attributes. For example, the attribute `price` imported from a data source called *XML1* can get the prefix `XML1@` for the platform to display the full name of this attribute as `XML1@price`. To add a prefix to the names of attributes that Productsup imports from your XML file, follow these steps: Go to **Data Sources** from your site's main menu and select the cogwheel icon (**⚙**) next to the relevant data source. Find the **Content Options** panel at the bottom of the data source setup page and select **XML Settings**. In **Prepend a String to the Header Columns**, enter the prefix you want to add to the names of the attributes imported from this data source. Select **Save all settings**. On the **Data Sources** page, open the **Settings** tab and modify the name of your unique item identifier in **ID Column** according to the new prefix of the relevant attribute name. You can skip this step if your site doesn't have a unique item identifier or your unique item identifier comes from a different data source with no attribute name prefix. Transform your XML with XSLT [#transform-your-xml-with-xslt] For complex XML file structures, you may need XSLT (Extensible Stylesheet Language Transformations) to import your product data into the platform as desired. For example, XML files with nested product variants are a common XSLT use case in Productsup. You can contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com) to have an XSLT code abstract created and implemented for you. Alternatively, you can create and implement XSLT code yourself. To add XSLT code to your data source: Go to **Data Sources** from your site's main menu and select the cogwheel icon (**⚙**) next to the relevant data source. Select the **Advanced Settings** tab and then select **I/O Settings**. Choose **Add** next to **Transform XML with XSLT** in the **Available I/O Settings** panel. Add your XSLT code in the **XSL Template** field. Select **Save**. # Import a file from a URL import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] To import your data into the Productsup platform from an HTTP, HTTPS, FTP, or SFTP URL, use the Feed URL data source option. It supports multiple file formats, including the following: * CSV and TSV - See [Import CSV files - advanced settings](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-csv-files-advanced-settings). * XML - See [Import XML files - advanced settings](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-xml-files-advanced-settings). * JSON - See [Import JSON files - advanced settings](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-json-files-advanced-settings). * XLSX - See [Import Excel files - advanced settings](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-excel-files-advanced-settings). * TXT * RSS * BZ2 * ZIP * GZ Import file via Feed URL [#import-file-via-feed-url] Go to **Data Sources** from your site's main menu and select **Add data source**. Search for *Feed URL* and select **Add**. Give it a custom name as desired and select **Continue**. UUID-4c471663-20d4-509a-7a43-71544d2f7608 The custom name of a data source replaces the name of its data source option in Data Sources. For example, **Feed URL** is the name of a data source option, while **Feed URL - winter clothes CSV** can be a custom name of a data source. In **Source URL**, add your FTP, SFTP, HTTP, or HTTPS link. In **Description (optional)**, edit the name of the data source as needed. If Productsup requires authentication to access data in your file, provide relevant access data in **Username (optional)** and **Password (optional)**. If you need Productsup to use basic authentication and include an encoded credentials string in the HTTP authorization header of each request to your data source, choose **Basic Authentication** in the **Password** drop-down menu.In the **Password** drop-down menu, you can also select **SSH Key (SFTP)** to access the SSH Public Key that Productsup uses to authenticate in your SFTP server. In **Custom HTTP headers (optional)**, add your custom HTTP headers to request the needed data from the server. UUID-d5e97890-4259-c012-b412-307e373e0766 An HTTP header's format is *\
    : \*. The header name is case-insensitive. If you need to add multiple headers, enter each header from a new line without a delimiter. Select **Save**. When the page reloads, you can select **Additional Data Feed** in the **Content Mode** panel to let Productsup import the data from your data source as new columns instead of new rows. See [Enhance your products with additional data sources](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources) for more information. If you require a custom setup to upload your data to Productsup via the Feed URL data source option, contact [support@productsup.com](mailto:support@productsup.com). Once the custom setup is ready, Productsup displays relevant information in **Plugin (optional)**. Modify import data in Content Options [#modify-import-data-in-content-options] Using Content Options, you can modify your data imported in Productsup via the Feed URL data source by adding or replacing headers, adding or removing columns, specifying custom delimiters, etc. Specific modifications available for your import depend on the type of file you are importing via the Feed URL data source option, such as a CSV, XML, or JSON. Content Options - CSV Settings [#content-options---csv-settings] The CSV Settings option in the Content Options panel lets you prepend or replace header rows and define the encoding, delimiter, enclosure, and the number of headers used in your CSV file. By default, Productsup detects the encoding, delimiters, and enclosures in CSV files automatically and considers the first row in your file to be the header. See [Import CSV files - advanced settings](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-csv-files-advanced-settings) for more information. Select **CSV Settings** in **Content Options** to access the import modifications available for CSV files. In **Encoding**, define the file encoding. In **Delimiter**, specify the delimiter used in the file. In **Enclosure**, enter the enclosure used in the file. In **Header in Row**, set the number of the row that contains the header. A digit is the expected input format. If your file doesn't have a header, you can add it in **Prepend Header Row**. Enter all names of your columns and separate them with the delimiter used in your file.For example, to a file using the `|` delimiter, you can prepend the following header row:`ID|title|mpn|product_type|description|url|image_url|price|sale_price|stock` UUID-63d999f6-714e-5f56-766e-d5892b2043fd If you have numerous data sources added to one site, you may need to know which attributes come from which data sources. You can distinguish between attribute sources by adding prefixes to the names of your attributes.In **Prepend a String to the Header Columns**, enter the prefix you want to add to the names of the attributes imported from this data source. If your data source produces files other than CSV or XML files, you can still use this option. If your data source has a unique item identifier, open the **Settings** tab on the **Data Sources** page and modify the name of your unique item identifier in **ID Column** according to the new prefix of the relevant attribute name. If the header in your file isn't correct, you can change it in **Replace Header Row**. Enter all names of your columns and separate them with the delimiter used in your file.For example, in a file using the `;` delimiter, you can replace the header row with the following string:`ID;title;description;product_type;url;image_url;price` The number and order of column names in **Prepend Header Row** and **Replace Header Row** must match the number and order of columns in the file. Select **Save all settings**. Content Options - XML Settings [#content-options---xml-settings] The XML Settings option in the Content Options panel lets you change XML declarations, bundle repeating nodes into one column, define root nodes and maximum depths, and further modify your import data. See [Import XML files - advanced settings](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-xml-files-advanced-settings) for more information. Select **XML Settings** in **Content Options** to access the import modifications available for XML files. To specify the root node used in your file, enter it in **Root Node** in the same format used in your file. For example, in the XML code abstract given in [Step 3](#note-idm243298858973098), `` is the root node of the file. In **Max Depth**, specify how far down into the structure of your XML file the platform should go to find the root node. A digit is the expected input format. XML depths are layers of nodes or branches in a file. That means the XML file begins at the initial layer, which is `0`. The layer is the depth of the file.In the following example, the `` node begins at level `1`: ``` Queen II Queen UK EMI 24.90 1974 ``` To find the root node in this XML file, the platform should scan at least two depths. The depth value specified in **Max Depth** for this file should be at least `2`. If your data contains an attribute name with spaces or special characters, such as **Size (mm)**, you can specify an XPath expression, such as `tagName[@attributeName]` , in **Attribute name location**. For example, `attribute[@name]`. To add a header line to your XML file, enter it in **Prepend Header Row**. The Productsup team doesn't recommend prepending a header row to your XML file. If you have numerous data sources added to one site, you may need to know which attributes come from which data sources. You can distinguish between attribute sources by adding prefixes to the names of your attributes.In **Prepend a String to the Header Columns**, enter the prefix you want to add to the names of the attributes imported from this data source. If your data source produces files other than CSV or XML files, you can still use this option. If your data source has a unique item identifier, open the **Settings** tab on the **Data Sources** page and modify the name of your unique item identifier in **ID Column** according to the new prefix of the relevant attribute name. If the XML declaration in your file isn't correct, you can change it in **Replace Xml Declaration**. The XML declaration typically contains the XML version and the encoding used in the file. It can look similar to this:`` If your file has multiple nodes describing the same product attribute with different values, you can bundle such nodes into one column in **Bundle repeating nodes**.By default, Productsup bundles 11 repeating nodes into one column and uses the semicolon (`;`) delimiter to separate them within the column. Specify a different number of repeating nodes in **Bundle repeating nodes** and add a different delimiter in **Bundle delimiter** as needed. If your XML file contains elements that may disrupt the parsing of your file, tick one or more of the following boxes: UUID-2f1c1839-10cd-08bd-8c4d-acefda0ec716 1. **Repair control characters** - This helps to repair broken control characters within your XML file. Although such unprinted characters can't appear in your product feed, they can cause parsing errors. 2. **Remove DTD** - This lets you remove the Document Type Declaration (DTD) from your file. In files that use a DTD, this section comes directly after the XML declaration. 3. **Repair parent node** - This helps to change a parent node that is incomplete or has an incorrect closure. 4. **Allow empty node** - This helps to import nodes with empty values into the platform to avoid skipping them during import and disrupting your data structure. Select **Save all settings**. Once Productsup scans your imported XML file, it suggests which nodes in your file could be the root nodes and displays them in **Root nodes suggestions**. UUID-9352089c-7de2-5263-b14f-27e8d04c8364 To check whether Productsup has correctly interpreted your file or if there have been some parsing issues: Run an import by selecting **Import** in the upper right corner of the Feed URL setup page. Take a look at the suggestions in **Root nodes suggestions**. Content Options - JSON Settings [#content-options---json-settings] The JSON Settings option in the Content Options panel lets you define root and variant nodes, bundle repeating keys into one column, and exclude items from import. See [Import JSON files - advanced settings](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-json-files-advanced-settings) for more information. UUID-1792e11e-d451-2b3c-0b50-d37bebd8255d Select **Json Settings** in **Content Options** to access the import modifications available for JSON files. If your JSON file has a root node, enter it in **Root Node**. If your JSON file has product variants nested in one root node, input the node containing the product variants in **Variant Node**. If your file has multiple keys featuring the same product attribute with different values, you can bundle such keys into one column by ticking the **Bundle** box.By default, Productsup uses the comma (`,`) delimiter to separate bundled values within a column. Specify a different delimiter in **Bundle Delimiter** as needed. If you don't want Productsup to import a particular key or keys from your JSON file, enter them in **Exclude Items** and separate the keys by commas if needed. Select **Save all settings**. Content Options - Add/Filter columns [#content-options---addfilter-columns] The Add/Filter columns option in the Content Options panel lets you modify your import data by allowing, blocking, adding, or removing columns. This option applies to all imports regardless of the type of import files involved. UUID-133e4b30-5588-7213-99d4-3b9c1cb42e04 Go to **Data Sources** from your site's main menu and choose your feed URL's settings page by selecting the cogwheel icon (**⚙**). Next, under *Content Options*, select **Add/Filters Columns**. Select **Allow Columns** or **Block Columns** and enter your column name in the *Filter Columns* field. Select **Save all settings** and perform an import by selecting **Run**. Go to **Dataflow** from your site's main menu and search for the column attribute you allowed or blocked. You can see an asterisk for all blocked column names while allowed column names appear as usual. You can also use a regex to locate text. For example, if you select **Allow Columns**, entering the following regex `/^part/` admits all column names that begin with *part*. Content Options - Encryption [#content-options---encryption] The Encryption option in the Content Options panel helps to provide Productsup with a password to let the platform read your password-protected import file. UUID-5821188c-24f7-994e-03d5-054a53077b3f Select **Encryption** in **Content Options**. Enter the password in **File password**. Select **Save all settings**. Edit Feed URL data source via Advanced Settings tab [#edit-feed-url-data-source-via-advanced-settings-tab] If you want to add a label to your data source, delete your data source, or use the advanced technical settings of your data source, you can go to the Advanced Settings tab on the Feed URL setup page. To access the Advanced Settings tab: Go to **Data Sources** from your site's main menu. Select the cogwheel icon (**⚙**) next to a chosen data source. Select the **Advanced Settings** tab. See [Import your data into Productsup - Advanced Settings](/docs/help-center/import-data-feeds/import-your-data-into-productsup-advanced-settings) for more information. # Import data by crawling your website import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Productsup can crawl your website to import additional data. It is intended for cases where no data sources are available and when you need to establish a data source. The Website Crawler begins from a single start domain, then crawls all website pages. The Website Crawler feature only supports static, server-rendered sites. It doesn't work with the websites that are rendered dynamically with JavaScript. Prerequisites [#prerequisites] The Website Crawler feature is part of *Crawler Module*, which is available at an additional cost in all platform Ecrawditions. Contact [support@productsup.com](http://support@productsup.com) to discuss adding it to your organization. * The Crawler Module contains the following features: * Website Crawler * Data Crawler * Image Properties Crawler * Inform your website admins about the upcoming crawler before running this feature. This notice ensures you won’t face restrictions when you start the Website Crawler. Set up Website Crawler [#set-up-website-crawler] Go to **Data Sources** from your site's main menu, and select **ADD DATA SOURCE**. Then choose *crawler* and select **Add**. UUID-da572e36-c315-65e8-d568-de18ce021633 (Optional) Give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources* page. Then, select **Continue**. Enter the website name in **Domain**, for example, beginning with `www`. The website domain is where Productsup starts crawling data. (Optional) Enter several URLs in **Start URLs** if product pages or categories don't link to the initial website domain. UUID-029598b7-3e2c-8788-07ef-0fce6c9c57b6 Toggle **Crawl Subdomains** to *On* if your website has a subdomain. For example, `interdimensionallogistics` is your company name, and `shop` identifies your subdomain in your company's shop URL, `www.shop.interdimensionallogistics.com`. Ensure you have permission from your website admin to crawl the website and check the **Permissions** checkbox. Select **Save**. Optional Website Crawler advanced settings [#optional-website-crawler-advanced-settings] To limit crawling product pages only, enter a portion of the URL in **Link Contains**: * The crawler detects URLs containing this URL portion and only crawls those pages. * You can use wildcards (`*`). See [Use wildcards](#section-idm13231306936102). You can include URLs containing a specific keyword(s) by adding them in **Filters (include)**. To exclude URLs containing a specific keyword, add it in **Filters (exclude)**. **User Agent** is the name the crawler uses to access your website. You can modify the default User Agent according to your needs, for instance, by adding a hash for increased security. See the following examples:Default: `Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20070802 SeaMonkey/1.1.4 (productsup.io/crawler)`Modified: `Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20070802 SeaMonkey/1.1.4 (productsup.io/crawler) 8jbks7698sdha123kjnsad9` You can select the number of crawlers that crawl simultaneously in **Concurrent Crawlers**. Define how many attempts the crawler should attempt to locate unreachable pages under **Retry on Error**. In **Crawler timeout per page (seconds)**, set how long the crawler should wait to answer requests before aborting. You can limit how many pages to crawl in **Max count of pages to crawl**. Select **Save**. Use wildcards [#use-wildcards] You can use wildcard characters to save you from having to add precise parameters in **Link Contains**, **Filters (include)**, and **Filters (exclude)**. * An asterisk (`*`) matches any number of characters, no matter the characters. * An asterisk (`*`) matches any number of random characters. * If you input `\*/p/`, your URL should end with `/p/`, for example, `http://www.test.com/p/`. * If you input `/p/\*`, your URL should start with `/p/`, for example, `/p/123456`. * If you input `\*/p/\*`, this means you can add `/p/` anywhere in your URL, for example, `http://www.test.com/p/123`. * You can use as many asterisks as you wish. For example, `\*/cat/\*/p/\*` matches: `http://www.test.com/cat/123/p/456`. * A question mark (`?`) matches one of any character, no matter the character. * You can use single or multiple question marks to match a set number of random characters. For example, `\*/???/\*/p/\*` matches: `http://www.test.com/cat/123/p/456`. # Import from a database import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; You can request product data directly from a database. This lets you skip creating a feed file from the database for import. Productsup provides a selection of data sources for several types of databases: * MySQL * PostgreSQL * Microsoft Azure SQL Server * Other SQL databases based on Open Database Connectivity (ODBC) Productsup can add needed drivers and database imports on request. Import from MySQL database [#import-from-mysql-database] If you work with a vast infrastructure and keep data in MySQL database, use data source *MySQL Import* to get your data into Productsup. This data source connects directly to your database. If your database firewall requires it, allowlist Productsup's IP ranges — see [Network information](/docs/help-center/get-started/productsup-fundamentals/network-information). To import from MySQL database: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *MySQL Import* and select **Add**. UUID-db1d353b-5619-f4de-15a9-9fb26dd387f6 Give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. Add your hostname in **Hostname** to connect to your database. In **Port**, add the port numbers you assigned to the database. Add your credentials in the **Username** and **Password** fields to connect to the database. Enter the database name in **Database**. In **Query**, enter a query to select the relevant data. To import your product information from a database, you must create SQL queries to databases. See [Write SQL database queries](#section-idm4637577796841634303518904525) In **Charset**, select your database charset from the drop-down menu or leave the default value to let the platform choose the charset. Select **Save**. UUID-7eea1880-308e-f1a5-dd4c-3fb9fcfbd42c Import from PostgreSQL database [#import-from-postgresql-database] You can import data from PostgreSQL database using a SQL query. Productsup supports *PostgreSQL UNICODE* or *PostgreSQL ANSI ODBC* drivers. Don't execute queries from an online transactional database. Instead do it from a database warehouse database or backup. Ensure the user assigned for the Productsup integration only has read access to the necessary tables to complete the query. To import from PostgreSQL database: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *PostgreSQL* and select **Add**. UUID-84fc7ffa-841f-91d0-e769-d5c3284b29f1 Give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. In **Driver**, choose the relevant driver. Select **PostgreSQL UNICODE** or **Postgre ANSI** from the drop-down menu. Add your hostname in **Hostname** to connect to your database. In **Port**, add the port numbers you assigned to the database. Enter the database name in **Database**. Add your credentials in the **Username** and **Password** fields to connect to the database. In **Query**, enter a query to select the relevant data. To import your product information from a database, you must create SQL queries to databases. See [Write SQL database queries](#section-idm4637577796841634303518904525) Select **Save**. UUID-0651a6b9-293a-1dab-bb63-04e9c49b9836 Import from Microsoft Azure SQL Server database [#import-from-microsoft-azure-sql-server-database] You can import data from Microsoft Azure SQL Server database using a SQL query. Productsup supports *ODBC Driver 17 for SQL Server*. Don't execute queries from an online transactional database. Instead do it from a database warehouse database or backup. Ensure the user assigned for the Productsup integration only has read access to the necessary tables to complete the query. To import from Microsoft Azure SQL Server database: Go to **Data Sources** from your site's main menu and select **Add data source**. Search for *Microsoft Azure SQL Server Import* and select **Add**. Microsoft Azure SQL Server Import connector card Give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. Add your hostname in **Hostname** to connect to your database. In **Port**, add the port numbers you assigned to the database. Enter the database name in **Database Name**. Add your credentials in the **Username** and **Password** fields to connect to the database. In **Query**, enter a query to select the relevant data. To import your product information from a database, you must create SQL queries to databases. See [Write SQL database queries](#section-idm4637577796841634303518904525) Select **Save**. Microsoft Azure SQL Server Import configuration Import from an ODBC database [#import-from-an-odbc-database] You can import your data from any other SQL database based on Open Database Connectivity (ODBC). Productsup supports *PostgreSQL UNICODE*, *PostgreSQL ANSI ODBC*, and *ODBC Driver 17 for SQL Server* drivers. If you need support for other drivers, contact \[[support@productsup.com](mailto:support@productsup.com)]\(mailto: [support@productsup.com](mailto:support@productsup.com) ). Don't execute queries from an online transactional database. Instead do it from a database warehouse database or backup. Ensure the user assigned for the Productsup integration only has read access to the necessary tables to complete the query. Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *ODBC database Import* and select **Add**. UUID-2c31b5bb-b0d9-5000-1219-4fdc2bee67b3 Give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. Add your credentials in the **Username** and **Password** fields to connect to the database. Enter the database name in **Connection String**. * Ask you database administrator to provide this name. * Add the name in the format such as `Driver={ODBC Driver 17 for SQL Server};Server=mssql.123testing.com;Database=tempdb;`. In **Query**, enter a query to select the relevant data. To import your product information from a database, you must create SQL queries to databases. See [Write SQL database queries](#section-idm4637577796841634303518904525) Select **Save**. UUID-dac3b74b-3497-1821-3388-0fc55c5a16c0 Write SQL database queries [#write-sql-database-queries] This section gives some helpful tips for writing SQL database queries in Productsup. SQL queries help you access product data from databases. You need to enter your queries into the **Query** field of the configured data source. For example, you have two tables containing different data on some products: | id | product\_id | title | type | | -- | ----------- | ----- | -------- | | 1 | 222 | book | direct | | 2 | 333 | table | dropship | | 3 | 444 | lamp | dropship | | id | product\_id | price | | -- | ----------- | ----- | | 1 | 222 | 9.99 | | 2 | 333 | 69.99 | | 3 | 444 | 49.99 | You can merge the tables and extract Productsup product data by writing a query: Select needed attributes using the `select` command followed by a list of product attribute names. You can also define the table you receive the data from using the `from` command. For example, to show that the `product_id` and `title` attributes come from the `product_data` table, write the following query: ``` SELECT product_data.product_id, product_data.title FROM product_data ``` Add information from another table with the `join` command. Use the `on` command to specify the *id column* of each table. The query looks for the matches to the IDs between the tables. The data of the first table merges with the data of the second in case of a match. For example, the `product_pricing` merges with the `product_data` table. In this example, the `on` command specifies that the ID attribute for both tables is `product_id`. ``` JOIN product_pricing ON product_data.product_id = product_pricing.product_id ``` Specify conditions to fulfill for exporting data using the `where` command to define how the class `type` equals `dropship` in the `product_data` column. ``` WHERE product_data.type = 'dropship' ``` Each SQL query should include a `select` and `from` command. Use the `join` and `where` commands as necessary. For this example, the final query may look as follows: ``` SELECT product_data.product_id, product_data.title, product_pricing.price FROM product_data JOIN product_pricing ON product_data.product_id = product_pricing.product_id WHERE product_data.type = 'dropship' ``` The result table after merging is as follows: | product\_id | title | price | | ----------- | ----- | ----- | | 333 | table | 69.99 | | 444 | lamp | 49.99 | See [W3 Schools SQL Tutorial](https://www.w3schools.com/sql/), to learn more about SQL. Contact [support@productsup.com](mailto:support@productsup.com) if you have any questions. # Import a file from your computer import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] To import your product data from a file on your computer, you can use the *Local File Import (Upload)* data source. The maximum accepted size of a file is 30 MB. The *Local File Import (Upload)* data source supports the following file extensions: * XML * CSV and TSV * RSS * XLSX * TXT * ZIP Upload a file via Local File Import (Upload) [#upload-a-file-via-local-file-import-upload] Go to **Data Sources** from your site's main menu. Select **ADD DATA SOURCE**. Search for *Local File Import (Upload)* and select **Add**. UUID-28801c2a-cde8-71f0-7023-eba6a7d3acfe Give it a desired name and select **Continue**.The custom name of a data source replaces the name of its data source option in Data Sources. For example, **Feed URL** is the name of a data source option, while **Feed URL - winter clothes CSV** can be a custom name of a data source. To upload a file from your computer, drag and drop a file to the upload area or select the **click to browse** link to choose a file from your computer. Enter a file description in **Description (optional)** as desired. The description you enter in this field serves as the data source name. Select **Upload**. When the platform uploads your file, it automatically sends it to an FTP server hosted by Productsup. This is why you can see your uploaded file as a URL that starts with `ftp://ftp.productsup.com/`. The platform also adds a unique number at the end of the file name to differentiate between files with the same name on the FTP server. UUID-85e09de6-1e40-cfc7-dff8-2635d5886518 When you delete the *Local File Import (Upload)* data source or upload a different file in its settings, the platform automatically deletes the unneeded file from the FTP server. Once the platform uploads the file, you can specify whether it is a main or an additional data source by selecting **Main Data Feed** or **Additional Data Feed** in the *Content Mode* panel.See [Enhance your products with additional data sources](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources) to learn the difference between these data source types and the details of setting up an additional data source. In the *Content Options* panel, you can select any option to use the advanced settings of uploading files to Productsup.The specific option you need depends on your file type and the tasks you want to perform. See [Import a file from a URL](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-a-file-from-a-url#section-idm4608850079425632988588525417) for more information on each option of the *Content Options* panel. Select **Save all settings** to save your data source and its settings. Update a previously uploaded file [#update-a-previously-uploaded-file] To update a file that you have previously imported from your computer, you need to: Go to **Data Sources** from your site's main menu. Select the cogwheel icon (**⚙**) next to the *Local File Import (Upload)* data source that you want to update. Select **Edit**. To add an updated file, drag and drop it to the upload area or select the **click to browse** link to choose a file from your computer. Change any settings in the *Content Options* and *Content Mode* panels as needed. Select **Save all settings**. # Import from APIs import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; An Application Programming Interface (API) is a method for transporting data by sending responses and receiving requests. It lets two systems talk directly with each other and, in this case, send product data. Importing data via API is a popular choice for product data. It typically allows for dynamic and quick data handling. Productsup has several API connections directly to external systems. See [Import data from third-party external systems](/docs/help-center/import-data-feeds/import-data-from-third-party-external-systems). Productsup offers Stream API as a high-performance product upload or content API. Import data via the Productsup Platform API [#import-data-via-the-productsup-platform-api] The Platform API's product upload endpoints will sunset on *March 31, 2025*. Use Stream API to upload your product data. To import data via the *outgoing* Productsup Platform API: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Select **Add** for the *Productsup Platform API* data source. UUID-a833d25d-dc8d-c4ed-0851-0948ef29b93f Optionally, give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. Enter one of the following settings in **Product Update Mode**: * *replace*: Uploads an entire file of all product information during each run. * *update*: Only uploads fields where you modified data, known as a delta update. Optionally, in **Import process report email address**, enter an email address to receive a report for each import run: a list of imported Batch IDs. * Leave empty for no report. * Use a comma for concatenating multiple email addresses. Select **Save**. UUID-60f41e5a-29a5-22cc-bab2-7e0201e322bf See the Productsup [Introduction into our APIs](https://api-docs.productsup.io/#introduction) website to explore this topic more deeply. Import data via the Productsup Stream API [#import-data-via-the-productsup-stream-api] To import data via the Productsup Stream API: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Select **Add** for the *Productsup Stream API* data source. UUID-75697f5a-8d08-806b-2b13-74f9892b6224 Optionally, give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. In **Stream**, choose the Stream ID you want to import data from in the drop-down list. Select **Save**. UUID-6c10987a-009e-9f4c-7eb5-c2bca532fb9d Import from a SOAP service with Basic SOAP Request [#import-from-a-soap-service-with-basic-soap-request] To import XML data from a SOAP Service: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Select **Add** for the *Basic SOAP Request* data source. UUID-f5435344-1507-a84b-e256-e5a841422d72 Optionally, give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. Add your data URL in **WSDL Url**. In **XML root node**, define your file's root node. Add your endpoint in **SOAP Endpoint**. Optionally, use **Request Parameters** to import the products you specified in the parameters only. Optionally, select authentication in the **Auth Type** drop-down list. You can select **None** or **Basic** authentication. Next, add your credentials in **Auth User** and **Auth Pass**. Select **Save**. UUID-0fb7a24b-4bba-247e-828b-fa34cf8d47a3 Import paginated with Basic API Request with JSON Response [#import-paginated-with-basic-api-request-with-json-response] This data source is for APIs that return a JSON response and authenticate with a token. To import paginated product data in a JSON format through a basic REST API: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Select **Add** for the *Basic API Request with JSON Response* data source. UUID-c6b788ad-e2a4-77e7-00af-77c6749f87eb Optionally, give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. Add your data URL in **Source**. Optionally, if the URL contains any parameters, except the page parameter, add them in **Parameter (optional)**. Optionally, if you require authentication, add your credentials in **Username (optional)** and **Password (optional)**. Optionally, if a JSON file contains a root node, which defines the key that your product data falls under, add the node in **Root Node (optional)**. See [Import JSON files - advanced settings](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-json-files-advanced-settings) for more information. Optionally, enter the product variants from the JSON file you want to import in **Variant Node (optional)**. Optionally, enter the variable that defines the page in **Page Variable**. * For example, the page variable would be `page` located in `www.myonlineshop.com/export.json?page=1`. Establish the first page in **Start Page (optional, default: 1)**, and set the page interval in **Next Page Interval (optional)**. * This is necessary if the pages do not increase by one (1) each time, for example, if not `page=1, page=2,`... Switch **Bundle Elements** to *On* if you want to activate bundle elements, and add a delimiter in **Bundle Delimeter**. See [Import JSON files - advanced settings](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-json-files-advanced-settings) for more information. In **Notifications**, set a notification to inform you how many products you imported. You can specify the notification interval. In **Concurrency (how many requests at once)**, define how many requests occur simultaneously. Select **Save**. Import paginated with Basic API Request with JSON Response (Cursors) [#import-paginated-with-basic-api-request-with-json-response-cursors] This data source is specifically for APIs that return a JSON response, authenticate with a token, and use cursors to page larger result sets. If you need to use cursors instead of pagination: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Select **Add** for the *Basic API Request with JSON Response (Cursors)* data source. UUID-99453846-93d6-5038-9b01-7cfd9a6fcd6b Optionally, give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. Add your data URL in **Source**. Optionally, if the URL contains any parameters, except the page parameter, add them in **Parameter (optional)**. Optionally, if you require authentication, add your credentials in **Username (optional)** and **Password (optional)**. Optionally, if a JSON file contains a root node, which defines the key that your product data falls under, add the node in **Root Node (optional)**. See [Import JSON files - advanced settings](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-json-files-advanced-settings) for more information. Optionally, enter the product variants from the JSON file you want to import in **Variant Node (optional)**. Switch **Bundle Elements** to *On* if you want to activate bundle elements, and add a delimiter in **Bundle Delimeter**. See [Import JSON files - advanced settings](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-json-files-advanced-settings) for more information. In **Notifications**, set a notification to inform you how many products you imported. You can specify the notification interval. In **Cursor Location**, choose *None* or *Header* regarding the cursor from the drop-down list. If you've selected *Header*, enter the appropriate information in **Cursor Response Header** and the **Cursor Request Header**. Define the columns you want to exclude in **Excluded Columns**. For example, `column_1,column_value*,column_*_name`. Select **Save**. # Import from Google Sheets import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; A Google Sheets file is a spreadsheet created and edited online in Google Workspace. You can import your data from Google Sheets in two ways: . Import from your existing Google spreadsheet. See [Import from an existing Google Sheets file via the Feed URL data source](#section-idm353526263205150). . Create a new spreadsheet via the platform in the Producstup Google Drive or your Google account. See [Create a new Google Sheets file via Productsup](#section-idm232211452100103). The *Google Sheets* data source can import files up to 10 MB in size. If your Google Sheets file is larger than 10 MB, you can split it into two files and set up two separate *Google Sheets* data sources. Alternatively, you can upload your large file to an FTP or SFTP server and import it into Productsup using the *Feed URL* data source. See [Import a file from a URL](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-a-file-from-a-url). Import from an existing Google Sheets file [#import-from-an-existing-google-sheets-file] You can provide access to your existing spreadsheet hosted in your company's Google Drive. It doesn't require making your sensitive, organization-owned Google Sheets public, and you stay fully aligned with your enterprise security policies. The feature only imports data from the first sheet tab within the specified Google Sheet file. You can't import multiple sheets at a time from a single file. In future iterations, we will explore multi-sheet import capabilities. To import your existing file via the Google Sheets data source: Go to **Data Sources** from your site's main menu and select **Add data source**. Search for *Google Sheets* and select **Add**. UUID-6e3d8361-c00f-583c-edd3-59c07229437c Edit the data source name if desired and select **Continue**. Select the **Add an existing spreadsheet source URL** option. UUID-933a6471-6895-2efc-7313-4d16b6081e61 Scroll down to the *Authentication selection* to set up access to the Google account. In **Authentication**, choose the Google authentication you previously set up in your organization, project, or site. If you haven't set up Google authentication yet, perform the following steps: Select **Add New Authentication**. A pop-up opens. Select *Google Spreadsheets* in **Type**. You can optionally give your authentication a name. Select **Next**. Select **Connect**. Before proceeding, Productsup redirects you to Google to finalize your authentication. After completing the authentication setup, Google redirects you back to Productsup. Close the confirmation pop-up to proceed. If, in the future, you decide to delete the Google Sheets data source from the platform, your data source file moves into the trash bin of your Google account.You can restore it if you have set up the authentication for your Google account. When the authentication setup is complete, add your Google spreadsheet URL to **Source URL**. UUID-57bc9841-889e-0005-1f1f-a052534c994e Change the URL from `…/edit` to `…/export`. For example, change *[https://docs.google.com/spreadsheets/d/123\`/edit\`?pli=1\&gid=123#gid=123](https://docs.google.com/spreadsheets/d/123`/edit`?pli=1\&gid=123#gid=123)* to *[https://docs.google.com/spreadsheets/d/123\`/export\`?pli=1\&gid=123#gid=123](https://docs.google.com/spreadsheets/d/123`/export`?pli=1\&gid=123#gid=123)*. In **Description (optional)**, add a description for your data source. It substitutes the data source name in the *Overview* tab in Data Sources. Select **Save** and choose **Import** in the top-right corner of the page. Import from an existing Google Sheets file via the Feed URL data source [#import-from-an-existing-google-sheets-file-via-the-feed-url-data-source] As an alternative to importing an existing file via the Google Sheets data source, you can import it using the *Feed URL* data source. This method may not be suitable for you if the file has private access rights and you don't want to change it to public. This method requires you to enable the *Viewer* rights for anyone who opens the link so that the platform can access the file. See [Share files from Google Drive](https://support.google.com/docs/answer/2494822?co=GENIE.Platform%3DDesktop\&hl=en) to learn how to change the rights. Go to **Data Sources** from your site's main menu, and select **Add data source**. Search for *Feed URL*, select **Add**, give it a name as desired, and then select **Continue**. Insert the link to your Google spreadsheet in **Source URL**. For example, you can copy it from the address bar of your browser: *[https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a\_A1a111aAaa1aA1Aaa1aA/edit?gid=0#gid=0](https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a_A1a111aAaa1aA1Aaa1aA/edit?gid=0#gid=0)*. Select **Save**. The platform detects that you want to upload a Google spreadsheet. It shows the *Google Spreadsheet Upload* pop-up, where you can see a changed format of your link, for example, \*[https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a\_A1a111aAaa1aA1Aaa1aA/export?format=csv\*.You](https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a_A1a111aAaa1aA1Aaa1aA/export?format=csv*.You) can now further set up the data source by choosing one of the following options: UUID-f3d263c0-ac15-ef9d-c520-b9aa77d29e94 1. **Upload as CSV file** is the basic option that imports your main sheet within the spreadsheet as a CSV file and ignores any other sheets. Use this option if you don't need to import a specific sheet or range of cells. 2. **Upload specific sheet** lets you import a desired sheet from your spreadsheet. If you select this option, go to the end of the link at the bottom of the pop-up and substitute `0` in the `gid` parameter with the unique ID of your desired sheet. To find the needed value of the `gid` parameter, which is a unique ID for the sheet defined by Google, go to the desired sheet in your Google spreadsheet, locate the `gid` parameter at the end of the link, and copy its value after the equals sign `=`. For example, to import data only from the sheet that has 111111111 in the `gid` parameter, change the link as follows: | From: | *[https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a\_A1a111aAaa1aA1Aaa1aA/export?format=csv\&gid=\`0\`](https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a_A1a111aAaa1aA1Aaa1aA/export?format=csv\&gid=`0`)* | | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | To: | *[https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a\_A1a111aAaa1aA1Aaa1aA/export?format=csv\&gid=\`111111111\`](https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a_A1a111aAaa1aA1Aaa1aA/export?format=csv\&gid=`111111111`)* | 3. **Limit to range** lets you import a desired cell range within the main or any other desired sheet in your spreadsheet. If you select this option, go to the end of the link at the bottom of the pop-up and do the following: 4. If your desired range is in the main sheet of the spreadsheet, add the needed cell range, such as `A3:C15`. UUID-e25150d6-0be2-13c4-0031-45249f9ba8d6 For example, if you want to import only from cells in the range from A3 to C15, change the link as follows: \| From: | *[https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a\_A1a111aAaa1aA1Aaa1aA/export?format=csv\&gid=0\&range=\`\{range}\`](https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a_A1a111aAaa1aA1Aaa1aA/export?format=csv\&gid=0\&range=`\{range}`)* | \| --- | --- | \| To: | *[https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a\_A1a111aAaa1aA1Aaa1aA/export?format=csv\&gid=0\&range=\`A3:C15\`](https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a_A1a111aAaa1aA1Aaa1aA/export?format=csv\&gid=0\&range=`A3:C15`)* | 5. If your desired range is in any other sheet of the spreadsheet, substitute `0` in the `gid` parameter with the unique ID of your desired sheet. Then, add the needed cell range. To find the needed value of the `gid` parameter, which is a unique ID for the sheet defined by Google, go to the desired sheet in your Google spreadsheet, locate the `gid` parameter at the end of the link, and copy its value after the equals sign `=`. For example, to import only from cells in the range from A3 to C15 in the sheet that has 111111111 in the `gid` parameter, change the link as follows: | From: | *[https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a\_A1a111aAaa1aA1Aaa1aA/export?format=csv\&gid=\`0\`\&range=\`\{range}\`](https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a_A1a111aAaa1aA1Aaa1aA/export?format=csv\&gid=`0`\&range=`\{range}`)* | | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | To: | *[https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a\_A1a111aAaa1aA1Aaa1aA/export?format=csv\&gid=\`111111111\`\&range=\`A3:C15\`](https://docs.google.com/spreadsheets/d/1aAaA11A1aaaaAa1A1aa11A1a_A1a111aAaa1aA1Aaa1aA/export?format=csv\&gid=`111111111`\&range=`A3:C15`)* | Choose **Select**. Create a new Google Sheets file via Productsup [#create-a-new-google-sheets-file-via-productsup] Go to **Data Sources** from your site's main menu and select **Add data source**. Search for *Google Sheets* and select **Add**. UUID-6e3d8361-c00f-583c-edd3-59c07229437c Edit the data source name if desired and select **Continue**. Select the **Generate a new spreadsheet** option. UUID-9b45c204-fc2a-9a45-8a04-a2467b10bf0e Before generating a spreadsheet, scroll down to the Authentication selection and choose your authentication: * Proceed with the pre-selected *Productsup Authentication* in the **Authentication selection** dropdown to let the platform create a Google Sheets file on Productsup’s own Google Drive. You will get a URL to the file where you can upload your data. If you select this option, continue with the [see the relevant section](#N1763130888372). The platform creates a Google Sheets file on Productsup's Google Drive with public access rights, accessible via a URL. This is necessary to let the platform import your data. * If you want the platform to create a Google Sheets file on your Google Drive, you need to provide access to your Google account. In **Authentication**, choose the Google authentication you previously set up in your organization, project, or site. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems). If you haven't set up Google authentication yet, perform the following steps: 1. Select **Add New Authentication**. A pop-up opens. 2. Select *Google Spreadsheets* in **Type**. You can optionally give your authentication a name. 3. Select **Next**. 4. Select **Connect**. Before proceeding, Productsup redirects you to Google to finalize your authentication. After completing the authentication setup, Google redirects you back to Productsup. 5. Close the confirmation pop-up to proceed. If, in the future, you decide to delete the Google Sheets data source from the platform, your data source file moves into the trash bin of your Google account.You can restore it if you have set up the authentication for your Google account. Select **Generate a new spreadsheet** in the *Source URL* section. UUID-a7df07fb-4d28-8635-bc81-65113445d8d3 > The created spreadsheet URL appears in the Source URL field. > UUID-576e619d-61c4-40b7-75e9-3e53d9304e0c Select **Open spreadsheet** to add your data to it. In **Description (optional)**, add a description for your data source. It substitutes the data source name in the *Overview* tab in Data Sources. Select **Save** and choose **Import** in the top-right corner of the page. Before you import the data, you can change the spreadsheet from which to import, if your file contains several tabs. See [Select a sheet from a spreadsheet created via Productsup](#section-idm35364968241733234). Select a sheet from a spreadsheet created via Productsup [#select-a-sheet-from-a-spreadsheet-created-via-productsup] If your Google Sheets file contains multiple sheets, you can specify which one you want to import. For now, if your have a multi-sheet file, you can choose which sheet to import only when you created a file via Producuctsup. If you import from an existing Google sheets, the platform imports only the first sheet and ignores the other sheets even if you change the selection. Go to **Data Sources** from your site's main menu, and select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the relevant data source. Choose the necessary sheet from the **Worksheet** dropdown. UUID-6b0d1bb8-f8a9-a63e-2f9b-18e8445df6f5 If the dropdown doesn't show all relevant sheets from your file, select **Save** at the bottom of the page and try again. Select **Save** and choose **Import** in the top-right corner of the page. Update a Google spreadsheet created via Productsup [#update-a-google-spreadsheet-created-via-productsup] Go to **Data Sources** from your site's main menu, and select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the relevant data source. Select **Open spreadsheet** and make the necessary updates. UUID-576e619d-61c4-40b7-75e9-3e53d9304e0c Alternatively, you can save or bookmark the link to the file and access it directly. If you are editing a particular attribute value in Google Sheets, ensure that you deselected the cell where you made the changes or move the selection area away from it. Google Sheets may not import your changes to Productsup from the cell where they were made if that cell is still highlighted as follows: UUID-0d93ac48-b730-70f8-9ce2-4c5aef08a3b3 # Import Excel files - advanced settings import { Step, Steps } from "fumadocs-ui/components/steps"; What is an Excel Spreadsheet and how do I import one? [#what-is-an-excel-spreadsheet-and-how-do-i-import-one] An Excel spreadsheet is a spreadsheet file format used by Microsoft Excel. It has an XLSX format. You can import your Excel files via URL or via a local upload. Import an XLSX spreadsheet [#import-an-xlsx-spreadsheet] If your file is created with the .xlsx extension, you will enable an additional setting to import it correctly. You can import XLSX spreadsheets via the Feed URL or local upload data source using the following steps: Go to **Data Sources** from your site's main menu. Set up your Feed URL or local upload data source. Select the settings wheel for your data source. Select the **Advanced Settings** tab. Select **I/O Settings**. Add the transform Excel (XLSX) to CSV option found under the available I/O settings section. UUID-dece7b7f-072b-058b-ba33-786cebc71531 Enter the name of the sheet you wish to import under the sheet name field. Select **Save**. # Import data from other Productsup sites import { Step, Steps } from "fumadocs-ui/components/steps"; Productsup lets you import data from another Productsup site using several options. For example, you could import data from a workaround site or Productsup aggregated data. Import an export file [#import-an-export-file] You can import a file you have set up for export in various formats, such as CSV, XML, and JSON. For information about how to export product feeds, see [Export data feeds](/docs/help-center/export-data-feeds). Import from Export to Data Source [#import-from-export-to-data-source] If you have chosen to create an Export to Data Source bucket, you can then import this data source using the following information: Go to **Data Sources** from your site's main menu, and select **ADD DATA SOURCE**. Then choose *Export to Data Source* and select **Add**. UUID-e509a440-44bf-8920-8fe1-da807c0e58e0 (Optional) Give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. Select the relevant bucket from the dropdown. If you don't see a list of existing buckets and haven't set one up in *Exports*, see [Set up a bucket destination](/docs/help-center/export-data-feeds/set-up-an-export-destination/set-up-a-bucket-destination). To include skipped items in the import, toggle **Allow skipped rows** to *On*. * When creating the bucket, ensure you toggled this option to *On* in the relevant export(s). To skip importing data that came from invalid sites, toggle **Clear invalid sites** to *On*. To remove platform-generated attributes from the import, toggle **Remove Passthru Columns** to *On*. In **Description (optional)**, add a description for your data source. It substitutes the data source name in the *Overview* tab in *Data Sources*. Select **Save** and select **Import** in the top-right corner of the page. UUID-7bdd77fd-228f-2472-ef1e-b510b526991d # Import data from an RSS feed import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Productsup lets you import data from an RSS feed. Set up an RSS data source [#set-up-an-rss-data-source] Productsup lets you import data from an RSS feed. Go to **Data Sources** from your site's main menu, and select **ADD DATA SOURCE**. Then choose *RSS* and select **Add**. UUID-d54d41d9-a892-a0d6-2322-278bbb15ea77 (Optional) Give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. Enter your RSS feed link in **Feed URL**. If your products are on several pages, add the following values: 1. In **Page Variable**, enter the URL parameter that determines the page value. For example, 1. `http://www.yournewsfeed.com/rss/xml?page=1` - In this example, the page value is `page`. 2. `http://www.letsfeedit.com/rss/xml?paginated=1` - In this example, the page value is `paginated`. 2. In **First Page Value**, enter the page where your RSS feed starts. 3. In **Last Page Value**, enter the page number where your RSS feed stops. Enter a file description in **Description (optional)**. The label you enter serves as the file's name in the platform. Select **Save**. UUID-feb357bc-85d6-bd51-5735-c0e4d9ce721f # Detect image metadata with the Image Properties Crawler import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Image Properties Crawler is a Productsup data service that gathers image metadata by crawling image links. The crawled metadata includes image type, height, width, file size, etc. A popular use case for the Image Properties Crawler is to check the availability of your image links based on the links' HTTP responses. To ensure your products don't use broken images, you can let the platform use the metadata gathered via this service to skip products with unreachable image links during export. See [Use the crawled image metadata](#section-idm455936999800483333767896903) for more information. The Image Properties Crawler service is available for the import and intermediate stages. When crawling the image links listed in one of your feed's columns, the Image Properties Crawler extracts image metadata from the HTML code of those pages. It creates an additional data source in your Productsup site to add and populate the following columns: * `___service_imagecrawler_url` duplicates the crawled image link for technical purposes. * `___service_imagecrawler_date` states the date of the last crawl in the Unix time format. * `___service_imagecrawler_http_code` displays the HTTP status code of the crawled link. * `___service_imagecrawler_width` contains the original image width. * `___service_imagecrawler_height` contains the original image height. * `___service_imagecrawler_mime` stores the image MIME type. * `___service_imagecrawler_content_type` displays the HTTP response with the content type of the crawled link. * `___service_imagecrawler_size_download` states the original image file size in bytes. * `___service_imagecrawler_total_time` shows how long it took the crawler to fetch the image. * `___service_imagecrawler_md5_url` contains the crawled URL encoded in MD5. * `___service_imagecrawler_md5_image` stores the image encoded in MD5. The Image Properties Crawler can slow down the performance of your Productsup site because it is a resource-intensive process. Prerequisites [#prerequisites] The Image Properties Crawler service is part of the *Crawler Module*, which is available at an additional cost in all platform editions. Contact your Customer Success Manager to discuss adding it to your organization. The Crawler Module contains the following features: * The [Data Crawler](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/crawl-product-landing-pages-with-the-data-crawler) data service * The [Web Crawler](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-web-data-with-website-crawler) data source * The Image Properties Crawler data service To set up the Image Properties Crawler data service, you need: . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. . The rights to the domain you want to crawl. You must be the owner of the crawled website. . A column in your feed that contains image URLs. The URLs must have no tracking parameters. Before running the Image Properties Crawler data service, you should discuss the specifics of your website's performance with your website admin to gather the information required for setting up the service. Find answers to these questions: . How many crawlers can access your website at a time? . What are your website's average and maximum response times? Add the Image Properties Crawler [#add-the-image-properties-crawler] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Image Properties Crawler*, select **Add**, and give it a desired name and column prefix.By default, `___service_imagecrawler` is the column prefix. UUID-aec73eba-aecb-c8ab-7429-593dc4051d33 Choose the stage containing the column with the crawled URLs in **Service Data Level** and select **Add**. Choose the column in your feed containing links to your landing pages in **Image URL attribute**.If you chose **Import** in [see the relevant section](#step-idm243333543151960), the drop-down list **Image URL attribute** displays the columns of your import stage. If you chose **Intermediate** in that field, the drop-down list contains your intermediate-stage columns. If you want to crawl multiple columns containing image links, you need to create a copy of your Productsup site and set up an Image Properties Crawler service in the copied site to crawl another link column. In **User Agent**, you can see the name the crawler uses to access your website. By default, the name is `Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20070802 SeaMonkey/1.1.4 (productsup.io/crawler)`. You can modify it as needed, for example, by adding a hash at the end of the crawler name for security reasons. Whitelist your Productsup crawler using the name specified in this field for your website not to block the crawler. In **Concurrent Crawlers**, choose the number of crawlers that can access your website simultaneously. By default, the number is `10`. If you engage more crawlers than your website can handle, the crawling process can run quicker but may cause website performance issues. In **Request Timeout (seconds)**, you can set how long the crawler should wait for a response from your website. The expected input format is a digit identifying the number of seconds.Use your website's maximum or average response time to enable the Image Properties Crawler service to run efficiently.By default, the crawler waits 10 seconds for a response before proceeding to a different link. Enter the number of days the Image Properties Crawler service should wait before recrawling a link in **Expires After (days)**. The expected input format is a digit identifying the number of days.The Image Properties Crawler service crawls all new or changed links in your URL column every time the site runs. The **Expires After (days)** field determines when the service should recrawl the links it has already crawled. You can enter `-1` in **Expires After (days)** to recrawl all image links every time your site runs in Productsup. If you want the platform to run the Image Properties Crawler service during every refresh in Data View, select the checkmark icon (**✔**) in **Trigger during a refresh in Data View**. Select **Save**. For the platform to process a new data service, select **Import** or **Run** in the top-right corner of your site's view. Once the Image Properties Crawler has started to run, you can't stop it. The first run of this service crawls all image links you have selected in [see the relevant section](#step-idm245000314727939), so it may take a while. The recommended time for the first run of the service is at night or at another time with low customer traffic on your website, which would minimize website performance issues.If you need to work in Data View during a crawl, you can speed up Data View loading times by minimizing the number of displayed products per page in the upper ribbon. If you can't see the columns the Image Properties Crawler added to your feed in Data View, ensure the platform hasn't hidden them: Go to **Data View** from your site's main menu and choose the relevant stage or export in the drop-down list on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the custom prefix `___service_imagecrawler` and select the eye icon next to each attribute you want Data View to display. Close the pop-up menu. The naming of the attributes created by the Image Properties Crawler data service depends on the column prefix you chose in [see the relevant section](#step-idm241666771575981). The attribute names the data service generates always start with three underscores (`___`), which means the platform doesn't send those attributes to your export channels. Use the crawled image metadata [#use-the-crawled-image-metadata] Once you map the new columns created by the crawler with the relevant columns of the subsequent stages in Dataflow, you can start working with the crawled data using rule boxes: * *Use Image Designer Template (limited)* - This rule box lets you apply Image Designer templates to the images in your feed. You can create different segments in Data View for different image sizes and use this rule box to apply different Image Designer templates to different segments. * *Skip Row If Value In* - This rule box lets you skip products with unwanted values during export. If applied to `___service_imagecrawler_http_code`, it can skip all products whose image links are unreachable. If applied to `___service_imagecrawler_height`, `___service_imagecrawler_width`, or `___service_imagecrawler_size_download`, it can skip products whose image heights, widths, or file sizes don't meet channel requirements. To skip products with unwanted images, you can: Create a system column on the export stage of Dataflow by adding three underscores (`___`) at the beginning of the column's name. Map a relevant column created by the Image Properties Crawler to the new export column. Apply the *Skip Row If Value In* rule box on the export stage. Your links may display a placeholder image for unavailable images, for example, containing the text *Image Not Found*. In this case, the crawler gets a positive HTTP status of the image link because the link works and contains an image, which means you can’t skip these placeholder images using the rule box *Skip Row If Value In* with column `___service_imagecrawler_http_code`. You also can't exclude such images based on their links because the links are most likely different each time.You can use the column `___service_imagecrawler_md5_image` to identify such cases: Go to **Data View** and select the needed stage in the drop-down list on the left. Find the column `___service_imagecrawler_md5_image` and select **Analyze**. Check if any values repeat in the *Distinct Values* section. Select a repeating value to see all products with the same image. Once you have identified the value that belongs to the unwanted placeholder image, go to the export stage containing the attribute you mapped to `___service_imagecrawler_md5_image` and apply the *Skip Row If Value In* rule box to that attribute. If you need help, contact [support@productsup.com](mailto:support@productsup.com). Edit the Image Properties Crawler data service [#edit-the-image-properties-crawler-data-service] Go to **Data Services** from your site's main menu. Search for your data service. Select the cogwheel icon (**⚙**) next to the desired data service to edit settings. Select **Save**. Delete the Image Properties Crawler data service [#delete-the-image-properties-crawler-data-service] Go to **Data Services** from your site's main menu. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Get weather information from the OpenWeatherMap service import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The OpenWeatherMap data service is a Productsup feature that lets you access the OpenWeather API to add current weather conditions or weather forecasts to your product feed. This data can help you customize images or export weather-relevant product offers. Using the location data in your product feed, the OpenWeatherMap data service retrieves location-relevant weather data. If you choose to retrieve a basic set of current weather details, the data service adds the following columns to your site: * `___open_weather_map_last_updated` shows a Unix timestamp of the last run of the data service. * `___open_weather_map_1_forecast_time` displays weather data creation time as a Unix timestamp. * `___open_weather_map_1_temp_avg` contains the current average temperature at the location. * `___open_weather_map_1_humidity` stores the current humidity percentage at the location. * `___open_weather_map_1_weather_main` gives a simple weather summary, such as `Clear` or `Snow`. * `___open_weather_map_1_clouds` provides the cloudiness percentage at the location. The OpenWeatherMap data service is available for the import and intermediate stages. Prerequisites [#prerequisites] To set up the OpenWeatherMap data service, you need: . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier). . A column in your feed containing location data to let the data service retrieve relevant weather data.This location data can have the following formats: 1. OpenWeatherMap city IDs. To find the needed city IDs, you can download a JSON file with all OpenWeatherMap city IDs. See [Built-in API request by city ID](https://openweathermap.org/current#cityid) to find the file link in the *Parameters* section. 2. City names and country abbreviations. Country abbreviations should consist of two (2) characters and follow the standard ISO 3166-1 alpha-2. 3. Postal codes and country abbreviations. Country abbreviations should consist of two (2) characters and follow the standard ISO 3166-1 alpha-2. 4. Latitude and longitude. . An API key to authenticate in the Weather API. You need to request or purchase it from OpenWeatherMap. See [Weather API](https://openweathermap.org/api). Add the OpenWeatherMap data service [#add-the-openweathermap-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *OpenWeatherMap*, select **Add**, and give it a desired name and column prefix.By default, `___open_weather_map` is the column prefix. UUID-eb492b4a-80ea-f3be-b24c-bce3c53eee75 Choose the stage containing your location data in **Service Data Level** and select **Add**.If you choose **Import**, the drop-down lists in [see the relevant section](#N1675438776477) display the columns of your import stage. If you choose **Intermediate** here, these drop-down lists display your intermediate-stage columns. In **API key**, enter your Weather API key. In **Forecast**, choose what type of weather data you want to import: 1. Current weather conditions. 2. A weather forecast for the next five (5) days. 3. A weather forecast for the next 16 days. In **Location type**, choose what type of location data you have in your feed.When you choose a specific type of location data, additional fields appear on the data service setup page as follows: | Location data type | Additional fields appear | Expected input | | ------------------------------------- | ------------------------------------------------------ | ------------------------------------------------ | | **OpenWeatherMap city id** | **OpenWeatherMap city ID column** | Select which column in your feed has city IDs. | | **City name & country abbreviation** | **City name column** | Select which column in your feed has city names. | | **Country column** | Select the column with country codes. | | | **Postal code & country** | **Postal code column** | Select the column with your postal codes. | | **Country column** | Choose which column contains country codes. | | | **Latitude & Longitude** | **Latitude column** | Choose the column with latitude data. | | **Longitude column** | Choose the column with longitude data. | | | **Number of cities around the point** | Enter the number of cities at the identified location. | | In **Weather data**, choose what data you want to retrieve: 1. **Basic** returns a simple weather description with temperature, humidity, and cloudiness information. 2. **All** returns all weather information available to the Weather API, such as day and night temperatures, minimum and maximum daily temperatures, morning and evening temperatures, atmospheric pressure, humidity, wind speed and direction, cloudiness, a simple weather description, and a detailed weather description. Select the desired metric system in **System of measurement** for the platform to use for all measurable weather data retrieved via the Weather API: * Metric * Imperial * International System of Units Text-based weather descriptions are available in a selection of languages. Select the desired option in **Language**. If you want the platform to run the data service every time there is a refresh in Data View, select the checkmark icon (**✔**) in **Trigger during a refresh of the Data View**. Select **Save**. For the platform to process a new data service, select **Import** or **Run** in the top-right corner of your site's view. If you can't see the columns that the OpenWeatherMap data service added to your feed in Data View, ensure the platform hasn't hidden them: Go to **Data View** from your site's main menu and choose the relevant stage or export in the drop-down list on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the custom prefix `___open_weather_map` and select the eye icon next to each attribute you want Data View to display. Close the pop-up menu. The naming of the attributes created by the OpenWeatherMap data service depends on the column prefix you chose in [see the relevant section](#step-idm243350680934672). The attribute names that the data service generates always start with three underscores (`___`), which means the platform doesn't send those attributes to your export channels. Edit the OpenWeatherMap data service [#edit-the-openweathermap-data-service] Go to **Data Services** from your site's main menu. Search for your data service. Select the cogwheel icon (**⚙**) next to the desired data service to edit settings. Select **Save**. Delete the OpenWeatherMap data service [#delete-the-openweathermap-data-service] Go to **Data Services** from your site's main menu. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Create unique IDs for your products with the Unique ID Generator import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Unique ID Generator is a Productsup data service that creates unique numerical IDs for products across your organization, project, or site. It compares the values in the unique item identifier column and creates an additional data source in your site to assign a numeric ID to each product with a unique item identifier value. If two products have the same unique item identifier value, they receive the same ID. The Unique ID Generator data service is available for the intermediate stage only. Prerequisites [#prerequisites] Make sure you have set a unique item identifier to use this data service. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. If one column can't determine the uniqueness of your products, you can set up a combination of columns as a unique item identifier. For example, use `title`, `color`, and `size` to establish product uniqueness instead of `title` only. The Unique ID Generator scans the values of all unique item identifier columns. Products with the same values across all unique item identifier columns receive the same IDs. Add the Unique ID Generator data service [#add-the-unique-id-generator-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Unique ID Generator* and select **Add**. UUID-c229b385-e92a-1ec6-ee13-5ce81ee672df Give it a desired name and column prefix and select **Add**.By default, `___service_uniqueid` is the column prefix. In **ID pool based on…**, choose the level within the platform that Productsup should scan for product uniqueness: * **Account** - Productsup assesses the uniqueness of all products in your organization. Each unique product in this organization gets a unique ID. If multiple sites have a product with the same unique item identifier value, such a product receives unique IDs each time it appears in the organization. * **Account (Distinct)** - Productsup assesses the uniqueness of all products in your organization. Each unique product in this organization gets a unique ID. If multiple sites have a product with the same unique item identifier value, such a product receives the same ID across all sites of the organization. * **Project** - Productsup assesses the uniqueness of all products in the chosen project. Each unique product in this project gets a unique ID. If multiple sites have a product with the same unique item identifier value, such a product receives unique IDs each time it appears in the project. * **Project (Distinct)** - Productsup assesses the uniqueness of all products in the chosen project. Each unique product in this project gets a unique ID. If multiple sites have a product with the same unique item identifier value, such a product receives the same ID across all sites in the project. * **Site** - Productsup assesses the uniqueness of all products in the chosen site. Each unique product in this site gets a unique ID. To use the options **Account**, **Account (Distinct)**, **Project**, and **Project (Distinct)**, add and set up the Unique ID Generator in all sites where you want to create unique IDs. The values selected in the drop-down menu **ID pool based on…** should be the same across all these sites. Select **Save**. For the platform to process a new data service, select **Import** or **Run** in the top-right corner of your site's view. If you can't see your unique IDs attribute in the intermediate stage in Data View, ensure the platform hasn't hidden that attribute: Go to **Data View** from your site's main menu and choose **Intermediate** in the drop-down list on your left. Select the hamburger icon on the right and then select the eye icon. Find the `___service_uniqueid_id` attribute in the list and select the eye icon next to it. Close the pop-up menu. The naming of the attributes created by the Unique ID Generator depends on the column prefix you chose in [see the relevant section](#N1659105964071). The attribute names the data service generates always start with three underscores (`___`), which means the platform doesn't send such attributes to your export channels. Edit the Unique ID Generator data service [#edit-the-unique-id-generator-data-service] Go to **Data Services** from your site's main menu. To deactivate a data service, choose the pause icon next to the desired data service. Select the cogwheel icon (**⚙**) next to the desired data service to edit other settings. Once ready with new settings, select **Save**. Delete the Unique ID Generator data service [#delete-the-unique-id-generator-data-service] Go to **Data Services** from your site's main menu. Select the cogwheel icon (**⚙**) next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Convert currencies with the Currency Conversion service import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Your multi-language feed may not always contain localized pricing for all covered countries with the right currencies. The Currency Conversion data service is a Productsup feature that lets you convert currencies in your feed using the latest exchange rates of [openexchangerates.org](https://openexchangerates.org/) to calculate your localized prices. Using the prices column in your feed and the input you provide in the setup, the Currency Conversion data service adds the following columns to your site: * `___currencyservice_updated_on` shows the date when the data service converted your prices. * `___currencyservice_rate_XXX_YYY` stores the conversion rate used to localize your prices, where *XXX* is a three-letter code of your source currency and *YYY* is a three-letter code of your target currency. * `___currencyservice_YYY` displays your converted price, with *YYY* being a three-letter code of your target currency. The Currency Conversion data service is available for the import and intermediate stages. Prerequisites [#prerequisites] To set up the Currency Conversion data service, you need: . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier). . An attribute in your site containing prices in the correct format.Your price attribute values should be in the format `10.00` or `10,00` and shouldn't contain any extra characters. If your current price values don't have the right format, you can add the **Make Valid Price** rule box. See [Work with prices & math](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/work-with-prices-math#section-idm234398698527426). Add the Currency Conversion data service [#add-the-currency-conversion-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Currency Conversion*, select **Add**, and give it a desired name and column prefix.By default, `___currencyservice` is the column prefix. UUID-c5090376-0cdc-e5dd-ddaf-ebd576f0fa30 Choose the stage containing your product prices in **Service Data Level** and select **Add**. In **Currency attribute**, select the attribute with the prices you want to convert. In **Currency**, choose the currency used in your prices now. In the **Exchange currency** selection area, choose the target currency. Hold the *CTRL* or *CMD* key to select multiple currencies. Define how precise the price should be by entering the number of the decimal place to the right of the decimal point in **Precision**.For example, if you enter `2` in this field, the data service imports the converted prices with two (2) digits after the decimal point, for example, 10.15 and 24.88. Select **Save**. For the platform to process a new data service, select **Import** or **Run** in the top-right corner of your site's view. If you can't see the columns that the Currency Conversion data service added to your feed in Data View, ensure the platform hasn't hidden them: Go to **Data View** from your site's main menu and choose the relevant stage or export in the drop-down list on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the custom prefix `___currencyservice` and select the eye icon next to each attribute you want Data View to display. Close the pop-up menu. The naming of the attributes created by the Currency Conversion data service depends on the column prefix you chose in [see the relevant section](#step-idm243357797299674). The attribute names the data service generates always start with three underscores (`___`), which means the platform doesn't send those attributes to your export channels. Edit the Currency Conversion data service [#edit-the-currency-conversion-data-service] Go to **Data Services** from your site's main menu. Search for your data service. Select the cogwheel icon (**⚙**) next to the desired data service to edit settings. Select **Save**. Delete the Currency Conversion data service [#delete-the-currency-conversion-data-service] Go to **Data Services** from your site's main menu. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Create unique IDs for categories with the Category ID Generator import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Category ID Generator data service is available for the intermediate stage only. The Category ID Generator is a data service in Productsup that creates unique IDs for product categories and category paths across an organization, project, or site. This data service scans your category attribute, identifies the delimiter used in the attribute, and creates an additional data source in your site to add and populate five (5) new columns: * `___service_categoryid_pathids` * `___service_categoryid_id` * `___service_categoryid_path` * `___service_categoryid_last` * `___service_categoryid_hash` These columns let the platform: . Assign each category a unique ID. . Break each category down into category levels. . Assign each category path a unique ID based on the category levels it contains. Applying the Category ID Generator service looks similar to this: | Category path | Category hash | Category path ID | Category ID | Last category level | | -------------------------------------------------- | ----------------------------------------------- | ---------------- | ----------- | ------------------- | | Clothes -> Homewear -> Home shoes -> Slippers | Clothes ->Homewear ->Home shoes ->Slippers | 1>2>3>4 | 4 | Slippers | | Clothes -> Accessories -> Socks | Clothes ->Accessories ->Socks | 1>9>10 | 10 | Socks | | Clothes -> Homewear -> Sleeping clothes -> Pajamas | Clothes ->Homewear ->Sleeping clothes ->Pajamas | 1>2>22>23 | 23 | Pajamas | Your current category path is in the *Category path* column. A simplified version of it is in the *Category hash* column, which contains a technical value needed for the data service to complete its tasks. The *Category path ID* column combines IDs of different category levels into one category path ID. The *Last category level* column has the last category level of the path and usually determines the category ID shown in the *Category ID* column. The column names in this example don't coincide with those in Productsup. These are simplified column names. The names of your columns depend on the column prefix you choose during the data service setup. Prerequisites [#prerequisites] Make sure you have set a unique item identifier to use this data service. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. Add the Category ID Generator data service [#add-the-category-id-generator-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Category ID Generator*, select **Add**, give it a desired name and column prefix, and select **Add**.By default, `___service_categoryid` is the column prefix. UUID-3fb5d7c9-8474-f374-bf6a-0012c672c201 Select the attribute that contains your products' categories in **Category Column**. In **ID pool based on…**, choose the level within the platform that Productsup should scan for categories: * **Account** - Productsup assesses the uniqueness of all categories in your organization. Each unique category in this organization gets a unique ID. If multiple sites have a category with the same data, such a category receives unique IDs each time it appears in the organization. * **Account (Distinct)** - Productsup assesses the uniqueness of all categories in your organization. Each unique category in this organization gets a unique ID. If multiple sites have a category with the same data, such a category receives the same ID across all sites of the organization. * **Project** - Productsup assesses the uniqueness of all categories in the chosen project. Each unique category in this project gets a unique ID. If multiple sites have a category with the same data, such a category receives unique IDs each time it appears in the project. * **Project (Distinct)** - Productsup assesses the uniqueness of all categories in the chosen project. Each unique category in this project gets a unique ID. If multiple sites have a category with the same data, such a category receives the same ID across all sites in the project. * **Site** - Productsup assesses the uniqueness of all categories in the chosen site. Each unique category in this site gets a unique ID. To use the options **Account**, **Account (Distinct)**, **Project**, and **Project (Distinct)**, add and set up the Category ID Generator in all sites where you want to create unique category IDs. The items selected in the drop-down menu **ID pool based on…** should be the same across all these sites. In **Tree Separator**, enter the symbol that should separate levels within your category paths. The default separator is `>`. Select **Save**. For the platform to process a new data service, select **Run** in the top-right corner of your site's view. If you can't see your new category IDs in the intermediate stage in Data View, ensure the platform hasn't hidden them: Go to **Data View** from your site's main menu and choose the relevant stage or export in the drop-down list on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the custom prefix `___service_categoryid` and select the eye icon next to each attribute you want Data View to display. Close the pop-up menu. The naming of the attributes created by the Category ID Generator depends on the column prefix you choose in [see the relevant section](#step-idm241659346180691). The attribute names the data service generates always start with three underscores (`___`), which means the platform doesn't send such attributes to your export channels. Edit the Category ID Generator data service [#edit-the-category-id-generator-data-service] Go to **Data Services** from your site's main menu. Search for your data service. Select the cogwheel icon (**⚙**) next to the desired data service to edit settings. Select **Save**. Delete the Category ID Generator data service [#delete-the-category-id-generator-data-service] Go to **Data Services** from your site's main menu. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Enhance your import data through Data Services import { Callout } from "fumadocs-ui/components/callout"; Introduction [#introduction] A Productsup data service is a tool that lets you enhance and restructure your data feed using the Data Services feature. This section covers the data services that let you enhance your data feed with additional data. See [Restructure your data in Data Services](/docs/help-center/map-and-optimize-your-data/data-services) for more information on the data services that let you restructure and optimize your data. Some data services are available at an additional cost in all platform Editions. If you are unsure whether the desired data service is free, reach out to your Customer Success Manager or contact [support@productsup.com](mailto:support@productsup.com). All Productsup data services fall into one of the following categories: * *ID Generators* enhance your items with attributes containing unique product or category IDs. * *Crawlers* let you crawl your item or image URLs to extract additional item data or image properties and add them to your site. * *Merge/Split Feed* lets you manage product variants by splitting an item into multiple product variants or merging multiple product variants into one item. * *Implode/Explode/Group Columns* lets you manage your attributes by merging and splitting them. They also help you transform your attribute values to enhance the feed with more data. * *Exclude Rows from Import* removes duplicate products from your feed based on product IDs. * *Travel Services* enrich your feed with geographical data and information related to weather and travel. * *Pricing* lets you add price comparison data to your feed. * *AI Services* use machine learning to transform or enrich your data by, for example, removing image backgrounds or predicting product categories. Productsup data services that enhance your data feed use your website pages or third-party services, such as Google Translate, Amazon Selling Partner API, and OpenWeatherMap, to add new data to your data feed. Prerequisites [#prerequisites] All data services require you to: * Add a unique item identifier in your site. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. The rest of the prerequisites are individual to each data service. You can see the relevant prerequisites in a document dedicated to the data service of your interest. Arrange the processing order of your data services [#arrange-the-processing-order-of-your-data-services] You can add multiple data services of different types to a site. In most cases, you can also add multiple data services of the same type to a site unless otherwise specified in a dedicated data service document. Once you have added multiple data services to a site, you can adjust their processing order in Data Services by dragging and dropping. The platform executes data services in the order arranged by the data services list found in Data Services. * If one of your data services uses the output data of another data service, ensure to have the dependent data service lower on the list. The platform should execute the source data service first. * You can't change the stage where the platform executes a data service by dragging and dropping. You must edit the settings of a data service to do so. # Fetch Google Maps information with the Google Places data service import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Google Places is a Productsup data service that lets you enhance your product feed with additional details about relevant businesses. For example, your product feed contains a business's name, city, and country as follows: | Business name | Business city | Business country | | ------------- | ------------- | ---------------- | | Productsup | Berlin | Germany | Using this info and the Google Places data service, you can fetch data about this business from Google Maps and enhance your feed with new info, such as: | Address | Phone number | Rating | Website | Geolocation | | ------------------------------------- | ------------ | ------ | -------------------------------------------- | ------------------------------------- | | Alex-Wedding-Straße 5-7, 10178 Berlin | 03060985355 | 4.8 | [productsup.com](http://www.productsup.com/) | 52.52512574270143, 13.414928446031048 | The Google Places service is available for the import and intermediate stages. After scanning your product feed and identifying the businesses mentioned in your relevant columns, the Google Places data service extends your feed with additional business information. You can control how much information the platform adds with the **Output Mode** setting: * *Full Details* adds all available business information across 13 columns. * *Place ID Only* adds just the business's Google Place ID. This mode is useful when you only need the identifier, and it uses fewer Google Places API calls. In *Full Details* mode, the data service adds the following 13 columns: * `___google_places_google_id` stores the business ID that Google Maps use to identify businesses. * `___google_places_google_name` stores the name of the business as stated on Google Maps. * `___google_places_place_id` contains the ID of the business's location. * `___google_places_formatted_phone_number` shows the business's phone number in the local format. * `___google_places_formatted_address` displays the business's full address. * `___google_places_lat` stores the latitude data of the business's location. * `___google_places_lng` stores the longitude data of the business's location. * `___google_places_international_phone_number` shows the business's phone number in the international format. * `___google_places_website` contains a link to the business's website. * `___google_places_url` contains a link to the business's location on Google Maps. * `___google_places_rating` displays the business's rating as stated on Google Maps. * `___google_places_types` shows tags describing the type of this business. For example, `bar`, `restaurant`, `lodging`, etc. * `___google_places_date` stores the date of the last data service run. In *Place ID Only* mode, the data service adds the following two columns: * `___google_places_place_id` contains the ID of the business's location. * `___google_places_date` stores the date of the last data service run. Prerequisites [#prerequisites] To set up the Google Places data service, you need the following: . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. . An API key to let you use the Google Places API. See [Use API keys with Places API](https://developers.google.com/maps/documentation/places/web-service/get-api-key?hl=en) and [Product details - Places API](https://console.cloud.google.com/marketplace/product/google/places-backend.googleapis.com). . A column in your feed that contains the name of the business. You can optionally provide columns for the business's city and country to improve the accuracy of the results. Add Google Places data service [#add-google-places-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Google Places*, select **Add**, and give it a desired name and column prefix.By default, `___google_places` is the column prefix. UUID-06363492-da2e-40c3-a7f3-bdf67d0d8278 Choose the stage containing the columns with the needed business info in **Service Data Level** and select **Add**. In **API Key**, enter your authentication key to use the Google Places API. Choose the column containing the business name in **Name Column**. You can optionally select columns for the business's city and country in **City Column** and **Country Column** to improve the accuracy of the results.If you chose **Import** in [see the relevant section](#step-idm243341873144006), these drop-down lists display the columns of your import stage. If you chose **Intermediate** in that field, the drop-down lists contain your intermediate-stage columns. Choose how much information the platform adds to your feed in **Output Mode**. Select *Full Details* to add all available business information, or *Place ID Only* to add just the business's Google Place ID. By default, *Full Details* is selected. Select the checkmark icon (**✔**) in **Use Cache** to let the data service run only for those products that had changes in their business name, city, or country columns since the last site run. By default, this option is off. Select the checkmark icon (**✔**) in **Trigger during a refresh in Data View** to let the platform run the Google Places data service every time there is a refresh in Data View. By default, this option is off. Select **Save**. For the platform to process a new data service, select **Run** in the top-right corner of your site's view. If you can't see the columns the Google Places service added to your feed in Data View, ensure the platform hasn't hidden them: Go to **Data View** from your site's main menu and choose the relevant stage or export in the drop-down list on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the custom prefix `___google_places` and select the eye icon next to each attribute you want Data View to display. Close the pop-up menu. The naming of the attributes created by the Google Places data service depends on the column prefix you chose in [see the relevant section](#step-idm243341873115434). The attribute names the data service generates always start with three underscores (`___`), which means the platform doesn't send those attributes to your export channels. Edit the Google Places data service [#edit-the-google-places-data-service] Go to **Data Services** from your site's main menu. Search for your data service. Select the cogwheel icon (**⚙**) next to the desired data service to edit settings. Select **Save**. Delete the Google Places data service [#delete-the-google-places-data-service] Go to **Data Services** from your site's main menu. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Import prices from Amazon with the Amazon Product Pricing data service import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] You can use the Amazon Product Pricing data service to import all prices offered on Amazon for each SKU or ASIN in your Productsup site and accompany the imported prices with information about the corresponding sellers, currencies, and errors. In Dataflow, you can see the prices sorted from lowest to highest. The Amazon Product Pricing data service is available for the import and intermediate stages. The Amazon Product Pricing data service scans your ASIN or SKU attribute and creates an additional data source in your Productsup site to add six (6) new attributes in your site: . `___amzn_price_sku_item_type` shows whether Productsup imported prices based on your products' ASIN or SKU values. . `___amzn_price_sku_item_code` duplicates the values of the ASIN or SKU attribute to identify products on Amazon. . `___amzn_price_sku_currency` contains the currency of the product price imported from Amazon. . `___amzn_price_sku_price` contains the lowest price of a product imported from Amazon. . `___amzn_price_sku_seller_id` identifies the seller that uses the imported price to sell this product on Amazon. . `___amzn_price_sku_errors` shows error codes in case of problems with data import. Prerequisites [#prerequisites] To use the Amazon Product Pricing data service, you need: . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. . An attribute in your site containing ASIN or SKU data to let Productsup identify your products on Amazon and fetch their prices.ASIN stands for Amazon Standard Identification Number, while SKU means Stock Keeping Unit. Add the Amazon Product Pricing data service [#add-the-amazon-product-pricing-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Amazon Product Pricing*, select **Add**, and give it a desired name and column prefix.By default, `___amzn_price` is the column prefix. UUID-5af22398-ee1d-b521-2b1e-ffe22d58e319 Choose the stage where you have your ASIN or SKU values in **Service Data Level** and select **Add**. In **Attribute type**, choose whether you want to use ASIN or SKU values to identify products on Amazon. In **ASIN or SKU attribute**, choose the attribute in your feed that contains your ASIN or SKU values. If you chose **Import** in [see the relevant section](#N1659978953619), the **ASIN or SKU attribute** drop-down list displays the attributes of your import stage. If you chose **Intermediate** in that field, the drop-down list contains your intermediate-stage attributes. Select your market of interest in **Marketplace**. In **Product condition**, choose what products you want to fetch prices for: * *New* * *Used* * *Collectible* * *Refurbished* * *Club* In **Select authentication**, choose the Amazon authentication you previously set up in your organization, project, or site. If you haven't set up Amazon authentication yet, perform the following steps: 1. Select **Add New Authentication**. 2. Select *Amazon Authentication (BETA version by Amazon)* in **Type**. You can optionally give your authentication a name. 3. Select **Next**. 4. If applicable, select **Region** and **Country** to choose your marketplace country and locale. 5. Select **Connect** to continue. Before proceeding, Productsup directs you to Amazon to finalize your authentication. After completing the authentication setup, Amazon redirects you back to Productsup. 6. Close the confirmation window to proceed. Enter the number of days the data service should wait before fetching prices again in **Expires after (days)**. The expected input format is a digit identifying the number of days. * Enter `-1` to let the platform import prices for all products during every site run. This option can increase your site processing times. * Enter `0` to let the platform import prices only for new products in your feed. This option has the least impact on your site processing times. * Enter any number greater than zero (0) to let the platform import prices for all products in your feed during a site run if the entered number of days has passed since the last pricing import. Select **Save**. For the platform to process a new data service, select **Run** in the top-right corner of your site's view. If you can't see your new pricing data in Data View, ensure the platform hasn't hidden it: Go to **Data View** from your site's main menu and choose the relevant stage or export in the drop-down list on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the custom prefix `___amzn_price` and select the eye icon next to each attribute you want Data View to display. Close the pop-up menu. The naming of the attributes created by the Amazon Product Pricing data service depends on the column prefix you choose in [see the relevant section](#step-idm241659978198632). The attribute names the data service generates always start with three underscores (`___`), which means the platform doesn't send such attributes to your export channels. Edit the Amazon Product Pricing data service [#edit-the-amazon-product-pricing-data-service] Go to **Data Services** from your site's main menu. Search for your data service. Select the cogwheel icon (**⚙**) next to the desired data service to edit settings. Select **Save**. Delete the Amazon Product Pricing data service [#delete-the-amazon-product-pricing-data-service] Go to **Data Services** from your site's main menu. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Crawl product landing pages with the Data Crawler import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Data Crawler is a Productsup data service designed for crawling your products' landing pages to enhance your product feed with additional data that you don't have in any other data sources. The Data Crawler service is available for the import and intermediate stages. When crawling the product links listed in one of your feed's columns, the Data Crawler extracts HTML code from those product pages and creates an additional data source in your Productsup site to add and populate the following new columns: * `___service_datacrawler_url` contains the URL of the crawled page. * `___service_datacrawler_data` stores the source HTML code extracted from the crawled page. * `___service_datacrawler_date` displays the date of the last crawl. * `___service_datacrawler_http_code` shows the HTTP status of the crawled page. * `___service_datacrawler_content_type` contains the encoding of the page, such as HTML or UTF-8. * `___service_datacrawler_size_download` displays the size of the file with the extracted code. * `___service_datacrawler_total_time` shows how much time it took to crawl the page. * `___service_datacrawler_md5_url` contains the crawled URL encoded in MD5. The Data Crawler can slow down the performance of your Productsup site because it is a resource-intensive process. Once the platform runs the Data Crawler service and populates these columns, you should extract your product data from the crawled HTML code by applying rule boxes in Data View or Dataflow. See [Work with HTML](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/work-with-html) for more information. Prerequisites [#prerequisites] The Data Crawler service is part of the *Crawler Module*, which is available at an additional cost in all platform editions. Contact [support@productsup.com](mailto:support@productsup.com) to discuss adding it to your organization. The Crawler Module contains the following features: * The Data Crawler data service * The [Web Crawler](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-web-data-with-website-crawler) data source * The [Image Properties Crawler](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/detect-image-metadata-with-the-image-properties-crawler) data service To set up the Data Crawler data service, you need: . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. . The rights to the domain you want to crawl. You must be the owner of the crawled website. . A column in your feed that contains product URLs. The URLs must have no tracking parameters. Before running the Data Crawler data service, you should discuss the specifics of your website's performance with your website admin to gather the information required for setting up the Data Crawler. Find answers to these questions: . How many crawlers can access your website at a time? . What are your website's average and maximum response times? . Do the crawled pages require authentication? If yes, you need the HTTP username and password for the crawler to access the pages. Add the Data Crawler service [#add-the-data-crawler-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Data Crawler*, select **Add**, and give it a desired name and column prefix.By default, `___service_datacrawler` is the column prefix. UUID-52a9091d-a8da-28d2-7f65-7d2725d5486f Choose the stage containing the column with the crawled URLs in **Service Data Level** and select **Add**. Choose the column in your feed that contains the links to your landing pages in **URL attribute**.If you chose **Import** in [see the relevant section](#step-idm243320457109980), the **URL attribute** drop-down list displays the columns of your import stage. If you chose **Intermediate** in that field, the drop-down list contains your intermediate-stage columns. If you want to crawl multiple columns containing product links, you need to create a copy of your Productsup site and set up a Data Crawler service in the copied site to crawl another link column. In **User Agent**, you can see the name the crawler uses to access your website. By default, the name is `Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.6) Gecko/20070802 SeaMonkey/1.1.4 (productsup.io/crawler)`. You can modify it as needed, for example, by adding a hash at the end of the crawler name for security reasons. Whitelist your Productsup crawler using the name specified in this field for your website not to block the crawler. In **Concurrent Crawlers**, choose the number of crawlers that can access your website simultaneously. By default, the number is `10`. If you engage more crawlers than your website can handle, the crawling process can run quicker but may cause website performance issues. In **Request Timeout (seconds)**, you can set how long the crawler should wait for a response from your website. The expected input format is a digit identifying the number of seconds.Use your website's maximum or average response time to enable the Data Crawler service to run efficiently.By default, the crawler waits 10 seconds for a response before proceeding to a different link. Enter the number of days the Data Crawler service should wait before recrawling a link in **Expires After (days)**. The expected input format is a digit identifying the number of days.The Data Crawler service crawls all new or changed links in your URL attribute every time the site runs. The **Expires After (days)** field determines when the service should recrawl the links it has already crawled. You can enter `-1` in **Expires After (days)** to recrawl all product links every time your site runs in Productsup. This tip is helpful for fast-changing product data, such as prices or availability. If you want to reduce the amount of space required to store the crawled HTML code, select the checkmark icon (**✔**) in **Save data compressed (for big data/HTML sites)**.If you use this option, you need to use the rule boxes HTML getElementById, HTML getElementByTagName, or HTML getElementByXpath to extract data from the compressed code before using split string and regex rule boxes. See [Work with HTML](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/work-with-html) for more information. If you want the platform to run the Data Crawler service during every refresh in Data View, select the checkmark icon (**✔**) in **Trigger during a refresh in Data View**. To crawl websites protected by basic authentication, add your authentication data in **HTTP Username** and **HTTP Password**. For example, you need to fill out these fields if you want to crawl your staging environment. In the **Permissions** panel, check the box **I hereby confirm that Productsup is permitted to crawl the aforementioned pages.** to verify that you, as the owner of the crawled website, give Productsup permission to crawl the selected links. Select **Save**. For the platform to process a new data service, select **Run** in the top-right corner of your site's view. Once the Data Crawler has started to run, you can't stop it. The first run of this service crawls all product links you have selected in [see the relevant section](#N1660302872315), so it may take a while. The recommended time for the first run of the service is at night or at another time with low customer traffic on your product pages, which would minimize website performance issues. If you can't see the columns the Data Crawler added to your feed in Data View, ensure the platform hasn't hidden them: Go to **Data View** from your site's main menu and choose the relevant stage or export in the drop-down list on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the custom prefix `___service_datacrawler` and select the eye icon next to each attribute you want Data View to display. Close the pop-up menu. The naming of the attributes created by the Data Crawler data service depends on the column prefix you chose in [see the relevant section](#step-idm241660228554991). The attribute names the data service generates always start with three underscores (`___`), which means the platform doesn't send those attributes to your export channels. Edit the Data Crawler service [#edit-the-data-crawler-service] Go to **Data Services** from your site's main menu. Search for your data service. Select the cogwheel icon (**⚙**) next to the desired data service to edit settings. Select **Save**. Delete the Data Crawler service [#delete-the-data-crawler-service] Go to **Data Services** from your site's main menu. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Add longitude and latitude with the Geolocation service import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] If you have location information in your product feed, you can use the Geolocation data service to enhance it with latitude and longitude data. The Geolocation data service is available for the import and intermediate stages. The Geolocation data service scans your address column and creates an additional data source in your Productsup site to add four (4) new columns containing latitude and longitude data: . `___geolocation_title` is a duplicate of your address column. . `___geolocation_latitude` contains your latitude data. . `___geolocation_longitude` contains your longitude data. . `___geolocation_next_try_date` determines when the platform should send the next request to the Geolocation API in case an address returned an error in the previous run. Prerequisites [#prerequisites] To use the Geolocation data service, you need: . An [API Key](https://developers.google.com/maps/documentation/geolocation/get-api-key?hl=en) for the Google Geolocation API. . Location data in the correct format. Your addresses must use the same format as the national postal service of the country in question. Separate your street address elements with spaces and, if applicable, avoid providing such info as business names and floor numbers. For example, here is a German address using the German postal service format delimited by spaces: *Alex-Wedding-Straße 5 10178 Berlin*.See [Geocoding request and response](https://developers.google.com/maps/documentation/geocoding/requests-geocoding?hl=en) for more information. . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. Add the Geolocation data service [#add-the-geolocation-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Geolocation*, select **Add**, and give it a desired name and column prefix.By default, `___geolocation` is the column prefix. UUID-cab19572-129c-d97d-668d-b318abeb618a Choose the stage where you have your location data in **Service Data Level** and select **Add**. Add your authentication data for the Google Geolocation API in **API Key**. Choose the column in your feed that contains your address data in **Address column**. If you chose **Import** in [see the relevant section](#N1659978953619), the **Address column** drop-down list displays the columns of your import stage. If you chose **Intermediate** in that field, the drop-down list contains your intermediate-stage columns. If you want the platform to run the Geolocation data service every time there is a refresh in Data View, select the checkmark icon (**✔**) in **Trigger during a refresh in Data View**. Select **Save**. For the platform to process a new data service, select **Run** in the top-right corner of your site's view. If you can't see your new geolocation data in Data View, ensure the platform hasn't hidden it: Go to **Data View** from your site's main menu and choose the relevant stage or export in the dropdown on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the custom prefix `___geolocation` and select the eye icon next to each attribute you want Data View to display. Close the pop-up. The naming of the attributes created by the Geolocation data service depends on the column prefix you choose in [see the relevant section](#step-idm241659978198632). The attribute names the data service generates always start with three underscores (`___`), which means the platform doesn't send such attributes to your export channels. Edit the Geolocation data service [#edit-the-geolocation-data-service] Go to **Data Services** from your site's main menu. Search for your data service. Select the cogwheel icon (**⚙**) next to the desired data service to edit settings. Select **Save**. Delete the Geolocation data service [#delete-the-geolocation-data-service] Go to **Data Services** from your site's main menu. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Enhance your feed with Tripadvisor ratings import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] *Trip Advisor - Ratings* is a Productsup data service that lets you add Tripadvisor rating details to your data about hotels, restaurants, and other similar business entities. After scanning the relevant column in your product feed and locating the needed ratings on Tripadvisor, the data service *Trip Advisor - Ratings* adds the following columns to your site: * `___trip_advisor_id` copies the values of your Tripadvisor entity IDs column for technical reasons. * `___trip_advisor_rating` contains the output ratings information. The data service *Trip Advisor - Ratings* is available for the import and intermediate stages. Prerequisites [#prerequisites] To set up the data service *Trip Advisor - Ratings*, you need: . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. . A column in your feed containing Tripadvisor entity IDs of the businesses whose rating details you want to retrieve. . An API key to authenticate in the Tripadvisor Content API. See [Tripadvisor Content Solutions](https://www.tripadvisor.com/developers). Add the data service Trip Advisor - Ratings [#add-the-data-service-trip-advisor---ratings] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Trip Advisor - Ratings*, select **Add**, and give it a desired name and column prefix.By default, `___trip_advisor` is the column prefix. UUID-60a66de3-5799-5240-05d9-0cc7717cf487 Choose the stage containing your Tripadvisor entity IDs in **Service Data Level** and select **Add**. In **TripAdvisor ID Column**, select the column with your Tripadvisor entity IDs.If you chose **Import** in [see the relevant section](#step-idm243349494852100), the drop-down list **TripAdvisor ID Column** displays the columns of your import stage. If you chose **Intermediate** in that field, the drop-down list contains your intermediate-stage columns. In **TripAdvisor API Key**, enter your Tripadvisor Content API key. If you want the platform to run the data service *Trip Advisor - Ratings* every time there is a refresh in Data View, select the checkmark icon (**✔**) in **Trigger during a refresh in Data View**. Select **Save**. For the platform to process a new data service, select **Import** or **Run** in the top-right corner of your site's view. If you can't see the columns that the data service *Trip Advisor - Ratings* added to your feed in Data View, ensure the platform hasn't hidden them: Go to **Data View** from your site's main menu and choose the relevant stage or export in the drop-down list on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the custom prefix `___trip_advisor` and select the eye icon next to each attribute you want Data View to display. Close the pop-up menu. The naming of the attributes created by the data service *Trip Advisor - Ratings* depends on the column prefix you chose in [see the relevant section](#step-idm243349495709868). The attribute names the data service generates always start with three underscores (`___`), which means the platform doesn't send those attributes to your export channels. Edit the data service Trip Advisor - Ratings [#edit-the-data-service-trip-advisor---ratings] Go to **Data Services** from your site's main menu. Search for your data service. Select the cogwheel icon (**⚙**) next to the desired data service to edit settings. Select **Save**. Delete the data service Trip Advisor - Ratings [#delete-the-data-service-trip-advisor---ratings] Go to **Data Services** from your site's main menu. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Fetch competitor pricing with the Price API service import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Price API data service is a Productsup feature that lets you gain insight into your competitors' pricing using the Price API. With this data, you can make your pricing more competitive and optimize your assortment. You can get competitors' pricing data from sources like Amazon, eBay, Google Shopping, etc. The list of available pricing sources depends on the country of your choice. The Price API data service is available for the import and intermediate stages. Prerequisites [#prerequisites] To set up the Price API data service, you need: . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier). . A column in your feed containing product keys to identify the needed products on your chosen pricing source, such as eBay, Amazon, Google Shopping, etc.A product key can be: 1. An ID. 2. A product title. 3. A GTIN. . An API key to authenticate in the Price API. See [Price API subscription plans](https://www.priceapi.com/en/price/plans/) to request or purchase it. Add the Price API data service [#add-the-price-api-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Price API*, select **Add**, and give it a desired name and column prefix.By default, `___priceapi` is the column prefix. UUID-c0f9d7a7-a3eb-38b4-fcba-5fef80692c8b Choose the stage containing your product keys in **Service Data Level** and select **Add**. In **Token**, enter your Price API key to let the data service access the API. In **Country**, select what country's pricing data you want the data service to fetch. In **Source**, choose the channel where you want to get your competitors' pricing data. The selection in this drop-down menu depends on what you chose in [see the relevant section](#N1678884197991). Select the type of your product keys in **Product Key**. Choose the column in your feed containing the product keys in **Product Key Column**.If you chose **Import** in [see the relevant section](#step-idm243357758130188), this drop-down list displays the columns of your import stage. If you chose **Intermediate** in that field, the drop-down list contains your intermediate-stage columns. In **Max Pages**, set the number of result pages with pricing data that the data service should retrieve. In **Max Age**, define how old the fetched pricing data can be. The expected input format is a digit or a set of digits reflecting the number of minutes a price has been live on the channel. If you want the platform to run the data service every time there is a refresh in Data View, select the checkmark icon (**✔**) in **Trigger during a refresh of the Data View**. Select **Save**. For the platform to process a new data service, select **Import** or **Run** in the top-right corner of your site's view. If you can't see the columns that the Price API data service added to your feed in Data View, ensure the platform hasn't hidden them: Go to **Data View** from your site's main menu and choose the relevant stage or export in the drop-down list on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the custom prefix `___priceapi` and select the eye icon next to each attribute you want Data View to display. Close the pop-up menu. The naming of the attributes created by the Price API data service depends on the column prefix you chose in [see the relevant section](#step-idm243357757670008). The attribute names that the data service generates always start with three underscores (`___`), which means the platform doesn't send those attributes to your export channels. Edit the Price API data service [#edit-the-price-api-data-service] Go to **Data Services** from your site's main menu. Search for your data service. Select the cogwheel icon (**⚙**) next to the desired data service to edit settings. Select **Save**. Delete the Price API data service [#delete-the-price-api-data-service] Go to **Data Services** from your site's main menu. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Rank items with the Product Marker data service import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The *Product Marker* data service is a Productsup feature that lets you rank items in your site based on a specific attribute. For example, you can use the *Product Marker* data service to identify the three most ordered items in your feed. Optionally, you can identify those most ordered items within each category if you choose a grouping attribute in the data service setup. The *Product Marker* data service can also count the number of parts in an attribute value that is split with a delimiter and identify which items in your feed have the highest or lowest number of parts in a value. Once the data service finishes processing, it creates a new attribute in your site containing the ranking results. The *Product Marker* data service is available for the import and intermediate stages. Prerequisites [#prerequisites] To use the *Product Marker* data service, you need: . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. . A ranking attribute in your feed that contains one of these value types: 1. Numeric values. In this case, the data service compares numbers across different items and marks the item with the highest or lowest number. 2. Alphanumeric values split into parts with a delimiter. In this case, the data service counts the number of parts in each value, compares it across different items, and marks the item with the highest or lowest number of parts in a value. Add the Product Marker data service [#add-the-product-marker-data-service] Go to **Data Services** from your site's main menu, and select **Add data service**. Search for *Product Marker*, select **Add**, and give it a desired name in **Name** and attribute name prefix **Column prefix**.By default, the attribute name prefix starts with three underscores (`___`), which means the new attribute won't be exported during site runs. UUID-8c39d148-3666-24dd-4ebf-45969a85a41c Choose the stage where you have the needed ranking attribute in **Service Data Level**, and select **Add**. In **Attribute containing the values**, select the attribute that contains the data you want to use for ranking. If your ranking attribute is split into parts with a delimiter and you want to count these parts and compare their number across different items in the feed, enter the character that splits your values into parts in **Delimiter**. For example, enter the greater-than sign *>* if you want to mark items with the longest category values, for example, *Shoes > Sneakers* and *Shoes > Sneakers > Running sneakers*. You can't use a space character as a delimiter. If you want to rank your items within groups, such as categories, select the attribute that groups the needed items in **Import attribute you want to group by (optional)**. In **Method**, choose *Ascending* to mark items with the lowest values or *Descending* to mark items with the highest values. Enter the number of items you want to mark in **Number of marked items**. For example, to mark the three highest values in an attribute, enter *3* in this field. In **Result attribute**, enter the name of the newly-added attribute that should contain the ranking results. The platform adds the prefix defined in [see the relevant section](#N1757348667045) to the attribute name. You can later find the attribute at the same stage where you applied the data service. Select **Save**. For the platform to process a new data service, select **Run** in the top-right corner of your site's view. If you can't see your new ranking data in Data View, ensure the platform hasn't hidden it: Go to **Data View** from your site's main menu and choose the relevant stage or export in the dropdown on your left. Select the menu icon on the right and then select the eye icon. Find the result attribute in the list, and select the eye icon next to it. Close the pop-up. Ranking example [#ranking-example] The goal is to identify the three most ordered items within each category. You can set up the *Product Marker* data service in the following way: * **Attribute containing the values**: *orders* * **Import attribute you want to group by (optional)**: *category* * **Number of marked items**: *3* * **Result attribute**: *most\_ordered* * **Method**: *Descending* | id | category | stock | size | color | orders | | -- | -------- | ----- | ---- | ----- | ------ | | 1 | Shoes | 4 | S | red | 10 | | 2 | Shoes | 2 | S | blue | 15 | | 3 | Shoes | 1 | L | blue | 25 | | 4 | Shirts | 5 | 38 | black | 7 | | 5 | Shirts | 4 | 38 | blue | 15 | | 6 | Shirts | 7 | 38 | green | 5 | | 7 | Shirts | 2 | 40 | green | 10 | | 8 | Shirts | 5 | 42 | green | 17 | | 9 | Pants | 7 | 28 | black | 26 | As a result, you can see the rankings in the newly created attribute **\_\_\_marker\_most\_ordered**: | id | category | stock | size | color | orders | \_\_\_marker\_most\_ordered | | -- | -------- | ----- | ---- | ----- | ------ | --------------------------- | | 1 | Shoes | 4 | S | red | 10 | Shoes 3 | | 2 | Shoes | 2 | S | blue | 15 | Shoes 2 | | 3 | Shoes | 1 | L | blue | 25 | Shoes 1 | | 4 | Shirts | 5 | 38 | black | 7 | | | 5 | Shirts | 4 | 38 | blue | 15 | Shirts 2 | | 6 | Shirts | 7 | 38 | green | 5 | | | 7 | Shirts | 2 | 40 | green | 10 | Shirts 3 | | 8 | Shirts | 5 | 42 | green | 17 | Shirts 1 | | 9 | Pants | 7 | 28 | black | 26 | Pants 1 | If there are more items within the same category than you chose to mark in **Number of marked items**, the data service only marks as many items as you chose and leaves the remaining values of the result attribute empty. Edit the Product Marker data service [#edit-the-product-marker-data-service] Go to **Data Services** from your site's main menu. Change the settings of the needed data service: 1. To deactivate a data service, choose the pause icon next to the desired data service. 2. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service to edit other settings and select **Save**. Delete the Product Marker data service [#delete-the-product-marker-data-service] Go to **Data Services** from your site's main menu. To stop a data service from affecting your feed without deleting the data service itself, you can choose the pause icon next to the desired data service. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Set up ETIM Classes exports import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] ETIM is an international classification standard for technical products of different industries, such as electrical, HVAC, and construction. When every manufacturer uses the same classification for attributes and values to describe similar products, it makes it easier for buyers to compare and choose products. The ETIM hierarchy looks as follows: . *ETIM class* is the lowest level category. . Each ETIM class consists of a list of attributes, called *ETIM features*, to describe any category product. . Each ETIM feature should include valid *ETIM values*. Each ETIM class, feature, and value use ETIM codes as a description. For example, to describe a brass water tap, you need the following codes: * ETIM сlass: EC011375 * ETIM feature for material: EF020791 * ETIM value for brass: EV000149 UUID-e8017d12-b061-5b80-ba00-ea315f96513a See [ETIM Model Information](https://www.etim-international.com/classification/model-information/) for more details. Productsup supports ETIM versions 8.0 and 9.0 and provides exports that help you transform your data to comply with the ETIM standards. Depending on your ETIM version, you need to choose a corresponding classification list and export in the platform: | ETIM version | Classification list | Export | | ------------ | ------------------------------------------------------------------------------------------------------------------------------ | ---------------- | | ETIM 8.0 | ETIM-8.0 Classes – choose this list for an already existing mappingETIM Classes – choose this list for a newly created mapping | ETIM-8.0 Classes | | ETIM 9.0 | ETIM Classes | ETIM-9.0 Classes | Use the ETIM Classes classification list for any new ETIM export setup. The ETIM Classes classification list is version-independent and includes code classes of ETIM versions 8.0 and 9.0. We will maintain this classification list by adding new codes for the following ETIM versions. Migrate from ETIM 8.0 to ETIM 9.0 [#migrate-from-etim-80-to-etim-90] If you currently use the ETIM 8.0 version and want to migrate to ETIM 9.0, you should do the same steps as for setting up the export from scratch. See [Set up ETIM Classes export](#section-idm4531557212616033783311337709). You can either migrate to a new version from your existing ETIM 8.0 site, or you can create a new site for ETIM 9.0. See [Create or copy a site](/docs/help-center/get-started/manage-your-organization-projects-and-sites/create-or-copy-a-site). Set up ETIM Classes export [#set-up-etim-classes-export] To set up the ETIM Classes export in Productsup, take the following steps: Map imported product categories to ETIM classes with lists. This step is optional and you can skip it if your data feed already has the ETIM class codes. See [Map imported product categories to ETIM Classes with Lists](#section-idm4567949553404832523618419941). Add and set up ETIM Classes export. See [Add and set up ETIM-8.0 or ETIM-9.0 Classes export](#section-idm4594937344539232521883206077). Map imported product attributes to ETIM features. See [Map product attributes to ETIM features](#section-idm4631450276142432523818514337). Confirm whether the mapped ETIM features contain the correct ETIM values and make the necessary adjustments. See [Check and correct ETIM values](#section-idm4567949478054432523871796201). Map imported product categories to ETIM Classes with Lists [#map-imported-product-categories-to-etim-classes-with-lists] Skip this step if the ETIM class codes are already in your imported data feed. Go to **Lists** from your site's main menu. Select **ADD LIST**. In **Choose a list type**, choose **Classification Mapping** and select **Continue**. UUID-7df4522f-1bbe-f18f-41ba-eb3f911ee72a In **Configure the Classification Mapping list**, do the following: In **Name**, give your list a desired name. In **Classification**, choose the *ETIM Classes* classification standard. In **Stage**, select *Import*. In **Attribute**, select the attribute of your data feed that contains the product categories. For example, the `category` attribute. Optionally, toggle **Share list** if you want to share the list within the organization or project. Select **Add**. UUID-091a5cf9-3af0-ee61-bc5b-deb691f52729 Map your product categories by choosing the corresponding ETIM classes from the **Replace term** drop-down menu. UUID-d0966aa9-8f2d-3c91-d006-bdcfbe2d4d5f Add and set up ETIM-8.0 or ETIM-9.0 Classes export [#add-and-set-up-etim-80-or-etim-90-classes-export] Depending on the ETIM version supported by your system, you can choose the needed export: * ETIM-8.0 Classes for version 8.0 * ETIM-9.0 Classes for version 9.0 The export lets you map your product attributes to the ETIM features for all the relevant ETIM classes in your catalog and validate or correct the attribute values. The values should correspond to the ETIM values. To add an export: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for a needed export and select **Add**. UUID-39914653-780a-afbb-e14c-996887db35b0 In **Exports**, select the export's name link. UUID-73de56a9-172f-9307-ba4c-bcfc650e124e Select the pen icon at the top of the page and give your export a custom name as desired. Select **Add Destination** and choose your destination. Give it a name as desired and select **Save**. UUID-ae34b2f8-e728-971e-8969-b9d03ca7d179 The platform creates an XML file and exports it to the selected destination. Later, you can use the product data that you previously mapped to ETIM for other exports, such as BMEcat or FabDis. Use the output file from the ETIM export you set up as a data source for the BMEcat or FabDis site. Go to **Dataflow** from your site's main menu. Select your export from the drop-down menu on the left in the top ribbon. Map the attributes from the intermediate to export stage. For example, connect the `category` to `Class code`. UUID-81c8319f-8920-18ae-326d-6b340dcfb343 Hover over the **Class code** attribute in the export stage and select the arrow on the right. UUID-a4f6f405-bc7e-1551-2502-f1638e52a12b Search for the `Classification Mapping` rule box and drag it to the blue area. UUID-460dc16a-aab8-883d-5f47-aa85e930c42c In the **List** drop-down menu, select the Classification Mapping list you set up in [Map imported product categories to ETIM Classes with Lists](#section-idm4567949553404832523618419941). Select **Save**. Select **Run** in the top right corner to import the ETIM class features. Wait for the run to finish and refresh your page. The **Classifications** drop-down menu appears in the top ribbon. If you open it, you can see the ETIM classes that are present in your data feed. UUID-17d51996-e12c-bc72-8cc6-8c338f665a85 Map the product attributes to each class feature as described in the next section. Map product attributes to ETIM features [#map-product-attributes-to-etim-features] The export consists of a set of classes, such as *EC003867 - Towel Hook*. Each class has a specific list of attributes, called ETIM features, that describe any product in a specific category. To map product attributes to ETIM features: In **Dataflow**, select a class you want to map by opening the **Classifications** drop-down menu in the top ribbon. The platform refreshes the view and shows the class attributes in the export column. Map the attributes for the selected class to the intermediate stage. Repeat the same steps in all ETIM classes. Some export attributes appear twice: with their standard name and with `[details]` at the end of their name. For example: UUID-e218d3de-1a03-09d0-0393-079de3b7bcbe The meaning of the repeated attributes is the following: * The `Material` attribute contains a correct ETIM value. * The `Material [details]` attribute lets you add product details as text. Use it if you want to offer more information about your product than ETIM requires or if an ETIM value doesn’t fit your case. Once you finish mapping the attributes for your ETIM classes, go to **Data View** and check whether your export attributes contain valid ETIM values, as described in the following section. Check and correct ETIM values [#check-and-correct-etim-values] Each ETIM feature should have a valid ETIM value in the form of code, such as *Value Code: EV000149 - Brass*. To check if all the values are present in your feed: Go to **Data View** from your ETIM site. Select your ETIM Classes export from the channels drop-down menu in the top ribbon. Select the ETIM class you want to check from the **Classification** drop-down menu. Select the **Analyze** button for the attribute you want to check. UUID-2fa963fe-f073-d4b6-16d0-df3bedf5a6a6 The side panel opens and shows whether your attribute contains valid ETIM values and suggests possible actions to correct them. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view#section-idm4538971827048033726544546987) for more information on the Analyzer feature. UUID-fafe6483-05c8-e94e-71a5-881c3365552a Use rule boxes to edit the values if necessary. # Add Google Indexing export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; The Google Indexing API helps site owners request page recrawls from Google after they perform major changes to their pages. Timely page recrawls help freshly modified pages appear in new relevant Google searches and attract high-quality user traffic. In Productsup, you can use the *Google Indexing* export to request page recrawls. This is an API- and delta-based export, which means it sends your data to Google via the Google Indexing API using delta updates instead of your entire feed. * \*Report URL and content changes.\*After adding new pages to your website or substantially changing your existing pages, you can let Google know when to recrawl a URL for updates. * \*Remove pages from Google's recrawl list.\*If you delete a page, you can request Google to stop recrawling it for updates. * \*Keep updated on recrawl processes.\*You can check Google's current knowledge about the state of your pages and see the status of your recrawl requests. * \*Request batch recrawls.\*If necessary, you can send up to 100 indexing requests as a single HTTP request to the Google Indexing API and trigger batch recrawls of your pages. Prerequisites [#prerequisites] To use the Google Indexing API export, you need: . A project in the Google API Console. . A Google service account added to your Google Search Console as a site owner. . An OAuth token in the JSON format to authenticate with the Google Indexing API. See [Prerequisites for the Indexing API](https://developers.google.com/search/apis/indexing-api/v3/prereqs) for more information. Set up Google Indexing export [#set-up-google-indexing-export] Go to **Exports** from your site's main menu, and select **Add export**. Search for *Google Indexing*, hover over it, and select **Add**. UUID-fb83e348-7518-bd84-fe72-ac4621094836 In Exports, select the added export *Google Indexing*. Select **Add Destination**. Select *Google Indexing API* from the **Destination** drop-down menu, and choose **Save**. UUID-4d332045-2500-2993-2b28-fb8e2a3f6599 In **Google Service Account JSON credentials**, add the JSON private key related to your Google service account. Determine what updates you want to send to the Google Indexing API by switching the following options on or off: If all three options are off, Productsup sends all new, modified, unchanged, and deleted pages to the Google Indexing API. 1. Toggle **Skip new items** to *On* to notify the Google Indexing API of modified, unchanged, and deleted pages while skipping new URLs. 2. Toggle **Skip modified items** to *On* to notify the Google Indexing API of new, unchanged, and deleted pages while skipping modified URLs. 3. Toggle **Skip deleted items** to *On* to notify the Google Indexing API of new, modified, and unchanged pages while skipping deleted URLs. The platform toggles this option to *On* by default. UUID-635e6c7e-7947-ca7c-72c1-e450a6afbafa Toggle **Active** to *On* to activate the destination. Select **Save**. Go to **Dataflow** from the site's main menu and choose the added export from the dropdown in the toolbar. Map the attributes from import to export. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) for more information. UUID-84b666f6-810a-bf79-1c86-7ff76111cabc The *Google Indexing* export has only one mandatory attribute: * **url** There are two optional attributes: * **updated\_at** * **id** If you want Productsup to request a recrawl of a page every time you update it, make sure to map the **updated\_at** attribute. If your data is ready, select **Run** or **Export** in the upper right corner of the page. If you don't want to run the entire site, including all active exports set up in it, you can go to **Exports**, select the added *Google Indexing* export, and then choose **Export this export**. # Set up BMEcat 2005 and BMEcat 1.2 exports import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] BMEcat is a product data exchange format based on the Extensible Markup Language (XML) that lets you standardize and simplify product catalog exchanges between suppliers and purchasing companies. A range of product databases, procurement systems, and marketplaces, such as 2BA, EFO, and Mercateo, require submitting data in the BMEcat format. Often, partner systems require BMEcat combined with ETIM or another classification standard. Productsup supports the following BMEcat versions: * BMEcat 2005 v4.0.2 * BMEcat 2005 v4.0.3 * BMEcat 2005 v5.0.1 * BMEcat 1.2 BMEcat 1.2 and BMEcat 2005 versions mainly differ in the following aspects: | BMEcat 1.2 | BMEcat 2005 | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | - Supports a single language catalog per file. - Uses `ARTICLE` for attribute naming. - Has the `AGREEMENT` attribute. - Doesn't require values coded with ETIM or another classification and accepts values in plain language, such as `width`. | - Supports multiple languages in a catalog per file. - Uses `PRODUCT` for attribute naming. - Doesn't have the `AGREEMENT` attribute. - Supports customizable products, including adapted prices. | See the [BMEcat official website](https://www.bme.de/services/bmecat/info) to learn more about the differences between versions. In Exports, you can choose a needed export depending on the version required by the partner system to which you export your data. The configuration of the BMEcat 2005 exports is similar regardless of the specific BMEcat version (v4.0.2, v4.0.3, v5.0.1). See [Add and set up the BMEcat 2005 export](#section-idm4558367492558433482870874434) for the BMEcat 2005 exports setup information. The configuration of the BMEcat 1.2 export slightly differs. See [Set up BMEcat 2005 and BMEcat 1.2 exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-bmecat-2005-and-bmecat-1-2-exports#section-idm353353270521022) for the BMEcat 1.2 export setup information. The platform still supports the legacy exports *BME 2005 - Single-feature Approach* and *BMEcat 2005 - Bundled-features Approach exports* if you started using them before the new exports became available. See [Set up BMEcat 2005 Single-feature Approach export channel](/docs/help-center/legacy-docs/legacy-functionality/set-up-bmecat-2005-single-feature-approach-export-channel) and [Set up BMEcat 2005 Bundled-features Approach export channel](/docs/help-center/legacy-docs/legacy-functionality/set-up-bmecat-2005-bundled-features-approach-export-channel) for more information on the legacy exports. Add and set up BMEcat 2005 (v4.0.2, v4.0.3, v5.0.1) with ETIM [#add-and-set-up-bmecat-2005-v402-v403-v501-with-etim] Usually, you need to set up the BMEcat 2005 export in combination with a classification standard. This section demonstrates how to set up BMEcat with ETIM. But you can use the same setup principle with another classification standard. If you need to set up the BMEcat 2005 export without a classification, skip the following section and see [Add and set up the BMEcat 2005 export](#section-idm4558367492558433482870874434). Prerequisites [#prerequisites] To set up the BMEcat 2005 export with the ETIM classification standard, you need to: Create and set up an ETIM-specific site. See [Create or copy a site](/docs/help-center/get-started/manage-your-organization-projects-and-sites/create-or-copy-a-site). Add the ETIM export to your ETIM site. See [Set up ETIM Classes exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-etim-classes-exports). Create and set up a BMEcat site. See [Create or copy a site](/docs/help-center/get-started/manage-your-organization-projects-and-sites/create-or-copy-a-site). Set up the data source for BMEcat with ETIM. See [Set up the data source for BMEcat with ETIM](#section-idm4553890659428833515537832707). Then, you can add and set up a necessary BMEcat 2005 export. See [Add and set up the BMEcat 2005 export](#section-idm4558367492558433482870874434). Set up the data source for BMEcat with ETIM [#set-up-the-data-source-for-bmecat-with-etim] Go to **Exports** from your ETIM site's menu and select the name of your ETIM export in the **Export name** column. To fulfill this step, first, you must do steps 1 to 3 from the [Prerequisites](#section-idm4507487105398433577526356945). Scroll down to the *Filename* section and select the file link to download the export file with the ETIM classification data for your product feed. Go to **Data Sources** from your BMEcat site and add the main and additional data sources: * For **Main Data Source**, select the same data source as in the ETIM site or a different one as desired. * For **Additional Data Source**, reuse the link of the file exported with the ETIM export. See [see the relevant section](#N1674221449411). See [Add the main data source](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-a-main-data-source-to-import-your-products#section-idm232212413817044) and [Add an additional data source](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources#section-idm232212551628982) to learn how to add data sources. Select the cogwheel icon (**⚙**) next to the additional data source. Go to the **Advanced Settings** tab and select **I/O Settings**. Select **Add** next to **Transform XML with XSLT**. UUID-3065a153-04a1-5c25-9602-0ef6699793cb Use the following XSLT code and adjust it for your setup to check if the desired output works fine. You can copy one item from the current XML and run the transformation at any online converter, such as [XSL Transformer](https://www.freeformatter.com/xsl-transformer.html). If there are any issues, you can fix the XSLT code and apply it to the remaining items. Then, enter your code in the **XSL Template** field. ``` - - - ``` Select **Save**. Go to the **Overview** tab and scroll to the **Content Options** section. Select **XML Settings** from the left-hand side menu and enter `1` in **Bundle repeating nodes**. Enter `<###>` in **Bundle delimiter** and select **Save all settings**. UUID-989081f2-1ce4-647c-407c-eb1e47eaa5ea Bundling lets you pass the ETIM information to BMEcat without creating an attribute in Dataflow for every feature. Now you have four (4) new columns in the import stage: * `FNAME` is a feature name. * `FVALUE` is a feature value. * `FUNIT` is a feature unit of measure. * `FVALUE_DETAILS` is feature value details. Add and set up the BMEcat 2005 export [#add-and-set-up-the-bmecat-2005-export] Create a BMEcat site and add a necessary version of the BMEcat export. Go to **Exports** from your BMEcat site's main menu and select **ADD EXPORT**. Search for a necessary BMEcat 2005 export, hover over it, and select **Add**. The platform redirects you to *Exports*. UUID-38640973-61d8-867a-7264-8bfc6d051206 In **Overview**, select the name of the added export in the **Export name** column. Select the pen icon at the top of the page and give your export a custom name as desired. Select **Add Destination** and choose *Productsup Server* from the **Destination** drop-down menu. Give it a name as desired and select **Save**. UUID-d630f82d-19c6-2d45-b08c-052dbc3ef249 You can also choose to send your data to MS SharePoint. In this case, select and set up the destination **MS SharePoint for XML**. See [Send your data to Microsoft SharePoint](/docs/help-center/export-data-feeds/special-export-setups/send-your-data-to-microsoft-sharepoint) to learn how to set it up. Go to the *Settings* tab and toggle **Export as XML** to **ON**. Enter the BMEcat header information into the fields shown in the following screenshot. These fields correspond to the `HEADER` section of your XML file. | UUID-a56c9040-8455-e6b6-a007-ecca62b0d297 | UUID-7c3e2d31-1ee2-7f46-0522-c5b5fbbd7d0d | | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | The BMEcat header doesn't contain and send product descriptions. It only sends information about the identification and validity of the catalog, catalog creator, and receiver.The BMEcat header contains default values, such as language and currency, applied to all products. Toggle **XSD Validation** to **yes** to activate the validation analysis that appears in the *Notification* panel during the export. Select **Save**. Add and set up the BMEcat 1.2 export [#add-and-set-up-the-bmecat-12-export] If your partner system requires data in the BMEcat 1.2 format, you can add and configure the BMEcat 1.2 export in Exports. BMEcat 1.2 accepts values in plain language and doesn't require converting data to ETIM or another classification standard. Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for the BMEcat 1.2 export, hover over it, and select **Add**. In **Overview**, select the name of the added export in the **Export name** column. Select the pen icon at the top of the page and give your export a custom name as desired. Select **Add Destination** and choose *Productsup Server* from the **Destination** drop-down menu. Give it a custom name as desired and select **Save**. UUID-d630f82d-19c6-2d45-b08c-052dbc3ef249 You can also choose to send your data to MS SharePoint. In this case, select and set up the destination **MS SharePoint for XML**. See [Send your data to Microsoft SharePoint](/docs/help-center/export-data-feeds/special-export-setups/send-your-data-to-microsoft-sharepoint) to learn how to set it up. Go to the *Settings* tab and toggle **Export as XML** to **ON**. Enter the BMEcat header information in the fields shown in the following screenshot. | UUID-c24b9516-d270-50e9-4899-db95eb0378a5 | UUID-12ca43fc-53bf-0118-df36-7cad9f66acf7 | | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | Select **Save**. Map the BMEcat attributes in Dataflow [#map-the-bmecat-attributes-in-dataflow] To continue the BMEcat setup in Dataflow, you should map the attributes between import and export. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) for more information. Remember that only structural elements containing values appear in the export stage of the BMEcat 2005 exports. As shown in the following screenshot, the export stage contains the higher-level elements that store values under the main element `PRODUCT`. The `SUPPLIER_PID` element appears in the export stage because it carries a value. In contrast, the `PRODUCT_DETAILS` element doesn't appear in the export stage because it is a structural element and stores no values. Lower-level elements under `PRODUCT_DETAILS`, such as `DESCRIPTION_SHORT` and `DESCRIPTION_LONG`, appear in the export stage because these elements also store a value. UUID-004cf167-237a-68db-1dfc-fda3485becd8 You can see all the possible BMEcat 2005 attributes in the export stage. You mustn't create any additional attributes for the export manually, as the platform doesn't add them to the final BMEcat 2005 file. If you don't see an attribute you need, contact your Customer Success Manager or support at [support@productsup.com](mailto:support@productsup.com). Optimize your indexed attributes in the data feed for the BMEcat 2005 export [#optimize-your-indexed-attributes-in-the-data-feed-for-the-bmecat-2005-export] Some attributes can appear more than once in the file, for example, product descriptions in several languages for an item. You can refer to these attributes as indexed attributes. Some of the indexed attributes consist of several sub-attributes. All attributes have an index number counted by the platform that states the relationship between these sub-attributes. For example, each FNAME value corresponds to the FVALUE value according to their position in the line: `EF001622` to `EV000138`, `EF010804` to `EV000899`, and so on. | FNAME | FVALUE | | -------------------------------------------------- | -------------------------------------------------- | | EF001622\<###>EF010804\<###>EF000060\<###>EF011789 | EV000138\<###>EV000899\<###>EV000154\<###>EV004200 | To escape creating an individual column for every indexed attribute, you can add several indexed attributes separated by the delimiter `<###>` within a field. For example, if an attribute has short descriptions in German, French, and Italian, you must populate the three (3) sub-attributes as follows: * `DESCRIPTION_SHORT@default-lang`: *deu* * `DESCRIPTION_SHORT@lang`: *deu\<###>fra\<###>ita* * `DESCRIPTION_SHORT`: *Hochwertiges Werkzeug\<###>High quality tool\<###>Outil de haute qualité* If one of the sub-attributes is missing for an indexed attribute, you must use an empty value such as *first-value\<###>\<###>third-value*. Skipping it leads to inconsistencies within the output file. The following table lists the indexed attributes for BMEcat 2005 exports and their sub-attributes: | Attribute name | Sub-attribute name | | -------------------------------------------------- | -------------------------------------- | | Description Short | `DESCRIPTION_SHORT@lang` | | `DESCRIPTION_SHORT` | | | `DESCRIPTION_SHORT@default-lang` | | | Description Long | `DESCRIPTION_LONG@lang` | | `DESCRIPTION_LONG` | | | Product Details | `KEYWORD` | | `KEYWORD@lang` | | | `REMARKS` | | | Product Feature | `FNAME` | | `FVALUE` | | | `FUNIT` | | | `FVALUE_DETAILS` | | | Price | `PRICE@price_type` | | `PRICE_AMOUNT` | | | `PRICE_CURRENCY` | | | `TAX` | | | `LOWER_BOUND` | | | MIME | `MIME_TYPE` | | `MIME_SOURCE` | | | `MIME_DESCR` | | | `MIME_PURPOSE` | | | MIME | `UDX.EDXF.MIME_SOURCE` | | `UDX.EDXF.MIME_CODEx` | | | `UDX.EDXF.MIME_FILENAME` | | | `UDX.EDXF.MIME_DESIGNATION` | | | `UDX.EDXF.MIME_ALT` | | | `UDX.EDXF.MIME_ISSUE_DATE` | | | `UDX.EDXF.MIME_EXPIRY_DATE` | | | Description Very Short | `UDX.EDXF.DESCRIPTION_VERY_SHORT@lang` | | `UDX.EDXF.DESCRIPTION_VERY_SHORT` | | | Packing Unit | `UDX.EDXF.GTIN` | | `UDX.EDXF.GS1_128` | | | `UDX.EDXF.QUANTITY_MIN` | | | `UDX.EDXF.QUANTITY_MAX` | | | `UDX.EDXF.PACKING_UNIT_CODE` | | | `UDX.EDXF.PACKING_UNIT_NAME` | | | `UDX.EDXF.PACKAGE_BREAK` | | | `UDX.EDXF.PACKING_PARTS` | | | `UDX.EDXF.VOLUME` | | | `UDX.EDXF.WEIGHT` | | | `UDX.EDXF.LENGTH` | | | `UDX.EDXF.WIDTH` | | | `UDX.EDXF.DEPTH` | | | `UDX.EDXF.DIAMETER` | | | Product Characteristic | `UDX.EDXF.PRODUCT_CHARACTERISTIC_CODE` | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_NAME` | | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_NUMERIC` | | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_STRING` | | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_BOOLEAN` | | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_RANGE_FROM` | | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_RANGE_TO` | | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_SET` | | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_SELECT` | | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_VALUE_UNIT_CODE` | | | `UDX.EDXF.PRODUCT_CHARACTERISTIC_REFERENCE_GTIN` | | When using the ETIM export, the XSLT code from step [7](#N1674828755971) takes care of `Product Features` and requires no additional manual adjustments. To optimize the attributes of your product catalog in Dataflow: Go to **Dataflow** from your site's main menu. Map all the attributes you want to add to your BMEcat from import to export. Go to **Data View** to review the data and, if required, add rule boxes to optimize your values. See [Add a rule box](/docs/help-center/add-a-rule-box) and [Find the needed rule box category](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category) for more information. Using multiple Article Features in BMEcat 1.2 [#using-multiple-article-features-in-bmecat-12] BMEcat 1.2 only uses `Article Features` as an indexed attribute. `Article Feature` corresponds to `Product Feature` in BMEcat 2005. If you have only one (1) Article Feature, you can use single Article Feature attributes and map them in Dataflow: * `REFERENCE_FEATURE_SYSTEM_NAME` * `REFERENCE_FEATURE_GROUP_ID` * `FNAME` * `FVALUE` * `FUNIT` * `FORDER` * `FDESCR` * `FVALUE_DETAILS` To use the multiple Article Features, add custom attributes in Dataflow and connect them from import to export. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export#section-idm4605326417364832706742715884) to learn how to do it. If you have single and multiple Article Features, disconnect single Article Features in Dataflow to prevent system conflicts. Each Article Features attribute should have the number in the attribute name, such as `ARTICLE_FEATURES/1/{FEATURE_NAME}`. For example: `ARTICLE_FEATURES/1/REFERENCE_FEATURE_SYSTEM_NAME`: `Name` `ARTICLE_FEATURES/1/REFERENCE_FEATURE_GROUP_ID`: `12345` `ARTICLE_FEATURES/1/FNAME`: `NameA<###>NameB<###>NameC` `ARTICLE_FEATURES/1/FVALUE`: `1<###>2<###>3` `ARTICLE_FEATURES/1/FORDER`: `1` `ARTICLE_FEATURES/1/FDESCR`: `ArticleDetails` `ARTICLE_FEATURES/1/FUNIT`: `mm<###>mm<###>mm` `ARTICLE_FEATURES/2/REFERENCE_FEATURE_SYSTEM_NAME`: `Name` `ARTICLE_FEATURES/2/REFERENCE_FEATURE_GROUP_ID`: `12345` `ARTICLE_FEATURES/2/FNAME`: `NameD<###>NameF<###>NameG` `ARTICLE_FEATURES/2/FVALUE`: `1<###>2<###>3` `ARTICLE_FEATURES/2/FORDER`: `2` `ARTICLE_FEATURES/2/FDESCR`: `ArticleDetails` `ARTICLE_FEATURES/2/FUNIT`: `mm<###>mm<###>mm` All Article Features under the same number belong to each other. You can add as many custom attributes as needed. You can add multiple values to the same attribute field, separating the values by the delimiter `<###>`. Depending on your data, you can use many ways to add values to the same field in Dataflow or Data View. For example, you can use the **Append/Prepend Column** rule box in Data View. To add a delimiter, select **Text Before** in the drop-down menu and enter `<###>` in the field next to it. See [Add static or dynamic values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/add-static-or-dynamic-values#section-idm243451110290446). UUID-bb9acd15-a08c-b44c-96d4-e28070673c4c # Set up order sync for Amazon import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Amazon provides sellers with access to the vast customer base on their marketplace, which helps sellers increase online visibility and drive more sales. Productsup lets you synchronize orders between Amazon and your order management, shop, or ERP system. Productsup offers the following order-sync ecosystem to achieve this goal: * The data source *Amazon Selling Partner API – Orders* lets Productsup import your orders from a selected Amazon Seller Central account. * The API-based export *Amazon Marketplace Shipment Update (SP-API)* lets you update orders on Amazon using information stored in your ERP, order management, or shop system, for example, order tracking IDs and carrier information. This way, you can notify your clients about the progress of processing and shipping their orders. The order data that Productsup imports from Amazon includes Personally Identifiable Information (PII), such as clients' surnames, addresses, phone numbers, etc. To comply with the [Amazon Data Protection Policy](https://sellercentral-europe.amazon.com/mws/static/policy?documentType=DPP\&locale=en_GB) regarding PII, Productsup has the following measures in place: * The platform retains the order data featuring PII for 30 days. * The platform obscures the values featuring PII and displays them in Dataflow and Data View as follows: UUID-017e1582-1f74-26e7-6ee4-30c0121ea051 UUID-17c2362b-7047-0870-e1fe-b47f229a9f12 When you export order data with PII to your desired system, Productsup sends values without obscuring them. The PII order data is fully visible and readable in your target system. Prerequisites [#prerequisites] To use the Amazon order sync ecosystem in Productsup, you need to: . Be a partner in the Amazon Merchant Fulfilled Network, which is Amazon’s terminology for Fulfilled by Merchant.The Amazon order sync ecosystem in Productsup is available only for the Amazon Merchant Fulfilled Network partners who manage storage, shipping, and customer support independently from Amazon. . Have the Order Sync feature activated in your organization.The Amazon order sync ecosystem is an additional feature of the Productsup platform. Reach out to your Customer Success Manager to activate it. Import order data from Amazon [#import-order-data-from-amazon] To get your Amazon order data to your ERP, order management, or shop system, you need first to import your Amazon order data into your Productsup site: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Amazon Selling Partner API – Orders* and select **Add**. Give it a custom name as desired and select **Continue**. UUID-bf41e7da-657c-2c1d-28ba-668680988ef4 Choose the market of interest in **Marketplace ID**. Select what orders to import depending on the date of creation or last update: * **Orders Created After** or * **Order last updated after**. UUID-4e25341e-549b-9a5e-df53-556ba5f83795 You can't leave both fields empty and can't set both parameters at the same time. You must set either *Orders Created After* or *Order last updated after*.If you need to set both parameters to function as OR behavior, you must create two main data sources in the same site. In one data source you set *Order Create After* and in another, *Order last updated after*. Activate **Import Address** to import address details for business orders. To import only the orders with specific statuses, select the needed statuses in **Import Only Statuses**. Hold the *Ctrl* or *Cmd* key to select multiple order statuses or hold *Shift* to select a range of statuses. Optionally, activate **Import customized data** to extract JSON data from zip files linked in the **item\_BuyerInfoBuyerCustomizedInfoCustomizedURL** attribute and display it in a new **Customizable data** attribute without importing any images from the zip. In **Authentication**, choose the Amazon authentication you previously set up in your organization, project, or site. If you haven't set up Amazon authentication yet, perform the following steps: 1. Select **Add New Authentication**. UUID-6c723739-f030-e9c5-8e46-70795b0e4af4 2. Select *Amazon Authentication (BETA version by Amazon)* in **Type**. You can optionally give your authentication a name. 3. Select **Next**. 4. If applicable, select **Region** and **Country** to choose your marketplace country and locale. 5. Select **Connect**. Before proceeding, Productsup redirects you to Amazon to finalize your authentication. After completing the authentication setup, Amazon redirects you back to Productsup. 6. Close the confirmation window to proceed. Optionally, enter a custom description for the data source in **Description (optional)**. The new name of the data source will change in the Data Sources overview page. Select **Save**. Select **Run** in the top-right corner of your view to let the site import your order data from Amazon. Once you set up the data source *Amazon Selling Partner API – Orders*, you can go to **Exports** to add and set up an export and send your order data to the target channel, such as your ERP, order management, or shop system. Before running your export, you must map the mandatory attributes in Dataflow. Export shipment updates to Amazon [#export-shipment-updates-to-amazon] To update your orders on Amazon with information stored in your ERP, order management, or shop system, do the following: Take the steps to import your Amazon order data into Productsup and your desired target system. See [Import order data from Amazon](#N1692029161522). Create a new site in your Productsup organization. This site has to be separate from the site that imports your order data from Amazon. Go to **Data Sources** from the main menu of the newly created site and select **ADD DATA SOURCE** to add and set up your ERP, order management, or shop system as a data source. When done, select **Run** in the top-right corner of your view to run the site and let the platform import your shipment data into Productsup. Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Amazon Marketplace Shipment Update (SP-API)*, hover over it, and select **Add**. UUID-635495f3-2623-ca3b-368c-d378907420bf Select **Add Destination**, choose *Amazon Selling Partner API - Shipment update* from the drop-down list, give it a name as desired, and then select **Save**. UUID-623492b4-dcd0-d8a2-ce7e-6fe2a32117f6 In **Authentication**, choose the Amazon authentication method you previously set up in your organization, project, or site. Choose the market of interest in **Marketplace ID**. Toggle the **Feedback Import** button to *Off* if you don't want the platform to receive feedback files from Amazon.This feature is active by default to let Productsup receive a feedback file from the Amazon Selling Partner API in case of errors. This helps to troubleshoot the export setup. If you want the platform to receive feedback files from Amazon, leave the **Feedback Import** button *On*.Optionally, you can change the connection attributes that let you add the export feedback to your site: In **Feedback file connection column**, give a custom name to the attribute that should contain the export feedback and appear as an additional attribute in Dataflow or Data View\.By default, the attribute's name is **\_\_\_amazon\_item\_id**. In the drop-down menu **Main feed connection column**, choose the attribute corresponding to your unique order identifier. For example, it can be `AmazonOrderID` or any other attribute containing this data if your internal system uses a different attribute name for it. UUID-94180eb4-ce6d-1095-b478-037c78a6453b Toggle the **Active** button to *On* to activate the destination. Select **Save**. Go to **Dataflow** and select **Amazon Marketplace Shipment Update (SP-API)** in the drop-down menu on the left to map all relevant attributes from import to export. Once your data is ready for export, select **Run** in the top-right corner of your view to send shipment updates to Amazon. The export *Amazon Marketplace Shipment Update (SP-API)* has the following attributes at the export stage in Dataflow and Data View: | Attribute | Mandatory or not | Meaning and expected values | | ----------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **AmazonOrderID** | Mandatory | Your order ID as expected by Amazon. | | **MerchantOrderID** | Mandatory | Your order ID as specified in your internal systems. | | **FulfillmentData.ShippingMethod** | Mandatory | The shipment method used to deliver the order. | | **FulfillmentDate** | Mandatory | The expected shipment date for the order. | | **FulfillmentData.CarrierCode** | Mandatory | The code of the carrier company that delivers the order. For example, `DPD`, `DHL`, `AMZL_UK`, `AT POST`, or `ParcelOne`.See [Accepted CarrierCode values](https://images-na.ssl-images-amazon.com/images/G/01/rainier/help/xsd/release_1_9/amzn-base._TTH_.xsd) for more carrier codes. | | **FulfillmentData.CarrierName** | Mandatory in some cases | The name of the carrier company that delivers the order. This field is mandatory only if your carrier company isn't on the list of carrier codes accepted by Amazon, so you provide the value `Other` in `FulfillmentData.CarrierCode`. | | **MerchantFulfillmentID** | Optional | The ID of the shipment as specified in your internal systems. | | **FulfillmentData.ShipperTrackingNumber** | Optional | The shipment tracking number that helps the buyer track the delivery progress. | | **Item.AmazonOrderItemCode** | Optional | The code of the ordered item as assigned by Amazon. | | **Item.MerchantOrderItemID** | Optional | The ID of the ordered item as specified in your internal systems. | | **Item.MerchantFulfillmentItemID** | Optional | The unique identifier for the shipment of the ordered item as specified in your internal systems. | | **Item.Quantity** | Optional | The number of shipped items if you send the ordered items as multiple separate deliveries. | # Add the Image Exporter export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The Image Exporter lets you send the images from your data to Amazon S3, Microsoft Azure Blob Storage, or an FTP or SFTP server. You can export them as individual image files or as a *.zip* file. The Image Exporter can send only image updates to your destination called deltas or the entire data catalog: * Use the **Image Exporter** export to send only delta files, which means images with new and modified data. If you delete an image from your feed, the export doesn't remove it from the destination. However, if you add a new image to your feed with the same filename as the deleted image used to have, the Image Exporter overwrites the old deleted image in your destination with the new one. * Use the **Image Exporter (no delta)** export to send the entire data catalog. Prerequisites [#prerequisites] To set up the *Image Exporter* or *Image Exporter (no delta)* export, you need to have the credentials of your desired destination: * To upload your images to Amazon S3, log in or create an Amazon Web Service (AWS) account. See [AWS](https://portal.aws.amazon.com/billing/signup#/start). * To upload your images to Azure Blob Storage, log in or create a Microsoft Azure account. See [Azure](https://azure.microsoft.com/). * To upload images to your Microsoft SharePoint, log in or create a Microsoft Azure account. See [Sign in to SharePoint](https://support.microsoft.com/en-us/office/sign-in-to-sharepoint-324a89ec-e77b-4475-b64a-13a0c14c45ec#from_m365_homepage). * To upload your images to an FTP or SFTP, provide FTP or SFTP credentials that allow write access. Add Image Exporter export [#add-image-exporter-export] In the site dedicated to sending your product images to a specific destination, add and set up the *Image Exporter* or *Image Exporter (no delta)* export: Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Image Exporter* or *Image Exporter (no delta)*, hover over it, and select **Add**. Select **Add** again to confirm your selection. UUID-9c3187f6-8671-2cd5-6c0b-54042465e969 On the *Exports* page, select the name of the added export to set it up. Select **Add Destination** and choose a needed destination from dropdown. Depending on the destination where you want to export your images, take the steps from one of the following sections. Set up Image Exporter (AWS S3) destination [#set-up-image-exporter-aws-s3-destination] Select **Add Destination**, choose *Image Exporter (AWS S3)*, give it a name, and then select **Save**. UUID-b9fa4d85-648e-28cf-1069-399a1f25654f Enter your AWS credentials in **Access Key ID** and **Secret Access Key**, then choose your S3 location in **Region**. Enter the bucket name for your image uploads in **Bucket** and define the image path in **Base Path**. In **Concurrency**, enter the number of images the export should simultaneously download and send to your server. If you have over 1,000 items, set your concurrency between 10 and 20 for the best results. In **Download Progress Notification Interval**, enter the number of images the platform should send to the server before notifying you of the export's progress. If you want to send your images to the server in a *.zip* file, give that file a desired name in **Zipfile (optional)**.The platform uses the input you provide in this field and adds `_0001` as a postfix and the .zip file extension. For example, the full name of your exported file can be *name-example\_0001.zip*. If you provide a desired name for your *.zip* file in **Zipfile (optional)**, you can also use the **Zip Size Limit** field to specify your maximum file size in bytes.If the size of the *.zip* file with all your exported images exceeds this limit, the destination sends the images to the server in multiple *.zip* files. The names of each *.zip* file will get a unique postfix in the end. For example, if the platform splits all your images into three (3) files, their names can be *name-example\_0001.zip*, *name-example\_0002.zip*, and *name-example\_0003.zip*. If you enter `0` in this field, the destination sends all images to one *.zip* file on your server without restricting its size or amending its name with a postfix. Toggle **Active** to *On* to activate the destination. Select **Save**. Next, you need to map your attributes. See [Map your attributes for Image Exporter in Dataflow](#section-idm234727034457193). Set up Image Exporter (Microsoft Azure) destination [#set-up-image-exporter-microsoft-azure-destination] Select **Add Destination**, choose *Image Exporter (Microsoft Azure)*, give it a name, and then select **Save**. UUID-6a00ecd5-034d-78aa-c14f-399e4c8dcdbe Select the authentication type: * If your authentication type is Access Key, enter your Microsoft Azure credentials in **Account Name** and **Access Key**. * If your authentication type is SAS Token, enter your Microsoft Azure credentials in **SAS Token** and **SAS Blob Endpoint**. Enter the container name for your image uploads in **Blob Container** and define the image path in **Base Path**. In **Concurrency**, enter the number of images the export should simultaneously download and send to your server. If you have over 1,000 items, set your concurrency between 10 and 20 for the best results. In **Download Progress Notification Interval**, enter the number of images the platform should send to the server before notifying you of the export's progress. If you want to send your images to the server in a *.zip* file, give that file a desired name in **Zipfile (optional)**.The platform uses the input you provide in this field and adds `_0001` as a postfix and the .zip file extension. For example, the full name of your exported file can be *name-example\_0001.zip*. If you provide a desired name for your *.zip* file in **Zipfile (optional)**, you can also use the **Zip Size Limit** field to specify your maximum file size in bytes.If the size of the *.zip* file with all your exported images exceeds this limit, the destination sends the images to the server in multiple *.zip* files. The names of each *.zip* file will get a unique postfix in the end. For example, if the platform splits all your images into three (3) files, their names can be *name-example\_0001.zip*, *name-example\_0002.zip*, and *name-example\_0003.zip*. If you enter `0` in this field, the destination sends all images to one *.zip* file on your server without restricting its size or amending its name with a postfix. Toggle **Active** to *On* to activate the destination. Select **Save**. Next, you need to map your attributes. See [Map your attributes for Image Exporter in Dataflow](#section-idm234727034457193). Set up Image Exporter (Microsoft SharePoint) destination [#set-up-image-exporter-microsoft-sharepoint-destination] Select **Add Destination**, choose *Image Exporter (Microsoft SharePoint)*, give it a name, and then select **Save**. UUID-026bcf17-9d12-ff16-2b8d-9c3f414dc9b2 Enter your MS SharePoint credentials in **Client ID** and **Client Secret**. Enter your MS SharePoint tenant ID in **Tenant ID**. Add the file's location URL in **Upload File Url**. This URL should lead to the root folder of your Sharepoint, such as `https://company-name.sharepoint.com/Shared Documents`. If you need to upload images to a subfolder inside the root folder, enter the path to the needed subfolder in **Upload Directory**. For example, `/Images/PUP`.Together with the input in [see the relevant section](#N1747318390595), it means that the platform goes to the specified root folder and then uses the path provided in this field to find the folder where it uploads your images. In **Concurrency**, enter the number of images the export should simultaneously download and send to your SharePoint folder. For best results, set your concurrency between 10-20 if you have more than 1,000 items. In **Download Progress Notification Interval**, enter the number of images the platform should send to SharePoint before notifying you of the export's progress. If you want to send your images to SharePoint in a *.zip* file, give that file a desired name in **Zipfile (optional)**.The platform uses your input in this field and adds `_0001` as a postfix and the .zip file extension. For example, the full name of your exported file can be *name-example\_0001.zip*. If you provide a desired name for your *.zip* file in **Zipfile (optional)**, you can also use the **Zip Size Limit** field to specify your maximum file size in bytes.If the size of the *.zip* file with all your exported images exceeds this limit, the destination sends the images to SharePoint in multiple *.zip* files. The names of each *.zip* file will get a unique postfix in the end. For example, if the platform splits all your images into three (3) files, their names can be *name-example\_0001.zip*, *name-example\_0002.zip*, and *name-example\_0003.zip*. If you enter `0` in this field, the destination sends all images to one *.zip* file on your server without restricting its size or amending its name with a postfix. Activate **Skip feature** if you want to continue downloading and uploading images even in case of a failure. Toggle **Active** to *On* to activate the destination. Select **Save**. Next, you need to map your attributes. See [Map your attributes for Image Exporter in Dataflow](#section-idm234727034457193). Set up Image Exporter (FTP or SFTP) destination [#set-up-image-exporter-ftp-or-sftp-destination] Select **Add Destination**, choose *Image Exporter (FTP or SFTP)*, give it a name, and then select **Save**. UUID-9a67aeac-249d-16e2-e05b-e0d3a16fc843 Enter your FTP server address in **FTP Hostname**. Then, enter the credentials in **FTP Username** and **FTP Password**. Define the image path in **Base Path**. In **Concurrency**, enter the number of images the export should simultaneously download and send to your server. For best results, set your concurrency between 10-20 if you have more than 1,000 items. In **Download Progress Notification Interval**, enter the number of images the platform should send to the server before notifying you of the export's progress. If you want to send your images to the server in a *.zip* file, give that file a desired name in **Zipfile (optional)**.The platform uses the input you provide in this field and adds `_0001` as a postfix and the .zip file extension. For example, the full name of your exported file can be *name-example\_0001.zip*. If you provide a desired name for your *.zip* file in **Zipfile (optional)**, you can also use the **Zip Size Limit** field to specify your maximum file size in bytes.If the size of the *.zip* file with all your exported images exceeds this limit, the destination sends the images to the server in multiple *.zip* files. The names of each *.zip* file will get a unique postfix in the end. For example, if the platform splits all your images into three (3) files, their names can be *name-example\_0001.zip*, *name-example\_0002.zip*, and *name-example\_0003.zip*. If you enter `0` in this field, the destination sends all images to one *.zip* file on your server without restricting its size or amending its name with a postfix. Toggle **Active** to *On* to activate the destination. Select **Save**. Next, you need to map your attributes. See [Map your attributes for Image Exporter in Dataflow](#section-idm234727034457193). Map your attributes for Image Exporter in Dataflow [#map-your-attributes-for-image-exporter-in-dataflow] To proceed, you must map your attributes in Dataflow from import to export. Go to **Dataflow** from the site's main menu and choose the added export from the dropdown in the toolbar. Map the attributes from import to export. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) for more information.You can export several images per product. Each image needs a URL and a filename to save on the S3 bucket. The required attributes are: * **id**: Your unique product ID is critical for sending delta updates. * **img\_url\_\{ascending\_number}**: The image source URL. * **img\_name\_\{ascending\_number}**: The image file name, including the file extension. You must add an image extension to each image file. For example, add `.jpg` to the image file `short_front` to produce `short_front.jpg`.You can use the *Append/Prepend Value* rule box. See [Add static or dynamic values](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/add-static-or-dynamic-values#section-idm243451095559490). To prevent you from overwriting your images, ensure that you don't use duplicate image names within your data. If you want to export only one image per product, go to **Dataflow** and map the **id**, **image\_name\_1**, and **image\_url\_1** attributes from the intermediate stage to the corresponding attributes in the export stage.If you have more than one image per product, go to **Dataflow** and map the **id** attribute and as many as needed attributes **image\_name\_\{ascending\_number}** and **image\_url\_\{ascending\_number}** from the intermediate stage to the attributes with the corresponding numbers in the export stage. UUID-33294107-e8d1-4525-31c9-a93ce55d41e5 As you've mapped the attributes and set up a destination, select **Run** or **Export** in the top-right corner of your view. # Set up order sync for Wayfair Marketplace import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The order integration with Wayfair Marketplace lets you import marketplace orders in Wayfair. You can also: * Automatically update the stock level status of your marketplace accounts. This confirms that there’s a consistent stock status across all sales channels. * Send acceptance and shipping notifications from Wayfair via Productsup to your marketplace channels. This feature informs your clients about an upcoming delivery. This document guides you through importing your Wayfair marketplace account in the platform using the Wayfair Orders data source. Set up Wayfair Orders import [#set-up-wayfair-orders-import] Add *Wayfair Orders* as the main data source to import your orders directly from Wayfair Marketplace. Choose **Data Sources** from the site’s main menu, then select **ADD DATA SOURCE**. Next, choose *Wayfair Orders* and select **Add**. Select **Add** again to confirm. UUID-ffb49aba-c52f-0928-037f-b0101b8c6d31 Select **Authentication** from the drop-down menu and choose *Wayfair Authentication*. Be certain that you use credentials suitable for the environment. Select **Environment** and choose *Production* or *Sandbox*. Enter your **Store URL**. Enter the number of days from today to import orders in **Created in last days**. Choose the orders for import in **Order filter**. Select *Open*, *Accepted*, or *All*.  *OPEN* describes orders that are awaiting acceptance. *ACCEPTED* describes orders the platform accepted and has shipped. ALL describe both *OPEN* and *ACCEPTED*. In **Description (optional)**, enter a description, and the platform displays it in the list of data sources instead of the *Source URL*. Select **Save**. To learn more about export channel settings, see [Add export](/docs/help-center/export-data-feeds/add-export). UUID-1c09a629-bac9-e6dc-535e-76767732457d Set up Wayfair Orders Acceptance Notifications export [#set-up-wayfair-orders-acceptance-notifications-export] After successfully adding your data sources, add the *Wayfair Orders - Acceptance Notifications* export channel for order acceptance export updates. Go to **Exports** in your site’s main menu and select **ADD EXPORT**. Next, select **Add** for the *Wayfair Orders - Acceptance Notifications* export. UUID-59dca42e-156d-c950-8330-70d73b2c5ffa In the **Destinations** section, select **Add Destination** and choose *Wayfair Orders - Accept API* from the drop-down list. Now, enter a destination **Name**. UUID-d61567c3-2973-4234-09d4-662ab5d74b1b Select **Authentication** from the drop-down menu and choose *Wayfair Authentication*. Be certain that you use credentials suitable for the environment. * If you don’t see a Wayfair authentication in the drop-down list, add it by entering your Wayfair Marketplaces shop API credentials. Select **Add New Authentication**, choose *Wayfair Authentication*, and enter your Wayfair **Client ID** and **Client Secret**. UUID-d1371e04-3d49-ec26-6806-8f71ecefb150 Select **Environment** and choose *Production* or *Sandbox*. Switch **Feedback import** to **On** if you want an error file returned to the platform once your data export finishes. Go to step [8](#N1617405844997) if **Feedback import** is set to **Off**. Enter a feedback file to report on in **Feedback file connection column**. Connect the feedback file column to a main feed column in **Main feed connection column**. Select **Active** to switch the destination to **On**. Select **Save**. UUID-57ed1a6c-0945-5267-11f5-4b38f23aca12 The Wayfair Orders Acceptance Notifications export channel must include the following required columns in Dataflow to send an order acceptance: * `poNumber`: Mandatory. * `partNumber`: Mandatory, the platform does not accept orders without line-item details. The platform also includes the order during shipped notifications. * `quantity`: It is mandatory to provide the quantity of accepted line-item partNumber on acceptance. * `shipSpeed`. * `estimatedShipDate`. * `unitPrice`. UUID-02604306-5d39-201c-6525-68268b7ea983 Set up Wayfair Orders Shipment Notifications (Small Shipments) export [#set-up-wayfair-orders-shipment-notifications-small-shipments-export] After successfully adding your data sources, add the *Wayfair Orders - Shipment Notifications (Small Shipments)* export channel for ship notification export updates. Go to **Exports** in your site’s main menu and select **ADD EXPORT**. Next, select **Add** for the *Wayfair Orders - Shipment Notifications (Small Shipments)* export. UUID-090bcca4-1b98-471a-5504-30473d6fb711 In the **Destinations** section, select **Add Destination** and choose *Wayfair Orders - Shipment notifications API* from the drop-down list. Now, enter a destination **Name**. UUID-60f82e7f-6d83-50c9-f5e0-a5733302d2a5 Select **Authentication** from the drop-down menu and choose *Wayfair Authentication*. Be certain that you use credentials suitable for the environment. * If you don’t see a Wayfair authentication in the drop-down list, add it by entering your Wayfair Marketplaces shop API credentials. Select **Add New Authentication**, choose *Wayfair Authentication*, and enter your Wayfair **Client ID** and **Client Secret**. UUID-d1371e04-3d49-ec26-6806-8f71ecefb150 Select **Environment** and choose *Production* or *Sandbox*. Switch **Feedback import** to **On** if you want an error file returned to the platform once your data export finishes. Go to step [8](#N1617405844997) if **Feedback import** is set to **Off**. Enter a feedback file to report on in **Feedback file connection column**. Connect the feedback file column to a main feed column in **Main feed connection column**. Select **Active** to switch the destination to **On**. Select **Save**. UUID-57ed1a6c-0945-5267-11f5-4b38f23aca12 Check the export run status by selecting the **Run log** icon in the top-right corner. # Set up FabDis 3.0 exports import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] **FAB-DIS** (Fabrication Distribution) is a standard file format used by French manufacturers in the construction, parts, and tools industries to simplify and standardize product data exchange amongst their partner or distributor networks. See [FAB-DIS](https://fabdis.fr/en/) for more information. The FAB-DIS file format is a complex XLSX file consisting of many datasheets or tabs. Each datasheet requires a specific format for data input. Productsup exports help you organize your data feeds in different datasheets and combine them into the final FAB-DIS file. Productsup supports the FAB-DIS versions 2.3 and 3.0. This document describes the FabDis 3.0 exports and the way to set them up to generate the final FAB-DIS Excel sheet. For FAB-DIS 3.0, you can add and set up the following exports that correspond to the datasheet in the FAB-DIS file: | Export | Purpose | Mandatory or not | | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | | **FabDis 3.0 - B00\_Cartouche** | Identifies the issuer, FAB-DIS version, and the referencing data parameters. | Mandatory | | **FabDis 3.0 - B01\_Commerce** | Enables the commercial transaction by efficiently feeding the distributors' ERP. This is a head block for **B02\_Logistique**, **B03\_Media**, **B04\_Reglementaire**, **C01\_Extension**, **C02 - CORRESPONDANCE**, **C03\_VARIANTE**, and **C04 - ETIM**. | Mandatory | | **FabDis 3.0 - B02\_Logistique** | Optimizes logistics management, deals with the cases of items multiple-packing, and shares net product dimensions. | Mandatory | | **FabDis 3.0 - B03\_Media** | Enhances the offers in all multi-channel media, including web, print, ERP, and applications. | Mandatory | | **FabDis 3.0 - B04\_Reglementaire** | Certifies that the products comply with the regulations that have an immediate impact on the company's marketing and the legal liability of the participants. | Conditional | | **FabDis 3.0 - C01\_Extension** | The extension for **B01\_Commerce** and **B02\_Logistique** for occasionally used attributes. It provides high flexibility for adding new attributes without changing the structure in **B01\_Commerce** and **B02\_Logistique**. It also suggests a predefined structure for specific data between a manufacturer and distributor. | Conditional | | **FabDis 3.0 - C02 - CORRESPONDANCE** | Enhances the offers on the e-commerce websites or ERP. It also generates upsells by suggesting products to customers and guiding customers through the website, finds the solution to the availability issue, offers spare parts for product repair and maintenance, and optimizes order processing and inventory management. | Conditional | | **FabDis 3.0 - C03\_VARIANTE** | Simplifies access to the product variants on the web and facilitates a compact paper version of variants. | Conditional | | **FabDis 3.0 - C04 - ETIM** | Enhances the product attributes with the technical information of the ETIM standard integrated into FAB-DIS. | Conditional | | **FabDis 3.0 - C05\_ARRET** | Confirms the end date of marketing and meets the requirement for the availability of spare parts after this date. This is a stop block. | Conditional | | **FabDis 3.0 - C06\_SUBSTITUTION** | Identifies the current or the most relevant product or offer that replaces the old one, corresponding to a substitution level or a maintenance activity. | Conditional | | **FabDis 3.0 - F01\_PYRAMIDE** | Represents the pyramid of the manufacturer's marketing nomenclature. It organizes the offers expressions and the structure of sales statistics. | Optional | To use the FabDis exports, you need to have the *Distribution PX Module* in your contract. Contact your Customer Success Manager to add it to your contract. Decide how to set up the FabDis 3.0 Excel sheet file [#decide-how-to-set-up-the-fabdis-30-excel-sheet-file] Depending on your data sources and aims, there can be different ways to set up the FabDis export. If your data needs optimization such as cleaning and formatting, you can do it in the pre-processing sites first and then set up the FabDis exports with one of the following methods: . You can create separate sites for all the necessary FAB-DIS tabs that you need for generating the final Excel file. See [Set up FabDis 2.3 exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-fabdis-2-3-exports) to learn how to set up FAB-DIS with the method. . You can create one site for all FAB-DIS tabs and export the pre-processed data into CSV files to use them as data sources for the final FAB-DIS export file. In this document, we describe this method. You may also need to convert your raw data into ETIM classes and use it as a data source. See [Set up ETIM Classes exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-etim-classes-exports). Import, optimize, and map your data for FAB-DIS [#import-optimize-and-map-your-data-for-fab-dis] If you choose to set up all the FabDis exports, except for the final file, in one site, use the following approach. Prerequisites [#prerequisites] Create a separate site for all FabDis exports that correspond to the necessary FAB-DIS datasheets in the final FAB-DIS file. Import your data feed in **Data Sources**. Add and set up the necessary FabDis exports [#add-and-set-up-the-necessary-fabdis-exports] Add your data in **Data Sources**. Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for a needed FabDis export, for example, *FabDis 3.0 - B03\_Media*, and select **Add** Optionally, give your export a custom name in **Name**. The custom name replaces the export's name on the *Overview* page. Then select **Add**. Select **Add Destination** and choose your destination, for example, *Productsup Server*. Optionally, give this destination a custom name in **Name**. Select **Save**. Go back to the *Exports Overview* page. Add and set up other exports one by one repeating these steps for each export. Go to **Dataflow** from your site's main menu. Select an export from the channel selection drop-down menu in the upper ribbon and map the attributes from import to export. Repeat this for each added FabDis export. Select **Run**. After the export run, you can see that `pdsfeed.csv` appears in the Filename section of each export's overview. Copy the file's URL to use it as a data source for the final FabDis file. Generate the final FAB-DIS file [#generate-the-final-fab-dis-file] Now you can use the generated CSV files from all the exports set up in the first site as data sources for the final FAB-DIS Macro Excel File. Prerequisites [#prerequisites-1] Create a separate site for the final FabDis export. Go to **Data Sources** and select **Feed URL** to upload all CSV files generated by the first site's exports as main data sources. Add a column name for each data source: Go to **Data Sources** from your first site’s main menu. Select the cog wheel (**⚙**) icon next to a data source. UUID-7a2e0845-aa07-4fe2-71fc-eb7b7c8809ce Scroll down to **Content Options** and select **Add/Filter columns**. In **Column name**, enter the name of the column, for example, `sheet_name`, and, in **Value**, add the name of the data source which should be exactly the same name as your sheet name in the placeholder file, for example, `02_LOGISTIQUE`. UUID-e59ec317-276e-0877-f7b1-256c68be1e3d Repeat the procedure for each data source. Create a placeholder template. See [Use an item setup sheet](/docs/help-center/export-data-feeds/special-export-setups/use-an-item-setup-sheet#section-idm4563031856436832998590109533) to do it manually or contact \[[support@productsup.com](mailto:support@productsup.com)]\(mailto: [support@productsup.com](mailto:support@productsup.com)) to ask for the template *Fabdis\_v3.0\_placeholderfile.xlsx*. Upload your placeholder template to an FTP of your choice. Select **Import**. Add and set up the final FabDis export [#add-and-set-up-the-final-fabdis-export] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Blank Export (empty)* and select **Add**. Optionally, give your export a custom name in **Name**. The custom name replaces the export's name on the *Overview* page. Then select **Add**. Select **Add Destination** and choose your destination, for example, *Excel Macro Files (.xlsm)*. Optionally, give this destination a custom name in **Name**. Select **Save**. On the destination settings page, set up the destination: In **Template file**, enter the URL of the file. In **Template File FTP Username** and **Template File FTP Password** enter your FTP credentials to let the platform connect to the FTP server and download the file. Leave **Factsheet** empty. You need to add the Factsheet only when you need to generate a sheet for each product. Leave **Populate By Columns** button *Off* as you've prepared data in the first site. In **Sheet Name Column**, enter `sheet_name` which will populate the corresponding column dynamically. See the [Prerequisites](#section-idm353413381997374). Switch **Active** to *On* to turn on the destination. Select **Save**. Go to the **Overview** tab of your export, scroll to the **Filename** section, and select the **Setup** button. In **Filename**, change the name of your output file. The extension of your file should be `.xlsx` or `.xlsm`. Go to **Dataflow** from your site's main menu. Select your export from the channel selection drop-down menu in the upper ribbon and map the attributes from import to export. The attributes in the import stage are the attributes from all CSV files uploaded as data sources. You can use automatic mapping, by selecting **Map ALL Import columns to Export** in the **Automap connections** drop-down menu. Select **Export** or **Run**. After the export run, you can see that Excel or a Macro Excel File appears in the **Filename** section of each export's overview and you can download it. Go to **Scheduling** and set up triggers for the sites. See [Set up scheduling and triggering processes in Scheduling](/docs/help-center/dashboard-and-monitor/set-up-scheduling-and-triggering-processes-in-scheduling). # Add ARGE and IG Neue Medien exports import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] ARGE and IG Neue Medien (IGNM) are the HVAC industry data standards used in Germany and Austria, respectively. They both require receiving multiple CSV files where each file is responsible for a specific type of data. Both ARGE and IGNM use the same data quality guideline of the HVAC industry called DQR (Datenqualitätsrichtlinie). The latest DQR version is 9.0. See [Discover leading-edge advancements in ARGE DQR 9.0 for the HVAC industry](https://www.productsup.com/blog/2023-advancements-in-arge-hvac-industry/) to learn what has changed since version 8.0. Productsup offers ARGE and IGNM exports to let you send your product data to these data pools. This document provides general information about ARGE and IGNM exports in Productsup and offers some suggestions for the setup. You need to use the official DQR documentation to learn more about each required attribute and its specifics. See [ARGE Downloads (en)](https://www.arge.de/en/support/downloads-en/) for the latest version of the DQR documentation in English. See [IG Neue Medien Downloads](https://www.igneuemedien.at/downloads) for the German version of the DQR documentation. Prerequisites [#prerequisites] To use the needed ARGE or IGNM exports, you need: . Relevant product data in your data sources. . A project in your organization where you can add the needed sites. You should identify how many ARGE or IGNM exports you want to set up and create a site per each needed ARGE or IGNM export type.This is a recommended project structure. It helps to simplify attribute mapping and enables setting up preprocessing sites if necessary. . A desired export destination, such as an FTP or SFTP server, where Productsup can send the output CSV files. See [Create an FTP server hosted by Productsup](/docs/help-center/get-started/create-and-manage-an-ftp-server/create-an-ftp-server-hosted-by-productsup) if you don't have a dedicated server account yet. . Access to the [OXOMI](https://oxomi.com/) portal to upload the output CSV files that your Productsup sites generate for ARGE or IGNM. Decide which exports you need [#decide-which-exports-you-need] ARGE and IGNM accept multiple types of CSV files. Every CSV file type must have a specific structure. To produce the needed CSV files, Productsup offers one export per each file type accepted by ARGE and IGNM. Only three (3) exports are mandatory for ARGE or IGNM to receive your product data successfully: | Mandatory ARGE exports | Mandatory IGNM exports | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **IGNM / ARGE DQR 9.0 - Kopfdaten**The Kopfdaten export contains general information about your product catalog and the data delivery, such as your catalog ID, name, and data provider ID.**ARGE DQR 9.0 - Artikel**The Artikel export contains your full product catalog and stores general data about your products, such as product type, minimum order quantity, short product description, and price. The more information you send using this export, the higher the chances that you need to use additional ARGE exports.**IGNM / ARGE DQR 9.0 - Artikelattribute**The Artikelattribute export contains an extended list of product attributes and their values. You can use this export to send ETIM classification data, keywords, battery information, disposal instructions, hazardous goods details, etc. One of the mandatory attributes in this export is `Attributsystem`, where you need to state the system each attribute refers to, for example, *ETIM 9*, *ZVSHK*, *INDIV*, or *Gebühren*. | **IGNM / ARGE DQR 9.0 - Kopfdaten**The Kopfdaten export contains general information about your product catalog and the data delivery, such as your catalog ID, name, and data provider ID.**IGNM DQR 9.0 - Artikel**The Artikel export contains your full product catalog and stores general data about your products, such as product type, minimum order quantity, short product description, and price. The more information you send using this export, the higher the chances that you need to use additional IGNM exports.**IGNM / ARGE DQR 9.0 - Artikelattribute**The Artikelattribute export contains an extended list of product attributes and their values. You can use this export to send ETIM classification data, keywords, battery information, disposal instructions, hazardous goods details, etc. One of the mandatory attributes in this export is `Attributsystem`, where you need to state the system each attribute refers to, for example, *ETIM 9*, *ZVSHK*, *INDIV*, or *Gebühren*. | If you want to send more product data to ARGE and IGNM, you can additionally use the following exports: * **IGNM / ARGE DQR 9.0 - Artikeldokumentenzuordnungen**The Artikeldokumentenzuordnungen export contains images and documents for each product in your catalog. One product can have multiple images and documents assigned to it. * **IGNM / ARGE DQR 9.0 - Langtexte**The Langtexte export contains texts that describe a collection of related products, such as products within the same series. Multiple products from the Artikel export can reuse the same shared description text from the Langtexte export. End customers can later see these texts in price quotes and invoices.The Langtexte export has three (3) attributes: * `Langtextnummer` stores the ID of the shared description text. The Artikel export also uses this attribute, which ties each product to a specific shared description text from the Langtexte export. * `Langtextzeile` stores the shared description text in chunks. ARGE and IGNM accept shared description texts in chunks of 40 characters. You can provide 99 chunks of text with the same `Langtextnummer` and values from *1* to *99* in `Langtextzeilennummer` to send your full shared description text. * `Langtextzeilennummer` stores the number of each text chunk. ARGE and IGNM use this number to arrange the chunks of the same shared description text in the right order. * **IGNM / ARGE DQR 9.0 - Dimensionstexte**The Dimensionstexte export contains texts that can describe each specific product individually. You can use this export to provide additional explanations about specific product attributes if the rest of the products in the same series don't share the same characteristics.Like the Langtexte export, the Dimensionstexte export uses the logic of splitting up the full description text into chunks of 40 characters. * **IGNM / ARGE DQR 9.0 - Zusaetzliche\_Artikeltexte**The Zusaetzliche\_Artikeltexte export contains additional texts that comprehensively describe each product across all distribution levels. You can use this export to provide a short and long product summary, a marketing text, and an application note for your products. * **IGNM / ARGE DQR 9.0 - Artikelmasse**The Artikelmasse export contains your products' netto weights, volumes, and dimensions. This information is useful for logistics purposes. * **IGNM / ARGE DQR 9.0 - Artikelsets**The Artikelsets export contains sets of related products within your catalog. All products mentioned in this export should be present in the Artikel export and available to order separately. * **IGNM / ARGE DQR 9.0 - Artikelzubehoer**The Artikelzubehoer export connects your main products with their accessories. All products and their accessories mentioned in this export should be present in the Artikel export. * **IGNM / ARGE DQR 9.0 - Gruppen**The Gruppen export contains the groups your products belong to. Your organization can define the names and descriptions of the desired product groups in `Gruppennummer` and `Gruppenbezeichnung`. All defined product groups must belong to one of these group types: * Commodity group, which requires the value *WG* in `Gruppenart`. * Product group, which requires the value *PG* in `Gruppenart`. * Bonus group, which requires the value *BG* in `Gruppenart`. * Discount group, which requires the value *RG* in `Gruppenart`. * **IGNM / ARGE DQR 9.0 - Gruppendokumentenzuordnungen**The Gruppendokumentenzuordnungen export contains images and documents for each product group. One product group can have multiple images and documents assigned to it. * **IGNM / ARGE DQR 9.0 - Rohstoffe**The Rohstoffe export provides information about the raw materials used to produce each product. One product can have multiple raw materials assigned to it. * **IGNM / ARGE DQR 9.0 - Linienpreise**The Linienpreise export provides more extensive information about your products' pricing. * **IGNM / ARGE DQR 9.0 - Ersatzteillisten**The Ersatzteillisten export provides a list of spare parts for each product in your catalog. You can assign spare parts lists to both current and historical products in your catalog. * **IGNM / ARGE DQR 9.0 - Historische\_Produkte**The Historische\_Produkte export contains a list of products that you no longer sell but whose spare parts are still available for order within your catalog. * **IGNM / ARGE DQR 9.0 - Hp\_Dokumentenzuordnungen**The Hp\_Dokumentenzuordnungen export contains images and documents for each product you no longer sell. One historical product can have multiple images and documents assigned to it. Set up ARGE and IGNM exports [#set-up-arge-and-ignm-exports] Adding and setting up ARGE and IGNM exports is a technically advanced task. Reach out to your Customer Success Manager or contact [support@productsup.com](mailto:support@productsup.com) if you need help. Go to **Exports** from your site's main menu, and select **Add export**. Search for *DQR 9.0*, hover over the needed export, and select **Add** to add it to your site. UUID-b541a04d-425f-6e32-138a-0c7ad79277d9 Add only one ARGE or IGNM export type per site, such as **IGNM DQR 9.0 - Artikel**, to simplify attribute mapping and data optimization. Go to **Dataflow** from the site's main menu and choose the added export from the drop-down menu in the top ribbon on the left to map its attributes from import to export. Go to **Exports** and select the name of the needed export. Select **Add Destination**, choose the desired option, and then select **Save**: Use any FTP or SFTP server as your export destination. Set up the chosen destination as needed and select **Save**. To get your data ready across all sites with ARGE and IGNM exports, you may additionally need to: * Use the official DQR documentation to see the requirements for your data and identify which rule boxes to apply to your attributes. See [ARGE Downloads (en)](https://www.arge.de/en/support/downloads-en/) and [Optimize your data in Data View with rule boxes](/docs/help-center/map-and-optimize-your-data/data-view/optimize-your-data-in-data-view-with-rule-boxes). * Use the Analyzer feature to see if your attribute values meet the requirements. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view). * Set up preprocessing sites to create ETIM classification data for your product attributes and values. See [Set up ETIM Classes exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-etim-classes-exports). * Use the Image Exporter export to export all your images to one FTP or SFTP server. See [Add the Image Exporter export](/docs/help-center/export-data-feeds/special-export-setups/add-the-image-exporter-export). Once all your data is ready, select **Run** in the top-right corner of your view to let the site generate your output CSV file. # Send your offers to Mirakl-based marketplaces import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Mirakl is a French SaaS e-commerce company that provides software for businesses to let them launch, manage, and grow their own online marketplaces and dropshipping operations. In Mirakl, there are products and offers: * Products refer to product creation or updates. A product is a catalog item you sell that contains information such as item ID, title, brand, description, category, etc. * Offers refer to inventory data, such as price, stock, shipping details, and seller-specific terms. Productsup lets you send offers, shipment updates, and order data to Mirakl-based marketplaces, as well as import order data from Mirakl to Productsup. Productsup offers the following exports to send data to the marketplace: | Export name | Description | | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Mirakl Offers(previously *Mirakl Product Prices and Availabilities Export*) | A general export if you don't need to send the offers to a dedicated marketplace. This is an API-based export. | | \ - \ (Offers via Mirakl) | Custom exports for each Mirakl marketplace per country and product category, for example, *Walmart Mexico - Food (Offers via Mirakl)* or *BestBuy Canada - Electronics (Offers via Mirakl)*. It is useful for cases when you send offers across multiple marketplaces, countries, and categories. UUID-83b05cf6-033a-c531-4dda-8b71b91b073e The exports' setup and functions are the same as for the Mirakl Offers export.This is an API-based export. | | Mirakl Orders Acceptance & Rejection | Sending confirmation or rejection information for the orders to the marketplace.This is an API-based export. | | Mirakl Shipment Notification | Sending your shipment updates to the marketplace.This is an API-based export. | Productsup doesn't support an out-of-the-box export for product creation in Mirakl-based marketplaces. If you need an export for product creation for a specific marketplace, you must: Generate and download an Excel file for product export in your Mirakl account. The file should contain the needed categories and language. Send the ready template to your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com). To import your order data from Mirakl, use the *Mirakl Order Import*. See [Import orders from Mirakl](/docs/help-center/import-data-feeds/import-data-from-third-party-external-systems/import-orders-from-mirakl). Prerequisites [#prerequisites] Before setting up your Mirakl exports, you must: . Create an account on Mirakl if you don't have one. . Have the host URL for your marketplace, such as `marketplace.mirakl.net`, the API key, and the shop IDs. . Import your offers to Productsup as a main data source. See [Add a main data source to import your products](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-a-main-data-source-to-import-your-products). Send your offers to Mirakl [#send-your-offers-to-mirakl] To add and set up the *Mirakl Offers* export or a dedicated export *\ - \ (Offers via Mirakl)*: Go to **Exports** from your site's main menu and select **Add export**. Search for *Mirakl Offers* or an export dedicated to a specific marketplace, hover over it, and select **Add**. UUID-19161dda-6210-45bb-c2ad-fbdf1803d819 On the **Exports** page, select the name of the added export to set it up. Select **Add Destination** and choose *Mirakl* from the dropdown. Give it a name as desired, and select **Save**. UUID-0e88e82a-8627-f2df-ea55-f1d9c7b89473 Enter the host and API key from your Mirakl account in the **Host** and **API key**. Select an import mode in **Import Mode**. For most of the cases, leave the default *Normal*. Here is an explanation of the modes: * *Normal* modifies (updates, deletes, or replaces) each offer based on the value of the **updatedelete** attribute in the export file: 1. The **updatedelete** attribute is set to `update` or is blank: * If the **sku** attribute doesn't match any existing offer in the shop, the platform creates a new offer. * If the **sku** attribute matches an existing offer in the shop, the platform updates the offer. * The **product-id** and **product-id-type** attributes link an offer to a product. 2. The **updatedelete** attribute is set to `delete`: * The platform deletes the offer. * The platform uses only the **sku** attribute and ignores the others. * If the offer doesn't exist, you get an error. * *Partial update* only updates attributes containing data, not blank. The **updatedelete** attribute can exist, but must be blank. If isn't blank, you get an error. * *Replace* removes all existing offers that aren't present in the offer file and replaces them with those defined in the export file. It also updates all existing offers in the Productsup platform or export file. The **updatedelete** attribute can exist, but must be blank. If it isn't blank, you get an error. In **Shop**, enter the IDs of the shops you want to import orders from. You must separate them by commas (`,`). Toggle the **Active** button to *On* to activate the destination. Select **Save**. UUID-258bcb0c-b1d5-ec17-9b60-c363cd5f6ae2 Go to **Dataflow** from your site's main menu and select *Mirakl Offers* in the dropdown on the top left. Connect all the mandatory attributes from import to export. Once your data is ready, select **Run** in the top-right corner of your page to send your offers to MIrakl. Send your order acceptance or rejection to Mirakl [#send-your-order-acceptance-or-rejection-to-mirakl] To accept or reject an order in the Mirakl marketplace, use the *Mirakl Orders Acceptance & Rejection* export. You can accept or reject only orders with the status WAITING\_ACCEPTANCE. Go to **Exports** from your site's main menu and select **Add export**. Search for *Mirakl Orders Acceptance & Rejection*, hover over it, and select **Add**. UUID-f4be5094-e243-1e05-7c24-d00e7b0da65a On the **Exports** page, select the name of the added export to set it up. Select **Add Destination** and choose *Mirakl Order Accept/Reject Export* from the dropdown. Give it a name as desired, and select **Save**. Enter the marketplace URL in the **Mirakl api url**. Enter the API key from your Mirakl account in **Mirakl api key**. In **Shop id**, enter the IDs of the shops you want to import orders from. You must separate them by commas (`,`). Leave **Feedback Import** on *On* if you want to receive a response directly from Mirakl in case of any export failures. The platform will store the feedback automatically as an additional data source in the form of a downloadable CSV file. Toggle the **Active** button to *On* to activate the destination. Select **Save**. UUID-f7bab09c-126d-137f-8884-cc6a37d10b3f Go to **Dataflow** from your site's main menu and select *Mirakl Orders Acceptance & Rejection* in the dropdown on the top left. Connect all the mandatory attributes from import to export: * **accepted** – the order status. To accept an order line, set to `true`. To reject, set to `false`. * **order\_id** – the order ID on Mirakl. * **order\_line\_id** – the order line ID on Mirakl. An order line item represents an offer and its quantity in the customer’s shopping cart, so that an order can have multiple order lines for multiple offers. Once your data is ready, select **Run** in the top-right corner of your page to send your order acceptance or rejection updates to Mirakl. Send your shipment notifications to Mirakl [#send-your-shipment-notifications-to-mirakl] To send your shipment notifications to the Mirakl marketplace, use the *Mirakl Shipment Notification* export. Go to **Exports** from your site's main menu and select **Add export**. Search for *Mirakl Shipment Notification*, hover over it, and select **Add**. UUID-6d5a6ced-5f00-8835-08f4-e064bcda8ae2 Select **Add Destination** and choose *Mirakl Shipment Notification* from the dropdown. Give it a name as desired, and select **Save**. On the **Exports** page, select the name of the added export to set it up. Enter the marketplace URL in the **Mirakl api url**. Enter the API key from your Mirakl account in **Mirakl api key**. In **Shop id**, enter the IDs of the shops you want to import orders from. You must separate them by commas (`,`). Select the shipment information in **Order Id Column**, **Tracking Number Column**, **Carrier Url Column**, **Carrier Name Column**, and **Carrier Code Column**. Leave **Feedback Import** on *On* if you want to receive a response directly from Mirakl in case of any export failures. The platform will store the feedback automatically as an additional data source in the form of a downloadable CSV file. Toggle the **Active** button to *On* to activate the destination. Select **Save**. UUID-e50ec51e-ca6e-69f6-0cc0-15d0315c55d5 Go to **Dataflow** from your site's main menu and select *Mirakl Shipment Notification* in the dropdown on the top left. Connect the needed attributes from import to export. Once your data is ready, select **Run** in the top-right corner of your page to send your order acceptance or rejection updates to Mirakl. # Set up order sync for Cdiscount import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Cdiscount is one of the largest e-commerce platforms in France. It offers a various products, including electronics, household appliances, and food. Productsup has built an ecosystem that imports order data from Cdiscount to Productsup and sends shipment notification data to Cdiscount: . *Cdiscount Orders*This data source lets you upload orders from the CDiscount account and filter them by status or date of creation or update. . *Cdiscount Order Shipment Delta API*This export uses an API to send order shipment data to Cdiscount. It uses the delta logic, sending only changed data to Cdiscount with every export run instead of sending the entire catalog. Prerequisites [#prerequisites] To set up the Cdiscount orders and shipment status in Productsup, you need to: Create an account or log in to your Cdiscount seller account supported by Octopia. See [Octopia](https://seller.octopia.com/). White-label Productsup as integration provider. To do this, you must contact the API support in your Cdiscount seller portal and send them the message: *"I authorize $Client\_ID to act on my seller account $Seller\_ID,"* entering your Productsup account ID instead of *$Client\_ID* and your Cdiscount seller ID instead of *$Seller\_ID*. Activate **Automatic Order Validation** in your Cdiscount account if you want to export shipment notifications. This option automatically changes each new order’s status from *WaitingAcceptance* to *Accepted*, which is necessary to ship an order. Import your orders from Cdiscount to Productsup [#import-your-orders-from-cdiscount-to-productsup] You can import orders from the CDiscount account to Productsup. Orders come per order item, meaning there may be as many rows as the number of products in that order. Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Cdiscount Orders*, select **Add**, give it a name as desired, and then select **Continue**. UUID-5424b71d-8695-dea8-e0e0-c32d4c29ee42 In **Seller ID**, add the ID of your Cdiscount seller account. In the **Order Status**, you can filter orders by status. Choose the needed order statuses by holding the **Crtl** or **command** keys and selecting from the list: * *All* * *WaitingAcceptance* * *Accepted* * *Refused* * *InPreparation* * *Shipped* * *Delivered* * *Cancelled* * *CancelRequest* In **Order created from**, **Order created till**, **Order updated from**, **Order updated till**, you can filter orders by the creation or update date. In **Description (optional)**, add a description for your data source. It substitutes the data source name on the *Overview Data Sources* page. UUID-9ba540bd-dbd3-faa2-6eb3-f5adf16f6348 Select **Save**. To import orders from Cdiscount, select **Import** in the top-right corner of your site's view. Send your order shipment data to Cdiscount [#send-your-order-shipment-data-to-cdiscount] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Cdiscount Order Shipment Delta API*, hover over it, and select **Add**. UUID-750b1bee-0038-1bc2-12d1-b92e70f23a3a On the *Exports* page, select the name of the added export to set it up. Select **Add Destination**, choose *CDiscount Order Shipment delta export* from the drop-down list, give it a name as desired, and select **Save**. UUID-762bc582-b18e-6dd8-dfae-36d592897df4 In **Seller ID**, enter your Cdiscount seller ID. Leave **Feedback Import** on *On* if you want to receive a response directly from Cdiscount in case of any export failures. The platform will store the feedback automatically as an additional data source in the form of a downloadable CSV file. Switch the **Active** button to **On** to activate the destination. Select **Save**. Go to **Dataflow** from the site’s main menu. Choose your *Cdiscount Order Shipment Delta API* from the drop-down menu on the left. Connect at least the following attributes between the intermediate and export stages: * **order\_id** * **carrier\_name** * **parcel\_number** UUID-baf21c41-3196-5d4c-0023-4688d0c2a3ea If your data is ready, select **Run** or **Export this export** in the upper right corner of the page. # Set up ETIM xChange export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; ETIM xChange is an international format for product data exchange. The ETIM xChange format uses JSON, a popular human- and machine-friendly data format. JSON Schema lets you define the structure and rules of JSON data making a strong alternative to XML. You can use widely JSON itself for web applications, configuration, and storage and with JSON Schema you can validate that JSON data follows specific standards. This guide covers ETIM xChange 2.0, which is compliant with the ETIM xChange V2.0 schema. The ETIM xChange format structure includes: * Catalogue data * Supplier data * Product data * Trade item data The format has a minimum of mandatory attributes. Only essential attributes are mandatory. For example, you must have at least one unique identifier to list a product. Download the complete [ETIM xChange documentation](https://www.etim-international.com/downloads/?_sft_downloadcategory=xchange) from ETIM International. ETIM xChange 2.0 sub-channels and fields [#etim-xchange-20-sub-channels-and-fields] ETIM xChange 2.0 covers the following sub-channels and product fields. * 15 sub-channels, including Legislation, LCA Environmental, Packaging Unit, Item Relations, Other Classifications, Product Country Specific Fields, Item Country Specific Fields, and Item Attachments. Prerequisites [#prerequisites] Before setting up the ETIM xChange export, you need to: . Import your data to Productsup. See [Add a main data source to import your products](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-a-main-data-source-to-import-your-products). . Structure your data so that one row equals one trade item, which also corresponds to one product and one supplier. An ETIM xChange 2.0 export channel can only contain data for a single supplier. Add and set up the ETIM xChange 2.0 export [#add-and-set-up-the-etim-xchange-20-export] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for **ETIM xChange 2.0** and select **Add**. Select the export's name link. Select **Add Destination** and choose the ETIM xChange 2.0 destination connector. Give it a name as desired and select **Save**. In the **Upload type**, select *SFTP* or *Productsup Server.* See [Find the most suitable export destination](/docs/help-center/best-practices/find-the-most-suitable-export-destination). Enter the FTP host, username, and password in the corresponding fields. The platform creates a JSON file compliant with the ETIM xChange V2.0 schema and exports it to the selected destination where you can access it. Toggle **Active** to **On** to activate the destination. Select **Save**. Add the data service ETIM xChange trade item multiplication [#add-the-data-service-etim-xchange-trade-item-multiplication] After setting up your export, you need to add a data service to get all the necessary JSON nodes in your final file. Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *ETIM xChange trade item multiplication*, select **Add**, and give it a desired name and attribute prefix. By default, `___prefix` is in the **Column prefix**, but you can change it to another name. The platform will add this prefix at the beginning of an attribute name generated by the data service. The attribute names generated by the data service always start with three underscores (`___`), which means the platform doesn't send such attributes to your export channels. In the **Nodes** field, enter the JSON node names using a comma (`,`) without spaces as a separator. Enter only the nodes you plan to map — each one you add creates a corresponding sub-channel. ETIM xChange 2.0 supports the following 15 nodes: *Supplier Attachments,Product Details,Product Relations,Product Attachments,Trade Item Details,Trade Item Logistic Details,ETIM Classification,Legislation,LCA Environmental,Packaging Unit,Item Relations,Other Classifications,Product Country Specific Fields,Item Attachments,Item Country Specific Fields* Select **Save**. For the platform to process a new data service, select **Run** in the top-right corner of your site's view. Because the data service creates one row per active node, the export log's record count reflects unique products, not raw rows. For example, 10 products across 15 active nodes produce 150 rows internally, but the log reports 10 records processed. The final export file merges these rows back per product, so it doesn't contain any unnecessary multiplications. If you can't see your new data in Data View, ensure the platform hasn't hidden it: Go to **Data View** from your site's main menu and choose the relevant stage or export in the dropdown on your left. Select the menu icon UUID-18751a0c-eb43-7fb5-14b0-7e5b22309b15 on the right and then select the eye icon UUID-0b2dd6f4-3b45-6596-16d8-f34fc7425d8e . Find the attributes in the list that use the custom prefix `___prefix` and select the eye icon UUID-86cc4449-57d5-ce24-980b-985e6600da33 next to each attribute you want Data View to display. Close the pop-up. Map imported product categories to ETIM with Lists [#map-imported-product-categories-to-etim-with-lists] Skip this step if the ETIM codes are already in your imported data feed. Go to **Lists** from your site's main menu. Select **ADD LIST**. In **Choose a list type**, choose **Classification Mapping** and select **Continue**. UUID-0a5ddd50-8f5f-2201-347b-0f21b40b34a4 In **Configure the Classification Mapping list**, do the following: In **Name**, give your list a desired name. In **Classification**, choose the *ETIM xChange 2.0* classification standard. In **Stage**, select **Import**. In **Attribute**, select *\_\_additionalNodes*. Optionally, toggle **Share list** if you want to share the list within the organization or project. Select **Add**. Assign the appropriate replacement term to your values by choosing from the **Replace term** dropdown. UUID-91258dbb-b62d-ea65-6da8-6d46f4c822bf Map your attributes and apply the Classification Mapping list [#map-your-attributes-and-apply-the-classification-mapping-list] Map the corresponding attributes from import to export in Dataflow: > > The **Classification** dropdown now appears in the top toolbar of Dataflow. If you open it, you can see the ETIM xChange JSON nodes in your data feed. > > > UUID-5b006dde-7fcd-2b3a-b43c-2c194eeda89b Go to **Dataflow** from your site's main menu. Select your ETIM xChange export from the dropdown on the left in the top toolbar. Map the attributes from the intermediate to the export stage. Hover over the **\_\_additionalnodes** attribute in the intermediate stage and select the arrow icon on the right. UUID-3342d724-440a-785d-5f3b-dd504e025431 Search for the **Classification Mapping** rule box and drag it to the green area. UUID-a5be8c68-08bf-a9d0-2a13-4cf31f35cc05 In the **List** dropdown, select the Classification Mapping list you set up. Select **Save**. Select **Run** in the top-right corner to import the ETIM classification attributes. Wait for the run to finish and go to **Settings** from your site's main menu and select **Advanced Settings**. Select **Reset** in the Reset Data section. UUID-7c3eca68-e690-97fb-c85e-1574a744dee8 The first export run reveals the sub-channel tabs in Dataflow. It can take a few runs for all mapped data to be fully reflected. Map JSON nodes for ETIM xChange [#map-json-nodes-for-etim-xchange] In **Dataflow**, select a JSON node you want to map in the **Classifications** dropdown. The platform refreshes the view and shows the JSON nodes in the export stage. Map the attributes for the selected JSON node to the intermediate stage. Repeat the same steps in all ETIM xChange JSON nodes from the drop-down menu. Check and edit ETIM values [#check-and-edit-etim-values] To check if all the values are present in your feed: Go to **Data View** from your site. Select your export from the dropdown on the left in the top toolbar. Select the JSON node you want to check from the **Classification** dropdown. Select the **Analyze** button for the attribute you want to check. UUID-2ac97358-5165-79a2-53b6-61afbba5b017 The side panel opens showing whether your attribute contains valid ETIM values or suggesting possible actions to correct them. See [Analyze your data in Data View](/docs/help-center/map-and-optimize-your-data/data-view/analyze-your-data-in-data-view#section-idm4538971827048033726544546987) for more information on the Analyzer feature. UUID-b157fe70-5eed-2157-d24a-7ebc0b011d4f Use rule boxes to edit the values if necessary. Common pitfalls with ETIM xChange 2.0 [#common-pitfalls-with-etim-xchange-20] | Pitfall | What to do | | :---------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Multi-value ETIM Classification feature columns don't align | Use the `<###>` delimiter only for ETIM Classification feature columns, such as `EC.0.EtimFeatureCode` and `EC.0.EtimValueCode`. The platform splits these columns on `<###>` and matches values by position to build each ETIM feature. Every other multi-value field uses a comma (`,`) as its delimiter. | | An export run fails with no file delivered | Check the feedback file for the specific error. The export processes all records as a single batch, so one invalid record fails the entire run. Fix the offending record and run the export again. | # Add Google Merchant Center - Promotions (API) export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; In Google Merchant Center (GMC), you can use promotions data to let shoppers discover your products as discount deals in Google Search or Google Shopping. See [Get started with Promotions](https://support.google.com/merchants/answer/13422697) for more information on GMC promotions. *Google Merchant Center - Promotions (API)* is an API-based export that lets you create, update, and delete promotions in Google Merchant Center automatically by running the export in your Productsup site. Having promotions data in your GMC account helps you attract more customers and receive more orders. Choose this export if you have a large promotions data feed that continually changes because it can let you save time and avoid errors compared to the manual upload option via the export *Google Merchant Promotions*. See [Add Google Merchant Promotions export](/docs/help-center/export-data-feeds/special-export-setups/add-google-merchant-promotions-export) for more information on the flat-file export option. The export *Google Merchant Center - Promotions (API)* uses the Content API for Shopping to send your promotion data to GMC. The data you can send includes, for example, promotion IDs, offer types, coupon types, promo codes, promotion start and end times, item brands, discounts, etc. Prerequisites [#prerequisites] To use the *Google Merchant Center - Promotions (API)* export, you need the following: . A Google Merchant Center account. . GMC authentication in your Productsup organization. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems) for more information.To add GMC authentication to your Productsup organization: Go to **Authentication** from the organization's, project's, or site's menu and select **ADD AUTHENTICATION**. In **Type**, select *Google Merchant Center*, give it a custom name as desired, and select **Next**. Select **Connect** for Productsup to redirect you to a Google account page where you can give Productsup access to your Google Merchant Center account. Once ready, Google returns you back to Productsup. Close the confirmation window to proceed. . Promotions data located in a third-party system or file that you can use as a data source in Productsup. See [Promotions data specification](https://support.google.com/merchants/answer/2906014) for information on all required and optional promotions attributes. Consult [Promotions policies](https://support.google.com/merchants/answer/2877565) for Google's general promotions guidelines. . A separate site in your Productsup organization where you can add a relevant data source and import your promotions data. . Valid promotion IDs in your product feed that GMC can use to apply promotions to your products. See [Prerequisite 4](/docs/help-center/export-data-feeds/special-export-setups/add-google-merchant-promotions-export#para-idm243487014173884) in the flat-file export document for more information on this requirement. . Your Merchant ID that Google assigned to your payment profile. See [Find your Merchant ID](https://support.google.com/paymentscenter/answer/7163092?hl=en) for more information. Set up the export Google Merchant Center - Promotions (API) [#set-up-the-export-google-merchant-center---promotions-api] Go to **Exports** from your site's main menu, and select **Add export**. Search for *Google Merchant Center - Promotions (API)*, hover over the export, and select **Add**. UUID-6d0410ac-aa57-eb65-f825-c32d3108d0cf On the Exports page, select the name of the added export to set it up. Select **Add Destination**, choose *GMC Promotion API v1* from the drop-down list, give it a name as desired, and then select **Save**. UUID-db3555b3-22dd-1556-fcc9-5b041b525917 Choose your GMC authentication in **Authentication to use**. If you haven't created the authentication in the platform yet, select **Add New Authentication** and create it, as previously seen in [Prerequisites](#N1709915991135). Toggle the **Active** button to **On** to activate the destination. Select **Save**. Go to **Dataflow** and select **Google Merchant Center - Promotions (API)** in the drop-down menu on the left. Connect all mandatory attributes from import to export. The mandatory attributes are: 1. **merchant-id** 2. **target-country** 3. **language** 4. **promotion-id** 5. **product-applicability** 6. **offer-type** 7. **title** 8. **redemption-channel** 9. **coupon-type** 10. **promotion-start-time** 11. **promotion-end-time** Go to your Google Merchant Center account to add Productsup as your API-based promotions data source. To export the needed promotion data to Google Merchant Center, go to **Exports**, select the export *Google Merchant Center - Promotions (API)*, and then select **Export this export**.You can also select **Export** or **Run** in the top-right corner of your view on any page of the site to export the promotions data. This action, however, sends your site's data to all exports added in the site. Before sending your promotion data to GMC, Productsup checks that it contains all mandatory attributes and that the values in those attributes match the GMC requirements. See [Promotions data specification](https://support.google.com/merchants/answer/2906014). If your promotion or merchant IDs are in the right format but aren't valid, you can't see an error in Productsup. GMC runs a promotion validation process internally, so you need to go to your GMC account to check the success of the data upload and validation. # Add Google Merchant Promotions export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; In Google Merchant Center (GMC), you can use promotions data to let shoppers discover your products as discount deals in Google Search or Google Shopping. See [Get started with Promotions](https://support.google.com/merchants/answer/13422697) for more information on GMC promotions. The *Google Merchant Promotions* export lets you send promotions data to supplement your product feed in Google Merchant Center. This export includes such attributes as **promotion\_id**, **promotion\_effective\_dates**, **offer\_type**, **redemption\_channel**, **product\_applicability**, etc. This is a flat-file export, which should cover most cases. If your promotions data frequently changes, you can send it to GMC via API using the export *Google Merchant Center - Promotions (API)*. See [Add Google Merchant Center - Promotions (API) export](/docs/help-center/export-data-feeds/special-export-setups/add-google-merchant-center-promotions-api-export). If you want to add 10 or fewer promotions in Google Merchant Center, it may be worth doing so manually right in GMC. You need to use the **promotion\_id** attribute to map the created promotions to the needed products in your GMC feed. The more promotions data you have, the more sense it makes to send it as a feed from Productsup. Prerequisites [#prerequisites] To send promotions data to GMC using the export *Google Merchant Promotions*, you need: . Promotions data located in a third-party system or file that you can use as a data source in Productsup. See [Promotions data specification](https://support.google.com/merchants/answer/2906014) for information on all mandatory and optional promotions attributes. See [Promotions policies](https://support.google.com/merchants/answer/2877565) for Google's general promotions guidelines. . A separate site in your Productsup organization where you can add a relevant data source and import your promotions data. . A Google Merchant Center account. . The **Promotions** add-on in your Google Merchant Center account that lets you add promotions data. See [Get started with Promotions](https://support.google.com/merchants/answer/13422697) for more information. . The attribute **promotion\_id** both in your product and promotions feeds. If you plan to use promotions that apply to specific products instead of your entire product catalog, your promotions data and product feed must contain the attribute **promotion\_id** to let GMC upload promotions data to the needed products.Alternatively, you can use product filter attributes to tie your promotions to the needed products. See [Product filters](https://support.google.com/merchants/answer/2906014#ProductFilters) for more information.Here is an example of how your product feed and promotions data should correlate through the **promotion\_id** attribute. These are only feed examples. See [Promotions data specification](https://support.google.com/merchants/answer/2906014) for the latest requirements for all mandatory and optional attributes. This is a version of a product feed: | **id** | **title** | **price** | **brand** | **description** | **availability** | **link** | **image\_link** | **promotion\_id** | | -------------------------------------------------------------------------------- | -------------------------- | --------------- | ----------------------------------------- | ------------------------------ | --------------------------------------- | ------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | ----------------- | | 1 | Slippers | 10.00 EUR | Gucci | These are slippers by Gucci. | in stock | [https://www.your-store.com/Slippers/1](https://www.your-store.com/Slippers/1) | [https://www.your-store.com/images/Slippers/1](https://www.your-store.com/images/Slippers/1) | *111111* | | 2 | Socks | 5.00 EUR | Prada | These are socks by Prada. | in stock | [https://www.your-store.com/Socks/2](https://www.your-store.com/Socks/2) | [https://www.your-store.com/images/Socks/2](https://www.your-store.com/images/Socks/2) | *222222* | | 3 | Blanket | 70.00 EUR | Givenchy | This is a blanket by Givenchy. | out of stock | [https://www.your-store.com/Blanket/3](https://www.your-store.com/Blanket/3) | [https://www.your-store.com/images/Blanket/3](https://www.your-store.com/images/Blanket/3) | *333333* | | And this is an example of a separate promotions feed for the mentioned products: | | | | | | | | | | **promotion\_id** | **product\_applicability** | **offer\_type** | **long\_title** | **redemption\_channel** | **promotion\_effective\_dates** | **generic\_redemption\_code** | | | | --- | --- | --- | --- | --- | --- | --- | | | | *111111* | SPECIFIC\_PRODUCTS | no\_code | 5% on all Gucci slippers below 20.00 EUR | online,in\_store | 2025-05-10T07:05:09/2025-05-11T07:05:09 | | | | | *222222* | SPECIFIC\_PRODUCTS | no\_code | Buy 1 pair of Prada socks, get 1 for free | online | 2025-04-10T07:04:09/2025-04-20T07:04:09 | | | | | *333333* | SPECIFIC\_PRODUCTS | generic\_code | 50 EUR for a Givenchy blanket | in\_store | 2025-06-10T07:04:09/2025-09-20T07:04:09 | GIVENCHY50 | | | If you apply promotions to all products in your data feed, the value in **product\_applicability** should be *ALL\_PRODUCTS*. You also don't need to map promotion IDs to specific products in this case. Set up Google Merchant Promotions export [#set-up-google-merchant-promotions-export] Go to **Exports** from your site's main menu, and select **Add export**. Search for *Google Merchant Promotions*, hover over it, and select **Add**. UUID-515bc87a-f855-e5e9-6a6b-c9bbada234b7 In Exports, select the added export *Google Merchant Promotions*. Select **Add Destination**. Select *Productsup Server* from the **Destination** drop-down menu, and choose **Save**.See [Add the Productsup Server destination](/docs/help-center/export-data-feeds/set-up-an-export-destination/add-the-productsup-server-destination) to set up the destination *Productsup Server*. UUID-294975cf-f0e8-01f5-28b7-8a9c429c29bf Optionally, you can use other destinations to send your promotions data to GMC, such as SFTP servers or Google Cloud Storage. See [Add an FTP, SFTP, or FTPS destination](/docs/help-center/export-data-feeds/set-up-an-export-destination/add-an-ftp-sftp-or-ftps-destination) or [Export your data to Google Cloud Storage](/docs/help-center/export-data-feeds/set-up-an-export-destination/export-your-data-to-google-cloud-storage) to set up those destinations. Go to **Dataflow** from the site's main menu and choose the added export from the dropdown in the toolbar. Map mandatory and then optional attributes from import to export. See [Use Dataflow to map your attributes from import to export](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export) for more information.The mandatory attributes already available in the export: * **promotion\_id** * **product\_applicability** * **offer\_type** * **long\_title** * **redemption\_channel** * **promotion\_effective\_dates** * **generic\_redemption\_code** The *Google Merchant Promotions* export only contains basic mandatory and optional attributes. Based on your specific promotions data and its purpose (local promotions or sale events), you may need to send more attributes to GMC than are automatically available in the export.For example, you may need to send more mandatory attributes for your type of promotions: * **promotion\_destination** * **store\_applicability** * **store\_codes\_inclusion** or **store\_codes\_exclusion** * **promotion\_url** You might also want to send more optional attributes than originally available in the export (promotion preconditions, promotion categories, limits, or other additional attributes).See [Promotions data specification](https://support.google.com/merchants/answer/2906014) for information on all possible promotions-related attributes you can send to GMC.If you need to send any additional attributes, you can create them in the intermediate and export stages by selecting **Drop or Click to add new attribute**. See [Create new attributes](/docs/help-center/map-and-optimize-your-data/dataflow/use-dataflow-to-map-your-attributes-from-import-to-export#section-idm4605326417364832706742715884) for more information on adding user-generated attributes.If you have created any user-generated attributes in the intermediate and export stages, connect them from import to export. If your data is ready, select **Run** or **Export** in the upper right corner of the page. If you don't want to run the entire site, including all active exports set up in it, you can go to **Exports**, select the added *Google Merchant Promotions* export, and then choose **Export this export**. Go to the **Promotions** add-on in Google Merchant Center, and upload the link generated by the *Productsup Server* destination once the site run finishes. You can access the link on the export setup page where you added the destination. See [Register and upload your data source](https://support.google.com/merchants/answer/13421073) for more information on uploading the generated file in GMC.If you are using other destinations, upload your data to GMC using the output of your chosen destination. # Set up FabDis 2.3 exports import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; **FAB-DIS** (Fabrication Distribution) is a standard file format used by French manufacturers in the construction, parts, and tools industries to simplify and standardize product data exchange amongst their partner or distributor networks. See [FAB-DIS](https://fabdis.fr/en/) for more information. The FAB-DIS file format is a complex XLSX file consisting of many datasheets or tabs. Each datasheet requires a specific format for data input. Productsup exports help you organize your data feeds in different datasheets and combine them into the final FAB-DIS file. Productsup supports the 2.3 and 3.0 versions of FAB-DIS. This document explains the setup process for FabDis version 2.3. See [Set up FabDis 3.0 exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-fabdis-3-0-exports) if you use FAB-DIS 3.0. To use the FabDis exports, you need to have the *Distribution PX Module* in your contract. Contact your Customer Success Manager to add it to your contract. Decide how to set up the FabDis 2.3 Excel sheet file [#decide-how-to-set-up-the-fabdis-23-excel-sheet-file] Depending on your data sources and aims, there can be different ways to set up the FabDis export. If your data needs optimization such as cleaning and formatting, you can do it in the pre-processing sites first and then set up the FabDis exports with one of the following methods: . You can create separate sites for all the necessary FAB-DIS tabs that you need for generating the final Excel file using the daisy-chain approach. In this document, we describe this approach. . You can create one site for all FAB-DIS tabs and export the pre-processed data into CSV files to use them as data sources for the final FAB-DIS export file. See [Set up FabDis 3.0 exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-fabdis-3-0-exports) to learn how to set up FAB-DIS with this approach. You may also need to convert your raw data into ETIM classes and use it as a data source. See [Set up ETIM Classes exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-etim-classes-exports). To create multiple FAB-DIS Excel sheets, where each datasheet may require a different data structure, separate sites process data using individual Excel sheets. Each site processes and exports data to one (1) FAB-DIS Excel sheet. The following site adds data to the Excel sheet and exports output to the next site using a daisy-chain approach. Typically, the site FabDis 2.3 - 06\_ETIM is the final site but this may vary depending on the specific use case. All sites can import data from one or multiple external sources. Thanks to the *Triggering* feature, each Productsup site runs one after the other. See [Set up scheduling and triggering processes in Scheduling](/docs/help-center/dashboard-and-monitor/set-up-scheduling-and-triggering-processes-in-scheduling#section-idm4498060010569633567718011303). Once the last site finishes processing the final complete FAB-DIS Excel file, you can retrieve the file from the export destination, usually via FTP, and use it as you like. See the following scheme: UUID-071e28c1-1fdf-bc55-9e87-ba2c0719f7a1 When to use the daisy-chain setup approach [#when-to-use-the-daisy-chain-setup-approach] The benefits of using the daisy-chain approach are that you can export Excel files: * If several spreadsheet tabs contain different data structures * If your product data contains an excessive number of attributes * If you need data from multiple product categories. Example set up [#example-set-up] Each export adds data to a single FAB-DIS datasheet using different FabDis 2.3 exports. In the following example, sites X1 through X5 add their data to a sheet within an export template intended for them only. Once each site enters its data, the platform prompts the following sites to enter their data, one after another as follows: . Site X0 receives and structures the necessary data from the client. Site X0 normalizes the data for the following sites. This process ensures that the information is consistent for further sites downstream. . Site X1 automatically adds information to the *00\_CARTOUCHE* Excel sheet from the FabDis Master Template file using the *FabDis 2.3 - 00\_Cartouche* export and sends it to site 1. This sheet has a default *line* structure, which means that each SKU repeats multiple times for each data variation. . Site X2 uses the *FabDis 2.3 - 01\_Commerce* export to write data to the *01\_COMMERCE* Excel sheet. This sheet has a default *column* structure, which means it uses one (1) line per SKU. . Site X3 uses the *FabDis 2.3 - 02\_Logistique* export to write data to the *02\_LOGISTIQUE* Excel sheet. This sheet has a default *line* structure, which means that each SKU repeats multiple times for each data variation. For example, the SKU would repeat based on the packaging type per product, such as boxes, crates, pallets, etc. It may be helpful to use the *Split Variants* service on import to create the required data structure in the site. . Site X4 uses the *FabDis 2.3 - 03\_Media* export to write data to the *03\_Media* Excel sheet. This sheet has a default *line* structure, which means that each SKU repeats multiple times for each data variation. For example, the SKU would repeat based on the media files per product, such as images, PDFs, videos, etc. It may be helpful to use the *Split Variants* service on import to create the required data structure in the site. . Site X5 uses the *FabDis 2.3 - 06\_ETIM* export to write data to the *06\_ETIM* Excel sheet. This sheet has a default *line* structure, which means that each SKU repeats multiple times for each data variation. For example, the SKU would repeat based on ETIM features per product. It may be helpful to use the *Split Variants* service on import to create the required data structure in the site. To use ETIM in the platform, see [Set up ETIM Classes exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-etim-classes-exports). UUID-b3564151-9080-37dd-331e-bb9f53514a60 In the previous example, the platform applied the Split Variant data service to several columns to create data variations on import. To learn more about Split Variants, see [Split parent items to create product variants with the Split Variants data service](/docs/help-center/map-and-optimize-your-data/data-services/split-parent-items-to-create-product-variants-with-the-split). Prerequisites [#prerequisites] . Contact [support@productsup.com](http://support@productsup.com) to request the following templates: 1. *Fab-Dis Master Template Excel* for your version: `Fabdis_v2.3_placeholderfile.xlsx` for Fab-Dis 2.3 2. *FabDis - 00 Cartouche* template that serves as the information page. The template file contains placeholders such as `PRODUCTSUP_VALUE('artclassid')` which must match the column headers. The column name and capitalization must exactly match the template placeholder value such as `artclassid` . . Set up the ETIM Classification export. See [Set up ETIM Classes exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-etim-classes-exports). . Set up triggers for each site to prompt the following site to begin processing after each site finishes its process. See [Set up scheduling and triggering processes in Scheduling](/docs/help-center/dashboard-and-monitor/set-up-scheduling-and-triggering-processes-in-scheduling). Set up FabDis 2.3 exports [#set-up-fabdis-23-exports] To create a FAB-DIS Excel sheets file, you can set up the following exports: UUID-c4dd3cd5-1749-9544-5d70-cb7587b526a2 Our FabDis 2.3 template supports also optional Excel sheets for **FabDis 2.3 - 22\_Pyramide**, **FabDis 2.3 - 24\_Substitution**, and **FabDis 2.3 - 26\_Correspondance** exports. Set up the FabDis 2.3 - 00_Cartouche export [#set-up-the-fabdis-23---00_cartouche-export] The following procedures explain the general process to generate the final FAB-DIS Excel file. If your use case differs, contact [support@productsup.com](http://support@productsup.com) for assistance. Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *FabDis 2.3 - 00\_Cartouche* and select **Add**. Optionally, give your export a custom name in **Name**. The custom name replaces the export's name on the *FabDis 2.3 - 00\_Cartouche Overview* page. Then select **Add**. Select **Add Destination** and choose your destination. For the following example, choose *Excel Spreadsheet (Productsup Server)* from the drop-down menu. You can optionally give this destination a custom name in **Name**. Select **Save**. UUID-16f426fe-0eca-3b52-4228-2b719f9031e1 On the destination settings page, enter the full import source address in **Template file**. For example, `ftp://transport.productsup.io/YourAccountName/FAB-DIS_Master_Template.xlsx`, as you receive the master template file from this FTP server address. `YourAccountName` in the example is the folder name from the file path in the FTP where the output file is saved. Enter your FTP credentials in **Template File FTP Username** and **Template File FTP Password**. Enter the Excel spreadsheet name that your site writes to in **Data sheet**. For example, `00_CARTOUCHE`. The platform uses a comma (`,`) to separate data by default. Enter a separator of your choice in **Data Sheet Name Separator**. Add this export's sheet name in **Products sheet**. For example, `00_CARTOUCHE`. This creates an individual sheet per product. The max number of sheets is 1000. If there are more than 1000 products in your file, don't fill the Products sheet for normal work of the export. The **Populate By Columns** option adds one (1) product to each column instead of one (1) product per line. Ensure you leave this option switched **Off**, as per default. Enter this site's output file name in **Output File FTP URL**, for example, `ftp://transport.productsup.io/YourAccountName/FAB-DIS_00_Cartouche_output.xlsx`. The following site receives this Excel file as its source and *[Template file](#N1642880386893)*. `YourAccountName` in the example is the folder name from the file path in the FTP where the output file is saved. Save this export file URL for later reuse. The output file name may not be the same as the master template or any other files in the FTP, otherwise, it overwrites the existing file. Enter your FTP credentials in **Output File FTP URL** and **Output File FTP Username**. Turn on the destination by switching **Active** to **On**. Select **Save**. Exit this export and go to your organization. Choose another site and repeat this process for each site. See the following sections to continue. UUID-edf493c6-0f97-46b7-36eb-1bf593930ddc Set up the FabDis 2.3 - 01_Commerce export [#set-up-the-fabdis-23---01_commerce-export] The following procedures continue the FAB-DIS export setup from [Set up the FabDis 2.3 - 00\_Cartouche export](#section-idm13285698170340). Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *FabDis 2.3 - 01\_Commerce* and select **Add**. Optionally, Give your export a custom name in **Name**. The custom name replaces the export's name on the *FabDis - 01 Commerce Overview* page. Then select **Add**. Select **Add Destination** and choose your destination. For the following example, choose *Excel Spreadsheet (Productsup Server)* from the drop-down list. You can optionally give this destination a custom name in **Name**. Select **Save**. UUID-16f426fe-0eca-3b52-4228-2b719f9031e1 On the destination settings page, enter the full import source address in **Template file**. For example, `ftp://transport.productsup.io/YourAccountName/FAB-DIS_00_Cartouche_output.xlsx`. `YourAccountName` in the example is the folder name from the file path in the FTP where the output file is saved. The full import source is the previously added output XLSX file processed from the last site. Enter your FTP credentials in **Template File FTP Username** and **Template File FTP Password**. Enter the Excel spreadsheet name that your site writes to in **Data sheet**. For example, `01_COMMERCE`. The platform uses a comma (`,`) to separate data by default. Enter a separator of your choice in **Data Sheet Name Separator**. Add this export's sheet name in **Products sheet**. For example, `01_COMMERCE`. The **Populate By Columns** option adds one (1) product to each column instead of one (1) product per line. Ensure you leave this option switched **Off**, as per default. Enter this site's output file name in **Output File FTP URL**, for example, `ftp://transport.productsup.io/YourAccountName/FAB-DIS_01_Commerce_output.xlsx`. The following site receives this Excel file as its source and *[Template file](#N1642880386893)*. `YourAccountName` in the example is the folder name from the file path in the FTP where the output file is saved. Enter your FTP credentials in **Output File FTP URL** and **Output File FTP Username**. Turn on the destination by switching **Active** to **On**. Select **Save**. Exit this export and go to your organization. Choose another site and repeat this process for each site. See the following sections to continue. UUID-daca3aa6-ee85-d19a-8169-5e2b800f894c Set up the FabDis 2.3 - 02 Logistique export [#set-up-the-fabdis-23---02-logistique-export] The following procedures continue the FAB-DIS export setup from [Set up the FabDis 2.3 - 01\_Commerce export](#section-idm13285769908404). Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *FabDis 2.3 - 02\_Logistique* and select **Add**. Optionally, give your export a custom name in **Name**. The custom name replaces the export's name on the *FabDis 2.3 - 02\_Logistique Overview* page. Then select **Add**. Select **Add Destination** and choose your destination. For the following example, choose *Excel Spreadsheet (Productsup Server)* from the drop-down list. You can optionally give this destination a custom name in **Name**. Select **Save**. UUID-16f426fe-0eca-3b52-4228-2b719f9031e1 On the destination settings page, enter the full import source address in **Template file**. For example, `ftp://transport.productsup.io/YourAccountName/FAB-DIS_01_Commerce_output.xlsx`. `YourAccountName` in the example is the folder name from the file path in the FTP where the output file is saved. Enter your FTP credentials in **Template File FTP Username** and **Template File FTP Password**. Enter the Excel spreadsheet name that your site writes to in **Data sheet**. For example, `02_LOGISTIQUE`. The platform uses a comma (`,`) to separate data by default. Enter a separator of your choice in **Data Sheet Name Separator**. Add this export's sheet name in **Products sheet**. For example, `02_LOGISTIQUE`. The **Populate By Columns** option adds one (1) product to each column instead of one (1) product per line. Ensure you leave this option switched **Off**, as per default. Enter this site's output file name in **Output File FTP URL**, for example, `ftp://transport.productsup.io/YourAccountName/FAB-DIS_02_Logistique_output.xlsx`. The following site receives this Excel file as its source and *[Template file](#N1642880386893)*. `YourAccountName` in the example is the folder name from the file path in the FTP where the output file is saved. Enter your FTP credentials in **Output File FTP URL** and **Output File FTP Username**. Turn on the destination by switching **Active** to **On**. Select **Save**. Exit this export and go to your organization. Choose another site and repeat this process for each site. See the following sections to continue. UUID-e9be272d-acbe-e339-a381-334b6d66e195 Set up the FabDis 2.3 - 03_Media export [#set-up-the-fabdis-23---03_media-export] The following procedures continue the FAB-DIS export setup from [Set up the FabDis 2.3 - 02 Logistique export](#section-idm13285769978552). Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *FabDis 2.3 - 03\_Media* and select **Add**. UUID-02d0c4ee-9fab-10af-e49d-385cee624063 Optionally, give your export a custom name in **Name**. The custom name replaces the export's name on the *FabDis 2.3 - 03\_Media Overview* page. Then select **Add**. Select **Add Destination** and choose your destination. For the following example, choose *Excel Spreadsheet (Productsup Server)* from the drop-down list. You can optionally give this destination a custom name in **Name**. Select **Save**. UUID-16f426fe-0eca-3b52-4228-2b719f9031e1 On the destination settings page, enter the full import source address in **Template file**. For example, `ftp://transport.productsup.io/YourAccountName/FAB-DIS_02_Logistique_output.xlsx`. `YourAccountName` in the example is the folder name from the file path in the FTP where the output file is saved. Enter your FTP credentials in **Template File FTP Username** and **Template File FTP Password**. Enter the Excel spreadsheet name that your site writes to in **Data sheet**. For example, `03_MEDIA`. The platform uses a comma (`,`) to separate data by default. Enter a separator of your choice in **Data Sheet Name Separator**. Add this export's sheet name in **Products sheet**. For example, `03_MEDIA`. The **Populate By Columns** option adds one (1) product to each column instead of one (1) product per line. Ensure you leave this option switched **Off**, as per default. Enter this site's output file name in **Output File FTP URL**, for example, `ftp://transport.productsup.io/YourAccountName/FAB-DIS_03_Media_output.xlsx`. The following site receives this Excel file as its source and *[Template file](#N1642880386893)*. `YourAccountName` in the example is the folder name from the file path in the FTP where the output file is saved. Enter your FTP credentials in **Output File FTP URL** and **Output File FTP Username**. Turn on the destination by switching **Active** to **On**. Select **Save**. Exit this export and go to your organization. Choose another site and repeat this process for each site. See the following sections to continue. UUID-a5f8de57-e434-2422-f488-520a37048225 Set up the FabDis 2.3 - 06_ETIM export [#set-up-the-fabdis-23---06_etim-export] The following procedures continue the FAB-DIS export setup from [Set up the FabDis 2.3 - 03\_Media export](#section-idm13285770243624). Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *FabDis 2.3 - 06\_ETIM* and select **Add**. Optionally, give your export a custom name in **Name**. The custom name replaces the export's name on the *FabDis 2.3 - 06\_ETIM Overview* page. Select **Add**. Select **Add Destination** and choose your destination. For the following example, choose *Excel Spreadsheet (Productsup Server)* from the drop-down list. You can optionally give this destination a custom name in **Name**. Select **Save**. UUID-16f426fe-0eca-3b52-4228-2b719f9031e1 On the destination settings page, enter the full import source address in **Template file**. For example, `ftp://transport.productsup.io/YourAccountName/FAB-DIS_03_Media_output.xlsx`. `YourAccountName` in the example is the folder name from the file path in the FTP where the output file is saved. Enter your FTP credentials in **Template File FTP Username** and **Template File FTP Password**. Enter the Excel spreadsheet name that your site writes to in **Data sheet**. For example, `06_ETIM`. The platform uses a comma (`,`) to separate data by default. Enter a separator of your choice in **Data Sheet Name Separator**. Add this export's sheet name in **Products sheet**. For example, `06_ETIM`. The **Populate By Columns** option adds one (1) product to each column instead of one (1) product per line. Ensure you leave this option switched **Off**, as per default. Enter this site's output file name in **Output File FTP URL**, for example, `ftp://transport.productsup.io/YourAccountName/FAB-DIS_Final_output.xlsx`. `YourAccountName` in the example is the folder name from the file path in the FTP where the output file is saved. Enter your FTP credentials in **Output File FTP URL** and **Output File FTP Username**. Turn on the destination by switching **Active** to **On**. Select **Save**. You are now ready to set up ETIM for your data classifications. To continue, see [Set up ETIM Classes exports](/docs/help-center/export-data-feeds/special-export-setups/set-up-etim-classes-exports). UUID-f2d7deb6-f8f4-0698-005c-1362250fe7f4 Once you finish with the FAB-DIS export setup, you can find your final, completed FAB-DIS file on the FTP server. FabDis 2.3 - 06\_ETIM is typically the final site in the FAB-DIS multi-site process exported to the FTP. Preserve Excel exports cell formatting [#preserve-excel-exports-cell-formatting] The final exported file must preserve the cell formatting of the original template document for the FAB-DIS export. You can test the formatting by comparing the original template with the final output FAB-DIS Excel file. The following screenshots show the preservation of formatting options: UUID-cc6ab4a7-d9b2-e206-a81b-f86ddd8883da *The original Master Template file formatting is on the left, and the final output file is on the right. Select the necessary image to have a large view.* # Add Excel Export import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; You may need to export your product data in an Excel file, for example, to use it for channels that require Excel format such as FabDis export, or to use the Excel files for internal purposes. To export your data to Excel files, follow one of the following ways: . Add and set up **Excel Export** in **Exports**. This method requires creating an Excel spreadsheet template with placeholders before setting up the export. . Add and set up **Blank export (empty)** in **Exports** if you don't need a template and you can manually add the required attributes in Dataflow. See [Build your exports from scratch](/docs/help-center/export-data-feeds/add-export/build-your-exports-from-scratch). . Order the creation of a custom export from Productsup as an additional service. You can then add your product data to it in **Exports**. Contact your Customer Success Manager. This document describes the first option. In the following sections, you can find how to export your data into Excel file using Excel Export. Prerequisites [#prerequisites] To create a file with Excel Export, you need to: . Create an Office Open XML (.xlsx) file in Excel 2007 or later version. Productsup supports .xlsx and .xlsm. If your Excel template has another format, such as .xlt or .xltm, convert it into .xlsx or .xlsm. . Prepare a template. See [Create a template](#section-idm4657019065745633954147439266). . Upload your Excel template file to an (S)FTP location of your choice. . Add and set up Excel Export in Exports. Create a template [#create-a-template] You can create either a two-dimensional data table, known as a data table sheet, or one worksheet tab per product called item setup sheet. 1. Data table sheets [#1-data-table-sheets] A data table sheet contains a table with attributes placed horizontally and item values fill the columns. You should define placeholders in a single row. After setting up the Excel Export and running the platform, the imported feed content replaces the rows with values. UUID-c0ab1c0d-86e5-323b-02e2-d3d072344a01 If you want to add styles to the table, the entire table adapts to your chosen style. You can also apply a style to the placeholders if you want to style the text. These changes affect the final data. 2. Item setup sheets [#2-item-setup-sheets] The item setup sheets contain information about one item per worksheet. You need to create a template worksheet. You can freely design the template placing text and image placeholders wherever you want. After exporting, the platform reads the template sheet, creates worksheets per feed product, and removes the template itself from the final Excel file. UUID-3cedebad-01ef-2ab0-f0d7-f8b5941e3f0c Create template placeholders [#create-template-placeholders] To use the Excel Export, your template must have placeholders for the attribute headers. The placeholders are text strings that refer to the needed attributes in the data feed in the platform to populate spreadsheets with the product data. The placeholders follow the format such as **PRODUCTSUP\_VALUE('attribute\_name')**. UUID-fed63354-bc71-bb2a-9e38-f741ff7c811a . Text placeholder. . Image placeholder. . Number placeholder. 1. Text placeholder [#1-text-placeholder] You can use text placeholders both in data table sheets and item setup sheets. To insert text from the data feed to the corresponding cell, use the placeholder **PRODUCTSUP\_VALUE('attribute name')**. | Data View attibutes | Text placeholders in template | | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | | UUID-299bd8a2-8233-79e1-b3f3-58d36b96db85 | UUID-ba9d4caf-e19e-3fbf-9f06-c031ef3b768f | The placeholder can be a part of the text or a standalone value: * Part of the text: **Title: PRODUCTSUP\_VALUE('title')**. | Value in the attibute 'title' | Text placeholder output | | ----------------------------- | ----------------------- | | New sneakers | Title: New sneakers | * Standalone: **PRODUCTSUP\_VALUE('title')**. | Value in the attibute 'title' | Text placeholder output | | ----------------------------- | ----------------------- | | New sneakers | New sneakers | In both examples, the values from the attribute **title** replaces **PRODUCTSUP\_VALUE('title')**. 2. Image placeholder [#2-image-placeholder] You can use image placeholders only in item setup sheets. To insert an image, enter the placeholder **PRODUCTSUP\_IMAGE('attribute')** in a cell separately from other contents. The attribute must contain an image URL. By default, the image placeholder positions the image in the upper-left cell corner. Then, it calculates the placeholder's cell size. You can merge multiple cells vertically to expand the height of the image. Alternatively, if you want to define the maximum image size, the placeholder takes a second argument, describing the width and height of the image. The image placeholder **PRODUCTSUP\_IMAGE('attribute',100x100)** sets the image in a 100 x 100-pixel box in the same location. The image either takes up the full width or full height of the defined box, whichever fits first. UUID-8476cd78-0933-0e8c-a4cb-0a37df1893c4 3. Number placeholder [#3-number-placeholder] You can use number placeholders both in data table sheets and item setup sheets. To insert numbers in a number format instead of a string, use the placeholder **PRODUCTSUP\_NUMBER('attribute')**. This placeholder only works with content that contains digits and dots and converts any other content into an empty value. Data table template name options [#data-table-template-name-options] If you need multiple data tables in different worksheets, you can provide a comma-separated (CSV) list of worksheet names for the data table template. The list of worksheet names lets you write the same data on multiple sheets. Productsup offers the Excel Macro Files destination that helps determine which product to add to which sheet. On setting up the Excel Marco Files destination, you need to specify the export column name that contains the sheet name where you add each product in **Sheet Name Column**. If after the export, the exported file is empty, one of the possible reasons is that your attribute names contain commas (,) while commas also serve as a separator for the CSV file. To solve the issue, check the **Settings** tab of the export. Choose **CSV Enclosure** and **,COMMA** as a CSV separator. Also, change your data feed in the following way: put the attributes name containing commas between the double quotes, such as **"PHOTO (300dpi, min.10x10)"**; otherwise, the platform can't export the data. Add and set up Excel Export [#add-and-set-up-excel-export] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for *Excel Export*, hover over it, and select **Add**. UUID-b18a8a77-e9e0-9ffc-15d9-b180ff46e76f In *Overview*, select the name of the added export in the **Export name** column. Select the pen icon at the top of the page and give your export a custom name as desired. * The custom name replaces the export name on the *Excel Export Overview* page. Go to **Dataflow** in your site's main menu. Select **Excel Export** from the top ribbon menu. Add and connect the attributes you need from the *Intermediate* column, based on your Excel spreadsheet, to the *Excel Export* column. Go back to **Exports** and select your added Excel Export. Select **Add Destination** and choose a necessary destination from the **Destination** drop-down list. Optionally, give it a name in **Name** and select **Save**. UUID-0cd7aff8-2e02-611e-6a28-b28502dd40d7 Depending on your files, choose between these two (2) destinations: 1. **Excel Macro Files (xlsm)** is a recommended destination for Excel spreadsheets when you want to embed the output .xlsx as a URL hosted on the Productsup Server. 2. **Excel Spreadsheet (Productsup Server)** is the destination for the Excel spreadsheets when you want the platform to upload the output file to the FTP of your choice. Both destinations can generate delta files for all new, changed, unchanged, and deleted products when used with delta exports. This lets you send only the modified product data to your desired export channels instead of sending your entire product catalog every time there is a change in your data. Set up a selected destination by taking the steps in one of the following sections depending on your destination. Set up Excel Macro Files (XLSM) destination (recommended) [#set-up-excel-macro-files-xlsm-destination-recommended] If you select the Excel Marco Files (XLSM) destination, the setup page opens where you need to enter the following details: In **Template file**, enter the URL of the file. In **Template File FTP Username** and **Template File FTP Password** enter your FTP credentials to let the platform connect to the FTP server and download the file. If your template creates a template per product, enter the name of this worksheet in **Factsheet**. Enter the name exactly as it appears on the Excel file. Switch the **Populate By Columns** button to **On** if you want to populate data by columns instead of rows. In **Sheet Name Column**, specify an export column name that contains the sheet name where you add each product. Turn on the destination by switching **Active** to **On**. Select **Save**. UUID-42f92dd4-16b3-ca7a-42ac-e40318552f7f Go to the *Overview* tab of your export, scroll to the **Filename** section, and select the **Setup** button. In **Filename**, change the name of your output file. The extension of your file should be .xlsx or .xlsm. Set up Excel Spreadsheet (Productsup Server) destination [#set-up-excel-spreadsheet-productsup-server-destination] If you select the Excel Spreadsheet (Productsup Server) destination, the setup page opens where you need to enter the following details: In **Template file**, enter the FTP URL of the file. Example: `https://url-to-template-file`. In **Template File FTP Username** and **Template File FTP Password** enter your FTP credentials to let the platform connect to the FTP server and download the file. If your template creates a datasheet template per product, set the name of the worksheet in **Data sheet**. Enter the name exactly as it appears on the Excel template. In **Data Sheet Name Separator**, enter a delimiter if desired. By default, it is a comma (`,`). Enter the name of the sheet or tab containing the product data in **Products sheet**. Switch the **Populate By Columns** button to **On** if you want to populate data by columns instead of rows. In **Output File FTP URL**, enter the FTP URL where the platform should send your output file and define the name of the output file at the end of the URL. For example, `ftp://ftp.productsup.com/filename.xlsx` where `filename.xlsx` is the file name. Enter the FTP credentials in **Output File FTP Username** and **Output File FTP Password**. Turn on the destination by switching **Active** to **On**. Select **Save**. UUID-cf0d71f9-5d82-bcb9-4750-1d163f7ca587 Go to the *Overview* tab of your export, scroll to the **Filename** section, and select the **Setup** button. In **Filename**, change the name to the output file name defined in [Step 7](#N1698854122545). The extension of your file should be .xlsx or .xlsm. # Send your data to Microsoft SharePoint import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] You can export data from Productsup to Microsoft SharePoint using the *Blank Export (empty)* and *Blank Export (with ID)* with one of the following destinations: . **MS SharePoint for CSV and XLSX** to export CSV and XLSX files. . **MS SharePoint for XML** to export XML files. You may need some technical expertise to set up an export to Microsoft SharePoint. Prerequisites [#prerequisites] To use Microsoft SharePoint in Productsup, you need to set up the integration with Productsup: Step 1: Create an app registration and save the account data for further setup [#step-1-create-an-app-registration-and-save-the-account-data-for-further-setup] Go to [Microsoft Azure portal](https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?redirect_uri=https%3A%2F%2Fportal.azure.com%2Fsignin%2Findex%2F\&response_type=code%20id_token\&scope=https%3A%2F%2Fmanagement.core.windows.net%2F%2Fuser_impersonation%20openid%20email%20profile\&state=OpenIdConnect.AuthenticationProperties%3Dm36YV9IFQ9iyhJSxiDUrAlJzkntJyOg2MSLhJ-9ApYSdsV3TPRl7ofJx0pwIEUstjirWSWHPyBAYVILibjPvBMUdBv0s9f-fqhdf1srNoj-lsKJiOqJ4wfFTxQJTkxQ9TJm_D7AUPzO0-v1zHZVCeKnL6v-Ur3Muw9NvJL0d-_EpJ79dUbL0ytmETYS75fN0XOyLdlFVNbAFY6ty0T0_5Ipu7Plg9-GWklhRToPZc_ZPjzkL7tinUTjSSrH9kcL6Nk3ZBN32nXGcywQgI9KTXFmmPqgQQWResmyUmKvcMhmLKjc5aueJmkDRNgEdUxLc_460TpIO_jSJljPI7BFWJ0Df4cBHeDVe7tCxzjcoKDNP229xbQGP0fQbqbWaFnL_TNW6KAJmMwTBmuN6YVWYQcrRLnMqIZx7cs3YASSzkc2i8m6sEgN4hV-yv4pr1RSEd5jsmNYKW2Afl-HUEqNB4j3zI6d49AoG-zF8RzXYwW0\&response_mode=form_post\&nonce=638653712668796478.MjhkYTBhNDUtYjA5NS00OWU5LThiY2UtYzM4ZTMxMWFhNmY3YTQyZGEzYjQtZmU2ZC00ZTNjLWI5YmMtZjU3OTE4NGEwZDY3\&client_id=c44b4083-3bb0-49c1-b47d-974e53cbdf3c\&site_id=501430\&client-request-id=c19f7491-0bae-46e3-bd50-9099cb22fb28\&x-client-SKU=ID_NET472\&x-client-ver=7.5.0.0\&sso_reload=true). Go to the Entra ID. Go to **App registrations** and create a new registration by taking all the steps in the wizard. Name your registration **Productsup-sharepoint-connector** and decide on the supported accounts. A single-tenant should be enough, but this depends on your organisation. When you created the application, save separately the following details that you will need for the data source setup: * *Application (client) id* for **Client Id** * *Directory (tenant) id* for **Tenant Id**. Go to **API permissions** from the menu to set the permissions: * **User.Read** * **Sites.Selected**. Switch on the **Grant admin consent for \[Company]**. Go to **Certificates & secrets** from the menu and generate a new client secret. Give it a description and set expiry date. Save it as your **Client secret** for further data source setup. Step 2: Give the application access to the specific sites [#step-2-give-the-application-access-to-the-specific-sites] To give an enterprise application or app registration access to a specific site or multiple sites in SharePoint, you need to execute a *SharePoint PnP PowerShell* script. You can use the script provided below as a starting point and ask your internal IT team to adjust it for you. A CSV file mentioned in the script should contain the following: * A list of MS SharePoint site URLs. * Your admin account User Principal Name. * The app ID or AppDisplayName. You need the Administrator rights of your MS SharePoint account to execute the script. ``` # Connecting to the SPO Service and importing the SPO PNP Module Connect-SPOService -URL Import-Module PnP.PowerShell ########################################################################################################################## # # # The following part gives the respective Enterprise Application their neccessary rights. # # It does so by using the .csv file from the previous part as input for sites to give the respective rights for. # # # ########################################################################################################################## $SPSitelist = $ADMAccount = $AppID = $Displayname = foreach ($SPSite in $SPSitelist) { write-output $SPSite Set-SPOUser -site $SPSite -LoginName $ADMAccount -IsSiteCollectionAdmin $True -Verbose Connect-PnPOnline [yourtenant].sharepoint.com -Interactive -ClientId Grant-PnPAzureADAppSitePermission -AppId $AppID -DisplayName $Displayname -Site $SPSite -Permissions Write -Verbose Set-SPOUser -site $SPSite -LoginName $ADMAccount -IsSiteCollectionAdmin $False -Verbose } ``` You can also toggle between Write and Read permission by changing the respective permissions parameter in the foreach loop. If you need help with providing access, you can contact [support@productsup.com](mailto:support@productsup.com). Set up export for MS SharePoint [#set-up-export-for-ms-sharepoint] To export your data to MS SharePoint, you can use one of the blank export templates: * *Blank Export (empty)* lets you manually create a custom set of attributes in the export stage of Dataflow. * *Blank Export (with ID*) is similar to *Blank Export (empty)* but has the **id** attribute pre-defined as a mandatory attribute in the export stage in Dataflow. The process of setting up the exports *Blank Export (empty)* and *Blank Export (with ID)* is similar: Go to **Exports** from your site's main menu. Select **Add export**. Select the necessary blank export in the gray banner under the search field. UUID-66c1a6b9-78f2-b3fb-d559-aee7bf9db90a Go to **Dataflow** from the site's main menu and select your blank export from the dropdown on the left of the top toolbar. Map the needed attributes from intermediate to export by dragging a connection from an attribute in the intermediate stage to **Drop or Click to add new field** in the export stage. UUID-63ea3aaf-7279-067b-8416-31832c27e29f For *Blank Export (with ID)*, the **id** attribute is the only mandatory attribute. You must connect it with a corresponding attribute in the intermediate stage. Go to **Exports**, find your blank export in the list of exports, and toggle its status in the *Status* column to **Active**. Select the name of your blank export in the *Export name* column. Select **Add Destination**, and choose **MS SharePoint for CSV and XLSX** or **MS SharePoint for XML** from the drop-down menu. Select **Save**. See [Set up MS SharePoint for CSV and XLSX](#section-idm235080960345857) or [Set up MS SharePoint for XML](#section-idm353508096202834) for further setup steps. UUID-3d6545dc-3772-e0c5-3368-f938727ffffd Select **Export this export** in the top-right corner of the page to send your data to the destination. Alternatively, the platform exports the data during the next scheduled run. Set up MS SharePoint for CSV and XLSX [#set-up-ms-sharepoint-for-csv-and-xlsx] To set up the destination MS SharePoint for CSV and XLSX, enter your Microsoft SharePoint data from the [Prerequisites](#section-idm353464356572958) into the following fields: In **Client ID**, enter your MS SharePoint client ID. In **Client Secret**, enter our MS SharePoint client secret's value. For an already set-up export.If, after some time, you start experiencing the export fail, it can mean that your client secret has expired, and you must update it: Generate a new client secret in your MS SharePoint account. Enter the new client secret's value in the **Client Secret** field. Don't use the Secret ID. Leave **Client ID** unchanged. In **Tenant ID**, enter your MS SharePoint tenant ID. In **Upload File Path**, add the location path of the file. In **File Name**, enter the name of the uploaded file. In **File Type**, select the type of the shared file: *csv* or *xlsx*. Check if access to the file in MS SharePoint isn't restricted. Set **Active** to *On*, to activate the destination. Select **Save**. UUID-265776c9-190c-4bac-32f3-563d9b3a869d Set up MS SharePoint for XML [#set-up-ms-sharepoint-for-xml] To set up the destination **MS SharePoint for XML**, enter your Microsoft SharePoint data from the [Prerequisites](#section-idm353464356572958) into the following fields: In **Client ID**, enter your MS SharePoint client ID. In **Client Secret**, enter your MS SharePoint client secret's value. For an already set-up export.If, after some time, you start experiencing the export fail, it can mean that your client secret has expired, and you must update it: Generate a new client secret in your MS SharePoint account. Enter the new client secret's value in the **Client Secret** field. Don't use the Secret ID. Leave **Client ID** unchanged. In **Tenant ID**, enter your MS SharePoint tenant ID. In **Upload URL**, add the location URL of the file. The URL should end with one of the following: *Shared Documents*, *Documents*, *SiteAssets*, or *Lists*. For example, `https://example.sharepoint.com/sites/examplesite/Shared Documents/` In **Remote Directory**, enter a directory inside the Sharepoint Shared Documents, Documents, SiteAssets, or Lists, where the file should be uploaded. Set **Active** to *On*, to activate the destination. Select **Save**. UUID-9cd63c17-ba27-2bdf-3f5a-5bf30e6e7e1e # Set up order sync for Walmart Marketplace import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Productsup lets you synchronize orders between Walmart Marketplace and your order management system (OMS). Walmart Marketplace order sync covers two separate flows: * **Import orders into your OMS** — relay new orders from Walmart Marketplace to your OMS so you can fulfill them. The order line item strategy described below doesn't apply to this flow. * **Export shipment and cancellation updates back to Walmart** — send tracking and cancellation information from your OMS back to Walmart. This flow requires you to combine your Walmart order data with your OMS data, and how you do that depends on your chosen order line item strategy. An order on Walmart Marketplace can include one or more order line items. Each line item is identified by a `purchaseOrderId`, the overall order ID, and a `lineNumber`, which is sequential (1, 2, 3...) for each item in the order. Every shipment confirmation or cancellation you send to Walmart applies to an individual order line item, even if you ship multiple items in one package. Prerequisites [#prerequisites] To use Walmart Marketplace order sync in Productsup, you need: . An approved Walmart Marketplace seller account (US) with access to Seller Center. . To authorize Productsup to access your Walmart account. You do this when you configure the export destinations below. Import orders into your OMS [#import-orders-into-your-oms] Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for **Walmart Marketplace Orders Import** and select **Add**. Give it a name as desired and select **Continue**. In **Authentication**, choose an existing authentication or select **Add New Authentication** to connect your Walmart account. Selecting **Add New Authentication** redirects you to Walmart's authorization page. After you approve access, Walmart redirects you back to Productsup automatically. Configure any filters you need, such as ship node type or date ranges, then select **Save**. Select **Run** in the top-right corner to import your order data from Walmart. The platform automatically acknowledges newly imported orders that are in *Created* status. Once your order data is imported, go to **Exports** to add and set up an export that sends it to your OMS. Before running your export, map the mandatory attributes in Dataflow. Choose an order line item strategy [#choose-an-order-line-item-strategy] Before you set up shipment and cancellation exports back to Walmart, decide how your OMS returns tracking and cancellation information: * **Per order line item** — Your OMS returns tracking or cancellation information for each individual order line item (`purchaseOrderId` and `lineNumber`). * **Per order** — Your OMS returns tracking or cancellation information for the order as a whole and doesn't track individual line items. Walmart still requires every line item to be confirmed, so the same update applies to all line items in that order. Set up your data sources for Walmart updates [#set-up-your-data-sources-for-walmart-updates] To send shipment and cancellation updates back to Walmart, you need both your Walmart order data and your OMS data in the same site, joined together. Take the steps in [Import orders into your OMS](#import-orders-into-your-oms) again, but in a new site separate from the one you use to relay orders to your OMS. Use **Walmart Marketplace Orders Import** as the main data source in this new site. Add your OMS as an additional data source in the same site, and select **Run** to import your tracking and cancellation data. Join your OMS data to your Walmart order data: * If you're tracking per order line item, join by `purchaseOrderId` and `lineNumber`. * If you're tracking per order, join by `purchaseOrderId` only. See [Choose an order line item strategy](#choose-an-order-line-item-strategy). Filter your joined data to orders with status *Acknowledged* before your shipment or cancellation export runs — either with a status filter on the data source or a rule box in Dataflow, whichever fits your setup. This prevents the export from processing orders before Walmart has confirmed them or sending the same update more than once. Send shipment notifications to Walmart [#send-shipment-notifications-to-walmart] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for **Walmart Marketplace Shipment Notification** and select **Add**. Select **Add Destination**, choose the matching destination from the dropdown, give it a name as desired, and select **Save**. In **Authentication**, choose the Walmart authentication you previously set up, or select **Add New Authentication**. Toggle **Active** to **On** and select **Save**. Go to **Dataflow** and select **Walmart Marketplace Shipment Notification** in the dropdown on the left to map your attributes from import to export. Select **Run** in the top-right corner to send shipment notifications to Walmart. The export has the following attributes at the export stage: | Attribute | Mandatory or not | Meaning and expected values | | :-------------------------------------- | :------------------------------------ | :------------------------------------------------------------------------ | | `purchaseOrderId` | Mandatory | The overall order ID as assigned by Walmart. | | `lineNumber` | Mandatory if tracking per line item | The sequential number of the line item within the order. | | `trackingInfo.carrierName.carrier` | Mandatory in most cases | The carrier delivering the order, using Walmart's accepted carrier codes. | | `trackingInfo.carrierName.otherCarrier` | Mandatory if `carrier` isn't provided | The carrier name, when your carrier isn't in Walmart's accepted list. | | `trackingInfo.trackingNumber` | Mandatory | The shipment tracking number. | | `trackingURL` | Mandatory if `otherCarrier` is used | The URL where the buyer can track the shipment. | Send cancellations to Walmart [#send-cancellations-to-walmart] Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for **Walmart Marketplace Order Cancellation** and select **Add**. Select **Add Destination** and choose *Walmart Marketplace Order Cancellation export* from the dropdown. Give it a name as desired and select **Save**. In **Authentication**, choose the Walmart authentication you previously set up, or select **Add New Authentication**. Toggle **Active** to **On** and select **Save**. Go to **Dataflow** and select **Walmart Marketplace Order Cancellation** in the dropdown on the left to map your attributes from import to export. Select **Run** in the top-right corner to send cancellations to Walmart. Common pitfalls [#common-pitfalls] | Pitfall | What to do | | :------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | An order line item can't be canceled or shipped individually | Confirm you joined your OMS data by `purchaseOrderId` and `lineNumber`, not `purchaseOrderId` alone. See [Choose an order line item strategy](#choose-an-order-line-item-strategy). | | Orders are processed before they're ready, or get processed more than once | Confirm you filtered your joined data to status *Acknowledged* before running the export, either on the data source or with a rule box in Dataflow. | | A shipment notification is rejected for a missing carrier | Provide `trackingInfo.carrierName.otherCarrier` and `trackingURL` when your carrier isn't in Walmart's accepted carrier list. | # Use an item setup sheet import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Item setup sheets are spreadsheet files used for transmitting data in bulk to third parties. You can also refer to item setup sheets as new line forms, new line cards, product sheets, and fact sheets. These files are typically sent for sending product data to marketplaces, data pools, retailers, etc. Item setup sheets are commonly in the XLSX or macro-enabled XLSM format. Some item setup sheets provide instructions on completing them, how you must specify your data, which attributes they require, and applicable restrictions information. Most item setup sheets contain large numbers of attributes and options, which you can mirror into the platform using a template. Productsup lets you paste your data into a preformatted spreadsheet known as the placeholder setup sheet for efficiency. Productsup integrates your item setup sheet into the platform by creating a CSV file containing your product attribute names or headers. Prerequisites [#prerequisites] There are a few options to choose from before you export data using an item setup sheet in the platform. . You first need an item setup sheet with requirements and an export. * Productsup can create a channel template with the attributes you need as an additional service. You can then add your product data to the channel template. Productsup can also add Analyzer tests if they're available to ensure the data meets your export channel requirements. * You can use a Blank Export and manually add your required attributes in Dataflow within the platform. . Next, you need a placeholder setup sheet. * Productsup can create a placeholder setup sheet as an additional service. * You can manually create and add a placeholder in the placeholder setup sheet. . (Optional) Map and optimize Dataflow attributes as necessary. . Set up your export destination. Manually create an export template and placeholder setup sheet [#manually-create-an-export-template-and-placeholder-setup-sheet] You need an item setup sheet with requirements to use the *Blank Export* template found in Exports or before Productsup can create an export. To use an item setup sheet, you first need a placeholder setup sheet and an export. The placeholder setup sheet is a preformatted template for pasting your item setup sheet product data. Use a placeholder sheet to add item setup sheet attributes in the Productsup platform. For example, the platform extracts the values you define from the item setup sheet, then to the placeholder file, and places those product values in your channel for export. Your item setup sheet can include several sheets if one contains the necessary attributes for sending product data. The following is an example of how an item setup sheet can look: UUID-c01e2d50-f0cd-022e-df34-fd299aca7ee1 In the previous example, the sheet has duplicate attribute names. It's impossible to add duplicate attribute names when creating the export and the placeholder value in the placeholder setup sheet. If you find any duplicated values, make them unique. You can use numbers to differentiate attributes of the same name, such as `Feature 1`, `Feature 2`, `Feature 3`, etc. To add an export in the platform using the previous attribute value examples, Go to **Exports** from your site's main menu and select **ADD EXPORT**. Search for the channel template *Blank Export* to send product data to and select **Add**. Select **Add** again to confirm it as an export. Go to **Dataflow** from your site's main menu and select **Blank Export** in the top ribbon drop-down menu on the left. UUID-8cc7b4d7-0c0b-5736-7ec7-0309cbaefb77 (For admins only. Otherwise, contact your local admin) On the far right, under the *Blank Export (empty) title*, select the **Drop or Click to add new field button** and enter your attribute names in the *Column name* field. Select **Save** to continue adding attribute values. UUID-140fc8a5-ead9-b83c-9aa1-766fde38c12b Create a placeholder setup sheet [#create-a-placeholder-setup-sheet] The placeholder setup sheet needs Productsup placeholders. If the contents are text strings, they use the following format: * `PRODUCTSUP_VALUE('attribute_name')` For numbers only, use: * `PRODUCTSUP_NUMBER'('attribute_name')` For images, apply the following. Including the maximum image size, for example, `100x100` is optional: * `PRODUCTSUP_IMAGE('attribute_name',100x100)` The value in the apostrophes must match the attribute names exactly as you created them in the channel template or export. In the current example, the placeholder item setup sheet with all products row-based in one sheet looks as follows: UUID-158ce003-f040-9d3b-dcb8-fd10f81944b1 Productsup also supports fact sheets, which contain one product per sheet, as follows: UUID-7ca44654-1c47-52f9-9197-35223a237f31 Open the original item setup sheet and identify where you need to populate data. If you have any sample lines under the attribute headers, remove them. Do not remove any cells containing formulas. Leave the row directly underneath the column headers empty, and paste your placeholders in that row for each column. This empty row lets you paste transposed data into this space correctly. Copy the values you last pasted into the Excel Spreadsheet.In Excel: * Right-click the first cell in the empty row, select **Paste Special**, mark the **Transpose** option, then select **OK**. Delete the non-transposed placeholders. When you save your file with the newly added placeholders, add the ending `_with_placeholders` to help you locate the file. Ensure each column needing data now contains the correct Productsup placeholder. Add the ending `“_with_placeholders”` to the placeholder setup sheet filename to identify the file containing placeholders. Save the file as a `.csv` file. You must store the file on an FTP Server and can also create a new FTP via Productsup on the organization level. Here is an example of a placeholder file filled in: UUID-402607f1-0963-44fd-4e6b-f8a4a4e4ea87 Map and optimize Dataflow attributes [#map-and-optimize-dataflow-attributes] It is best to confirm attribute mappings in Dataflow to ensure they are correct, using an export template produced by Productsup or a manually created template. If necessary, for example, you can optimize your data using additional rules in Data View or Lists. You can use the Analyzer test on the export level if you use an export template produced by Productsup, given they had the requirements before creating the export. The Analyzer test supports you in ensuring your data is correctly formatted before export. Set up item setup sheet export destination [#set-up-item-setup-sheet-export-destination] Once you have the export and the placeholder setup sheet, you must add and configure the export destination. Go to **Exports** from your site's main menu and select **Add export**. Give your export a custom name if desired, then select **Add**. * The custom name replaces the export name on the export's overview page. Select **Add Destination** and choose *Excel Macro Files (xlsm)* from the drop-down list. You can optionally give your destination a title in **Name**. Then select **Save**. UUID-c1a879e6-b84f-bfcf-e96b-6080196cbc23 On the destination settings page, enter the placeholder file location in Template File. Enter your template source FTP credentials in **Template FTP Username** and **Template FTP Password**. If your template uses a fact sheet template containing one product per sheet, set the worksheet's name in **Factsheet**. Set **Populate By Columns** to **On** if you want to populate cells using columns instead of rows. In Sheet Name Column, identify an export column name containing the sheet name where you write for each product. Turn on your export by switching **Active** to **On**, and lastly, select **Save**. UUID-6dba3725-fc36-5a04-58e4-8e0cf6ea6797 # Add Google Sheets export import { Step, Steps } from "fumadocs-ui/components/steps"; The *Google Sheets* export lets you send product data to an existing Google Sreadsheets template. You can use a two-dimensional data table, known as a data table sheet, or one worksheet tab per product, known as a single-item sheet. For more advanced features of what you can do using a spreadsheet, see [Add Excel Export](/docs/help-center/export-data-feeds/special-export-setups/add-excel-export). Set up the Google Sheets export [#set-up-the-google-sheets-export] To use the Google Sheets export with an existing Google Sheets spreadsheet. Go to **Exports** from your site's main menu and select **Add export**. Search for *Google Sheets*, hover over it, and select **Add**. UUID-342c2be8-047d-390c-a5c6-9e2d5432c2bf Optionally, give your export a custom name in **Name**. The custom name replaces the export's name on the *Overview* page. Then select **Add**. On the **Exports** page, select the name of the added export to set it up. Select **Add Destination** and choose *Google Sheets API* from the dropdown. You can optionally give your destination a title in **Name**. Then select **Save**. UUID-3e2ce0f9-0fc3-0bf2-f6e8-c0f831a238b7 In the **Authentication selection**, select your existing Google Sheets authentication or select **Add New Authentication**. Then, select *Google Spreadsheets* from the dropdown. Productsup next redirects you to Google's sign-in for authentication. After authenticating, you return to the Google Sheets API destination to continue with the setup. UUID-d1313a13-aca7-d8ee-c50c-c9edd48a0d6d In **Spreadsheet Name**, enter the spreadsheet's name where you want to export your data. In **Sheet Prefix**, enter a sheet prefix name, for example, `Sheet 1`. Toggle **Allow only headers** to **On**, to let the platform send only headers when there is no data to send. Turn on your export by selecting **Active** to **On**. Select **Save**. # Import products from Icecat import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] [Icecat](https://icecat.com/) is a product catalog solution that syndicates product data and helps brands, retailers, manufacturers, and marketplaces to exchange product content. Icecat lets users work with multilingual and multimedia product catalogs. Productsup lets you import product data from Icecat to help you gain additional product information and enrich your feed. Prerequisites [#prerequisites] To use Icecat as a data source in Productsup, you need: . An Icecat account and its credentials. . Icecat supplier IDs to sort the Icecat product data pool and import only the relevant data. . A link to an Icecat index file for the platform to access the needed Icecat data pool.See [Open Catalog Interface (OCI): Manual for Open Icecat XML and Full Icecat XML](https://iceclog.com/open-catalog-interface-oci-open-icecat-xml-and-full-icecat-xml-repositories/) and [How to Import Free Product Content Into Your Webshop via Icecat](https://iceclog.com/manual-how-to-import-product-content-into-your-webshop-via-icecat/) for information on index files with links. The Icecat data source in Productsup supports only XML index files. Add Icecat data source [#add-icecat-data-source] Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *IceСat*, select **Add**, give it a name as desired, and then choose **Continue**. UUID-a32d7402-55c3-d126-2859-0483f40551ef In **Username** and **Password**, provide your Icecat credentials to let Productsup access your desired product data. In **Supplier ID**, enter the IDs of Icecat content providers to download data from. If you need to enter multiple IDs, separate them with a comma (`,`). From the **Categories** drop-down list, choose the relevant product categories. In **Open Icecat index file**, add a link to the Icecat index file that Productsup should use to download product data. Choose your product data language from the **Language** drop-down list. To download only the product data added to Icecat within a specific time, define the timeframe: Enter the desired number of days, weeks, months, or years in **Filter products from**. The expected input format is a digit. Choose the length of the timeframe in the drop-down list: **Day(s)**, **Week(s)**, **Month(s)**, **Year(s)**. Specify the desired name of the data source in **Description (optional)**. Select **Save**. # Import your products from a shopping platform import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; You can directly import your products from a shopping platform, such as eBay or Amazon. Discover data sources linking to shopping platforms when you add a data source and by selecting the **Shopping Platforms** tab. UUID-9611de22-8e08-eaaf-169d-e04da2886654 Productsup supports imported products from: * Amazon * Bhinneka * bol.com * Cdiscount * eBay * Elevenia * Etsy * Facebook * Google Merchant Center Importing your products from Amazon Marketplace [#importing-your-products-from-amazon-marketplace] This API lets you instantly pull valuable product details, such as pricing, number of reviews, ratings, model numbers, and categories, directly from Amazon.com. It's helpful for monitoring product information and pricing; you only must enter the required Amazon ASIN. Amazon limits the import to up to 100 products per brand. You can request products for multiple brands, however. To import your products from Amazon Marketplace: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Select **Add** for the *Amazon Product Advertising API* data source. UUID-a1bfeac9-c1cf-1cfd-b441-ed9d6177251f (Optional) Give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. Add your login credentials in **AWS API key (mandatory)**, **AWS API Secret Key**, and **AWS Associate Tag (mandatory)**. * If you do not have these credentials, see [Amazon Associates - Amazon’s affiliate marketing program](https://affiliate-program.amazon.com/). Add the relevant country in **Country (mandatory)**. In **Category (mandatory)**, enter search criteria under at least the **Browse Node**, **Keywords**, or **Brand** field. * In **Brand**, list brands comma-separated without spaces, for example, *Apple,Samsung,Huawei,Oppo*. (Optional) Filter product availability in **Availability**. Choose between **No Available** or **Available**. In **Merchant ID**, select **Amazon** or **No Merchant ID set**. (Optional) In **Condition**, you can select a product's condition from the following drop-down list: * **No Condition** * **New** * **Used** * **Collectible** * **Refurbished** * **All** (Optional) In **Minimum Price**, enter a minimum price in cents. (Optional) In **Maximum Price**, enter a maximum price in cents. Add sorting criteria to inform Amazon how to filter your products if your pull returns more than 100 products in **Sort**. * Possible options are: * `AvgCustomerReviews` * `Featured` * `NewestArrivals` * `Price:HighToLow` * `Price:LowToHigh` * `Relevance` Select **Save**. UUID-4d2f43c3-49af-9742-7b49-729f55060ea4 Import your products from eBay [#import-your-products-from-ebay] If eBay is your primary online store, you can import product information into Productsup with the category import. eBay is very restrictive in using its API. If you have multiple categories, add a data source for each category to import them. To import your products from eBay: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Select **Add** for the *eBay Category Import* data source. UUID-8e61deee-82d9-2e8f-819e-236e32abeb9d (Optional) Give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. In **Environment**, select the space you want to import from eBay. You can choose **Production** or **Sandbox**. In the **appId** and **globalID** fields, enter credentials from your eBay account. In **categoryId**, enter the product categories you wish to import. Select **Save**. UUID-e2f5eb79-b7a1-586f-622d-bf3e3a2d0597 # Import products from xtCommerce import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] xtCommerce is an open-source eCommerce platform popular in the German-speaking market. The *xtCommerce Products* data source pulls your full product catalog from an xtCommerce shop into Productsup, including base attributes (SKU, price, stock, status, weight, image) and language-specific attributes (name, description, short description, URL) for every language you configure. To import products from xtCommerce to Productsup, you need to add and set up the *xtCommerce Products* data source in **Data Sources**. Prerequisites [#prerequisites] To use xtCommerce as a data source in Productsup, you need: . The base URL of your xtCommerce shop, for example `https://shop.example.com`. . An API username and password configured in the shop admin under **Settings → API**. The xtCommerce API plugin must be active. . The list of language codes you want to import, for example `de`, or `de,en,fr` for multilingual catalogs. xtCommerce uses a function-based JSON API. Authentication credentials are passed in every request, so the credentials you enter in Productsup must remain valid for the duration of the import. Add the data source xtCommerce Products [#add-the-data-source-xtcommerce-products] Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *xtCommerce Products*, select **Add**, give it a name as desired, and then select **Continue**. The custom name replaces the data source name on the *Data Sources Overview* page. In **Shop URL**, enter the base URL of your xtCommerce shop, without a trailing slash. For example, `https://shop.example.com`. In **API Username**, enter the API username configured in your xtCommerce shop admin under **Settings → API**. In **API Password**, enter the password for that API user. In **Languages**, enter a comma-separated list of language codes to import, for example `de,en,fr`. Leave it as `de` to import only the default language. Each language adds one extra API request per product page. For every language you list, the platform creates language-specific columns in the feed using the pattern `_` — for example, `products_name_de`, `products_description_en`. Optionally, enter a custom name in **Description (optional)**. Select **Save** and then **Import** at the top of the page. Imported attributes [#imported-attributes] The data source returns the following attributes for each product: | Attribute | Description | | ----------------------------------- | ----------------------------------- | | `products_id` | Unique product ID from xtCommerce. | | `products_model` | SKU or article number. | | `products_price` | Product price. | | `products_quantity` | Stock quantity. | | `products_status` | `1` if active, `0` if inactive. | | `products_image` | Relative path to the product image. | | `products_weight` | Product weight. | | `products_name_` | Product name per language. | | `products_description_` | Product description per language. | | `products_short_description_` | Short description per language. | | `products_url_` | Product URL per language. | If the import returns zero products even though credentials are accepted, check that the xtCommerce API plugin is active in your shop admin. # Import products from a shop system import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; You can import your products directly from your shop system, such as WooCommerce or Shopify. To find available shop systems: Go to **Data Sources** from your site's main menu and select **Add data source**. Select **Shop Systems** in the filters or use **Search** to find a desired shop by its name. Productsup supports product imports from the following shop systems: * BigCommerce * Blibli * Magento * PrestaShop * Salesforce * Shopify * VTEX * WooCommerce Most of the shop systems connect to Productsup via REST or SOAP API connections. You can test REST API credentials in a regular Internet browser. Most [API clients](https://www.postman.com/) can perform both REST and SOAP test requests. Here are some troubleshooting recommendations if the credentials don't work in a browser or an API client: * Add or remove `www` and similar parts of the URL * Add or remove a slash (`/`) inside or at the end of the URL * Try a secure protocol, HTTPS vs. HTTP * Set up new API credentials * Check the API version documentation * Check the shop system forums for common errors Import products from BigCommerce [#import-products-from-bigcommerce] BigCommerce is the world's leading cloud-based eCommerce platform for established and rapidly growing businesses. The platform combines enterprise functionality with an open architecture and app ecosystem. It powers and boosts the performance of eCommerce websites for successful retailers worldwide. Before importing your products from BigCommerce, you must create an account in BigCommerce. See [Creating an API Account](https://support.bigcommerce.com/s/article/Store-API-Accounts?language=en_US#creating). Go to **Data Sources** from the site's main menu and select **Add data source**. Search for *BigCommerce API Import OAuth* and select **Add**. UUID-2d683b9d-ffe8-0f01-b852-ddfb73006e56 Give your data source a custom name if desired, then select **Continue**. The custom name replaces the data source name on the *Data Sources Overview* page. In **Client ID**, enter the client ID from the BigCommerce API account. In **Access Token**, add the access token from the BigCommerce API account. In **Store Hash**, enter a unique store hash value in the API path from the BigCommerce API account. Optionally, enter a custom name in **Description (optional)**. Select **Save**. UUID-52fd135c-bd5f-e5cc-96da-8da6c1d7b0db Import products from Blibli.com [#import-products-from-bliblicom] Blibli.com is an Indonesian online shopping mall pioneer committed to providing a convenient, safe, simple, and fun online shopping experience. Before importing your products from Blibli, you must create an account there. Go to **Data Sources** from the site's main menu and select **Add data source**. Search for *Blibli* and select **Add**. UUID-c3625b3a-1db9-09df-229f-51a84e9b0db8 Give your data source a custom name if desired, then select **Continue**. The custom name replaces the data source name on the *Data Sources Overview* page. In **ZIP Password**, enter the password for your Blibli zip file. Optionally, enter a custom name in **Description (optional)**. Select **Save**. UUID-08c9bb7e-91b8-1208-dcf1-0244f4a473e8 Import products from Magento [#import-products-from-magento] Magento is a modern cloud commerce platform with an open-source ecosystem. Flexible for B2C, B2B, and hybrid solutions, Magento extends beyond the shopping cart for every shopping experience, including email, mobile, in-store, shipping, and marketplaces. You can import your products from Magento by choosing a method appropriate to your version. Import from Magento 1.x [#import-from-magento-1x] Before importing your products from Magento, you must create your account in Magento. To configure Magento, see [Magento Developer Documentation](https://devdocs.magento.com). Go to **Data Sources** from the site's main menu and select **Add data source**. Search for *Magento 1.x SOAP API* and select **Add**. UUID-2b1ad7dc-6064-124c-e0f9-67fa1fb384af Give your data source a custom name if desired, then select **Continue**. The custom name replaces the data source name on the *Data Sources Overview* page. Add the Magento SOAP URL you previously set up in your Magento account. The link format should be such as `https://mymagentoshop247.com/api/soap/?wsdl`. Perform a basic functionality test by selecting your link. It displays information about the web service. Enter your credentials in **Username** and **Password**. Define how many API calls you want the platform to make simultaneously in **API multiCall size**. If you want to receive only a specific range of product IDs, add the first value in **Start index** and the last value in **End index**. If you manage several stores and want to download products only from a specific store, enter the store's code in **Store view code**. Optionally, enter a custom name in **Description (optional)**. Select **Save**. UUID-4c263d9f-2fe6-89a7-a67d-b93947407614 Import from Magento 2.x [#import-from-magento-2x] Before importing your products from Magento, you must create an account in Magento. See [How do I get started?](https://devdocs.magento.com/guides/v2.4/get-started/bk-get-started-api.html#procedure) Go to **Data Sources** from the site's main menu and select **Add data source**. Search for *Magento 2.x REST API* and select **Add**. UUID-0a9900a1-71eb-6e6c-9182-e58f8127a890 Give your data source a custom name if desired, then select **Continue**. The custom name replaces the data source name on the *Data Sources Overview* page. Enter your credentials in **Username** and **Password**. Add the Magento REST URL you previously set up in your Magento account. The link format should be `https://mymagentoshop247.com/api/soap/?wsdl`. Perform a basic functionality test by selecting your link. It displays information about the web service. In **Page size**, define the number of products to extract with each API call, depending on your hosting server's capabilities. Enter a filter in **Data Filter Query**. In **Parallel Workers**, define the maximum amount of API calls to make at once to access products, stock, attributes, etc. Set **Include product details** to **On**. You may need to enter a **Stock Reference Code** to pull the correct stock. * In this case, set **Include product details** to **Off**. Select the behavior of product link information in **Product links**: 1. *Explode* splits links into separate attributes. 2. *Discard* removes the links. 3. *Bundle* groups several attributes if there are too many of them. Optionally, enter a custom name in **Description (optional)**. Select **Save**. UUID-a88b8da8-96c6-2676-52d5-45de4be73be9 By default, the platform retrieves products from the following endpoints: `/products` – main product catalog. `/products/attributes` – details of the product such as color, size, gender, etc. `/categories` – the categories for the website taxonomy and specific products. If you need to fetch products from other endpoints, contact [support@productsup.com](mailto:support@productsup.com). Import products from PrestaShop [#import-products-from-prestashop] PrestaShop is an open-source eCommerce solution that powers more than 250,000 stores worldwide. It offers online shopping cart solutions with more than 300 advanced features fitting the needs of any online business. Before importing your products from PrestaShop, you must create an access key in your PrestaShop account. See [Create an access key](https://devdocs.prestashop.com/1.7/webservice/tutorials/creating-access/#create-an-access-key). Once you've created an access key, you're ready to set up the data source in the platform: Go to **Data Sources** from the site's main menu and select **Add data source**. Search for *Prestashop Import* and select **Add**. UUID-18ae2363-ca3d-900b-7d66-e73946f16a4f Give your data source a custom name if desired, then select **Continue**. The custom name replaces the data source name on the *Data Sources Overview* page. In **API Key**, enter the access key you've created in the PrestaShop account. Add your web shop's domain in **Domain** in the format such as `https://www.yourdomain.de`. Optionally, in **Default Language ID**, define the language ID for the products you are importing. See [Languages](https://docs.prestashop-project.org/1.7-documentation/user-guide/improving-shop/going-international/localization/languages) at PrestaShop website. If necessary, enter credentials in the **HTTP Auth User** and **HTTP Auth Password** fields. To import all your product variants, set **Fetch Variants** to **On**. Optionally, enter a custom name in **Description (optional)**. Select **Save**. UUID-e62058ab-2d37-bd7e-09bd-912c9ac51e76 Import data from Salesforce [#import-data-from-salesforce] You can retrieve three types of data from Salesforce Commerce Cloud: * Your catalog with all your products and their attributes. * Your pricing data. * Your inventory data containing your products' stock levels. Import your product catalog from Salesforce [#import-your-product-catalog-from-salesforce] To import catalog data from Salesforce Commerce Cloud into Productsup, you need to export your Salesforce product data into an XML file and store it on an FTP server. You can use the Productsup Cartridge add-on or the out-of-the-box capabilities of Salesforce to create the XML file. To store it, you can use the Productsup FTP Server. See [Create an FTP server hosted by Productsup](/docs/help-center/get-started/create-and-manage-an-ftp-server/create-an-ftp-server-hosted-by-productsup) for more information. To request Productsup Cartridge, contact your Customer Success Manager or [support@productsup.com](mailto:support@productsup.com). If you use Salesforce Commerce Cloud as a B2B organization, you should instead consider using the out-of-the-box capabilities of Salesforce to run the export. Once the XML file is ready and available on an FTP server, the *Salesforce Commerce Cloud (Catalog)* data source option lets you import your products into Productsup. Go to **Data Sources** from your site's main menu and select **Add data source**. Search for *Salesforce Commerce Cloud (Catalog)*, select **Add**, change the name of the data source as desired, and then select **Continue**. UUID-338ed636-4b54-82ff-acf8-78e2cacadb3b In **Host**, enter a link to your FTP server. If you are using the Productsup FTP Server, use the link suggested in the field. In **URI**, specify the path to your import file on the FTP server. The path is a string of characters that uniquely identifies a location in the directory structure of your FTP server. In **Filename**, enter the name of your import file that corresponds to the name of your XML file on the FTP server. Provide your FTP authentication data in **Username** and **Password**. In **Locale**, choose which locales Productsup should import from the file. You can choose to import: 1. Products that belong to a specific locale only. Select the needed language or market code to import products that belong to the needed locale. 2. All products that belong to all locales in the file. Select **all** to import all products from all locales. 3. The default locale of the file only. Select **x-default** to import products of the default locale. Edit the name of the data source in **Description (optional)** as needed. Select **Save**. Import price and inventory data from Salesforce [#import-price-and-inventory-data-from-salesforce] There are two options for importing price and inventory data from Salesforce Commerce Cloud into Productsup: * The Feed URL data source. * The Productsup Platform API data source. If your inventory and price data don't change frequently, you can use the Feed URL data source option to import prices and stock levels as additional data sources. See [Import a file from a URL](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-a-file-from-a-url) and [Enhance your products with additional data sources](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources). While setting up your new additional data source with price or inventory data, set the `attributes_product-id` attribute in **ID Column In This Feed** as the unique item identifier. In **ID Column From Your Main Feed**, choose the unique item identifier column from the *Salesforce Commerce Cloud (Catalog)* data source. *Salesforce Commerce Cloud (Catalog)* is your main data source. If your price and inventory data change frequently, you can use the *Productsup Platform API* data source option to import this data into the platform. Selling products on multiple marketplaces and altering prices to support recurrent promotional campaigns are common causes of frequent price and inventory data updates. The *Productsup Platform API* data source option requires additional configurations in Salesforce. For example, you need to set up delta jobs that look for price and inventory data changes and push those changes to the Productsup Platform API. See [Import from APIs](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-from-apis#section-idm232211500950421) for more information. It may be the case that your price data doesn't change frequently, but your inventory data does. If so, you can use the *Feed URL* data source option to import the price data and the *Productsup Platform API* data source option to import your inventory data. Import products from Shopify [#import-products-from-shopify] Shopify is a cloud-based, multi-channel commerce platform designed for small and medium-sized businesses. Merchants can use this platform to manage their stores across multiple sales channels, such as web, mobile, social media, marketplaces, brick-and-mortar, and pop-up shops. You can use the *Shopify Products* data source in Productsup to import enriched product data from Shopify. Shopify is deprecating its REST API and has released the GraphQL API. The *Shopify Products* data source imports products from Shopify using the GraphQL API. Prerequisites [#prerequisites] Before importing your products from Shopify, you need to get an API access token using a custom app in Shopify. See [Custom apps](https://help.shopify.com/en/manual/apps/custom-apps?shpxid=d3c32180-05F2-4F86-2737-02CF3AA823AF) for detailed instructions in the Shopify Help Center. The Productsup Help Center doesn't bear any responsibility and accountability for the accuracy and relevance of the processes, features, UI elements, and other information mentioned in the following instructions about third-party websites and platforms. The following instructions aim to help the readers of the Productsup Help Center perform complex activities outside the Productsup platform while the official technical documentation of the website or platform in question doesn't provide easy-to-find information on the needed activities. Go to the Shopify admin panel, and select **Settings** in the bottom-left corner. Then, select **Apps and sales channels**. Select **Develop apps**, and choose a relevant custom app. If you don't have any custom apps yet, create one by selecting **Create a custom app**. Set up your app by choosing an app developer, assigning permissions, and defining API scopes. The scopes `read_products` and `read_inventory` are required to import your data via the Shopify Products data source. You must enable additional scopes to fetch additional data from Shopify, depending on your use-case: `read_locations`, `read_metaobject_definitions`, `read_metaobjects`, `read_product_feeds`, `read_product_listings`, `read_translations`. See the [access-scopes documentation](https://shopify.dev/docs/api/usage/access-scopes) for a full list of Shopify's scopes. Go to the *API credentials* section, select **Install app**, and confirm the action. Select **Reveal token once**. The token is shown only once, so save it securely as you will need it to set up the *Shopify Products* data source in Productsup. Set up the Shopify Products data source [#set-up-the-shopify-products-data-source] Once you've created an API token, you're ready to set up the data source in the platform: Go to **Data Sources** from the site's main menu and select **Add data source**. Search for *Shopify Products* and select **Add**. UUID-c91eec70-ba20-8a19-4f1b-a8e73daf8034 Give your data source a custom name if needed, and select **Continue** to proceed. The custom name replaces the data source name in the *Overview* tab in Data Sources. Add your shop's web address in **Shop URL**. Enter the API token in **Admin API access token**. The token always starts with `shpat_`. Toggle **Include Metaobject Data** to one of the following states: * If set to *On*, the platform imports the Metaobject fields as data. In this case, you must enable the `read_metaobjects` scope for the applied Shopify Auth. * If set to *Off*, the platform imports the Metaobject fields as links instead of data. This setting requires no additional scope. UUID-942eeda3-5786-ba21-a057-c5df13cb0192 You can use filters to import only specific sets of products to Productsup: If you use one of the following filter types, avoid setting up any other filter types in the same data source. 1. To import only products with the needed states, select the desired states in **Status**. When you select a status, the platform excludes products with other statuses from the import. By default, the data source imports products of all statuses. You can select a necessary combination of statuses by holding the *cmd* or *Ctrl* key. UUID-c3f64bbc-273a-01ed-8a9d-c0f1a18bafa8 2. To import products created, updated, or published after a certain date and time, enter the corresponding values in **Created at minimum**, **Updated at minimum**, and **Published at minimum**. Enter the value in the format `xxD:xxH`, where `xx` is the number of days and hours the platform should subtract from the date and time of the import run. For example, `10D00H` means ten days and zero hours before the date and time of the import run. If you enter values in more than one of these time filter fields, they use the `AND` logic, which means you import only products that meet all the filtering criteria. For example, if you enter values in all three fields, the platform imports only the products that had all three changes (creation, update, and publication) at the chosen times. To follow the `OR` logic and import data created, updated, or published at the needed times, set up a separate data source for each time filter, for example, one for **Created at minimum**, one for **Updated at minimum**, and another one for **Published at minimum**. UUID-d8fd33ba-44b8-68d7-714d-641d93ee0ccc Use these settings if you have a large product catalog and only want to import a small number of products to speed up the import process. 3. To import only products belonging to a particular collection in your Shopify account, enter the ID of the desired collection in **Collection Id**. You can create a new collection in Shopify to group the exact products you want to import into Productsup. You can also use an already existing collection. See [Collections](https://help.shopify.com/en/manual/products/collections) for more information. UUID-65031fdf-e8ce-c702-dea7-a23faa6fa47c You can't combine the **Collection Id** filter with any other filters in the data source setup. Instead, use collections in Shopify to group and filter the products you need to import into Productsup. In **Pricing context**, enter valid country codes separated by a comma. See [CountryCode](https://shopify.dev/docs/api/admin-graphql/2025-01/enums/CountryCode). If you enter `DE,FR` in this field, the platform creates the following attributes to import country-specific pricing data: `contextualPricingDE_amount`, `contextualPricingDE_currencyCode`, `contextualPricingFR_amount`, `contextualPricingFR_currencyCode`. In **Translations locale**, you can enter the `isoCodes` of the needed locales, for example, *de, nl, en*, to import all attributes containing localized content for these locales. See [availableLocales](https://shopify.dev/docs/api/admin-graphql/2025-01/queries/availableLocales). Using **Translations locale** requires the additional scope `read_translations`. Optionally, enter a custom name for the data source in **Description (optional)**. Select **Save**. During the import, the platform adds the Shopify description attribute values in the **body\_html** attribute. Set up the Shopify Products via Webhooks data source [#set-up-the-shopify-products-via-webhooks-data-source] The *Shopify Products via Webhooks* data source keeps your product data close to real time. Instead of polling Shopify on a schedule like the *Shopify Products* data source, it registers a webhook that sends product create, update, and delete events to Productsup as soon as they happen on your Shopify store. Because Stream API acts as the intermediary, the platform can pick up this data on your site's next import run, independent of a fixed polling schedule. You can use it as a standalone data source, or as an additional data source that enhances your *Shopify Products* data source with faster updates. See [Enhance your products with additional data sources](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources) for more information. This data source uses the same Shopify custom app described in [Prerequisites](#section-idm234959747776748). You also need a Stream API Personal Access Token. Go to **Data Sources** from the site's main menu and select **Add data source**. Search for *Shopify Products via Webhooks* and select **Add**. Shopify Products via Webhooks data source card in the Add data source list Add your shop's web address in **Shopify Shop URL**. Optionally, enter a signing secret in **Shopify Webhook Secret**. If you leave this field empty, Productsup accepts unverified webhook requests. Enter your Shopify Webhook Secret so Productsup can validate that a request is signed correctly and genuinely originates from your Shopify store. Enter your access token in **Shopify Admin Access token**. This field only applies to Shopify applications set up before January 1, 2026. Configure the product data settings, such as **Shopify Include Metadata**, **Shopify Status**, and **Shopify Pricing Context**, the same way as for the *Shopify Products* data source. See [Set up the Shopify Products data source](#section-idm353495977730460) for details on each setting. Enter your token in **Stream API Personal Access Token**. Stream API acts as the intermediary for this integration: it receives your Shopify data as soon as it changes, but the platform needs this token to import that data into your site. If you do not have a token, request one from [support@productsup.com](mailto:support@productsup.com). Give your webhook a name in **Webhook Name**. Select **Create Webhook**. The platform creates the webhook, registers it with your Shopify application for product create, update, and delete events, and fills in **Webhook upload products endpoint** with the resulting URL. Webhook Name field and Create Webhook button Optionally, enter a custom name in **Description (optional)**. Select **Save**. Update or remove a Shopify webhook data source [#update-or-remove-a-shopify-webhook-data-source] Once you have created a webhook, **Create Webhook** turns into **Update Webhook**. Use it to rename your webhook or to rotate a credential, such as the Shopify Admin Access Token: open the data source, update the field, and select **Update Webhook**. The platform re-triggers the registration with Shopify so your subscriptions stay in sync. Update Webhook button and Webhook upload products endpoint field The URL in this screenshot is an example and does not exist. In your own **Webhook upload products endpoint**, the ID is not surrounded by `<` and `>` characters. To remove the data source, go to **Advanced Settings** and select **Delete this import**. The platform deregisters the webhook from Shopify automatically, so no manual clean-up is needed there. Import products from VTEX [#import-products-from-vtex] To import your products from VTEX, see [Import products from VTEX](/docs/help-center/import-data-feeds/import-data-from-third-party-external-systems/import-products-from-vtex). Import products from WooCommerce [#import-products-from-woocommerce] WooCommerce is an open-source eCommerce plugin for WordPress. To import products from WooCommerce, you must set up API access in your WordPress store. See [WooCommerce REST API](https://docs.woocommerce.com/document/woocommerce-rest-api/#). Once you've created the API access, you're ready to set up the data source in the platform: Go to **Data Sources** from the site's main menu and select **Add data source**. Search for *WooCommerce Products Importer* and select **Add**. UUID-e837f0d6-fc11-1662-983a-44c66a68b880 Give your data source a custom name if desired, then select **Continue**. The custom name replaces the data source name on the *Data Sources Overview* page. Add your web shop's address in **Shop url**. Enter the API credentials you've created in your WooCommerce account in the **API Key** and **API secret** fields. Select a WooCommerce version in **API Version**. To import all your product variants, toggle **Import variants** to *On*. If you want to import only specific attributes, you can type only these attributes in **Import data filter**. Separate them by a comma (`,`) without spaces such as `id,name,description`. To send auth secrets as a string for OAuth 1.0, toggle **OAuth 1.0 auth as string** to *On*. Optionally, enter a custom name in **Description (optional)**. Select **Save**. UUID-803681c2-faad-6bd2-dee2-ef742612065a # Import tracking data from Google Analytics 4 import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Productsup has a new API-based data source called *Google Analytics 4 (GA4)* to let you import your tracking data from the new version of Google Analytics. An example of using Google Analytics data in Productsup involves letting the platform exclude low-performing products from export. Prerequisites [#prerequisites] To import data from Google Analytics 4 into Productsup, you need the following: . A Google Analytics 4 account containing relevant tracking data. . Google Analytics authentication in a relevant site, project, or account. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems) for the setup information. . A property ID associated with the relevant tracking data in Google Analytics. See [How to check property type](https://support.google.com/analytics/answer/11583832?hl=en#:~:text=4%20property%20already.-,Instructions,-To%20find%20your). . A list of relevant metrics and dimensions from your Google Analytics account. Not all Google Analytics metrics and dimensions are compatible. See [GA4 Dimensions & Metrics Explorer](https://ga-dev-tools.web.app/ga4/dimensions-metrics-explorer/) to check which metrics and dimensions you can pair up. . A JSON request with filtering settings.This prerequisite is only relevant if you plan to use filtering because you don't need Productsup to import all data available for your selected metrics and dimensions. See [GA Query Explorer](https://ga-dev-tools.web.app/ga4/query-explorer/) to set up the needed filter and copy it as an auto-generated JSON request. Import data via Google Analytics 4 (GA4) [#import-data-via-google-analytics-4-ga4] To import your tracking data from Google Analytics 4, run the following steps: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Google Analytics 4 (GA4)*, select **Add**, give it a name as desired, and select **Continue**. UUID-6347b18c-7195-2197-3d40-43b609d89e88 In **Web property ID**, enter the relevant property ID found in your Google Analytics 4 account. In **Metrics**, enter the Google Analytics metrics containing the data you want to import. Use the comma (`,`) to separate values if you need to import data for multiple metrics.See [GA4 Dimensions & Metrics Explorer](https://ga-dev-tools.web.app/ga4/dimensions-metrics-explorer/) for a list of metrics you can use. In **Dimensions**, enter the Google Analytics dimensions containing the data you want to import. Use the comma (`,`) to separate values if you need to import data for multiple dimensions.See [GA4 Dimensions & Metrics Explorer](https://ga-dev-tools.web.app/ga4/dimensions-metrics-explorer/) for a list of dimensions you can use with the selected metrics. Define your tracking data period in **Start date** and **End date**. The platform doesn't import data gathered outside this period.These fields support multiple date formats: 1. Full date: `YYYY-MM-DD`. 2. Word reference: `today` or `yesterday`. 3. Phrase reference: `NdaysAgo`, where *N* is the number of days. If you don't want to import all the data belonging to the selected metrics and dimensions, you can use a filter: 1. Go to [GA Query Explorer](https://ga-dev-tools.web.app/ga4/query-explorer/) to set up the desired filter and copy the auto-generated JSON request containing your filtering settings. 2. Go back to the data source setup page in Productsup and paste the JSON request in **Filters**. In **Authentication selection**, choose the Google Analytics authentication you have previously created in your site, project, or organization.If you haven't created the needed Google Analytics authentication yet, select **Add New Authentication**. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems) for more information. In **Description (optional)**, modify the name of the data source as needed. Select **Save**. If your site already has a main data source, and the platform uses it to import your product catalog, you can make Google Analytics 4 (GA4) an additional data source. See [Enhance your products with additional data sources](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources) for more information. 1. Go to **Data Sources** and select the cogwheel (**⚙**) icon next to your Google Analytics 4 (GA4). 2. In the **Content Mode** panel, select **Additional Data Source**. 3. Define how the platform should import data from Google Analytics by choosing the desired option in **Additional Data Source Types**. 4. Choose the column that uniquely identifies products in this data source in **ID Column In This Feed**. 5. Choose the column that uniquely identifies products in your main data source in **ID Column From Your Main Feed**. Select **Import** in the top-right corner of your view. # Import product offers from Amazon import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Productsup lets you import your existing offers from Amazon Seller Central account using the data source *Amazon Selling Partner API – Offers*. This data source connects to your Amazon seller account via Amazon Selling Partner API (SP-API). See [Add Amazon Seller Central – Product Creation (US) export](/docs/help-center/export-data-feeds/add-export/add-amazon-seller-central-product-creation-us-export) to learn more about the Amazon ecosystem in Productsup. Prerequisites [#prerequisites] To use data source *Amazon Selling Partner API – Offers* in Productsup, you need to: . Create an Amazon seller account. You need to provide your account data to Productsup to set up the API connection. . Upload your product data to Amazon. Add the data source Amazon Selling Partner API – Offers [#add-the-data-source-amazon-selling-partner-api--offers] Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Amazon Selling Partner API – Offers*, select **Add**, give it a name as desired, and then select **Continue**. In **Authentication**, choose the Amazon authentication you previously set up in your organization, project, or site. If you haven't set up Amazon authentication yet, perform the following steps: 1. Select **Add New Authentication**. UUID-6c723739-f030-e9c5-8e46-70795b0e4af4 2. Select *Amazon Authentication (BETA version by Amazon)* in **Type**. You can optionally give your authentication a name. 3. Select **Next**. 4. If applicable, select **Region** and **Country** to choose your marketplace country and locale. 5. Select **Connect**. Before proceeding, Productsup redirects you to Amazon to finalize your authentication. After completing the authentication setup, Amazon redirects you back to Productsup. 6. Close the confirmation window to proceed. Choose the market of interest in **Marketplace ID**. In **Description (optional)**, add a description for your data source. It substitutes the data source name on the *Overview Data Sources* page. Select **Save**. # Import data from Bluestone PIM import { Step, Steps } from "fumadocs-ui/components/steps"; Bluestone PIM is a composable SaaS PIM platform that lets you connect and share your product information with other software, marketplaces, or platforms. Productsup lets you import your data from Bluestone PIM account using the data source *Bluestone PIM*. Prerequisites [#prerequisites] To import data from Bluestone PIM, you need: . Have an account in Bluestone PIM. . Have an API key from your Bluestone PIM account. Add the data source Bluestone PIM [#add-the-data-source-bluestone-pim] Go to **Data Sources** from your site's main menu, and select **Add data source**. Search for *Bluestone PIM*, select **Add**, give it a name as desired, and then select **Continue**. UUID-ae34e5f1-5cf4-a43d-bef7-b27e280ab3f9 In **EVN STAGE**, choose either the test or production environment. Add your API key from Bluestone PIM in **PAPI Key**. In **Category ID**, enter your Bluestone category ID. You can enter only one (1) category per datasource currently. In **Import chunk size**, enter the number of products you want to import per request. Enter the number of thread workers for concurrent API calls in **Concurrent workers**. It must be a minimum of `1`. By default, it is `5`. For testing purposes only, in **Max product limit**, enter the maximum number of items you want to import. In **Description (optional)**, add a description for your data source. It substitutes the data source name in the *Overview* tab in Data Sources. Select **Save**, and choose **Import** in the top-right corner of the page. # Find Amazon ASINs by barcode import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; If you want to co-list against products already in Amazon's catalog but only know them by barcode, this data source searches Amazon's public catalog and returns the matching ASIN for each identifier. It works for products your account does not sell yet — the existing Amazon Product Import datasources only return ASINs your account already lists. The ASINs this data source finds are typically used as input for the [Amazon Offer Creation export](/docs/help-center/export-data-feeds/add-export/add-amazon-offer-creation-export), which needs an existing ASIN to list an offer against. Prerequisites [#prerequisites] To use this data source, you need: * An active Amazon account connection in Productsup. * A list of the product identifiers you want to look up: UPC, EAN, GTIN, ISBN, or JAN codes. * The identifiers must all be the same type. If you have a mix, for example some UPCs and some EANs, run this data source once per type. Add the data source [#add-the-data-source] Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Amazon Catalog ASIN Search & Match*, select **Add**, give it a name, and select **Continue**. In **Authentication**, select an existing authentication or select **Add New Authentication** to connect your Amazon account via OAuth. In **Identifiers**, enter your barcodes separated by `#`, for example `840132647045#840132676922`. In **Identifier type**, select the type all of your identifiers share: *UPC*, *EAN*, *GTIN*, *ISBN*, *JAN*, or *MINSAN*. Amazon does not validate the identifier type you choose. If you select the wrong type, every identifier returns as unmatched instead of showing an error, so double-check this before your first run. In **Marketplace ID**, select one or more marketplaces to search. Optionally, set **Max identifiers** to cap how many barcodes this data source processes per run. The default is 10,000. Select **Save**. What you get back [#what-you-get-back] Each run adds one row per identifier to your data, with the following columns: | Column | Description | | :------------------------- | :---------------------------------------------------------------------------- | | Input identifier | The barcode you searched for | | ASIN | The matching Amazon ASIN, if found | | Title, brand, product type | Basic product details from Amazon's catalog, to help you confirm the match | | Match count | How many candidate ASINs Amazon returned for this identifier | | Requires review | Set to *true* when a barcode returns no match or more than one candidate ASIN | A barcode with zero matches still produces a row, with an empty ASIN and *requires review* set to *true* — it is never silently dropped. Use the results [#use-the-results] Rows with a single, clean match are ready to use as the ASIN for your [Amazon Offer Creation export](/docs/help-center/export-data-feeds/add-export/add-amazon-offer-creation-export). Rows flagged *requires review* need a manual decision before you list an offer against them, since Amazon returned either no candidate or several possible matches. Common issues [#common-issues] | Issue | Likely cause | What to do | | :----------------------------------------- | :--------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------- | | All identifiers come back unmatched | Wrong identifier type selected | Confirm the barcode type and run the data source again | | An identifier has multiple candidate ASINs | The barcode is shared across several catalog listings | Review the candidates manually and choose the correct ASIN | | An identifier has zero matches | The product isn't in Amazon's catalog under this identifier, or the marketplace is wrong | Confirm the barcode and marketplace, or check with the brand for the correct identifier | # Import products from Akeneo PIM import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] In Productsup, you can directly import products from a product information manager (PIM), such as Akeneo. You can use the following data sources to import your data from Akeneo: * Akeneo Cloud API v5.0 * Akeneo File Import Prerequisites [#prerequisites] To use Akeneo Cloud API v5.0 as a data source in Productsup, you need: * Have an account in the Akeneo Serenity Enterprise and Growth editions. See [What is the Serenity version](https://help.akeneo.com/pim/serenity/versions-in-detail.html#serenity). * Create a connection in Akeneo. See [Create a connection](https://help.akeneo.com/pim/serenity/articles/manage-your-connections.html#create-a-connection). Set up Akeneo Cloud API data source in Productsup [#set-up-akeneo-cloud-api-data-source-in-productsup] After creating a connection to Productsup from your Akeneo account, you can use the same credentials to proceed with the Akeneo Cloud API data source in Productsup. Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Then choose *Akeneo Cloud API v5.0* and select **Add**. UUID-dcd40f47-b431-91a0-8ef6-e7507e7fda7d Optionally, give your data source a custom name. This replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. In **Host**, enter the URL path to your data. Enter the four (4) credentials you received when you previously created the Akeneo connection in **Username**, **Password**, **ClientId**, and **Client Secret**. Choose which delimiter to use to group several products in **Bundle Delimiter**. The default is `###`. Set the number of products that the platform can fetch at a time in **Limit**. Optionally, add entities and assets. Productsup imports all products and describes in the logs which entity groups and assets are available in Akeneo. By default, Productsup doesn't import entities or assets. If you wish to import entities or assets from Akeneo, take the following steps: Switch the **Import Entities** or **Import Assets** buttons to *ON*. In **Add Entities** and **Add Assets**, enter the names of the entities and assets you wish to import. Add each entity and asset names with a new line. You can see which entities and assets are in the Run log during the first import run. Open the Run log panel anytime in Productsup by selecting its icon in the top-right header. UUID-5c0627e5-b2d3-f226-4796-94cda897fdfb Switch the **Import Category Path** to *On* to import the category path of your products. Switch the **Import Attribute Options** to *On* to get a list of attribute options. Enter asset filters in **Search filter Assets**. For example, *\{"updated":\[\{"operator":">","value":"2018-07-04T10:00:00Z"}]}}*. Enter attribute filters in **Search filter Attribute**. For example, *\{"code":\[\{"operator":"IN","value":\["code1","code2"]}]}*. Enter entity filters in **Search filter Entities**. For example, *\{"complete":\{"operator":"=","value":true,"channel":"ecommerce","locales":\["en\_US"]}}*. Enter family filters in **Search filter Families**. For example, *\{"code":\[\{"operator":"IN","value":\["family\_code1","family\_code2"]}]}*. Enter product filters in **Search filter Products**. For example, `{"enabled":[{"operator":"=","value":true}]}`. Enter the product location filter for your product downloads in **Filter by Locales**. In **Filter by Scope**, enter the filter for product values to return relevant attributes for the given channel and the non-localized or irrelevant attributes. In **Description (optional)**, you can change this data source name, which appears in your data source list. Select **Save** and select **Import** at the top of the page. Continue in your Akeneo account to configure your feed export to Productsup. See [Export your data](https://help.akeneo.com/pim/serenity/articles/exports.html). Next, import your data from Akeneo to Productsup. See the following section. Set up Akeneo File Import in Productsup [#set-up-akeneo-file-import-in-productsup] Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Then, choose *Akeneo File Import* and select **Add**. UUID-3eea2c20-85b9-9b33-aee0-2d2abd270d00 Optionally, give your data source a custom name. This replaces the name of the data source on the *Data Sources Overview* page. Then select **Continue**. In **Host (required)**, enter the URL path to your data. Enter your Akeneo login credentials in **Username (optional)** and **Password (optional)**. Enter the name of your product file for import in **Product Filename (required)**. In **Product URI**, enter the Uniform Resource Identifier (URI) that identifies your specific resource. Choose one of the following CSV delimiter types in the **Product CSV Delimiter** drop-down list: * `, COMMA` * `| PIPE` * `; SEMICOLON` * `\t TAB` * `~ TILDE` Optionally, you can repeat the previous three steps for the category, variant, attribute, and family files in the corresponding fields that follow. In **Locale**, choose the product location for your product downloads. In **Bundle Delimiter**, choose which delimiter to use to group several products. The default is a pipe `|`. In **Channel (optional)**, enter the Akeneo channel you wish to import from. The default is set to *all*. Switch the **Enabled** button to *On* to activate the data source. In **Output filter**, you can choose to apply a filter to only import specific columns. To accomplish this, set a Pearl Compatible Regular Expressions (PCRE) or Regular Expression (RegEx) condition to exclude specific columns under the output filter.See [How does the Regular Expression (RegEx) filter work?](https://support.docparser.com/article/1290-how-does-the-regular-expression-regex-filter-work) to learn more. In **Description (optional)**, you can customize this data source name, which appears in your data source list. Select **Save** and select **Import** at the top of the page. # Import products from Snowflake import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] [Snowflake](https://www.snowflake.com/en/) is a cloud-based data storage company offering various solutions for enterprise clients to help you optimize supply chain planning, demand forecasting, and inventory management. To import products from your Snowflake database to Productsup, add and set up the *Snowflake Import v1* data source in Data Sources. Prerequisites [#prerequisites] To use Snowflake as a data source in Productsup, you need: . A Snowflake account and login information. Add Snowflake data source [#add-snowflake-data-source] Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Snowflake Import v1*, select **Add**, give it a name as desired, and then select **Continue**. UUID-00384b5a-ffb7-90d4-38df-e708b259990f Enter your Snowflake data into the following fields: * **Username** – Snowflake user id * **Password** – Snowflake user account password * **Query** – SQL query * **Driver** – Snowflake driver name * **Host** – Database host to connect with Snowflake * **Port** – Database port to connect with Snowflake * **Database** – Snowflake database name Specify the desired name of the data source in **Description (optional)**. Select **Save**. UUID-9f1d0c9a-2d5b-7c45-8523-ff88927b7a4e To start the import, select **Import** in the top-right corner of your site's view. # Import data from Facebook Ad Insights import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Facebook Audience Insights gives you aggregated information about three (3) groups of people who are: . People connected to your Page . People in your Custom Audience . People on Facebook With this information, you can create content that resonates and increase your current audience. To import products from your Facebook Audience Insights to Productsup, you need to add and set up the data source *Facebook Ad Insights* in Data Sources. Prerequisites [#prerequisites] To use Facebook Ad Insights as a data source in Productsup, you need: . Your Facebook account. Add the data source Facebook Ad Insights [#add-the-data-source-facebook-ad-insights] Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Facebook Ad Insights*, select **Add**, give the data source a name as desired, and then select **Continue**. UUID-d0ac7c0d-b229-ac05-a259-2037203ae0bb In **Account Id**, enter the account ID of your Facebook Audience Insights. In **Campaing Id**, enter the campaign ID if you only want to import insights for a specific campaign. In **Time Period**, select the period for which you want to import the data. In **Authentication**, select the **Add New Authentication** button. In *Add new authentication* pop-up window, select *Facebook* in **Type** and enter the name for your authentication as desired. Select **Next**. UUID-de756787-c728-813c-0c0b-4eb21dcfaabe The Facebook login page opens. Enter your Facebook credentials. In **Breakdowns**, select a necessary breakdown. See [Insights API Breakdowns](https://developers.facebook.com/docs/marketing-api/insights/breakdowns) for more information. In **Description (optional)**, add a description for your data source. It substitutes the data source name on the *Overview Data Sources* page. Select **Save**. UUID-28059594-5a43-c214-105d-b6d95dcfb6a8 If your site already has a main data source, and the platform uses it to import your product catalog, you can make *Facebook Ad Insights* an additional data source. See [Enhance your products with additional data sources](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources) for more information. 1. Go to **Data Sources** and select the cogwheel (**⚙**) icon next to Facebook Ad Insights data source you've just set up. 2. In the **Content Mode** panel, select **Additional Data Source**. 3. Define how the platform should import data from Google Analytics by choosing the desired option in **Additional Data Source Types**. 4. Choose the column that uniquely identifies products in this data source in **ID Column In This Feed**. 5. Choose the column that uniquely identifies products in your main data source in **ID Column From Your Main Feed**. To import data from *Facebook Audience Insights*, select **Import** in the top-right corner of your site's view. # Import external tracking data import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] If you have external tracking data for your products, you can import this data into Productsup. You can add external data sources that link to import tracking, which can be found when you add a tracking system in **Data Sources**, *Tracking Systems*. UUID-71ae25f4-5d34-6998-6563-52bb6713a334 See \[component:17633] if you don't want to use Productsup tracking. But if you want to use the [ROI Strategy](/docs/help-center/legacy-docs/legacy-functionality/roi-strategy) feature and/or see your tracking data in \[component:17350], you can integrate your own third-party tracking, for example, Marin, Google Analytics, etc. Use external tracking data for ROI Strategy only: [#use-external-tracking-data-for-roi-strategy-only] 1. Create a feed with the tracking data [#1-create-a-feed-with-the-tracking-data] * Tracking data can only be uploaded to the platform in the form of a data feed. The platform requires a URL in order to import the feed. * Productsup recommends that you match the product ID in your feed with your product feed data. This lets you get tracking data on the product level. * If you can't provide data on a product level, you can provide data at a category level instead. * If you want to provide data for a different export channel, make sure to provide unique column names, for example, `Google_clicks`, `Nextag_costs`. * You can choose the time range that you want for the data. Be sure to use a dynamic time range, for example, "last 30 days" instead of a static time range, such as "from 2015-09-20 to 2015-10-20". The tracking data should be updated on a daily basis. * Tracking data must be aggregated for its applicable time ranges. Do not provide the same ID twice in the feed for two different periods. Rather, combine these. For example, do not provide: | product\_id | day | clicks | | ----------- | ---------- | ------ | | 1234 | 2015-12-15 | 5 | | 1234 | 2015-12-16 | 12 | Instead, provide: | product\_id | clicks | | ----------- | ------ | | 1234 | 17 | 2. Upload the feed in the platform [#2-upload-the-feed-in-the-platform] Here, you want to upload the tracking data feed as an *additional feed*. For more information on additional feeds, see: [Enhance your products with additional data sources](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources). 3. Implement ROI Management [#3-implement-roi-management] After importing the data feed in the platform, you can now use ROI Strategy. See [ROI Strategy](/docs/help-center/legacy-docs/legacy-functionality/roi-strategy), for more information on ROI tracking. Use external tracking data for both ROI Strategy and Reporting: [#use-external-tracking-data-for-both-roi-strategy-and-reporting] Data for **ROI Strategy** comes from a feed in Data Source, whether you use Productsup Tracking. In this case, your data source has or has not automatically generated the feed, and you import your own tracking data. The Reporting tab takes the information from the Productsup database. For this, you need to be able to: Import tracking data into the relevant site on the platform. Create a feed using the export channel "External Tracking" to convert your tracking data to the correct format. Upload the feed directly into the Productsup database. 1. Create a feed with the tracking data [#1-create-a-feed-with-the-tracking-data-1] This time, rather than providing aggregate data for a time range, you'll need to provide a feed that only contains the tracking data from yesterday. Every day the platform will import the data from the day before and upload them to the database. Be sure, as before, that the feed does not contain the same product ID twice, but also only that it only contains the data for one day. | product\_id | day | clicks | orders | | ----------- | ---------- | ------ | ------ | | 1234 | 2015-12-15 | 5 | 1 | 2. Activate the External Tracking template and create a feed [#2-activate-the-external-tracking-template-and-create-a-feed] You have to import the data into a site that is different than the site you want, to see the tracking data in reporting. For example, all your active export channels are on website `123456`. You then need to create a new site `123457` within the *External Tracking* template, you can provide your site `123456`. Now the tracking data will be saved for this site with your live channels. Activate the export channel **External Tracking** UUID-4cdd6dbc-5d17-bd9a-4f52-23abd7c9f261 **product\_id**: The product's ID. These should match the product IDs provided in your main product feed. **site\_id**: Enter the site ID of the site you want to track. Use the Static Value Box to create the value. **costs\_cpo**: Costs per order for a product for yesterday. optional **costs\_cpc**: Costs per click for a product for yesterday. optional **site\_channel\_id**: The channel ID is the sub-ID of an export if you activate more than one data flow. See \[component:17053]. **costs**: Costs for a product for yesterday. **profit**: Profit for a product for yesterday. optional **revenue**: Revenue for a product for yesterday. **click**: Clicks for a product for yesterday. **order**: Orders for a product for yesterday. **campaign\_id**: This is the unique ID every Productsup export template has, for example, `1` for Google Merchant Center. Contact [support@productsup.com](mailto:support@productsup.com) to receive information for your particular channel. **date**: Yesterday's date. If you don't have this information in your feed, you can create it with a box combination: . Using *Timestamp*, show today's day. . Using *Math*, subtract one day. . Convert the format into `YYYY-MM-DD`. For example, `2015-08-16`. UUID-018e0bfd-84f6-941d-d68c-a3739f3d5dd6 3. Export the tracking data in the Productsup database [#3-export-the-tracking-data-in-the-productsup-database] As feed destination in **Exports** > **Setup**, select ***External Tracking*** UUID-4cdd6dbc-5d17-bd9a-4f52-23abd7c9f261 Select **Export**. A few minutes later, you can see the tracking data in the reporting tab of the other site. What happens if I export more than once? The last export will overwrite the previous export for this date, but only for IDs contained in the tracking feed. It won't delete any data, only overwrite them. **Example #1**: . I export the first 20 clicks for the product ID `12345` for the date `2015-08-15`. The reporting shows `20 clicks`. . I export again but this time 25 clicks for the date `2015-08-15`. The reporting will now show `25 clicks`. **Example #2**: . I export the first 20 clicks for the product ID `ABC789` for the date `2015-08-15`. The reporting shows `20 clicks`. . I export again for the date `2015-08-15`, but this time the product is no longer in the tracking feed. The reporting still shows `20 clicks` This also means that you can't delete data, only overwrite them. Contact [support@productsup.com](mailto:support@productsup.com) if you want to delete tracking data. # Import products from Pimcore import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Pimcore is an open-source enterprise PHP software platform for product information management (PIM) that lets you manage, aggregate, and distribute any digital product data. Prerequisites [#prerequisites] To use Pimcore as a data source in Productsup, you need: . Your Pimcore account information. . Prepare your data for export from Pimcore to Productsup. . Get the API key to the Pimcore datahub. Add the data source PIMCore Import v1 [#add-the-data-source-pimcore-import-v1] Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *PIMCore Import v1*, select **Add**, give it a name as desired, and then select **Continue**. UUID-eb17f886-3bb3-e319-60e8-50279442dfc4 Enter your Pimcore API data into **API URI** and **API Bearer Token**. UUID-ce321dea-d43a-3e1d-bb51-3406e9c55fa0 In **Description (optional)**, add a description for your data source. It substitutes the data source name on the *Overview Data Sources* page. Select **Save**. To import data from Pimcore, select **Import** in the top-right corner of your site's view. # Import data from MS SharePoint import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Microsoft SharePoint is a cloud-based platform for data storage, collaboration, and file management. To import products from your MS SharePoint account to Productsup, you need to add and set up the data source *Microsoft SharePoint* in Data Sources. This integration lets you import .csv and .xslx files from MS Sharepoint. You may need some technical expertise to set up the Microsoft SharePoint data source. Prerequisites [#prerequisites] To use Microsoft SharePoint as a data source in Productsup, you need to follow the steps: Step 1: Create app registration and save account data for the further data source setup. [#step-1-create-app-registration-and-save-account-data-for-the-further-data-source-setup] Go to [Microsoft Azure portal](https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?redirect_uri=https%3A%2F%2Fportal.azure.com%2Fsignin%2Findex%2F\&response_type=code%20id_token\&scope=https%3A%2F%2Fmanagement.core.windows.net%2F%2Fuser_impersonation%20openid%20email%20profile\&state=OpenIdConnect.AuthenticationProperties%3Dm36YV9IFQ9iyhJSxiDUrAlJzkntJyOg2MSLhJ-9ApYSdsV3TPRl7ofJx0pwIEUstjirWSWHPyBAYVILibjPvBMUdBv0s9f-fqhdf1srNoj-lsKJiOqJ4wfFTxQJTkxQ9TJm_D7AUPzO0-v1zHZVCeKnL6v-Ur3Muw9NvJL0d-_EpJ79dUbL0ytmETYS75fN0XOyLdlFVNbAFY6ty0T0_5Ipu7Plg9-GWklhRToPZc_ZPjzkL7tinUTjSSrH9kcL6Nk3ZBN32nXGcywQgI9KTXFmmPqgQQWResmyUmKvcMhmLKjc5aueJmkDRNgEdUxLc_460TpIO_jSJljPI7BFWJ0Df4cBHeDVe7tCxzjcoKDNP229xbQGP0fQbqbWaFnL_TNW6KAJmMwTBmuN6YVWYQcrRLnMqIZx7cs3YASSzkc2i8m6sEgN4hV-yv4pr1RSEd5jsmNYKW2Afl-HUEqNB4j3zI6d49AoG-zF8RzXYwW0\&response_mode=form_post\&nonce=638653712668796478.MjhkYTBhNDUtYjA5NS00OWU5LThiY2UtYzM4ZTMxMWFhNmY3YTQyZGEzYjQtZmU2ZC00ZTNjLWI5YmMtZjU3OTE4NGEwZDY3\&client_id=c44b4083-3bb0-49c1-b47d-974e53cbdf3c\&site_id=501430\&client-request-id=c19f7491-0bae-46e3-bd50-9099cb22fb28\&x-client-SKU=ID_NET472\&x-client-ver=7.5.0.0\&sso_reload=true). Go to the Entra ID. Go to **App registrations** and create a new registration by taking all the steps in the wizard. Name your registration **Productsup-sharepoint-connector** and decide on the supported accounts. A single-tenant should be enough, but this depends on your organisation. When you created the application, save separately the following details that you will need for the data source setup: * *Application (client) id* for **Client Id** * *Directory (tenant) id* for **Tenant Id**. Go to **API permissions** from the menu to set the permissions: * **User.Read** * **Sites.Selected**. Switch on the **Grant admin consent for \[Company]**. Go to **Certificates & secrets** from the menu and generate a new client secret. Give it a description and set expiry date. Save it as your **Client secret** for further data source setup. Step 2: Give the application access to the specific sites [#step-2-give-the-application-access-to-the-specific-sites] To give an enterprise application or app registration access to a specific site or multiple sites in SharePoint, you need to execute a *SharePoint PnP PowerShell* script. You can use the script provided below as a starting point and ask your internal IT team to adjust it for you. A CSV file mentioned in the script should contain the following: * A list of MS SharePoint site URLs. * Your admin account User Principal Name. * The app ID or AppDisplayName. You need the Administrator rights of your MS SharePoint account to execute the script. ``` # Connecting to the SPO Service and importing the SPO PNP Module Connect-SPOService -URL Import-Module PnP.PowerShell ########################################################################################################################## # # # The following part gives the respective Enterprise Application their neccessary rights. # # It does so by using the .csv file from the previous part as input for sites to give the respective rights for. # # # ########################################################################################################################## $SPSitelist = $ADMAccount = $AppID = $Displayname = foreach ($SPSite in $SPSitelist) { write-output $SPSite Set-SPOUser -site $SPSite -LoginName $ADMAccount -IsSiteCollectionAdmin $True -Verbose Connect-PnPOnline [yourtenant].sharepoint.com -Interactive -ClientId Grant-PnPAzureADAppSitePermission -AppId $AppID -DisplayName $Displayname -Site $SPSite -Permissions Write -Verbose Set-SPOUser -site $SPSite -LoginName $ADMAccount -IsSiteCollectionAdmin $False -Verbose } ``` You can also toggle between Write and Read permission by changing the respective permissions parameter in the foreach loop. If you need help with providing access, you can contact [support@productsup.com](mailto:support@productsup.com). Add the data source Microsoft SharePoint [#add-the-data-source-microsoft-sharepoint] Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Microsoft SharePoint*, select **Add**, give it a name as desired, and then select **Continue**. UUID-d9871967-bb20-98f2-5173-172a29622563 Enter your Microsoft SharePoint data from the [Prerequisites](#section-idm353459546062478) into the following fields: * In **Client ID**, enter your MS SharePoint client ID. * In **Client Secret**, enter our MS SharePoint client secret's value. For an already set up data source.If, after some time, you start experiencing the import fail, it can mean that your client secret has expired, and you must update it: Generate a new client secret in your MS SharePoint account. Enter the new client secret's value in the **Client Secret** field. Don't use the Secret ID. Leave **Client ID** unchanged. * In **Tenant ID**, enter your MS SharePoint tenant ID. * In **File Share Link**, enter the link to the file you want to share. * In **File Type**, select the type of the shared file: *csv* or *xlsx*. Check if access to the file in MS SharePoint isn't restricted. UUID-30148ffa-47b1-e9ba-76e2-1320724e7ef0 In **Description (optional)**, add a description for your data source. It substitutes the data source name on the *Overview Data Sources* page. Select **Save** and select **Import** at the top of the page. # Import products from VTEX import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] VTEX is a B2B and B2C e-commerce platform that lets you manage multiple sales channels, orders, and inventory. To import products from your VTEX to Productsup, you need to add and set up the data source *VTEX - API Import with Authentication v1* in Data Sources. You can use the data source **VTEX - API Import with Authentication v1** only if your product catalog contains less than 200,000 SKUs, which is a VTEX limitation. If your catalog is above 200,000 SKUs, reach out to your Customer Success Manager. Prerequisites [#prerequisites] To use VTEX as a data source in Productsup, you need: . Your VTEX account information. Add the data source VTEX - API Import with Authentication v1 [#add-the-data-source-vtex---api-import-with-authentication-v1] Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *VTEX - API Import with Authentication v1*, select **Add**, give it a name as desired, and then select **Continue**. UUID-59f2996d-8b5f-36b4-aef5-739651db76f8 Enter your VTEX account data into the following fields: * In **Account Name**, enter your VTEX account name. * In **Environment**, enter your VTEX environment. You can select from two (2) options: * *vtexcommercestable* is the production version. * *vtexcommercebeta* is the sandbox version of VTEX. * In **App Key**, enter the application key generated in your VTEX Account Management. * In **App Token**, enter the application token generated in your VTEX Account Management. In **Description (optional)**, add a description for your data source. It substitutes the data source name on the *Overview Data Sources* page. Leave the **Whitelist Columns** field empty to import all attributes. To import only specific attributes, add their names in this field. Enter each attribute from a new line. Select **Save** and select **Import** at the top of the page.. UUID-336164e7-e729-c3f4-ecb9-886306099018 # Import orders from eBay Setup [#setup] . In the *site*, choose **Data Sources** from the main menu, then select **ADD DATA SOURCE**. Next, add *eBay Orders*. . To import your orders from eBay, you must first create an authentication token. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems). . Once you’ve created an authentication token, select it in **Authentication** to add the eBay Orders data source. . Choose *Production* or *Sandbox* in **Environment**. . Next, enter the period, in days, you want to import the orders for in **Orders From Period (in days)**. . You can optionally enter a custom description for the data source in **Description (optional)**. . Select **Save** and the next manual or scheduled import pulls data to your site. UUID-f2ae4bf3-5066-46eb-a58b-07b9b7d4328b # Import your files hosted by cloud services import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Connect to external cloud service systems such as Amazon S3, Google Cloud Storage, or Microsoft Azure to import your hosted product files. See [Import from Google Sheets](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-from-google-sheets) to learn how to import from Google Sheets. You can find the cloud services that link to your shopping platforms in **Data Sources** by selecting **ADD DATA SOURCE** and choosing the **Cloud Services** tab. UUID-34ec651f-5a10-76a8-8deb-aafb45b3ddc2 Import files from Amazon S3 [#import-files-from-amazon-s3] To import files hosted by Amazon S3, take the following steps: Go to **Data Sources** from the site's main menu and select **ADD DATA SOURCE**. Then, choose *Amazon S3* and select **Add**. UUID-0fc1f9fe-ae0a-b9ef-acc1-14fd11033b86 Give your data source a custom name if desired, then select **Continue**. The custom name replaces the data source name on the *Data Sources Overview* page. Enter your Amazon AWS Access Key ID credentials in **API Key** and **API Secret**. UUID-ac96e7ff-be46-e934-db53-3701e4c63482 Enter the bucket name in **Bucket**. For example: * `testexamplebucket1` * `test-samples-may-2021` * `cloud-hosted-items` For more information on how to name a bucket, see [Bucket naming rules](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html). In **Filename**, enter the filename with the extension and path. In **Region**, select the relevant S3 location from the drop-down menu. Optionally, enter a custom name in **Description (optional)**. Select **Save all settings**. See [Import dynamic URLs](/docs/help-center/import-data-feeds/import-your-data-into-productsup-advanced-settings/import-dynamic-urls) to learn how to set up an automatic import. Import Parquet files from Amazon S3 [#import-parquet-files-from-amazon-s3] Apache Parquet is an open-source, columnar file format that lets you efficiently store and retrieve data. To import files in the Parquet format hosted by Amazon S3, take the following steps: Go to **Data Sources** from the site's main menu and select **ADD DATA SOURCE**. Then, choose *Amazon S3 Parquet* and select **Add**. UUID-952d70cf-e105-d732-7f1d-69af4153f80c Give your data source a custom name if desired, then select **Continue**. The custom name replaces the data source name on the *Data Sources Overview* page. In **Filename**, enter the filename with the extension and path. Enter your Amazon AWS Access Key ID and AWS Secret access key. UUID-28c64661-d2d9-bb8d-9065-559f00d36b2e In **AWS Region**, enter the S3 location. In **AWS Bucket**, enter the bucket name, for example: * `testexamplebucket1` * `test-samples-may-2021` * `cloud-hosted-items` For more information on how to name a bucket, see [Bucket naming rules](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucketnamingrules.html). Optionally, enter a custom name in **Description (optional)**. Select **Save**. Import files from Google Cloud Storage [#import-files-from-google-cloud-storage] To import files hosted by Google Cloud Storage, perform the following steps: Go to **Data Sources** from the site's main menu and select **ADD DATA SOURCE**. Then choose *Google Cloud Storage* and select **Add**. UUID-cfd57385-93a5-9a32-5262-6fe1257653ca Give your data source a custom name if desired, then select **Continue**. The custom name replaces the data source name on the main *Data Sources* page. UUID-50426dc6-14e4-f138-b803-b9b07a0a99ca In **Service Account Key**, enter your service account key in JSON format. Your plain account key won't work. Here is a sample service account key in JSON that the data source expects in this field: ``` {   "type": "service_account",   "project_id": "PROJECT_ID_111",   "private_key_id": "PRIVATE_KEY_ID_111",   "private_key": "-----BEGIN PRIVATE KEY-----\n000a00aabb0a0bb0000a000000aaabbb000a0bb\n-----END PRIVATE KEY-----\n",   "client_email": "SERVICE_ACCOUNT_EMAIL",   "client_id": "CLIENT_ID_111",   "auth_uri": "https://accounts.google.com/o/oauth2/auth",   "token_uri": "https://accounts.google.com/o/oauth2/token",   "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",   "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL" } ``` Enter the target bucket name in **Bucket**. For example: * `my-test-samples` * `02333se-9e7b-4418-a5ba-yg2970f0b77` * `test.sample.com` (`sample.com` requires verification of ownership) For more information on how to name a bucket, see [Bucket naming guidelines](https://cloud.google.com/storage/docs/naming-buckets). In **Object**, enter the item filename with or without the extension. For example: UUID-8c10c64a-df54-751f-efdc-03821b52d532 To learn more about the object name requirements, see [Object naming guidelines](https://cloud.google.com/storage/docs/naming-objects). Google uses flat namespace storage, meaning there are no folders. Google Cloud Service Bucket and Object names often resemble a filepath-like convention, for example: `your-bucket-name/leaf_folder1/leaf_folder2/filename.txt`. That string consists of the Bucket name, a forward slash character `/`, and the Object name. Enter the individual names in the **Bucket** and **Object** fields: * The first item in that string is the Bucket name: `your-bucket-name` * The remainder is the Object name: `leaf_folder1/leaf_folder2/filename.txt` * The **Bucket** field must not contain forward slash characters `/`. * Omit the forward slash character `/` between the Bucket name and Object name. Google Cloud Storage data source configuration showing Bucket and Object fields Optionally, enter a custom name in **Description (optional)**. Select **Save all settings**. If you merge your main data feed with additional data information via Google Cloud Storage, the import process and merging can take a long time for a large data feed. To speed this process up, you can set up a site tag that contains the information found as an object in the bucket. See [Edit site settings](/docs/help-center/get-started/manage-your-organization-projects-and-sites/edit-site-settings) to learn how to add a site tag. This setting enables the site to look only for relevant information in the Google Cloud Storage file. For example, you want your site `US_tablet-case` to import only the tablet cases from your Google Cloud file: In the site **Settings**, add a tag for your site such as `product_type: tablet-case`. In the Google Cloud Storage setup, in the field **Object**, enter the object name in the bucket such as `tablet-case-product_info.csv`. The site now only imports and merges the relevant information. If you want to set up multiple sites with a changing set of `product_types` and product information for each site, you can automate this as the data source. You can also enable support for Twig and site tag variables by default. The Productsup Platform API lets you set up the site tags automatically and with Twig pulls in the correct data based on the site tag from Google Cloud Storage. Import files from Microsoft Azure Blob Storage [#import-files-from-microsoft-azure-blob-storage] To import files hosted by Microsoft Azure Blob Storage, perform the following steps: Go to **Data Sources** from the site's main menu and select **ADD DATA SOURCE**. Then choose *Microsoft Azure Blob Storage* and select **Add**. UUID-547d2bbe-6a0d-ec30-f8d9-01e2b99ee335 Give your data source a custom name if desired, then select **Continue**. The custom name replaces the data source name on the *Data Sources overview* page. In **Authentication Type**, select *Access Key* or *SAS Token*: * If you selected *Access Key*, enter your Microsoft Azure Blob Storage account information in **Account Name** and **Access Key**. * If you selected *SAS Token*, enter your shared access signature in **SAS Token** and **SAS Blob Endpoint**. UUID-f7ece93f-3f2f-5765-8d5f-4bfe3cba6392 In **Container**, enter the full URL to the hosted file. Optionally, change the data source name in **Description (optional)**. Scroll down and select **Save all settings**. # Import your data from Google Merchant Center import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Google Merchant Center is a digital platform where retailers upload their product data to make it available in Google Shopping and other services. If you already have a data feed in Google Merchant Center, Productsup lets you import it directly from there and create data feeds for other export channels. Prerequisite [#prerequisite] To use the Google Merchant Center data source, you must set up authentication to Google Merchant Center. See [Add OAuth authentication to external systems](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-oauth-authentication-to-external-systems). Import your product feed from Google Merchant Center [#import-your-product-feed-from-google-merchant-center] Ensure the sites importing from Google Merchant Center don't export the data back to prevent data looping. To import product feed from Google Merchant Center in Productsup, take the following steps: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Google Merchant Center* and select **Add**. UUID-f9a7ebe2-7159-3be2-2688-6870a147c3f0 (Optional) Give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. Add the Merchant ID Into the **Merchant ID (with data)** field. If you have a multi-client Merchant Center account, enter the ID of the relevant sub-account. Select your Google Merchant Center account in **Authentication to use**. In **Requested fields to partial import**, you can add only specific attributes you want to import. You can add multiple attributes by separating them with the comma (`,`). For example, you can add frequently updated attributes such as `sales price` and `availability`. See the list of attribute in Google's [products.list](https://developers.google.com/shopping-content/guides/products/products-api#productslist). (Optional) Enter or edit your data source name in **Description**. Select **Save**. UUID-805fbce3-f6d9-7522-427a-1aa06573f3c9 Import product statuses from Google Merchant Center [#import-product-statuses-from-google-merchant-center] Apart from importing the data feed from the Google Merchant Center, you can import statuses from this platform as an additional data source for your feed. This information helps improve your product data feed. See Google's [Product status definitions](https://support.google.com/merchants/answer/160491?hl=en). To import product feed from Google Merchant Center in Productsup, take the following steps: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Google Merchant Center Statuses* and select **Add**. UUID-b0398fd4-e4ad-2d0e-c3b1-5ea2e034f60c (Optional) Give your data source a custom name. This custom name replaces the name of the data source on the *Data Sources Overview* page. Then, select **Continue**. Add the Merchant ID Into the **Merchant ID (with data)** field. If you have a multi-client Merchant Center account, enter the ID of the relevant sub-account. Select your Google Merchant Center account in **Authentication to use**. (Optional) Enter or edit your data source name in **Description**. Select **Save**. The *Google Merchant Center Statuses* data source appears in the **Main Data Sources** list. To convert the feed into an additional data feed, select the cogwheel icon (**⚙**). In the **Content Mode** panel on the data source setup page, select **Additional Data Feed**. Define the columns you want to use as a connection between this data source and your main feed. UUID-e718e6a7-d766-6fed-3016-0e5a8af971d0 Select **Save**. # Import orders from Mirakl import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Mirakl is a SaaS e-commerce software company headquartered in Paris. They provide online marketplace software in B2B settings. You can import your order data from your Mirakl account to Productsup with the data source Mirakl Order Import. Set up order data import from Mirakl [#set-up-order-data-import-from-mirakl] Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *Mirakl Order Import* and select **Add**. Give it a custom name as desired and select **Continue**. UUID-0f026dae-7f34-90cf-5281-178c231bd01c Enter the host and API key from your Mirakl account in the **Host** and **API key**. In **Shop IDs**, enter the ID of the shops you want to import orders from. If you have more than one shop, create a separate data source for each Shop ID. Select the period you want to import the orders for in **Orders Created After**. Turn on **Collect Products** if you need an order per item. Optionally, enter a custom description for the data source in **Description (optional)**. The new name of the data source will change in the Data Sources overview page. Select **Save**. UUID-e193142b-fa89-3d9f-5dc7-3a64306780fa Select **Run** or **Import** in the top-right corner of your view to let the site import your order data from Mirakl. If the order data that Productsup imports from Mirakl includes Personally Identifiable Information (PII), such as clients' surnames, addresses, phone numbers, etc., the platform obscures the values featuring PII and displays them in Dataflow and Data View with asterisks: UUID-017e1582-1f74-26e7-6ee4-30c0121ea051 When you export order data with PII to your desired system, Productsup sends values without obscuring them. The PII order data is fully visible and readable in your target system. # Import products from SAP Commerce Cloud and SAP Commerce import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] To manage product data in SAP, you can use SAP Commerce Cloud or SAP Commerce (formerly known as Hybris). * SAP Commerce Cloud is a cloud-based e-commerce platform that helps large businesses build connected, insightful, and adaptive commerce experiences. * SAP Commerce is an on-premises commerce solution with product information management (PIM) functionality. You can import product data from your SAP Commerce Cloud or SAP Commerce solution to Productsup to optimize and send it to your desired export channels. The integration between the two systems uses the Productsup Connector installed in SAP and the Productsup Stream API. The new Productsup Connector (version 2.0.0 and up) is compatible with SAP Commerce Cloud and SAP Commerce versions 2105, 2205, and 2211, as well as all subsequent versions. If you are using an older version of SAP or an older Productsup Connector version, you may need to migrate to the newer versions. The only possible function of the Productsup Connector is to send selected product data from your SAP Commerce Cloud or SAP Commerce solution to your Productsup site. It is impossible to use the Productsup Connector in reverse or use it in any way to gain access to your SAP solution. The process of setting up product data import from SAP Commerce Cloud or SAP Commerce to Productsup is as follows: . Add the Productsup Connector to your SAP solution to let it push product data to the Productsup Stream API. . Create a stream in the Productsup Stream API. . Add the Productsup Stream API data source in your Productsup site. When you set up the integration between your SAP solution and your Productsup site, you may also need instructions on performing your first data export from SAP to Productsup or adding new product attributes in SAP. You can find these instructions at the bottom of this document. SAP PCM (oData) data source [#sap-pcm-odata-data-source] Besides the Productsup connector option, you can use the *SAP PCM (oData)* data source to import your data into Productsup from SAP. However, this integration option is no longer the preferred way of importing your product data from SAP into Productsup. We recommend using the Productsup Connector unless there is a specific reason why it doesn't work for you. See [Use the SAP PCM (oData) data source](#section-idm4577975492676833980120765638) to set up the *SAP PCM (oData)* data source. Contact [support@productsup.com](mailto:support@productsup.com) if you need assistance. Prerequisites [#prerequisites] The Productsup Help Center doesn't bear any responsibility and accountability for the accuracy and relevance of the processes, features, UI elements, and other information mentioned in the following instructions about third-party websites and platforms. The following instructions aim to help the readers of the Productsup Help Center perform complex activities outside the Productsup platform while the official technical documentation of the website or platform in question doesn't provide relevant information on the needed activities. To import your data from SAP Commerce Cloud or SAP Commerce into your Productsup site, you first need to: . Reach out to your Customer Success Manager or contact [support@productsup.com](mailto:support@productsup.com) to get a Stream API access token to push your data from SAP to Productsup through the Productsup Stream API. . Download a *.zip* file with the Productsup Connector from this repository: [https://github.com/productsupcom/nemeses-sap-hybris-releases](https://github.com/productsupcom/nemeses-sap-hybris-releases). You can simply choose the latest version on the list if your SAP version is compatible with it. . This prerequisite is relevant for SAP Commerce Cloud only. You can skip this if you are setting up product data import from SAP Commerce. Create a separate git-repository for the Productsup Connector code: Create a private repository for the Productsup Connector in your `git` version control system. SAP doesn't allow the use of public repositories. Create a branch in your repository. Create a `core-customize` folder in the branch and extract the contents of the *.zip* file into this folder. Add a `manifest.json` file to the folder or modify an alternative of that file: * If your SAP solution doesn't use any other extensions, you can copy the `manifest.json` file from [this repository](https://github.com/productsupcom/nemeses-sap-hybris-cloud/) and add it to your private repository. You can also use this public repository as an example of the needed folder structure. * If your SAP solution already uses other extensions, add the following values to the element `"extensions": []` in the file that your SAP solution is currently using to pick up the code of the needed extensions: ``` “productdataexport”, “productdataexportaccelerator”, “productdataexportacceleratorbackoffice”, “productdataexportbackoffice” ``` The structure of the `core-customize` folder should thus be as follows: ``` ¦ +---core-customize ¦ manifest.json ¦ +---productdataexport +---productdataexportaccelerator +---productdataexportacceleratorbackoffice +---productdataexportbackoffice ``` Add the extension `productdataexportmigration` to the folder and the `manifest.json` file (or its alternative) if you are migrating from an older version of the Productsup Connector. Use the Productsup Connector to import data from SAP [#use-the-productsup-connector-to-import-data-from-sap] Add the Productsup Connector to your SAP solution [#add-the-productsup-connector-to-your-sap-solution] This section describes what you need to do in SAP Commerce Cloud or SAP Commerce to add the Productsup Connector. SAP Commerce Cloud [#sap-commerce-cloud] Create and deploy a build [#create-and-deploy-a-build] To start setting up your SAP Commerce Cloud solution and add the Productsup Connector to it, do the following: Go to the homepage of your SAP Commerce Cloud solution. UUID-c27230a9-77c1-7ebd-871c-a4c4b748f0dd In *Subscription Resources*, go to **Repository** and add the git-repository you created as shown in [Prerequisites](#section-idm4550359597003233917986806942).There are two (2) options to add a repository. See [Connecting a Code Repository Using SSH](https://help.sap.com/docs/SAP_COMMERCE_CLOUD_PUBLIC_CLOUD/1be46286b36a4aa48205be5a96240672/329fa9bf3fd94c7989f1a90648e9038d.html) or [Connecting a Code Repository Using HTTPS](https://help.sap.com/docs/SAP_COMMERCE_CLOUD_PUBLIC_CLOUD/1be46286b36a4aa48205be5a96240672/66532cf6c6894dfb944255050ac325cc.html) based on your desired protocol type. Go to **Builds** in *Deployment* and select **Create**. Enter a build name in **Name** and add the name of your repository branch in **Git Branch or Tag**. Select **Save**. When your build finishes running, it displays the status `Success` in the column *Last Build*. When you see this status, choose your build and then select **Deploy to Environment** in the top-right corner of your view. In **Target Environment**, select your needed environment. Then, choose a suitable option in **Deployment Mode**.In **Platform Update Mode**, select the following: * If you are adding the Productsup Connector for the first time, choose *Initialize database*. * If your SAP Commerce Cloud solution has already used an older version of the Productsup Connector, choose *Migrate data*. Select **Deploy** in the top-right corner of your view. The deployment process may take a long time to finish. Set up the export jobs [#set-up-the-export-jobs] When you successfully deploy your build to the needed environment, you can set up your product data export to the Productsup Stream API: Go to your Backoffice endpoint (SAP Administration Cockpit) and scroll down in the main navigation menu on the left to find the **Productsup** extension. UUID-a6b3adaa-152c-72f6-e40c-f23ecc17bc1e Go to **Export Connection** to edit your connection to the Productsup Stream API. Choose **AccessTokenRestApiExportConnection** and add the API access token you requested from Productsup in **Access Token**. Select **Save**.The hostname should be `stream-api.productsup.com`, and the port should be `443`. UUID-39b0078c-6d1d-a879-81b5-d7a57c74c1dc Go to **Export Configuration** to find your preconfigured product attribute sets. UUID-929e27e5-9aa3-bc33-1905-fee96f16eb7e There are two (2) export configurations available: * `ideal` - This attribute set can include all the product attributes that you want to send to Productsup. * `minimal` - This attribute set can include only a limited set of product attributes. You can use it for more frequent exports of certain attribute values to Productsup. You can select each export configuration and add or remove attributes in **Assigned Field Configurations** as needed. Select **API Export CronJob** and open each job on the list to review and adjust its settings as needed. For example, you can schedule the jobs or choose the needed export configurations: * Select *ideal* in **Export Configuration** to let the job send all the desired attributes to Productsup. * Select *minimal* in **Export Configuration** to let the job send a small set of attributes. If you want to send all your product data to Productsup once a week and only some attributes, such as `price` and `stock`, every day, you can select the `ideal` export configuration in the job **ProductsupApiExport** and choose `minimal` in the job **ProductsupApiDeltaExport**. Then, go to **Export Configuration** and make sure `minimal` only contains the attributes `price` and `stock`.If you schedule these jobs to run weekly and daily, respectively, you can achieve the goal of sending different sets of attributes at different intervals. The setup in your SAP solution is mostly over. See [Create a stream with the Productsup Stream API](#section-idm4550359703203233918005810732) to proceed. SAP Commerce [#sap-commerce] To add the Productsup Connector to your SAP Commerce solution, do the following: Unpack the *.zip* file you downloaded as stated in [Prerequisites](#section-idm4550359597003233917986806942) and move the unpacked contents to the same local folder where you have the extensions of your SAP Commerce platform. For example, its location can be *hybris/bin*. Go to *hybris/config*, open the file `localextensions.xml`, and add the following to the `` tag: ``` ``` Add another extension line at the end of this snippet if you are migrating from an older version of the Productsup Connector. ``` ``` Run the command `ant clean all` in the console. Remove cached backoffice files by deleting the relevant backoffice folder: *hybris/data/backoffice*. Run the command `ant updatesystem`. Start your server. If your SAP Commerce solution hasn't used an older version of the Productsup Connector before, continue following the steps in this list. If your SAP Commerce solution already used an older version of the Productsup Connector, proceed with the steps in [Migrate from an older version of the Productsup Connector](#section-idm4583707600624033930453331251). Log in to the Hybris administration console. Remove the following outdated types: ``` Extension: productdataexportmigration ComposedType FTPExportConnection ComposedType FTPSExportConnection ComposedType SFTPExportConnection ``` Log in to the Backoffice endpoint of your SAP Commerce solution and press the *F4* key to open the admin view. Select the menu icon in the top-right corner of your view, choose **Reset Everything**, and select **Yes** to confirm. Press the *F4* key again to return to the Backoffice homepage and continue with the setup starting with [see the relevant section](#N1696591333011) in [Set up the export jobs](#section-idm4647455340472033930131042731).. Migrate from an older version of the Productsup Connector [#migrate-from-an-older-version-of-the-productsup-connector] After adding the needed extensions and running commands, as shown above, do the following to migrate to a newer version of the Productsup Connector: Go to the Backoffice homepage of your SAP Commerce solution and select **API Export CronJob**. Copy the configurations from the jobs starting with *CSVExportCronJob* into the settings of the jobs starting with *ProductsUpApiExportCronJob*. Delete the jobs where the names start with *CSVExportCronJob*. Stop your server. Go to the `localextensions.xml` file and remove the line: ``` ``` Run the command `ant clean all`. Remove cached backoffice files by deleting the relevant backoffice folder: *hybris/data/backoffice*. Run the command `ant updatesystem`. Remove the cached backoffice files again. Start your server. Log in to the Hybris administration console. Remove the following outdated types: ``` Extension: productdataexportmigration ComposedType FTPExportConnection ComposedType FTPSExportConnection ComposedType SFTPExportConnection ``` Execute IMPEX (hAC): ``` REMOVE CSVExportProtocol;code[unique=true] ;FTP; ;FTPS; ;SFTP; ``` Log in to the Backoffice endpoint of your SAP Commerce solution and press the *F4* key to open the admin view. Select the menu icon in the top-right corner of your view, choose **Reset Everything**, and select **Yes** to confirm. Press the *F4* key again to return to the Backoffice homepage and continue with the setup starting with [see the relevant section](#N1696591333011) in [Set up the export jobs](#section-idm4647455340472033930131042731).. Create a stream with the Productsup Stream API [#create-a-stream-with-the-productsup-stream-api] The Productsup Connector installed in your SAP Commerce Cloud or SAP Commerce solution uses the Productsup Stream API to push product data from SAP to your Productsup site. To use the Stream API, you need to create a chunked stream. To create a chunked stream, run an API query similar to this: ``` curl --location --request POST 'https://stream-api.productsup.com/streams' \ --header 'Content-Type: application/vnd.api+json' \ --header 'Accept: application/vnd.api+json' \ --data-raw '{ "data": { "type": "stream", "attributes": { "name": "Stream name example", "type": "chunked" } } }' ``` Make sure to copy the stream ID you receive in the API response and paste it into the settings of both export jobs in SAP. Go back to [see the relevant section](#N1696504284838) in the Backoffice endpoint of your SAP solution to add the stream ID in the *API Configuration* section. UUID-509799fb-7582-e7ef-6d6b-bec3af657f55 Later, you will also need to use your stream name and ID to choose your stream in the setup of a data source in your Productsup site. See [Stream creation](https://api-docs.productsup.io/#stream-api-stream-management-stream-creation) for more information. See [Add the Productsup Stream API data source to your site](#section-idm4637569251195233918006095796) to proceed. Add the Productsup Stream API data source to your site [#add-the-productsup-stream-api-data-source-to-your-site] To let your Productsup site import product data from your newly created stream, you need to add the Productsup Stream API data source to your site. See [Import data via the Productsup Stream API](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-from-apis#section-idm4582691268902433399454193933) for the setup steps. In [Import from APIs](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-from-apis#step-idm15009918270912), choose the name and ID of the stream as stated in your API query and response. Send data from SAP into Productsup for the first time [#send-data-from-sap-into-productsup-for-the-first-time] Once you finish the Stream API data source setup, the integration between your SAP solution and Productsup should be fully functional. To import your full product catalog from SAP into Productsup, do the following: Go to the Backoffice endpoint of your SAP solution. Open the **Productsup** extension in the main navigation menu on the left and select **API Export CronJob**. To send your full product catalog to Productsup, select the job **ProductsupApiExport** and choose the fast-forward icon. UUID-82519b79-1954-beef-7b9a-476d9a06bf77 Depending on the size of your product catalog, this process can take a long time. Go to your Productsup site and select **Import** in the top-right corner of your view to let the site import product data from your stream. Add and send new product attributes [#add-and-send-new-product-attributes] After setting up your product data import from SAP Commerce Cloud or SAP Commerce into Productsup, you may need to add new attributes to your products in SAP and send them to your Productsup site. You can do so by following these steps: On the Backoffice homepage of your SAP solution, scroll down in the main navigation menu on the left to find the **Productsup** extension. Select **Field Configuration** and choose the arrow next to the plus icon to select the needed attribute type. Then, add a new attribute and set it up. UUID-8cb67f12-fac4-f028-5c2e-09cbb076050b Once you add and set up all the needed attributes, go to **Export Configuration** and add the new attributes to the `ideal` and `minimal` configurations as needed. Proceed with [see the relevant section](#N1696517655381) to export the new attributes to Productsup. Use the SAP PCM (oData) data source [#use-the-sap-pcm-odata-data-source] We recommend using the Productsup Connector instead of the *SAP PCM (oData)* data source unless there is a specific reason why the connector doesn't work for you. See [Use the Productsup Connector to import data from SAP](#section-idm4553580040937633980119055235) for the setup information. Open Data Protocol (OData) is an open protocol for creating and consuming queryable and interoperable REST APIs in a standard way. You can set up the *SAP PCM (oData)* data source in Productsup to import your data from SAP into Productsup. But use it only if you import a smaller number of products. Importing several thousands of products may take a long time as the OData connector doesn't work with delta files, and the platform imports all products every time you run an import. Productsup supports the following versions of SAP PCM (OData): * 19.05 * 20.05 To use classification in PCM, you must have version 20.05. Set up OData in the SAP PCM backoffice [#set-up-odata-in-the-sap-pcm-backoffice] To import data from the SAP PCM into Productsup with the help of the *SAP PCM (oData)* data source, you need to configure the integration in the SAP backoffice and set up a data source in Productsup. Create a user in the SAP PCM as follows: * Select the status **Employee** for the user. * Add the user to **\[employeegroup]**. * Select the password type **Plain** and set a password. * Give the user permission to access the OData web services and relevant catalogs. Productsup uses the base64 encoding to generate an authentication token using the *Employee User* username and password. Create three (3) mandatory OData Integration Objects: The entered values are case-sensitive. 1. Catalog Version – This Object lets Productsup read catalogs from the PCM system. You can select PCM catalogs for data import and export.Create the Catalog Version Integration Object by entering the following values: * **Name**: `catalogVersion` * **Root Type**: `CatalogVersion` * **Integration Type**: `INBOUND` 2. Language – This Object lets Productsup work with different languages. Productup recommends you have only one language per Productsup site. You can decide between two (2) options: * Create individual Productsup sites for each language to import data from PCM into Productsup. * Create separate Productsup exports for each language to export from Productsup into PCM. Create the Language Integration Object by entering the following values: * **Name**: `language` * **Root Type**: `Language` * **Integration Type**: `INBOUND` 3. Endpoint – This Object is a custom endpoint, which lets Productsup read the available Integration Objects set up in PCM oData. You can decide which configuration or data model to use to populate the data.Create the Endpoint Integration Object by entering the following values: * **Name**: `integrationObject` * **Root Type**: `IntegrationObject` * **Integration Type**: `INBOUND` Create an optional Integration Object called Productsup.This Object lets you define which data attributes Productsup can edit. You can set up only a few attributes, such as description, title, or code. To set up the Productsup Object: Create the Productsup Integration Object by entering the following values: * **Name**: `Productsup` * **Root Type**: `Product` * **Integration Type**: `INBOUND` Define the data attributes you want to export. Contact [support@productsup.com](mailto:support@productsup.com) if you need assistance with integration. See [Creating and Viewing a Product Integration Object](https://help.sap.com/viewer/bad9b0b66bac476f8a4a5c4a08e4ab6b/LATEST/en-US/9d622ee2ec184133a2b361be2d4af9f1.html) for more information. Set up OData in Productsup [#set-up-odata-in-productsup] In the Productsup platform, take the following steps to import data from your SAP PCM: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. Search for *SAP PCM (oData)* and select **Add**. Give it a custom name as desired and select **Continue**. UUID-ea976f56-ba34-4acd-d5fa-dfd506939ce6 Enter the host link URL in **Host** and your PCM credentials in **Authentication Token**. You must encode your `username` and `password` credentials using the following format: * `authenticationToken = base64_encode(username:password)` If you have IP restrictions in your SAP system, allowlist Productsup's IP ranges. See [Network information](/docs/help-center/get-started/productsup-fundamentals/network-information). If you need help, reach out to your Customer Success Manager or contact [support@productsup.com](mailto:support@productsup.com). Select **Check Credentials** to validate your token. UUID-35ff70df-1d1b-43d1-d8e5-6743bf19a38b Once SAP validates your credentials, you must configure extra settings to continue the data source setup: Select your desired catalog version from the **Catalog Versions** drop-down list. Select the **Type Classes** and **Languages** you wish to import from your SAP system and select **Save**. Enter the desired level of **Attribute Nesting Threshold** to limit the saved product attribute records for product variations. Level `1` is the lowest. The platform summarizes your nested values as JSON strings if your attribute records exceed the set threshold. In **Description (optional)**, you can customize the data source name, which appears in your data source list. The customized description is the same name you entered in [see the relevant section](#N1709912070694). UUID-675a84d3-ac40-98e0-5c7f-920be6ffc3aa Select **Save** Select **Import** in the top-right corner of the page. The data from PCM appears at the import stage in Data View and Dataflow in Productsup. # Import your data into Productsup - Advanced Settings import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] This section guides you through the advanced technicalities of setting up your data sources in Productsup. While setting up a data source in Data Sources, you can use the Advanced Settings tab to modify your import data during the import process, add labels to your data sources, enable or disable parallel downloads, or delete data sources. Such data source options as Feed URL have five (5) settings options in the Advanced Settings tab. Jump into the necessary section description with the following links: * [Labels section](#section-idm4635028215843232976412777701) * [Options section](#section-idm463502825692803297641337697) * [I/O Settings section](#section-idm4598999204446432976425511239) * [Parallel downloads section](#section-idm4561994567113633226977967384) * [Delete this Import section](#section-idm462364827566563297642571678) Most other data source options, including Google Sheets, Productsup Platform API, and Google Merchant Center, have four (4) settings options in the Advanced Settings tab: * [Labels section](#section-idm4635028215843232976412777701) * [Options section](#section-idm463502825692803297641337697) * [Parallel downloads section](#section-idm4561994567113633226977967384) * [Delete this Import section](#section-idm462364827566563297642571678) Locate the Advanced Settings tab [#locate-the-advanced-settings-tab] To access the Advanced Settings tab on the data source setup page: Go to **Data Sources** from your site's main menu. Select the cogwheel icon (**⚙**) next to a chosen data source. Select **Advanced Settings**. UUID-479c8d8b-1efd-eb76-b3ba-0ad072610271 Set up data sources using Advanced Settings [#set-up-data-sources-using-advanced-settings] Labels section [#labels-section] To distinguish between different data sources better, you may want to add labels to your data sources. To add a label to a data source: Select **Labels** in the **Advanced Settings** tab. Give your label a name in the input field titled **Add one or more labels separated by a comma (,)**. To add multiple labels to a data source, separate them with a comma (**,**). Select **Save**. You can see your labels in the **Labels** column of the chosen data source in Data Sources. UUID-82873fc2-24f7-5bf9-bee5-3321cc0ebcf7 Options section [#options-section] To access a list of additional settings you can apply to a data source, you can use the Options section in the Advanced Settings tab. UUID-6d31f46f-40a3-134c-f1ee-d9337daf68ab Select **Options** in the **Advanced Settings** tab. To activate a desired data source setting, check the box next to it and select **Save options**: 1. **Don't notify if data didn't change** - This setting only applies to the option called **Number of Imports without a change in Data Sources** that you can set up in Monitor. Checking this box deactivates notifications about imports from the chosen data source with no change in the imported data. A data source with turned-off notifications has a crossed-out bell icon in Data Sources. UUID-f2d91993-f130-1b4c-317f-cc2c7d0273a6 2. **Website Crawler: Do not remove javascript from body** - This setting applies to the Website Crawler data source option. By default, Productsup removes JavaScript from the data it gathers while crawling a website. Checking this box disables removing JavaScript from the collected data in case the structure of the crawled website requires it. See [Import web data with Website Crawler](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-web-data-with-website-crawler) for more information. 3. **Pause Datasource** - Checking this box pauses your data source and stops any further imports from it. This is especially helpful when searching for the causes of import errors in case of faulty data sources. Alternatively, you can pause a data source by selecting the pause icon in the **State** column of the chosen data source in Data Sources. UUID-4e16985e-bdf9-fa2f-9cb6-80cb922b23e5 4. **Force Active FTP mode** - This setting only applies to data sources requiring an FTP connection. By default, Productsup uses the passive mode of connecting to an FTP server. Checking this option switches the mode to active, meaning that the FTP server should assign a port for Productsup to connect to. 5. **Allow this datasource to have no products** - If you need your site to have a data source that is sometimes empty and has no data to import into Productsup, checking this box allows the data source to be empty, so the platform doesn't display its imports as failed. I/O Settings section [#io-settings-section] If you want to modify or backup the data imported via the Feed URL data source option, you can use the I/O Settings section in the Advanced Settings tab. Select **I/O Settings** in the **Advanced Settings** tab. In the **Available I/O Settings** panel, select **Add** to use one of the [data transformation](#N1651056808120) or [backup](#listitem-idm243301075492128) settings. UUID-cab50bc6-6c2a-fc77-88f8-c581e3ff5d96 You can see and edit all added settings in the **Existing I/O Settings** panel.To delete an added setting, choose the bin icon in the panel you want to remove and select **Yes**. Transform a data source [#transform-a-data-source] To transform an XML, JSON, or XLSX file before importing its data into Productsup, use one of the following options: . **Transform XML with XSLT** - You can modify your XML file with XSLT code if, for example, the structure of your XML file isn't compatible with the structure of your product feed. Add an XSLT code abstract containing your desired XML file structure in **XSL Template** and select **Save**. Currently, the platform supports XSLT versions 3.0 and older. . **Transform JSON to CSV** - You can transfer your data in a JSON file into a CSV file. If your file has a complex structure, you can help the platform transform it by defining its product path and object-nesting approach. 1. In **Multiline**, you can specify whether your file has multiple JSON objects and arrays: One JSON object may contain multiple products inside. 1. Enter `OFF` if your file has only one JSON object that contains all your products. 2. Enter `SINGLE` if your file has one JSON object per line of code. 3. Enter `MULTI` if your file has multiple JSON objects per line of code nested in a JSON array. 2. In **Product Path**, you can enter the path to your file's product node in the following format: `xxx.product`, where `xxx` is the path to the node containing your products and `.product` is the mandatory ending of the input string.For a JSON file similar to the following, the input in the **Product Path** field should be `items.product`. If your file requires mentioning multiple nodes in the product path, separate them using a dot (`.`). ``` 1{ 2 "items": [ 3 { 4 "id": 2744883653, 5 "title": "Test product 1", 6 "image": "https://image.com/1" 7 }, 8 { 9 "id": 2744886389, 10 "title": "Test product 2", 11 "image": "https://image.com/2" 12 }, 13 { 14 "id": 2744887310, 15 "title": "Test product 3", 16 "image": "https://image.com/3" 17 } 18 ] 19} ``` You can leave the **Product Path** field empty to let the platform know that your file has no JSON object or key leading up to the JSON array that contains all your products. . **Transform Excel (XSLX) to CSV** - You can transfer the data from an XLSX file into a CSV file. Enter the name of the Excel sheet containing the data in **Sheet Name** or leave the field empty to let the platform detect the sheet automatically. Then, select **Save**. This setting applies to Excel files having the *.xlsx* extension only. Back up a data source [#back-up-a-data-source] Productsup lets you back up your data sources to third-party cloud service providers to help debug data sources, access archive data, etc. Productsup offers backups to the following cloud service providers: . Using the **Backup Import Data (Amazon S3)** setting, you can back up your data source to Amazon S3: Enter your S3 credentials in **S3 Bucket**, **S3 Region**, **S3 Access Key**, and **S3 Access Secret**. Specify the prefix of your remote file's name in **Prefix Remote Filename** and choose the format of your S3 folders from the **S3 Folders Format** drop-down menu as needed. Select **Save**. . Using the **Backup Import Data (Google Cloud Storage)** setting, you can back up your data source to Google Cloud Storage: Enter your Google Cloud Storage bucket in **Google Storage Bucket**. If you already have a Google Storage authentication in your Productsup organization, choose it from the **Google Storage Authentication** drop-down menu.If not, go to **Authentication** from your site's main menu, select **ADD AUTHENTICATION**, choose *Google Storage Authentication* in **Type**, give it a custom name as desired, and select **Next**. Then, choose **Connect** to let the platform redirect you to a Google Account page, where you can give Productsup access to your Google Storage account. Once finished, Google redirects you back to Productsup. Close the confirmation window to proceed and go back to the **I/O Settings** section of the **Advanced Settings** tab in the setup of the data source you want to back up. Specify the prefix of your remote file's name in **Prefix Remote Filename** and choose the format of your Google Cloud Storage folders from the **Google Storage Folders Format** drop-down menu as needed. Select **Save**. Parallel downloads section [#parallel-downloads-section] If you have sites with multiple data sources, you can enable parallel downloads to reduce the time of data processing and speed up the import. The Parallel downloads feature allows the platform to process multiple data sources in parallel and, as a result, increase performance. You should enable parallel downloads for each data source individually. Enabling this feature leads to an increase in the number of API calls to your source of data. Ensure that your data source can manage this increased number of requests from the Productsup platform. To enable or disable parallel downloads for each data source, take the following actions: Select **Parallel downloads** in the **Advanced Settings** tab of the required data source. UUID-72de2a57-be8d-5d5b-8556-c375b741a8ee Select **Disabled** or **Enabled**. Select **Save**. Delete this Import section [#delete-this-import-section] If you no longer need a data source, you can use the *Delete this Import* section in the Advanced Settings tab to remove the data source from your site and ensure the site doesn't receive imports from this data source anymore. Select **Delete this Import** in the **Advanced Settings** tab. Select **Delete** and then select **Yes**. # Import dynamic URLs import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] You may have a dynamic element in the URL of your import or export file, for example, a timestamp in the filename that changes each time the platform creates a file: `http://www.yourdomain.com/feed/product/fullcatalog-20210408.txt`. The dynamic date is necessary and is automatically included in the URL of your import file. This guarantees that the platform always imports the latest file containing the current date. It then inserts the current date in the filename when the platform updates a feed. See [Import a file from a URL](/docs/help-center/import-data-feeds/import-data-from-internal-systems/import-a-file-from-a-url) for more information on importing data from a URL. Make the date in the filenames dynamic using Twig [#make-the-date-in-the-filenames-dynamic-using-twig] To import or export a file with a dynamic date element in the URL, you can use a `date` filter from Twig. Twig is a template engine based on PHP that lets you add dynamic content in the template. This forces the URL to display the current date. For more information, see the `date`[Twig filters](https://twig.symfony.com/doc/3.x/filters/date.html). See the [date formats](https://www.branchcms.com/learn/docs/developer/twig/date-formats) that you can use. For the following example, `http://www.yourdomain.com/feed/product/fullcatalog-20210408.txt`, Twig modifies the date `20210408` to display in the following format using the `date` filter: `{{ "now" |date('Y-m-d') }}`. The final URL is: `http://www.yourdomain.com/feed/product/fullcatalog-{{ "now" |date('Y-m-d') }}.txt`. This means the platform always looks for a filename containing the current date and only imports this file. You can export files with dynamic filenames using any flat-file destination, such as FTP or SFTP destination. However, we don't support exporting files with dynamic filenames to Productsup Server as it creates too many files and prevents effective work. Set the date format in a Twig [#set-the-date-format-in-a-twig] You should set the date format to match how it appears in your URL. If the date is `05-19-20`, the format is `M-d-y`. For example, the date `2020-05-19` is in the format of `Y-m-d`, and Twig displays it as `{{ date|date('Y-m-d') }}`. See [PHP DateTime](https://www.php.net/manual/de/datetime.createfromformat.php) to learn more about changing the date format. Import a dynamic filename from Google Cloud Storage [#import-a-dynamic-filename-from-google-cloud-storage] Importing a dynamic filename from Google Cloud Storage can be a challenge due to its naming convention of objects. In Google Cloud, an object is specified by its file path and filename. You must designate them and the date in Twig. For example, the product file has the following parameters: * file path: `item/full` * filename: `target_item_full_2022-09-20.csv.gz` Set the following Twig the **Object** field in the settings of the Google Cloud Storage data source in Productsup: `{{ [ 'item/full/target_item_full_' , "now"|date("Y-m-d"), '.csv.gz' ] | join}}` UUID-b2cda387-29bb-d16f-56b2-11ea786cf75a Set the timezone in the format of your date [#set-the-timezone-in-the-format-of-your-date] If necessary, you can also set the timezone of the date format. To set the timezone as `Berlin/Europe`, modify your Twig as `{{ date |date("Ymd", "Europe/Berlin") }}`. See [List of Supported Timezones](https://www.php.net/manual/en/timezones.php) for more information. Import or export yesterday’s file [#import-or-export-yesterdays-file] You can also specify that you want to try and import a file from the past and not today’s file. Use the Twig `{{ date |date_modify("-1 day")|date("Ymd") }}`. It searches for a file where the dynamic date element matches yesterday’s date. You can adapt this time range by editing the `-1 day` element of Twig. For example, set `-7 day` to import the file where the dynamic date element matches the date from seven (7) days ago. Avoid hours, minutes, and seconds in the URL [#avoid-hours-minutes-and-seconds-in-the-url] You should avoid adding hours, minutes, or seconds in the URL when generating files because it can cause import failures due to timezone differences. For example, your data source finished loading new data into your file on September 19, 2022, at 00:55:12 in the Berlin timezone, with the file name displaying this time as follows: `http://www.yourdomain.com/feed/product/fullcatalog-20220919-005512.txt`. A schedule runs your site at 1:00:00 Berlin time to import a file with the dynamic URL `http://www.yourdomain.com/feed/product/fullcatalog-{{ date |date('Ymd-his') }}.txt`. But instead of the newest updates, the platform ends up importing a file from September 18, 23:00:00 because Productsup servers use the UTC timezone to unify processes across timezones. However, there are situations where it's impossible to avoid including hours, minutes, and seconds into the URL of your file. If so, see the following: . You can use a Twig to define the time format used in the URL. For example, you can use the Twig `{{ date |date('Ymd-his') }}` to import a file featuring the hours, minutes, and seconds of the upload time as `20220919-005512`. . You should refer to the timezone of your file upload timestamp within the Twig that specifies your upload time format. For example, `{{ date |date("Ymd-his", "Europe/Berlin") }}`.This means the file name you use to import data should be similar to `http://www.yourdomain.com/feed/product/fullcatalog-{{ date |date("Ymd-his", "Europe/Berlin") }}.txt`. Import files with other dynamic aspects in the name [#import-files-with-other-dynamic-aspects-in-the-name] If the dynamic aspect of your filename isn't a date, you can use one of the following methods. Each method is dependent on where you host your files: * HTTP link or FTP server * SFTP server Import dynamic files from a link or FTP server using wildcards [#import-dynamic-files-from-a-link-or-ftp-server-using-wildcards] To import files with dynamic aspects from an HTTP link or an FTP Server, you can use wildcards. The wildcard symbol is an asterisk (\*), which you use to replace dynamic elements. The wildcard ignores everything that comes in its place. It has no character match limit, so you only need to add one wildcard. For example, if you're trying to import the following file, where the end of the address, `adfc3424`, is dynamic: `ftp://my.ftpsource.io/files/datafeed-adfc3424.csv` you should use a wildcard in the following manner: `ftp://my.ftpsource.io/files/datafeed-*`. Import dynamic files from an SFTP server [#import-dynamic-files-from-an-sftp-server] Importing from an SFTP server doesn't support the wildcard search. For this reason, use the **Dynamic SFTP Download** data source. When setting up the data source, make the following change: In the **Filename** field, replace the dynamic element with `{?}`. For example, to match the filename `datafeed-adfc3424.csv`, enter `datafeed-{?}` in **Filename**. To add a prefix to the names of attributes that the Dynamic SFTP Download data source imports into Productsup, follow these steps: Go to **Data Sources** from your site's main menu and select the cogwheel icon (**⚙**) next to the relevant data source. Find the **Content Options** panel at the bottom of the data source setup page and select **CSV Settings** or **XML Settings**. If your data source produces files other than CSV or XML files, you can still select either of the tabs to use this option. In **Prepend a String to the Header Columns**, enter the prefix you want to add to the names of the attributes imported from this data source. Select **Save all settings**. On the **Data Sources** page, open the **Settings** tab and modify the name of your unique item identifier in **ID Column** according to the new prefix of the relevant attribute name. If your site has additional data sources, you should go back to the **Overview** tab on the **Data Sources** page to: 1. Select the cogwheel icon (**⚙**) next to an additional data source. 2. Add a relevant prefix to the column name stated in **ID Column In This Feed** if you added this prefix to the columns imported from this additional data source. 3. Choose the updated column name in **ID Column From Your Main Feed** if you added a prefix to the columns imported from a relevant main data source. # Get all product data (legacy) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Get filtered product data (legacy) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Product import methods The four (4) major methods for importing your products as a data source into Productsup are as follows: . File-based data sources . API-based data sources . Direct connections to external systems . Website crawler File-based data sources [#file-based-data-sources] Most files-based formats are supported out-of-the-box within Productsup, such as: * CSV * TSV * XML * TXT * JSON Supported transfer protocols for these file types are HTTP(S) and FTP. These connections can also be password-protected. Importing data via other protocols (like SFTP) is also possible and needs an individual setup. For information about how to import different types of data, see [Import data from internal systems](/docs/help-center/import-data-feeds/import-data-from-internal-systems). API-based data sources [#api-based-data-sources] You can also import directly through an API connection. We have several already set up: * Productsup Stream API. See [Productsup Platform and Stream APIs](/docs/help-center/productsup-platform-and-stream-apis). * Magento REST/SOAP API * Amazon Product Advertising API As well as a more non-standardized option: * Basic API Request with JSON Response * JSON API Import For information about how to import different types of data, see [Import data from internal systems](/docs/help-center/import-data-feeds/import-data-from-internal-systems). Direct connections to external systems [#direct-connections-to-external-systems] You have the option to connect directly to external systems, such as Google Merchant Center or Shopify. Here, there is already a standard connection setup prepared for you. This means that you will not have to worry about the technical integration, which is already configured. More information about connecting to external systems can be found here Use the website crawler to crawl product landing pages [#use-the-website-crawler-to-crawl-product-landing-pages] If you have issues proving an extensive data feed, Productsup can crawl your website. For additional information, see [Work with HTML](/docs/help-center/add-a-rule-box/find-the-needed-rule-box-category/work-with-html). It is also possible to create a feed from scratch based on your website, see [Checklist - Create a Feed Step-by-Step](https://platform.productsup.com/help/3). If your data needs to be updated very often, then this is not optimal for retrieving information, such as product availability. Custom data sources can be created for you [#custom-data-sources-can-be-created-for-you] If you need a data source method to import your products which we don’t currently support, then you can reach out to the support team. They will be happy to check the feasibility (in connection with our IT Teams where necessary) of creating a new data source for you. # Set up a shared data source and reuse it across sites import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Shared Data Sources is currently in beta testing. If you experience any issues, contact [support@productsup.com](mailto:support@productsup.com). The Shared Data Sources feature lets you set up a shared data source at the organization level and then add it as an already configured data source to numerous sites if they need to import data from the same file or system. It saves time by letting you avoid repetitive configuration efforts and reduces the chance of data source setup errors. UUID-5440506e-9665-6df3-37d9-e401e043b8a7 Currently, Shared Data Sources supports most data sources normally available at the site level. But the following ones *aren't yet available* in Shared Data Sources: * *Google Sheets* * *Local File Import (Upload)* * *Website Crawler* We are working to add these data sources to the Shared Data Sources feature. Prerequisites [#prerequisites] Shared Data Sources is available only to admin users. To create a shared data source at the organization level, you must have an admin user account. However, you only need a regular Read-Write user account to add an already configured shared data source to any site you have access to. Create a shared data source at the organization level [#create-a-shared-data-source-at-the-organization-level] Only admins can add shared data sources. Go to **Shared Data Sources** at the organization level, and select **Add shared data source**. UUID-691c07f0-735c-80a7-a6fe-55e131243476 Search for the needed data source, hover over it, and select **Choose**. UUID-f32b545d-b5da-f0a3-a966-8268056dea27 Give it a name and a description as desired, and then select **Continue**. Set up the shared data source as needed. The specific setup steps depend on the data source you choose. Setting up shared data sources at the organization level requires the same information and steps as setting up regular data sources at the site level. To find guidelines for setting up your specific shared data source, you can use documents for regular data sources. Open the search in the top-right corner of this Help Center page and enter the name of the needed data source, such as *Feed URL*, to find the needed document. Once you reach the last step of the setup, select **Add data source**. Edit a shared data source at the organization level [#edit-a-shared-data-source-at-the-organization-level] If you change the settings of a shared data source, it affects all sites that use it. Only admins can edit shared data sources. Go to **Shared Data Sources** at the organization level, select three dots UUID-69d09e21-cc16-9dd7-a473-3e3ccc73112f next to the shared data source you want to change, and choose **Edit**. UUID-e1d87f59-ca46-56b3-07ff-3225f50ab3ab Configure the setup as needed: 1. To change the setup of the shared data source itself, use the tab *General Settings*. If applicable, you can also edit the setup in the tab *Advanced Settings*. 2. To see the sites that use this shared data source, go to the tab *Shared With*. You can select the name of the site to open the setup of this shared data source in **Data Sources** in this site. UUID-0ff8b24c-49d5-b521-0e0d-96176750071b Once you are ready to save the new setup, select **Save** at the bottom of the tab. If you haven't changed any settings, you can leave the page without saving. Delete a shared data source at the organization level [#delete-a-shared-data-source-at-the-organization-level] Only admins can delete shared data sources. If a shared data source isn't used in any sites, take these steps to delete it: > > You have successfully deleted the shared data source. The platform shows a short message at the bottom of the page to confirm it. > Go to **Shared Data Sources** at the organization level, select three dots UUID-69d09e21-cc16-9dd7-a473-3e3ccc73112f next to the shared data source you want to delete, and choose **Delete**. Select **Delete** once again to confirm the action. If a shared data source is used in at least one site, take these steps to delete it: > > You have successfully deleted the shared data source. The platform shows a short message at the bottom of the page to confirm it. > Go to **Shared Data Sources** at the organization level, select three dots UUID-69d09e21-cc16-9dd7-a473-3e3ccc73112f next to the shared data source you want to delete, and choose **Edit**. UUID-e1d87f59-ca46-56b3-07ff-3225f50ab3ab Go to the tab *Shared With* to see which sites use this shared data source. UUID-0ff8b24c-49d5-b521-0e0d-96176750071b Select the name of a site to open the setup of this shared data source in **Data Sources** in this site. Remove the shared data source in the site: 1. Go to the *Advanced Settings* tab. 2. Select **Delete this Import**, and choose **Delete**. UUID-d2eb2f55-e62e-a85c-894b-1eb598f2149a 3. Select **Delete** once again to confirm the action. Repeat this step for each site that uses the shared data source. Once there are no sites that use the shared data source, go to **Shared Data Sources** at the organization level, select three dots UUID-69d09e21-cc16-9dd7-a473-3e3ccc73112f next to the shared data source you want to delete, and choose **Delete**. Select **Delete** once again to confirm the action. Add a shared data source in a site [#add-a-shared-data-source-in-a-site] > > You have successfully added a shared data source to a site. > Go to **Data Sources** from a site's main menu, select **Add**, and choose **Add shared data source**. UUID-fad4e649-fff8-cf4f-8593-8e423dbd3810 Hover over the needed shared data source, and select **Add**. UUID-156787d2-a348-4694-eef1-12e00bc71f62 You can't change most settings for a shared data source at the site level. To adapt a shared data source to the needs of a specific site, you can use the *Advanced Settings* tab and the following settings available in it: * Labels * Options * Parallel downloads * Delete this Import To change all other settings of a shared data source, you must go to **Shared Data Sources** at the organization level. See [Edit a shared data source at the organization level](#section-idm243530569713812). # Add OAuth authentication to external systems import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Authentication verifies your identity with external systems and allows you access to them. You can connect to external systems by adding your login credentials when setting up the data source in Productsup. However, you can also use the OAuth method over the channel authentication feature. Using the OAuth method means you don't have to add your credentials to the platform each time you wish to authenticate a data source during setup. Set up authentication on the organization, project, and site level regardless of admin or standard user access. You can create authentication for the following: * Site level - available for your site only. * Project level - available for every site in the project. * Account level - available for every site in the organization. Add OAuth authentication [#add-oauth-authentication] To add OAuth authentication for a data source: On the *organization*, *project*, or *site level*, go to **Authentication** from the main menu and select **ADD AUTHENTICATION**. Select the system you want to authenticate under **Type**. You can optionally give your authentication method a name. Select **Next**. If applicable, select **Region** and choose your marketplace locale. Before proceeding, the platform directs you to an external platform to finalize your authentication. After completing the authentication setup, you receive a confirmation message. Select **Connect** to continue.After completing the setup, your authentication appears in the following list: UUID-0b5d82e8-f249-42f9-4928-0ebcb87b7f44 You can select your newly-added OAuth authorization from the **Authentication** drop-down list in **Data Sources** for an applicable channel. UUID-9bdd95f4-5e6a-a851-6e7e-aae522b137f0 To set up a data source, see [Add a main data source to import your products](/docs/help-center/import-data-feeds/import-your-data-into-productsup/add-a-main-data-source-to-import-your-products). # Set a unique item identifier import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; A unique item identifier is one or several attributes you choose as unique identifiers for the items in your site while setting up data sources. For example, an **SKU**, a **GTIN**, or a combination of many attributes if none of your attributes alone uniquely identifies an item. For example, you can select **title**, **color**, and **size** to create a unique combination. Setting a unique item identifier is necessary for enabling specific features to work in Productsup, such as: * Monitoring. * Data Services. * The Before/After View feature in Data View. * Delta updates. Prerequisites [#prerequisites] To add a unique item identifier, you need to: Add a data source and start an import run by selecting **Import** in the top-right corner of the page. Add a unique item identifier [#add-a-unique-item-identifier] Go to **Data Sources** from your site's main menu, and select the *Settings* tab. Choose at least one attribute that contains unique values for each item and can uniquely identify them in the **Select one or more attributes** drop-down menu. UUID-b7416a7b-306f-f67e-8231-31250d8db989 After you add a unique item identifier and run an import, the platform automatically creates a platform-generated attribute at the import stage. The name of the attribute is **\_\_\_id**, and it contains the concatenated values of the attributes you selected in the *Unique item identifier* section. The platform doesn't export this attribute unless you map it to export. It only uses this attribute for internal purposes. Example 1: If every item has a unique ID, select the **id** attribute as a unique item identifier. | id | title | | -- | ----- | | 1 | abc | | 2 | dfe | | 3 | ghi | Example 2: If item IDs aren't unique, select additional attributes with values that in combination with the ID uniquely identify each item. For example, **id** and **color**. | id | title | color | | -- | ----- | ----- | | 1 | abc | green | | 1 | dfe | red | | 2 | ghi | green | | 2 | jkl | red | # Enhance your data with additional data sources import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] Besides adding main data sources to Productsup and enriching your data feed with more items, you can add additional data sources to your sites. Additional data sources contain additional information about the items that are already a part of your main data source, thus extending your data feed horizontally. Productsup links new information from an additional data source to the items in the main data source using a unique item identifier, such as an ID, an SKU, a GTIN, or a combination of different attributes. The difference between main and additional data sources [#the-difference-between-main-and-additional-data-sources] Main data sources add new items to a site, while additional data sources add new attributes to existing items. In Data View, you can see items imported from your main data source: UUID-ec68ab7f-cd92-2549-0c5d-ff24fca17cbe To add more items to your site, you can modify the original main data source and trigger a new import. Alternatively, you can add another main data source to your site. UUID-f8ed1369-96ff-cfb4-8b38-e31a0eb0dcd5 If you have a file featuring additional information about these items, for example, their pricing and shipping time, you can import it as an additional data source. The raw data in your file can look similar to this: UUID-6b1b0979-3830-9903-3f7e-6e9fa0c1b649 Once you add this file to your site as an additional data source, Productsup uses a unique item identifier to match all the items in your site with the items mentioned in the file. In this case, the **id** attribute works as the unique item identifier for both main and the additional data sources. UUID-cb40d9c3-07ed-5b19-8f83-273b73091203 If there are attributes with the same names in your main and additional data sources, your site always gets the data from the additional data source that is the last in the import queue. See [Set import order for additional data sources](#section-idm232212555248579) for more information. Add an additional data source [#add-an-additional-data-source] Go to **Data Sources** from your site's main menu. Select **Add data source**. Search for the needed data source in the **Search** bar and select **Add** or find a relevant data source in the proposed options and select **Add**. Give your data source a custom name if desired, then select **Continue**. Set up your data source. The data source option you chose defines the specific steps you should take to set it up. 1. See [Import data from internal systems](/docs/help-center/import-data-feeds/import-data-from-internal-systems) for information on importing data from internal systems and using various types of files for data import. 2. See [Import data from third-party external systems](/docs/help-center/import-data-feeds/import-data-from-third-party-external-systems) for information on importing data from external systems. 3. See [Import your data into Productsup](/docs/help-center/import-data-feeds/import-your-data-into-productsup) and [Import your data into Productsup - Advanced Settings](/docs/help-center/import-data-feeds/import-your-data-into-productsup-advanced-settings) for detailed information on the Data Sources feature within the Productsup platform. Select **Save**. If the platform redirects you to **Data Sources**, select the cogwheel icon (**⚙**) next to your newly added data source. If you are still on the data source setup page after saving the data source, move to the next step. UUID-4bf31af8-8ce9-d53c-9626-18dbe274c390 In the Content Mode panel on the data source setup page, select **Additional Data Source**. In the **Additional Data Source Types** section, you can select how the platform should import additional attributes and values to your data source if the main and additional data sources have the same-name attributes: * **Additional Data Source Values Always (Default)** is an option that lets you replace the main data source values with the additional data source values, even if the additional data source values are empty. The platform uses this option by default. * **Additional Data Source Values Unless Empty** is an option that lets you replace the main data source values that aren't empty with the additional data source values. The platform skips the blank values in the additional data source and leaves the values from the main data source in your feed. * **Main Data Source Values Unless Empty** is an option that lets you keep the values from the main data source that aren't empty. If the main data source values are empty, the additional data source values replace them. * **Only Additional Columns** is an option that lets you only add additional attributes and their values from the additional data source. It doesn’t affect the already existing attributes and values in your data source. UUID-a2e43bee-de53-8052-d819-8e7c235b87d0 In **ID Column In This Feed**, enter the attribute's name within your additional data source that Productsup should use as a unique item identifier. This field is case-sensitive. In the **ID Column From Your Main Feed** drop-down menu, select an attribute in your main data source that Productsup should use as a unique item identifier. The attribute in **ID Column From Your Main Feed** can't be an attribute created by a data service of this site. Select **Save**. Set import order for additional data sources [#set-import-order-for-additional-data-sources] Using the same names for attributes in your main and additional data sources creates a conflict during data import. Productsup imports data from your data sources according to the import queue you see in Data Sources and overwrites attribute values each time it finds an attribute with the same name as it progresses along the queue. At the end of an import process involving attributes with the same names, the platform always shows the data originating from the data source last in the import queue. Setting a specific order for importing each additional data source helps solve this issue. Main data sources are always the first to import data. Arrange import order for your additional data sources [#arrange-import-order-for-your-additional-data-sources] Go to **Data Sources** from your site's main menu. Select the grip icon next to one of your additional data sources and drag and drop your data source to a position suitable for the desired import order. UUID-4675d919-b13d-db66-8ad1-12364568e200 If you have only one additional data source, you can't customize your import order. In this case, Productsup always imports data from your main data sources first and then proceeds to import data from your additional data source. A notification appears in the bottom right corner of your view confirming the platform has saved the new order successfully. # Add a main data source to import your products import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; You can import your product data into Productsup using the Data Sources feature. To add new products to your site, add a main data source. See [Add a main data source](#section-idm232212413817044). To add more attributes to the already existing products, set up an additional data source. See [Enhance your products with additional data sources](/docs/help-center/import-data-feeds/import-your-data-into-productsup/enhance-your-products-with-additional-data-sources). Add a main data source [#add-a-main-data-source] To add a main data source and import your products into the site, you need to: Go to **Data Sources** from your site's main menu and select **ADD DATA SOURCE**. UUID-54b459a1-bf87-c04f-fe3b-391cf9477a13 Search for your desired data source and select **Add**. Give it a custom name as desired and select **Continue**. Set up the data source. 1. For more information on which options are available and how to import different data types, see [Import data from internal systems](/docs/help-center/import-data-feeds/import-data-from-internal-systems). 2. For more information on which options are available for importing data from external systems, see [Import data from third-party external systems](/docs/help-center/import-data-feeds/import-data-from-third-party-external-systems). UUID-6eb01920-f7dd-573b-5488-f1053e6a3663 Enter any advanced settings if required and select **Save**.You have now set up your main data source and can view it in Data Sources. Add multiple main data sources [#add-multiple-main-data-sources] If you have product data hosted in different places, you can add more than one main data source. Adding several main data sources means you can work with all your product data in one site. Arrange import order for main data sources [#arrange-import-order-for-main-data-sources] If you have more than one main data source in a site, you can arrange a desired import order to let the platform import products as needed. This affects the order of products in your site and export destination unless you apply specific settings to change the product order during export. To change the import order of the main data sources, you should: Go to **Data Sources** from your site's main menu. Select the grip icon next to one of your main data sources and drag and drop your data source to a position suitable for the desired import order. UUID-04e6f399-4e6c-5aa2-ce27-124ed7c267b7 A notification appears at the bottom of your view confirming the platform has saved the new order successfully. Get an overview of your data sources [#get-an-overview-of-your-data-sources] To see all data sources in a site, you should: Go to **Data Sources** from your site's main menu. View the *Main Data Sources* and *Additional Data Sources* sections to get the following details: * *Source* - The type of the data source. * *Name* - The name of the data source. It can be the same as the type of the data source, or it can be the name you specify on the data source setup page. * *State* - The state of the data source that determines whether the data source imports data during site runs. * *Filetime* - The date and time when your source file or system was last updated. This information comes from the metadata of your data source, where Productsup checks when you last added more products or edited product data in your data source file or system. The platform updates the *Filetime* column during every site run. An older date and time here may not mean that your data source is out-of-date. If it seems so, check whether this data source has run recently to determine whether the date and time in *Filetime* are up-to-date. The *Filetime* column doesn't display the time of the last import. To check the time when a data source last imported data into the site, open the *Import History* tab. * *Runs without an update* - The number of consecutive site runs up until the most recent site run showing how many times this data source has imported the same data. Import your data from data sources [#import-your-data-from-data-sources] Once you have set up your data sources, you can import their data into the platform. If you have both main and additional data sources, the platform first imports data from main data sources and then augments it with data from your additional data. Import via scheduling or triggers [#import-via-scheduling-or-triggers] You can automatically enable your site to import data by setting up a trigger or a schedule. See [Set up scheduling and triggering processes in Scheduling](/docs/help-center/dashboard-and-monitor/set-up-scheduling-and-triggering-processes-in-scheduling). Manually import your data [#manually-import-your-data] To manually import data from all your active data sources, you need to: Go to **Data Sources** from your site's main menu. Select the **Import** or **Run** button. UUID-8d3c383d-07bc-3c40-fa78-5b883e9c2221 These buttons are available on most pages at the site level. Manually importing multiple sites in bulk [#manually-importing-multiple-sites-in-bulk] To manually import multiple sites at once, you can use a bulk action: Go to the organization or project level and select **Bulk Option**. UUID-0825a97e-b71c-6bbe-e850-9210a13f9c13 Choose the site or sites where you wish to start an import and select **Next Step**. Select **Import** and choose **Next Step**. If you want the sites to import, process, and export data, select the option **Import & Export All**. Select **Execute** to begin the process. A final confirmation screen shows whether the bulk action was successful.You can leave this screen by selecting **Return to organization page**. You can also go to one of the sites where you performed the changes by selecting the name of the needed site. Remove a data source [#remove-a-data-source] To delete a data source, you need to: Go to **Data Sources** from your site's main menu and select the cog wheel icon (**⚙**) to edit a data source. UUID-3ea42c2b-8d9f-ef1d-c0ae-c24b8095c71e Open the *Advanced Settings* tab, choose **Delete this Import**, select **Delete**, and then confirm your action by again selecting **Delete**. UUID-fc4b5f14-9feb-a296-d51d-2b443a7953d2 See [Import your data into Productsup - Advanced Settings](/docs/help-center/import-data-feeds/import-your-data-into-productsup-advanced-settings) for more information on the actions available in the *Advanced Settings* tab. Pause a data source [#pause-a-data-source] To pause a data source to make it stop importing data during site runs, you should: Go to **Data Sources** from your site's main menu and select the pause icon (**⏸**) in the *State* column of the needed data source. UUID-5f038ef1-e79d-c12f-01fe-1b8d24ca7446 You can reactivate the data source by selecting the play icon (**▶︎**), which makes the data source import data during the next site run. # Index endpoint {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Get all product data (v2 — recommended) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Stream to output. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Read input-stream items. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Stream from input. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # List folder content on transport {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # List of Category Specific Attributes (Classifications) {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Fetch the next batch from the specified file {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Add notification. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Stream content of unspecified file from run storage. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Write nested data to output data store. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Reset the cursor for specified file {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Write "update" items to output stream. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Read last committed input-stream offsets. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Close output file {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # API Reference import { Card, Cards } from 'fumadocs-ui/components/card'; This is the API reference for the Container API. Each endpoint is documented with its parameters, request body, and response schemas. Endpoints by Category [#endpoints-by-category] Activity [#activity] Buckets (Persistent Storage) [#buckets-persistent-storage] Reading Input Data [#reading-input-data] Writing Output Data [#writing-output-data] File Storage & Transport [#file-storage--transport] Run Storage [#run-storage] Stream API [#stream-api] Process Management [#process-management] Category Specific Attributes [#category-specific-attributes] Async Feedback [#async-feedback] Misc [#misc] # Commit consumed offsets to input-stream. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Show a process. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Fetch row count for specified file {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Stream data to a bucket key. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Write to output file {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Write "delete" items to output stream. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Check if the server is live. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Write "create" items to output stream. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Log all processes to internal log {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Platform defined column order for output file. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Collection of unspecified files in run storage {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Stream file to run storage. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Add log. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Stream data from a bucket key. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Fetch the next item from the specified file {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Save event logs. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Show pending processes {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Upload folder content to transport {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Show headers of input file. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Write "replace" items to output stream. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Save async feedback config to local filesystem. {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Connector details import { Callout } from 'fumadocs-ui/components/callout'; The **Connector details** step is the first part of the setup wizard. You fill in these fields when creating a connector, and some can be edited afterward. Connector details form Fields [#fields] | Field | Required | Editable after creation | Description | | ------------------ | -------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Name** | Yes | Yes | A human-readable name for the connector. Shown in the Dev Portal and in the ProductsUp platform when end-users add the connector to a site. | | **Type** | Yes | No | The connector's role in the data pipeline. See [Connector types](/docs/connector-development/get-started/key-concepts#connector-types) for the full breakdown. | | **Description** | No | Yes | A short description of what the connector does. Shown to end-users when they browse available connectors. | | **Flow** | No | No | Controls how the connector integrates with the platform. Defaults to `Default` if not set. | | **Execution mode** | No | No | How individual configurations are passed to your connector at runtime. Defaults to `Environment variable` if not set. See [how configurations reach your code](/docs/connector-development/get-started/key-concepts#how-configurations-reach-your-code). | | **Owner** | No | No | The organization that owns this connector. Defaults to your own organization. You must be a member of the organization you assign. | | **Readme** | No | Yes | Additional documentation for the connector. Use this to provide setup instructions or usage notes for end-users. | | **Logo** | No | Yes | An SVG image used as the connector's icon. Uploaded separately from the other fields. | **Type**, **Flow**, and **Execution mode** are locked after creation and cannot be changed. Choose carefully — if you need a different value, you'll have to create a new connector. Connector type [#connector-type] Determines what your connector does in the data pipeline. The most common types are: | Type | Direction | Description | | ---------------- | --------- | ------------------------------------------------------------------- | | **Data source** | Inbound | Fetches data from an external source and imports it into ProductsUp | | **Export** | Outbound | Sends all processed product data to a third-party channel every run | | **Export delta** | Outbound | Sends only the data that changed since the last run | Other types include `data-service`, `download`, `transform`, `write`, and `upload`. See [Connector types](/docs/connector-development/get-started/key-concepts#connector-types) for details on all types. Connector flow [#connector-flow] Controls how the connector integrates with the ProductsUp platform: | Flow | Description | | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Default** | The connector is assigned to dev and prod platform sites and can be synced to them. This is the standard flow for most connectors. | | **Standalone** | The connector is not assigned to platform sites. Use this for connectors that run independently, without a site context. Available for all connector types. | | **Migration** | Internal-only. Used for data migration connectors. Available for datasource, export, export-delta, and data-service types only. | Not all flows are available for all connector types. The Dev Portal only shows flows that are valid for the selected type. Execution mode [#execution-mode] Determines how end-user configuration values (API keys, URLs, etc.) are passed to your connector at runtime: | Mode | How it works | | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | | **Environment variable** | Values are passed as `SNAKE_CASE` environment variables. This is the recommended approach — it works with any language and framework. | | **Command options** | Values are appended as `--flag=value` CLI arguments to your command. | See [Execution configuration](/docs/connector-development/dev-portal/connector-setup/execution-config) for how to define which values are passed. Logo [#logo] The connector logo is an SVG file that serves as the connector's icon in the ProductsUp platform. It's uploaded separately from the other fields via a dedicated upload button on the details page. Only SVG format is supported. # Type-specific config import { Callout } from 'fumadocs-ui/components/callout'; Some connector types require additional configuration beyond the common setup steps. These steps only appear in the setup wizard when they apply to your connector's type. Download, transform, write, and upload connectors have no type-specific configuration. Data source configuration [#data-source-configuration] Applies to: **Data source** connectors. | Field | Required | Description | | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------- | | **Categories** | Yes | One or more categories that describe what your datasource connects to. Used to organize connectors in the platform marketplace. | Available categories: | Category | Description | | ------------------- | --------------------------------------------- | | `Most popular` | Frequently used datasources | | `Shopping platform` | E-commerce marketplaces (Amazon, eBay, etc.) | | `Shop systems` | Online shop software (Shopify, Magento, etc.) | | `Cloud services` | Cloud-based data providers | | `PIM / PMS` | Product Information / Management Systems | | `Tracking systems` | Analytics and tracking platforms | | `Custom import` | Custom or file-based imports | | `Orders` | Order data sources | | `Miscellaneous` | Everything else (default) | Export configuration [#export-configuration] Applies to: **Export** and **Export delta** connectors. | Field | Required | Description | | -------------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Channels** | Yes | The export channels this connector supports. Channels must exist on the ProductsUp platform and match the connector type. | | **Feedback file** | No | Enable feedback files to report export results (success/failure per product) back to the platform. When enabled, you can configure source and target connection columns for matching products. | | **Category-specific attributes** | No | Enable support for category-specific attributes if the export channel uses them. | Feedback files [#feedback-files] When feedback files are enabled, the connector writes export results back to the platform. This lets end-users see which products exported successfully and which failed. The feedback data is imported as an additional data source on the next site run. | Field | Required | Description | | ---------------------------- | -------- | ------------------------------------------------------------ | | **Source connection column** | No | The column name in the source data used to match products. | | **Target connection column** | No | The column name in the exported data used to match products. | Data service configuration [#data-service-configuration] Applies to: **Data service** connectors. | Field | Required | Description | | -------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Column prefix** | Yes | A prefix added to columns generated by this service. Must be unique across data services. Convention: starts with `___` followed by lowercase letters. | | **Service type** | Yes | `Internal` — runs within the platform. `External` — file-based or external service. | | **Stages** | Yes | Which processing stages this service runs in. At least one stage is required. | | **Max usage** | No | Maximum number of sites that can use this data service. Leave empty for unlimited. | | **Service category** | No | A category for grouping similar data services. | Stages [#stages] | Stage | Description | | -------------- | -------------------------------------------------------------- | | `Import` | Runs during the import phase of a site run. | | `Intermediate` | Runs during intermediate processing between import and export. | # Authentication and secrets import { Callout } from 'fumadocs-ui/components/callout'; Both steps are optional. Use **authentication** when your connector needs end-user credentials (OAuth tokens, API keys for a third-party service). Use **secrets** when your connector needs developer-managed credentials stored securely in a vault. Authentication [#authentication] Authentication lets you declare which authentication providers your connector requires. When an end-user adds your connector to a site, they select their credentials from the platform's authentication store. How it works [#how-it-works] . **You (the developer)** register one or more authentication types during connector setup. These reference pre-configured authentication providers on the ProductsUp platform (e.g. Google Merchant Center, Facebook, SFTP). . **End-users** select which of their stored credentials to use when they configure your connector on a site. . **At runtime**, the selected credentials are passed to your connector as environment variables with the prefix `PUP_AUTH_` (in environment variable mode) or as CLI flags with the prefix `--pup-auth-` (in command options mode). Example [#example] If the authentication provider has a field `refresh_token`, your connector receives: **Environment variable mode:** ```bash PUP_AUTH_REFRESH_TOKEN= ``` **Command options mode:** ```bash --pup-auth-refresh_token='' ``` When you add authentication registrations to a connector, the platform automatically creates an `authentication_select` field in the end-user form, letting users pick their credentials. Secrets [#secrets] Secrets are sensitive values (API keys, service credentials, tokens) stored securely in a vault. Unlike authentication, secrets are managed by the connector developer or platform administrator — end-users don't interact with them. Secrets configuration in the Dev Portal How it works [#how-it-works-1] . **You (the developer)** define secret registrations, each referencing a path in the vault and specifying which fields to extract. . **At runtime**, all registered secrets are passed to your connector as a JSON string — either via the `REGISTERED_SECRETS` environment variable or the `--registered-secrets` CLI flag, depending on the execution mode. Secret registration structure [#secret-registration-structure] Each secret registration has three parts: | Field | Description | | ---------------- | ----------------------------------------------------------------------------------- | | **Vault secret** | The path to the secret in the vault. | | **INI header** | A section name used to group the secret's fields. | | **Fields** | The specific field names to extract from the secret (e.g. `api_key`, `api_secret`). | When to use which [#when-to-use-which] | | Authentication | Secrets | | ---------------------------- | --------------------------------------------------------------------------- | ----------------------------------------------------------------- | | **Who provides the values** | End-users, via the authentication store | Developers or platform admins, via the vault | | **Use case** | Third-party service credentials that vary per user (OAuth tokens, API keys) | Internal credentials shared across all instances of the connector | | **How values are delivered** | Individual env vars / CLI flags with `PUP_AUTH_` prefix | Single JSON string via `REGISTERED_SECRETS` | | **End-user interaction** | Users select their credentials from a dropdown | None — users don't see secrets | # Execution config import { Callout } from 'fumadocs-ui/components/callout'; The **Execution configuration** step shows the execution mode selected when the connector was created. The execution mode determines how [individual configuration](/docs/connector-development/dev-portal/connector-setup/individual-config) values, [authentication](/docs/connector-development/dev-portal/connector-setup/auth-and-secrets) credentials, and [secrets](/docs/connector-development/dev-portal/connector-setup/auth-and-secrets#secrets) are passed to your connector at runtime. The execution mode is set at creation and cannot be changed afterward. If you need a different mode, create a new connector. Environment variable (recommended) [#environment-variable-recommended] Individual config values are passed as uppercase environment variables. Dashes in the command option are replaced with underscores. ```bash API_KEY=abc123 BASE_URL=https://api.example.com php ./bin/console connector:run:import ``` Authentication credentials use the `PUP_AUTH_` prefix. Secrets are passed as a JSON string in `REGISTERED_SECRETS`. This mode works with any language and framework — just read environment variables. Command options [#command-options] Individual config values are appended as `--flag=value` CLI arguments. ```bash php ./bin/console connector:run:import --api-key='abc123' --base-url='https://api.example.com' ``` Authentication credentials use the `--pup-auth-` prefix. Secrets are passed via `--registered-secrets`. Use this mode if your CLI framework expects flags rather than environment variables. # Application config import { Callout } from 'fumadocs-ui/components/callout'; The **Application configuration** step tells the Dev Portal how to run your connector inside the Docker container. Application configuration form Fields [#fields] | Field | Required | Description | | ---------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | **Command** | Yes | The executable to run inside the container. This is the first part of what gets executed — e.g. `php`, `python`, `node`. | | **Arguments** | No | Additional arguments appended to the command — e.g. `./bin/console connector:run:import`. | | **Health check** | No | Arguments appended to the command during the health check phase of a build. Used to verify the container starts correctly — e.g. `--help`. | Together, the command and arguments form the full execution command. For example: | Command | Arguments | What gets executed | | -------- | ------------------------------------ | ---------------------------------------- | | `php` | `./bin/console connector:run:import` | `php ./bin/console connector:run:import` | | `python` | `main.py` | `python main.py` | | `node` | `dist/index.js --verbose` | `node dist/index.js --verbose` | How the health check works [#how-the-health-check-works] The health check runs automatically **during the build process**, after the Docker image is built and before it's pushed to the registry. It verifies that the container can start and the executable works. When a health check is configured: . A temporary container is created from the built image . The container executes: `[command] [arguments] [health-check]` . The check must complete within **5 seconds** . Exit code `0` means the check passed — the build continues . Any non-zero exit code or a timeout means the check failed — the build fails For example, with command `php`, arguments `./bin/console connector:run:import`, and health check `--help`: ``` php ./bin/console connector:run:import --help ``` This verifies that the Symfony console command is registered and the application boots correctly, without actually running the connector. The health check is optional but recommended. Without it, a broken image could be pushed to the registry and only fail at runtime. Common health check values: `--help`, `--version`. How configurations are passed at runtime [#how-configurations-are-passed-at-runtime] At runtime, the execution command is extended with end-user configuration values based on the [execution mode](/docs/connector-development/dev-portal/connector-setup/execution-config): **Environment variable mode** (recommended): ``` FIRST_OPTION=value SECOND_OPTION=value [command] [arguments] ``` **Command options mode**: ``` [command] [arguments] --first-option='value' --second-option='value' ``` See [Execution configuration](/docs/connector-development/dev-portal/connector-setup/execution-config) for details. # VCS config import { Callout } from 'fumadocs-ui/components/callout'; The **Version Control configuration** step connects your connector to a Git repository. The Dev Portal pulls your code from this repository when you trigger a build. VCS configuration form Fields [#fields] | Field | Required | Description | | ---------------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------- | | **Authorization type** | Yes | How the Dev Portal authenticates with your repository. See [authorization types](#authorization-types) below. | | **Repository link** | Yes | The URL to your Git repository. Format depends on the authorization type — HTTPS for public and basic auth, SSH for deploy keys. | | **Branch** | No | The branch to pull code from. Defaults to `main` if not set. | | **Username** | Basic auth only | Your Git username or email. Required when using basic auth. | | **Token** | Basic auth only | A personal access token or password. Required when using basic auth. Stored securely in Vault — never returned in API responses. | Authorization types [#authorization-types] Public repository [#public-repository] No credentials needed. Use this for public repositories that don't require authentication. * **Repository link format**: HTTPS — e.g. `https://github.com/productsupcom/connector-quickstart` Basic auth [#basic-auth] Authenticate with a username and personal access token. This is the quickest way to connect a private repository. * **Repository link format**: HTTPS — e.g. `https://github.com/your-org/your-connector` * **Username**: Your Git provider username or email * **Token**: A personal access token with read access to the repository The token is stored securely and never shown in the UI after saving. If you need to update it, provide a new token — you can't retrieve the old one. Deploy key [#deploy-key] Authenticate with an SSH key pair. The Dev Portal generates the key pair automatically — you add the public key to your repository as a deploy key. * **Repository link format**: SSH — e.g. `git@github.com:your-org/your-connector.git` When you select deploy key and save: . The Dev Portal generates an SSH key pair . The public key is displayed in the UI — copy it . Add it as a deploy key in your Git provider (GitHub → Settings → Deploy keys, GitLab → Settings → Repository → Deploy keys, etc.) . Grant **read-only** access — the Dev Portal only needs to pull code Deploy keys are recommended for production connectors. They're scoped to a single repository and don't expire with a personal account, unlike personal access tokens. Test connection [#test-connection] After saving your VCS config, click **Test connection** to verify the Dev Portal can reach your repository and find the configured branch. This checks: * The repository URL is reachable * The credentials are valid (for basic auth and deploy key) * The configured branch exists If the test fails, check that: * The repository URL is correct and uses the right format (HTTPS vs SSH) * For basic auth: the username and token are valid and have read access * For deploy keys: the public key has been added to the repository * The branch name matches an existing branch in the repository URL format reference [#url-format-reference] | Authorization type | URL format | Example | | ------------------ | ---------- | ------------------------------------------------------- | | Public | HTTPS | `https://github.com/productsupcom/connector-quickstart` | | Basic | HTTPS | `https://github.com/your-org/your-connector` | | Deploy key | SSH | `git@github.com:your-org/your-connector.git` | # Individual config import { Callout } from 'fumadocs-ui/components/callout'; **Individual configuration** defines the form fields that end-users see when they add your connector to a site. Each field becomes an environment variable or CLI flag at runtime — this is how end-users customize connector behavior without touching code. For example, if your connector imports products from an API, you might define fields for the API key, base URL, and batch size. Individual configuration in the Dev Portal The fields you define here are displayed to end-users as a form on the ProductsUp platform once the connector is synced. Field properties [#field-properties] Each field has the following properties: | Property | Required | Description | | ------------------ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | **Command option** | Yes | The key used to pass the value to your connector at runtime. Must start with a letter and can contain letters, numbers, dashes, and underscores. | | **Field type** | Yes | The type of form control shown to end-users. See [field types](#field-types) below. | | **Field name** | Yes | The label displayed to end-users. | | **Required** | No | Whether the field must be filled in. Defaults to false. | | **Placeholder** | No | Hint text shown inside the input when empty. | | **Description** | No | Help text displayed below the field. | | **Default value** | No | A pre-filled value. For checkboxes, must be `0` or `1`. For selects, must match one of the defined options. | | **Field config** | Select types only | A JSON object defining the available options. Required for `select` and `select_multiple` types. | | **Order** | No | The position of the field in the form. Fields are displayed in ascending order. | Field types [#field-types] Common types (all connector types) [#common-types-all-connector-types] | Type | Description | | ----------------- | ------------------------------------------------------------------------------------------------ | | `input` | Single-line text input. Use for short values like API keys, URLs, account IDs. | | `textarea` | Multi-line text input. Use for longer content like templates or JSON payloads. | | `password` | Masked text input. Use for sensitive values. | | `checkbox` | A boolean toggle. Default value must be `0` (unchecked) or `1` (checked). | | `select` | Dropdown with predefined options. Requires `field config` with a JSON object of key-label pairs. | | `select_multiple` | Multi-select dropdown. Same config format as `select`. | | `hidden` | A hidden field not visible to end-users. Use for internal defaults. | Type-specific fields [#type-specific-fields] Some field types are only available for specific connector types: | Type | Available for | Description | | --------------------------------- | ------------------------- | --------------------------------- | | `date` | Data source, Data service | A date picker. | | `integer` | Data service | Numeric input (integers only). | | `number` | Data service | Numeric input (decimals allowed). | | `export_headers` | Export, Export delta | Export header selection. | | `feed_headers` | Export, Export delta | Feed header selection. | | `stage_columns_dropdown` | Data service | Column selection dropdown. | | `stage_columns_dropdown_multiple` | Data service | Multi-select column selection. | Select field config [#select-field-config] For `select` and `select_multiple` fields, the **field config** property must contain a JSON object mapping option keys to display labels: ```json { "us": "United States", "de": "Germany", "uk": "United Kingdom" } ``` The keys are the values passed to your connector at runtime. The labels are what end-users see in the dropdown. If you set a default value, it must match one of the keys. How values reach your connector [#how-values-reach-your-connector] The **command option** property determines how the value is passed to your connector, based on the [execution mode](/docs/connector-development/dev-portal/connector-setup/execution-config): Environment variable mode (recommended) [#environment-variable-mode-recommended] The command option is converted to an uppercase environment variable. Dashes are replaced with underscores. | Command option | Environment variable | | -------------- | -------------------- | | `api_key` | `API_KEY` | | `base-url` | `BASE_URL` | | `batchSize` | `BATCHSIZE` | Command options mode [#command-options-mode] The command option is used as a CLI flag prefixed with `--`. | Command option | CLI flag | | -------------- | -------------------- | | `api_key` | `--api_key='value'` | | `base-url` | `--base-url='value'` | If you're using environment variable mode, avoid dashes in command options — use underscores instead. Dashes are converted to underscores in env var names, which can be confusing. Accessing values in your code [#accessing-values-in-your-code] Here's a complete example: define two fields in the Dev Portal (`api_key` and `batch_size`), then access them in a Symfony service. **In the Dev Portal**, create two individual config fields: | Command option | Field name | Field type | Required | | -------------- | ---------- | ---------- | -------- | | `api_key` | API Key | `input` | Yes | | `batch_size` | Batch Size | `input` | No | **In `config/services.yaml`**, bind the environment variables to service parameters: ```yaml title="config/services.yaml" services: _defaults: autowire: true autoconfigure: true bind: $apiKey: '%env(API_KEY)%' $batchSize: '%env(int:BATCH_SIZE)%' ``` **In your service**, receive them as typed constructor parameters: ```php title="src/Service/ImportService.php" readonly class ImportService { public function __construct( private ContainerApiInterface $containerApi, private string $apiKey, private int $batchSize, ) {} public function run(): void { $client = new \GuzzleHttp\Client(); $response = $client->get('https://api.example.com/products', [ 'headers' => ['Authorization' => 'Bearer ' . $this->apiKey], 'query' => ['limit' => $this->batchSize], ]); // Process response... } } ``` Symfony's `%env()%` syntax supports type casting: `int:`, `bool:`, `json:`, and plain strings. This keeps your configuration strongly typed and your dependencies explicit. Ordering [#ordering] Fields are displayed to end-users in the order you define. You can reorder fields by changing their order value in the Dev Portal. When you insert a field at a specific position, surrounding fields are automatically reordered. # Get operation status and result {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # List export template revisions {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Update export template metadata {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Get export template metadata {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Create export template metadata {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # List export categories {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Get export template marketing information {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Get an export category {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Update export template marketing information {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # List export countries {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Get an export country {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # List export template attribute tags {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Get an export template attribute tag {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Delete an export template attribute tag {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Create an export template attribute tag {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Upload an export template logo {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Update an export template {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Get an export template {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Commit export template changes {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Create an export template {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Get a full export template view {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # List export templates {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Delete an export template logo {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Create an export template attribute alias {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # List export template attribute aliases {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Update an export template attribute {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Create an export template attribute {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Delete an export template attribute {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Bulk update export template attributes {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # List export template attributes by filter {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # List export template attributes {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Get an export template attribute {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Bulk create export template attributes {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Delete an export custom form field {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Create an export custom form field {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Update an export custom form field {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Get an export custom form field {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # List export custom form fields {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # List export template tags {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Get an export template tag {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Create an export template tag {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Delete an export template tag {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Assign analyzer test templates to an attribute {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # List analyzer test templates {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Unassign an analyzer test template from an attribute {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Update an analyzer test assignment {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Get the JSON Schema of an export template {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Delete an export template {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Replace an export template {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Create an export template {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # List sites using an export template {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Duplicate an export template {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Get an export template {/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */} # Shorten, lengthen, or create text from attributes with AI data services import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] If you need to quickly change the text in your data feed, for example, to make product descriptions shorter or longer, or create new text using the information from other attributes, you can use the following AI-based data services: * *Shorten Text* lets you shorten the text to fit a needed character limit while keeping its main point. * *Lengthen Text* lets you extend the text to fit a needed character limit by adding phrases that support the main point. * *Create Text From Attributes* lets you generate text based on the data from the selected attributes and a needed character limit. The service also lets you translate the generated text into the needed language. These data services are available only for the import and intermediate stages. These data services use the capabilities of OpenAI by connecting to their public API, which is why you must read and accept [OpenAI's Terms of Service](https://www.productsup.com/open-ai-terms-of-service/) before adding any of these data services to your site. You can do so during the setup. Productsup caches the AI-generated texts for each product and doesn't send the request to Open API with each run unless you decide to clear the cache and generate new texts. Caching the data improves the platform's performance and guarantees the texts don't change with every consecutive run saving you money for the OpenAI services. While Productsup offers integration with OpenAI for text generation at no cost, the actual text generation process is handled by OpenAI, which may involve fees for their services. Before using our AI-based data services, ensure you're familiar with OpenAI's pricing that we use in our data services. See [Pricing](https://openai.com/pricing) for more information. Prerequisites [#prerequisites] To use the Shorten Text, Lengthen Text, and Create Text From Attributes data services, you need: . An OpenAI account. See [Account setup](https://platform.openai.com/docs/quickstart/account-setup). . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. Add the Shorten Text or Lengthen Text data service [#add-the-shorten-text-or-lengthen-text-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Shorten Text*, select **Add**, and give it a desired name and column prefix.By default, `___service_ai_shorten_text` for Shorten Text and `___service_ai_lengthen_text` for Lengthen Text are the column prefixes. UUID-02dacc6e-5bce-f92d-11cd-307b10722812 UUID-a2771622-4c37-490d-1222-5085007d5e52 Choose the stage where you have the attributes that need text changes in **Service Data Level**. Check the **Open AI terms** checkbox to confirm that you have read and accept [OpenAI's Terms of Service](https://www.productsup.com/open-ai-terms-of-service/). You can't add the data service without selecting this checkbox. Select **Add**. Add your OpenAI API key in **API Key**. In **OpenAI model**, choose the AI model for your specific use case, whether you need faster responses, more advanced reasoning, or compliance with internal AI usage guidelines. Choose the attribute in your feed that contains the text you need to change in **Attribute name**. The list of attributes depends on the stage that you've chosen in Service Data Level. Set the desired length of your text in **Max number of characters**. The length of the AI-suggested text can still be a bit more than specified as OpenAI isn't strict on this. In **Max Response Tokens**, set the maximum number of tokens in the AI’s response. It configures max tokens for older models or max completion tokens for newer models. If you leave the field empty, the platform uses a default value of 2048.See [What are tokens and how to count them?](https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them) for more information. In **Request timeout (seconds)**, define the waiting time for a response before the data service stops the attempts. Recommended time is 90 seconds. An empty value sets no timeout. This means that requests might take an indefinite time depending on the context, size of data, and OpenAI traffic spikes. In **Request concurrency**, specify the number of parallel requests to OpenAI. This feature speeds up processing for large datasets. Maximum concurrency depends on your Open AI subscription terms. If you want the platform to clear the cache for all products, turn on **Clear cache before the next run**. After the next run, it returns to the *Off* state, and you need to activate it again whenever you want to clear the cache and generate new texts. If you want to stop requests to OpenAI API when a plan / billing issue occurs, turn on **Stop requests when a plan issue is detected**. When enabled, it will stop all requests to OpenAI and use cached data where available if a plan issue is detected, not allowing the data service to fail. This could be due to invalid API key, deactivated account, billing hard limit reached, insufficient quota or expired API key. Select **Save**. UUID-f0253f43-17b9-3932-56c7-6e2ed9568b1e For the platform to process a new data service, select **Run** in the top-right corner of your site's view. If you can't see your new texts in Data View, ensure the platform hasn't hidden it: Go to **Data View** from your site's main menu and choose the relevant stage or export in the dropdown on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the data service prefix and select the eye icon next to each attribute you want Data View to display. Close the pop-up. The naming of the attributes created by the data service depends on the column prefix you choose in [see the relevant section](#N1709128559908). The attribute names the data service generates always start with three underscores (`___`), which means the platform doesn't send such attributes to your export channels. Add the Create Text From Attributes data service [#add-the-create-text-from-attributes-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Create Text From Attributes*, select **Add**, and give it a desired name and column prefix.By default, `___service_ai_create_text_from_attributes` is the column prefix. UUID-179249a8-f00f-d2d4-2638-18d39d216ae5 In **Service Data Level**, choose the stage where you have attributes with the data needed for text generation. Check the **Open AI terms** checkbox to confirm that you have read and accept [OpenAI's Terms of Service](https://www.productsup.com/open-ai-terms-of-service/). You can't add the data service without selecting this checkbox. Select **Add**. Add your OpenAI API key in **API Key**. In **OpenAI model**, choose the AI model for your specific use case, whether you need faster responses, more advanced reasoning, or compliance with internal AI usage guidelines. Choose up to five (5) attributes in your feed that contain the text that you want to use to generate new text in the dropdowns from **Attribute name 1** to **Attribute name 5**. UUID-7b1027a7-9dda-e2a2-da88-72ff229c563a The quality of the generated text depends on the content of the selected attributes. For example, if the attributes are empty, there is no content to create text. The list of attributes depends on the stage that you've chosen in Service Data Level. Select the language of the original text in the attributes in **Source language**. In **Target language**, select the language in which the service should create new text or select the same language as the source one. Set the desired length of your text in **Max number of characters**. The length of the AI-suggested text can still be a bit more than specified as OpenAI isn't strict on this. In **Max Response Tokens**, set the maximum number of tokens in the AI’s response. It configures max tokens for older models or max completion tokens for newer models. If you leave the field empty, the platform uses a default value of 2048.See [What are tokens and how to count them?](https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them) for more information. In **Request timeout (seconds)**, define the waiting time for a response before the data service stops the attempts. Recommended time is 90 seconds. An empty value sets no timeout. This means that requests might take an indefinite time depending on the context, size of data, and OpenAI traffic spikes. In **Request concurrency**, specify the number of parallel requests to OpenAI. This feature speeds up processing for large datasets. Maximum concurrency depends on your Open AI subscription terms. If you want the platform to clear the cache for all products, turn on **Clear cache before the next run**. After the next run, it returns to the *Off* state, and you need to activate it again whenever you want to clear the cache and generate new texts. If you want to stop requests to OpenAI API when a plan / billing issue occurs, turn on **Stop requests when a plan issue is detected**. When enabled, it will stop all requests to OpenAI and use cached data where available if a plan issue is detected, not allowing the data service to fail. This could be due to invalid API key, deactivated account, billing hard limit reached, insufficient quota or expired API key. Select **Save**. For the platform to process a new data service, select **Run** in the top-right corner of your site's view. If you can't see your new texts in Data View, ensure the platform hasn't hidden it: Go to **Data View** from your site's main menu and choose the relevant stage or export in the dropdown on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the data service prefix and select the eye icon next to each attribute you want Data View to display. Close the pop-up. The naming of the attributes created by the data service depends on the column prefix you choose in [see the relevant section](#N1709128830871). The attribute names the data service generates always start with three underscores (`___`), which means the platform doesn't send such attributes to your export channels. Edit a data service [#edit-a-data-service] Go to **Data Services** from your site's main menu. Change the settings of the needed data service: 1. To deactivate a data service, choose the pause icon next to the desired data service. 2. Select the cogwheel icon (**⚙**) next to the desired data service to edit other settings and select **Save**. Delete a data service [#delete-a-data-service] Go to **Data Services** from your site's main menu. To stop a data service from affecting your feed without deleting the data service itself, you can choose the pause icon next to the desired data service. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. # Remove image background with the Image Background Removal service import { Callout } from "fumadocs-ui/components/callout"; Introduction [#introduction] If you want transparent backgrounds in your product images to make your product stand out, you can isolate the product using the Image Background Removal service in the platform. This service removes unwanted image backgrounds to create transparent backgrounds using the [remove.bg](http://remove.bg) API. Productsup shares your product image URLs with [remove.bg](http://remove.bg) for removing image backgrounds. The [remove.bg](http://remove.bg) service then downloads your images, removes the backgrounds, and sends the edited images to your Amazon S3 bucket account. From there, Productsup retrieves the newly revised images from your S3 account. After Productsup receives your newly edited images, the image URLs are publicly accessible again. Requirements [#requirements] You must have a paid Kaleido account to use the Image Background Removal service. See [Create a new Kaleido Account](https://accounts.kaleido.ai/users/sign_up) and [Kaleido Pricing](https://www.remove.bg/pricing). You also need to provide your [Amazon S3](https://aws.amazon.com/s3/?nc1=h_ls) credentials, so that Productsup can access the uploaded images. Ensure you have set a [unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) to use this service. Add the Image Background Removal service [#add-the-image-background-removal-service] To add the Image Background Removal service: . Go to **Data Services** from your site's main menu, and select **ADD SERVICE**. . Search for *Image Background Removal* and select **Add**. UUID-55f237ca-7330-f14e-c246-30457b7792e5 . (Optional) Enter a custom name for the new service in **Name**. 1. This custom name replaces the default name of the service on the *Data Services* overview page. . (Optional) Enter a custom column prefix in **Column prefix**. When the platform creates multiple columns from one service, it adds a prefix to all new columns. You can add a custom prefix that helps you identify newly created columns using a particular service. For example, enter any text you want to prepend to your new columns, such as `hero_images`. . Choose the attribute column level you want to apply the Image Background Service to in **Service Data Level**: **Import** or **Intermediate**. Select the attribute column level that contains the image links, as necessary. . Select **Add**. . Choose the column containing the image URL from the **Image URL attribute** drop-down menu. . Enter the appropriate API key in **Remove.bg API Key**. . Enter your object's bucket name in **S3 Bucket name**. The URL you paste in this field shouldn't have the prefix `s3://`. If your URL has this prefix, make sure to trim it. . Select the region for your bucket in **S3 Region**. . Enter your Amazon S3 credentials in **S3 Access Key** and **S3 Access secret**. . Set a trigger for the Image Background Removal service to run when you refresh Data View by selecting the **prohibition sign** or **no symbol** button icon under **Trigger during a refresh in Data View**. You can now see a **checkmark symbol** button icon indicating that it is active. . Select **Save**. UUID-99db92c1-e16c-2f39-b3da-ac641e72ebda Once you have successfully set up the Image Background Removal service, the platform creates two (2) new columns, including any custom prefixes you earlier defined. See the following: `___service_background_remover_image_url` `___service_background_remover_image_name` Edit an existing Image Background Removal service [#edit-an-existing-image-background-removal-service] To edit settings for your Image Background Removal service: . Go to **Data Services** from your site's main menu, and in your chosen service, select the *Settings* cogwheel icon. . Select **Save** after making edits. Delete an existing Image Background Removal service [#delete-an-existing-image-background-removal-service] To delete your Image Background Removal service: . Go to **Data Services** from your site's main menu, and in your chosen service, select the *settings* cogwheel icon. . Scroll to the bottom of the *Settings* page and select **Remove this service**. # Translate your feed with the Google Translate and Google Translate (Advanced) data services import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] To let you translate your product information, such as titles or descriptions, into any language you need, Productsup offers two (2) data services: . The Google Translate data service . The Google Translate (Advanced) data service These data services are helpful if your product catalog is available only in one language, but you use it across different countries. You can also use them to quickly translate your product information for trying out a new market. Both data services use the Google Cloud Translation API and can detect the language of the attribute you want to translate. Using the Google Cloud Translation API isn't free, the pricing depends on the chosen API option. Here is how the data services differ: | Google Translate data service | Google Translate (Advanced) data service | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Uses Translation API Basic.See [Cloud Translation options](https://cloud.google.com/translate?hl=ru#all-features) for more details on the capabilities of this option.See [Cloud Translation pricing](https://cloud.google.com/translate/pricing/?gad=1\&gclid=CjwKCAiAxreqBhAxEiwAfGfndBomv1uYk1beqvPVNzwWeCuYnGw16ujyqVl0noEIK-6tfnByVi_3qRoC6z8QAvD_BwE\&gclsrc=aw.ds) for cost details. | Uses Translation API Advanced.See [Cloud Translation options](https://cloud.google.com/translate?hl=ru#all-features) for more details on the capabilities of this option.See [Cloud Translation pricing](https://cloud.google.com/translate/pricing/?gad=1\&gclid=CjwKCAiAxreqBhAxEiwAfGfndBomv1uYk1beqvPVNzwWeCuYnGw16ujyqVl0noEIK-6tfnByVi_3qRoC6z8QAvD_BwE\&gclsrc=aw.ds) for cost details. | | Translates your product data without using any custom glossaries. | Lets you use glossaries created in your Google Cloud service account to consistently translate the needed terms and phrases. | | Lets you translate only one (1) attribute within one data service setup. | Lets you translate one or multiple attributes within one data service setup without adding the data service multiple times. | When fetching translations for your product data, the translation data services add two (2) new attributes to your site per each translated column if you have only one (1) target language. Each additional target language adds one (1) more attribute per each translated column. The names of the added attributes vary per data service. The following examples use the default prefix `___service_google_translate`. If you change your prefix in the data service setup, the names of the added attributes are going to look different, but the endings of the attribute names will still be as shown below. | The Google Translate data service adds: | The Google Translate (Advanced) data service adds: | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | - `___service_google_translate_md5`, an attribute that contains the hash value created for the already translated values, which means that the site caches those values and keeps them unchanged if the data service runs again. - `___service_google_translate_xx_yy`, where `xx` is the source language and `yy` is the target language. These attributes contain the desired translations. | - `___service_google_translate_column_md5`, where `column` is the name of the column the data service translated. This attribute contains the hash value created for the already translated values, which means that the site caches those values and keeps them unchanged if the data service runs again. - `___service_google_translate_column_xx_yy`, where `column` is the name of the column the data service translated, `xx` is the source language, and `yy` is the target language. These attributes contain the desired translations. | Prerequisites [#prerequisites] Each translation data service has its own set of prerequisites: . Google Translate data service: 1. A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier). 2. An API key to authenticate in Google Cloud. You need to enable and purchase it. See [Cloud Translation API Key](https://console.cloud.google.com/apis/library/translate.googleapis.com). . Google Translate (Advanced) data service: 1. A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier). 2. A Google Cloud service account with at least one project created in it. See [Setup](https://cloud.google.com/translate/docs/setup) for more information. 3. The region of your Google Cloud project. See [Regions and zones](https://cloud.google.com/compute/docs/regions-zones). 4. The configuration of your Google Cloud service account in the JSON format. It should feature the needed project ID, private key, client ID, etc. See [Create a service account key](https://cloud.google.com/iam/docs/keys-create-delete#creating). 5. The ID of a glossary associated with a relevant Google Cloud project. The platform only supports glossaries in the CSV format. See [Equivalent term sets (CSV)](https://cloud.google.com/translate/docs/advanced/glossary#equivalent_term_sets_csv).See [Creating and using glossaries (Advanced)](https://cloud.google.com/translate/docs/advanced/glossary) for more information. This prerequisite is optional. You need a glossary ID only if you want to use a glossary for your translations. Add the Google Translate data service [#add-the-google-translate-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Google Translate* and select **Add**. UUID-0a4e39d1-c1af-be2a-d569-e6d9b9f7a7aa Give it a desired name and column prefix. By default, `___service_google_translate` is the column prefix. UUID-38e76b9c-f744-0608-0fbe-6a5179e564d5 Choose the stage containing the columns you want to translate in **Service Data Level** and select **Add**. Select the column you want to translate from the **Column** drop-down list. If you choose **Import** in **Service Data Level**, the drop-down list **Column** displays the columns of your import stage. If you choose **Intermediate**, the drop-down list contains your intermediate-stage columns. Select a source language from the **Source language** drop-down menu. Select one or several target languages in the **Target languages** field. Hold the *CTRL* or *Cmd* key to select more than one language. In **API key**, enter your Google Cloud Translation API key. If you want the platform to run the data service every time there is a refresh in Data View, check the box **Trigger during a refresh in Data View**. Select **Save**. UUID-e6b5a372-83f4-039e-e6fc-267f742c2b6e For the platform to process a new data service, select **Import** or **Run** in the top-right corner of your site's view. If you can't see the columns that the Google Translate data service added to your feed in Data View, ensure the platform hasn't hidden them: Go to **Data View** from your site's main menu and choose the relevant stage or export in the drop-down list on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the default prefix `___service_google_translate` or a prefix that you set up in [see the relevant section](#N1679076277537) and select the eye icon next to each attribute you want Data View to display. The attribute names that the data service generates always start with three underscores (`___`), which means the platform doesn't send those attributes to your export channels. Close the pop-up menu. Add the Google Translate (Advanced) data service [#add-the-google-translate-advanced-data-service] Go to **Data Services** from your site's main menu and select **ADD SERVICE**. Search for *Google Translate (Advanced)* and select **Add**. UUID-37438840-e5a5-895d-10a3-f3f7eaaef78a Give it a desired name and column prefix. By default, `___service_google_translate` is the column prefix. UUID-2e4a0ca6-c911-29d4-2c6a-f6adfaf07ebe Choose the stage containing the columns you want to translate in **Service Data Level** and select **Add**. Select the columns you want to translate in the **Column** field. Hold the *CTRL* or *Cmd* key to select multiple columns. If you choose **Import** in **Service Data Level**, the field **Column** displays the columns of your import stage. If you choose **Intermediate**, the field contains your intermediate-stage columns. Select a source language from the **Source language** drop-down menu. Select one or several target languages in the **Target languages** field. Hold the *CTRL* or *Cmd* key to select more than one language. In **Google Cloud service account configuration (JSON)**, enter the configuration of your Google Cloud service account in the JSON format. See [Prerequisites](#section-idm353358122836556) to find more details about it. In **Location**, state the region of your Google Cloud project. In **Glossary ID (optional)**, you can provide the ID of the glossary you created in your Google Cloud project if you want more control over the consistency of your translations. If you want the platform to run the data service every time there is a refresh in Data View, check the box **Trigger during a refresh in Data View**. Select **Save**. UUID-01b57eac-b3cf-8c16-f688-5487bb31774a For the platform to process a new data service, select **Run** in the top-right corner of your site's view. If you can't see the columns that the Google Translate (Advanced) data service added to your feed in Data View, ensure the platform hasn't hidden them: Go to **Data View** from your site's main menu and choose the relevant stage or export in the drop-down list on your left. Select the menu icon on the right and then select the eye icon. Find the attributes in the list that use the default prefix `___service_google_translate` or a prefix that you set up in [see the relevant section](#N1699531016354) and select the eye icon next to each attribute you want Data View to display. The attribute names that the data service generates always start with three underscores (`___`), which means the platform doesn't send those attributes to your export channels. Close the pop-up menu. # Generate and transform content with AI data services import { Callout } from "fumadocs-ui/components/callout"; Productsup AI data services use AI to generate, rewrite, translate, and enrich your product data automatically as it comes into the platform. Instead of writing content by hand or maintaining it per product, you describe what you want, and Productsup sends the relevant attributes to an AI provider and imports the result back into your feed. Common jobs you can hand to AI include generating SEO-friendly product **titles**, writing product **descriptions**, classifying products into a **product type** or Google product category, generating **SEO keywords** or **product highlights**, shortening or lengthening existing text, translating a feed into another language, and removing product-image backgrounds. Choose the right AI data service [#choose-the-right-ai-data-service] | I want to… | Use this data service | | :--------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Generate a product title from existing attributes | [Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/generate-or-transform-values-with-the-data-service-custom-pr) | | Generate a product description | [Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/generate-or-transform-values-with-the-data-service-custom-pr) | | Generate a product type or Google product category | [Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/generate-or-transform-values-with-the-data-service-custom-pr) | | Generate SEO keywords or product highlights | [Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/generate-or-transform-values-with-the-data-service-custom-pr) | | Use Anthropic's Claude models for any of the above | [Use Claude with the data service Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/use-claude-with-the-custom-prompt-data-service) | | Shorten, lengthen, or create text from existing attributes | [Shorten, lengthen, or create text from attributes with AI data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/shorten-lengthen-or-create-text-from-attributes-with-ai-data) | | Translate a feed into another language | [Translate your feed with the Google Translate and Google Translate (Advanced) data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/translate-your-feed-with-the-google-translate-and-google-tra) | | Remove the background from product images | [Remove image background with the Image Background Removal service](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/remove-image-background-with-the-image-background-removal-se) | Use *Custom Prompt With Dynamic Values* whenever you want AI to write something new from your attributes. Use *Shorten, lengthen, or create text* when you already have text and only need to reshape its length or tone. How AI data services work [#how-ai-data-services-work] All AI data services share the same basic behavior, so the details below apply across the services listed above unless an individual article notes an exception. **Where they run.** AI data services run at the **import** or **intermediate** stage, before your data reaches mapping and export. **Which AI provider you use.** Depending on the service, you can connect to OpenAI, Microsoft Copilot (Azure OpenAI), or Anthropic's Claude. You provide your own provider account and API key, and you accept the provider's terms during setup. **Where the output goes.** Each service writes its result into a new attribute whose name starts with three underscores, for example `___service_ai_custom_prompt`. Attributes starting with `___` are working attributes: the platform doesn't send them to your export channels unless you map their values to an exported attribute yourself. This lets you review AI output before it reaches any channel. **Caching and cost.** Productsup caches the AI result per product, so identical inputs aren't re-sent to the provider on every run. This keeps output stable between runs and controls cost. The cache is tied to the exact model, context, prompt, and the values of the attributes you reference. Changing any of these — even by one character — invalidates the cache and regenerates the affected products on the next run. Productsup's integration is free; the AI provider may charge for usage based on their own pricing. **What you need.** A provider account and API key, and a [unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) set on your site. Best practices [#best-practices] **Test on a small sample first.** Before running an AI service across your full catalog, confirm the output on a small set of products. Large catalogs can take a long time and consume provider tokens, so validate the prompt and output format before scaling up. **Generate at parent level and inherit to variants.** If your feed has variant products (size, color) sharing a parent, run the AI service only for parent SKUs and propagate the result to variants by matching on Item Group ID. This cuts token cost dramatically and keeps every variant of the same product consistent, instead of generating a slightly different value per variant. **Map AI output to export deliberately.** AI results stay in `___`-prefixed working attributes so nothing reaches a channel by accident. Review the values in Data View, then map them to the attribute you actually export. For prompt-writing tips specific to Custom Prompt With Dynamic Values — such as writing precise instructions, keeping variant attributes consistent, and avoiding conditions that lose context after attribute substitution — see [Best practices](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/generate-or-transform-values-with-the-data-service-custom-pr#best-practices) on the Custom Prompt article. FAQ [#faq] **How do I generate new product titles or descriptions with AI?** Use the Custom Prompt With Dynamic Values data service. See [Generate or transform values with the data service Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/generate-or-transform-values-with-the-data-service-custom-pr) for setup steps and example prompts. **Can Productsup write SEO text or product content for me?** Yes. The AI data services can generate SEO-friendly titles, descriptions, product types, and keywords from your existing data. Start with the Custom Prompt With Dynamic Values service. **Which AI models can I use?** OpenAI models, Microsoft Copilot (Azure OpenAI), and Anthropic's Claude, depending on the service. You bring your own provider account and API key. **Does using AI data services cost extra?** Productsup's integration with the AI providers is free. The AI provider itself may charge for usage based on your prompts and data volume. Review your provider's pricing before running at scale. You are responsible for monitoring and controlling your own AI provider costs. Set a spending limit or usage budget directly on your API key with your provider (for example, in your OpenAI or Azure account) so usage can't exceed what you expect. **Will my AI-generated values change on every run?** No. Results are cached per product, so the same inputs return the same output run over run. Values regenerate only when you clear the cache or change the model, context, prompt, or a referenced attribute. The cache is temporary storage, not a permanent record. While we do our best to preserve it, we do not guarantee it. If an AI-generated value is business-critical, export it to an external system rather than relying on the cache as your only copy. See also [#see-also] * [Generate or transform values with the data service Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/generate-or-transform-values-with-the-data-service-custom-pr) * [Use Claude with the data service Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/use-claude-with-the-custom-prompt-data-service) * [Shorten, lengthen, or create text from attributes with AI data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/shorten-lengthen-or-create-text-from-attributes-with-ai-data) * [Translate your feed with the Google Translate and Google Translate (Advanced) data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/translate-your-feed-with-the-google-translate-and-google-tra) * [Remove image background with the Image Background Removal service](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/remove-image-background-with-the-image-background-removal-se) # Generate or transform values with the data service Custom Prompt With Dynamic Values import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; Introduction [#introduction] The *Custom Prompt With Dynamic Values* data service lets you use AI to generate new product content or transform existing values, then imports the result back into your feed. You write a prompt describing what you want, reference any attribute on your site inside it, and the platform sends the request to your chosen AI provider (OpenAI, Microsoft Copilot / Azure OpenAI, or Claude). Common jobs you can hand to this service include: * **Generating a product title** from attributes such as brand, product type, gender, and material. * **Generating a product description** that is keyword-rich and channel-compliant. * **Generating a product type or Google product category** for classification. * **Generating SEO keywords or product highlights** based on a product's attributes. * **Translating product content** into one or more languages, with control over tone and terminology. * **Transforming existing values**, such as converting units, reformatting text, or normalizing capitalization. Once the AI provider completes the task, it returns the result to your Productsup site, where the platform creates a new attribute — by default `___service_ai_custom_prompt` — containing the generated values. The data service is available for the **import** and **intermediate** stages. This data service uses the capabilities of OpenAI by connecting to their public API, which is why you must read and accept [OpenAI's Terms of Service](https://www.productsup.com/open-ai-terms-of-service/) before adding this data service to your site. You can do so during the setup. The data service is also compatible with Microsoft Copilot (Azure OpenAI). Productsup caches the AI-generated values for each product and doesn't send the request to OpenAI API with each run unless you decide to clear the cache and generate new values for all products again. Caching the data improves the platform's performance and guarantees the values don't change with every consecutive run saving you money for the OpenAI services. The cache is tied to the exact model, context, and prompt and the values of the attributes you reference in them. Changing any of them, even by a single character, invalidates the cache, so the next run re-sends every product to the AI tool and incurs new OpenAI costs. Change these only when you intend to regenerate all values. While Productsup offers integration with OpenAI for generating or transforming your values at no cost, the actual process is handled by OpenAI, which may involve fees for their services. Before using our AI-based data services, ensure you are familiar with OpenAI's pricing that we use in our data services. See [Pricing](https://openai.com/api/pricing/) for more information. Prerequisites [#prerequisites] To use the *Custom Prompt With Dynamic Values* data service, you need: . An OpenAI account and an API key. See [Account setup](https://platform.openai.com/docs/quickstart) and [Where do I find my OpenAI API Key?](https://help.openai.com/en/articles/4936850-where-do-i-find-my-openai-api-key). . A unique item identifier. See [Set a unique item identifier](/docs/help-center/import-data-feeds/import-your-data-into-productsup/set-a-unique-item-identifier) for more information. . If you use Microsoft Copilot (Azure OpenAI), be ready to provide your Azure resource, deployment, and API version. Add the data service Custom Prompt With Dynamic Values [#add-the-data-service-custom-prompt-with-dynamic-values] Go to **Data Services** from your site's main menu, and select **Add data service**. Search for *Custom Prompt With Dynamic Values*, select **Add**, and give it a desired name. UUID-50ce8e17-24ef-7cfd-096d-922ae53cf41b In **Column prefix**, you can provide a desired name for the attribute the platform creates to import your new values. By default, `___service_ai_custom_prompt` is the attribute name. In **Service Data Level**, choose the stage where you have the attribute you want to use in your AI prompt. Check the **Open AI terms** checkbox to confirm that you have read and accept [OpenAI's Terms of Service](https://www.productsup.com/open-ai-terms-of-service/). You can't add the data service without selecting this checkbox. Select **Add**. Only if you use *Microsoft Copilot (Azure OpenAI)*: In **Base URL**, enter the base URL of your Azure OpenAI API in the format *https\://`{resource}`.openai.azure.com/openai/deployments/`{deployment}`*, substituting `{resource}` and `{deployment}` with your parameters. In **API version**, enter your Azure OpenAI API version. The platform will append `/chat/completions?api-version={version}` automatically. UUID-fbff78a6-b749-4080-b936-92b4e18b243c This step is only for the customers who use Microsoft Copilot (Azure OpenAI). Skip this step if you use another AI provider. Add your authentication data for the OpenAI API in **API key**. In **OpenAI model**, choose the AI model for your specific use case, whether you need faster responses, more advanced reasoning, or compliance with internal AI usage guidelines. In **Context (optional)**, you can provide additional information to guide the AI tool in working with your prompt. For example, you can give examples of the expected output, describe the tone of the text you want to generate, or explain what the AI tool should and shouldn't do with your data. In **Prompt**, enter your AI prompt. It should describe how you want AI to generate or transform your values.You can add the values of an attribute to the prompt. Enter `@` and select the needed attribute from the list, or enter `@` and start typing the name of the needed attribute to filter the list and select the needed attribute. If you chose **Import** in [see the relevant section](#N1718102488418), the list you see after entering `@` displays the attributes of your import stage. If you chose **Intermediate** in that field, the list contains your intermediate-stage attributes. In **Max Response Tokens**, set the maximum number of tokens in the AI’s response. It configures max tokens for older models or max completion tokens for newer models. If you leave the field empty, the platform uses a default value of 2048. In **Request timeout (seconds)**, define the waiting time for a response before the data service stops the attempts. Recommended time is 90 seconds. An empty value sets no timeout. This means that requests might take an indefinite time depending on the context, size of data, and OpenAI traffic spikes. In **Request concurrency**, specify the number of parallel requests to OpenAI. This feature speeds up processing for large datasets. Maximum concurrency depends on your Open AI subscription terms. If you want the platform to clear the cache for all products, turn on **Clear cache before the next run**. After the next run, it returns to the *Off* state, and you need to activate it again whenever you want to clear the cache and generate new texts. If you want to stop requests to OpenAI API when a plan / billing issue occurs, turn on **Stop requests when a plan issue is detected**. When enabled, it will stop all requests to OpenAI and use cached data where available if a plan issue is detected, not allowing the data service to fail. This could be due to invalid API key, deactivated account, billing hard limit reached, insufficient quota or expired API key. Select **Save**. UUID-cce4bd6e-701b-7993-9388-1b6a94244f3a For the platform to process a new data service, select **Run** in the top-right corner of your site's view. If you can't see your new values in Data View, ensure the platform hasn't hidden it: Go to **Data View** from your site's main menu and choose the relevant stage or export in the dropdown on your left. Select the menu icon on the right and then select the eye icon. Find the attribute `___service_ai_custom_prompt_` in the list and select the eye icon next to it. Close the pop-up. The naming of the attribute created by the *Custom Prompt With Dynamic Values* data service depends on the input you provided in [see the relevant section](#N1718102582972). The names of the attributes the data service generates always start with three underscores (`___`), which means the platform doesn't send such attributes to your export channels. Best practices [#best-practices] **Test on a small sample first.** Run the service on a handful of products and review the output in Data View before processing your full catalog. Large catalogs take longer and consume more provider tokens, so validate your prompt and output format before scaling up. **Generate at parent level and inherit to variants.** If your feed has variants (size, color) that share a parent product, run the service only for parent products and propagate the result to variants by matching on Item Group ID. This reduces token cost and keeps every variant of the same product consistent, instead of generating a slightly different value per variant. **For values that must stay identical across variants, generate a base and append the rest.** For example, to build a title that ends in size and color, generate the base title (Brand — Product — Gender — Material) once at parent level, then append the size and color attributes with Append rule boxes. This guarantees consistency across variants and avoids re-running AI per variant. **Reference attribute values, not attribute names.** Whenever the platform sends your prompt to the AI provider, it replaces each `@attribute` placeholder with that row's actual value, not the attribute's name. This can create confusing conditions: a prompt like `If @dimming = "Yes", do X` becomes `If Yes = "Yes", do X` for any row where `dimming` equals *Yes*, since the AI provider never sees the attribute name to know what "Yes" refers to. Phrase conditions so they still make sense after the substitution, or describe the context in plain language rather than comparing a value to itself. Edit the data service Custom Prompt With Dynamic Values [#edit-the-data-service-custom-prompt-with-dynamic-values] Go to **Data Services** from your site's main menu. Change the settings of the needed data service: 1. To deactivate a data service, choose the pause icon next to the desired data service. 2. Select the cogwheel icon (**⚙**) next to the desired data service to edit other settings and select **Save**. Delete the data service Custom Prompt With Dynamic Values [#delete-the-data-service-custom-prompt-with-dynamic-values] Go to **Data Services** from your site's main menu. To stop a data service from affecting your feed without deleting the data service itself, you can choose the pause icon next to the desired data service. Select the cogwheel icon UUID-e19d1a4d-9ea0-6607-b841-3cd22c1101e2 next to the desired data service. In the **Danger Area** panel, select **Remove this service**. Select **Yes**. Common use cases and example prompts [#common-use-cases-and-example-prompts] The prompts below are starting points. Adjust the attributes and guidelines to match your feed and target channel. Enter them in the **Prompt** field when you add the data service. Generate a product title [#generate-a-product-title] Produce a consistent, SEO-friendly title from your product attributes. ``` You are an expert in eCommerce SEO and product title optimization. Using the product data provided, generate a concise, SEO-friendly title under 150 characters in this order: Brand — Product — Gender — Material. Guidelines: - Start with the brand if available. - Derive the product name naturally from the attributes. - Use dash separators and Title Case. - Include pack, volume, or size only if explicitly available. - Avoid promotional adjectives. - Return only the final title, with no quotes or explanation. Product data: Brand: @brand Product type: @product_type Gender: @gender Material: @material ``` Example output: `Acme — Running Shoes — Men — Mesh` Generate a product description [#generate-a-product-description] Produce a short, keyword-rich description suitable for shopping channels. ``` You are an expert in eCommerce SEO and product description optimization. Using the product data provided, write a clear, keyword-rich description of no more than five sentences. Guidelines: - Use a natural, informative tone. - Begin with the brand and product type. - Highlight key features, materials, and use cases. - Avoid promotional or exaggerated language. - Exclude pricing, shipping, and return details. - Return only the description text. Product data: Brand: @brand Product type: @product_type Material: @material Existing description: @description ``` Generate a product type or Google product category [#generate-a-product-type-or-google-product-category] Classify a product into a standardized category hierarchy. ``` You are an expert in product taxonomy and classification. Using the product data provided, generate a single standardized product type. Guidelines: - Use a hierarchy 3–5 levels deep, separated by " > ". - Avoid brand names, colors, and sizes. - Choose the most specific applicable category. - Use Title Case. - Return only the product type. Product data: Product title: @title Existing description: @description ``` Example output: `Women > Clothing > Jeans > Mom Jeans` Generate SEO keywords [#generate-seo-keywords] Produce a set of search keywords from a product's attributes. ``` You are an eCommerce SEO specialist. Using the product data provided, generate 5–8 relevant search keywords for this product. Guidelines: - Base keywords on the product's type, use cases, and key attributes. - Order from most to least relevant. - Separate keywords with commas. - Return only the keyword list. Product data: Product title: @title Product type: @product_type ``` Translate product content [#translate-product-content] Because you can give the model context — tone, target audience, and product-specific terminology — this service can produce translations that read more naturally and stay more on-brand than generic machine translation. It's a strong option when translation quality matters or when you want to enforce a glossary or house style. ``` You are a professional eCommerce translator. Translate the product text below into French. Guidelines: - Preserve meaning, tone, and product-specific terminology. - Keep units and formatting unchanged. - Do not add or omit information. - Return only the translated text. Text to translate: @product_description ``` **Translate into several languages in one request** If you need the same text in multiple languages, you can save processing time and tokens by asking for all of them in a single request, separated by a delimiter you choose. You then split the combined result into one attribute per language and map each to the correct localized field. ``` You are a professional eCommerce translator. Translate the product text below into French, German, and Spanish. Guidelines: - Preserve meaning, tone, and product-specific terminology in each language. - Return the three translations on a single line in this exact order: French|||German|||Spanish - Separate them with ||| (three pipe characters) and nothing else. - Do not add language names, labels, or explanations. Text to translate: @product_description ``` The service returns one attribute containing all three translations joined by `|||`. To split them, add the [Explode Columns](/docs/help-center/map-and-optimize-your-data/data-services/split-one-column-into-multiple-columns-with-the-explode-colu) data service, choose that attribute, and split it on `|||`. This creates a separate column per language, which you can then map to the localized attribute for each market. Choose a delimiter that won't appear in your content (for example `|||` or another uncommon token) so the split stays clean. Transform existing values [#transform-existing-values] The service isn't limited to generating new content — it can also reshape values you already have. Describe the transformation in your prompt and reference the attribute to transform. For example, convert dimensions from one unit to another, reformat a date, or standardize capitalization across a text attribute. FAQ [#faq] **How do I generate new product titles or descriptions with AI?** Add the Custom Prompt With Dynamic Values data service, then enter a prompt describing the title or description you want and reference your attributes, such as brand, product type, gender, or material, inside it. See the example prompts above. **Can I generate a Google product category or product type?** Yes. Use a prompt that asks for a standardized category hierarchy and reference your title and description attributes. See the product type example above. **Which attributes can I use in my prompt?** Any attribute in the stage you selected in Service Data Level. Type `@` in the Prompt field and pick from the list, or type `@` followed by the attribute name to filter. **Will my generated values change on every run?** No. Results are cached per product, so identical inputs return the same output run over run. Values regenerate only when you clear the cache or change the model, context, prompt, or a referenced attribute. **How do I keep titles consistent across product variants?** Generate the value at parent level and inherit it to variants by matching on Item Group ID. See [Best practices](#best-practices) above. **Can I translate my product content with this service?** Yes. Giving the model context — tone, audience, and terminology — often produces more natural, on-brand translations than generic machine translation. To translate into several languages efficiently, ask for all of them in one prompt separated by a delimiter, then split the result into one column per language with the Explode Columns data service. See [Translate product content](#translate-product-content) above. See also [#see-also] * [Generate and transform content with AI data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services) — overview of every AI-powered data service and when to use each. * [Use Claude with the data service Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/use-claude-with-the-custom-prompt-data-service) — use Anthropic's Claude models with this data service through their OpenAI-compatible endpoint. * [Shorten, lengthen, or create text from attributes with AI data services](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/shorten-lengthen-or-create-text-from-attributes-with-ai-data) — reshape text you already have, rather than generating new content. # Use Claude with the data service Custom Prompt With Dynamic Values import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; The *Custom Prompt With Dynamic Values* data service connects to an OpenAI-compatible AI tool. Anthropic offers an OpenAI-compatible endpoint for its Claude models, so you can use Claude with the existing data service by changing only the connection settings — the **Base URL**, **API key**, and **OpenAI model** fields. You don't need a new data service. This page builds on [Generate or transform values with the data service Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/generate-or-transform-values-with-the-data-service-custom-pr). Set up the data service as described there, and apply the Claude-specific settings on this page. You can use this setup to test and evaluate how Claude works with your prompts. Before relying on it for a production feed, contact [support@productsup.com](mailto:support@productsup.com) so we can advise on the right setup for your use case. While Productsup offers integration with Claude for generating or transforming your values at no cost, the actual process is handled by Anthropic, which may involve fees for their services. Before using our AI-based data services, ensure you are familiar with Anthropic's pricing that we use in our data services. See [Pricing](https://platform.claude.com/docs/en/about-claude/pricing) for more information. Prerequisites [#prerequisites] To use Claude with the *Custom Prompt With Dynamic Values* data service, you need: * A Claude (Anthropic) API key with access to the model you want to use. * The *Custom Prompt With Dynamic Values* data service added to a column on your site. See [Generate or transform values with the data service Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/generate-or-transform-values-with-the-data-service-custom-pr). Configure the data service to use Claude [#configure-the-data-service-to-use-claude] In the settings of your *Custom Prompt With Dynamic Values* data service, change the following fields. In **Base URL**, enter `https://api.anthropic.com`. Don't add `/v1` to the end of the URL. Leave **API version** empty. Entering a value in **API version** switches the data service into Microsoft Copilot (Azure OpenAI) mode, which Claude doesn't support. Keep this field empty when you use Claude. In **API key**, enter your Claude (Anthropic) API key. In **OpenAI model**, enter an exact Claude model identifier, for example `claude-sonnet-4-6` or `claude-opus-4-8`. This field accepts any text and isn't validated, so an invalid identifier fails only when the data service runs. See [Anthropic's model overview](https://platform.claude.com/docs/en/about-claude/models/overview) for the available identifiers. In **Max Response Tokens**, set the maximum number of tokens in Claude's response, or leave the field empty to use the platform default of 2048. Select **Save**, then select **Run** in the top-right corner of your site's view to process the data service. The context, prompt, request timeout, request concurrency, and caching settings work the same way as they do with OpenAI. A successful run returns Claude's generated values in your column, the same as a run with OpenAI. The platform creates the `___service_ai_custom_prompt` attribute containing the generated values. Limitations [#limitations] The following limitations apply when you use Claude through this data service: | Limitation | Detail | | -------------------------------- | -------------------------------------------------------------------------------------------------------------------- | | Reasoning effort is ignored | The **Reasoning effort** setting has no effect with Claude. | | Temperature is capped at 1 | Claude accepts temperature values from 0 to 1. Values above 1 are silently reduced to 1. | | No prompt caching | This setup doesn't cache prompts on Anthropic's side, which can affect cost and latency on large, high-volume feeds. | | Model identifier isn't validated | The **OpenAI model** field accepts any text. An invalid Claude identifier fails only when the data service runs. | Troubleshooting [#troubleshooting] | Symptom | Likely cause | Resolution | | ------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------ | | Not-found error | `/v1` was added to **Base URL**, or **API version** is set | Enter `https://api.anthropic.com` exactly, and clear the **API version** field | | Authentication error | Wrong key, or the data service is in Azure OpenAI mode | Use a Claude API key, and make sure **API version** is empty | | Model error | Invalid or unavailable model identifier | Enter an exact Claude model identifier that your key can access | | Output ignores reasoning effort | Expected behavior | Claude ignores the **Reasoning effort** setting | See also [#see-also] * [Generate or transform values with the data service Custom Prompt With Dynamic Values](/docs/help-center/import-data-feeds/enhance-your-import-data-through-data-services/generate-and-transform-content-with-ai-data-services/generate-or-transform-values-with-the-data-service-custom-pr) * [Anthropic — model overview](https://platform.claude.com/docs/en/about-claude/models/overview) # ManoMano's list of mandatory category-specific attributes import { Callout } from "fumadocs-ui/components/callout"; Introduction [#introduction] This document lists all the attributes mandatory for various product categories in the *ManoMano Product* export. See [Send your product and order data to ManoMano](/docs/help-center/export-data-feeds/special-export-setups/send-your-product-and-order-data-to-manomano) to set up the *ManoMano Product* export. Some ManoMano attributes shown as mandatory in Dataflow are only mandatory for products of specific categories. For example, the attribute **%\_main\_material** is only mandatory for the product category *Electric fence accessories*. To check the categories where your mapped attributes are mandatory, you should use the Analyzer feature. Go to **Data View**, choose the export *ManoMano Product* from the drop-down menu on the left, and select **Analyze** in the column of each mandatory attribute. The Analyzer feature opens to your right and shows the test *ManoMano - Category Specific Mandatory* that refers you to a help center document listing all categories where each ManoMano attribute is mandatory. See [ManoMano's list of mandatory category-specific attributes](/docs/help-center/export-data-feeds/special-export-setups/send-your-product-and-order-data-to-manomano/manomanos-list-of-mandatory-category-specific-attributes). Find the categories relevant for each mandatory attribute and ensure that products of these categories have values in their mandatory attributes. UUID-397ce174-8c41-1b4f-bd6f-f66fe78cba88 Use your browser's features to search this page for relevant product categories and find out which attributes you need to send to the marketplace. Mandatory attributes and their categories [#mandatory-attributes-and-their-categories] | Attribute names | Categories they are mandatory for | | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **%\_main\_material** | Electric fence accessories | | **Accessories\_included** | Electric fence accessories | | **Amperage** | LED transformer, Switch mode power supplies, Bench power supplies, DIN rail power supplies, Standard power supply units, USB chargers, Energy monitors, Heat trace cable, Industrial sockets and site transformers, Switches and switch components, Plug adapters, Electric plugs, Surge protectors, Sockets and socket components, Wind and solar charge controller, Off-grid and on-grid solar kits, Contactors, Cartridge fuses, Fuses, Consumer unit timers, Consumer unit RCDs, SPDs, Distribution blocks, Shunt trips, Consumer unit transfomers, RCD blocks, MCBs, RCDs and RCCBs, Car fuses, Boiler printed circuit boards, Motorised valves, Electrode holders, Arc welders, MIG torches, TIG torches | | **Angle,\_tilt** | Pop-up sprinklers, Motion sensors, Indoor and outdoor CCTV cameras, Oil burner nozzles, Flue flashing kits, PVC waste pipe fittings, Belt sanders, Rotarymetal cutting saws disc cutter | | **Availability\_of\_spare\_parts** | Electric fence accessories | | **Battery\_capacity** | Cordless lawnmowers, Other batteries, Alarm batteries, Electric gate batteries, Battery storage, Car and motorcycle batteries, Staple and nail guns, Rivet guns, Power tool batteries | | **Battery\_life** | Robotic lawnmowers, Pool robots, Handheld vacuum cleaners, Robotic vacuum cleaners, Emergency lighting, Paraffin heaters, Walkie talkies, Shower radios and speakers