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.
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 loader | Shirely | |
|---|---|---|
| Second run | Creates another copy | Updates the matching product |
| Mapping | Set up again each time | Saved for the next run |
| Matching | Creates another copy | Matches existing records by an identifier |
| When it runs | Background automation | When you start it or a saved Automation slot runs |
| Source | A file on your disk | A 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.
Product Matrix
Import all products from a saved Google Sheet.
☁ Sheets ›Posts & Pages
Import posts, pages or any custom post type — one sheet per type.
☁ Sheets ›Category Matrix
Import taxonomy terms — one sheet per taxonomy.
☁ Sheets ›Matrix Export to Sheets
Write your catalog or content straight to a shared sheet.
Product Matrix
Export all products to a saved Google Sheet.
☁ Sheets ›Posts & Pages
Export posts, pages or any custom post type.
☁ Sheets ›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 catalog | 8,500 products, 1,040 categories and four languages |
| Category tree | 1,068 categories × 4 languages = 4,272 rows in 9 minutes 21 seconds, about 474 rows a minute |
| Big files | Process imports in batches and review the log for row-level errors |
| Interruptions | The run resumes from where it stopped rather than starting over |