Description
Elementary POS is a modern cloud-based point-of-sale system for retail businesses. This plugin enables automatic, real-time synchronization of products and inventory between your Elementary POS system and WooCommerce store.
Key Features
- HPOS Compatible – Fully compatible with WooCommerce High-Performance Order Storage
- Bidirectional Product Import – Import products from Elementary POS to WooCommerce, or export from WooCommerce to Elementary POS
- Tax Mapping System – Intelligent tax mapping between WooCommerce tax classes and Elementary POS tax types
- Draft Mode Import – Option to import new products as Draft instead of Published
- Draft Products Synchronization – Optional synchronization of draft products along with published ones
- Safe Product Removal – Products are moved to Trash instead of permanent deletion, allowing recovery
- Bidirectional Stock Sync – Keep stock levels synchronized in both directions
- Real-time Webhooks – Instant updates when sales occur in Elementary POS
- Automatic Order Sync – WooCommerce orders automatically update Elementary POS inventory
- Queue System – Reliable processing with automatic retry on failures; failed items are automatically retried when new activity occurs
- Comprehensive Logging – Track all synchronization activities with detailed logs
- Manual Controls – Full manual control over synchronization when needed
How It Works
What Gets Synchronized:
Elementary POS WooCommerce:
* Product data (name, SKU, price, categories, tax classes)
* Stock quantity changes from all sources (sales, manual adjustments, inventory corrections)
WooCommerce Elementary POS:
* Product data (name, SKU, price, tax classes)
* Stock quantity changes from completed orders
* Manual stock adjustments in WooCommerce admin
When Synchronization Happens:
Elementary POS WooCommerce:
When any stock change occurs in Elementary POS (sale, manual adjustment, etc.), a webhook is sent to WooCommerce.
The plugin processes the update immediately in real-time, updating stock levels in WooCommerce.
WooCommerce Elementary POS:
When an order is completed in WooCommerce or when stock is manually changed in WooCommerce admin, stock changes are automatically sent to Elementary POS.
Changes are sent immediately when they occur. If the API is unavailable, changes are queued and retried automatically with exponential backoff (15min, 1hour, 6hours). Any previously failed items are automatically reset and retried when new activity occurs, ensuring no changes are permanently lost.
Requirements
- WordPress 5.8 or higher
- WooCommerce 5.0 or higher
- PHP 7.4 or higher
- Elementary POS API key
- Products must have SKU codes for stock synchronization (product import can work without SKU)
Compatibility
- HPOS Compatible – Fully compatible with WooCommerce High-Performance Order Storage
- WP Cron – Uses WordPress cron for queue processing (runs every 15 minutes)
Limitations
- Decimal Quantities Not Supported – Due to WooCommerce core limitations, only whole number quantities are supported. Decimal values (e.g., 1.5 kg, 0.75 liters) are automatically rounded to integers, which may affect stores selling products by weight, length, or volume.
- Stock Synchronization Trigger – WooCommerce Elementary POS stock synchronization occurs in two scenarios: (1) when WooCommerce reduces stock from completed orders (via woocommerce_reduce_order_item_stock hook), and (2) when stock is manually changed in WooCommerce admin. If your store has stock management disabled for certain products (e.g., services, digital products), those products will not trigger synchronization to Elementary POS.
- Product Visibility and Stock Status – Newly imported products are set as “Visible” in catalog and “In Stock” by default. During updates, catalog visibility is preserved (not changed), but stock status is always set to “In Stock”. If you need products hidden or out of stock, adjust these settings manually after import.
- Simple Products Only – The plugin imports all products as Simple products (WC_Product_Simple). Products with variants in Elementary POS are imported as single simple products, not as Variable products with variations. If your catalog relies heavily on product variations (size, color, etc.), you will need to manually configure them in WooCommerce after import.
- Flat Category Structure – All product categories from Elementary POS are created as root-level categories in WooCommerce. Category hierarchies (parent/child relationships) are not preserved during import. Categories are matched by name only.
- WP-Cron Limitations – WP-Cron works based on time intervals (e.g., every hour or once a day), but it only runs when someone visits your site. That means if no one opens your website, the task may not run on time but is put to queue and is executed when first visitors load your web.
Support
For support, please visit https://elementarypos.com/en/contact/ or email support@elementarypos.com
External Services
This plugin relies on Elementary POS API, a third-party external service, to synchronize product and inventory data between your WooCommerce store and Elementary POS system.
What is Elementary POS API and what is it used for?
Elementary POS API is the cloud-based service provided by Elementary POS that manages your point-of-sale data. This plugin connects to the API to:
* Import products from Elementary POS to WooCommerce
* Synchronize stock levels bidirectionally
* Send WooCommerce order updates to Elementary POS
* Receive real-time stock change notifications via webhooks
What data is sent and when?
The plugin sends data to Elementary POS API in the following situations:
During Product Import:
* No data is sent – the plugin only retrieves product information (SKU, name, price, stock quantity)
During Stock Synchronization (WooCommerce Elementary POS):
* Product SKU codes
* Stock quantity changes
* Timestamp of changes
* This occurs when you manually trigger WCEP sync or when an order is completed in WooCommerce
During Webhook Registration:
* Your WordPress site URL
* Webhook endpoint URL
* This occurs when you enable automatic synchronization in plugin settings
What the plugin receives from Elementary POS:
* Product information (SKU, name, price, stock)
* Stock change notifications (SKU, quantity delta)
* Webhook status information
API Endpoints Used
- Production:
https://api.elementarypos.com
The appropriate endpoint is automatically selected based on your Elementary POS API key.
Service Terms and Privacy
- Elementary POS Privacy Policy: https://elementarypos.com/en/privacy-policy/
Important: You must have an active Elementary POS account and API key to use this plugin. By using this plugin, you agree to Elementary POS terms of service and acknowledge that data will be transmitted to their API endpoints.
Privacy Policy
This plugin does not collect or store personal user data (names, emails, addresses).
The plugin stores operational data in your database:
* Synchronization logs (timestamps, operation types, product SKUs)
* Queue data for retry operations (product and order information)
All data is stored locally in your WordPress database. No data is sent to third parties except your Elementary POS API endpoint for synchronization purposes. Logs can be cleared manually from the plugin settings.
Screenshots

