{"id":336205,"date":"2026-07-11T07:36:16","date_gmt":"2026-07-11T07:36:16","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/eren-labs-stocktake-for-woocommerce\/"},"modified":"2026-07-11T19:15:16","modified_gmt":"2026-07-11T19:15:16","slug":"stocktake-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/stocktake-for-woocommerce\/","author":23527105,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.21","stable_tag":"1.1.21","tested":"7.0.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Eren Labs \u2013 Stocktake for WooCommerce","header_author":"Eren Labs","header_description":"Physical inventory counting for WooCommerce: scan barcodes, blind-count stock, review variances, and post adjustments in one click.","assets_banners_color":"403a60","last_updated":"2026-07-11 19:15:16","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/erenlabs.net\/stocktake-for-woocommerce\/","header_author_uri":"https:\/\/erenlabs.net","rating":0,"author_block_rating":0,"active_installs":0,"downloads":40,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.20":{"tag":"1.1.20","author":"erenlabs","date":"2026-07-11 07:36:08"},"1.1.21":{"tag":"1.1.21","author":"erenlabs","date":"2026-07-11 19:15:16"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3603698,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3603698,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3603698,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3603698,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.20","1.1.21"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Your stocktakes at a glance \u2014 start a count, resume an open one, and see the variance and value of every session.","2":"Count with the phone camera, blind mode and live variance checked against WooCommerce stock as you go.","3":"Stock Pulse (Pro): a live view of total units, stock value, sales movement, top movers and dead stock.","4":"Review every variance, then post the adjustments to WooCommerce in one click \u2014 with an automatic restore point first.","5":"Restore points \u2014 undo the last apply instantly, or roll back to any earlier count on Pro.","6":"A fully localized upgrade screen with a clear Free vs Pro comparison."}},"plugin_section":[],"plugin_tags":[271031,6601,271032,161230,271030],"plugin_category":[45],"plugin_contributors":[271033],"plugin_business_model":[],"class_list":["post-336205","plugin","type-plugin","status-publish","hentry","plugin_tags-barcode-scanner","plugin_tags-inventory","plugin_tags-inventory-reports","plugin_tags-stock-count","plugin_tags-stocktake","plugin_category-ecommerce","plugin_contributors-erenlabs","plugin_committers-erenlabs"],"banners":{"banner":"https:\/\/ps.w.org\/stocktake-for-woocommerce\/assets\/banner-772x250.png?rev=3603698","banner_2x":"https:\/\/ps.w.org\/stocktake-for-woocommerce\/assets\/banner-1544x500.png?rev=3603698","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/stocktake-for-woocommerce\/assets\/icon-128x128.png?rev=3603698","icon_2x":"https:\/\/ps.w.org\/stocktake-for-woocommerce\/assets\/icon-256x256.png?rev=3603698","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Most WooCommerce inventory plugins help you <em>manage<\/em> stock numbers. Stocktake for\nWooCommerce helps you <em>verify<\/em> them against reality \u2014 the physical count process\nthat stores actually run.<\/p>\n\n<p>Workflow:<\/p>\n\n<ol>\n<li><strong>Create a session.<\/strong> Pick a scope (all products or selected categories). A\nsnapshot of current stock is taken so later sales don't distort the variance.<\/li>\n<li><strong>Count.<\/strong> Open the count screen on a phone or tablet and scan. A recognised\nbarcode is counted on the spot \u2014 no quantity prompt, the cursor never leaves\nthe scan box, so you scan one item after another without stopping. Scan the\nsame product again and it adds on top (5 + 1 = 6, shown clearly). Need a\ndifferent quantity? Fix it on the editable list of what you just scanned.\nOptional <strong>blind count<\/strong> hides the expected number so counters aren't biased.<\/li>\n<li><strong>Review variances.<\/strong> See expected vs counted, unit differences, and the value\nof the discrepancy.<\/li>\n<li><strong>Apply.<\/strong> Post the counted quantities back to WooCommerce stock in one click.<\/li>\n<li><strong>Export.<\/strong> Download the count sheet as CSV for your records.<\/li>\n<\/ol>\n\n<h4>Free core<\/h4>\n\n<ul>\n<li>Unlimited stocktake sessions<\/li>\n<li>Snapshot-based variance (count while the store stays open)<\/li>\n<li>Counting modes: partial (spot count) and full \/ zero-based<\/li>\n<li>Barcode \/ SKU \/ product-name scan screen (USB &amp; Bluetooth scanners)<\/li>\n<li>Phone camera barcode scanning \u2014 <strong>Beta<\/strong> (no hardware needed; some barcode types may not scan on every device \u2014 a handheld scanner or typing the SKU always works)<\/li>\n<li>Blind count<\/li>\n<li>Automatic stock backup before every apply, with one-click undo of the last apply<\/li>\n<li>Resume an unfinished count later (scans are saved as you go)<\/li>\n<li>Background snapshot for large catalogues<\/li>\n<li>Variance value using WooCommerce Cost of Goods meta (with a filter to override)<\/li>\n<li>Reorder shortlist \u2014 everything at or below its low-stock level (or out of\nstock) with CSV export, plus a negative-stock warning<\/li>\n<li>Count-completeness warning before a full\/zero-based apply<\/li>\n<li>CSV export<\/li>\n<li>One-click stock adjustment<\/li>\n<\/ul>\n\n<h4>Pro<\/h4>\n\n<ul>\n<li>Quick stock check \u2014 scan any product, see its live stock with a full\nper-variant breakdown, and fix a quantity on the spot (audit-logged, with\nconfigurable access for count staff)<\/li>\n<li>Add-on-top (tally) counting mode \u2014 count box by box across passes<\/li>\n<li>Goods-in (receiving) mode \u2014 scanned quantities are added to current stock<\/li>\n<li>Full restore-point history \u2014 browse and roll back to any point<\/li>\n<li>Inventory valuation report \u2014 on-hand value at retail and at cost, per category, with a purchase-price field<\/li>\n<li>Insights \u2014 ABC count-priority classification and an accuracy &amp; shrinkage trend across your stocktakes<\/li>\n<li>Per-session variance-by-category breakdown \u2014 see which part of the shop leaks stock<\/li>\n<li>Multiple counters with attribution (who counted what)<\/li>\n<li>Recount \/ approval workflow<\/li>\n<li>Scheduled \/ recurring count reminders<\/li>\n<li>Printable count sheets and branded PDF reports<\/li>\n<li>Priority email support<\/li>\n<\/ul>\n\n<h3>Third-party libraries<\/h3>\n\n<p>This plugin bundles the ZXing barcode library (@zxing\/library, MIT license,\nhttps:\/\/github.com\/zxing-js\/library) at assets\/js\/vendor\/zxing.min.js, used as a\nfallback decoder for the phone-camera scanner when the browser has no native\nBarcodeDetector. It is served locally and never loaded from a remote CDN.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin uses the Freemius SDK (https:\/\/freemius.com) for optional usage\ntracking and for licensing\/updates of the separate Pro version. On first\nactivation you are shown an explicit opt-in screen; NOTHING is sent anywhere\nunless you click \"Allow &amp; Continue\" \u2014 choosing \"Skip\" keeps the plugin fully\nfunctional with no data leaving your site. If you opt in, Freemius receives\nbasic site data (site URL, WordPress\/PHP versions, plugin version, admin email)\nto provide update notifications and support.\nFreemius terms: https:\/\/freemius.com\/terms\/\nFreemius privacy policy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>stocktake-for-woocommerce<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress.<\/li>\n<li>Go to <strong>Stocktake<\/strong> in the admin menu and create your first session.<\/li>\n<\/ol>\n\n<p>WooCommerce must be installed and active.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20change%20my%20stock%20automatically%3F\"><h3>Does it change my stock automatically?<\/h3><\/dt>\n<dd><p>No. Counting only records numbers. Stock is changed only when you press\n<strong>Apply adjustments<\/strong>.<\/p><\/dd>\n<dt id=\"will%20counting%20block%20sales%3F\"><h3>Will counting block sales?<\/h3><\/dt>\n<dd><p>No. Each session snapshots stock at creation time, so the store can keep selling\nwhile you count. The variance is measured against the snapshot.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20variations%3F\"><h3>Does it work with variations?<\/h3><\/dt>\n<dd><p>Yes \u2014 each stock-managed variation is counted as its own line. Scanning a\nvariation's barcode (SKU or the WooCommerce GTIN\/UPC\/EAN\/ISBN field) counts\nthat exact variation, and applying updates that variation's stock.<\/p><\/dd>\n<dt id=\"which%20barcodes%20are%20recognised%3F\"><h3>Which barcodes are recognised?<\/h3><\/dt>\n<dd><p>A scanned code is matched against the SKU first, then against WooCommerce's\nown GTIN \/ UPC \/ EAN \/ ISBN product field (WooCommerce 9.2+). Both work for\nproducts and variations.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.21<\/h4>\n\n<p>A ground-up rework of the counting screen for real, non-stop scanning.<\/p>\n\n<ul>\n<li>One-scan counting: a recognised barcode \u2014 or a name-search pick, or a camera\nread \u2014 is counted the instant it resolves. No quantity prompt, no dialog, the\ncursor never leaves the scan box, so you scan one item after another at the\npace of the scanner. First scan counts 1.<\/li>\n<li>Scan the same product again and it adds on top, in every mode, with a clear\n\"5 + 1 = 6\" note so an accidental double-scan can never pass unnoticed.<\/li>\n<li>Corrections moved to a big, editable panel for the item you just counted plus\nan editable list of recent scans: adjust a quantity with the +\/\u2212 stepper\n(saved automatically) or remove a line entirely. No need to touch the screen\nat all if the default of 1 is right.<\/li>\n<li>A product that isn't in this count's list is simply added and counted when you\nscan it (you're holding it, after all) \u2014 with a quiet note, never a pop-up.\nA code that matches no product shows an inline message with the scanned code.<\/li>\n<li>Hardware scanners are recognised even when the cursor sits in a quantity\nfield, and a barcode-sized quantity is refused \u2014 a stray scan is treated as\nthe next item, not saved as a count.<\/li>\n<li>New REST endpoint and audit-log event for removing a count (Pro's session\nhistory shows these as \"Count removed\").<\/li>\n<li>Reliability: live-count reads are never served from a cache, and rapid or\noverlapping scans are processed in order so no count is lost or double-counted.<\/li>\n<\/ul>\n\n<h4>1.1.20<\/h4>\n\n<ul>\n<li>Fix: the bundled ZXing barcode library is back in the package \u2014 a packaging\nstep had been leaving assets\/js\/vendor\/ out of the zip, which broke the\nphone-camera scanner's fallback decoder on iOS.<\/li>\n<li>Directory housekeeping for WordPress.org: escapes all admin output through\nwp_kses(), prepares every database query with placeholders, uses a more\ndistinct internal PHP namespace, and drops directory image files and build\nmetadata from the plugin package.<\/li>\n<li>Every Pro-only engine \u2014 the approval workflow, presets, scheduled\nreminders, stock-check access layer and the Pro report helpers \u2014 now ships\nexclusively in the separately distributed Pro build.<\/li>\n<\/ul>\n\n<h4>1.1.19<\/h4>\n\n<ul>\n<li>Fix: Excel exports now declare a default cell style, so strict readers\n(e.g. openpyxl) no longer warn about a missing default style. The files\nalways opened correctly in Excel; this makes them fully standard.<\/li>\n<li>Fix: a cancelled stocktake now shows \"View\" instead of \"Count\" in the list.<\/li>\n<li>Fix: the phone-camera scanner shows a clear message when the camera can't\nstart (unsupported browser or insecure context) instead of doing nothing.<\/li>\n<\/ul>\n\n<h4>1.1.18<\/h4>\n\n<ul>\n<li>WordPress.org review compliance: the free plugin now contains no Pro code\nat all \u2014 Pro-only counting modes and cost valuation live exclusively in\nthe separately distributed Pro build (nothing is locked or gated).<\/li>\n<li>All admin JavaScript is enqueued via wp_enqueue_script (no inline tags).<\/li>\n<li>Documents the optional Freemius opt-in under \"External services\".<\/li>\n<\/ul>\n\n<h4>1.1.17<\/h4>\n\n<ul>\n<li>Variable products: parent-level (pooled) stock is now counted correctly as one\nline; scanning any of its variations lands on that line, and per-variation\nSKUs can no longer count against the wrong sibling.<\/li>\n<li>Fix: a recount saved after \"Apply\" is now always pushed on the next Apply,\nwhile items whose count matched the records are never touched \u2014 sales made\nduring the stocktake are preserved exactly.<\/li>\n<li>Reports: Pulse\/Insights pages now stay fast and light on huge catalogues,\nexclude trashed products, respect the shop timezone, and exports stream\nany catalogue size without memory limits or skipped rows.<\/li>\n<li>History gains paging past 300 entries; goods-in sessions export the received\nquantity; presets are addressed by stable ids (stale tabs can no longer\ndelete the wrong preset); many smaller fixes from the second code audit.<\/li>\n<\/ul>\n\n<h4>1.1.16<\/h4>\n\n<ul>\n<li>Security &amp; reliability: reject counting\/adjusting draft or trashed products;\nvalidate quantities; guard against concurrent Apply double-counting stock;\nthe auto-backup now aborts Apply if it can't be fully written.<\/li>\n<li>Fix: Undo now rolls back each Apply wave correctly; a failed save no longer\nfreezes the counting screen; blind counts no longer leak expected quantities.<\/li>\n<li>Fix: comma decimals (12,5) are accepted; upgrade\/activation edge cases,\nthe count reminder after reactivation, and full data cleanup on uninstall.<\/li>\n<li>Adds a Cancel button to a stocktake; clearer export column and safer CSVs.<\/li>\n<\/ul>\n\n<h4>1.1.15<\/h4>\n\n<ul>\n<li>Fix: the admin menu icon rendered as a plain white square on some\ncolour schemes; the brand icon now displays in full colour.<\/li>\n<\/ul>\n\n<h4>1.1.14<\/h4>\n\n<ul>\n<li>i18n: the checkout now opens in the plugin's selected language where\nsupported (EN\/ES\/DE\/FR\/IT), with automatic detection elsewhere.<\/li>\n<\/ul>\n\n<p>Older releases: see the changelog.txt file shipped with the plugin.<\/p>","raw_excerpt":"Stock take &amp; physical inventory counting for WooCommerce \u2014 scan barcodes, blind count, review variances, apply corrections in one click.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/336205","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=336205"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/erenlabs"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=336205"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=336205"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=336205"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=336205"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=336205"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=336205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}