WooCommerce Lightspeed POS

WooCommerce Lightspeed POS allows you to integrate and import inventory from Lightspeed to WooCommerce and sync inventory across both systems.

This extension requires a Lightspeed account.
If you do not have one, you can sign up for a free Lightspeed trial account here.

Installation ↑ Back to top

  1. Download the .zip file from your WooCommerce.com account.
  2. Go to: WordPress Admin > Plugins > Add New to upload the file you downloaded with Choose File.
  3. Activate the extension.

More information at: Installing and Managing Plugins.

Concept ↑ Back to top

Before we get started, here is a little theory to help you understand what kind of sync relationship this extension establishes.

The sync scenario: ↑ Back to top

It is helpful to know the difference between a 1-way and 2-way sync scenario. This extension sets up a 1-way sync scenario. What does that ensue? Here is a rough concept draft of it:

Initial Setup 1-way sync (available) ↑ Back to top

  • WooCommerce is empty, no products.
  • Lightspeed is full, many products.
  • Lightspeed fills WooCommerce with products. Initial Import (See next: Load Products from Lightspeed POS).
  • WooCommerce sells products and feeds inventory changes back to Lightspeed
  • Product management is done in Lightspeed for all values that are synced by the extension: Price, images etc. while WooCommerce provides the beautiful storefront.

This is what defines a 1-way sync scenario using this extension to sync Lightspeed with your WooCommerce store: Lightspeed overrules / manages WooCommerce product inventory while WooCommerce feeds selected info (sales, inventory) back to it. We try to depict this in our little header graphic.

Due to the fact that Lightspeed is the deciding factor in this system, we call Lightspeed the “Source of Truth”.

The whole scenario is not a 2-way sync in a way that:

Initial Setup 2-way sync (not available) ↑ Back to top

  • WooCommerce has some products
  • Lightspeed has some products
  • WooCommerce and Lightspeed get scanned and compared upon each sync or import request
  • Products that match on both sides get linked to each other
  • Products missing on either side get copied over

With that in mind, lets begin with the initial import.

Setup and Configuration ↑ Back to top

1. Go to: WooCommerce > Settings > Integration > WooCommerce Lightspeed POS Integration.

2. Click the Connect to Lightspeed button:

WooCommerce Lightspeed POS settings page

3. Log into Lightspeed, and click the Authorize Application button when redirected to the Lightspeed Retail page:

Lightspeed Authorization Screen

4. Confirm your site when the WooCommerce API connector requests it:

WooThemes API Connector

Once confirmed, you’ll be redirected to your site. If authorization completed successfully, a success message and your store name will appear on the Settings page:

Lighspeed Authorization Success

Multi-store configuration ↑ Back to top

This extension can handle multiple stores from your Lightspeed account. However you must set one primary inventory source for WooCommerce.

  1. Tick the checkbox(es) of stores from which you want to import products.
  2. Tick the primary inventory store – this is the store that the plugin will use to sync inventory to and from.
  3. Save changes.
Multistore setup
Multi-store setup
Note: WooCommerce by default does not support multiple inventory locations. If you have multiple Lightspeed stores, you must designate one of them as your primary “inventory” store that the plugin will use to read inventory values from as well as sync inventory values to. 

Usage ↑ Back to top

Load Products from Lightspeed POS ↑ Back to top

Once setup and configuration are complete and API settings are initialized, Lightspeed POS products can be loaded.

  1. Go to: WooCommerce > Lightspeed.
  2. Click the Load Products from Lightspeed button.
Note: It may take a few minutes to finish. Please be patient. The extension will first load products and then matrix products.

WooCommerce Lightspeed POS first loads products without making them live on your WooCommerce store. This allows you to pick and choose which products to import.

Import and Sync Products from Lightspeed POS ↑ Back to top

Once products are loaded from Lightspeed POS, your screen should populate a table with products. For example:

WooCommerce LightSpeed POS Import Page with LightSpeed Products
WooCommerce Lightspeed POS Import Page with Products

