v2.0

GoRules Version 2 is here - redesigned, now with managed cloud.GoRules Version 2 is here!

Watch the launch videoWatch

Product Listing Scoring

Automated scoring system that evaluates and ranks product listings based on image quality, description completeness, and other key marketplace success factors.

Solution

This scoring system improves marketplace performance by evaluating five critical aspects of product listings. The system analyzes image quality by counting total images, checking for high-resolution photos, and verifying variant images exist. For descriptions, it examines word count, bullet point usage, specification details, and optimal keyword density to ensure listings attract search traffic.

The solution also evaluates pricing competitiveness through market rank analysis and discount availability. Inventory management scores are calculated based on stock levels and shipping timeframes. Each category receives individual ratings plus an overall score with performance classification. This helps sellers quickly identify specific improvement areas, prioritize optimization efforts, and implement targeted changes to boost visibility and conversion rates.

How it works

The decision graph evaluates product listings through a systematic process:

  1. Data Input: Receives listing information including image details, description characteristics, pricing position, and inventory status.
  2. Image Quality Assessment: Evaluates the number of images, resolution quality, and presence of variant images.
  3. Content Evaluation: Analyzes description word count, bullet point usage, specification details, and keyword optimization.
  4. Competitive Analysis: Scores pricing position against marketplace competitors and discount availability.
  5. Inventory Rating: Evaluates stock levels and shipping timeframes for availability scoring.
  6. Score Calculation: Combines individual category scores into a total rating with classification (excellent, good, average, poor, unacceptable).
  7. Feedback Generation: Creates detailed breakdown of scores by category with specific improvement recommendations.

Where teams use it

  • E-commerce marketplace sellers
  • Retail product catalog management
  • Marketplace compliance departments
  • Product information management systems
  • Digital marketing agencies
  • Brand content optimization

Inside the decision model

Product Listing Scoring ships as a JDM decision graph with 4 nodes, 2 decision tables and 10 rules. Download it, load it into GoRules, and run it as-is on Zen Engine.

Decision graph4 nodes · read-only
input requesttable imageQualitytable descriptionAndOtherFactorsexpression overallScore
01

Request

input

Listing data arrives nested under a single listing object with four groups: images (count, highResolution, hasVariantImages), description (wordCount, hasBulletPoints, hasSpecifications, keywordDensity), pricing (competitiveRank, hasDiscount), and inventory (stockLevel, daysToShip). The two scoring tables read straight from these nested fields.

Sample requestJSON
{
  "listing": {
    "images": {
      "count": 4,
      "highResolution": true,
      "hasVariantImages": true
    },
    "description": {
      "wordCount": 250,
      "hasBulletPoints": true,
      "hasSpecifications": true,
      "keywordDensity": 3.2
    },
    "pricing": {
      "competitiveRank": 2,
      "hasDiscount": true
    },
    "inventory": {
      "stockLevel": 15,
      "daysToShip": 2
    }
  }
}
02

Image Quality

table

Photos are graded on a first hit ladder over listing.images.count, highResolution, and hasVariantImages: five or more high-resolution images with variant shots score 30 as 'excellent', three or more high-resolution images score 25 as 'good', two score 20 as 'average', a single image of any quality scores 10 as 'poor', and the blank row scores 0 as 'missing'. Both the score and the category label land under scores.imageQuality.

The five-image bar matches common marketplace style guides, which ask sellers to show a product from multiple angles before it converts well in search. Reserving the top band for listings with variant images is a sensible choice, since color and size shots are the last merchandising step most sellers skip, while the steep drop for low-resolution photos reflects how directly image quality shows up in click-through and return rates.

Decision tablefirst hit policy
Image Countlisting.images.countHigh Resolutionlisting.images.highResolutionHas Variant Imageslisting.images.hasVariantImagesImage Scorescores.imageQuality.scoreImage Categoryscores.imageQuality.category
>= 5truetrue30'excellent'
>= 3true-25'good'
>= 2true-20'average'
>= 1--10'poor'
---0'missing'
03

Description And Other Factors

table

Four score columns are filled from one first hit table: descScore, keywordScore, inventoryScore, and pricingScore, driven by wordCount, hasBulletPoints, hasSpecifications, keywordDensity, stockLevel, and competitiveRank together. The 'excellent' row wants more than 300 words with bullets and specifications, keywordDensity between 2 and 5, stockLevel above 20, and competitiveRank under 3, paying 30/20/10/10; the bands then step down through 'good' (25/15/8/8), 'average' (15/10/5/5), and 'poor' (10/5/3/3) to a blank 'missing' row that zeroes everything.

The 2 to 5 keyword density window follows real search-optimization practice, where thin keyword coverage loses traffic and stuffing reads as spam, and the widening band to '> 1 and < 6' for 'good' tolerates less tuned copy. Requiring every dimension to clear a band together means a listing is graded on its weakest link, which is deliberate: a rich description cannot mask an out-of-stock item, and competitiveRank under 3 rewards offers priced among the top few in their market, where buy-box style placement is actually won.

Decision tablefirst hit policy
Word Countlisting.description.wordCountHas Bullet Pointslisting.description.hasBulletPointsHas Specificationslisting.description.hasSpecificationsKeyword Densitylisting.description.keywordDensityStock Levellisting.inventory.stockLevelCompetitive Ranklisting.pricing.competitiveRankDescription Scorescores.descriptionCompleteness.scoreKeyword Scorescores.keywordOptimization.scoreInventory Scorescores.inventoryAvailability.scorePricing Scorescores.pricingCompetitiveness.scoreCategoryscores.descriptionCompleteness.category
> 300truetrue> 2 and < 5> 20< 330201010'excellent'
> 200true-> 1 and < 6> 10< 5251588'good'
> 100--> 0> 5< 10151055'average'
> 50---> 0-10533'poor'
------0000'missing'
04

Overall Score

expression

A final expression sums the five scores.* values into totalScore, then classifies it with stepped thresholds: 80 and above is 'excellent', 60 'good', 40 'average', 20 'poor', and anything lower 'unacceptable'. It also reports a maximumPossibleScore of 100 and assembles a breakdown object with each category's score and label, so sellers see exactly which of imageQuality, descriptionCompleteness, keywordOptimization, inventoryAvailability, or pricingCompetitiveness to fix first.

Expressions4 fields
totalScorescores.imageQuality.score + scores.descriptionCompleteness.score + scores.keywordOptimization.score + scores.inventoryAvailability.score + scores.pricingCompetitiveness.score
overallScoreCategory$.totalScore >= 80 ? 'excellent' : $.totalScore >= 60 ? 'good' : $.totalScore >= 40 ? 'average' : $.totalScore >= 20 ? 'poor' : 'unacceptable'
maximumPossibleScore100
breakdown{ 'imageQuality': scores.imageQuality, 'descriptionCompleteness': scores.descriptionCompleteness, 'keywordOptimization': scores.keywordOptimization, 'inventoryAvailability': scores.inventoryAvailability, 'pricingCompetitiveness': scores.pricingCompetitiveness }

Make this template
your own.

Load Product Listing Scoring into GoRules, adjust the rules to your policy, and ship it behind your own API.