Shopify csv import is the fastest way to load an existing product catalogue into your store without entering products one at a time — you prepare a comma-separated file in Shopify's template format and the platform processes your entire range in a single job. For South African operators building on Shopify, the native import tool works exactly as the documentation describes.
The gap is local: there are SA-specific formatting rules around price, character encoding, and VAT that global guides skip, and those rules break more imports than the file structure itself. When you bulk import Shopify products from an existing supplier catalogue or legacy system, those local rules are the difference between a clean first run and a debugging session that lasts half a day.
This guide covers the required column structure, the seven-step import process, the SA-specific traps that cause silent failures, and what to do about inventory after the import if you run more than one warehouse location. If you are working through a structured ecommerce build timeline, budget time to test your CSV against a development store before touching live product data — an import that starts cannot be stopped mid-run.
Quick Answer
A shopify csv import is a bulk product upload using a comma-separated file that matches Shopify's template. In your Shopify admin, go to Products → Import, upload the file, and confirm. Title is the only required column for new products without variants; Handle is also required when adding variants or updating existing records. For South African stores: format prices as plain decimals with no R prefix and a period as the decimal separator — not a comma. Save the file as UTF-8 (not Excel's default Windows-1252 encoding), keep all image URLs on public HTTPS servers, and export a backup of your existing products before using the overwrite option.
In This Guide
Struggling to Format Your Product Data for Upload?
Send us your raw catalogue and we will map exactly which columns you need and how to structure variant rows before you touch the import tool.
Send Us Your CatalogueWhat the Shopify Product CSV Template Contains
The Shopify CSV file format covers product details, pricing, inventory, images, SEO, variant options, and international market columns — but for most SA stores a first import works with roughly a dozen of those fields. According to Shopify's CSV documentation, Title is the only column the platform requires to create a new product — everything else is optional, though missing fields mean incomplete listings.
| Column | Required? | Format | SA Note |
|---|---|---|---|
| Title | Yes (new products) | Text, max 255 chars | First row of each product only; leave blank on variant rows |
| Handle | For variants & updates | Lowercase, hyphens, no spaces | Changing a handle after publishing breaks that product's URL |
| Body (HTML) | No | HTML; wrap in double quotes if content contains commas | Rich product description |
| Status | No | active / draft / archived | Blank defaults to active; use draft to import without publishing |
| Vendor | No | Text | Supplier or brand name |
| Type | No | Text | Your internal product category label |
| Tags | No | Comma-separated, in a quoted cell | e.g., "summer,sale,menswear" |
| Option1 Name | For variants only | Text (e.g., "Size", "Colour") | Required if the product has variants; supports up to three option dimensions |
| Option1 Value | For variants only | Text (e.g., "S", "Red") | One row per option combination |
| Variant SKU | No | Text | Your internal stock code — see barcode vs SKU in Shopify for how each field is used |
| Variant Price | No (practical must) | Decimal, no symbol | Plain decimal, period separator, no currency prefix — e.g., 299.00 (ex-VAT; see SA gotchas) |
| Variant Compare At Price | No | Decimal, no symbol | Original price for crossed-out display; same format as Variant Price |
| Variant Inventory Qty | No | Whole number (integer) | No decimals; sets stock at your default location only |
| Image Src | No | Public HTTPS URL | Not Google Drive (unless shared publicly), not local paths, not intranet addresses |
| Image Alt Text | No | Text, under 125 chars | Describes the image for accessibility and product SEO |
| Collection | No (import-only) | Text, max 255 chars | Not in Shopify's export — add it yourself; Shopify creates the collection if it does not exist |
The safest starting point is to download the Shopify product CSV template directly from Products → Import in your admin rather than building the column structure from scratch — Shopify's own export file is the most reliable source of the correct headers.
A note on product taxonomy: if you need to think through how your product types and categories should be structured before the import, the ecommerce product taxonomy guide covers how to organise a catalogue hierarchy before it reaches Shopify.
Key Point: Status vs Published
Shopify's current CSV template uses a Status column (active / draft / archived) to control product availability. Importing products with Status set to draft lets you check every listing in the admin before anything goes live on your storefront — useful for large first-time imports where a few rows almost always need correcting.
How to Run a Shopify CSV Import Step by Step
A shopify csv import queues in seconds from the admin panel — the preparation work happens before you reach the import screen. The most reliable way to import products to Shopify is to complete and verify your CSV file first, then follow these steps exactly as documented in Shopify's Help Center.
- Products → Import. In your Shopify admin, navigate to the Products section and click Import in the top-right corner.
- Add file. Click Add file and select your CSV. The file must be 15 MB or smaller and UTF-8 encoded — if it is larger, split the catalogue into batches.
- Set channel options. By default, Shopify publishes imported products to all sales channels. If you want to review them first, deselect "Publish new products to all sales channels".
- Set overwrite behaviour. Tick "Overwrite products with matching handles" only if you are updating existing products. Warning: any column that is present but blank in your import file will erase the existing data in that field.
- Upload and continue. Click the button. Shopify validates the file structure and shows you a preview of what will be created or updated.
- Review the preview. Check the count of products and variants. If something looks wrong — wrong number of products, variants missing — stop here and fix the CSV rather than proceeding.
- Import products. Click the final import button. Once you confirm, the import cannot be cancelled. Shopify sends a confirmation email when the job completes.
Pre-Import Checklist for SA Stores
- Store currency set to ZAR in Settings → General before importing
- Prices formatted as plain decimals with a period, no R prefix (299.00)
- File saved as CSV UTF-8 — not standard CSV from Excel, not Windows-1252
- Do not sort rows in any spreadsheet editor after building image rows — only reorder products from a freshly exported copy
- Image URLs on public HTTPS servers (not Google Drive folders requiring sign-in)
- Handles unique across all products and URL-friendly (lowercase, hyphens, no spaces)
- Variant rows include the same Handle as the parent product row
- File size under 15 MB — split large catalogues into batches
- Backup of existing product data exported before using the overwrite option
SA-Specific Gotchas That Break Your Product Upload
South African merchants encounter a consistent set of formatting problems that do not appear in global Shopify import guides — most of them rooted in how SA businesses typically prepare spreadsheets, handle pricing, and manage images. If your import is throwing errors or importing incorrect data, one of these five issues is usually the cause. For a full breakdown of error messages and fixes, see the Shopify CSV import error guide.
1. Wrong Price Format (the Most Common SA Mistake)
What breaks it: Adding an R currency prefix to prices, using a comma as the decimal separator, or including a comma thousands separator in the Variant Price column.
What Shopify requires: A plain decimal number with a period as the separator and no currency prefix — enter 299.00 not a currency-prefixed or comma-decimal equivalent. Shopify reads the plain number and displays it in your store's set currency (ZAR). The comma-as-decimal convention common in Afrikaans-language spreadsheets will either import as zero or cause a row error.
2. UTF-8 Encoding — the Afrikaans Product Name Trap
What breaks it: Saving your CSV from Microsoft Excel on Windows using the default "CSV (Comma delimited)" option. Excel on Windows saves in Windows-1252 encoding, which garbles characters like ê, ö, ü, é, and â — common in Afrikaans product names. Shopify returns the error "Illegal quoting on line" and refuses to import.
The fix: In Excel, choose Save As → CSV UTF-8 (with BOM) — it is a separate option from standard CSV. Better still, build your CSV in Google Sheets, which exports UTF-8 by default when you download as CSV.
3. Excel Sorting Scrambles Image Rows
What breaks it: Opening the CSV in Excel or Apple Numbers and sorting rows to reorder products. Shopify links images to products by row order under each Handle — sort the rows, and Shopify silently attaches images to the wrong products. Shopify's documentation explicitly warns against sorting in spreadsheet editors.
The fix: Use Google Sheets for all editing. If you must sort, export a fresh copy from Shopify first and do not sort after building image rows.
4. VAT: Do Not Manually Inflate CSV Prices for Tax
Shopify applies VAT at checkout based on your store's tax settings — it does not read tax from the CSV. Enter prices to match however your tax settings are configured: ex-VAT if Shopify is set to add VAT at checkout, or VAT-inclusive if your settings already show the tax-included price.
Avoid manually adding VAT to CSV prices when you have already configured Shopify's tax rules for South Africa. Doing so typically results in prices displaying with the tax applied twice — a problem that surfaces only once customers reach checkout.
5. Image URLs Must Be Publicly Accessible
What breaks it: Pasting Google Drive share links, Dropbox URLs that require sign-in, intranet addresses, or local file paths (C:\Images\product.jpg) into the Image Src column. Shopify fetches each image URL from the internet during import — if the URL is behind authentication or returns anything other than the image file, Shopify skips the image silently or logs a URL error.
The fix: Host images on a publicly accessible server. Shopify's own CDN (upload images first via the admin), a public AWS S3 bucket, or an unlocked Dropbox/Google Drive share link (one that opens the file directly) all work.
If Your Import Succeeds But Something Looks Wrong
Shopify's native importer does not always surface warnings for every skipped field — it simply imports what it can and ignores the rest. After every import, spot-check five to ten products in the admin: verify that images are attached to the right product, prices are correct, and variant combinations match your Option columns. Fix errors in the CSV and re-import only the affected rows using the overwrite option.
Inventory After a Bulk Product Upload — The Multi-Location Gap
Shopify's product CSV sets stock quantities only for your default location. If you have a Johannesburg warehouse and a Cape Town distribution point — or any secondary location enabled in Shopify — the product CSV does not populate those separately. This is the gap that catches SA merchants off guard when their Shopify inventory management shows correct totals for one location but nothing for the others.
The solution is a separate workflow: once the product import is complete, go to Products → Inventory in your Shopify admin, click Export, select your locations, and download the inventory CSV. That file has a separate quantity column per location. Edit the quantities, then re-import via the same Products → Inventory screen. Shopify's inventory CSV is distinct from the product CSV — it knows about location assignments that the product file does not carry.
As of July 2025, Shopify also supports bulk CSV importing for inventory transfers, which allows you to create stock movements between locations using a CSV template — a useful option if you are relocating stock between the Johannesburg and Cape Town facilities rather than setting opening quantities.
Moving a Large Catalogue to Shopify?
Share your current data setup and we will scope the migration — formats, image hosting, inventory mapping for your locations — at no cost.
Get a Free Migration ScopeWhen to Use the Native CSV Import vs Other Methods
Shopify's native CSV import is the right tool for first-time bulk loads and periodic manual catalogue updates, but it is not the right tool for every situation. The method you choose determines how much ongoing work the process creates.
| Situation | Best Method | Why |
|---|---|---|
| Loading a new catalogue for the first time | Native CSV import | Fast, no app required, no cost |
| Updating prices or descriptions for a subset of products | Native CSV import (overwrite) | Export → edit only changed fields → re-import with overwrite |
| Migrating from Magento, WooCommerce, or Takealot | Migration app or agency | Export column structures differ; field mapping needs transformation before Shopify's template accepts the data |
| Real-time inventory sync from a warehouse or ERP system | Inventory integration app | CSV is a manual, point-in-time process — it cannot keep stock levels current across systems |
| Adding 5 or fewer products | Manual admin entry | Faster than building and debugging a CSV for a small number of products |
| Products with highly complex variant structures | Shopify Plus or app | Shopify enforces a product variant limit per product that the CSV cannot override — check that limit before importing large option sets |
The Overwrite Option Is Your Most Powerful Tool — and Your Biggest Risk
When you tick "Overwrite products with matching handles" and your import file includes a column that is present but blank, Shopify erases the existing data in that field. A column entirely absent from the file leaves the existing value untouched. This means the safest update workflow is: export your products, edit only the columns you are changing, leave all other columns exactly as exported, and re-import. Never build an update CSV from scratch with only the changed fields and blank placeholders for everything else.
Why South African Businesses Choose Growth Pulse Media for Shopify Builds
Growth Pulse Media is a registered Shopify Partner with a background in scaling South African ecommerce before the agency existed. That operating history means we have handled multi-SKU catalogue imports for SA merchants — including the variant-row structures, image hosting setups, and multi-location inventory configurations that take most merchants a full afternoon of debugging to figure out for the first time.
Our Shopify marketing and build work runs in-house, with senior attention on every store. We do not hand catalogue preparation to junior staff or offshore teams. If your data is messy — mixed price formats, product descriptions that need cleaning, images sitting on a local network share — we normalise it before it touches the importer, not after. We keep a limited number of active clients to maintain that standard.
Who This Is NOT For
Merchants adding fewer than 10 products. The time it takes to download Shopify's template, populate it correctly, and debug any format issues exceeds the time it takes to enter those products manually through the admin. Use the CSV import when the catalogue justifies the setup investment.
Stores migrating from another platform without data mapping. A WooCommerce, Magento, or Takealot export will not match Shopify's CSV column structure. Uploading a re-saved version of your current platform's export will fail or import garbage data. You need a field-mapping step that transforms the source format into Shopify's template before the import starts.
Businesses that need live inventory sync. The CSV import is a point-in-time, manual process. If your warehouse or ERP system needs to keep Shopify's stock levels current throughout the day — or even weekly — a CSV file you upload periodically will create stock discrepancies between uploads. An inventory integration app designed for your warehouse system is the right solution.
Anyone trying to delete products in bulk via the CSV. Shopify's native CSV import cannot delete products — it can only create or update. Removing products in bulk requires either a bulk delete app or manual selection in the admin. If your clean-up strategy includes removing discontinued lines at the same time as uploading new ones, handle the deletions first through the admin before running the import.
Want the Import Done Without the Debugging?
Our team handles catalogue preparation, CSV formatting, image hosting, and test imports in-house — book a free consultation and we will give you a clear timeline.
Book a Free ConsultationFrequently Asked Questions
What is the only required column in a Shopify product CSV?
Title is the only required column when you are adding new products without variants. If you are adding variants to a product, or updating existing products, Handle is also required. All other columns — including price, SKU, images, and status — are optional, though a product imported without a price or image is an incomplete listing that will need to be updated before it can meaningfully sell.
Why does my Shopify CSV import show garbled characters in product names?
Garbled characters almost always mean the file was saved in the wrong encoding. Shopify requires UTF-8, but Microsoft Excel on Windows saves CSV files in Windows-1252 by default, which mangles characters like ê, ö, ü, and é — common in Afrikaans product names. Fix it by choosing "Save As → CSV UTF-8" in Excel, or switch to Google Sheets, which exports UTF-8 automatically when you download as a CSV file.
How should I format ZAR prices in a Shopify product CSV?
Prices must be plain decimal numbers with a period as the decimal separator and no currency prefix — for example, 299.00. Including a currency prefix or using a comma as the decimal separator causes the row to fail or import the price as zero. Enter ex-VAT prices if your Shopify tax settings are configured to add South Africa's VAT at checkout.
Can the product CSV set inventory for multiple warehouse locations?
No — the product CSV sets inventory quantities only for your default location. If you have multiple locations enabled in Shopify (for example, a Johannesburg warehouse and a Cape Town distribution point), you need the separate inventory CSV accessed via Products → Inventory → Export/Import in your admin. That file has a quantity column per location and is a distinct process from the product import.
What happens if I use the overwrite option and leave columns blank?
Any column that is present in your import file but left blank will overwrite the existing field with nothing — effectively erasing that data for the matching product. A column that is entirely absent from the import file leaves the existing value unchanged. The safest update workflow is to export your products first, edit only the columns you intend to change, and leave all other columns exactly as exported before re-importing with the overwrite option enabled.
Ready to Import Your Product Catalogue to Shopify?
Growth Pulse Media handles Shopify catalogue preparation in-house — CSV formatting, image hosting, variant-row structures, and multi-location inventory setup. We are a registered Shopify Partner serving South African merchants, and we work with a limited client load to keep senior attention on every build. No obligation — we will get back to you within 24 hours.
Get a Free Consultation

