{"id":276063,"date":"2026-02-12T21:16:56","date_gmt":"2026-02-12T21:16:56","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/arbana-woo-sale-tracker\/"},"modified":"2026-05-13T06:01:19","modified_gmt":"2026-05-13T06:01:19","slug":"arbana-sale-tracker","status":"publish","type":"plugin","link":"https:\/\/ro.wordpress.org\/plugins\/arbana-sale-tracker\/","author":23437435,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.1","stable_tag":"trunk","tested":"6.8.5","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Arbana Sale Tracker","header_author":"Shark121","header_description":"Tracks on-sale products, generates promotions, and syncs via strict JSON schema.","assets_banners_color":"","last_updated":"2026-05-13 06:01:19","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":237,"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":"shark121","date":"2026-02-12 21:15:58"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128\u00d7128.png":{"filename":"icon-128\u00d7128.png","revision":3460391,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256\u00d7256.png":{"filename":"icon-256\u00d7256.png","revision":3460391,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[255753,42241,332,286],"plugin_category":[45],"plugin_contributors":[255754],"plugin_business_model":[],"class_list":["post-276063","plugin","type-plugin","status-publish","hentry","plugin_tags-discount-tracker","plugin_tags-product-sync","plugin_tags-sales","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-shark121","plugin_committers-shark121"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/arbana-sale-tracker\/assets\/icon-128\u00d7128.png?rev=3460391","icon_2x":"https:\/\/ps.w.org\/arbana-sale-tracker\/assets\/icon-256\u00d7256.png?rev=3460391","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>The Arbana Sale Tracker is the official connector plugin for the Arbana mobile marketplace. It allows WooCommerce store owners to seamlessly sync their on-sale inventory with the Arbana app, ensuring mobile users always see the most up-to-date deals and promotions.<\/p>\n\n<p>This plugin runs quietly in the background, listening for product updates. When you put a product on sale in WooCommerce, this plugin automatically formats the data to the strict Arbana JSON schema and pushes it to the cloud.<\/p>\n\n<p><strong>Key Features:<\/strong><\/p>\n\n<ul>\n<li><strong>Real-time Sync:<\/strong> Instantly updates the Arbana app when you create, update, or delete sale products.<\/li>\n<li><strong>Automatic Formatting:<\/strong> Converts WooCommerce product data into optimized JSON payloads, including generated promotion IDs.<\/li>\n<li><strong>Manual Batch Sync:<\/strong> Includes a one-click tool to sync your existing inventory of on-sale items.<\/li>\n<li><strong>Secure Connection:<\/strong> Uses OAuth-style authentication to securely link your store to your Arbana account without sharing admin passwords.<\/li>\n<li><strong>Lightweight:<\/strong> Designed to minimize database load by only tracking products that are actively on sale.<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin relies on the <strong>Arbana<\/strong> platform (a 3rd party service) to process data and display your products in our mobile application.<\/p>\n\n<p><strong>Arbana Service<\/strong>\nThis service is used to sync your WooCommerce inventory with the Arbana marketplace and authenticate your store connection.<\/p>\n\n<ul>\n<li><strong>Service URL:<\/strong> <a href=\"http:\/\/arbana.io\">http:\/\/arbana.io<\/a><\/li>\n<li><strong>Privacy Policy:<\/strong> <a href=\"https:\/\/shark121.github.io\/arbanaWaitlist\/privacyPolicy.html\">https:\/\/shark121.github.io\/arbanaWaitlist\/privacyPolicy.html<\/a><\/li>\n<li><strong>Terms of Use:<\/strong> <a href=\"https:\/\/shark121.github.io\/arbanaWaitlist\/tos.html\">https:\/\/shark121.github.io\/arbanaWaitlist\/tos.html<\/a><\/li>\n<\/ul>\n\n<p><strong>Data Transmission Details:<\/strong>\nTo function correctly, this plugin communicates with the following endpoints associated with the Arbana infrastructure:<\/p>\n\n<ol>\n<li><p><strong>Product Synchronization (Arbana API)<\/strong><\/p>\n\n<ul>\n<li><strong>URL:<\/strong> <code>https:\/\/salestore-api-rough-bush-595.fly.dev\/api\/vendor\/actions<\/code><\/li>\n<li><strong>Data Sent:<\/strong> Product titles, descriptions, regular prices, sale prices, image URLs, stock and availability, and category names.<\/li>\n<li><strong>Purpose:<\/strong> This endpoint receives create\/update\/delete events for on-sale products and the auto-generated promotions that wrap them, so the Arbana mobile app can display them.<\/li>\n<\/ul><\/li>\n<li><p><strong>Authentication (Cloud Functions &amp; Run App)<\/strong><\/p>\n\n<ul>\n<li><strong>URLs:<\/strong>\n\n<ul>\n<li><code>https:\/\/serveauthpage-leny7ytvaq-uc.a.run.app<\/code><\/li>\n<li><code>https:\/\/us-central1-chatapp-8aa4a.cloudfunctions.net\/exchangeCodeForApiKey<\/code><\/li>\n<\/ul><\/li>\n<li><strong>Data Sent:<\/strong> OAuth tokens and API keys.<\/li>\n<li><strong>Purpose:<\/strong> These endpoints are used to initiate the secure user login and exchange authorization codes for API keys during the setup process.<\/li>\n<\/ul><\/li>\n<\/ol>\n\n<p>A distinct Arbana account is required to use this plugin. While this connector plugin is free to download, using the Arbana platform to list products may require a paid subscription.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/arbana-sale-tracker<\/code> directory, or install the plugin through the WordPress plugins screen directly.<\/li>\n<li>Activate the plugin through the 'Plugins' screen in WordPress.<\/li>\n<li>Navigate to <strong>Products &gt; Sale Tracker<\/strong> in your sidebar.<\/li>\n<li>Click \"Connect Account\" to link your store to Arbana.<\/li>\n<li>Once connected, click \"Sync All\" to import your current on-sale products.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20arbana%20account%20to%20use%20this%20plugin%3F\"><h3>Do I need an Arbana account to use this plugin?<\/h3><\/dt>\n<dd><p>Yes. This plugin acts as a bridge between your WooCommerce store and the Arbana platform. You will be prompted to create or sign in to your Arbana account during the setup process.<\/p><\/dd>\n<dt id=\"does%20this%20sync%20all%20my%20products%3F\"><h3>Does this sync all my products?<\/h3><\/dt>\n<dd><p>No. To keep the mobile app focused on deals, this plugin currently only syncs products that have a \"Sale Price\" set in WooCommerce.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20delete%20a%20product%3F\"><h3>What happens if I delete a product?<\/h3><\/dt>\n<dd><p>The plugin listens for deletion events and will automatically send a request to remove the item from the Arbana app, keeping your inventory in sync.<\/p><\/dd>\n<dt id=\"i%20have%20thousands%20of%20products.%20will%20the%20sync%20crash%20my%20site%3F\"><h3>I have thousands of products. Will the sync crash my site?<\/h3><\/dt>\n<dd><p>The \"Sync All\" feature pages through your on-sale products in batches of 50 and sends each batch as one bulk request, so very large catalogs sync without timing out. Real-time updates from product saves are also debounced and batched into a single request, so a bulk import that touches hundreds of products at once produces one outbound call per debounce window \u2014 not one per product.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed: API endpoint, authentication header, and auth type so payloads actually reach the server (previously every request 404'd silently).<\/li>\n<li>Fixed: <code>sale_price<\/code> no longer truncated to an integer; full numeric precision preserved.<\/li>\n<li>Fixed: Variable products now ship full variant data (SKU, prices, attributes, image) instead of just child IDs.<\/li>\n<li>Fixed: Vendor identifier derived from the site URL so multi-store installs no longer collide on the same key.<\/li>\n<li>Fixed: Product availability and channel values now match the Arbana API schema.<\/li>\n<li>Fixed: Hard deletes routed through the debounce queue so bulk-deletes don't fan out one HTTP request per product.<\/li>\n<li>Fixed: WordPress 6.4+ \u2014 API key is stored without autoload to keep the secret out of the global options cache.<\/li>\n<li>Fixed: Promotion <code>end_date<\/code> no longer fabricated to \"+30 days\" when no end date is configured in WooCommerce.<\/li>\n<li>Added: Persistent retry queue with exponential backoff for transient API failures; permanent failures (auth, malformed payload) drop fast instead of burning the retry budget.<\/li>\n<li>Added: Debounced per-save batching \u2014 <code>n<\/code> rapid product updates collapse to one outbound request.<\/li>\n<li>Added: Pagination over the full on-sale catalog during \"Sync All\" (no longer capped at 100).<\/li>\n<li>Added: Admin notice when WooCommerce is not active.<\/li>\n<li>Added: <code>ARBANA_API_ENDPOINT<\/code> constant override for staging \/ local development.<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Added real-time hooks for product creation, updates, and deletions.<\/li>\n<li>Added OAuth connection flow.<\/li>\n<li>Added manual sync tool.<\/li>\n<\/ul>","raw_excerpt":"Connect your WooCommerce store to the Arbana app. Automatically track, format, and sync on-sale products and promotions in real-time.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/276063","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=276063"}],"author":[{"embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/shark121"}],"wp:attachment":[{"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=276063"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=276063"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=276063"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=276063"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=276063"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ro.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=276063"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}