There are five actions that can be performed on products loaded from Lightspeed:

  • Import & Sync – Makes the products live on your WooCommerce store and adds to the sync schedule. What does this mean? Your product is now available in WooCommerce >> Products. It is published and visible in the front end. Also a sync link relationship is now established. The WooCommerce product and it’s Lightspeed source product are now linked to each other. The extension installs a CRON job that runs every five minutes, to ensure that items with established sync links are added to the sync list. Products are checked against Lightspeed for any changes every five minutes and additionally on these events. If a product has not changed in the last five minutes, then it will not trigger a sync event.
  • Import – Makes the product live on your WooCommerce store, but doesn’t attempt to sync it with Lightspeed later. No sync link relationship is  established.
  • Sync – Adds an imported product to the sync schedule only and establishes a sync link. If a product has not been imported, it cannot be synced.
  • Update – Pulls all Lightspeed data and immediately updates the WooCommerce product linked to it. Caution: This will override attributes of live products in your store!
  • Delete – Removes a product from the table of loaded Lightspeed POS products.
Note: If you import a product and update later, data from Lightspeed will override the live version in your WooCommerce Store. Use the Update action with caution!
Note: Mistakes happen. We recommend to keep frequent database updates, so you can rollback when you synced one time too much. Open a support ticket if you need assistance with this.

Matrix/variable product support ↑ Back to top

In Lightspeed, “Matrix Products” are equivalent to WooCommerce’s “Variable Products“. We recommend you read the documentation on both platforms before using this plugin because these concepts take some time to learn. Both of them.

On the Lightspeed page, Matrix items have a “stacked” look, which is different from single items. It also says Matrix in the SKU and inventory columns. Importing and syncing Matrix items is the same as importing single items.

Note: While Lightspeed counts each Matrix item as one separate item, WooCommerce does not. It bundles together variable products as one thus the product count in WooCommerce and Lightspeed will be different if you use matrix products.

Importing Matrix/variable products ↑ Back to top

When importing a Matrix product from Lightspeed into WooCommerce, a new variable product is created and the following properties are downloaded and automatically generated:

Syncing with Matrix items is straightforward. Whenever inventory is set for variation items, it pushes that data to Lightspeed. Also, every five minutes a sync job will pick up on any changes made to variations in Lightspeed and then proceed to update the variations in WooCommerce.

Note: The plugin will automatically set the stock status of a variation product to “In stock” if the inventory is greater than zero.

Import all products

If you want to mass import products, click Import All Products into WooCommerce:

Note: Importing all products can take time, depending on how many you have. Do not close the browser window until complete, or you need to start over. As stated above: Import – Makes the product live on your WooCommerce store, but doesn’t attempt to sync it with Lightspeed later. No sync link relationship is  established.

Categories ↑ Back to top

WooCommerce Lightspeed POS also allows you to import product categories with one click. Go to your Lightspeed settings located at WooCommerce >> Settings >> Integrations and click on “Import Lightspeed Categories”.


The category call is throttled and managed by our extension to not overload the Lightspeed API. Just keep hitting that “Import Lightspeed Categories” button (pause some seconds inbetween each interval) until all of your categories are present.

Version 1.4.7 has full category support. However when setting up your categories you need to heed the following.

Subcategories ↑ Back to top

Subcategories that share the same parent category (so called sibling categories) must have unique category names.
While Lightspeed allows sibling categories to have identical names, WordPress does not. In WordPress each slug (URL path) must be unique. Make sure that subcategories that share the same parent all have unique names.

Tags ↑ Back to top

Tags are imported with the first sync from Lightspeed to WooCommerce.

Send Products from WooCommerce to Lightspeed POS ↑ Back to top

When using this extension you should initially create your products in Lightspeed and then create them in WooCommerce by importing them. However you can send WooCommerce products that are already created and missing on the Lightspeed side to Lightspeed from the product detail page as a one-time initial setup step.

To do this, click the Sync with Lightspeed button in the Lightspeed Settings meta box on the right side:

Sync with Lightspeed button
Sync with Lightspeed button

This creates the product in Lightspeed with the following data points sent over:

  • SKU – this will show up under the “Custom SKU” field in Lightspeed
  • Images (gallery and single images are supported)
  • Inventory
  • Price – regular price and sale price are supported

After this the sync relationship defaults to Lightspeed being the source of truth. The WooCommerce product will not continue to send these values from WooCommerce to Lightspeed but will be managed by the Lightspeed side as long as the sync link is active. See the “Import and Sync” action for more information on sync links.

