Table of Contents
How to Create, Update, and Delete Shopify Products, Variants, and Images from a Spreadsheet
eCommix – Google Sheets Sync lets you manage Shopify catalog changes in Google Sheets instead of editing products one by one in the admin. The key is using the right columns for each operation and understanding how the importer detects create, update, and delete.
This guide focuses on the minimum fields you need for products, variants, and images, plus row examples you can copy into your workflow.
Real use case: One spreadsheet for catalog onboarding and ongoing maintenance
A merchant imports a new supplier catalog, adds missing variants, fixes pricing on existing SKUs, and removes stale images, all from the same spreadsheet workflow. Instead of switching between different Shopify admin screens, the operations team exports current data, edits only the required rows, validates, and imports.
- New products are created from rows with new handles and titles
- Existing variants are updated using exported product and variant IDs
- Old images are removed by blanking the image source field on exported rows
Use eCommix – Google Sheets Sync to export Shopify products to Google Sheets, bulk edit safely, validate changes, and import updates back to Shopify.
Install eCommix – Google Sheets Sync on Shopify
Before you start
- Use the
Product Fields,Variant Fields, orProduct Imagespreset depending on what you are changing - For updates and deletes, export first so you have the Shopify IDs in your sheet
- Run
ValidatebeforeImport - Keep product, variant, and image deletes in small reviewed batches
[SCREENSHOT PLACEHOLDER]
sheet with Product Fields, Variant Fields, and Product Images presets highlighted
Products: required fields and examples
Product-level operations use columns such as Handle (Product), Id (Product), Title (Product), Vendor (Product), Status (Product), and other product fields.
| Operation | Required fields | Why these fields matter |
|---|---|---|
| Create product | Handle (Product), Title (Product) |
A new row with a handle and no product ID is treated as a new product. Add any other product fields you want to set on create. |
| Update product | Id (Product) plus the product field(s) you want to change |
The importer uses the product ID to safely target the existing Shopify product. |
| Delete product | Id (Product), blank Title (Product), and at least one other populated product column such as Status (Product) or Vendor (Product) |
Product delete is triggered by an exported row where title is cleared but the row still clearly contains product data. |
Example: create product
| Handle (Product) | Title (Product) | Vendor (Product) | Status (Product) |
|---|---|---|---|
linen-shirt |
Linen Shirt |
Northwind |
ACTIVE |
Example: update product
| Handle (Product) | Id (Product) | Title (Product) | Vendor (Product) |
|---|---|---|---|
linen-shirt |
gid://shopify/Product/1001 |
Linen Shirt |
Northwind Apparel |
Example: delete product
| Handle (Product) | Id (Product) | Title (Product) | Status (Product) |
|---|---|---|---|
linen-shirt |
gid://shopify/Product/1001 |
ACTIVE |
Important: deleting a product removes the product and all its variants. Use this only when you really want the whole product gone.
Variants: required fields and examples
Variant operations rely on product-level context plus variant identifiers or option values. Common columns include Id (Product), Id (Variant), Option 1 Name (Product), Option 1 Value (Variant), SKU (Variant), and Price (Variant).
| Operation | Required fields | Why these fields matter |
|---|---|---|
| Create variant for existing product | Id (Product), variant option value column such as Option 1 Value (Variant), and the variant field(s) you want to set |
The importer needs the existing product ID to attach the new variant to the right product. |
| Create new product with variants | Handle (Product), Title (Product), Option 1 Name (Product), and variant option value columns on the grouped rows |
This creates the product and its variants together in one grouped import. |
| Update variant | Id (Product), Id (Variant), plus the variant field(s) you want to change |
The product ID and variant ID together make the update unambiguous. |
| Delete variant | Id (Product), Id (Variant), and blank option value columns such as Option 1 Value (Variant) |
Variant delete is detected when an existing variant row keeps its IDs but its option values are cleared. |
Example: create variant for an existing product
| Handle (Product) | Id (Product) | Option 1 Name (Product) | Option 1 Value (Variant) | SKU (Variant) | Price (Variant) |
|---|---|---|---|---|---|
linen-shirt |
gid://shopify/Product/1001 |
Size |
XL |
LINEN-XL |
69.00 |
Example: create a new product with two variants
| Handle (Product) | Title (Product) | Option 1 Name (Product) | Option 1 Value (Variant) | SKU (Variant) | Price (Variant) |
|---|---|---|---|---|---|
ribbed-tank |
Ribbed Tank |
Size |
S |
TANK-S |
34.00 |
ribbed-tank |
Size |
M |
TANK-M |
34.00 |
Example: update variant
| Handle (Product) | Id (Product) | Id (Variant) | Option 1 Value (Variant) | Price (Variant) |
|---|---|---|---|---|
linen-shirt |
gid://shopify/Product/1001 |
gid://shopify/ProductVariant/2001 |
M |
59.00 |
Example: delete variant
| Handle (Product) | Id (Product) | Id (Variant) | Option 1 Name (Product) | Option 1 Value (Variant) |
|---|---|---|---|---|
linen-shirt |
gid://shopify/Product/1001 |
gid://shopify/ProductVariant/2001 |
Size |
Important: the variant delete pattern is based on exported rows. Keep the IDs, then clear the option value columns that identify the variant row.
[SCREENSHOT PLACEHOLDER]
variant rows showing create, update, and delete patterns in one grouped product section
Images: required fields and examples
Image operations usually use Id (Product), Id (Image), Src (Image), Position (Image), and Alt Text (Image).
| Operation | Required fields | Why these fields matter |
|---|---|---|
| Create image for existing product | Id (Product) and Src (Image) |
The product ID tells Shopify which product gets the new image, and the source URL is the image to import. |
| Create image for a new product | Product create fields on the group plus Src (Image) |
The image can be created in the same grouped import as the new product. |
| Update image | Id (Product), Id (Image), plus the image field(s) you want to change |
The importer needs both IDs to safely update an existing image record. |
| Delete image | Id (Product), Id (Image), and blank Src (Image) |
Image delete is triggered when the image source is cleared on an exported image row. |
Example: create image for an existing product
| Handle (Product) | Id (Product) | Src (Image) | Position (Image) | Alt Text (Image) |
|---|---|---|---|---|
linen-shirt |
gid://shopify/Product/1001 |
https://cdn.example.com/linen-shirt-front.jpg |
1 |
Linen Shirt front view |
Example: update image alt text
| Handle (Product) | Id (Product) | Id (Image) | Src (Image) | Alt Text (Image) |
|---|---|---|---|---|
linen-shirt |
gid://shopify/Product/1001 |
gid://shopify/ProductImage/3001 |
https://cdn.example.com/linen-shirt-front.jpg |
Linen Shirt front view on white background |
Example: delete image
| Handle (Product) | Id (Product) | Id (Image) | Src (Image) |
|---|---|---|---|
linen-shirt |
gid://shopify/Product/1001 |
gid://shopify/ProductImage/3001 |
If your source data puts multiple image URLs into one cell, you can also use a semicolon-separated image workflow, but the safest update and delete flows still start from an export so the image IDs are already present.
Quick reference: what usually requires an export first
| Workflow | Export first? | Reason |
|---|---|---|
| Create new product | No | You can create from new rows with no Shopify IDs yet. |
| Create variant on existing product | Recommended | You need Id (Product) to attach the variant safely. |
| Create image on existing product | Recommended | You need Id (Product) to attach the image safely. |
| Update product | Yes | You need Id (Product). |
| Update variant | Yes | You need Id (Product) and Id (Variant). |
| Update image | Yes | You need Id (Product) and Id (Image). |
| Delete product | Yes | You need Id (Product) and an exported row structure. |
| Delete variant | Yes | You need Id (Product), Id (Variant), and the variant row already laid out. |
| Delete image | Yes | You need Id (Product) and Id (Image). |
Recommended workflow in eCommix – Google Sheets Sync
- Export the relevant catalog data.
- Choose the preset that matches the scope:
Product Fields,Variant Fields, orProduct Images. - Edit only the rows and columns you intend to change.
- Run
Validateand read theSTATUScolumn. - Import only after the intended create, update, or delete messages look correct.
Common mistakes to avoid
- Updating existing products without exporting first to get IDs
- Trying to create a variant on an existing product without
Id (Product) - Trying to update or delete images without
Id (Image) - Blanking
Title (Product)by accident on a product delete-capable row - Running deletes in large batches without review
Final tip
If you want the safest spreadsheet workflow, think of it this way: new rows create, exported IDs update, and blanking the delete trigger field on exported rows deletes. That mental model will help your team avoid most import mistakes.
Related Shopify Spreadsheet Guides
Continue with these related tutorials to build a complete bulk-edit workflow in Shopify:
- Import Shopify Products from Spreadsheet
- Import Several Shopify Product Images from a Single Row
- How to Bulk Delete Shopify Products, Variants, and Images Safely
Install eCommix – Google Sheets Sync
If you want to manage Shopify products, variants, and images from Google Sheets with validation before import, install eCommix – Google Sheets Sync and start with a small test batch first.
