Module reference

AEO Brand Visibility for Magento 2 — module reference

Covers angeo/module-aeo-brand-visibility 4.0.1 · Checked 16 October 2026 · MIT licensed

AEO Brand Visibility asks AI assistants the questions your shoppers ask — “where can I buy X?”, “what are the best stores for Y?” — and reads the answers. It then scores how visible your brand is.

It supports ChatGPT, Claude, Perplexity, Gemini and Groq. Every question is asked several times, because AI answers change from one call to the next. So the score comes with a margin of error, not a single lucky number.

The module plugs into AEO Audit as a live signal. It also runs on its own from the admin panel, from cron or from the command line.

What it measures

Each answer is scored on five signals:

SignalQuestionDefault weight
MentionedDoes the answer name the brand?1.0
RecommendedIs the brand suggested, not only listed?1.5
URL citedIs your domain quoted?1.5
First positionIs the brand named before competitors?2.0
Positive toneIs the wording around the brand positive?0.5

Negative tone has no weight. It takes points away instead, because “avoid this shop” is worse than no mention.

On top of that, the report shows:

  • Share of voice — your weight against every tracked competitor in the same answers.
  • Win rate — how often you are named before every competitor.
  • Accuracy issues — answers that link your brand to a website you do not own.

Reading the score honestly

Two settings decide if the number is useful.

Grounding. A model that answers from memory repeats training data that is months old. Nothing you change this quarter moves it. A grounded model searches the live web first, so it reacts to your work within days. Perplexity is always grounded. ChatGPT, Claude and Gemini can be grounded per provider. Groq cannot.

Sampling. Each provider and prompt pair is asked N times (3 by default). The result is a mean with a 95 % confidence margin, shown as ±. A change smaller than the margin is noise. Alerts ignore it.

Requirements

Magento2.4.x (Open Source, Mage-OS or Adobe Commerce) — magento/framework ^103.0
PHP8.1 – 8.5 — ~8.1.0||~8.2.0||~8.3.0||~8.4.0||~8.5.0
Other angeo modulesangeo/module-aeo-audit ^3.0||^4.0

You also need at least one AI provider API key, and a running message queue consumer (or the Inline run mode).

Installation

composer require angeo/module-aeo-brand-visibility
bin/magento module:enable Angeo_AeoBrandVisibility
bin/magento setup:upgrade
bin/magento setup:di:compile                # production mode only
bin/magento setup:static-content:deploy     # production mode only
bin/magento cache:flush

Start the consumer that runs queued audits:

bin/magento queue:consumers:start angeoBrandVisAuditRun

On most stores consumers_runner in app/etc/env.php starts it from cron. If your hosting does not run consumers, set Run Mode to Inline. A full run then happens inside the admin request and can hit a PHP or gateway timeout.

Setting it up

  1. Open Stores → Configuration → Angeo AEO → Brand Visibility (AI Models).
  2. In General, enable the module and fill in Store Category — what you sell, in two or three words. This one field moves the score more than any other. Without it, prompts fall back to generic phrases that big marketplaces always win.
  3. Enable one or more providers and paste their API keys. Keys are stored encrypted.
  4. For a score that reacts to your work, turn on Answer from live web search for at least one provider, or enable Perplexity.
  5. Add competitors under Competitors → Tracked Competitors, one per line.
  6. Start a run from Marketing → AEO Brand Visibility → Dashboard.

Almost every setting works per website and per store view, so a multi-brand store can measure each brand on its own.

Providers

ProviderGrounded answersNote
ChatGPTOptionalNeeds a search-capable model, such as gpt-4o-search-preview
ClaudeOptionalUses the server-side web search tool, billed per search
PerplexityAlwaysThe fastest-reacting signal of the five
GeminiOptionalUses Google Search as a tool
GroqNoFree tier, a memory-only baseline

Model names change often. Pick the closest option and check the field again after a provider release.

Prompts

There are six built-in prompts, each with an on/off switch and optional override text: best stores in category, where to buy, tell me about this brand, product search, compare with competitors, and gift guide. Add your own under Custom Prompts, one per line, as key: prompt text.

You can use these placeholders: {{brand}}, {{domain}}, {{category}}, {{products}}.

Languages

Phrase matching supports English, Ukrainian, Dutch, German, French and Spanish. English is always matched as well, because AI answers often mix languages.

For the accuracy check, add your country domains under Extra Top-Level Domains (for example nl, de, co.uk). Otherwise a wrong country domain linked to your brand is not flagged.

Alerts

An alert fires when the score drops by more than the set number of points against the recent average and the drop is bigger than the margin of error. It also fires when a competitor outranks you, or when negative tone or a wrong URL shows up. Alerts go by email, by webhook, or both. The webhook must use HTTPS. Private and reserved addresses are refused unless you allow them.

Command line

# Full audit for the default scope
bin/magento angeo:aeo:brand-visibility

