{"id":552011,"date":"2026-08-04T08:29:39","date_gmt":"2026-08-04T08:29:39","guid":{"rendered":"https:\/\/webkul.com\/blog\/?p=552011"},"modified":"2026-08-05T13:16:24","modified_gmt":"2026-08-05T13:16:24","slug":"how-to-import-csv-xlsx-into-pimcore-12","status":"publish","type":"post","link":"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/","title":{"rendered":"How to Import CSV &amp; XLSX Files into Pimcore 12"},"content":{"rendered":"\n<p>Getting a catalog into&nbsp;<strong>Pimcore 12<\/strong>&nbsp;usually means recreating a spreadsheet by hand \u2014 object by object, field by field, in the DataObject editor. It does not scale, it drifts from the source file, and it is impossible to repeat when that file changes.<\/p>\n\n\n\n<p>The&nbsp;<strong>Pimcore CSV\/XLSX Import Connector<\/strong>&nbsp;removes that step. Upload a&nbsp;<strong>CSV, XLSX or ZIP<\/strong>, point each column at a field in a mapping wizard, and the bundle writes real&nbsp;<a href=\"https:\/\/docs.pimcore.com\/platform\/2025.1\/Pimcore\/Objects\/\" target=\"_blank\" rel=\"noreferrer noopener\">Pimcore DataObjects<\/a>&nbsp;for you \u2014 in the background, with a live progress log, and&nbsp;<strong>without duplicating anything<\/strong>&nbsp;on the next run. No CSV middleware, no external ETL tool, no custom scripts. This guide walks the whole flow: install the bundle, grant the permission, then upload, map and import from inside Pimcore Studio.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/unopim.com\/wp-content\/uploads\/2026\/08\/image-1024x495.png\" alt=\"Pimcore CSV\/XLSX Import Connector\" class=\"wp-image-8237\" loading=\"lazy\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/unopim.com\/wp-content\/uploads\/2026\/08\/image-1-1024x495.png\" alt=\"image-1\" class=\"wp-image-8238\" loading=\"lazy\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Pimcore CSV\/XLSX Import Connector: Key Features<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Import into any DataObject class<\/strong>&nbsp;\u2014 columns are matched to fields in a mapping wizard, read live from the class definition. Nothing is hardcoded.<\/li>\n\n\n\n<li><strong>Create a class from the file<\/strong>&nbsp;\u2014 no class fits yet? The bundle builds one from the file\u2019s headings: a field per column, the type proposed from the values, one column marked the identifier.<\/li>\n\n\n\n<li><strong>CSV, XLSX and ZIP<\/strong>&nbsp;\u2014 a ZIP bundles a sheet together with a media folder, so images import alongside the data. The reader streams rows via&nbsp;<a href=\"https:\/\/github.com\/openspout\/openspout\" target=\"_blank\" rel=\"noreferrer noopener\">OpenSpout<\/a>, so a large file never loads whole into memory.<\/li>\n\n\n\n<li><strong>Images from files or URLs<\/strong>&nbsp;\u2014 reference a bundled file, an existing asset, or a remote image URL; downloads are streamed and de-duplicated by content, so the same image is never stored twice.<\/li>\n\n\n\n<li><strong>Every mappable field type<\/strong>&nbsp;\u2014 localized fields, relations, assets and images, and quantity values with a per-field unit picker.<\/li>\n\n\n\n<li><strong>Compound fields by header convention<\/strong>&nbsp;\u2014 classification store, object bricks and field collections, named in the column header \u2014 and localized sub-fields inside them.<\/li>\n\n\n\n<li><strong>Smart column detection<\/strong>&nbsp;\u2014 unit, brick, classification and collection columns are recognised automatically and kept out of the manual mapping grid.<\/li>\n\n\n\n<li><strong>Real variants and nesting<\/strong>&nbsp;\u2014 native Pimcore variants (blank cells inherit from the master), and parent nesting for tree-structured classes.<\/li>\n\n\n\n<li><strong>Saved mappings (Templates)<\/strong>&nbsp;\u2014 create a new template from scratch without uploading a file, edit one without a file, duplicate, fork mid-edit, or retire from suggestions without deleting; the next upload ranks them by how many columns they cover.<\/li>\n\n\n\n<li><strong>One value separator per import<\/strong>&nbsp;(comma, semicolon or pipe) \u2014 so any other punctuation stays part of a value. CSV delimiters and a UTF-8 BOM are detected for you.<\/li>\n\n\n\n<li><strong>Background jobs with a per-job error log<\/strong>&nbsp;\u2014 live progress, a cooperative&nbsp;<strong>Stop<\/strong>&nbsp;that keeps rows already written, and failed rows downloaded in the&nbsp;<strong>original file format<\/strong>&nbsp;with an&nbsp;<code>_error<\/code>&nbsp;column for fix-and-reupload.<\/li>\n\n\n\n<li><strong>In-Studio guide<\/strong>&nbsp;\u2014 with downloadable sample files.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Before You Start<\/h2>\n\n\n\n<p>You will need:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A running&nbsp;<strong><a href=\"https:\/\/docs.pimcore.com\/platform\/2025.1\/Pimcore\/\" target=\"_blank\" rel=\"noreferrer noopener\">Pimcore 12<\/a><\/strong>&nbsp;instance (2026.1 or newer) with Studio, and the&nbsp;<strong>CSV\/XLSX Import Connector<\/strong>&nbsp;installed.<\/li>\n\n\n\n<li><strong>PHP 8.4 or 8.5<\/strong>.<\/li>\n\n\n\n<li>A&nbsp;<strong>background worker<\/strong>&nbsp;running. Every import is queued through Symfony Messenger \u2014 without a consumer, jobs stay pending forever. The connector wires one into supervisord under Docker.<\/li>\n\n\n\n<li><strong>Node 22<\/strong>&nbsp;\u2014 only if you want to rebuild the Studio UI. The bundle ships it pre-built, so most installs never touch Node.<\/li>\n<\/ul>\n\n\n\n<p>Once installed, a&nbsp;<strong>Data Import<\/strong>&nbsp;section appears in the Studio left nav with&nbsp;<strong>Import<\/strong>,&nbsp;<strong>Templates<\/strong>,&nbsp;<strong>History<\/strong>&nbsp;and&nbsp;<strong>Guide<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1 \u2014 Upload a File and Choose the Target<\/h2>\n\n\n\n<p>On the&nbsp;<strong>Import<\/strong>&nbsp;page:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Upload your&nbsp;<strong>CSV, XLSX or ZIP<\/strong>&nbsp;file.<\/li>\n\n\n\n<li>Choose the&nbsp;<strong>DataObject class<\/strong>&nbsp;the rows become.<\/li>\n\n\n\n<li>Choose the&nbsp;<strong>folder<\/strong>&nbsp;the new objects land in.<\/li>\n<\/ol>\n\n\n\n<p>No class fits yet? Click&nbsp;<strong>Create class<\/strong>&nbsp;and the bundle builds one from the file\u2019s headings \u2014 a field per column, the type proposed from the values, and one column marked the identifier. It covers text, long text, number, checkbox, date, select, object relations, images and assets, and any column can be marked required.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/unopim.com\/wp-content\/uploads\/2026\/08\/image-4-1024x495.png\" alt=\"image-4\" class=\"wp-image-8241\" loading=\"lazy\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2 \u2014 Map Columns to Fields<\/h2>\n\n\n\n<p>Each row pairs a&nbsp;<strong>column from your file<\/strong>&nbsp;with a&nbsp;<strong>field on the class<\/strong>. Match them, then pick the&nbsp;<strong>identifier<\/strong>&nbsp;\u2014 the field that decides whether a row is a new object or an update to an existing one. This is what keeps re-imports from duplicating. Columns that follow a header convention \u2014 units, bricks, classification keys, collection items \u2014 are&nbsp;<strong>detected automatically<\/strong>&nbsp;and shown separately, so you never map them by hand.<\/p>\n\n\n\n<p>Quantity fields get a&nbsp;<strong>unit picker<\/strong>&nbsp;\u2014 choose a fixed unit per field, or let a&nbsp;<code>field.unit<\/code>&nbsp;column set it per row.<\/p>\n\n\n\n<p>On the&nbsp;<strong>Options<\/strong>&nbsp;step, set the&nbsp;<strong>Value separator<\/strong>: the single character that separates several values inside one cell \u2014 relations, images, multi-select. Pick&nbsp;<strong>comma, semicolon or pipe<\/strong>; it defaults to a comma, is saved with the template, and every other character then stays part of the value.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/unopim.com\/wp-content\/uploads\/2026\/08\/image-5-1024x495.png\" alt=\"image-5\" class=\"wp-image-8242\" loading=\"lazy\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3 \u2014 Run the Import<\/h2>\n\n\n\n<p>Before anything runs, a job that cannot succeed fails up front with a clear reason instead of importing zero rows. Then the run happens in the&nbsp;<strong>background<\/strong>&nbsp;and opens its own tab with&nbsp;<strong>live progress<\/strong>&nbsp;and a&nbsp;<strong>per-job error log<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>One bad row never kills the run.<\/strong>&nbsp;A failed row is counted and logged with a plain reason (it names the field and value at fault, not a raw database error); the rest of the file still imports.<\/li>\n\n\n\n<li><strong>Stop safely<\/strong>&nbsp;\u2014 a running import can be stopped at any batch boundary; rows already written are kept.<\/li>\n\n\n\n<li><strong>Failed rows download<\/strong>&nbsp;in the&nbsp;<strong>original file format<\/strong>&nbsp;(XLSX in \u2192 XLSX out) with a trailing&nbsp;<code>_error<\/code>&nbsp;column \u2014 fix them in place and re-import just those.<\/li>\n\n\n\n<li>After the run, imported objects are re-indexed so they show up immediately in Studio search.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/unopim.com\/wp-content\/uploads\/2026\/08\/image-7-1024x495.png\" alt=\"image-7\" class=\"wp-image-8244\" loading=\"lazy\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Working with Templates<\/h2>\n\n\n\n<p>A mapping saved during an import becomes a&nbsp;<strong>template<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Create one from scratch<\/strong>&nbsp;\u2014 build a brand-new template right on the Templates page, choosing class, folder, columns, bindings and identifier,&nbsp;<strong>without uploading a file at all<\/strong>. It is ready for the next matching upload.<\/li>\n\n\n\n<li><strong>Templates<\/strong>&nbsp;lists them and opens one for editing \u2014 class, folder, bindings, identifier \u2014&nbsp;<strong>without needing a file<\/strong>, because the columns are stored with the template.<\/li>\n\n\n\n<li><strong>Duplicate<\/strong>&nbsp;a template from the list, or&nbsp;<strong>fork<\/strong>&nbsp;one while editing with&nbsp;<em>Save as new template<\/em>.<\/li>\n\n\n\n<li><strong>Deactivate<\/strong>&nbsp;a template to retire it from suggestions without deleting it.<\/li>\n\n\n\n<li>On the next upload, every template is offered&nbsp;<strong>closest first<\/strong>, each showing how many of the file\u2019s columns it covers.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/unopim.com\/wp-content\/uploads\/2026\/08\/image-9-1024x495.png\" alt=\"image-9\" class=\"wp-image-8246\" loading=\"lazy\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Watching, Stopping &amp; Re-running an Import<\/h2>\n\n\n\n<p>Every import runs in the background and is tracked on the&nbsp;<strong>History<\/strong>&nbsp;page \u2014 each run with its&nbsp;<strong>ID<\/strong>,&nbsp;<strong>Type<\/strong>,&nbsp;<strong>Start time<\/strong>,&nbsp;<strong>User<\/strong>,&nbsp;<strong>Status<\/strong>&nbsp;and row counters. Status reads&nbsp;<em>Started<\/em>,&nbsp;<em>In Progress<\/em>,&nbsp;<em>Completed<\/em>,&nbsp;<em>Failed<\/em>&nbsp;or&nbsp;<em>Stopped<\/em>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Open a run<\/strong>&nbsp;\u2014 the job opens in its own tab with a&nbsp;<strong>progress bar<\/strong>, the&nbsp;<strong>Read \/ Created \/ Updated \/ Skipped \/ Failed<\/strong>&nbsp;counters, and an&nbsp;<strong>activity log<\/strong>&nbsp;that explains, in plain language, anything that went wrong.<\/li>\n\n\n\n<li><strong>Stop a run<\/strong>&nbsp;\u2014 while it is running, click&nbsp;<strong>Stop<\/strong>. The current row finishes first, and every object already written is kept \u2014 a stop is graceful, never a kill.<\/li>\n\n\n\n<li><strong>Re-run safely<\/strong>&nbsp;\u2014 just import the file again. Because the identifier decides create-vs-update, a second run&nbsp;<strong>updates<\/strong>&nbsp;the matching objects instead of duplicating them.<\/li>\n\n\n\n<li><strong>Fix and re-import<\/strong>&nbsp;\u2014 download the failed rows in the original file format, correct them, and import just those.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Field Type Support<\/h2>\n\n\n\n<p>Scalar fields, relations, assets and images, quantity values, and localized fields map&nbsp;<strong>directly in the wizard<\/strong>.<\/p>\n\n\n\n<p><strong>Compound fields<\/strong>&nbsp;are imported by naming the column, not by picking them in the grid:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Field type<\/th><th>Column header<\/th><th>Example<\/th><\/tr><\/thead><tbody><tr><td>Classification store<\/td><td><code>field.group.key<\/code><\/td><td><code>attributes.technical.processor<\/code><\/td><\/tr><tr><td>Object brick<\/td><td><code>BrickType.subField<\/code><\/td><td><code>productTypeData.electronics.wattage<\/code><\/td><\/tr><tr><td>Field collection<\/td><td><code>CollectionType[index].subField<\/code><\/td><td><code>specifications[0].label<\/code><\/td><\/tr><tr><td>Quantity unit<\/td><td><code>field.unit<\/code><\/td><td><code>weight.unit<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Not imported<\/strong>&nbsp;(columns for these are ignored):&nbsp;<code>calculatedValue<\/code>,&nbsp;<code>hotspotimage<\/code>,&nbsp;<code>urlSlug<\/code>,&nbsp;<code>table<\/code>,&nbsp;<code>structuredTable<\/code>,&nbsp;<code>link<\/code>,&nbsp;<code>video<\/code>,&nbsp;<code>block<\/code>, the geo types and the range types.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Troubleshooting<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The wizard will not move on<\/strong>&nbsp;\u2014 something required is unfilled. Nothing is greyed out: press the action and each unfinished field turns red and says what it needs.<\/li>\n\n\n\n<li><strong>\u201c\u2026 is not an existing \u2026\u201d on every relation row<\/strong>&nbsp;\u2014 the cell holds several values but the wrong separator is chosen. Set&nbsp;<strong>Value separator<\/strong>&nbsp;to the one the file uses.<\/li>\n\n\n\n<li><strong>Studio shows no new objects<\/strong>&nbsp;\u2014 Studio reads the search index. If objects were created outside a normal import, reindex with&nbsp;<code>bin\/console generic-data-index:update:index -r<\/code>.<\/li>\n\n\n\n<li><strong>Localized columns land in the wrong language<\/strong>&nbsp;\u2014 one language is imported per run. Run the file again, choosing the other language.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Try the Pimcore CSV\/XLSX Import Connector<\/h2>\n\n\n\n<p>Ready to bulk-import your catalog into&nbsp;<strong>Pimcore 12<\/strong>? Get the CSV\/XLSX Import Connector from the Webkul Store, or reach out for a live demo and help fitting it to your data model. Browse all of&nbsp;<a href=\"https:\/\/store.webkul.com\/catalogsearch\/result\/?cat=All+Categories&amp;q=pimcore\" target=\"_blank\" rel=\"noreferrer noopener\">Webkul\u2019s Pimcore extensions<\/a>.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Getting a catalog into&nbsp;Pimcore 12&nbsp;usually means recreating a spreadsheet by hand \u2014 object by object, field by field, in the DataObject editor. It does not scale, it drifts from the source file, and it is impossible to repeat when that file changes. The&nbsp;Pimcore CSV\/XLSX Import Connector&nbsp;removes that step. Upload a&nbsp;CSV, XLSX or ZIP, point each <a href=\"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/\">[&#8230;]<\/a><\/p>\n","protected":false},"author":785,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8189],"tags":[5829,8201,8487],"class_list":["post-552011","post","type-post","status-publish","format-standard","hentry","category-pimcore","tag-pim","tag-pimcore","tag-pimcore-ecommerce-connector"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Pimcore CSV\/XLSX Import: Load Spreadsheets into Pimcore 12<\/title>\n<meta name=\"description\" content=\"Pimcore CSV\/XLSX import made simple: upload a CSV, XLSX or ZIP, map columns to any DataObject class, and import in the background.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pimcore CSV\/XLSX Import: Load Spreadsheets into Pimcore 12\" \/>\n<meta property=\"og:description\" content=\"Pimcore CSV\/XLSX import made simple: upload a CSV, XLSX or ZIP, map columns to any DataObject class, and import in the background.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/\" \/>\n<meta property=\"og:site_name\" content=\"Webkul Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webkul\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-04T08:29:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-05T13:16:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-og.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Devraj Jaiswal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webkul\" \/>\n<meta name=\"twitter:site\" content=\"@webkul\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Devraj Jaiswal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/how-to-import-csv-xlsx-into-pimcore-12\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/how-to-import-csv-xlsx-into-pimcore-12\\\/\"},\"author\":{\"name\":\"Devraj Jaiswal\",\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/#\\\/schema\\\/person\\\/3aea89d84a5d70c394d6055b8121fb13\"},\"headline\":\"How to Import CSV &amp; XLSX Files into Pimcore 12\",\"datePublished\":\"2026-08-04T08:29:39+00:00\",\"dateModified\":\"2026-08-05T13:16:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/how-to-import-csv-xlsx-into-pimcore-12\\\/\"},\"wordCount\":1503,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/how-to-import-csv-xlsx-into-pimcore-12\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/unopim.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/image-1024x495.png\",\"keywords\":[\"pim\",\"Pimcore\",\"Pimcore eCommerce Connector\"],\"articleSection\":[\"PimCore\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/webkul.com\\\/blog\\\/how-to-import-csv-xlsx-into-pimcore-12\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/how-to-import-csv-xlsx-into-pimcore-12\\\/\",\"url\":\"https:\\\/\\\/webkul.com\\\/blog\\\/how-to-import-csv-xlsx-into-pimcore-12\\\/\",\"name\":\"Pimcore CSV\\\/XLSX Import: Load Spreadsheets into Pimcore 12\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/how-to-import-csv-xlsx-into-pimcore-12\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/how-to-import-csv-xlsx-into-pimcore-12\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/unopim.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/image-1024x495.png\",\"datePublished\":\"2026-08-04T08:29:39+00:00\",\"dateModified\":\"2026-08-05T13:16:24+00:00\",\"description\":\"Pimcore CSV\\\/XLSX import made simple: upload a CSV, XLSX or ZIP, map columns to any DataObject class, and import in the background.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/how-to-import-csv-xlsx-into-pimcore-12\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/webkul.com\\\/blog\\\/how-to-import-csv-xlsx-into-pimcore-12\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/how-to-import-csv-xlsx-into-pimcore-12\\\/#primaryimage\",\"url\":\"https:\\\/\\\/unopim.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/image-1024x495.png\",\"contentUrl\":\"https:\\\/\\\/unopim.com\\\/wp-content\\\/uploads\\\/2026\\\/08\\\/image-1024x495.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/how-to-import-csv-xlsx-into-pimcore-12\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/webkul.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Import CSV &amp; XLSX Files into Pimcore 12\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/webkul.com\\\/blog\\\/\",\"name\":\"Webkul Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/webkul.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/#organization\",\"name\":\"WebKul Software Private Limited\",\"url\":\"https:\\\/\\\/webkul.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/cdnblog.webkul.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/webkul-logo-accent-sq.png\",\"contentUrl\":\"https:\\\/\\\/cdnblog.webkul.com\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/webkul-logo-accent-sq.png\",\"width\":380,\"height\":380,\"caption\":\"WebKul Software Private Limited\"},\"image\":{\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/webkul\\\/\",\"https:\\\/\\\/x.com\\\/webkul\",\"https:\\\/\\\/www.instagram.com\\\/webkul\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/webkul\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/webkul\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/webkul.com\\\/blog\\\/#\\\/schema\\\/person\\\/3aea89d84a5d70c394d6055b8121fb13\",\"name\":\"Devraj Jaiswal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9cd646e0638ef0c329a1e4eae88ec76efb622a3042261278996e92cd952d2e90?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9cd646e0638ef0c329a1e4eae88ec76efb622a3042261278996e92cd952d2e90?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9cd646e0638ef0c329a1e4eae88ec76efb622a3042261278996e92cd952d2e90?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"caption\":\"Devraj Jaiswal\"},\"url\":\"https:\\\/\\\/webkul.com\\\/blog\\\/author\\\/devraj-jaiswal322\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pimcore CSV\/XLSX Import: Load Spreadsheets into Pimcore 12","description":"Pimcore CSV\/XLSX import made simple: upload a CSV, XLSX or ZIP, map columns to any DataObject class, and import in the background.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/","og_locale":"en_US","og_type":"article","og_title":"Pimcore CSV\/XLSX Import: Load Spreadsheets into Pimcore 12","og_description":"Pimcore CSV\/XLSX import made simple: upload a CSV, XLSX or ZIP, map columns to any DataObject class, and import in the background.","og_url":"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/","og_site_name":"Webkul Blog","article_publisher":"https:\/\/www.facebook.com\/webkul\/","article_published_time":"2026-08-04T08:29:39+00:00","article_modified_time":"2026-08-05T13:16:24+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-og.png","type":"image\/png"}],"author":"Devraj Jaiswal","twitter_card":"summary_large_image","twitter_creator":"@webkul","twitter_site":"@webkul","twitter_misc":{"Written by":"Devraj Jaiswal","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/#article","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/"},"author":{"name":"Devraj Jaiswal","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/3aea89d84a5d70c394d6055b8121fb13"},"headline":"How to Import CSV &amp; XLSX Files into Pimcore 12","datePublished":"2026-08-04T08:29:39+00:00","dateModified":"2026-08-05T13:16:24+00:00","mainEntityOfPage":{"@id":"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/"},"wordCount":1503,"commentCount":0,"publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"image":{"@id":"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/#primaryimage"},"thumbnailUrl":"https:\/\/unopim.com\/wp-content\/uploads\/2026\/08\/image-1024x495.png","keywords":["pim","Pimcore","Pimcore eCommerce Connector"],"articleSection":["PimCore"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/","url":"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/","name":"Pimcore CSV\/XLSX Import: Load Spreadsheets into Pimcore 12","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/#primaryimage"},"image":{"@id":"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/#primaryimage"},"thumbnailUrl":"https:\/\/unopim.com\/wp-content\/uploads\/2026\/08\/image-1024x495.png","datePublished":"2026-08-04T08:29:39+00:00","dateModified":"2026-08-05T13:16:24+00:00","description":"Pimcore CSV\/XLSX import made simple: upload a CSV, XLSX or ZIP, map columns to any DataObject class, and import in the background.","breadcrumb":{"@id":"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/#primaryimage","url":"https:\/\/unopim.com\/wp-content\/uploads\/2026\/08\/image-1024x495.png","contentUrl":"https:\/\/unopim.com\/wp-content\/uploads\/2026\/08\/image-1024x495.png"},{"@type":"BreadcrumbList","@id":"https:\/\/webkul.com\/blog\/how-to-import-csv-xlsx-into-pimcore-12\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webkul.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Import CSV &amp; XLSX Files into Pimcore 12"}]},{"@type":"WebSite","@id":"https:\/\/webkul.com\/blog\/#website","url":"https:\/\/webkul.com\/blog\/","name":"Webkul Blog","description":"","publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webkul.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webkul.com\/blog\/#organization","name":"WebKul Software Private Limited","url":"https:\/\/webkul.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","width":380,"height":380,"caption":"WebKul Software Private Limited"},"image":{"@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webkul\/","https:\/\/x.com\/webkul","https:\/\/www.instagram.com\/webkul\/","https:\/\/www.linkedin.com\/company\/webkul","https:\/\/www.youtube.com\/user\/webkul\/"]},{"@type":"Person","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/3aea89d84a5d70c394d6055b8121fb13","name":"Devraj Jaiswal","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9cd646e0638ef0c329a1e4eae88ec76efb622a3042261278996e92cd952d2e90?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9cd646e0638ef0c329a1e4eae88ec76efb622a3042261278996e92cd952d2e90?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9cd646e0638ef0c329a1e4eae88ec76efb622a3042261278996e92cd952d2e90?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","caption":"Devraj Jaiswal"},"url":"https:\/\/webkul.com\/blog\/author\/devraj-jaiswal322\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/552011","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/users\/785"}],"replies":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/comments?post=552011"}],"version-history":[{"count":19,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/552011\/revisions"}],"predecessor-version":[{"id":552210,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/552011\/revisions\/552210"}],"wp:attachment":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/media?parent=552011"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/categories?post=552011"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/tags?post=552011"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}