{"id":344119,"date":"2026-07-28T18:47:50","date_gmt":"2026-07-28T18:47:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/steadysync-square-sync\/"},"modified":"2026-07-28T18:47:32","modified_gmt":"2026-07-28T18:47:32","slug":"steadysync-for-square","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/steadysync-for-square\/","author":23532621,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.2","requires":"6.4","requires_php":"8.1","requires_plugins":null,"header_name":"Steadysync \u2013 Inventory Sync for Square","header_author":"famosMedia","header_description":"Keeps WooCommerce stock and catalog in sync with Square. An anti-zeroing guard rejects empty or partial updates so a sync never overwrites your stock with 0. Webhook-driven, with a dry-run preview.","assets_banners_color":"165954","last_updated":"2026-07-28 18:47:32","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/steadysync.net","header_author_uri":"https:\/\/famos-media.de","rating":0,"author_block_rating":0,"active_installs":0,"downloads":29,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"famosmedia","date":"2026-07-28 18:47:32"}},"upgrade_notice":{"1.0.0":"<p>First public release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3626346,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3626346,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3626346,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3626346,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3626346,"resolution":"1","location":"assets","locale":"","width":2564,"height":2650},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3626346,"resolution":"2","location":"assets","locale":"","width":2564,"height":326},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3626346,"resolution":"3","location":"assets","locale":"","width":2564,"height":666}},"screenshots":{"1":"Connection and health \u2014 connect Square (sandbox token or production OAuth), select the location, set the webhook signature key, and see the connection health status.","2":"Dry-run preview \u2014 the catalog and stock changes a sync would make, computed without writing anything.","3":"Health panel \u2014 connection status, last successful sync and error count."}},"plugin_section":[],"plugin_tags":[6601,10229,2672,1558,286],"plugin_category":[45],"plugin_contributors":[271826],"plugin_business_model":[],"class_list":["post-344119","plugin","type-plugin","status-publish","hentry","plugin_tags-inventory","plugin_tags-pos","plugin_tags-square","plugin_tags-sync","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-famosmedia","plugin_committers-famosmedia"],"banners":{"banner":"https:\/\/ps.w.org\/steadysync-for-square\/assets\/banner-772x250.png?rev=3626346","banner_2x":"https:\/\/ps.w.org\/steadysync-for-square\/assets\/banner-1544x500.png?rev=3626346","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/steadysync-for-square\/assets\/icon-128x128.png?rev=3626346","icon_2x":"https:\/\/ps.w.org\/steadysync-for-square\/assets\/icon-256x256.png?rev=3626346","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/steadysync-for-square\/assets\/screenshot-1.png?rev=3626346","caption":"Connection and health \u2014 connect Square (sandbox token or production OAuth), select the location, set the webhook signature key, and see the connection health status."},{"src":"https:\/\/ps.w.org\/steadysync-for-square\/assets\/screenshot-2.png?rev=3626346","caption":"Dry-run preview \u2014 the catalog and stock changes a sync would make, computed without writing anything."},{"src":"https:\/\/ps.w.org\/steadysync-for-square\/assets\/screenshot-3.png?rev=3626346","caption":"Health panel \u2014 connection status, last successful sync and error count."}],"raw_content":"<!--section=description-->\n<p>Steadysync keeps your WooCommerce store in sync with your Square catalog and inventory. It is built around one idea: a sync should never destroy data. An empty, partial or non-numeric stock update is rejected instead of being written, so your WooCommerce stock is never silently set to 0.<\/p>\n\n<p>The plugin connects to your Square account, imports your catalog and keeps stock levels up to date in real time using Square webhooks. Before anything is written you can run a dry-run preview that shows exactly which catalog and stock changes a sync would make.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li><strong>Square \u2192 WooCommerce inventory sync<\/strong> for the selected Square location, with an anti-zeroing guard: empty, partial or non-numeric quantities are rejected and never applied as 0.<\/li>\n<li><strong>Catalog import<\/strong> \u2014 product name, description, price, SKU and the item image are imported from Square. Simple and variable products are supported. Images are only re-downloaded when the Square image actually changes, so repeated syncs do not bloat your media library.<\/li>\n<li><strong>Real-time updates via Square webhooks<\/strong> \u2014 incoming events are HMAC signature-verified and de-duplicated so the same event is never applied twice.<\/li>\n<li><strong>Secure Square connection<\/strong> \u2014 connect a sandbox access token, or connect a production account via OAuth. Tokens are stored encrypted (AES-256-GCM) and refreshed automatically before they expire.<\/li>\n<li><strong>Dry-run preview<\/strong> \u2014 compute the catalog and stock changes a sync would make, without writing anything.<\/li>\n<li><strong>Timeout-safe batch import<\/strong> \u2014 large catalogs are imported one page per background run, so imports do not time out.<\/li>\n<li><strong>Health monitor<\/strong> \u2014 an hourly connection check with an admin panel and an optional email alert on persistent errors.<\/li>\n<li><strong>WP-CLI<\/strong> \u2014 <code>wp steadysync status<\/code>, <code>preview<\/code>, <code>catalog_sync<\/code>, <code>sync_start<\/code>, <code>sync_status<\/code>, <code>sync_cancel<\/code>.<\/li>\n<\/ul>\n\n<h4>Extended features (separate add-on)<\/h4>\n\n<p>Two-way sync and migration are available through <strong>Steadysync Pro<\/strong>, a separate add-on distributed at <a href=\"https:\/\/steadysync.net\">steadysync.net<\/a> and not hosted here: WooCommerce \u2192 Square push (inventory, catalog and images), order\/refund sync as Square ledger adjustments, multi-location stock aggregation and a one-click import of an existing Square product mapping. The add-on is optional; this plugin is fully functional on its own.<\/p>\n\n<h4>Trademarks<\/h4>\n\n<p>Square is a trademark of Block, Inc. WooCommerce is a trademark of Automattic Inc. Steadysync is an independent, unofficial plugin and is not affiliated with, endorsed by or sponsored by Block, Inc. or Automattic Inc. These names are used only to describe compatibility.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the <strong>Square API<\/strong> (provided by Block, Inc.). Square is required for the plugin to work: it is the source of the catalog and inventory data that the plugin imports into WooCommerce, and the connection that lets your store stay in sync with your Square account.<\/p>\n\n<p>What the plugin sends to Square and when:<\/p>\n\n<ul>\n<li>When you connect your account (OAuth authorization and token exchange, or when you save a sandbox access token) and when your stored token is automatically refreshed: your Square application credentials and OAuth\/refresh tokens are exchanged with Square.<\/li>\n<li>When you test the connection or load your locations: an authenticated request is sent to Square to list your business locations.<\/li>\n<li>On every catalog import, dry-run preview and inventory read (manually, on a schedule, or when a Square webhook is received): authenticated requests are sent to Square to read catalog objects and inventory counts. These requests contain your access token and the catalog\/location identifiers being queried; no WooCommerce customer data is sent.<\/li>\n<li>Product images shown in Square are downloaded from Square-hosted image URLs during catalog import.<\/li>\n<\/ul>\n\n<p>The plugin also <strong>receives<\/strong> webhook notifications from Square at a REST endpoint it registers (<code>\/wp-json\/steadysync\/v1\/square-webhook<\/code>); those requests are verified with the HMAC signature key from your Square webhook subscription.<\/p>\n\n<p>Square's terms and privacy policy:<\/p>\n\n<ul>\n<li>Square Terms of Service: https:\/\/squareup.com\/us\/en\/legal\/general\/ua<\/li>\n<li>Square Privacy Notice: https:\/\/squareup.com\/us\/en\/legal\/general\/privacy<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce.<\/li>\n<li>Install and activate Steadysync.<\/li>\n<li>Go to <strong>WooCommerce \u2192 Steadysync<\/strong>. Connect your Square account \u2014 a sandbox access token for testing, or a production account via OAuth (enter your Square application credentials and add the shown redirect URL to your Square app).<\/li>\n<li>Run <strong>Test connection<\/strong>, then pick the Square location to sync.<\/li>\n<li>In the Square Developer dashboard, create a webhook subscription pointing at the <strong>Webhook URL<\/strong> shown on the settings page, and paste its signature key into <strong>Webhook Signature Key<\/strong>.<\/li>\n<li>Optionally run <strong>Compute preview<\/strong> to see what a sync would change before you enable it.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20a%20sync%20ever%20set%20my%20stock%20to%20zero%3F\"><h3>Will a sync ever set my stock to zero?<\/h3><\/dt>\n<dd><p>No. An empty, partial or non-numeric stock update is rejected by the anti-zeroing guard, so your existing WooCommerce stock is kept instead of being overwritten with 0.<\/p><\/dd>\n<dt id=\"is%20real-time%20sync%20included%3F\"><h3>Is real-time sync included?<\/h3><\/dt>\n<dd><p>Yes. Updates are delivered by Square webhooks; incoming events are signature-verified and de-duplicated. Webhook handling is part of the free plugin.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20square%20account%3F\"><h3>Do I need a Square account?<\/h3><\/dt>\n<dd><p>Yes. The plugin reads your catalog and inventory from Square via the Square API, so a Square account (sandbox for testing, or a production account) is required. See the \"External services\" section above.<\/p><\/dd>\n<dt id=\"does%20it%20sync%20from%20woocommerce%20back%20to%20square%3F\"><h3>Does it sync from WooCommerce back to Square?<\/h3><\/dt>\n<dd><p>This plugin syncs Square \u2192 WooCommerce. Two-way sync (WooCommerce \u2192 Square push), order sync, multi-location aggregation and one-click mapping import are available through the separate Steadysync Pro add-on at steadysync.net.<\/p><\/dd>\n<dt id=\"which%20product%20types%20are%20supported%3F\"><h3>Which product types are supported?<\/h3><\/dt>\n<dd><p>Simple and variable products. Variable Square items are imported as a WooCommerce variable product with its variations.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release. Square \u2192 WooCommerce inventory sync with an anti-zeroing guard, catalog and image import for simple and variable products, real-time signature-verified webhooks, encrypted tokens with automatic refresh, a timeout-safe batch import, a dry-run preview, a health monitor and WP-CLI commands.<\/li>\n<\/ul>","raw_excerpt":"Sync your Square inventory and catalog into WooCommerce. An anti-zeroing guard means a sync never overwrites your stock with 0.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/344119","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=344119"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/famosmedia"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=344119"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=344119"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=344119"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=344119"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=344119"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=344119"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}