# One store view, skip the cache, print the action plan
bin/magento angeo:aeo:brand-visibility --store=2 --refresh --plan

# Machine-readable output
bin/magento angeo:aeo:brand-visibility --format=json

# One provider and one prompt, with the raw answer
bin/magento angeo:aeo:brand-visibility --provider=perplexity --prompt=brand_direct

# Fail a CI pipeline below a score
bin/magento angeo:aeo:brand-visibility --fail-on=50
OptionMeaning
--storeStore view id (default 0)
--refresh, -rSkip the result cache
--providerAsk one provider instead of the full audit
--promptPrompt key to use with --provider
--formattable, json or markdown
--planPrint the action plan
--fail-onExit code 1 below this score

Admin panel and permissions

Marketing → AEO Brand Visibility has a Dashboard (start a run, read each answer, build an action plan) and Audit History (a grid with filters, a detail page and CSV export per run).

Access is split into four permissions. You can give an agency read access without the right to spend money on API calls.

ACL resourceTitle in admin
Angeo_AeoBrandVisibility::rootAEO Brand Visibility
Angeo_AeoBrandVisibility::viewView Reports
Angeo_AeoBrandVisibility::runRun Audit
Angeo_AeoBrandVisibility::exportExport Results
Angeo_AeoBrandVisibility::configConfiguration

Cost

One run costs providers × prompts × samples API calls. Three providers, three prompts and three samples make 27 calls. Weekly runs on small models cost cents. Grounded searches on large models cost more. Start with three samples and one grounded provider.

Configuration reference

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

General (9)
SettingConfig pathDefault
Enable Brand Visibilityangeo_brand_vis/general/enabledNo
Run Modeangeo_brand_vis/general/run_modequeue
Brand Nameangeo_brand_vis/general/brand_name—
Brand Domainangeo_brand_vis/general/brand_domain—
Brand Aliasesangeo_brand_vis/general/brand_keywords—
Store Categoryangeo_brand_vis/general/store_category—
Top Productsangeo_brand_vis/general/top_products—
Cache Lifetime (hours)angeo_brand_vis/general/cache_ttl_hours24
Log Prompts and Answersangeo_brand_vis/general/log_enabledNo
ChatGPT (OpenAI) (7)
SettingConfig pathDefault
Enableangeo_brand_vis/chatgpt/enabledNo
API Keyangeo_brand_vis/chatgpt/api_key— (stored encrypted)
Modelangeo_brand_vis/chatgpt/modelgpt-4.1-mini
Answer from live web searchangeo_brand_vis/chatgpt/groundingNo
Max Answer Tokensangeo_brand_vis/chatgpt/max_tokens800
Temperatureangeo_brand_vis/chatgpt/temperature0.3
Timeout (seconds)angeo_brand_vis/chatgpt/timeout60
Claude (Anthropic) (7)
SettingConfig pathDefault
Enableangeo_brand_vis/claude/enabledNo
API Keyangeo_brand_vis/claude/api_key— (stored encrypted)
Modelangeo_brand_vis/claude/modelclaude-sonnet-4-6
Answer from live web searchangeo_brand_vis/claude/groundingNo
Max Answer Tokensangeo_brand_vis/claude/max_tokens800
Temperatureangeo_brand_vis/claude/temperature0.3
Timeout (seconds)angeo_brand_vis/claude/timeout90
Perplexity (6)
SettingConfig pathDefault
Enableangeo_brand_vis/perplexity/enabledNo
API Keyangeo_brand_vis/perplexity/api_key— (stored encrypted)
Modelangeo_brand_vis/perplexity/modelsonar
Max Answer Tokensangeo_brand_vis/perplexity/max_tokens800
Temperatureangeo_brand_vis/perplexity/temperature0.2
Timeout (seconds)angeo_brand_vis/perplexity/timeout60
Gemini (Google) (7)
SettingConfig pathDefault
Enableangeo_brand_vis/gemini/enabledNo
API Keyangeo_brand_vis/gemini/api_key— (stored encrypted)
Modelangeo_brand_vis/gemini/modelgemini-2.0-flash
Answer from live web searchangeo_brand_vis/gemini/groundingNo
Max Answer Tokensangeo_brand_vis/gemini/max_tokens800
Temperatureangeo_brand_vis/gemini/temperature0.3
Timeout (seconds)angeo_brand_vis/gemini/timeout60
Groq (6)
SettingConfig pathDefault
Enableangeo_brand_vis/groq/enabledNo
API Keyangeo_brand_vis/groq/api_key— (stored encrypted)
Modelangeo_brand_vis/groq/modelllama-3.3-70b-versatile
Max Answer Tokensangeo_brand_vis/groq/max_tokens800
Temperatureangeo_brand_vis/groq/temperature0.3
Timeout (seconds)angeo_brand_vis/groq/timeout30
Queries (18)
SettingConfig pathDefault
Samples per Queryangeo_brand_vis/queries/samples3
Maximum Prompts per Providerangeo_brand_vis/queries/max_prompts3
Delay Between Calls (ms)angeo_brand_vis/queries/delay_between_ms600
Retries per Callangeo_brand_vis/queries/max_retries2
System Promptangeo_brand_vis/queries/system_prompt—
Prompt: Best stores in categoryangeo_brand_vis/queries/enable_recommendationYes
Override textangeo_brand_vis/queries/prompt_recommendation—
Prompt: Where to buyangeo_brand_vis/queries/enable_categoryYes
Override textangeo_brand_vis/queries/prompt_category—
Prompt: Tell me about this brandangeo_brand_vis/queries/enable_brand_directYes
Override textangeo_brand_vis/queries/prompt_brand_direct—
Prompt: Product searchangeo_brand_vis/queries/enable_product_searchNo
Override textangeo_brand_vis/queries/prompt_product_search—
Prompt: Compare with competitorsangeo_brand_vis/queries/enable_comparisonNo
Override textangeo_brand_vis/queries/prompt_comparison—
Prompt: Gift guideangeo_brand_vis/queries/enable_gift_guideNo
Override textangeo_brand_vis/queries/prompt_gift_guide—
Custom Promptsangeo_brand_vis/queries/custom_prompts—
Competitors (1)
SettingConfig pathDefault
Tracked Competitorsangeo_brand_vis/competitors/list—
Analysis (2)
SettingConfig pathDefault
Analysis Languageangeo_brand_vis/analysis/languageauto
Extra Top-Level Domainsangeo_brand_vis/analysis/extra_tlds—
Scoring (8)
SettingConfig pathDefault
Weight: Mentionedangeo_brand_vis/scoring/weight_mentioned1.0
Weight: Recommendedangeo_brand_vis/scoring/weight_recommended1.5
Weight: URL Citedangeo_brand_vis/scoring/weight_url_cited1.5
Weight: First Positionangeo_brand_vis/scoring/weight_first_result2.0
Weight: Positive Toneangeo_brand_vis/scoring/weight_positive_sentiment0.5
Negative Tone Penaltyangeo_brand_vis/scoring/negative_penalty0.5
Pass Thresholdangeo_brand_vis/scoring/pass_threshold60
Warning Thresholdangeo_brand_vis/scoring/warn_threshold30
Alerts (5)
SettingConfig pathDefault
Enable Regression Alertsangeo_brand_vis/alerts/enabledNo
Alert Recipientangeo_brand_vis/alerts/recipient—
Drop Threshold (points)angeo_brand_vis/alerts/drop_threshold10
Webhook URLangeo_brand_vis/alerts/webhook_url—
Allow Private Webhook Targetsangeo_brand_vis/alerts/webhook_allow_privateNo
Scheduled Runs (2)
SettingConfig pathDefault
Enable Scheduleangeo_brand_vis/cron/enabledNo
Cron Expressionangeo_brand_vis/cron/schedule0 5 * * 1
Data Retention (2)
SettingConfig pathDefault
Runs Kept per Store Viewangeo_brand_vis/retention/max_records_per_store90
Maximum Age (days)angeo_brand_vis/retention/max_age_days365

