{"id":767,"date":"2023-06-07T11:48:23","date_gmt":"2023-06-07T08:48:23","guid":{"rendered":"https:\/\/presta.site\/blog\/?p=767"},"modified":"2026-07-22T09:12:33","modified_gmt":"2026-07-22T06:12:33","slug":"quick-guide-to-importing-and-exporting-data-in-prestashop","status":"publish","type":"post","link":"https:\/\/presta.site\/blog\/en\/quick-guide-to-importing-and-exporting-data-in-prestashop\/","title":{"rendered":"PrestaShop CSV Import: Easy Guide for Products &#038; Customers"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>PrestaShop CSV import<\/strong> is the Back Office tool for loading catalog and customer data in bulk &#8211; supplier price sheets, a new category tree, or products copied from another shop. This guide covers file prep, the Advanced Parameters \u2192 Import wizard, the options that matter, and the mistakes that usually break a run.<\/p>\n\n\n<!--more-->\n\n\n<p class=\"wp-block-paragraph\">Need to <em>download<\/em> data from lists instead? That is a different workflow (there is no single \u201cExport all\u201d button). See <a href=\"https:\/\/presta.site\/blog\/en\/prestashop-export-csv\/\">how to export CSV data from PrestaShop<\/a> for the list\/gear-menu path. Here we stay on import.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What you can import<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Under <strong>Advanced Parameters \u2192 Import<\/strong> you can load <strong>categories, products, combinations, customers, addresses, brands, suppliers, aliases, and store contacts<\/strong>. With Advanced Stock Management enabled you may also see supply orders and supply order details. Aliases are search synonyms (Shop Parameters \u2192 Search). Store contacts live under Shop Parameters \u2192 Contacts \u2192 Stores.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Import <strong>one entity type per file<\/strong>, and one language at a time. If you need French and English names, prepare two files (or two runs) and set the language on the form for each.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Recommended import order<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dependencies matter. A practical sequence:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Categories<\/strong> (and brands\/suppliers if products will reference them)<\/li>\n<li><strong>Products<\/strong><\/li>\n<li><strong>Combinations<\/strong> (after the parent products exist)<\/li>\n<li><strong>Customers<\/strong>, then <strong>addresses<\/strong><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Product rows usually point at category IDs that must already exist. Combination rows need a valid product reference or ID. Addresses need customers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prepare files for PrestaShop CSV import<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">From PrestaShop 1.7 onward (including 8 and 9), the importer accepts <strong>.csv, .xls, .xlsx, .xlst, .ods, and .ots<\/strong>. Older 1.6 shops were CSV-only. CSV remains the safest choice: easy to edit in Excel or Google Sheets, and easy to re-save as UTF-8 when accents break. Official docs still treat CSV as the canonical format even when spreadsheet uploads are allowed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">PrestaShop recommends a <strong>semicolon (;)<\/strong> as the field separator. If descriptions already contain semicolons, pick another separator in the form and use that same character in the file. Multi-value fields (for example several category IDs) use a separate <strong>multiple value separator<\/strong> &#8211; comma by default.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Encoding<\/strong> &#8211; prefer UTF-8; otherwise ISO-8859-1.<\/li>\n<li><strong>First row<\/strong> &#8211; column labels are fine; you will skip that row on the mapping screen.<\/li>\n<li><strong>Prices<\/strong> &#8211; use the shop\u2019s default currency.<\/li>\n<li><strong>Image URLs<\/strong> &#8211; absolute links the server can fetch (not relative paths).<\/li>\n<li><strong>Dates<\/strong> &#8211; ISO-style, e.g. <code class=\"codecolorer text default\"><span class=\"text\">2013-06-21 15:07:27<\/span><\/code>.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1275\" height=\"369\" src=\"https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/06\/Screenshot_2-3.png\" alt=\"PrestaShop CSV import - available fields on the Advanced Parameters Import page\" class=\"wp-image-770\" srcset=\"https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/06\/Screenshot_2-3.png 1275w, https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/06\/Screenshot_2-3-300x87.png 300w, https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/06\/Screenshot_2-3-1024x296.png 1024w, https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/06\/Screenshot_2-3-768x222.png 768w\" sizes=\"auto, (max-width: 1275px) 100vw, 1275px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Pick the data type on the import page and read <strong>Available fields<\/strong> on the right. Download a matching sample from <strong>Download sample csv files<\/strong> (also under <code class=\"codecolorer text default\"><span class=\"text\">\/docs\/csv_import\/<\/span><\/code> on the server). Another solid approach: <a href=\"https:\/\/presta.site\/blog\/en\/prestashop-export-csv\/\">export a small live set<\/a>, edit it, then re-import &#8211; but expect to remap columns; list exports are not always import-ready as-is.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to run PrestaShop CSV import<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open <strong>Advanced Parameters \u2192 Import<\/strong>.<\/li>\n<li>Choose what you want to import.<\/li>\n<li>Add the file: upload in the browser, or place it via FTP in the admin <code class=\"codecolorer text default\"><span class=\"text\">import\/<\/span><\/code> folder and use <strong>Choose from history \/ FTP<\/strong>.<\/li>\n<li>Set language, field separator, and multiple value separator.<\/li>\n<li>Review the dangerous and useful toggles (below), then click <strong>Next step<\/strong>.<\/li>\n<li>Map each file column to a PrestaShop field. Set <strong>Rows to skip<\/strong> to <code class=\"codecolorer text default\"><span class=\"text\">1<\/span><\/code> if row 1 is headers. Save the matching configuration if you will reuse this layout.<\/li>\n<li>Click <strong>Import<\/strong> and wait for the progress window. Read every error line before you re-run a full catalog.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1359\" height=\"571\" src=\"https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/06\/Screenshot_3-3.png\" alt=\"PrestaShop CSV import column matching screen before starting the import\" class=\"wp-image-772\" srcset=\"https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/06\/Screenshot_3-3.png 1359w, https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/06\/Screenshot_3-3-300x126.png 300w, https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/06\/Screenshot_3-3-1024x430.png 1024w, https:\/\/presta.site\/blog\/wp-content\/uploads\/2023\/06\/Screenshot_3-3-768x323.png 768w\" sizes=\"auto, (max-width: 1359px) 100vw, 1359px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Import options worth understanding<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Delete all \u2026 before import<\/strong> &#8211; wipes existing entries of that type first. Useful for a clean rebuild; catastrophic on a live catalog if you meant \u201cupdate only.\u201d<\/li>\n<li><strong>Use product reference as key<\/strong> &#8211; product import: match\/update by reference instead of letting PrestaShop assign IDs. Every row needs a reference.<\/li>\n<li><strong>Skip thumbnails regeneration<\/strong> &#8211; products\/categories: skip rebuilding image sizes from Image URL columns (faster; use when images are already on the shop).<\/li>\n<li><strong>Force all ID numbers<\/strong> &#8211; keep IDs from the file vs auto-increment. Important when other systems already point at those IDs.<\/li>\n<li><strong>Send notification email<\/strong> &#8211; handy for large files so you are not watching the progress bar.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For field-level detail and samples, see the official <a href=\"https:\/\/docs.prestashop-project.org\/v.9-documentation\/user-guide\/configuring-shop\/advanced-parameters\/import\" target=\"_blank\" rel=\"noopener noreferrer\">PrestaShop Import documentation<\/a> (current major version).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Common PrestaShop CSV import problems<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Wrong separator<\/strong> &#8211; Excel in some locales saves commas while the form expects semicolons (or the reverse). Open the file in a text editor and check the first line.<\/li>\n<li><strong>Encoding \/ accents<\/strong> &#8211; mojibake usually means Latin-1 uploaded into a UTF-8 shop (or the reverse).<\/li>\n<li><strong>Duplicate references or emails<\/strong> &#8211; product references and customer emails must be unique; clashes skip or error.<\/li>\n<li><strong>Missing parents<\/strong> &#8211; combinations without products, addresses without customers, products pointing at missing category IDs.<\/li>\n<li><strong>Huge files time out<\/strong> &#8211; split into batches of a few hundred rows, or raise PHP <code class=\"codecolorer text default\"><span class=\"text\">max_execution_time<\/span><\/code> \/ upload limits with your host.<\/li>\n<li><strong>Image URL fetch fails<\/strong> &#8211; remote image columns fail if the URL 404s, is blocked, or the server cannot make outbound HTTP(S) requests.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If an import leaves the Back Office on a blank page, treat it like any other crash: check logs and PHP limits. Our <a href=\"https:\/\/presta.site\/blog\/en\/white-screen-of-death-in-prestashop-a-step-by-step-guide\/\">white screen of death guide<\/a> covers the usual debug path. Always <a href=\"https:\/\/presta.site\/blog\/en\/how-to-create-a-backup-in-prestashop\/\">back up the shop<\/a> before a full catalog import &#8211; CSV alone is not a restore plan. When the import is part of a version jump, pair it with <a href=\"https:\/\/presta.site\/blog\/en\/a-simple-guide-for-safely-upgrading-your-prestashop-store\/\">a careful upgrade<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Practical tips before you click Import<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Test with 5-10 rows you can verify on the storefront.<\/li>\n<li>Prefer update-by-reference (or ID) when fixing existing products; a blind create pass on a live catalog creates duplicates.<\/li>\n<li>Customer files contain personal data &#8211; treat them like any other GDPR-sensitive export\/import.<\/li>\n<li>For recurring or very large jobs, a dedicated import module may help &#8211; but learn the native PrestaShop CSV import flow first so you know what the file must look like.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Done carefully, PrestaShop CSV import saves hours of manual catalog edits. Done carelessly, it overwrites prices or creates duplicate SKUs in one click &#8211; so prep the file, map columns carefully, and keep that backup handy.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PrestaShop CSV import via Advanced Parameters: file prep, import order, mapping, and options like delete-all and reference-as-key &#8211; plus a link to CSV export.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25],"tags":[],"class_list":["post-767","post","type-post","status-publish","format-standard","hentry","category-development"],"_links":{"self":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts\/767","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/comments?post=767"}],"version-history":[{"count":6,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts\/767\/revisions"}],"predecessor-version":[{"id":1934,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/posts\/767\/revisions\/1934"}],"wp:attachment":[{"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/media?parent=767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/categories?post=767"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/presta.site\/blog\/wp-json\/wp\/v2\/tags?post=767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}