Docs

Update Existing WooCommerce Products

Most WooCommerce catalogues are imported once, then updated from supplier feeds (price, stock, images, categories). Getting unique identifiers and permissions right prevents duplicates and the common error:

Not enough permissions to create record.
Not enough permissions to update record.
No Unique fields present.

How Import WP decides insert vs update

On the Permissions step you choose a unique identifier. For each row Import WP looks up an existing product with that identifier:

Lookup resultCreate enabledUpdate enabledResult
No matchYesInsert new product
No matchNoError / skip — often “Not enough permissions to create record”
Match foundYesUpdate existing product
Match foundNoError / skip — “Not enough permissions to update record”

The unique identifier search includes items in trash. Changing the identifier type or values between imports can create duplicates or appear to “lose” matches.

See also the core Permissions documentation.

IdentifierWhen to useTemplate field
Product SKUBest default for most feedsInventory → Product SKU
GTIN, UPC, EAN, or ISBNSupplier feeds keyed by barcodeInventory → GTIN, UPC, EAN, or ISBN
Product IDUpdating from an export that includes WordPress IDsUse ID carefully; not always ideal for supplier feeds
SlugStable slugs in the feedProduct Fields → Slug
Custom identifierCombine columns when no single SKU existsPermissions → custom identifier from file

SKU setup

  1. Map Inventory → Product SKU.
  2. On Permissions, choose Product SKU as the unique identifier.
  3. Ensure every row that should update has a stable, unique SKU.
  4. Variation rows need their own SKUs (different from the parent).

GTIN setup

  1. Map Inventory → GTIN, UPC, EAN, or ISBN.
  2. On Permissions, choose GTIN, UPC, EAN, or ISBN as the unique identifier.
  3. Values must be unique per product (and per variation if used on variations).

SKU and GTIN only appear as unique-identifier options when those fields are mapped in the template.

Permissions step

Typical settings:

First import (create catalogue)

  • Unique identifier: Product SKU (optional but recommended)
  • Create enabled
  • Update optional
  • Delete usually off

Ongoing feed sync

  • Unique identifier: Product SKU or GTIN (must match the first import)
  • Create enabled if new products should be added
  • Update enabled
  • Optionally enable delete-missing-records only if you understand the impact on products and media

Update-only imports (stock / price sync)

When you only want to refresh stock or prices on products that already exist:

  1. Map SKU (unique identifier) plus the fields to change (Stock quantity, Regular Price, Sale Price, etc.).
  2. Permissions:
    • Create = disabled
    • Update = enabled
    • Optionally restrict update to Only the following fields (e.g. inventory / price fields)

If a SKU in the file does not exist on the site, the row will fail with a create-permissions error — expected for update-only mode.

Create new products and update existing ones

  1. Unique identifier = SKU (or GTIN).
  2. Enable Create and Update.
  3. Keep SKUs stable forever for products you want to update.

Skip existing products

To import only new products and never change existing ones:

  • Enable Create
  • Disable Update

Rows that match an existing unique identifier will not update.

Field-level update restrictions

Under Update permissions you can choose:

OptionMeaning
All FieldsNo field restrictions
Only the following fieldsAllow-list of fields/patterns that may change
None of the following fieldsBlock-list of fields that must not change

Useful WooCommerce field groups include pricing, inventory, product attributes, product gallery, and related products. This is how you update stock without overwriting descriptions or images.

Examples of why restrictions matter:

  • Feed sends empty image columns → without restrictions you might clear galleries
  • Feed sends partial attributes → without “keep existing attributes” or field limits you might wipe attributes

Common mistakes

MistakeResult
No unique identifier mapped“No Unique fields present” / duplicates
SKU mapped but Permissions still use a different IDProducts never match; duplicates or create errors
Create disabled on a feed that includes new SKUs“Not enough permissions to create record”
Update disabled when you intended to sync“Not enough permissions to update record”
Changed unique identifier after first importDuplicates or no matches
Parent and variation share the same SKUConflicts / unpredictable matching
Update by product nameFragile — names change; prefer SKU/GTIN
Empty SKU on some rowsThose rows cannot match reliably