Overview
ProductContent AI generates Magento 2 AI product descriptions, SEO metadata, and product images at scale. It connects to your chosen AI provider, scores every product for content completeness, generates drafts for descriptions, meta titles, FAQs, and product images, then routes those drafts through a review-approve-rollback workflow before anything goes live.

This module helps you:
- Automatically generate PDP copy, SEO metadata, FAQ content, and product images using OpenAI, Google, or OpenRouter
- Score every product for content quality and identify which products need attention first
- Review AI-generated drafts side-by-side with existing content, approve what you want, and roll back anything you don't
- Prioritise high-traffic, low-scoring products automatically when ProfitEasy data is available
- Keep content consistent across your catalogue with store-level tone, voice, and prompt rules
When to use this
Use ProductContent AI when you want to:
- Launch a large import of supplier-fed products that arrive with thin or inconsistent descriptions
- Identify which products in an existing catalogue are dragging down SEO performance
- Generate product photography-style images without a photo studio, for product lines where you own the brand
- Maintain a regular content-refresh cycle on high-traffic product pages
- Enforce brand voice and forbidden claims rules across all AI-generated copy
Key capabilities for Magento 2 AI product descriptions
- Content scoring - rates each product 0-100 across description length, metadata completeness, FAQ presence, feed consistency, and category signal; shows live chiclets in the grid
- AI content generation - generates short description, long description, meta title, meta description, and FAQ per product using your configured provider and store prompts
- AI image generation - creates up to 4 product images per product in two configurable visual styles; drafts sit in a staging area until you approve them
- Draft review workflow - approve, reject, inline-edit, and rollback all content and image drafts from a single modal on the Products & Drafts grid
- Attribute rules - define per-attribute audit and generation rules so the AI knows which fields to check, generate, or flag
- Template Studio - build reusable product page templates that control which sections to generate and at what word count; map templates to categories for automatic resolution
- SmartListings priority bridge - products in boosted SmartListings rules move to the front of the AI generation queue
- ProfitEasy feedback loop - high-velocity, low-scoring products are automatically re-queued for optimisation
Installation
ProductContent AI installs via Composer, then activates with a license key from your Moogento.com account. The whole flow takes about 5 minutes.
Step 1: Get your Composer keys from Moogento.com
- Sign in at https://www.moogento.com and open My Plugins in your account menu.
- Find ProductContent AI in the list of plugins you own.
- Generate (or reveal) the Composer access keys for that plugin - a public key and a private key.
- Add your install domain to the key. Each Composer key is tied to a specific domain - if you're installing on
yourstore.com, addyourstore.comto the key's allowed domains. The Composer download will be rejected on any other domain.
If you run staging and production on different domains, add both - separate keys per environment are fine too.
Step 2: Install the module with Composer
From your Magento 2 root directory:
composer require moogento/module-productcontent
When Composer asks for credentials, paste the public key as the username and the private key as the password. They'll be cached in ~/.composer/auth.json for future runs.
Step 3: Enable the module in Magento
php bin/magento setup:upgrade
php bin/magento setup:di:compile
php bin/magento cache:clean
If you run php bin/magento module:status Moogento_ProductContent you should see it listed as enabled.
Step 4: Add your license key in the Moogento admin
- Still on https://www.moogento.com > My Plugins, copy the license key for ProductContent AI (separate from the Composer keys you used above).
- In your Magento admin, go to Stores > Configuration > Moogento > Licenses.
- Find the row for ProductContent AI and paste the license key.
- Click Save Config, then run
php bin/magento cache:cleanonce.
The license validates within a few seconds. You should see the module's status flip to active. If it stays inactive, double-check the domain on the license matches where you've installed - domain mismatch is the most common cause.
Extra steps for ProductContent AI
ProductContent AI uses Magento's cron queue to run generation jobs. After setup:upgrade, verify that Magento cron is running on your server. Without cron, content and image jobs will sit in the queue and never process.
# Confirm cron is set up (should return active job lines)
php bin/magento cron:run --group=default
All six job schedules start automatically at their default intervals once cron is running. You can adjust schedules at Stores > Configuration > Moogento > ProductContent AI > Scheduled Jobs if needed.
Setup overview
Most setup happens in:
Stores > Configuration > Moogento > ProductContent AI
You'll mainly work with:
- General - enable/disable the module and logging
- AI: Providers - add API keys for OpenAI, Google, or OpenRouter and assign each a role
- AI: Image Generation - enable image generation and set style counts, size, and auto-approve behaviour
- Content: Generation - choose which fields (short description, long description, meta title, etc.) the AI generates
- Store: Prompts - set the brand voice, tone, forbidden claims, SEO rules, and image style prompts applied to every product
- Queue: Processing - control batch size and retry behaviour for background generation jobs
- Module: Integrations - connect SmartListings and ProfitEasy/AnalyticsEasy for priority-based queue ordering
- Module: Scheduled Jobs - adjust cron schedules and retention settings
Common setups
Connect an AI provider and start generating content
Before the module can produce any drafts, it needs at least one AI provider for the content role.
How to set it up
-
Go to: Stores > Configuration > Moogento > ProductContent AI > AI: Providers

