Crosslist from WooCommerce to Square — Sync Your WordPress Store to the Till
There is an official Square plugin for WooCommerce, and its users rate it 2.1 out of 5. Here is what actually transfers from a WordPress store to Square, and the SSL problem that breaks both routes.
- There is an official Square plugin for WooCommerce, and its own users rate it 2.1 out of 5. Of 121 reviews on WordPress.org, 82 are one star — 68% of everything written about it (WordPress.org plugin directory, checked 27 August 2026). It has 80,000+ active installations. That combination — heavily used, heavily disliked — is the single most important fact on this page.
- Its sync is bidirectional with a system of record you nominate — and the official documentation never defines what happens on conflict. There is no conflict-resolution section. A merchant cannot answer “which side wins if both changed?” from the docs, which is exactly the question that matters when stock is involved.
- WooCommerce is the WordPress e-commerce plugin, and it is the largest e-commerce platform by installation count — 8.1% of all websites and 48.1% of all e-commerce systems whose platform is known (W3Techs, 27 August 2026). WordPress itself runs 40.7% of the web.
- Square is an unusually forgiving destination. No product taxonomy, no leaf categories, no required per-category attributes. Nothing to map into and nothing to fail validation against.
- What transfers: title, description, price, SKU, stock, images and a category. What does not: WooCommerce variable-product structure, product tags, attributes, custom fields, reviews and order history.
- SSL is not optional on either side. Square’s own plugin requires an SSL certificate; WooCommerce’s REST API authentication over Basic auth stops working the moment the site does not correctly report itself as secure. If your WordPress site has a certificate but a broken
is_ssl— behind a reverse proxy, typically — connections fail with a 401 that reads like a permissions problem and is not. - Cost: FLUF Connect is £1 for 7 days, then plans from £9/month (Starter). There is no free plan.

