Product Exporter

A package that helps with exporting commercetools products from the commercetools platform. The products can be exported in JSON format, or as chunks that can be piped to a parser for more export formats.


The constructor accepts four arguments:

  • apiConfig (Object): AuthMiddleware options for authentication on the commercetools platform. (Required. See here)
  • exportConfig (Object): Internal Export configurations
    • batch (Number): Amount of products to fetch for each API call
    • expand (Array): An array of strings signifying reference fields to expand in the returned product
    • json (Boolean): Specify if products returned should be in JSON file format. If set to false, the products will be output in chunks (Default: true)
    • predicate (String): Query string specifying (where) predicate. More info on predicates here (Optional)
    • staged (Boolean): Specify if prices should be fetched from all products (true) or only published products (false) (Optional. Default: false)
    • total (Number): The total number of products to fetch
  • An optional logger object having four methods (info, warn, error and debug)
  • accessToken (String): Access token to be used to authenticate requests to API. Requires scope of [view_products, view_customers]


npm install @commercetools/product-exporter --global


Usage: product-exporter [options]
Export products from the commercetools platform

  --help, -h        Show help text.                                    [boolean]
  --version, -v     Show version number                                [boolean]
  --projectKey, -p  API project key                          [string] [required]
  --apiUrl          The host URL of the HTTP API service
                             [string] [default: ""]
  --authUrl         The host URL of the OAuth API service
                            [string] [default: ""]
  --accessToken     CTP client access token
                    Required scopes: ['view_products', 'view_customers'][string]
  --output, -o      Path to output                  [string] [default: "stdout"]
  --batchSize, -b   Amount of products to fetch for each API call (max: 500)
                                                          [number] [default: 20]
  --expand, -e      Reference field or fields to expand in the returned products
  --exportType, -e  Flag if products should be exported as `JSON` strings or
                    chunks [string] [choices: "json", "chunk"] [default: "json"]
  --predicate       `Predicate` specifying characteristics of products to fetch
  --staged, -s      Specify if all or published products should be fetched
  --total, -t       Total number of products to fetch                   [number]
  --logLevel        Logging level: error, warn, info or debug
                                                      [string] [default: "info"]
  --prettyLogs      Pretty print logs to the terminal                  [boolean]
  --logFile         Path to file where logs should be saved
                                      [string] [default: "product-exporter.log"]

Info on flags

  • The --output flag specifies where to output/save the exported products.
    • If the file specified already exists, it will be overwritten.
    • The default location for status report logging is the standard output.
    • If no output path is specified, the exported products will be logged to the standard output.
  • The --predicate flag specifies an optional (where) query predicate to be included in the request. This predicate should be wrapped in single quotes ('single quoted predicate'). More info on predicates here
  • The --expand flag specifies the Reference or References to expand in the returned products. The required references for expansion should be passed in as normal strings separated by a space. More information about reference expansion can be found here
  • The --exportType flag specifies if products returned should be in JSON file format or chunks. The chunk output is particularly useful if a different output format is desired (such as CSV), in which case, the chunks can be piped to a parser to get the desired format.
  • The --staged flag specifies the projection of the products to be fetched.
    • If passed true, published and unpublished products are retrieved
    • If passed false (or omitted), only published products are retrieved


For more direct usage, it is possible to use this module directly:

import ProductExporter from '@commercetools/product-exporter'
import fs from 'fs'

const apiConfig = {
  host: '',
  apiUrl: '',
  projectKey: 'node-test-project',
  credentials: {
    clientId: '123456hgfds',
    clientSecret: '123456yuhgfdwegh675412wefb3rgb',
const exportConfig = {
  batch: 20,
  expand: ['productType', 'masterVariant.prices[*].customerGroup']
  json: true,
  predicate: 'description="new stocks"',
  staged: true,
  total: 100,
const logger = {
  error: console.error,
  warn: console.warn,
  info: console.log,
  debug: console.debug,
const accessToken = 'my-unique-access-token'

const productExporter = new ProductExporter(

// Register error listener
outputStream.on('error', errorHandler)

outputStream.on('finish', () => process.stdout.write('done with export'))

results matching ""

    No results matching ""