How to Import Products to Shopify: API vs CSV Guide (2026)
Two ways to import products to Shopify — CSV file upload and REST/GraphQL API. Comparison of both methods, step-by-step instructions, and how to handle common import errors.
Steps in this guide
- 1Choose your import method
- 2Prepare your product data
- 3Run a test import with 10–20 products
- 4Import the full catalog
- 5Verify and fix errors
Shopify gives you two ways to add products in bulk: uploading a CSV file or using the Admin API. Each has different trade-offs depending on your catalog size, technical ability, and how much control you need over the import process.
Method 1: CSV Import
CSV upload is Shopify's built-in import tool — no code, no API keys, no external tools required. You download a template, fill it in, and upload through the Shopify Admin.
When to use CSV import
- Catalogs under 1,000 products
- One-time migrations where you want to manually review the data
- When you don't have developer access
- For incremental updates to small numbers of products
How to do a CSV import
- In Shopify Admin, go to Products → click "Import"
- Download the sample CSV to see the exact format required
- Prepare your data in the correct column structure
- Upload the file and click "Import products"
Shopify will process the CSV and show you a summary of successful imports and any errors. Large files are processed asynchronously — you'll receive an email when complete.
CSV import limitations
- Maximum 3 option types per product (e.g., Color, Size, Material)
- Maximum 100 variants per product
- No support for metafields
- No support for multiple locations
- File size limit: ~50MB (larger files can time out)
Method 2: Admin API (REST or GraphQL)
Shopify's Admin API gives you programmatic control over product creation. This is the approach used by migration tools, custom integrations, and Shopify apps.
When to use the API
- Catalogs over 1,000 products
- When you need to import metafields, custom data, or complex variant structures
- Ongoing sync (re-importing updated products regularly)
- When you want to check if a product exists before creating it (upsert logic)
REST API vs GraphQL
Shopify supports both REST (the older API) and GraphQL (the newer, preferred API).
REST API: Simple, well-documented, but rate-limited to 2 calls/second on most plans. Use POST /admin/api/2024-01/products.json to create products. Good for catalogs up to ~5,000 products.
GraphQL Bulk Operations: For large catalogs, use Shopify's bulk mutation API. You upload a JSONL file of product mutations, Shopify processes them asynchronously (usually 5–15 minutes for 10,000 products), and you poll for completion. This is 5–10x faster than sequential REST calls.
Required Shopify API setup
- In Shopify Admin, go to Settings → Apps and sales channels → Develop apps
- Create a custom app with "Read and write products" and "Read and write inventory" scopes
- Install the app and copy the Admin API access token
- Use the token in your API calls:
X-Shopify-Access-Token: {your_token}
Product data requirements
Regardless of import method, your product data must meet these requirements:
| Field | Requirement |
|---|---|
| Handle | Required, unique, URL-safe (lowercase, hyphens only) |
| Title | Required, non-empty |
| Variant price | Required, decimal number, no currency symbol |
| Options | Maximum 3 option types per product |
| Variants | Maximum 100 variants per product |
| Weight | In grams (API) or grams column in CSV |
| Images | Public HTTPS URLs, fetched at import time |
Handling import errors
Shopify's CSV import gives minimal error feedback — often just "X products could not be imported" without specifying which ones. The API gives more detail.
Common issues and fixes:
- Products missing after import: Check the Status field — products may have been imported as drafts. Set Status to "active".
- Variants not appearing: Multi-variant products need one row per variant with the same Handle. Confirm your row structure matches Shopify's format.
- Images not loading: Verify image URLs are publicly accessible. Use a browser to open each URL — if it prompts for login, Shopify can't fetch it.
- Prices showing as $0: Remove any currency symbols or commas from price values. Shopify expects plain decimal numbers.
- Products with too many variants silently dropped: Products exceeding 100 variants are skipped without clear error messaging. Pre-check variant counts before import.
Using k-sync for the import
k-sync handles the technical complexity of both methods automatically:
- Connects to your WooCommerce store via REST API and imports all products
- Converts WooCommerce data to Shopify format (handles, prices, variants, options)
- Validates against Shopify's limits before pushing
- Pushes via GraphQL Bulk Operations for large catalogs (1,000+ products)
- Falls back to REST for smaller batches and updates
- Tracks which products were created vs updated, with per-product error logging
Free tier supports up to 50 products via API push, or unlimited via CSV export (generate a Shopify-ready CSV from your WooCommerce data).
Step by step
Choose your import method
Shopify supports two product import methods: CSV file upload (simple, no code, good for 100–1,000 products) and the Admin API (programmatic, handles 100,000+ products, supports bulk GraphQL). For WooCommerce migrations, the API method is recommended for catalogs over 500 products.
Prepare your product data
Regardless of method, your data needs to match Shopify's format: required fields (Handle, Title, Variant Price), correct option structure (max 3 options, max 100 variants per product), valid image URLs, and weights in grams. Validate all data before importing to avoid silent failures.
Run a test import with 10–20 products
Before importing your full catalog, test with a small batch. Check that titles, descriptions, images, variants, prices, and tags all appear correctly in Shopify Admin. Verify image URLs resolved correctly (images should serve from cdn.shopify.com, not your source server).
Import the full catalog
For CSV: upload via Shopify Admin → Products → Import. For API: use the productCreate/productUpdate REST endpoints or bulkOperationRunMutation for large catalogs (1,000+ products). The GraphQL Bulk Operations API processes catalogs 3–5x faster than sequential REST calls.
Verify and fix errors
After import, check for: missing images (image URLs that failed to resolve), products showing as drafts instead of active, variants with incorrect prices or missing SKUs, and products without tags or collections. Most issues can be bulk-fixed in Shopify Admin or by re-importing corrected rows.
Do it yourself with k-sync — free tier available
k-sync automates this entire guide. Connect your WooCommerce store, validate products, and push to Shopify in minutes.
Start migrating freeFrequently asked questions
What is the fastest way to import products to Shopify?
For large catalogs (1,000+ products), Shopify's GraphQL Bulk Operations API is the fastest method — it can process a 10,000-product catalog in 10–15 minutes. Sequential REST API calls are limited to about 2 calls/second. CSV upload is convenient for smaller catalogs but can be slow and doesn't support all product fields.
Can I import products to Shopify for free?
Yes — Shopify's CSV import is free and built into every plan. The REST and GraphQL APIs are also free to use (rate limits apply). Third-party migration tools vary: k-sync offers a free tier that covers up to 50 products via API or unlimited products via CSV export.
Why are my Shopify CSV imports showing errors?
The most common CSV import errors are: incorrect column headers (must match Shopify's exact format), missing Handle or Variant Price on a row, multi-variant products with the wrong row structure, price values with currency symbols (use 29.99 not $29.99), and image URLs that are not publicly accessible.
How many products can I import to Shopify at once?
The CSV import has no hard limit per file, but large files (50MB+) can time out. Via API, you can import as many products as your plan allows. Shopify Basic supports up to 1,000 active products natively; higher product counts require the Standard plan or above.
Does Shopify CSV import support product variants?
Yes — variants are handled by using multiple rows with the same Handle. The first row contains product-level data (Title, Description, etc.), and each subsequent row for the same Handle represents a variant (different Option values, SKU, and price). Shopify supports up to 3 option types and 100 variants per product.
What happens to duplicate products when importing?
In CSV imports, if a product with the same Handle already exists in your Shopify store, the import will update that product — including replacing its variants with the ones in the CSV. This can cause data loss if you're not careful. Always back up your store before doing large imports.
Can I import product images from WooCommerce to Shopify?
Yes — include the image URL in the Image Src column. Shopify will download and re-host the image on its CDN at import time. Images must be publicly accessible via HTTPS during the import. If your WooCommerce site requires authentication (e.g., a staging site), you'll need to make images publicly accessible first.
Related articles
Migrating a luggage and travel accessories store from WooCommerce to Shopify (2026)
How to migrate a luggage, travel bags, or travel accessories WooCommerce store to Shopify — luggage specifications, airline compliance, TSA lock, warranty and durability claims, and luggage retail Shopify setup.
Migrating a motorcycle accessories store from WooCommerce to Shopify (2026)
How to migrate a motorcycle accessories, biker gear, or motorbike parts WooCommerce store to Shopify — helmet safety standards, CE-rated protective clothing, type approval for parts, fitment compatibility, and motorcycle retail Shopify setup.