{"id":19622147,"url":"https://github.com/commercetools/sphere-node-product-csv-sync","last_synced_at":"2025-04-28T03:32:24.313Z","repository":{"id":13241959,"uuid":"15926737","full_name":"commercetools/sphere-node-product-csv-sync","owner":"commercetools","description":"Component to import, export and update your SPHERE.IO products via CSV.","archived":false,"fork":false,"pushed_at":"2024-11-17T12:11:15.000Z","size":2911,"stargazers_count":13,"open_issues_count":75,"forks_count":11,"subscribers_count":63,"default_branch":"master","last_synced_at":"2025-04-20T15:17:59.579Z","etag":null,"topics":["audit-import-export"],"latest_commit_sha":null,"homepage":"https://impex.sphere.io","language":"CoffeeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/commercetools.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2014-01-15T06:19:41.000Z","updated_at":"2024-11-17T12:11:19.000Z","dependencies_parsed_at":"2023-12-03T22:25:58.766Z","dependency_job_id":"35994c7a-f64e-499d-b2a4-1ad85ae7058b","html_url":"https://github.com/commercetools/sphere-node-product-csv-sync","commit_stats":null,"previous_names":["sphereio/sphere-node-product-csv-sync"],"tags_count":162,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commercetools%2Fsphere-node-product-csv-sync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commercetools%2Fsphere-node-product-csv-sync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commercetools%2Fsphere-node-product-csv-sync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commercetools%2Fsphere-node-product-csv-sync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/commercetools","download_url":"https://codeload.github.com/commercetools/sphere-node-product-csv-sync/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251246348,"owners_count":21558762,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audit-import-export"],"created_at":"2024-11-11T11:26:13.004Z","updated_at":"2025-04-28T03:32:24.306Z","avatar_url":"https://github.com/commercetools.png","language":"CoffeeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv style=\"background-color: yellow; color: black; padding: 10px; text-align: center; font-weight: bold;\"\u003e\n  \u003ch2\u003e🚨 Non-maintainable 🚨\u003c/h2\u003e\n  \u003cp\u003eStarting January 1, 2025, we will no longer provide maintenance or updates for the CLI ImpEx tools. After this date, this tool will no longer receive bug fixes, security patches, or new features.\u003c/p\u003e\n\u003c/div\u003e\n\n\n\u003cimg src=\"https://impex.europe-west1.gcp.commercetools.com/static/images/ct-logo.svg\" alt=\"commercetools logo\" width=\"200\"\u003e\n\n\n# Node.js Product CSV sync\n\n[![NPM](https://nodei.co/npm/sphere-node-product-csv-sync.png?downloads=true)](https://www.npmjs.org/package/sphere-node-product-csv-sync)\n\n[![Build Status](https://travis-ci.org/sphereio/sphere-node-product-csv-sync.png?branch=master)](https://travis-ci.org/sphereio/sphere-node-product-csv-sync) [![NPM version](https://badge.fury.io/js/sphere-node-product-csv-sync.png)](http://badge.fury.io/js/sphere-node-product-csv-sync) [![Coverage Status](https://coveralls.io/repos/sphereio/sphere-node-product-csv-sync/badge.png)](https://coveralls.io/r/sphereio/sphere-node-product-csv-sync) [![Dependency Status](https://david-dm.org/sphereio/sphere-node-product-csv-sync.png?theme=shields.io)](https://david-dm.org/sphereio/sphere-node-product-csv-sync) [![devDependency Status](https://david-dm.org/sphereio/sphere-node-product-csv-sync/dev-status.png?theme=shields.io)](https://david-dm.org/sphereio/sphere-node-product-csv-sync#info=devDependencies)\n\nThis component allows you to import, update and export commercetools Products via CSV.\nFurther you can change the publish state of products.\n\n# Setup\n\nInstall `sphere-node-product-csv-sync` module as a global module:\n```bash\nnpm install sphere-node-product-csv-sync --global\n```\nFrom now you can use the `product-csv-sync` command with parameters specified below. \n\n## General Usage\n\nThis tool uses sub commands for the various task. Please refer to the usage of the concrete action:\n- [import](#import)\n- [export](#export)\n- [template](#template)\n- [state](#product-state)\n\nGeneral command line options can be seen by simply executing the command `node lib/run`.\n```\n./bin/product-csv-sync\n  Usage: product-csv-sync [globals] [sub-command] [options]\n\n  Commands:\n\n    import [options]\n       Import your products from CSV into your SPHERE.IO project.\n\n    state [options]\n       Allows to publish, unpublish or delete (all) products of your SPHERE.IO project.\n\n    export [options]\n       Export your products from your SPHERE.IO project to CSV using.\n\n    template [options]\n       Create a template for a product type of your SPHERE.IO project.\n\n\n  Options:\n\n    -h, --help                       output usage information\n    -V, --version                    output the version number\n    -p, --projectKey \u003ckey\u003e           your SPHERE.IO project-key\n    -i, --clientId \u003cid\u003e              your OAuth client id for the SPHERE.IO API\n    -s, --clientSecret \u003csecret\u003e      your OAuth client secret for the SPHERE.IO API\n    --sphereHost \u003chost\u003e              SPHERE.IO API host to connect to\n    --sphereAuthHost \u003chost\u003e          SPHERE.IO OAuth host to connect to\n    --timeout [millis]               set timeout for requests (default is 300000)\n    --verbose                        give more feedback during action\n    --debug                          give as many feedback as possible\n```\n\nFor all sub command specific options please call `./bin/product-csv-sync \u003csub command\u003e --help`.\n\n\n## Import\n\nThe import command allows to create new products with their variants as well to update existing products and their variants.\nDuring update it is possible to concentrate only on those attributes that should be updated.\nThis means that the CSV may contain only those columns that contain changed values.\n\n**NOTE:** When importing [LocalizedString](http://dev.commercetools.com/http-api-types.html#localizedstring) fields (eg. name, description, etc.), all languages have to be provided during the import or the missing ones will be deleted.\n\n### Usage\n\n```\n./bin/product-csv-sync import\n\n  Usage: import --projectKey \u003cproject-key\u003e --clientId \u003cclient-id\u003e --clientSecret \u003cclient-secret\u003e --csv \u003cfile\u003e\n\n  Options:\n\n    -h, --help                                 Output usage information.\n    -c, --csv \u003cfile\u003e                           CSV file containing products to import.\n    -z, --zip \u003cfile\u003e                           ZIP archive containing multiple product files to import.\n    -l, --language [lang]                      Default language to using during import (for slug generation, category linking etc. - default is en).\n    --csvDelimiter [delim]                     CSV Delimiter that separates the cells (default is comma - \",\").\n    --multiValueDelimiter [delim]              Delimiter to separate values inside of a cell (default is semicolon - \";\").\n    --customAttributesForCreationOnly \u003citems\u003e  List of comma-separated attributes to use when creating products (ignore when updating).\n    --continueOnProblems                       When a product does not validate on the server side (400er response), ignore it and continue with the next products.\n    --suppressMissingHeaderWarning             Do not show which headers are missing per produt type.\n    --allowRemovalOfVariants                   If given variants will be removed if there is no corresponding row in the CSV. Otherwise they are not touched.\n    --mergeCategoryOrderHints                  Merge category order hints instead of replacing them with value readed from an import file.\n    --publish                                  When given, all changes will be published immediately.\n    --noStaged                                 When given, only changes in the current input file will be published, and Ignored this flag if found --publish\n    --updatesOnly                              Won't create any new products, only updates existing.\n    --dryRun                                   Will list all action that would be triggered, but will not POST them to SPHERE.IO.\n    --defaultState                             When given, specifies the key of the state to assign imported products to, if they don't have one.\n    -m, --matchBy [value]                      Product attribute name which will be used to match products. Possible values: id, slug, sku, \u003ccustom_attribute_name\u003e. Default: id. Localized attribute types are not supported for \u003ccustom_attribute_name\u003e option.\n```\n\n### CSV Format\n\n#### Base attributes\n\nTo create or update products you need to provide the following headers and columns. \nYou will always need the `productType` on the master variant and should be blank for rest of the variants. Further you need to provide the `variantId` to define the specific variants and Master Variant should be always at the top.\nNo Longer will work -\u003e (~~The master variant should always have the variantId 1.~~)\n\nYou can define the `productType` via id or name (as long as it is unique).\nOther base attributes which can be specified are `sku`, `key` and `variantKey`.\n\n#### Variants\n\nVariants are defined by leaving the `productType` cell empty:\n```\nproductType,name,variantId,variantKey,myAttribute\ntypeName,myProduct,1,,value\n,,2,variantKey2,other value\n,,3,variantKey3,val\notherType,nextProduct,1,,foo\n,,2,variantKey4,bar\n```\nThe CSV above contains:\n```\nrow 0: header\nrow 1: product with master variant\nrow 2: 2nd variant of product in row 1\nrow 3: 3rd variant of product in row 1\nrow 4: product with master variant\nrow 5: 2nd variant of product in row 4\n```\n\nNon required product attributes\n- slug\n- state\n- metaTitle\n- metaDescription\n- metaKeywords\n\n\u003e The slug is actually required by SPHERE.IO, but will be generated for the given default language out of the `name` column, when no slug information given.\n\nNon required variant attributes\n- sku\n\n#### Localized attributes\n\nThe following product attributes can be localized:\n- name\n- description\n- slug\n- metaTitle\n- metaDescription\n- metaKeywords\n- searchKeywords\n\n\u003e Further any custom attribute of type `ltext` can be filled with several language values.\n\nUsing the command line option `--language`, you can define in which language the values should be imported.\n\n\u003e Using the `--language` option you can define only a single language\n\nMultiple languages can be imported by defining for each language an own column with the following schema:\n```\nproductType,key,name.en,name.de,description.en,description.de,slug.en,slug.de\nmyType,productKey,my Product,mein Produkt,foo bar,bla bal,my-product,mein-product\n```\n\nThe pattern for the language header is:\n`\u003cattribute name\u003e.\u003clanguage\u003e`\n\n##### Update of localized attributes\n\nWhen you want to update a localized attribute, you have to provide all languages of that particular attribute in the CSV file.\nOtherwise the language that isn't provided will be removed.\n\n#### Set attributes\n\nIf you have an attribute of type `set`, you can define multiple values within the same cell separating them with `;`:\n```\nproductType,...,colors\nmyType,...,green;red;black\n```\nThe example above will set the value of the `colors` attribute to `[ 'green', 'red', 'black' ]`\n\n#### SameForAll constrainted attributes\n\nTo not DRY (don't repeat yourself) when working with attributes that are constrained with `SameForAll`,\nyou simply have to define the value for all variants on the masterVariant.\n```\nproductType,sku,mySameForAllAttribute\nmyType,123,thisIsTheValueForAllVariants\n,234,\n,345,thisDifferentValueWillBeIgnored\n```\n\n\u003e Please note, that values for those attributes on the variant rows are completely ignored\n\n\n#### Product state\n\nIn the `state` column, you can define the state of a product. This column must contain the [state](https://docs.commercetools.com/http-api-projects-states.html#state) key. **Unlike the state command above, this state is used for [state transitions](https://docs.commercetools.com/http-api-projects-products.html#transition-state)**\n\nIn order to transition the state of a product, simply set the state key in the `state` column to the next state.\n\n#### Tax Category\n\nJust provide the name of the tax category in the `tax` column.\n\n#### Categories\n\nIn the `categories` column you can define a list of categories the product should be categorized in separated by `;`.\n\nThe tool supports 4 different ways to reference a category. The match works on the following order:\n- externalId\n- named path\n- name\n- key\n\nThe following example contains 3 categories defined by their named path. The path starts at the root level and all segments are separated with `\u003e`.\n```\nRoot\u003eCategory\u003eSameSubCategory;Root2;Root\u003eCategory2\u003eSameSubCategory\n```\nUsing the full path of the category name allows you to link to leaf categories with same names but different bread crumb.\n\n\u003e You can also just use the category name as long as it is unqiue within the whole category tree.\n\n#### Prices\n\nIn the `prices` column you can define a list of prices for each variant separated by `;`:\n```\nCH-EUR 999 B2B;EUR 899|745;USD 19900 #retailerA;DE-EUR 1000 B2C#wareHouse1;GB-GBP 999$2001-09-11T14:00:00.000Z~2015-10-12T14:00:00.000Z;EUR 500%EUR 450 @1000\n```\nThe pattern for one price is:\n`\u003ccountry\u003e-\u003ccurrenyCode\u003e \u003ccentAmount\u003e|\u003cdiscountedCentAmount\u003e \u003ccustomerGroupName\u003e#\u003cchannelKey\u003e$\u003cvalidFrom\u003e~\u003cvalidUntil\u003e%\u003ctiers\u003e`\n\nDate values `validFrom` and `validUntils` has to be in [ISO 8601 format](http://dev.commercetools.com/http-api-types.html#datetime).\n\nTiers values has to be an array of priceTier (see [format](https://docs.commercetools.com/http-api-projects-products#pricetier)).\n\n```\nExamples:\n1.  Tiers with single priceTier.\n      - Minimum quantity of 1000 and price of EUR 450.\n          Represented as  `EUR 450 @1000`\n\n1. Tiers with single priceTier of minimum quantity of 1000 and price of EUR 450.\n    Represented as `EUR 450 @1000`\n\n2. Tiers with multiple priceTier.\n    - Minimum quantity of 100 and price of EUR 200\n    - Minimum quantity of 200 and price of EUR 190\n    - Minimum quantity of 300 and price of EUR 180\n        Represented as `EUR 200 @100%EUR 190 @200%EUR 180 @300`\n\n3. Price with tiers(using the tiers in the example 2 above) and the base price of EUR 250.\n    Represented as `EUR 250%EUR 200 @100%EUR 190 @200%EUR 180 @300`\n```\n\u003e For the geeks: Have [a look at the regular expression](https://github.com/sphereio/sphere-node-product-csv-sync/blob/e8329dc6a74a560c57a8ab1842decceb42583c0d/src/coffee/constants.coffee#L33) that parses the prices.\n\nmandatory:\n- currenyCode\n- centAmount\n\noptional:\n- country\n- customerGroupName\n- channelKey\n- centAmount for of discounted price (only for export)\n- validFrom\n- validUntil\n- tiers\n\n#### Numbers\n\nNatural numbers are supported. Negative numbers are prepended with a minus (e.g. `-7`).\n\n\u003e Please note that the there is no space allowed between the minus symbol and the digit\n\n#### Images\n\nIn the `images` column you can define a list of urls for each variant separated by `;`:\n```\nhttps://example.com/image.jpg|labelName|wxh;http://www.example.com/picture.bmp|labelName|wxh\n```\n\nIn the `urls` you can add label and dimensions seperated by pipe(|):\n\n```\nhttps://example.com/image.jpg|MyImage|400x200\n\n----------Image URL-----------|---Label---|--WxH--\n```\n\u003e Skipping label and dimensions will remove the value.\n\u003e If you want to skip Label Empty but some value on dimension then this way you can do it:-\n  Ex: https://example.com/image.jpg||400x200\n\n\n\u003e In general we recommend to import images without the protocol like `//example.com/image.png`\n\n#### SEO Attributes\n\nThe current implementation allows the set the SEO attributes only if all three SEO attributes are present.\n- metaTitle\n- metaDescription\n- metaKeywords\n\n\n#### Search Keywords\nYou can import [Search Keywords](http://dev.commercetools.com/http-api-projects-products.html#search-keywords) that enables to use the Search Suggestion Feature. You can define a list of keywords for each language separated by `;`:\n\n```\nsearchKeywords,searchKeywords.fr-BE,searchKeywords.de\nLondon;Bristol;Manchester,Liège;Bruxelles;Anvers,Berlin;Köln;München\n```\n\n\nAt the moment this importer only supports the default tokenizer, which means each of the semicolon-separated strings will be treated as a whole token. Therefore you have to separate everything that you want to see as a separate token into one entry delimited by semicolon.\n\n#### Category Order Hints\n\nIn the `categoryOrderHints` column you can define a list of category order hints for each category that the product belongs to separated by `;`:\n```\ne8a19675-82af-4c00-98e6-fa9a020b1c51:0.4;myCategoriesName:0.9;myExternalCategoryId:0.2\n```\nThe pattern a category order hint is as follows:\n```\n\u003ccategory-ref\u003e:\u003corder-hint\u003e\n```\nNote:\n- `\u003ccategory-ref\u003e` must be a valid ID referencing an existing category that the product is assigned to. You can reference the category using its `id`, `name` or `externalId`.\n- `\u003corder-hint\u003e` has to be a String that is representing a decimal value that is \u003e 0.0 and \u003c 1.0 (0 \u003c orderHint \u003c 1)\n\n#### Publishing\n\nProducts with `publish` column set to `true` will be published right after the create/update request is finished. If there are multiple variants of the same product, changes will be published if at least one variant has `publish` set to `true`. Example CSV:\n```csv\nproductType,variantId,sku,name,slug,publish\nmyType,1,sku,productName,productSlug,true\n```\n\nThis will create new product and publish it afterward.\n\n## Product State\n\nThis sub command allows you to publish/unpublish or delete as set of (or all) products with a single call.\n\n### Usage\n\n```\n./bin/product-csv-sync state --help\n\n  Usage: state --projectKey \u003cproject-key\u003e --clientId \u003cclient-id\u003e --clientSecret \u003cclient-secret\u003e --changeTo \u003cstate\u003e\n\n  Options:\n\n    -h, --help                             output usage information\n    --changeTo \u003cpublish,unpublish,delete\u003e  publish unpublished products / unpublish published products / delete unpublished products\n    --csv \u003cfile\u003e                           processes products defined in a CSV file by either \"sku\" or \"id\". Otherwise all products are processed.\n    --continueOnProblems                   When a there is a problem on changing a product's state (400er response), ignore it and continue with the next products\n```\n\n#### CSV format\n\nTo change the state of only a subset of products you have to provide a list to identify them via a CSV file.\n\nThere are currently two ways to identify products:\n- id\n- sku\n\nAn example for sku may look like this:\n```\nsku\nW1234\nM2345\nM3456\n```\n\n\u003e Please note that you always delete products not variants!\n\n\n## Template\n\nUsing this sub command, you can generate a CSV template (does only contain the header row)\nfor product types. With `--all` a combined template for all product types will be generated.\nIf you leave this options out, you will be ask for which product type to generate the template.\n\n### Usage\n\n```\n./bin/product-csv-sync template --help\n\n  Usage: template --projectKey \u003cproject-key\u003e --clientId \u003cclient-id\u003e --clientSecret \u003cclient-secret\u003e --out \u003cfile\u003e\n\n  Options:\n\n    -h, --help                   output usage information\n    -o, --out \u003cfile\u003e             Path to the file the exporter will write the resulting CSV in\n    -l, --languages [lang,lang]  List of languages to use for template (default is [en])\n    --outputDelimiter \u003cdelimiter\u003e Delimiter used to separate cells in output file | default: ,\n    --all                        Generates one template for all product types - if not given you will be ask which product type to use\n```\n\n\n## Export\n\nThe export action dumps products to a CSV file. The CSV file may then later be used as input for the import action.\n\n### CSV Export Template\n\nAn export template defines the content of the resulting export CSV file, by listing wanted product attribute names as header row. The header column values will be parsed and the resulting export CSV file will contain corresponding attribute values of the exported products.\n\n```\n# only productType.name, the variant id and localized name (english) will be exported\nproductType,name.en,variantId\n```\n\n\u003e Please see section [template](https://github.com/sphereio/sphere-node-product-csv-sync/tree/master/data) on how to generate a template.\n\n### Usage\n\n```\n./bin/product-csv-sync export\n\n  Usage: export --projectKey \u003cproject-key\u003e --clientId \u003cclient-id\u003e --clientSecret \u003cclient-secret\u003e --template \u003cfile\u003e --out \u003cfile\u003e\n\n  Options:\n\n    -h, --help                    Output usage information\n    -t, --template \u003cfile\u003e         CSV file containing your header that defines what you want to export\n    -o, --out \u003cfile\u003e              Path to the file the exporter will write the resulting CSV in\n    -x, --xlsx                    Export in XLSX format\n    -f, --fullExport              Do a full export. Use --out parameter to specify where to save zip archive with exported files\n    -q, --queryString \u003cquery\u003e     Query string to specify the sub-set of products to export\n    -l, --language [lang]         Language used on export for localised attributes (except lenums) and category names | default: 'en'\n    --queryEncoded                Whether the given query string is already encoded or not\n    --current                     Will export current product version instead of staged one\n    --fillAllRows                 When given product attributes like name will be added to each variant row.\n    --onlyMasterVariants          Export only masterVariants from products | default: false\n    --categoryBy                  Define which identifier should be used for the categories column - options 'namedPath'(default), 'slug' and 'externalId'.\n    --categoryOrderHintBy         Define which identifier should be used for the categoryOrderHints column - options 'categoryId'(default), 'id' or 'externalId'.\n    --filterVariantsByAttributes  Query string to filter variants of products\n    --filterPrices                Query string to filter prices of variants\n    --templateDelimiter \u003cdelimiter\u003e Delimiter used in template | default: ','\n    --outputDelimiter \u003cdelimiter\u003e   Delimiter used to separate cells in output file | default: ','\n    -e, --encoding [encoding]     Encoding used when saving data to output file | default: 'utf8'\n```\n\n#### Full export\n\nYou can export products without the need to provide products template. For this option pass the `--fullExport` flag together with the `--out` parameter containing the filePath where the zip archive with the exported products should be saved.\n\n##### Example\n\n```\nnode lib/run.js export --projectKey \u003cproject_key\u003e --clientId \u003cclient_id\u003e --clientSecret \u003cclient_secret\u003e --fullExport --out products.zip\n```\n\n#### Export certain products only\n\nYou can define the subset of products to export via the `queryString` parameter, which corresponds of the `where` predicate of the HTTP API.\n\n\u003e Please refer to the [API documentation of SPHERE.IO](http://dev.sphere.io/http-api.html#predicates) for further information regarding the predicates.\n\n##### Example\n\nQuery first 10 products of a specific product type\n```\nlimit=10\u0026where=productType(id%3D%2224da8abf-7be6-4b27-9ce6-69ee4b026513%22)\n# decoded: limit=0\u0026where=productType(id=\"24da8abf-7be6-4b27-9ce6-69ee4b026513\")\n```\n\n#### Export of Localized Enum Labels and Set of Localized Enum Labels\n\nYou can export the values of Lenum Labels and Set of Lenum labels by specifying the locale of the labels you want to export. If you don't specify a locale, the key of the lenum will be exported.\n\n\u003e Please refer to the [API documentation of SPHERE.IO](http://dev.sphere.io/http-api-projects-productTypes.html#localizable-enum-type) for further information regarding lenum data types.\n\nThe labels of localized enums can not be imported - instead they need to be managed in the ProductType metadata.\n\n##### Example\n\nExport the key and the english label of the attributes `myLenum` and `mySetOfLenum`.\n\n```csv\nvariantId,myLenum,myLenum.en,mySetOfLenum,mySetOfLenum.en\n1,myLenumKey,My English Lenum Label,mySetOfLenumKey1;mySetOfLenumKey2,My Set of Lenum English Label 1, my Set of Lenum English Label 2\n```\n\n#### Export with different encoding\n\nDefault encoding used during export is `utf8`. With `--encoding` parameter there can be specified one of encodings listed [here](https://github.com/ashtuchkin/iconv-lite/wiki/Supported-Encodings).\nMost commonly used are:\n * Node.js Native encodings: utf8, ucs2 / utf16le, ascii, binary, base64, hex\n * Unicode: UTF-16BE, UTF-16 (with BOM)\n * Single-byte:\n   * Windows codepages: 874, 1250-1258 (aliases: cpXXX, winXXX, windowsXXX)\n   * ISO codepages: ISO-8859-1 - ISO-8859-16\n\n##### Example\n\n```csv\nnode lib/run.js export --projectKey \u003cproject_key\u003e --clientId \u003cclient_id\u003e --clientSecret \u003cclient_secret\u003e --template path/to/template.csv --out products.zip -e \"win1250\"\n```\n\n\n## General CSV notes\n\nPlease make sure to read the following lines use valid CSV format.\n\n### Multi line text cells\nMake sure you enclose multiline cell values properly in quotes\n\nwrong:\n```csv\nheader1,header2,header3\nvalue 1,value 2,this is a\nmultiline value\n```\nright:\n```csv\nheader1,header2,header3\nvalue1,value2,\"this is a\nmultiline value\"\n```\n\n### Text cells with quotes\nIf your cell value contains a quote, make sure to escape the quote with a two quotes (change `\"` to `\"\"`). Also the whole cell value should be enclosed in quotes in this case.\n\nwrong:\n```csv\nheader1,header2,header3\nvalue 1,value 2,this is \"value 3\"\n```\n\nright:\n```csv\nheader1,header2,header3\nvalue 1,value 2,\"this is \"\"value 3\"\"\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommercetools%2Fsphere-node-product-csv-sync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcommercetools%2Fsphere-node-product-csv-sync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommercetools%2Fsphere-node-product-csv-sync/lists"}