Shipping dimensions: length, width, height and weight, Product description, Product short description, Variation description (for variable products) are not supported by Lightspeed anymore
Note: The Lightspeed API only allows a max of 3 attributes for matrix items. If you are trying to sync over a WooCommerce product with more than 3 attributes, the plugin returns an error. We are still pondering over this. Developers, if you have any feedback we would love to hear it.

Manual Sync ↑ Back to top

You can trigger a manual product sync by either visiting your Lightspeed import page and using the “Update” function there.

Or by using the “Manual Update via Lightspeed” button located in the sidebar with each single product view in the WooCommerce backend.

Database Structure ↑ Back to top

The following tables are installed upon activation (with wp_ being the prefix):

 wp_wclsi_items 
 wp_wclsi_item_attribute_sets 
 wp_wclsi_item_categories 
 wp_wclsi_item_e_commerce
 wp_wclsi_item_images 
 wp_wclsi_item_prices 
 wp_wclsi_item_shops

wp_wclsi_items stores most essential info such as:

  • id a general item id to identify a product within the WooCommerce Lightspeed plugin tables.
  • item_id the item id used by Lightspeed.
  • wc_prod_id the post id used by WooCommerce. NULL if product has not been imported to WooCommerce.
  • wclsi_import_date shows date and time of the import. NULL if not imported.
  • wclsi_last_sync_date shows date and time of the import. NULL if never synced.
  • wclsi_is_synced shows 1 if a product has an active sync link to Lightspeed from WooCommerce. NULL if product is not linked from WooCommerce to Lightspeed.
The “Last updated”: information on the WooCommerce Lightspeed import page pulls info from date and time info that is set in the Lightspeed account. Not from the local server, not from WordPress.
Developers:
Developers: This makes querying datasets simpler. For example:
SELECT * FROM wp_wclsi_items WHERE wc_prod_id IS NULL
gives you all products in your WooCommerce store that are not linked to a Lightspeed product.

Current Release ↑ Back to top

WooCommerce Lightspeed version 1.4.8 – see the changelog for full details.
The current release includes:

  • Fixed a bug where products import would halt on some sites.

If you have current issues please open a support ticket with us, to access the most current development version which fixes outstanding issues.

Read before updating ↑ Back to top

  • User updating from version 1.4.2 or prior will require a database update. The most important step is to take a full backup. You must be prepared to rollback using a backup. Test your rollback first, before you update! An untested backup might still leave you stranded.
  • Your sync links and all other data prior to the update will be preserved. However we recommend three important steps besides a backup: testing, testing, testing. If you need assistance, please open a support ticket with us and we will guide you through the update process.

Software Requirements ↑ Back to top

These software settings are required to run WooCommerce Lightspeed without issues.

  • PHP 5.6 or higher,
  • MySQL 5.6 or higher,
  • PHP Max Execution time of 180s or higher.
  • allow_url_fopen
  • allow_url_include = 1
  • WordPress CRON active
  • This extension is NOT WordPress Multisite compatible. We are working on this.
  • This extension does NOT support Windows server. Use on Windows on your own risk.

You can use this plugin: WP-Serverinfo to check your environment settings.

For editing PHP parameters, please see this blog post.

Recommended Hardware ↑ Back to top

A WooCommerce shop, like every eCommerce platform, needs some serious hosting. Here is a recommendation so you can run this extension with your WooCommerce store smoothly.

  • Private Dedicated Server.
  • Processor: Intel® Xeon® E5-2680V4 or better.
  • RAM: 24 GB DDR4 RAM (ECC) or better
  • Disks: 120 GB SSD / 960 GB SAS – RAID 10

Compatibility ↑ Back to top

Cross Compatibility ↑ Back to top

At the moment WooCommerce Lightspeed does not officially support other WooCommerce extensions. It should work fine with most of them, not causing any issues when used in conjunction with. However additional capabilities added by other extensions for example Product Vendors or Brands are not supported.

Known Incompatibilities ↑ Back to top

 

FAQ ↑ Back to top

Sync triggers ↑ Back to top

Products that are ticked to be synced will automatically trigger an inventory check with Lightspeed during the following events:

  • Before a customer views a product page
  • Before a customer adds a product to the cart
  • Before a customer checks out

