=== CatalogCanary ===
Contributors: canarylabs
Tags: woocommerce, product feed, facebook, instagram, meta
Requires at least: 6.2
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 0.5.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A Meta (Facebook/Instagram) product feed for WooCommerce that cannot fail silently. Get alerted the moment products drop out of your catalog.

== Description ==

Most feed plugins generate a file and go quiet. When the feed breaks — products
silently vanish, required fields go missing, a run hangs and never finishes —
you find out weeks later when your ad performance craters.

CatalogCanary treats the feed as something to *guard*, not just generate:

* **Meta catalog feed (CSV)** regenerated hourly, built in batches so large
  catalogs never time out, and published atomically — Meta never fetches a
  half-written file.
* **Change monitoring** — every run is compared against the last one. If your
  product count drops by more than your chosen threshold (10% by default) and
  you didn't remove those products, you get an email immediately.
* **Required-field checking** — products that would be rejected by Meta
  (missing price, image, description…) are reported to you with the exact
  missing fields, not silently dropped.
* **Variable products done properly** — every variation becomes its own catalog
  item with its own price, image and link, grouped by `item_group_id`, with
  colour/size/material/pattern mapped to Meta's variant fields. If a variable
  product ends up with *no* variations in the feed, that's called out
  separately — it means the whole product has vanished from your catalog, which
  is easy to miss among per-variation warnings.
* **Stuck-run watchdog** — a separate check catches runs that started and never
  finished, so a dying cron can't take your feed down quietly.
* **A quiet admin screen** — no review nags, no upsell banners, no dashboard
  spam. An alert history table and a Run Now button.

Everything listed above is free, and nothing on this list is a trial or a
teaser. There is a paid version, CatalogCanary Pro, which adds change diffs
showing exactly which products left the feed and when, exclusion rules by
category, tag, stock state, price or SKU, and webhook alerts into Slack. It is
mentioned once, at the bottom of the plugin's own settings page, and nowhere
else in your admin.

== Frequently Asked Questions ==

= Where do I put the feed URL? =

Meta Commerce Manager → Catalog → Data sources → Scheduled feed. The URL is
shown on the CatalogCanary page under WooCommerce in your admin.

= Which alerts are sent, and where? =

Email to your site admin address, or any address you set on the settings
screen, when: a run fails, the product count drops by more than your threshold
(10% by default) vs the previous run, products are skipped for missing required
fields, or a run doesn't finish within 6 hours. Every alert is also kept in an
on-site log in case your email delivery is broken.

= Is my catalog exposed at a public URL? =

The feed filename contains a long random token generated on your site, so it
cannot be guessed, and the folder is not browsable. You can regenerate the URL
at any time from the settings screen — the old one stops working immediately,
so remember to update it in Meta Commerce Manager.

= Does it support Google Shopping / TikTok / Pinterest? =

Not yet. CatalogCanary does one channel properly rather than 200 badly.

= Can I extend it? =

Yes. The plugin exposes `catalogcanary_include_product` and
`catalogcanary_product_data` filters, and `catalogcanary_run_finished` and
`catalogcanary_alert` actions. Everything the plugin advertises works without
any add-on — nothing here is reserved or locked. Pro adds features that do not
exist in this version; it does not switch on ones you already have.

== Changelog ==

= 0.5.0 =
* Added a single line at the foot of the CatalogCanary settings page noting that
  a paid version exists. No admin notices, no banners, nothing outside the
  plugin's own screen, and no free feature was removed or gated to make room
  for it.

= 0.4.0 =
* Added filters and actions so other plugins can exclude products, adjust feed
  data, react to a finished run, or deliver alerts elsewhere. No existing
  behaviour changes.

= 0.3.0 =
* Settings screen: alert email, brand handling, and the drop-alert threshold
  are now configurable instead of fixed.
* Per-product brands. Reads WooCommerce's brand taxonomy, a brand attribute, or
  a brand custom field, falling back to a brand you choose — previously every
  item was sent with the shop name, which is wrong for multi-brand stores.
* The feed URL now contains a random token, so nobody can guess it and download
  your whole catalog. It can be regenerated at any time.
* Added an uninstall routine that removes all options, scheduled jobs and
  generated files.

= 0.2.0 =
* Variable product support: one feed row per variation, shared `item_group_id`,
  and Woo attributes mapped to Meta's color/size/material/pattern fields.
* Variations inherit the parent's image and description when they have none of
  their own, instead of failing validation.
* New alerts for variable products that contribute nothing to the catalog —
  either no variations exist, or every one failed validation.
* Alerts now name the product, not just its ID, and say which parent a failing
  variation belongs to.

= 0.1.0 =
* Initial release: Meta CSV feed, batched generation, drop/missing-field/stuck
  alerts, admin status page.
