Bulk import that updates in place

Import products and WordPress content from a CSV or Google Sheet, edit the data in a spreadsheet, then bring it back when you are ready. Re-importing updates matching records instead of creating duplicates.

Import products, taxonomies, posts, pages and custom post types with WPML or without it. Running a multilingual store? Matrix Mode adds every language to one file →

Re-imports that duplicate

A one-way importer creates a new record on every run. Change a price, upload again, and you have duplicate products to untangle.

Repeated setup

Export, map the columns again, upload, repeat — until the folder is full of products_final_v3.csv and nobody knows which file is live.

Changes without a review

Background automation can change a live store before anyone has reviewed the source data.

Run it again next week

Products are matched by SKU and updated in place. Run the same file twice and you update the same catalog, rather than creating a second one.

Use SKU, a post ID, an external ID, or a WPML translation group to match an import row to an existing record.

products.csv

sku,name,regular_price,stock_status,category
WM-100,Wireless Mouse,29.99,instock,Accessories
KB-200,Mechanical Keyboard,79.00,instock,Accessories

Built for the second run

 A one-way loaderShirely
Second runCreates another copyUpdates the matching product
MappingSet up again each timeSaved for the next run
MatchingCreates another copyMatches existing records by an identifier
When it runsBackground automationWhen you start it or a saved Automation slot runs
SourceA file on your diskA CSV file or Google Sheet, in both directions

If you cannot re-run an import safely, it is not a repeatable workflow.

Every product type

Simple, variable, grouped and external. Parent and variations arrive in the same pass, attributes intact.

Taxonomy and attributes

Categories retain their hierarchy, and exports use readable Parent > Child paths. Global pa_* attributes, tags and other taxonomies are included too.

Beyond the shop

Import posts, pages and custom post types. With WooCommerce active, you can also work with orders, customers/users, reviews and WooCommerce-native coupon import/export. SEO, custom meta and simple ACF fields work through meta_ columns.

Work from a shared sheet

Use Google Sheets when a CSV would just be passed around. When you start an import, Shirely fetches the current sheet; exports write the current catalog or content back to it.

Import from saved sheet

Save a matrix once, then fetch the latest sheet data whenever you run it.

✓ Connected
Product Matrix

Import all products from a saved Google Sheet.

☁ Sheets ›
1 sheet
Posts & Pages

Import posts, pages or any custom post type — one sheet per type.

☁ Sheets ›
1 sheet
Category Matrix

Import taxonomy terms — one sheet per taxonomy.

☁ Sheets ›

Matrix Export to Sheets

Write your catalog or content straight to a shared sheet.

✓ Connected
Product Matrix

Export all products to a saved Google Sheet.

☁ Sheets ›
✓ Connected
Posts & Pages

Export posts, pages or any custom post type.

☁ Sheets ›
✓ Connected
Category Matrix

Export taxonomy terms to a shared sheet.

☁ Sheets ›

Importing from a public “Publish to web” URL needs no credentials. For a private sheet, or to export to Google Sheets, connect your own Service Account. The full Google Sheets workflow →

Measured on a production catalog

Production catalog8,500 products, 1,040 categories and four languages
Category tree1,068 categories × 4 languages = 4,272 rows in 9 minutes 21 seconds, about 474 rows a minute
Big filesProcess imports in batches and review the log for row-level errors
InterruptionsThe run resumes from where it stopped rather than starting over

Move your catalog without rework

Works with or without WPML. You pay the full price only once. Renewals are 30% off the first-year price — cancel anytime. The plugin continues to work without renewal; updates and email support end. 14-day money-back.