angeo / module-ai-description-updater
Automatically generate and update Magento 2 product descriptions using OpenAI, Anthropic Claude, or Google Gemini. Supports Google Sheets as SKU source, Google Drive CSV export, dry-run mode, per-store prompts and cron automation.
Package info
github.com/angeo-dev/module-ai-description-updater
Type:magento2-module
pkg:composer/angeo/module-ai-description-updater
Requires
- php: >=8.2
- magento/framework: *
- magento/module-backend: *
- magento/module-catalog: *
- magento/module-config: *
- magento/module-store: *
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.0
This package is not auto-updated.
Last update: 2026-05-17 17:41:48 UTC
README
Automatically generate and update Magento 2 product descriptions across all store views using AI — via CLI, cron, or Admin Panel.
angeo/module-ai-description-updater is an open-source Magento 2 module for bulk AI-powered product description generation across multiple store views and languages. Supports OpenAI, Anthropic Claude, Google Gemini, and Groq (free, no credit card required). Results can be exported to Google Sheets automatically.
Table of contents
- Why this module vs alternatives
- Supported AI providers
- Requirements
- Installation
- Quick start — Groq (free, 5 minutes)
- Full configuration reference
- CLI usage
- Multi-store behaviour
- Setup guides
- Log file
- Related modules
Why this module vs alternatives
| Feature | This module | Commercial alternatives |
|---|---|---|
| CLI + Cron automation | ✓ | Rarely |
| Multi-store (all store views) | ✓ | Rarely |
| Groq — free tier, no card | ✓ | Nowhere |
| Google Sheets as SKU source | ✓ | Nowhere |
| Google Sheets export | ✓ | Nowhere |
| Dry-run mode | ✓ | Rarely |
| 4 AI providers | ✓ | Usually 1 |
| MIT license | ✓ | Rarely |
| Price | Free | $99–$299/year |
Supported AI providers
| Provider | Models | Cost | Notes |
|---|---|---|---|
| OpenAI | gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, gpt-4o | Paid | Best quality/cost: gpt-4.1-mini |
| Anthropic Claude | claude-sonnet-4-6, claude-opus-4-6, claude-haiku-4-5 | Paid | Extended thinking supported |
| Google Gemini | gemini-2.5-flash-preview, gemini-2.0-flash, gemini-2.0-flash-lite | Free tier + paid | Free tier has daily limits |
| Groq | llama-3.3-70b-versatile, llama-3.1-8b-instant, mixtral-8x7b | Free | 14,400 req/day, no credit card |
Requirements
- PHP 8.2+
- Magento 2.4.x / Adobe Commerce / Mage-OS
ext-curl,ext-openssl
Installation
composer require angeo/module-ai-description-updater bin/magento setup:upgrade bin/magento setup:di:compile bin/magento cache:flush
Quick start — Groq (free, 5 minutes)
The fastest way to get started — Groq is free with no credit card required.
Step 1 — Get a free API key
Go to console.groq.com, create an account, go to API Keys → Create API key. The key starts with gsk_.
Step 2 — Configure Magento
Go to Stores → Configuration → Angeo AEO → AI Description Updater:
- General → Enable Module →
Yes - General → Dry Run Mode →
Yes(safe for first test) - AI Provider → AI Provider →
Groq (Free — Llama / Mixtral) - Groq Settings → Groq API Key → paste your
gsk_...key - Groq Settings → Model →
Llama 3.3 70B Versatile (recommended) - Attributes → Generate Description →
Yes - Click Save Config
Step 3 — Test with dry-run
bin/magento angeo:ai-description:run --dry-run
Check var/log/angeo_ai_description_updater.log to preview what would be generated.
Step 4 — Run on a single product first
Disable Dry Run in admin, then:
bin/magento angeo:ai-description:run --sku=YOUR-TEST-SKU
Verify the result in the product edit page. If it looks good, run the full batch:
bin/magento angeo:ai-description:run
Full configuration reference
Path: Stores → Configuration → Angeo AEO → AI Description Updater
General
| Field | Default | Description |
|---|---|---|
| Enable Module | No | Master on/off switch |
| Dry Run Mode | Yes | Generate but do not save to Magento. Always test with this enabled first. |
| Enable Detailed Logging | Yes | Writes to var/log/angeo_ai_description_updater.log |
| Batch Size | 50 | Max products processed per run or cron execution |
AI Provider
| Field | Default | Description |
|---|---|---|
| AI Provider | OpenAI | Select one of: OpenAI (ChatGPT), Anthropic (Claude), Google (Gemini), Groq (Free) |
Only the selected provider's settings section is used. Switch providers at any time.
OpenAI settings
Used when AI Provider is set to OpenAI.
| Field | Default | Description |
|---|---|---|
| OpenAI API Key | — | Starts with sk-. Stored encrypted. |
| GPT Model | gpt-4.1 | gpt-4.1-mini is the best quality/cost balance. |
| Temperature | 0.7 | 0.0 = deterministic, 2.0 = very creative. 0.7 recommended for product copy. |
| Max Tokens | 800 | Maximum length of generated response. |
| Request Timeout (s) | 30 | HTTP timeout. Increase if you get timeout errors. |
Claude settings
Used when AI Provider is set to Anthropic Claude.
| Field | Default | Description |
|---|---|---|
| Claude API Key | — | Starts with sk-ant-. Stored encrypted. |
| Claude Model | claude-sonnet-4-6 | claude-haiku-4-5 is fastest and cheapest. claude-opus-4-6 is highest quality. |
| Max Output Tokens | 1024 | Maximum response length. |
| Request Timeout (s) | 60 | Extended thinking may need more — increase to 120 if needed. |
| Enable Extended Thinking | No | Lets Claude reason before writing. Higher quality, more tokens. Claude 4.x only. |
| Thinking Token Budget | 2048 | Minimum 1024. Internal reasoning tokens — billed as output tokens. |
Gemini settings
Used when AI Provider is set to Google Gemini.
| Field | Default | Description |
|---|---|---|
| Gemini API Key | — | Stored encrypted. |
| Gemini Model | gemini-2.5-flash-preview-05-20 | gemini-2.0-flash is fast with a free tier. |
| Temperature | 0.7 | 0.0–2.0. |
| Max Output Tokens | 1024 | Gemini 2.x supports up to 8192. |
| Request Timeout (s) | 30 |
Note: If you get
limit: 0errors, create a new Google Cloud project and generate a fresh API key.
Groq settings
Used when AI Provider is set to Groq.
| Field | Default | Description |
|---|---|---|
| Groq API Key | — | Starts with gsk_. Stored encrypted. No credit card required. |
| Model | llama-3.3-70b-versatile | llama-3.3-70b-versatile gives the best quality. llama-3.1-8b-instant is fastest. |
| Temperature | 0.7 | |
| Max Output Tokens | 1024 | |
| Request Timeout (s) | 30 |
Free tier: 30 requests/minute, 14,400 requests/day.
Prompt
| Field | Default | Description |
|---|---|---|
| System Role | "You are a professional product copywriter..." | The AI model's persona and instructions. |
| Prompt Template | (see config) | Supports: {{product_name}}, {{product_sku}}, {{store_name}} |
| Language | en | Target language. Set per store view for multi-language stores. |
| Include SEO Keywords | Yes | Appends SEO keyword optimisation instruction to the prompt. |
Example prompt template:
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.
Attributes
| Field | Default | Description |
|---|---|---|
| Generate Description | Yes | Updates the main description attribute (HTML) |
| Generate Short Description | Yes | Updates short_description |
| Short Description Max Length | 150 | Character limit for short description |
| Generate Meta Title | No | Updates meta_title |
| Generate Meta Keywords | No | Updates meta_keyword |
| Generate Meta Description | No | Updates meta_description |
Tip: Enable meta attributes only after validating description quality. Test with
--dry-runfirst.
Google Sheets — SKU source
Use a Google Spreadsheet as the source of SKUs to process instead of all active products.
| Field | Default | Description |
|---|---|---|
| Enable | No | Read SKU list from a Google Spreadsheet |
| Spreadsheet ID | — | From the URL: /spreadsheets/d/[SPREADSHEET_ID]/edit |
| Sheet GID | 0 | Tab ID from URL ?gid=.... Default 0 = first tab. |
| SKU Column Index | 0 | Zero-based: 0 = column A, 1 = column B, etc. |
No Service Account required — the spreadsheet must be set to "Anyone with the link can view".
See Google Sheets SKU source setup for step-by-step instructions.
Google Sheets — export
Write generated descriptions back to a Google Spreadsheet after each run.
| Field | Default | Description |
|---|---|---|
| Enable | No | Export results to Google Sheets |
| Service Account JSON | — | Full JSON key from Google Cloud Console. Stored encrypted. |
| Spreadsheet ID | — | Target spreadsheet. Must be shared with the Service Account client_email. |
| Sheet Tab Name | Sheet1 | Tab to write to. |
| Clear Sheet Before Write | No | Yes = overwrite all rows. No = append new rows. |
See Google Sheets export setup for step-by-step instructions.
Export / CSV
| Field | Default | Description |
|---|---|---|
| Save CSV Report | Yes | Save results to var/angeo/ai_description_updater/ |
| CSV Filename Pattern | ai_descriptions_{{date}}.csv |
Supports {{date}} placeholder |
Cron
| Field | Default | Description |
|---|---|---|
| Enable Cron | No | Enable automatic scheduled runs |
| Schedule | 0 2 * * * |
Standard cron expression. Default: daily at 2:00 AM. |
CLI usage
# Run for all active store views bin/magento angeo:ai-description:run # Single SKU across all stores bin/magento angeo:ai-description:run --sku=MY-SKU-001 # Single store view only bin/magento angeo:ai-description:run --store=2 # Dry-run — generate but do not save bin/magento angeo:ai-description:run --dry-run # Combine options bin/magento angeo:ai-description:run --sku=MY-SKU --store=2 --dry-run
| Option | Description |
|---|---|
--sku=VALUE |
Process a single SKU only. Bypasses batch size limit. |
--store=VALUE |
Process a single Magento store ID. Default: all active stores. |
--dry-run |
Generate but do not save. Overrides config setting. |
Multi-store behaviour
When run without --store, the module processes every active non-admin store view sequentially.
For each store view:
- Product is loaded in that store's scope
{{store_name}}in the prompt is replaced with the store view name- Generated content is saved in that store's scope — not the global default scope
# List your store IDs bin/magento store:list # Run for a specific store only bin/magento angeo:ai-description:run --store=3
Setup guides
OpenAI API key
- Go to platform.openai.com → sign in or create account
- Click your profile → API keys → Create new secret key
- Copy the key — shown only once (starts with
sk-) - In Magento: Stores → Configuration → Angeo AEO → AI Description Updater → OpenAI Settings → API Key
Add a payment method at platform.openai.com/account/billing for production use.
Anthropic Claude API key
- Go to console.anthropic.com → create account
- API Keys → Create Key
- Copy the key (starts with
sk-ant-) - In Magento: ... → Claude Settings → API Key
Google Gemini API key
- Go to aistudio.google.com/app/apikey
- Click Create API key in new project
- Copy the key
- In Magento: ... → Gemini Settings → API Key
If you get
limit: 0errors: create a new Google Cloud project and generate a new key there.
Groq API key (free)
- Go to console.groq.com → create account — no credit card required
- API Keys → Create API key
- Copy the key (starts with
gsk_) - In Magento: ... → Groq Settings → API Key
Free tier: 30 requests/minute, 14,400 requests/day.
Google Sheets — SKU source setup
Step 1 — Create the spreadsheet
Create a new spreadsheet at sheets.google.com. Add SKUs in column A, one per row:
SKU
MY-SKU-001
MY-SKU-002
MY-SKU-003
Step 2 — Make it publicly readable
Share → Change to anyone with the link → Viewer → Done
Step 3 — Get the Spreadsheet ID
Copy the ID from the URL:
https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgVE2upms/edit
↑ this is the Spreadsheet ID
Step 4 — Configure in Magento
- Enable →
Yes - Spreadsheet ID → paste ID
- Sheet GID →
0(first tab) or?gid=value from URL for other tabs - SKU Column Index →
0for column A
Google Sheets — export setup (Service Account)
Step 1 — Create a Google Cloud project
Go to console.cloud.google.com:
- Click the project dropdown (top left) → New Project
- Name it (e.g.
angeo-sheets) → Create
Step 2 — Enable Google Sheets API
Left menu → APIs & Services → Library → search Google Sheets API → Enable
Step 3 — Create a Service Account
Left menu → IAM & Admin → Service Accounts → Create Service Account:
- Choose Application data when asked what data you will access
- Service account name:
angeo-ai-updater - Click Create and Continue → skip optional role → Done
Step 4 — Generate a JSON key
Click the service account → Keys tab → Add Key → Create new key → JSON → Create
A JSON file downloads automatically. It looks like this:
{
"type": "service_account",
"project_id": "angeo-sheets",
"client_email": "angeo-ai-updater@angeo-sheets.iam.gserviceaccount.com",
"private_key": "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----\n",
"token_uri": "https://oauth2.googleapis.com/token"
}
Copy the client_email value — you need it in the next step.
Step 5 — Share the spreadsheet with the Service Account
- Create a new spreadsheet at sheets.google.com
- Click Share
- Paste the
client_emailfrom the JSON (e.g.angeo-ai-updater@angeo-sheets.iam.gserviceaccount.com) - Set role to Editor
- Click Send
Step 6 — Configure in Magento
Go to Stores → Configuration → Angeo AEO → AI Description Updater → Google Sheets Export:
- Enable →
Yes - Service Account JSON → paste the entire contents of the downloaded JSON file
- Spreadsheet ID → copy from the spreadsheet URL
- Sheet Tab Name →
Sheet1(or your tab name) - Clear Sheet Before Write →
Yesto overwrite,Noto append - Save Config
Verify:
bin/magento angeo:ai-description:run --sku=ONE-SKU --dry-run
Dry-run does not export. Disable dry-run and run again — a row should appear in the spreadsheet.
Log file
# Watch in real time tail -f var/log/angeo_ai_description_updater.log # Last 50 lines tail -50 var/log/angeo_ai_description_updater.log
Log entries include: run start/complete, per-SKU status (updated / dry_run / error), AI API errors, Google Sheets export result.
Related modules
| Module | Purpose |
|---|---|
angeo/module-aeo-audit |
8-signal CLI audit — checks ChatGPT, Gemini and Perplexity visibility |
angeo/module-llms-txt |
Auto-generates llms.txt and llms.jsonl from Magento catalogue |
angeo/module-rich-data |
Injects Product, Organization, FAQPage JSON-LD schema |
angeo/module-openai-product-feed |
ChatGPT Shopping product feed generator |
angeo/module-aeo-brand-visibility |
Live brand visibility audit across ChatGPT, Gemini, Perplexity |
License
MIT — free to use, modify, and distribute.
Author
Ievgenii Gryshkun · angeo.dev · info@angeo.dev