Cron and stored data

Scheduled runs use their own cron group, angeo_brand_visibility, so slow provider calls never delay Magento’s default group. A second job removes old runs every night.

JobCron groupSchedule
angeo_brand_visibility_auditangeo_brand_visibility0 5 * * 1 by default, set in angeo_brand_vis/cron/schedule
angeo_brand_visibility_cleanupangeo_brand_visibility30 3 * * *
TableWhat it holdsColumns
angeo_brand_visibility_auditAngeo Brand Visibility Audit Resultsid, run_uuid, status, error_message, brand_name, brand_domain, store_id, overall_score, score_margin, grade, samples, share_of_voice, win_rate, accuracy_issues, provider_scores, signal_rates, results_json, triggered_by, queries_count, errors_count, from_cache, created_at

Adding a provider

Implement AiProviderInterface and add one line to the ProviderPool argument in etc/di.xml. No existing class needs a change.

FAQ

Why does my score not change after I improve the store?

The providers probably answer from memory. Turn on live web search for ChatGPT, Claude or Gemini, or enable Perplexity. Grounded answers react within days.

Why is every question asked three times?

AI answers are not stable. The same question gives different answers. Asking several times gives a mean and a margin of error, so you can tell a real change from noise.

How much does a run cost?

The number of calls is providers × prompts × samples. With the defaults that is a few dozen calls. Small models cost cents per run. Grounded searches on large models cost more.

Does it need AEO Audit?

Yes. It requires angeo/module-aeo-audit 3.x or 4.x and reports into it as a live signal. You can still run it on its own.

Can an agency see reports without running paid audits?

Yes. Give the agency role only the View Reports permission. Running audits needs the separate Run Audit permission.

This page was written from the README.md, composer.json and etc/*.xml files of tag 4.0.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.