# Changelog of AI Brand Monitor: GEO / AI Search Visibility Tracker (`foxlabs/ai-brand-monitor`) Actor

- **URL**: https://apify.com/foxlabs/ai-brand-monitor/changelog.md
- **Full Actor documentation**: https://apify.com/foxlabs/ai-brand-monitor.md

## Changelog

### 0.1.29 — 2026-09-25

- **One product, one entry.** "monday.com", "monday work management" and "monday AI Workspace" were counted as three competitors, because the domain ending kept the names apart. Names are now compared without a domain ending (`.com`, `.io`, `.app`…).

### 0.1.28 — 2026-09-25

- **Professional bodies are no longer counted as competitors.** Names such as "Türk Diş Hekimleri Birliği", "İstanbul Barosu" or a ministry are dropped by rule. In the first platform run of 0.1.27, the discovery model let one through despite its instruction.

### 0.1.27 — 2026-09-25

- **ChatGPT now runs only on your own OpenAI key (`openaiApiKey`), like Perplexity.** Earlier versions offered our OpenAI key, which ran out of credit in early September 2026. Since then, ChatGPT was skipped in runs without your key while this page said it would run. The default engines are now Gemini and Claude. An engine without a key is listed in `enginesSkipped` with the field that adds it.
- **Competitor discovery.** Every answer is read for the businesses, products and professionals it names. They count towards your rank, the share of voice and the citation gap, and appear in the new `discoveredCompetitors`. Before, only the competitors you typed in were seen. With none given, the share of voice was a meaningless 100% and your rank was always 1. Names are kept only when they appear verbatim in the answer.
- **Turkish questions and a `language` setting.** A category written in Turkish is now asked about in Turkish. Before, Turkish categories were wrapped in English software-market templates such as "Recommend the top … for a small team in 2026". One English question also changed: "Recommend the top X for a small team in 2026" is now "Which X would you recommend?". A leading "best" / "en iyi" in the category is dropped, because the questions say it themselves.
- **Clean evidence quotes.** Quotes no longer break at "Uzm.", "Dr." or list numbers, and no longer carry markdown (`**`). A bare name line takes the sentence that follows it.
- **Trends compare like with like.** The delta is computed only against an earlier run of the same setup. The new `trendComparable` and `trendNote` fields explain each case. Your first run after this update shows no delta, on purpose: the questions, rank and share of voice are computed differently from before.
- **Share of voice** is `null` when there is nothing to compare against, and the breakdown lists at most 20 options plus `(other options)`.
- **Sentiment reads Turkish**, and negative phrases are counted before the positive words inside them ("önerilmez" no longer counts as "öneril…").
- **Titled names**: a brand entered as "Uzm. Dt. Ayşe Yılmaz" is also found where an answer writes "Ayşe Yılmaz".
- **Docs corrected.** The page published on 2026-09-07 was generated from another Actor's template. It described registry lookups, legal-form fields and per-record pricing, none of which this Actor has. Billing is per AI query, as it always was.

### 0.1.26 — 2026-09-20 — README examples corrected against the real input schema

- **The README's code examples did not match this Actor.** They used `queries` and `maxResultsPerQuery`, keys that do not exist in this Actor's input schema, with a placeholder value, and the input table listed those same phantom fields. Anyone who copied the AI-agent, cURL, JavaScript or Python example got a failing run. Every example now uses the real schema and matches the Console prefill: `{"brand":"Notion","category":"project management software"}`
- The input table is regenerated from `input_schema.json`, so it lists the fields the Actor actually accepts.
- Removed claims carried over from the same generator template where present: "formation / status monitoring", "a canonical registry record for KYB and due diligence", "every row carries `query`", and `industry` described as a NACE code.
- No code, output field or pricing change.

### 0.1 — 2026-09-07

- \~~Dropped empty-promise columns: `competitorsMentioned, competitorsMentionedText, competitors, citationRatePct, sourceGap, sourceGapText`.~~ **Correction (2026-09-25):** this was wrong. None of these columns was removed; every version emits them.
- Enabled AI-agent payments (x402) and rebuilt the README (What-is / when, AI agents + x402 + MCP, Overview, Features, Use cases, Integration, FAQ, Troubleshooting, Support & contact).

### 0.1.17 — 2026-07-28

- **Skipped engines no longer report a measurement they never made.** An engine disabled mid-run (dead key or out of credit) used to appear in the engine count with `mentionRatePct: 0`. That read as "this engine never mentions your brand", when it was never queried. Such engines now carry `skipped: true` with `mentionRatePct: null` / `avgRank: null`, are excluded from the engine count, and stay listed in `enginesSkipped` with the reason.

### 0.1.16 — 2026-07-28

- **Graceful engine degradation.** An engine whose key is dead or out of credit is disabled at the first failure and reported once in `enginesSkipped` `[{ engine, engineLabel, reason }]`, instead of emitting an error row for every remaining prompt. Skipped queries are never charged.
- **Dotted-brand sentiment & excerpt fix.** Brand names containing dots ("Uzm. Dt. Ayşe Yılmaz", "Acme Inc.") were chopped by the sentence splitter, so excerpts came back empty and sentiment `null` even when the brand was mentioned.
- **Honest index recalibration.** `citationRatePct` measures the share of **all** answer samples citing your domain, and the index's rank and citation parts scale with the mention rate.

### 0.1.15 — 2026-07-09

- Made `brand` and `category` required, added the *Getting accurate results* guide and a runtime check that fails fast if the category is missing.

### 0.1.10 — 2026-07-05

- Hardened output handling so an edge-case value can never trip dataset-schema validation.

### 0.1.9 — 2026-06-27

- API quota and billing-exhaustion errors (HTTP 429 `insufficient_quota`) are failed fast instead of retried as transient rate limits.