Dashboard – Overview of synchronization status and quick actions 
Product Import – Import products from Elementary POS to WooCommerce with filtering options 
Stock Synchronization – Manual stock synchronization controls in both directions 
Settings – API configuration and automatic synchronization toggle 
Logs – Detailed activity logs with filtering and search capabilities
Installation
- Install the plugin from WordPress.org (Plugins Add New Search for “Elementary POS”)
- Activate the plugin
- Go to Elementary POS in the WordPress admin menu
- Navigate to Settings tab
- Enter your Elementary POS API key
- Click “Save Settings” to save the API key
- (Optional) Click “Test API Connection” to verify the connection
Initial Setup
After installing and configuring your API key, you can start using the plugin:
- (Optional) Import Products: Go to Import tab Load Products Import to bring products from Elementary POS to WooCommerce
- (Optional) Synchronize Stock: Perform initial stock synchronization in either direction (Elementary POS WooCommerce or WooCommerce Elementary POS) from the Synchronization tab
- (Optional) Enable Automatic Synchronization: After performing initial stock synchronization, you can enable automatic synchronization in Settings tab by toggling the switch to ON
- Verify Status: Check the Dashboard to confirm that all settings are configured correctly
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Elementary POS for WooCommerce” is open source software. The following people have contributed to this plugin.
Contributors“Elementary POS for WooCommerce” has been translated into 1 locale. Thank you to the translators for their contributions.
Translate “Elementary POS for WooCommerce” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
0.9.16
- Added: Manual stock changes in WooCommerce admin are now synchronized to Elementary POS
- Added: Loop prevention for import operations to avoid duplicate sync during EPWC import
- Improved: Stock synchronization now covers both order-based and manual inventory adjustments
- Improved: Queue system now automatically retries previously failed items when new activity occurs
- Improved: Error suppression for server limit overrides to prevent fatal errors on restricted hosting environments
- Fixed: All hardcoded Czech strings replaced with proper English translatable strings
- Fixed: JavaScript strings now properly translatable through wp_localize_script
- Changed: Updated documentation to reflect full bidirectional stock synchronization
- Changed: Removed redundant en_US translation files
0.9.14
- Added: Bidirectional tax mapping system for product imports
- Added: Option to import tax classes with mapping for both EPWC and WCEP directions
- Added: Auto-mapping of taxes based on percentage matching
- Added: Interactive tax mapping table with dropdown selectors
- Added: Visual display of tax rates (max 3 countries with “…” indicator)
- Added: “No tax assigned” option for WooCommerce tax classes
- Improved: Tax mapping stored in transients during import for consistency
- Improved: WCEP import now uses correct API endpoint (edit-sale-item for existing products, add-sale-item for new)
- Changed: Replaced single tax dropdown in WCEP import with comprehensive mapping system
- Changed: Tax mapping is required for WCEP import (EP API requires taxId), optional for EPWC
- Fixed: “SKU code already exists” error when updating existing products in WCEP import
0.9.13
- Improved: Pending products are now handled the same way as draft products
- Improved: When “Sync draft products” is enabled, pending products are included in synchronization
- Improved: Import, export, and stock sync now support pending product status
- Improved: Dashboard statistics now include pending products when draft sync is enabled
0.9.12
- Improved: Import tab – unified interface with dropdown for direction selection (EPWC or WCEP)
- Improved: Sync tab – unified interface with dropdown for direction selection
- Improved: Single “Načíst produkty” button instead of separate buttons for each direction
- Improved: Single “Aktualizovat sklad” button instead of separate buttons for each direction
- Changed: Removed “Quick Actions” section from Dashboard
- Changed: Import and Sync tabs now use single unified buttons for better UX
0.9.11
- Major: Refactored import to 3-phase system with transparent progress reporting
- Added: Phase 1 – Delete all WC products in chunks (optional, prevents timeouts on large catalogs)
- Added: Phase 2 – Import products from Elementary POS in chunks (prevents timeouts)
- Added: Phase 3 – Load stock from Elementary POS in chunks (optional, prevents timeouts)
- Improved: Real-time progress display for each phase with product counts
- Improved: Phase-specific error handling and cancellation support
- Improved: Function naming for future WC EP export compatibility
- Improved: Import option checkboxes are now disabled during import to prevent confusion
- Changed: Import operations now separated for better user visibility and control
- Fixed: Large imports (10k+ products) no longer timeout
0.9.10
- Fixed: Draft products are now properly detected and updated during import
- Fixed: Import now respects draft status – draft products remain draft after update
- Added: New helper method for draft-aware product retrieval during import
- Added: Detailed timeout diagnostics in JavaScript console
- Improved: Import chunk size optimized for better performance (50 products per chunk)
- Improved: Progress bar now shows actual percentage and product counts
- Improved: Comprehensive error reporting with specific timeout types
- Changed: Product status is preserved during updates (draft/published)
0.9.9
- Added: Optional synchronization of draft products – new setting in Settings tab
- Changed: Product removal now moves products to Trash instead of permanent deletion
- Improved: Products can be restored from Trash after import with “delete all” option
- Improved: Rollback mechanism now restores trashed products when import fails
0.9.8
- Added: Option to import products as Draft instead of Published status
- Improved: Loop prevention mechanism now uses global request-level flags instead of time-based transients for better reliability
- Improved: Plugin uninstallation now automatically disables webhook in Elementary POS to prevent orphaned notifications
- Improved: Removed verbose initialization log messages to keep logs cleaner
- Changed: Queue type renamed from ‘order_stock_change’ to ‘stock_change’ for consistency
- Changed: Refactored WooCommerce order stock handler into separate class
0.9.7
- Improved: Loop prevention mechanism now uses global request-level flags instead of time-based transients for better reliability
- Improved: Plugin uninstallation now automatically disables webhook in Elementary POS to prevent orphaned notifications
- Changed: Queue type renamed from ‘order_stock_change’ to ‘stock_change’ for consistency
- Changed: Refactored WooCommerce order stock handler into separate class
0.9.6
- Fixed: Import with stock loading now correctly sets sync timestamp to enable automatic synchronization
- Improved: Dashboard redesigned with single unified status table (9 rows) replacing previous dual-table layout
- Improved: Added “Total Products with SKU” statistic to dashboard for better inventory overview
- Improved: “Automatic Sync” status moved to second position in dashboard for better visibility
- Improved: Reduced logging verbosity – removed verbose API request/response logs while keeping all errors and important events
- Changed: Webhook validation simplified to accept initial synchronization from either direction (EPWC or WCEP)
0.9.5
- CRITICAL FIX: Webhook now correctly applies stock changes as deltas instead of absolute values
- CRITICAL FIX: Synchronization now uses syncTimestamp from Elementary POS API instead of local server time
- CRITICAL FIX: WCEP synchronization now correctly sets both general and direction-specific timestamps
- Fixed: Webhook now works correctly regardless of which sync direction (EPWC or WCEP) was performed first
- Security: Automatic synchronization is now automatically disabled when API key is changed
- Security: Webhook cannot be enabled without performing initial synchronization first (both directions supported)
- Improved: Manual synchronization now properly saves syncTimestamp from API response
- Improved: Enhanced logging for webhook operations with aggregation details
- Changed: Sync timestamps are reset to 0 when API key changes (different account safety)
0.9.4
- Fixed: Webhook handler now properly skips stock changes from own plugin to prevent incorrect stock levels
- Fixed: Removed unnecessary logging when webhook receives only own plugin changes
0.9.3
- Improved: Extended queue and logs cleanup from 7 to 30 days
- Improved: Webhook logs filtered to show only stock_updated events
- Changed: Removed redundant “Webhook Status” from dashboard
- Changed: Replaced auto-refresh section with compact manual refresh buttons next to tab headings
- Changed: Log timestamp format changed to ISO format (YYYY-MM-DD HH:MM:SS)
0.9.2
- Improved: Notice display time increased from 5 to 8 seconds for better readability
- Changed: API test now shows Base URL instead of environment and product count
- Improved: Code cleanup – removed unnecessary wrapper functions and dead code
0.9.1
- Changed: Standardized all internal identifiers to use ‘elementary-pos-woocommerce’ prefix
- Changed: Updated CSS class names for better consistency
- Changed: Updated JavaScript handles for better consistency
- Fixed: Plugin ID now matches the plugin slug
0.9.0
- Added: Automatic webhook management via Elementary POS API
- Added: Toggle switch for enabling/disabling webhook in Settings
- Added: Real-time webhook status monitoring (healthy, warning, error, off)
- Added: Test Status button for manual webhook verification
- Changed: Webhook URL no longer needs manual copying – fully automated
- Changed: Simplified webhook configuration in Settings tab
- Improved: Better UX with visual toggle switch and status indicators
- Improved: Automatic webhook registration on enable/disable
- Improved: Loading state prevents visible toggle state changes
0.8.5
- Changed: Plugin name shortened to “Elementary POS for WooCommerce”
- Changed: Text domain updated to “elementary-pos-for-woocommerce”
- Changed: All translations updated to new text domain
- Fixed: Removed duplicate Author URI to comply with WordPress.org guidelines
0.8.4
- Fixed: Plugin name compliance with WordPress.org trademark guidelines
- Fixed: SQL query preparation for WordPress coding standards
- Fixed: Global variable naming with proper prefixes
- Improved: Code documentation and security comments for reviewers
- Updated: Tested up to WordPress 6.8
0.8.3
- Initial release candidate
- Automatic Product Import – Import products from Elementary POS to WooCommerce with one click
- Bidirectional Stock Sync – Keep stock levels synchronized in both directions
- Real-time Webhooks – Instant updates when sales occur in Elementary POS
- Automatic Order Sync – WooCommerce orders automatically update Elementary POS inventory
- Queue System – Reliable processing with automatic retry on failures
- Comprehensive Logging – Track all synchronization activities with detailed logs
- Manual Controls – Full manual control over synchronization when needed
- Dashboard with real-time statistics and quick actions
- HPOS Compatible – Fully compatible with WooCommerce High-Performance Order Storage
