Module reference

AI Description Updater for Magento 2 — module reference

Covers angeo/module-ai-description-updater 1.1.1 · Checked 16 October 2026 · MIT licensed

AI Description Updater writes product descriptions for your Magento 2 catalog with an AI model. It can also write the short description, meta title, meta description and meta keywords. It works across all store views and languages.

You choose the provider: OpenAI, Anthropic Claude, Google Gemini, or Groq (free, no credit card). You run it from the command line, from cron, or from the admin panel. A dry run mode lets you see the result before anything is saved.

What it does

  • Generates text for description, short_description, meta_title, meta_description and meta_keyword — you choose which.
  • Runs per store view, in that store view’s scope and language.
  • Takes SKUs from the catalog or from a Google Sheet.
  • Writes a CSV report and, if you want, a Google Sheet with the results.
  • Processes a fixed batch per run and remembers where it stopped, so costs stay predictable.

Requirements

Magento2.4.6+ (Open Source, Mage-OS or Adobe Commerce) — magento/framework >=103.0.6 <104
PHP8.1 – 8.5 — ~8.1.0||~8.2.0||~8.3.0||~8.4.0||~8.5.0

You also need an API key for one provider. Groq has a free tier: 30 requests a minute and 14,400 a day.

Installation

composer require angeo/module-ai-description-updater
bin/magento module:enable Angeo_AiDescriptionUpdater
bin/magento setup:upgrade
bin/magento setup:di:compile                # production mode only
bin/magento cache:flush

Quick start with Groq (free)

  1. Create a free account at console.groq.com and make an API key. It starts with gsk_.
  2. Go to Stores → Configuration → Angeo AEO → AI Description Updater.
  3. Set General → Enable Module to Yes and keep Dry Run Mode on Yes.
  4. Set AI Provider to Groq, paste the key, and choose Llama 3.3 70B Versatile.
  5. Under Attributes to Generate, set Generate Description to Yes. Save.
  6. Test without saving anything:
bin/magento angeo:ai-description:run --dry-run
  1. Read the result in var/log/angeo_ai_description_updater.log.
  2. Turn dry run off and try one product first:
bin/magento angeo:ai-description:run --sku=YOUR-TEST-SKU
  1. Check the product in the admin. If it looks good, run the full batch without --sku.

Command line

bin/magento angeo:ai-description:run                      # all active store views
bin/magento angeo:ai-description:run --sku=MY-SKU-001     # one SKU in all stores
bin/magento angeo:ai-description:run --store=2            # one store view
bin/magento angeo:ai-description:run --dry-run            # generate, do not save
OptionMeaning
--skuProcess one SKU only. Ignores the batch size.
--storeProcess one store id. Default: every active store view.
--dry-runGenerate but do not save. Overrides the setting.

How it handles store views

Without --store, the module walks through every active store view one by one. For each one it loads the product in that scope, reads that store view’s prompt and language settings, replaces {{store_name}} with the store view name, and saves the text in that store view’s scope — not in the global default.

So you can set a Dutch prompt on the Dutch store view and an English prompt on the English one, and both are used.

Prompts

The prompt template supports {{product_name}}, {{product_sku}} and {{store_name}}. For example:

Write a professional and SEO-friendly product description for "{{product_name}}"
(SKU: {{product_sku}}) for our {{store_name}} online store.
Include key benefits, features, and use cases.
Format using HTML paragraphs. Keep it between 150 and 250 words.

Set the language per store view under Prompt Configuration → Language.

Batches and cost

Each run handles at most Batch Size SKUs per store view (50 by default). The module stores an offset in var/angeo/ai_description_updater/offset_store_<id>.txt, so the next run continues where the last one stopped. When it reaches the end of the catalog, it starts again. To reset one store view, delete its offset file.

Google Sheets

As a SKU source. Put SKUs in one column of a sheet. Share the sheet as Anyone with the link can view. Enter the spreadsheet ID, the tab GID and the column index (0 = column A). No service account is needed.

As an export. Create a Google Cloud project, enable the Google Sheets API, create a service account and download its JSON key. Share the target sheet with the service account’s client_email as Editor. Paste the full JSON into Google Sheets Export → Service Account JSON. The key is stored encrypted. A dry run does not export.

Safety

The module treats AI output and outside data as untrusted:

  • HTML for the description field goes through an allow-list sanitizer. <script>, event handlers and javascript: links are removed.
  • CSV cells that start with =, +, - or @ are escaped. The Sheets export uses RAW input, so nothing runs as a formula.
  • The Sheets download only goes to docs.google.com over HTTPS.
  • The CSV file name is reduced to a safe name, with no path parts.
  • Admin actions are POST only, so Magento checks the form key.
  • API keys and the service account JSON are stored encrypted and never logged.

Configuration reference

All settings are under Stores → Configuration → Angeo AEO → AI Description Updater. The table shows each field, its config path (for bin/magento config:set) and its default value.

