The WooCommerce Zettle Integration plugin is highly configurable and easy to use. Download and test within seconds, just authorize the plugin to your Zettle account and start to synchronize.
This plugin lets you:
- Create Zettle products from WooCommerce products.
- Create WooCommerce products from Zettle products.
- Realtime update selected data on products in Zettle from changes in WooCommerce.
- Realtime update selected data on products in WooCommerce from changes in Zettle.
- Syncronize stock levels between WooCommerce and Zettle.
- Optionally create WooCommerce orders based on purchases made in Zettle.
- Optionally generate EAN-13 barcodes for use in Zettle.
The plugin is compatible with the “WooCommerce advanced quantity” plugin.
When first connected you will get a one-week free trial where you can test all functionality including the automatic sync. Additional trial time can be arranged if needed. More information here.
Install the plugin from the WordPress store as you would do with a plugin.
You will find all settings under the tab Zettle that can be found at WooCommerce->Settings->Zettle.
Enter your e-mail adress in the the User e-mail field. The e-mail is used for sending the Access Token required when purchasing a subscription.
- Press Authorize to connect the plugin with your Zettle account, popup windows must be allowed in the browser for this to work.
- You are then redirected to Zettle, enter your account details and authorize the plugin (your account user-id and password remains safe with Zettle and cannot be reached by the plugin).
- When the authorization is complete, close the window
Products to Zettle
Select how often you want to Sync products to Zettle.
The plugin can create a set of products in Zettle out of the products you have in WooCommerce. Products that you already have in Zettle will remain unchanged.
When syncing products the plugin can be configured to update stock levels on the products in Zettle created by the plugin.
The plugin can be configured to Use the price from the Zettle standard price field or the sales price field. If the sales price field is chosen and the field is blank on a product, the plugin will use the standard price on that product.
Include products with status selects if only products being published or if all products regardless status should be synced. This is useful for products sold in Zettle but not in the web shop.
In Product categories to sync you can select the product categories that will be synced to Zettle, leave blank if you want all products to be synced.
Some things to remember about product synchronization:
- When you use the selection When changed in WooCommerce it can take a minute or two before you see the change in Zettle.
- If you have large number of products, the sync will take a long time. Do not start it several times.
- You can always start a manual sync by pressing the Start button
- If you want to prevent a single product or variation from being synced to Zettle, use the “Do not sync to Zettle” checkbox. You find it at the Inventory tab of simple products or at each variation of variable products.
Products from Zettle
The recommended way of working is to administer your products in WooCommerce and let them sync automatically to Zettle.
It is possible to configure what fields you do want to be able to change in Zettle and get automatically updated in WooCommerce.
The plugin can also be configured to create new WooCommerce product based on new products created in Zettle
Purchases from Zettle
You can select how often you want to Download purchases.
When downloading purchases the plugin is creating a local copy of your purchases. You can view and perform actions on downloaded purchases in the Zettle tab, found in the main WordPress menu.
The plugin can create an order or just change the stock level for products being sold when a purchase is arriving to WooCommerce. These functions can also be manually performed at the Zettle tab in the main menu.
The plugin is adding a Barcode field at the Inventory tab on each simple product. On variable products a Barcode field is added on each variation of the product.
You can enter information manually on each product or let the plugin populate the Zettle barcode field in a number of different ways:
- Generate an EAN-13: If the barcode-field in WooCommerce is empty an EAN-13 barcode will be generated and saved on both the Zettle and WooCommerce products.
- Use the barcode field in WooCommerce described above and copy the data in the field to Zettle.
- Use the SKU field on the product or variation and copy the data in the field to Zettle.
- Use the barcode field in Zettle and copy the data to the WooCommerce barcode field (useful if you want to handle the admin of barcodes in the Zettle app)
- Clean the barcode field (useful if you want the plugin to generate new barcodes automatically later.)
CAUTION: Use the advanced settings carefully and only if you fully understand the implications.
Enable logging if you experience problems with the plugin and need to trouble-shoot.
Contact email@example.com for more information about the advanced settings.
Q: What can I sync if I do not purchase a subscription?
A: All syncing is open during the trial period.
Q: I believe that I have configured everything correct and done manual sync, still nothing happens. No products being synced to Zettle and no purchases downloaded.
A: Your system probably has CRON disabled. Go to the settings page, check the box \”CRON disabled on server\” and save. While you are there, also check the \”Enable logging\”. Check the logs at \”WooCommerce->Status->Logs\” after a couple of minutes and you will see how the updates started. If not, send us the logfiles to firstname.lastname@example.org and we will look into the problem.
Q: Some variable products are created without variations in Zettle, is this a bug?
A: Zettle has a limit of max 99 variations on a product. To handle this, we are removing all variations on a product with more than 99 variations.
Q: When I sync products from Woo to Zettle, it seems that all products are uploaded to the “root” on Zettle. Will the sync still work both ways if I move the products to different folders in the Zettle admin (with browser) after the Woo -> Zettle sync?
A: The sync will always work both ways regardless of how you organize the products into folders from the browser or app.
Q: If I rename products (shorten names) on the Zettle website, will this have any affect on syncing? It will not change the product names in Woo store, right? What name will be shown in the customers receipt (I would prefer the longer name from Woo)?
A: Do not rename products in Zettle. The name change will be overwritten next time the product is synced from WooCommerce. Instead use the field “Product name” at the Zettle tab on your products. Just enter the name you want on the product in Zettle in the field.
Contributors & Developers
“WooCommerce Zettle Integration” is open source software. The following people have contributed to this plugin.Contributors
- Verified to work with WordPress 6.1
- Fix: Duplicate categories in WooCommerce sometimes not handles properly when syncing to Zettle
- Fix: Logs behaving strangely if null values are entered
- Verified to work with WooCommerce 7.0
- Added advanced option to skip looking for webhook signatures from Zettle
- Fix: Plugin sometimes loosing connection to Zettle when site is inactive for a long time
- Fix: Drafts not syncing correctly to Zettle after last update
- Fix: Better error messages for some scenarios
- Fix: Fixed more typos
- Moved around options to make the plugin easier to understand and use
- Added better support for UUIDs created outside of the plugin
- Fix: Multiple typos in the plugin corrected
- Fix: Error when accessing tax options for certain configurations
- Verified to work with WooCommerce 6.8
- Fix: Not able to handle attributes with only numerical values when exporting to Zettle
- Verified to work with WooCommerce 6.7
- Added Getting started guide to plugin
- Fix: Export button not working properly sometimes when using WPML/Polylang
- Fix: Plugin will always use sale price when available regardless of pricing option chosen
- Verified to work with WordPress 6.0 and WooCommerce 6.5
- Added option to sort variants and attributes alphabetically when imported from Zettle
- Added option to map barcode imported from Zettle to a specific meta data field in WooCommerce
- Fix: getPid() causing warnings when disabled
- Fix: Attribute name empty when importing attribute from Zettle that has a space before or after the name
- Verified to work with WooCommerce 6.3
- Added option to trigger save_post when stock is updated from Zettle
- Added option to trigger low and no stock notification emails when stock is changed via Zettle
- Fix: Cron replacement option triggered queued actions ran before actual requests to service, causing severe lag
- Fix: Scheduled sales caused Mismatch errors
- Fix: Issue where new products created could sometimes have an existing reference to Zettle attached – causing duplicate behavior
- Verified to work with WooCommerce 6.2
- Added option to trigger save_post when products are created/updated in WooCommerce via Zettle
- Fix: Issue with stocklevel changes if the Zettle Purchase stock change option and Products from Zettle stocklevel option was turned on at the same time
- Verified to work with WordPress 5.9 and WooCommerce 6.1
- Fix: Categories was duplicated in every sync if synced from Zettle.
- Fix: TAX was incorrectly stored on order when creating WooCommerce order from Zettle purchase, causing problems if syncing to accounting system.
- New: Added admin option to clear all Zettle data on products in WooCommerce
- New: Added function to set specific category to be used in Zettle on WooCommerce product.
- The plugin is verified to work with WooCommerce 5.9
- New: Added option for prioritizing Zettle price above Sale price
- Fix: Changed import type to Merge products as default
- Fix: Error thrown if SKU is too long
- Fix: Notices failing to show up
- Fix: Variations out of stock were synced even when configured not to
- Fix: Added timestamp to notices
- Fix: Failing to unschedule actions causing error
- Fix: thepostid variable not declared causing warnings
- Fix: Wrong number of parameters in the update of products from zettle caused products to be created although setting was set to only update.
- The plugin is verified to work with WooCommerce 5.7
- Fix: Tax was not handled correct for US Zettle installations if vat was not enabled in WooCommerce
- Fix: Variation images was not imported when importing products from Zettle
- Fix: Purchases did not update when using debug mode.
- The plugin now requires PHP 7.3
- The plugin is verified to work with WooCommerce 5.6
- New: Now using the inventory tracking started and stopped messages from Zettle
- Fix: The webhook error message was not removed after a temporary webhook error
- Fix: Metadata was cleaned from products when using delayed publication, resulting in duplicates in Zettle.
- Fix: Product variations with 0 in stock in Zettle was not set to manage stock when imported to WooCommerce
- Fix: Missing customer name on orders.
- Fix: VAT was not stored correctly on orders causing VAT to not show in statistics. Use the repair function to fix already created orders.
- Verified to work with WordPress 5.8 and WooCommerce 5.5
- Fix: Stocklevel was not set to 0 if a product was created in an import from Zettle.
- Fix: If multiple Taxes was used on a purchase, taxes was not set correctly on created orders.
- Fix: If stocklevel was set both from “Products from Zettle” and from “Purchases” the stocklevel could be corrupted in some cases.
- New: Implemented the new Zettle tax-setting API. Currently only used for USA-customers.
- New: Added the possibility to not sync SKU to Zettle.
- Fix: In some cases stocklevel is not updating correctly when importing manually.
- Fix: Allow for non-numeric article id:s when syncing stocklevel change directly to the ERP-system Fortnox.
- Fix: Purchases from Zettle where not automatically downloaded if the configuration page was saved after v7.0.4, please check the configuration and save the page again.
- New: Added an error message when the backend service is unable to connect to the site.
- Fix: Products included in a grouped product did not sync as expected.
- Fix: In some cases metadata was not cleaned correctly when trashing a product.
- Fix: Adjusted error message lenght on CURL errors.
- Fix: Variable products did not update correct to Zettle
- Fix: In some cases stocklevel changes on product variants did causes faulty “Mismatch” error mesasge.
- Fix: In some cases updating a product caused a fatal error in the barcode update.
- Fix: Settings page for products to Zettle did not load due to an error.
- Fix: Stocklevel on variaitons was not handled correctly
- Fix: When importing new variable products from Zettle, the product variations where not saved in all cases.
- Fix: Importing product variation images from Zettle caused an error and the image was not imported.
- Discontinue: Removed the function for free sync once a week. We have decided to remove this functionality since it is making the plugin development complex and prohibits some new functions wanted.
- New: The plugin now requires WooCommerce > 4.0.
- New: The plugin now support the handling of stocklevel on product level for variable products.
- New: Added a Warning when webhooks (pusher) calls from Zettle cannot access the store. Theese calls are required for the plugin to work. Contact support if you get such a message.
- New: Added the possibility to enter customer name, customer email and customer phone in any comment on a order row in Zettle. The data can be comma-separated and “email = comment including an @”, “phone = a string with only numbers”. Anything else will be interpretated as customer name and can separated with space like “Firstname” “Lastname”, a single string will be intepretated as “Company”.
- New: Added the possiblity to change stocklevel from Zettle also when having the plugin configured to create orders.
- Fix: Zettle changed timestamp format whithout notice, causing purhcases to get wrong dates.
- Fix: Product stocklevels where not synced when a new product was created in Zettle.
- Fix: Limiting online description to 3500 characters to prevent product sync to fail.
- Fix: Changes all text references from iZettle to Zettle.
- Fix: Variations in variable products did not save due to a typo in a function call
- Fix: Previously the plugin was using both pull and webhook functions for downloding of purchases. In rare cases this could cause duplicates in the download.
- Fix: Product name > 64 characters caused the product to fail in syncing.
- Fix A product created from Zettle does not get a correct status if the status is not explicity set in the advanced settings.
- Fix: Import of products from WooCommerce craches in some cases.
- Fix: Typo in callback-function
- Fix: Changed webhook received to REST API due to incompatibility of json handling in WooCommerce a5.1.
- Fix: Global attributes failed to save when importing a Zettle product.
- Fix: Zettle started to use ISO-time instead of UNIX-time in purchase timestamp.
- Fix: Due to a change in 6.6.0 purchases including products with a ” in the name fails to process.
- Fix: When products where checked to not sync, the metadata for not synced was deleted and the product was faulty synced again.
- Fix: The SKU was not imported correctly from Zettle.