PHPackages                             magendoo/module-catalog-quality - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. magendoo/module-catalog-quality

ActiveMagento2-module[Utility &amp; Helpers](/categories/utility)

magendoo/module-catalog-quality
===============================

Catalog data quality observability for Magento 2 — completeness scoring, filter-blind detection, and gap reporting

1.0.0(3mo ago)721MITPHPPHP &gt;=8.2

Since Apr 21Pushed 3mo agoCompare

[ Source](https://github.com/magendooro/magento2-catalog-quality)[ Packagist](https://packagist.org/packages/magendoo/module-catalog-quality)[ Fund](https://magendoo.ro)[ RSS](/packages/magendoo-module-catalog-quality/feed)WikiDiscussions main Synced 3w ago

READMEChangelog (1)Dependencies (7)Versions (2)Used By (0)

Magendoo Catalog Quality — Magento 2 Module
===========================================

[](#magendoo-catalog-quality--magento-2-module)

**Catalog data quality observability for Magento 2.**
Know exactly which products are hurting your conversion rate before your customers find out.

[![Magento 2](https://camo.githubusercontent.com/a3a463f569e9871e320c0347c39fa8ccac2c29b7236e0f3b73fa65f7cdfc5106/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6167656e746f2d322e342e782d6f72616e6765)](https://devdocs.magento.com/)[![PHP](https://camo.githubusercontent.com/187240af044d09d5b14a1d9d9ebdf3f7a993e4c7bc09bdb46b4ba661a891bf5b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e322532422d626c7565)](https://www.php.net/)[![License: MIT](https://camo.githubusercontent.com/5caa455d8debc46fb23abbadb45a733a937f3910a73fc875c2f7820468e1bb54/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e)](LICENSE)

---

What It Does
------------

[](#what-it-does)

Magendoo\_CatalogQuality scores every product in your catalog against a two-axis quality model — **Enrichment** (are the important attributes filled in?) and **Consistency** (do they meet your content rules?) — and combines them into a single **Product Health Score (PHS)** between 0 and 100. Products are graded A–E.

The module answers three questions that every Magento merchant needs:

1. **Which products are incomplete?** — The Gap List shows every product's grade, PHS, priority gaps, and the specific missing attribute codes.
2. **Which products are invisible in layered navigation?** — The Filter-Blind detector flags products that have no value for a filterable attribute, making them unfindable when shoppers use your category filters.
3. **Which filter attributes have the worst coverage across categories?** — The Filter Coverage Matrix shows fill rates as a colour-coded heatmap, scoped by attribute set.

No auto-fix. No AI. Just clear, actionable diagnostic data.

---

Screenshots
-----------

[](#screenshots)

### Dashboard

[](#dashboard)

[![Catalog Quality Dashboard](docs/images/dashboard.png)](docs/images/dashboard.png)

The dashboard shows the **Catalog Health Index (CHI)** — a revenue-weighted average PHS across all scored products — alongside grade distribution, filter-blind product count, and a 30-day CHI trend chart.

### Product Gap List

[](#product-gap-list)

[![Product Gap List](docs/images/gap-list.png)](docs/images/gap-list.png)

Every scored product in one grid: grade badge, PHS, P1/P2/P3 gap counts, a filter-blind chip, and colour-coded missing attribute chips. Red chips are filterable attributes directly causing filter-blindness; grey chips are other priority gaps.

### Filter Coverage Matrix

[](#filter-coverage-matrix)

[![Filter Coverage Matrix](docs/images/filter-matrix.png)](docs/images/filter-matrix.png)

Rows are user-defined filterable attributes; columns are active categories (filterable by attribute set). Each cell shows the fill-rate percentage, colour-coded from green (≥90 %) to red (&lt;35 %). Click a cell to open the Gap List pre-filtered by that attribute and category.

---

Features
--------

[](#features)

- **Two-axis PHS scoring**: Enrichment completeness × Consistency conformance multiplier
- **A–E grade thresholds**: ≥90 → A, ≥80 → B, ≥70 → C, ≥50 → D, &lt;50 → E
- **Revenue-weighted CHI**: weights products by 90-day revenue when sales data is available
- **Filter-blind detection**: flags products invisible in layered navigation per store view
- **Attribute Priority System**: P1/P2/P3/P4/Ignore per attribute, with category and attribute-set overrides
- **Placeholder blocklist**: regex and literal patterns to catch values like "N/A", "TBD", "Lorem ipsum"
- **9 built-in quality rules**: Meta Title, Meta Description, URL Key, Name, Description, Image, Category, Price, Filterable Attribute
- **Conditional attribute groups**: score module-specific attributes only when their control flag is on (e.g. base-price fields only when `baseprice_is_enabled = 1`)
- **Magento indexer integration**: incremental updates via MView, full reindex via CLI
- **Nightly CHI snapshots**: 30-day trend data stored automatically via cron
- **CSV export** of the Gap List and Priority table
- **REST API**: 6 endpoints for scores and priorities
- **Inline-editable Priority Grid**: change priority levels without leaving the listing
- **Filter Coverage Matrix**: attribute set filter, product counts per category column, click-through to Gap List

---

Requirements
------------

[](#requirements)

DependencyVersionPHP≥ 8.2Magento Open Source / Adobe Commerce2.4.x`magento/framework`≥ 103.0`magento/module-catalog`≥ 104.0---

Installation
------------

[](#installation)

### Via Composer (recommended)

[](#via-composer-recommended)

```
composer require magendoo/module-catalog-quality
bin/magento module:enable Magendoo_CatalogQuality
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f
bin/magento cache:flush
```

### Manual

[](#manual)

1. Copy the module directory into `app/code/Magendoo/CatalogQuality/`
2. Run the same CLI commands above

---

Initial Setup
-------------

[](#initial-setup)

After installation, run the full indexer to score all products:

```
bin/magento indexer:reindex magendoo_cq_product_score
```

This may take several minutes on large catalogs. The batch size is configurable under **Stores → Configuration → Magendoo Extensions → Catalog Quality → Performance**.

---

Admin Screens
-------------

[](#admin-screens)

Navigate to **Catalog Quality** in the top-level admin menu.

ScreenURLDescriptionDashboard`/catalogquality/dashboard/index`CHI, grade distribution, filter-blind count, 30-day trendProduct Gap List`/catalogquality/gaps/index`All scored products; filterable by grade, filter-blind statusFilter Coverage Matrix`/catalogquality/filters/index`Attribute fill-rate heatmap per categoryAttribute Priorities`/catalogquality/priority/index`Inline-editable priority rules---

Configuration
-------------

[](#configuration)

**Stores → Configuration → Magendoo Extensions → Catalog Quality**

SettingDefaultDescriptionEnabledYesMaster switchRevenue-weighted CHIYesWeight CHI by 90-day product revenueIndexer Batch Size500Products scored per batch during full reindexSnapshot Retention90 daysHow long nightly CHI snapshots are kept---

Scoring Algorithm
-----------------

[](#scoring-algorithm)

See [docs/scoring-algorithm.md](docs/scoring-algorithm.md) for the full specification.

**Summary:**

```
PHS(product, store_view) =
    [Σ weight(attr) × completeness_score(attr)] / [Σ weight(attr)]   ← enrichment
    × conformance_multiplier                                           ← consistency
    × 100

completeness_score:  empty / placeholder → 0.0 | present → 0.5 | meets_bar → 1.0
conformance_mult:    1.0 baseline; CRITICAL rule failure × 0.7; WARNING × 0.9

CHI = Σ(revenue_90d × PHS) / Σ(revenue_90d)     (falls back to equal-weight)

```

---

Priority System
---------------

[](#priority-system)

See [docs/priority-system.md](docs/priority-system.md) for the full hierarchy.

**Quick reference:**

LevelWeightMeaningP1100Critical — directly impacts conversions (name, price, image, meta)P250Important — filterable attributes auto-floor hereP320Standard — user-defined attributes not yet classifiedP45Low — nice-to-haveIgnore0Never scored (system attrs, optional promotional fields)Priority resolution order (first match wins):

1. Explicit row with matching `category_id`
2. Explicit row with matching `attribute_set_id`
3. Explicit global row (no set, no category)
4. Implicit: SEO attrs → P1; user-defined filterable → P2; user-defined → P3; else → Ignore

---

Conditional Attribute Groups
----------------------------

[](#conditional-attribute-groups)

Some module attributes should only be scored when they are relevant for a specific product. Configure this in `etc/di.xml`:

```

                baseprice_is_enabled

                    baseprice_product_amount
                    baseprice_unit_id
                    baseprice_reference_amount

```

The `enabledBy` attribute is never scored itself — it acts as a gate. The listed `attributes` are only evaluated when the gate attribute is truthy (`1`). The example above wires up [Magendoo\_BasePrice](https://github.com/magendooro/magento2-base-price) so that unit-pricing compliance fields only count as gaps on products where base pricing is switched on.

---

CLI Commands
------------

[](#cli-commands)

```
# Full reindex — score all products (optionally scoped to a store)
bin/magento catalog-quality:rebuild [--store=] [--batch=]

# Debug a single product
bin/magento catalog-quality:score  [--store=]
# Example output:
# {"sku":"WH-X500","grade":"D","phs":42.15,"filter_blind":true,"p1_gaps":1,"p2_gaps":2,"missing":["cq_connectivity","cq_color"]}

# Export priorities to CSV
bin/magento catalog-quality:priorities:export [--set=] [--format=csv]
```

---

REST API
--------

[](#rest-api)

See [docs/rest-api.md](docs/rest-api.md) for request/response schemas.

MethodEndpointDescription`GET``/V1/catalog-quality/scores/:sku`Get quality score for a single SKU`GET``/V1/catalog-quality/gaps`List gap records (supports search criteria)`POST``/V1/catalog-quality/priorities`Create or update a single priority rule`POST``/V1/catalog-quality/priorities/bulk`Bulk upsert priority rules`GET``/V1/catalog-quality/priorities`List priority rules`DELETE``/V1/catalog-quality/priorities/:id`Delete a priority ruleAll endpoints require an admin bearer token. Authenticate with `POST /V1/integration/admin/token`.

---

Database Tables
---------------

[](#database-tables)

TablePurpose`magendoo_cq_priority`Attribute priority rules (P1–P4/Ignore) per attribute, set, and category`magendoo_cq_priority_history`Audit log of priority changes`magendoo_cq_product_score`Per-product PHS, grade, gap counts, filter-blind flag`magendoo_cq_attribute_score`Per-attribute value states for a product`magendoo_cq_catalog_snapshot`Nightly CHI snapshots for trend charts`magendoo_cq_scope_profile`Named scope profiles (sellable, pre-launch, full catalog)`magendoo_cq_rule_config`Per-rule enabled/severity/parameter overrides`magendoo_cq_placeholder_blocklist`Literal and regex patterns for placeholder detection`magendoo_cq_remediation_queue`Remediation work queues (Phase 2)`magendoo_cq_remediation_queue_item`Items within a remediation queue`magendoo_cq_rule_run_log`Indexer run audit log---

Extending
---------

[](#extending)

### Adding a Custom Quality Rule

[](#adding-a-custom-quality-rule)

1. Implement `Magendoo\CatalogQuality\Api\RuleInterface`
2. Register it in `etc/di.xml` under `RulePool`

```

                Vendor\Module\Model\Rule\Enrichment\MyCustomRule

```

### Adding a Conditional Attribute Group

[](#adding-a-conditional-attribute-group)

Register a `conditionalGroups` item as shown in the [Conditional Attribute Groups](#conditional-attribute-groups) section above.

---

License
-------

[](#license)

[MIT](LICENSE) — © 2025 [Magendoo Interactive](https://magendoo.com)

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance82

Actively maintained with recent releases

Popularity10

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

95d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/6ef4a3a58fa09cd06825953bc91392aa224ca399f491b77df13ac932cfcddeea?d=identicon)[florinel-chis](/maintainers/florinel-chis)

---

Top Contributors

[![florinel-chis](https://avatars.githubusercontent.com/u/2117053?v=4)](https://github.com/florinel-chis "florinel-chis (1 commits)")

### Embed Badge

![Health badge](/badges/magendoo-module-catalog-quality/health.svg)

```
[![Health](https://phpackages.com/badges/magendoo-module-catalog-quality/health.svg)](https://phpackages.com/packages/magendoo-module-catalog-quality)
```

###  Alternatives

[mollie/magento2

Mollie Payment Module for Magento 2

1131.9M16](/packages/mollie-magento2)[run-as-root/magento2-prometheus-exporter

Magento2 Prometheus Exporter

68357.9k](/packages/run-as-root-magento2-prometheus-exporter)[opengento/module-category-import-export

This module add the capability to import and export the categories from the back-office.

1310.9k2](/packages/opengento-module-category-import-export)[buckaroo/magento2

Buckaroo Magento 2 extension

32420.3k8](/packages/buckaroo-magento2)[baldwin/magento2-module-url-data-integrity-checker

Magento 2 module which can find potential url related problems in your catalog data

282822.9k](/packages/baldwin-magento2-module-url-data-integrity-checker)[loki/magento2-admin-components

Admin Panel grids and forms created via Loki Components

175.2k7](/packages/loki-magento2-admin-components)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