On the final step before checkout a last check is triggered. If the Lightspeed inventory is zero then the checkout process will be halted and an “out of stock” error should be displayed to your customer.

Inventory changes in WooCommerce are also pushed to Lightspeed. For example, whenever an order is complete or inventory is added to a product, those changes are made in Lightspeed.

Go here to read about what fields are synced.

Can we sync / import products selectively for example by category only? ↑ Back to top

This feature is on our roadmap but not available yet. If you know code and can develop customisations you can take a look at the https://github.com/rafdizzle86/woo-lightspeed-customizer. The customizer is not compatible with the current version of WooCommerce Lightspeed. It needs updating so it uses the correct hooks and methods. However once this is done you can leverage the provided filters in WooCommerce Lightspeed to selectively import products.

Categories are missing or incomplete when importing products. ↑ Back to top

Please our section on subcategories and the limitations with sibling categores.

Lightspeed API Error – 403 Not Authorized
MerchantOS API Call Error: String could not be parsed as XML

This error occurs if your Lightspeed backend is locked via a pin and the account you used to connect your Lightspeed to WooCommerce falls under this restriction. Either remove the pin or use your full Lightspeed account for connecting your Lightspeed to your WooCommerce store.

What about fields like short and long description and shipping dimensions? ↑ Back to top

Lightspeed used to offer these fields in their free Web Store feature. This has been replaced by “eCom”. While these fields are still available to you upon request via Lightspeed support, we have confirmation that these might be removed in the feature. We recommend using WooCommerce only for entering your short and long description and measurements.

The error “Unable to resolve api.merchantos.com” frequently comes up. ↑ Back to top

Lightspeed throttles their API requests to 40 requests per minute, which can result in temporary disconnection from their API. Wait a minute, and retry the action you were trying to perform.

“Lightspeed API Error – 429 Rate Limit Exceeded: Please decrease your request volume. ↑ Back to top

The WooCommerce Lightspeed extension runs a WordPress CRON every five minutes which checks and collects WooCommerce products that need to be updated during your main sync cycle. The Lightspeed API imposes a limit of API calls, that your store may execute. In order to abide by this we use Javascript to distribute the amount of API calls of your store within the restrictions of Lightspeed’s API.

If you see the error “Lightspeed API Error – 429 Rate Limit Exceeded: Please decrease your request volume” than it is probably because either:

  • You have been using “manual sync” a bit too much in which case, slow down please ;).
  • Or you are syncing variable products with a lot of images and variations, which makes it difficult for our script to distribute your stores API calls evenly.

My Lightspeed is slow, not responding, not connecting. ↑ Back to top

If you experience continuous Lightspeed performance problem, it might be a good idea to also check the status of Lightspeed.

Do WooCommerce backorders get synced? ↑ Back to top

WooCommerce Backorders are not supported at the moment. We are investigating whether Lightspeed is able to handle this and if yes how we can implement this.

How is the price synced? ↑ Back to top

The WooCommerce product price is controlled and managed by what you set in Lightspeed as “Default” price. As of v1.4.8 “Sale” prices can be synced as well. However be careful when activating the sale price on the Lightspeed side. Lightspeed will automatically fill in all “Sale” price values with what you set for “Default” prices. This means that on sync with WooCommerce, all of your WooCommerce products will have their “Sale” price value set. Prior sale prices you set in WooCommerce will be overwritten when you sync. This will not trigger them to go on sale in WooCommerce, but your WooCommerce sale prices will all get overwritten.

How do I add a sale price? ↑ Back to top

In Lightspeed go to Settings >> Pricing levels.

Click on “New Pricing Level” and name it “Sale”. Exactly “Sale”.
Not “sale”, not “sales” or “Sales”. Please take note of our warning above for “How is the price synced?

The sync doesn’t seem like it’s working. ↑ Back to top

WooCommerce Lightspeed requires WordPress CRON to be active. Check whether your wp-config.php file has DISABLE_WP_CRON constant set to true. Furthermore check whether your WooCommerce product is linked to the Lightspeed instance. Go to the product detail page and find the Lightspeed settings meta box.

If you see this:

Then there is no sync link established. Which means your WooCommerce product and Lightspeed product are not talking to each other. You can delete the product from your WooCommerce store and recycle bin and then re-import from Lightspeed to put the sync link back in place.