On this page
- Why a WooCommerce store adds Square
- The official Square plugin, and what its reviews actually say
- How to crosslist from WooCommerce to Square
- The SSL problem that breaks both integrations
- What transfers, field by field
- Variable products: the WooCommerce-specific wrinkle
- What syncs and what does not
- Self-hosted control, and what it costs you
- Mistakes that cost money
- What FLUF Connect costs
- Sources and verification
Why a WooCommerce store adds Square
If you run a WooCommerce store — the WordPress e-commerce plugin that powers 48.1% of all online stores whose platform is identifiable, on a WordPress base that accounts for 40.7% of the entire web — you already own your storefront outright. No monthly platform fee, no transaction surcharge for using the gateway you prefer, and a database you can query yourself. That is the whole appeal of WooCommerce, and it is a real one.
What a WordPress site cannot do is take a card at a market stall with one bar of signal. For that you want a card reader, a phone, and an item library that already knows your prices — which is Square, on a plan that costs nothing per month.
The reason this matters more than it sounds: US e-commerce was 17.1% of total retail sales in the second quarter of 2026 (US Census Bureau, released 18 August 2026). Roughly 83% of retail still happens in front of a person. A WooCommerce store is excellent at the 17%; Square is how you reach into the rest without rebuilding anything.
Before going further: Square operates in eight countries — the United States, Canada, the United Kingdom, Ireland, France, Spain, Australia and Japan — and cannot sell in a second currency in any configuration. A WordPress store outside that list has no Square option. The full comparison lives on Square vs Shopify.
The official Square plugin, and what its reviews actually say
Unlike Shopify, WooCommerce has a first-party answer to this problem. Square for WooCommerce is an officially maintained plugin, version 5.4.3, last updated 6 August 2026, tested against WordPress 7.0.4, with 80,000+ active installations. It handles payments — cards, Apple Pay, Google Pay, Square Gift Cards and, in the US only, Cash App Pay — plus product and inventory sync covering names, stock, prices, categories and images (WordPress.org).
It is also rated 2.1 out of 5.
| Rating | Reviews | Share |
|---|---|---|
| 5 stars | 26 | 21% |
| 4 stars | 4 | 3% |
| 3 stars | 6 | 5% |
| 2 stars | 3 | 2% |
| 1 star | 82 | 68% |
That distribution is bimodal rather than mediocre, and for an officially maintained integration with 80,000 installs it is genuinely unusual. It deserves to be read carefully rather than used as a stick.
What the support forum shows
The recurring failures on the plugin’s support forum cluster tightly, and they are not cosmetic:
- Sync failing in one direction silently — “Order Status/Inventory not pushing from Woo to Square”.
- Images not syncing to Square.
- Checkout-level payment failures — “Payment nonce is missing”, “Card nonce already used with a different idempotency key”.
- Settings that will not persist — the synchronise configuration failing to save.
- Products missing after sync despite SKUs being present, which is the matching layer failing rather than the transport.
- Digital wallet buttons disappearing from the classic cart after a WooCommerce update.
The gap in the documentation
The plugin’s sync is bidirectional: WooCommerce to Square and Square to WooCommerce, with the merchant nominating one platform as the system of record which then pushes updates (WooCommerce documentation).
What the official documentation does not contain is any section on conflict resolution. It does not define supported product types, variation limits, SKU matching rules, multi-location behaviour or multi-currency handling either. The absence is itself the finding: a merchant cannot answer “will my variable products survive this, and which side wins if both changed?” from the docs. When the thing being synchronised is stock, that is not a documentation nicety.
Requirements, for completeness: WooCommerce 10.8 or later, PHP 7.4 or later, and — stated explicitly — “An SSL certificate must be installed on your site to use Square.” That last one has its own section below, because it fails in a way that looks like something else.
Where a separate sync layer differs
This page exists because there is a second way to do it, and the trade-off is worth stating plainly rather than pretending the official plugin does not exist.
The Square plugin for WooCommerce couples payments and catalogue sync in one component installed inside your WordPress site. That is convenient, and it means a WordPress update, a PHP version bump or a theme conflict can take out your card processing and your inventory sync together. Several of the forum reports above are exactly that shape.
FLUF Connect does something narrower: it treats WooCommerce and Square as two channels of one catalogue and synchronises inventory between them from outside both. It does not touch your checkout. Your WooCommerce payments stay with whatever gateway you already use; Square handles the money taken at the till. If FLUF stops, your shop keeps selling.
It also means the same catalogue reaches everything else at once. Square is one of {channel_count} channels — a WooCommerce store pushing to Square can push to marketplaces from the same place, which the Square plugin by definition cannot do.
How to crosslist from WooCommerce to Square
The path runs through your WordPress admin, because that is where a WooCommerce store’s credentials live.
- Install the FLUF Connect plugin for WooCommerce from your WordPress admin — Plugins → Add New, search for FLUF Connect, install and activate. This is the same install flow as any other WordPress plugin and requires no code.
- Connect your WooCommerce store. FLUF authenticates against the WooCommerce REST API using a consumer key and secret pair. These are generated inside WooCommerce → Settings → Advanced → REST API in your WordPress admin, and they are what the connection depends on — not your WordPress login.
- Connect Square via OAuth: you approve FLUF from inside your own Square account. FLUF resolves your primary Square location and store currency at this point. The location matters because Square tracks stock per location; a catalogue with no resolvable location can hold items but cannot hold inventory.
- Import your WooCommerce catalogue. Products, prices, stock levels, SKUs and images are read into FLUF.
- Review category mapping against your Square library.
- Select products and crosslist. Each becomes a Square
ITEMwith oneITEM_VARIATION, plus a stock write against your location and an image upload. - Check the first ten in Square’s dashboard before pushing the rest.
Square’s data model is the thing that shapes the result. A Square listing is two objects. The item carries the name, description, category and images; the variation carries the price, SKU and stock. Price and stock writes must target the variation — sent to the item they succeed and change nothing. Square money is also in minor units, so a £12.99 WooCommerce price goes over the wire as 1299.
The SSL problem that breaks both integrations
This one deserves its own section because it produces a confidently wrong diagnosis, and it catches WordPress sites specifically.
WooCommerce’s REST API accepts key-and-secret credentials over HTTP Basic authentication only when the request is genuinely secure. A very common WordPress hosting shape — a site behind a reverse proxy, a load balancer or a CDN that terminates TLS upstream — has a perfectly valid certificate at the edge while WordPress itself does not know the request arrived over HTTPS. The site looks secure in a browser. WooCommerce refuses the credentials.
What you see when that happens is a 401 with the message “Sorry, you cannot list resources.” — and that message is a trap in three separate ways:
- It is not a permissions error. It is WooCommerce’s generic reply to an unauthenticated request. The fix is the credentials or the SSL detection, not the user’s role. Measured against a known-healthy store: correct key and secret returns 200; correct key with a wrong secret returns this exact 401; an entirely unknown key returns the same 401.
- Status code is the real signal. 401 means never authenticated. 403 means authenticated but under-privileged. Only 403 is about permissions.
- The message is localised. An Italian store returns “Non puoi creare una lista delle risorse.” Never diagnose by matching the string; use the error code and the HTTP status.
The cheap, sound test of a WooCommerce store’s credentials is a read-only request to GET /wp-json/wc/v3/system_status using the real key and its real secret, and expecting a 200. Anything built on sending a deliberately bogus key proves nothing, because every healthy WordPress store rejects a bogus key the same way.
Square’s plugin hits the same wall from the other side — it states an SSL certificate is required — which is why a store with a proxy-terminated certificate can fail both integrations simultaneously and look like it has a Square problem. It has a WordPress problem.
What transfers, field by field
| WooCommerce field | Square field | Transfer status | Notes |
|---|---|---|---|
| Product name | ITEM.name |
✅ Automatic | Square’s limit is 512 characters |
| Long description | ITEM.description |
✅ Automatic | Square’s field is plain text and preserves newlines; WordPress block markup and HTML are stripped rather than rendered |
| Regular price | ITEM_VARIATION.price_money |
✅ Automatic | Converted to minor units; currency comes from Square, not from WooCommerce |
| SKU | ITEM_VARIATION.sku |
✅ Automatic | A stable one is generated if the WooCommerce product has none |
| Stock quantity | Inventory at your Square location | ✅ Automatic | A separate call after the item exists; a failure here is logged, not fatal |
| Product gallery | ITEM.image_ids |
✅ Automatic | Best-effort. The first image becomes the POS tile icon |
| Product category | ITEM.categories |
⚡ Smart mapped | Square categories are merchant-defined; an item may sit in several |
| Variable product variations | — | ⚠️ One variation only | See below |
| Sale price | — | ❌ Not transferred | Square has its own discount objects, driven separately |
| Product tags | — | ❌ Not transferred | No Square equivalent |
Product attributes (pa_*) |
— | ❌ Not transferred | Square has item options but they are not populated from WooCommerce attributes |
| Custom fields / meta | — | ❌ Not transferred | |
| Reviews | — | ❌ Not transferred | |
| Customers and orders | — | ❌ Not transferred | This is inventory crosslisting, not a migration |
Legend: ✅ automatic · ⚡ smart mapped · ⚠️ needs your attention · ❌ not available.
Variable products: the WooCommerce-specific wrinkle
WooCommerce distinguishes simple products from variable products, and the distinction decides how cleanly this works.
A simple product — one price, one SKU, one stock number — maps perfectly onto a Square item with one variation. Nothing is lost. For the categories where WooCommerce is strongest among independent sellers — art, furniture, food, made-to-order, one-off and vintage stock — most of the catalogue is simple products, and this is a complete transfer.
A variable product is one WordPress post with child variations, each with its own price, SKU and stock. FLUF’s crosslisting model is one product, one listing, which becomes one Square item with one variation. Where your inventory is already organised as one FLUF product per sellable SKU, you get one Square item per SKU: correct and sellable, but a list rather than the size-and-colour grid your WooCommerce shoppers see.
At a till that is frequently the shape you want. Staff tap “Blue Hoodie L” rather than tapping a product and then working through two dropdowns while a queue forms. For a deep apparel catalogue it is a genuine limitation, and it is better known before a thousand-item push than after.
It is worth noting that the official Square plugin’s documentation does not state its own position on variable products at all — which is the gap described earlier, showing up exactly where it costs the most.
What syncs and what does not
| Behaviour | Supported | Detail |
|---|---|---|
| Create a Square item from a WooCommerce product | Yes | Item, variation, stock, images, category |
| Edit a live Square item | Yes | Read-modify-write against Square’s object version |
| Delete a Square item | Yes | |
| Sells on WooCommerce → removed from Square | Yes | The direction that stops you overselling |
| Sells on Square → cleared from WooCommerce | No | Square sold-detection is not wired. Mark it sold in FLUF and FLUF clears the rest |
| WooCommerce order sync | Yes | WooCommerce orders are read into FLUF |
| Square order sync | No | Square revenue does not appear in FLUF’s order figures |
| Payments / checkout | Not touched | Your WordPress checkout and gateway are unchanged |
The asymmetry worth understanding is that WooCommerce order sync works and Square’s does not. WooCommerce exposes a clean, documented REST API and FLUF reads orders from it. Square’s sold-detection has not been wired, and emitting sold-signals from a source that has not been proven is how a seller’s whole catalogue gets delisted everywhere in one sweep. A missing feature you know about is better than an automated one that destroys listings.
Self-hosted control, and what it costs you
The reason WooCommerce holds 48.1% of identifiable e-commerce installations is ownership. There is no platform subscription, no gateway surcharge, no plan tier gating your staff accounts, and no company that can decide your store is off its platform tomorrow. Set against Square — a payment facilitator where your account is a sub-account under Square’s own master merchant ID, reviewed as transactions happen rather than underwritten up front — that difference in ownership is stark.
The bill arrives elsewhere. You own hosting, updates, backups, PHP version management and the compatibility surface between WordPress core, WooCommerce, your theme and every plugin. One of the recurring Square plugin failures listed above — digital wallet buttons vanishing from the classic cart after a WooCommerce update — is precisely that surface breaking. On a hosted platform someone else absorbs that; on WordPress it is yours.
Note also the trajectory. Across May 2025 to May 2026, store counts moved: Shopify up 11.7%, Wix up 8.4%, Squarespace up 2.0%, WooCommerce down 6.8%. It remains the largest by raw count — roughly 4.08 million stores against Shopify’s 3.06 million — but the direction is worth knowing when you are deciding where to invest effort.
The practical conclusion is not “leave WooCommerce”. It is that the catalogue should not live only inside one WordPress database, and that adding a till channel is cheap insurance as well as extra revenue.
Mistakes that cost money
Diagnosing a WooCommerce 401 as a permissions problem. It is an authentication problem, nearly always the key, secret or SSL detection. Only a 403 is about permissions.
Testing WooCommerce credentials with a deliberately invalid key. Every healthy WordPress store rejects a bogus key identically, so the test proves nothing. Use the real key and expect a 200.
Running the Square plugin and a separate sync layer over the same products at once. Two writers, no defined conflict resolution on one of them. Pick one to own the catalogue.
Aiming a price update at the Square item. Price and stock live on the variation. A write to the item succeeds and changes nothing.
Assuming a Square sale clears WooCommerce. It does not yet. Mark it sold in FLUF.
Expecting WooCommerce attributes to become Square item options. They do not. Square’s options exist but are not populated from pa_* attributes.
What FLUF Connect costs
FLUF Connect is £1 for 7 days, then plans from £9/month (Starter). The rest of your first month is charged after the seven days, so you are not paying more, just not all of it up front. There is no free plan.
Automation — relisting, offer management and bulk operations — is included in every plan, not sold as a paid add-on. Full details on the pricing page.
Sources and verification
- Square for WooCommerce plugin: WordPress.org plugin directory; support forum; official documentation. Version, install count and review distribution checked 27 August 2026.
- WooCommerce and WordPress market share: W3Techs, data as of 27 August 2026.
- Square catalogue model and limits: Catalog API overview; CatalogItem; CatalogItemVariation.
- Square availability and currency: multiple currencies; UK pricing.
- Retail context: US Census Bureau quarterly e-commerce report, 18 August 2026.
The WooCommerce REST API authentication behaviour described above was measured directly against a known-healthy store, comparing a correct key and secret, a correct key with a wrong secret, and an unknown key. Square’s support articles carry no last-updated dates, so figures from them are marked as checked rather than dated.
Related guides
Frequently Asked Questions
Yes — Square for WooCommerce, officially maintained, with more than 80,000 active installations. It handles payments plus product and inventory sync. It is also rated 2.1 out of 5 on WordPress.org, with 82 of its 121 reviews at one star. Recurring reports include sync failing in one direction, images not syncing, settings that will not save, and products missing after sync despite SKUs being present.
Any self-hosted WordPress site running WooCommerce 10.8 or later on PHP 7.4 or later, with a working SSL certificate. The one common blocker is a WordPress site behind a reverse proxy or CDN that terminates TLS upstream: the certificate is valid at the edge but WordPress does not know the request arrived over HTTPS, and WooCommerce then refuses REST API credentials with a 401 that reads like a permissions error.
No. FLUF Connect synchronises your catalogue from outside both platforms and does not touch your checkout, your theme or your front end. That is the main structural difference from the Square plugin, which installs payments and catalogue sync as one component inside your WordPress site — so a WordPress update, a PHP bump or a theme conflict can take out card processing and inventory sync together.
Partly, and it is worth understanding before a bulk push. Simple products — one price, one SKU, one stock number — map perfectly onto a Square item with one variation and nothing is lost. Variable products become one Square item per sellable SKU rather than a size-and-colour grid. At a till that is often the better shape, because staff tap the item instead of working through dropdowns, but for a deep apparel catalogue it is a real limitation.
FLUF connects through the WooCommerce REST API using a consumer key and secret generated in WooCommerce, Settings, Advanced, REST API — so any WooCommerce version exposing wc/v3 works. For the official Square plugin specifically, the stated requirements are WooCommerce 10.8 or later and PHP 7.4 or later.
Product name, long description, regular price, SKU, stock quantity, gallery images and a category. Sale prices, product tags, pa_ attributes, custom fields, reviews, customers and order history do not — this is inventory crosslisting, not a migration. Prices convert to Square's minor units, so £12.99 is sent as 1299, and the currency comes from your Square account.
No, and this is where Square is much easier than a marketplace. Square has no product taxonomy at all — a category is simply an object you created, with no leaf nodes and no required per-category attributes. There is nothing to fail validation against. The trade-off is that Square gives you no structure for free, so whatever organisation your Square library has is organisation you built.
Not automatically yet. Square sold-detection is not wired, so you mark the item sold in FLUF and FLUF clears it from your other channels. The other direction does work: a WooCommerce sale removes the item from Square automatically, and WooCommerce order sync is supported, so WooCommerce orders are read into FLUF.
That is WooCommerce's generic reply to an unauthenticated request, not a permissions error — the fix is the credentials or the SSL detection, not the user's role. A correct key with a wrong secret and an entirely unknown key both produce exactly this 401. Judge by status code rather than text: 401 means never authenticated, 403 means authenticated but under-privileged. The message is also localised, so never match on the string.
FLUF Connect plans start at £9/month on Starter, with Seller at £29/month and Pro at £99/month; every plan is unlimited on listings and marketplaces, and the tiers differ by which automations they include and how often we check your channels for sales. There is no free plan. Bulk operations are included in every plan, and relisting and offer management from Seller upwards rather than sold as add-ons. Square itself costs nothing per month on its entry plan, so adding a till channel to a WooCommerce store is inexpensive.
