{"id":359994,"date":"2026-08-27T18:35:48","date_gmt":"2026-08-27T18:35:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/catalogcanary\/"},"modified":"2026-08-27T18:35:30","modified_gmt":"2026-08-27T18:35:30","slug":"catalogcanary","status":"publish","type":"plugin","link":"https:\/\/ug.wordpress.org\/plugins\/catalogcanary\/","author":23556009,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.5.0","stable_tag":"0.5.0","tested":"7.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"CatalogCanary","header_author":"CatalogCanary","header_description":"A Meta (Facebook\/Instagram) product feed for WooCommerce that cannot fail silently. Generates the catalog feed and alerts you the moment products drop out, required fields go missing, or a run doesn't finish.","assets_banners_color":"","last_updated":"2026-08-27 18:35:30","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/canarylabs\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":60,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","faq","changelog"],"tags":{"0.5.0":{"tag":"0.5.0","author":"canarylabs","date":"2026-08-27 18:35:30","revision":3669385}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.5.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[157,311,683,5418,286],"plugin_category":[45,56],"plugin_contributors":[277947],"plugin_business_model":[],"class_list":["post-359994","plugin","type-plugin","status-publish","hentry","plugin_tags-facebook","plugin_tags-instagram","plugin_tags-meta","plugin_tags-product-feed","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-social-and-sharing","plugin_contributors-canarylabs","plugin_committers-canarylabs"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/catalogcanary.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Most feed plugins generate a file and go quiet. When the feed breaks \u2014 products\nsilently vanish, required fields go missing, a run hangs and never finishes \u2014\nyou find out weeks later when your ad performance craters.<\/p>\n\n<p>CatalogCanary treats the feed as something to <em>guard<\/em>, not just generate:<\/p>\n\n<ul>\n<li><strong>Meta catalog feed (CSV)<\/strong> regenerated hourly, built in batches so large\ncatalogs never time out, and published atomically \u2014 Meta never fetches a\nhalf-written file.<\/li>\n<li><strong>Change monitoring<\/strong> \u2014 every run is compared against the last one. If your\nproduct count drops by more than your chosen threshold (10% by default) and\nyou didn't remove those products, you get an email immediately.<\/li>\n<li><strong>Required-field checking<\/strong> \u2014 products that would be rejected by Meta\n(missing price, image, description\u2026) are reported to you with the exact\nmissing fields, not silently dropped.<\/li>\n<li><strong>Variable products done properly<\/strong> \u2014 every variation becomes its own catalog\nitem with its own price, image and link, grouped by <code>item_group_id<\/code>, with\ncolour\/size\/material\/pattern mapped to Meta's variant fields. If a variable\nproduct ends up with <em>no<\/em> variations in the feed, that's called out\nseparately \u2014 it means the whole product has vanished from your catalog, which\nis easy to miss among per-variation warnings.<\/li>\n<li><strong>Stuck-run watchdog<\/strong> \u2014 a separate check catches runs that started and never\nfinished, so a dying cron can't take your feed down quietly.<\/li>\n<li><strong>A quiet admin screen<\/strong> \u2014 no review nags, no upsell banners, no dashboard\nspam. An alert history table and a Run Now button.<\/li>\n<\/ul>\n\n<p>Everything listed above is free, and nothing on this list is a trial or a\nteaser. There is a paid version, CatalogCanary Pro, which adds change diffs\nshowing exactly which products left the feed and when, exclusion rules by\ncategory, tag, stock state, price or SKU, and webhook alerts into Slack. It is\nmentioned once, at the bottom of the plugin's own settings page, and nowhere\nelse in your admin.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20put%20the%20feed%20url%3F\"><h3>Where do I put the feed URL?<\/h3><\/dt>\n<dd><p>Meta Commerce Manager \u2192 Catalog \u2192 Data sources \u2192 Scheduled feed. The URL is\nshown on the CatalogCanary page under WooCommerce in your admin.<\/p><\/dd>\n<dt id=\"which%20alerts%20are%20sent%2C%20and%20where%3F\"><h3>Which alerts are sent, and where?<\/h3><\/dt>\n<dd><p>Email to your site admin address, or any address you set on the settings\nscreen, when: a run fails, the product count drops by more than your threshold\n(10% by default) vs the previous run, products are skipped for missing required\nfields, or a run doesn't finish within 6 hours. Every alert is also kept in an\non-site log in case your email delivery is broken.<\/p><\/dd>\n<dt id=\"is%20my%20catalog%20exposed%20at%20a%20public%20url%3F\"><h3>Is my catalog exposed at a public URL?<\/h3><\/dt>\n<dd><p>The feed filename contains a long random token generated on your site, so it\ncannot be guessed, and the folder is not browsable. You can regenerate the URL\nat any time from the settings screen \u2014 the old one stops working immediately,\nso remember to update it in Meta Commerce Manager.<\/p><\/dd>\n<dt id=\"does%20it%20support%20google%20shopping%20%2F%20tiktok%20%2F%20pinterest%3F\"><h3>Does it support Google Shopping \/ TikTok \/ Pinterest?<\/h3><\/dt>\n<dd><p>Not yet. CatalogCanary does one channel properly rather than 200 badly.<\/p><\/dd>\n<dt id=\"can%20i%20extend%20it%3F\"><h3>Can I extend it?<\/h3><\/dt>\n<dd><p>Yes. The plugin exposes <code>catalogcanary_include_product<\/code> and\n    catalogcanary_product_data filters, and <code>catalogcanary_run_finished<\/code> and\n    catalogcanary_alert actions. Everything the plugin advertises works without\nany add-on \u2014 nothing here is reserved or locked. Pro adds features that do not\nexist in this version; it does not switch on ones you already have.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Added a single line at the foot of the CatalogCanary settings page noting that\na paid version exists. No admin notices, no banners, nothing outside the\nplugin's own screen, and no free feature was removed or gated to make room\nfor it.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Added filters and actions so other plugins can exclude products, adjust feed\ndata, react to a finished run, or deliver alerts elsewhere. No existing\nbehaviour changes.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Settings screen: alert email, brand handling, and the drop-alert threshold\nare now configurable instead of fixed.<\/li>\n<li>Per-product brands. Reads WooCommerce's brand taxonomy, a brand attribute, or\na brand custom field, falling back to a brand you choose \u2014 previously every\nitem was sent with the shop name, which is wrong for multi-brand stores.<\/li>\n<li>The feed URL now contains a random token, so nobody can guess it and download\nyour whole catalog. It can be regenerated at any time.<\/li>\n<li>Added an uninstall routine that removes all options, scheduled jobs and\ngenerated files.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Variable product support: one feed row per variation, shared <code>item_group_id<\/code>,\nand Woo attributes mapped to Meta's color\/size\/material\/pattern fields.<\/li>\n<li>Variations inherit the parent's image and description when they have none of\ntheir own, instead of failing validation.<\/li>\n<li>New alerts for variable products that contribute nothing to the catalog \u2014\neither no variations exist, or every one failed validation.<\/li>\n<li>Alerts now name the product, not just its ID, and say which parent a failing\nvariation belongs to.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release: Meta CSV feed, batched generation, drop\/missing-field\/stuck\nalerts, admin status page.<\/li>\n<\/ul>","raw_excerpt":"A Meta (Facebook\/Instagram) product feed for WooCommerce that cannot fail silently. Get alerted the moment products drop out of your catalog.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/359994","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=359994"}],"author":[{"embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/canarylabs"}],"wp:attachment":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=359994"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=359994"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=359994"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=359994"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=359994"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=359994"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}