The product count / amount in WooCommerce and Lightspeed are different. ↑ Back to top

While Lightspeed counts each Matrix item as one separate item, WooCommerce does not. It bundles together variable products as one thus the product count in WooCommerce and Lightspeed will be different if you use matrix products.

A previously imported product no longer shows up in the Lightspeed Import Page. ↑ Back to top

For this we recommend deleting the WooCommerce product instance and removing it from the recycle bin. After this simply re-import from Lightspeed.

Variable Products outofstock in backend

Sometimes variable products display as outofstock in your WooCommerce Products overview at /wp-admin/edit.php?post_type=product: 

You can try and set a default variation to solve this issue:

You can use any variation as default variation.

Variable Products are not displayed in the front-end dropdown ↑ Back to top

Try the following as a first step:

  • Pick any variable products which is not displayed fully in your front-end dropdown.
  • Create a new product manually, create some variations manually similar to your problematic product. Does it display ok?

If it does: Delete the problematic product and create the product manually anew fully. In this case you probably had some corrupt database entry which you replaced successfully by writing the data manually. After this delete the new manually created product fully, also from your recycle bin and re-import from Lightspeed if you need the sync link as well.

If it fails:

  • Go to: /wp-admin/edit.php?post_type=product&page=product_attributes and create the products attributes there.
  • Create the attribute names:

  • Create a test product and create the variations using those created attributes instead of creating the attributes within the product.

This should work. Now repeat this for all other attributes and variable products or re-import from Lightspeed if you need the sync link as well.

Imported products show broken WooCommerce product images ↑ Back to top

The code uses the PHP function file_get_content . This requires allow_url_fopen to be set to true and also allow_url_include = 1 in your php.ini. 

Make sure this is set or ask your hosting provider to set it for you.

Does WooCommerce Lightspeed support [fill in plugin name]? ↑ Back to top

Not at the moment. Please see our section on compatibility for more information.

The Sync says Pending… ↑ Back to top

This indicates that no syncing of data has been performed from Lightspeed to WooCommerce but is scheduled. Trigger a manual update if you do not want to wait.

My product description does not get synced over but it is entered in Lightspeed notes ↑ Back to top

Shipping dimensions: length, width, height and weight, Product description, Product short description, Variation description (for variable products) are not supported by Lightspeed anymore. This FAQ item will still work but please read this.

The Lightspeed notes field is for internal use only. These fields will not get synced over. You need to use the following fields in Lightspeed for your product description:

If you cannot see the “Web Store” menu item, you need to activate it by going to Settings >> Getting Started. Or directly: https://us.merchantos.com/firststart.php

Here is the video tutorial by Lightspeed POS to get you started: https://www.lightspeedhq.com/webhelp/retail/webstore/en/content/setting-up-web-store/installing-webstore.html

In Lightspeed “Web Store” is not the same as eCom which is described here: https://www.lightspeedhq.com/ecommerce/pricing/

Activating it should not trigger any additional fees. If you are unsure about this, ask your Lightspeed support. To our knowledge Lightspeed uses both terms interchangeable especially in the documentation which makes it hard to maintain an overview of what is what.

How do you update product photos? ↑ Back to top

The photos are pulled in from Lightspeed upon import. You can change them on WooCommerce but they won’t synchronize back to Lightspeed because of the nature of the sync scenario. However if you change them on Lightspeed and select the “Update” action, then photos should be updated on your WooCommerce store.

How can I update product categories? ↑ Back to top

Right now category updates are only imported once. We currently do not support category updates but we hope to add this feature to the plugin very soon.

Does this integration support Matrix products? ↑ Back to top

Yes. This integration has been improved to include them.

Does this integration support multiple Lightspeed stores? ↑ Back to top

Yes. This integration has been improved to support multiple LightSpeed stores. We are currently in the process of updating our extension to allow for inventory syncing across multiple store locations. Even though you can import products from different stores, inventory syncing will only occur across one store – most likely the first store that is listed in the Lightspeed settings page.

Does this work with Lightspeed Retail? ↑ Back to top

Yes, this integration works with their Retail cloud-based product. It does not work with Lightspeed Onsite (server based) or Lightspeed Restaurant (does not integrate with WooCommerce).