General Settings (4)
SettingConfig pathDefault
Enable Moduleangeo_ai_description/general/enabledNo
Dry Run Modeangeo_ai_description/general/dry_runYes
Enable Detailed Loggingangeo_ai_description/general/log_enabledYes
Batch Sizeangeo_ai_description/general/batch_size50
AI Provider (1)
SettingConfig pathDefault
AI Providerangeo_ai_description/ai_provider/provideropenai
OpenAI (ChatGPT) Settings (5)
SettingConfig pathDefault
OpenAI API Keyangeo_ai_description/openai/api_key— (stored encrypted)
GPT Modelangeo_ai_description/openai/modelgpt-4.1
Temperatureangeo_ai_description/openai/temperature0.7
Max Tokensangeo_ai_description/openai/max_tokens800
Request Timeout (s)angeo_ai_description/openai/timeout30
Anthropic (Claude) Settings (6)
SettingConfig pathDefault
Claude API Keyangeo_ai_description/claude/api_key— (stored encrypted)
Claude Modelangeo_ai_description/claude/modelclaude-sonnet-4-6
Max Output Tokensangeo_ai_description/claude/max_tokens1024
Request Timeout (s)angeo_ai_description/claude/timeout60
Enable Extended Thinkingangeo_ai_description/claude/extended_thinkingNo
Thinking Token Budgetangeo_ai_description/claude/thinking_budget2048
Google (Gemini) Settings (5)
SettingConfig pathDefault
Gemini API Keyangeo_ai_description/gemini/api_key— (stored encrypted)
Gemini Modelangeo_ai_description/gemini/modelgemini-2.5-flash-preview-05-20
Temperatureangeo_ai_description/gemini/temperature0.7
Max Output Tokensangeo_ai_description/gemini/max_tokens1024
Request Timeout (s)angeo_ai_description/gemini/timeout30
Groq Settings (Free) (5)
SettingConfig pathDefault
Groq API Keyangeo_ai_description/groq/api_key— (stored encrypted)
Modelangeo_ai_description/groq/modelllama-3.3-70b-versatile
Temperatureangeo_ai_description/groq/temperature0.7
Max Output Tokensangeo_ai_description/groq/max_tokens1024
Request Timeout (s)angeo_ai_description/groq/timeout30
Prompt Configuration (4)
SettingConfig pathDefault
System Roleangeo_ai_description/prompt/system_roleYou are a professional product copywriter specialising in e-commerce.
Prompt Template (global fallback)angeo_ai_description/prompt/prompt_templateWrite a professional and SEO-friendly product description for "{{product_name}}"
Description Languageangeo_ai_description/prompt/languageen
Include SEO Keywordsangeo_ai_description/prompt/include_seoYes
Attributes to Generate (11)
SettingConfig pathDefault
Generate Description (HTML)angeo_ai_description/attributes/description_enabledYes
Description — Custom Promptangeo_ai_description/attributes/description_prompt—
Generate Short Description (plain text)angeo_ai_description/attributes/short_description_enabledYes
Short Description — Custom Promptangeo_ai_description/attributes/short_description_prompt—
Short Description Max Length (chars)angeo_ai_description/attributes/short_description_length150
Generate Meta Titleangeo_ai_description/attributes/meta_title_enabledNo
Meta Title — Custom Promptangeo_ai_description/attributes/meta_title_prompt—
Generate Meta Keywordsangeo_ai_description/attributes/meta_keyword_enabledNo
Meta Keywords — Custom Promptangeo_ai_description/attributes/meta_keyword_prompt—
Generate Meta Descriptionangeo_ai_description/attributes/meta_description_enabledNo
Meta Description — Custom Promptangeo_ai_description/attributes/meta_description_prompt—
Google Sheets Source (4)
SettingConfig pathDefault
Enable Google Sheets Sourceangeo_ai_description/google_sheets/enabledNo
Spreadsheet IDangeo_ai_description/google_sheets/spreadsheet_id—
Sheet GIDangeo_ai_description/google_sheets/gid0
SKU Column Index (0-based)angeo_ai_description/google_sheets/sku_column_index0
Export / Output (3)
SettingConfig pathDefault
Save CSV Reportangeo_ai_description/export/csv_enabledYes
CSV Filename Patternangeo_ai_description/export/csv_filenameai_descriptions_{{date}}.csv
Notification Emailangeo_ai_description/export/notify_email—
Google Sheets Export (5)
SettingConfig pathDefault
Enable Google Sheets Exportangeo_ai_description/google_drive/enabledNo
Service Account JSONangeo_ai_description/google_drive/service_account_json— (stored encrypted)
Spreadsheet IDangeo_ai_description/google_drive/spreadsheet_id—
Sheet Tab Nameangeo_ai_description/google_drive/sheet_nameSheet1
Clear Sheet Before Writeangeo_ai_description/google_drive/overwrite_existingNo
Cron Schedule (2)
SettingConfig pathDefault
Enable Cronangeo_ai_description/cron/enabledNo
Cron Expressionangeo_ai_description/cron/schedule0 2 * * *

Cron

Cron is off by default. When you turn it on, it runs daily at 02:00 unless you set another schedule.

JobCron groupSchedule
angeo_ai_description_updaterdefault0 2 * * * by default, set in angeo_ai_description/cron/schedule

FAQ

Which provider should I start with?

Start with Groq. It is free and needs no credit card. Move to OpenAI, Claude or Gemini later if you want different quality or style.

Can I check the text before it is saved?

Yes. Keep Dry Run Mode on, or use --dry-run. The text goes to the log file only. Then test one SKU with --sku before a full run.

Does it overwrite descriptions in all store views?

It saves each text in the scope of the store view it was written for. Use --store to limit a run to one store view.

How do I control the cost?

Use Batch Size. Each run processes at most that many SKUs per store view and then stops. The next run continues from the saved offset.

Is generated HTML safe to show on the storefront?

The description is cleaned with an allow-list sanitizer before saving. Scripts, event handlers and javascript: links are removed. Still read a sample of the output before you publish at scale.

This page was written from the README.md, composer.json and etc/*.xml files of tag 1.1.1, read on 16 October 2026. Settings, commands and defaults come straight from that code. If a newer release is out, the README on GitHub wins.