-
Click Add Provider in the Providers table. Set:
- Provider =
openai,google, oropenrouter - Role =
content - API Key = your provider API key
- Model = the model identifier (e.g.
gpt-4o-mini)
- Provider =
-
Click the Validate button next to the row. A green tick confirms the key is accepted. If it shows an error, re-check the key and model name.
-
Set the Content: Generation fields you want the AI to produce: Go to Stores > Configuration > Moogento > ProductContent AI > Content: Generation and set Generate short description, Generate long description, Generate meta title, Generate meta description, and Generate FAQ to
Yesas needed. -
Save Config.
-
Go to ProductContent AI > Products & Drafts in the admin left nav. Select one or more products, open the Actions menu, and choose Queue content generation. The queue cron processes the jobs within a minute.
Notes
- Each role (content, image_prompt, image_style_1, image_style_2) can only be served by one provider at a time.
- API keys are encrypted before storage and are never logged.
- The
contentrole is required. Image roles are only needed if you enable image generation.
Set your store voice and brand rules
Store prompts control how all AI-generated content reads. Set them once and every future draft respects the rules.
How to set it up
-
Go to: Stores > Configuration > Moogento > ProductContent AI > Store: Prompts

-
Set:
- General content prompt (
moogento_productcontent/store_prompts/content_prompt) = high-level instructions for every content generation (e.g. "Write in a warm, friendly tone. Emphasise quality and durability.") - Store tone and brand voice (
moogento_productcontent/store_prompts/tone_and_voice) = brand rules applied to every draft (e.g. "Friendly, no jargon, prefer active voice") - Forbidden claims (
moogento_productcontent/store_prompts/forbidden_claims) = comma- or newline-separated phrases the AI must never use (e.g. "doctor approved, guaranteed cure") - SEO rules (
moogento_productcontent/store_prompts/seo_rules) = keyword density, heading structure, or other SEO instructions - Allowed HTML tags (
moogento_productcontent/store_prompts/allowed_html) = tag whitelist for generated HTML descriptions
- General content prompt (
-
If you use multiple store views, scope these prompts per store view - the AI uses the store-view-specific prompt when generating content for that scope.
-
Save Config.
Notes
- Store prompts are applied on top of per-product overrides. Product-level prompt fields (set in the ProductContent AI tab on the product edit page) take priority.
- Changing store prompts doesn't automatically re-generate existing drafts. Queue a new generation job to pick up the updated instructions.
Review and approve AI-generated drafts
Drafts sit in a pending state until you approve them. Nothing is applied to your live product pages automatically unless you enable auto-apply.
How to set it up
-
Go to ProductContent AI > Products & Drafts (
moogento_productcontent/products/index). -
Find a product with the Review pending status badge. Click Review drafts in its row.
The review modal opens with two tabs - Content and Images. Each draft card shows the original value alongside the AI-generated version.
-
For each draft card:
- Click Approve to apply the draft to the live product immediately.
- Click the Edit icon to make inline changes before approving.
- Click Reject to discard the draft.
- If you approved a draft and want to undo it, click Rollback - the product reverts to the value it had before the draft was applied.
-
After reviewing, close the modal. The product's status badge updates to reflect the new state.
Notes
- Rollback works for both content drafts and image drafts. The module captures a full gallery snapshot before applying any image so the rollback is exact.
- The Auto-apply low-risk drafts setting (
moogento_productcontent/content_generation/auto_apply_low_risk) is available on Growth/Pro plans and skips the review step for drafts with no risk flags. Recommended only after you've reviewed several batches manually.
Set up AI image generation
Image generation requires a separate provider for the image_prompt, image_style_1, and optionally image_style_2 roles.
How to set it up
-
Add image providers in the Providers table (same step as above). Assign:
- Role
image_prompt- the provider that writes the image prompt from product data - Role
image_style_1- the provider that generates images in your primary style
- Role
-
Go to: Stores > Configuration > Moogento > ProductContent AI > AI: Image Generation

-
Set:
- Enable Image Generation (
moogento_productcontent/image_generation/enabled) =Yes - Images per Style (
moogento_productcontent/image_generation/style_count_per_job) = how many images to generate per style per job (Style 1 + Style 2 combined must be 1-4) - OpenAI Image Model (
moogento_productcontent/image_generation/image_model) =gpt-image-1(cost-efficient) orgpt-image-2(higher quality, approx 3.6x more expensive) - Image Size (
moogento_productcontent/image_generation/image_size) = your preferred output resolution - Draft Retention (
moogento_productcontent/image_generation/draft_retention_days) = how many days unreviewed drafts are kept before automatic removal (1-365)
- Enable Image Generation (
-
Go to: Stores > Configuration > Moogento > ProductContent AI > Store: Prompts
-
Set your image style prompts:
- Style 1 image prompt (
moogento_productcontent/store_prompts/image_prompt_style_1) = what the subject should look like (e.g. "A clean studio photograph of the product on a white background") - Style 1 visual description (
moogento_productcontent/store_prompts/style_1_visual_style) = lighting, backdrop, mood (e.g. "Professional studio lighting, soft shadows, ecommerce-ready")
- Style 1 image prompt (
-
Save Config.
-
In ProductContent AI > Products & Drafts, select products, open Actions, and choose Queue AI image generation.
Notes
- Generated images are stored in
pub/media/moogento/productcontent/drafts/until approved. - A maximum of 4 images per product (across all statuses: reserved, draft, approved, applied) can be held at once.
- The module's SKU exclusion guard prevents the product SKU from appearing in any image prompt, which keeps prompts compliant with most provider terms.
Features reference
Attribute Rules
Define which product attributes the AI should audit, generate, or flag. Each rule targets a specific attribute and sets one of four actions: check whether the value meets quality standards, generate new content for the attribute, set a fixed value, or flag the attribute for manual editing.
- Navigate to ProductContent AI > Attribute Rules (
moogento_productcontent/attributerules/index) to manage rules. - Use Actions > Seed default rules to populate a standard set of rules covering the most common product attributes.
- Config path for the grid:
moogento_productcontent/attribute_rules
Template Studio
Product Page Templates let you define which sections of a product page to generate, how long each section should be, and what HTML policy applies. Templates can be mapped to categories so every product in that category uses the right template automatically.
- Navigate to ProductContent AI > Product Page Templates (
moogento_productcontent/templates/index) to create and manage templates. - Use Generate from samples to let the AI infer a template structure from existing well-written product pages - paste sample HTML or a URL and the module builds a draft template.
- Template resolution order: product-level pin > category mapping (highest priority first) > store default > built-in fallback.
Content Scoring
Every product in your catalogue gets a content score from 0 to 100. The score is calculated across multiple areas: description completeness and length, metadata presence, FAQ content, feed-consistency flags (missing GTIN, MPN, ALL-CAPS, malformed HTML), and SmartListings boost signal.
- Scores appear as colour-coded chiclets in the Products & Drafts grid: green (high), amber (mid), red (low), grey (not yet scored).
- Scores are recalculated every 6 hours by default (
moogento_productcontent/scheduled_jobs/score_recompute_cron_expr). You can also trigger a recompute from the command line:php bin/magento moogento:productcontent:score:recompute. - Feed-consistency score weight is set at
moogento_productcontent/scheduled_jobs/feed_consistency_weight(default 10 points per flag).
Product Edit Tab
A read-only ProductContent AI tab appears on every product edit page. It shows the product's current content score, generation/image/attribute status, approval state, last-scored timestamp, and the 10 most recent drafts.
The tab also exposes per-product prompt overrides: you can add extra content instructions, image style 1 and 2 overrides, merchant notes, excluded claims, and required phrases that apply only to this product.
Queue Processing
The generation queue runs on Magento cron. The default schedule processes jobs every minute. Control queue behaviour at:
Stores > Configuration > Moogento > ProductContent AI > Queue: Processing
| Setting | Config path | Default |
|---|---|---|
| Batch Size | moogento_productcontent/queue/batch_size |
10 |
| Item Timeout (seconds) | moogento_productcontent/queue/item_timeout_seconds |
600 |
| Stuck Threshold (minutes) | moogento_productcontent/queue/stuck_threshold_minutes |
15 |
| Max Retry Attempts | moogento_productcontent/queue/max_retry_attempts |
3 |
| Inter-call Delay (ms) | moogento_productcontent/queue/inter_call_delay_ms |
0 |
Batch size and retry fields are plan-gated (Growth/Pro required to change from defaults).
Module: Integrations
Connect ProductContent AI to other Moogento modules for smarter queue prioritisation.
SmartListings Priority Boost (moogento_productcontent/integrations/enable_smartlistings_priority) - when enabled, products that belong to a SmartListings boosted rule are moved to the front of the content generation queue. The boost value is set at moogento_productcontent/scheduled_jobs/sc_priority_boost (default 10 points). Requires SmartListings to be installed.
AnalyticsEasy Feedback Loop (moogento_productcontent/integrations/enable_analyticseasy_feedback) - when enabled, a daily cron job identifies products with high sales velocity (above the configured minimum) and a content score below the configured threshold, then raises their queue priority. Requires both AnalyticsEasy and ProfitEasy to be installed.
GTIN Attribute Codes (moogento_productcontent/integrations/merchant_center_attribute_csv) - comma-separated list of attribute codes checked for GTIN presence in feed-consistency scoring (default: ean,upc,isbn,gtin).
MPN Attribute Code (moogento_productcontent/integrations/mpn_attribute_code) - attribute code for Manufacturer Part Number, checked in feed-consistency scoring (default: mpn).
Advanced configuration
Scheduled Jobs
All six background jobs have configurable cron schedules. Adjust them at:
Stores > Configuration > Moogento > ProductContent AI > Module: Scheduled Jobs

| Job | Config path | Default |
|---|---|---|
| Queue Process Schedule | moogento_productcontent/scheduled_jobs/queue_process_cron_expr |
Every minute |
| Score Recompute Schedule | moogento_productcontent/scheduled_jobs/score_recompute_cron_expr |
Every 6 hours |
| Queue Cleanup Schedule | moogento_productcontent/scheduled_jobs/cleanup_cron_expr |
Every 15 minutes |
| Feedback-Loop Refresh Schedule | moogento_productcontent/scheduled_jobs/feedback_loop_cron_expr |
3am daily |
| Score History Cleanup Schedule | moogento_productcontent/scheduled_jobs/score_history_cleanup_cron_expr |
3am daily |
| View Count Reset Schedule | moogento_productcontent/scheduled_jobs/view_count_reset_cron_expr |
2am daily |
Score History Retention (moogento_productcontent/scheduled_jobs/score_history_retention_days, default 90, clamped 7-365) - score snapshot rows older than this value are deleted by the cleanup cron. Reduce this if the moogento_productcontent_score_history table grows too large on high-volume stores.
Notes
- Run
php bin/magento setup:upgradebefore the first cron window after deploying an update. Schedule defaults are written tocore_config_dataat upgrade time; jobs will skip silently if that hasn't happened yet. - All Scheduled Jobs fields are default-scope only - they cannot be overridden per website or store view.
Developer Mode Tier Override
On a development install, the license server typically returns no valid license, which restricts the module to Seed tier and blocks Growth/Pro features. Use the developer-mode override to test higher-tier features locally without network access to the license server.
Setup
php bin/magento config:set moogento_productcontent/dev/force_tier pro
Accepted values: seed, growth, pro. Leave blank to use the live license check.
Notes
- The override is active only when
MAGE_MODE=developer. It is a no-op on production and staging, so the setting is safe to leave configured in a developerenv.php. - This setting survives
cache:clean(unlike the cache-priming snippet in the AI guide). Re-runcache:clean configafter changing it so Magento picks up the new value.
Tips & best practices
- Start with one provider, one role, and a small product batch before expanding. Validate the API key first; generation jobs that hit an invalid key fail silently and retry up to the configured max.
- Write store prompts before generating your first batch. Drafts already in the queue use the prompt that was active when the job ran - changing prompts mid-batch produces inconsistent output.
- Use the Preserve existing merchant content setting (
moogento_productcontent/content_generation/preserve_existing) when you have products with hand-written descriptions you want to keep. The AI will create drafts for review but won't overwrite live content without your approval. - Map templates to categories before running bulk generation. Without a template, the module falls back to a minimal single-section built-in - category-specific templates produce significantly better output.
- Keep Draft Retention short enough that your
pub/media/moogento/productcontent/drafts/directory doesn't grow unbounded, but long enough for your review cycle. 30 days is a reasonable default for most teams. - The feed-consistency score flags (missing GTIN, MPN, ALL-CAPS copy, broken HTML) are worth fixing directly in the product data rather than instructing the AI to work around them. Clean source data produces better drafts.
- If you use multiple AI providers across roles, validate each one after adding it. A failed
image_style_1provider will queue image jobs that immediately fail, consuming retries without producing images.
Troubleshooting
Content jobs are queued but nothing is generated
Jobs sit in pending state and never move to processing or done.
- Cause: Magento cron is not running, or the
defaultcron group is not being processed. - Check: Run
php bin/magento cron:run --group=defaultmanually and watch the output. Checkvar/log/moogento_productcontent.logfor job dispatch messages. - Resolution: Set up Magento cron on the server if it isn't running. Confirm that
crontab -lshows a cron entry callingphp bin/magento cron:run.
The AI provider Validate button shows a red message
Clicking Validate on a provider row returns a red message.
- Cause: The API key is incorrect, the model name is wrong, or the provider endpoint is unreachable.
- Check: Copy the exact error text from the response - the module normalises provider errors and usually includes the provider's own message. Verify the key has the right permissions (for OpenAI, the key needs
models:readandimages:generateaccess; for Google, the Vertex AI or Generative Language API must be enabled on the project). - Resolution: Correct the key or model, save, and validate again.
Image drafts are not appearing in the review modal
Image generation jobs complete successfully but the Images tab in the review modal is empty.
- Cause: The maximum of 4 images per product is already reached (counting reserved, draft, approved, and applied images combined), or the image provider role is not assigned.
- Check: Check
moogento_productcontent_generated_imagefor rows with thisproduct_id. If four or more rows exist with statusreserved,draft,approved, orapplied, the cap is hit. - Resolution: Reject or delete existing draft/applied images for the product to free up capacity, then re-queue.
Content scores are not updating
Products show the same score after you update their descriptions.
- Cause: The score recompute cron hasn't run since the change, or the module is disabled.
- Check: Check the schedule at
moogento_productcontent/scheduled_jobs/score_recompute_cron_expr(default: every 6 hours). Check whether the module is enabled atmoogento_productcontent/general/enable. - Resolution: Run
php bin/magento moogento:productcontent:score:recomputeto trigger a manual recompute, then reload the Products & Drafts grid.
Drafts were applied but the product page hasn't changed
An approved draft shows status applied but the storefront still shows the old content.
- Cause: Magento's full-page cache is serving the old cached version.
- Resolution: Run
php bin/magento cache:clean full_pageor flush the cache for the affected product pages from the Cache Management admin page.
FAQs
How do I generate product descriptions automatically in Magento 2?
ProductContent AI generates product descriptions automatically by connecting to an AI provider (OpenAI, Google, or OpenRouter), queuing generation jobs from the Products & Drafts grid, and producing drafts for short description, long description, meta title, meta description, and FAQ content. See the "Connect an AI provider and start generating content" section above for the step-by-step setup.
Which AI providers does ProductContent AI support?
ProductContent AI supports OpenAI (GPT-4o, GPT Image 1, GPT Image 2), Google (Imagen 3, Gemini 2.5 Flash), and OpenRouter (a single API key routing to multiple backing models). You assign each provider to a role - content, image prompt, or image style - from the AI: Providers config group.
Can I review AI-generated content before it goes live?
Yes - every draft created by ProductContent AI sits in review state until you approve it. The Products & Drafts grid shows each product's pending draft count; clicking "Review drafts" opens a modal where you can approve, reject, inline-edit, or rollback each draft individually. Nothing is published automatically unless you enable the Auto-apply low-risk drafts option (Growth/Pro plans).
Does ProductContent AI work with Hyvä, Luma, and Porto themes?
Yes. ProductContent AI is an admin-only module. It writes content to standard Magento product attributes (description, short_description, meta_title, meta_description, and the product gallery) and adds images through the standard gallery API. The output is stored in Magento's native data layer, so it renders correctly on Hyvä, Luma, Porto, and any other theme.
How does the content score work?
The content score rates each product from 0 to 100 across several checks: description length and quality, meta title and description presence, FAQ content, feed-consistency flags (missing GTIN or MPN, ALL-CAPS copy, malformed HTML), and whether the product has an active SmartListings boost rule. Scores are recalculated every 6 hours by default and displayed as colour-coded chiclets in the Products & Drafts grid.
What happens to existing product descriptions when I run generation?
If Preserve existing merchant content (moogento_productcontent/content_generation/preserve_existing) is set to Yes (the recommended default), the AI creates drafts for every configured field but does not overwrite any field that already has manually-entered content without your review. You'll see a draft alongside the existing value in the review modal and can approve or reject at your discretion.
Can I use ProductContent AI to generate product images?
Yes. The image generation feature connects to OpenAI (GPT Image 1 or GPT Image 2), Google Imagen 3, or OpenRouter to create product images in up to two visual styles. You set store-level style prompts, queue image generation from the Products & Drafts grid, and review the generated drafts before applying them to the product gallery. A maximum of 4 images per product can be held at any one time.
What happens if I disable ProductContent AI?
Disabling the module (moogento_productcontent/general/enable = No) stops new generation jobs from being processed and hides the ProductContent AI menu items. Any content that has already been applied to products remains in place - the module does not reverse applied changes on disable. Draft images in pub/media/moogento/productcontent/drafts/ are also retained.
How much does ProductContent AI cost / which plan do I need?
ProductContent AI has three plan tiers: Seed, Growth, and Pro. The Seed tier gives you basic content generation and scoring. Growth and Pro unlock higher queue batch sizes, auto-apply for low-risk drafts, auto-approve for images, and the SmartListings/AnalyticsEasy integration settings. Visit https://www.moogento.com for current pricing.
Does ProductContent AI work with Trustblock?
ProductContent AI and Trustblock cooperate via a shared attribute code selection rather than code coupling. If you use Trustblock to display trust badges sourced from a custom product attribute, you can point that attribute at content generated and managed by ProductContent AI. The two modules operate independently - ProductContent AI handles generation and admin workflows, Trustblock handles storefront display.
How do I reset content scores without waiting for the cron?
Run php bin/magento moogento:productcontent:score:recompute from the command line. This queues a score job for every product that hasn't been scored in the last 24 hours and processes it in the next cron window. Alternatively, select products in the Products & Drafts grid and use the Rescore selected mass action.
Related guides
- CategoryContent AI - AI-generated category descriptions, hero content, and FAQ sections at the category level using the same provider configuration pattern
- Trustblock - display trust signals and badges sourced from product attributes on the storefront; cooperates with ProductContent AI via the attribute code dropdown
Need help?
- moo@moogento.com
- Include:
- Magento version
- Module name
- What you're trying to do