Can I duplicate / copy products using a plugin or WooCommerce? ↑ Back to top

No. This feature is not supported. Please import or create the product in WooCommerce anew instead.

Does Lightspeed connect and sync automatically to the same WooCommerce product upon import if it is already created in my WooCommerce store? ↑ Back to top

No. Lightspeed will not automatically detect the “right” product in your WooCommerce store because of the nature of a 1-way-sync scenario. Upon import a new WooCommerce product will be created. Instead you should either delete the WooCommerce product and then import & sync from Lightspeed. There is no re-link feature. If you are interested in this feature, please submit the idea and cast your vote at our ideas board.

Do newly added Lightspeed products automatically get imported from Lightspeed into WooCommerce? ↑ Back to top

Yes! You will need to be on v1.4.9+ for this to be available. Go to WooCommerce -> Settings -> Integrations to enable this feature:

When new products are added to Lightseed, you will be notified in WooCommerce that they were added:

Note: this feature is not enabled by default.
Note: when auto-loading matrix products, the matrix “parent” product needs to have at least one variation (child) products in order for the auto-loading event to pick up the matrix “parent” product and have it displayed in the Lightspeed import table.

What happens when there’s a change (e.g., stock) in my Lightspeed account? ↑ Back to top

Unfortunately Lightspeed’s integration does not send notifications whenever there are changes in a Lightspeed account, so there’s no way for your WooCommerce store to know immediately if a product’s data has changed, or if a Lightspeed store has been deleted or a new one added, for example.

However, this plugin has implemented polling (constant checks) against Lightspeed’s API to make sure that critical values such as inventory are up to date before a customer checks out on your WooCommerce store: see the above FAQ: Sync triggers

What fields are synced? ↑ Back to top

Along with the frequent inventory checks, the following changes in Lightspeed are pulled into WooCommerce during the syncing event, or you can manually pull the changes using the “update” action:

  • SKU – this will show up under the “Custom SKU” field in Lightspeed
  • Images – live images will get overwritten during the sync from Lightspeed into WooCommerce
  • Inventory
  • Price – regular price and sale price
Note: Any sync automatically calls the Update action. This means data from Lightspeed will override the live version in your WooCommerce Store. Keep frequent database updates handy at all times. You will need them at one point.
This makes it simpler to query datasets. For example use SELECT * FROM wp_wclsi_items WHERE wc_prod_id IS NULL gives you all products in your WooCommerce store that are not linked to a Lightspeed product. 

Do sales get synced to Lightspeed? ↑ Back to top

No, this extension sync product and inventory data only.

What’s the best way to request a feature for this plugin? ↑ Back to top

You can send us your feature request via our WooCommerce Lightspeed Ideas Board Section.  Our developer check there frequently and popular requests get turned into features from time to time, so do drop us a line. We also try to monitor and reply to as many threads as we can.

Please do keep in mind though that customisations are not supported and your idea can take a long time to implement. If you need a customisation fast, we encourage you to hire a dedicated developer via:

What’s the best way to test this plugin? ↑ Back to top

Lightspeed allows you to test their Retail POS offering for free via a 14-day trial. We recommend to sign up for the free trial in conjunction with setting up a test WooCommerce store to see if this plugin meets your business needs.

Are there any tutorials for Lightspeed available? ↑ Back to top

Sure, apart from there documentation found at: https://retail-support.lightspeedhq.com/hc/en-us (pick Getting Started or Retail Desktop to begin) – There are also some videos on Vimeo available. They are:

Filter and Action Hooks ↑ Back to top

Note: This is a Developer level section. If you are unfamiliar with code, filters and hooks, and resolving potential conflicts, select a WooExpert or Developer for assistance. We are unable to provide support for customizations under our  Support Policy.

Lightspeed POS has been extended to support filters and actions that you can hook into. This allows for better customization. For example: You want the Update action to only update the inventory field and not override other fields such as title and content.

Note that this requires some technical and coding knowledge. More at WooCommerce Lightspeed Hooks.

Questions & Support ↑ Back to top

Have a question before you buy? Please fill out this pre-sales form.

Already purchased and need some assistance? Get in touch the developer via the Help Desk.

WooCommerce - the most customizable eCommerce platform for building your online business.

Back to the top