All notable changes to the AI Search Visibility Tracker Apify Actor.
[0.1.1] — 2026-04-29
Added — Store listing visuals (README inline images)
Hero image at the top of the README showing the real cloud-run output of the same "best CRM for small business" intent in EN / DE / FR / HU. The German prompt surfaces 5 of 7 sources from .de/.at/.ch TLDs, the Hungarian one 3 of 7 from .hu, the English one 0 of 11 — making the multilingual edge legible at a glance.
Output-detail image in the Output section showing a single citation record from the Apify cloud run sIXsrVM5qKzAHY8HP — query, engine, citation count, top sources, and the brand-match table with all three tracked brands cited.
Branded actor icon (512×512 PNG) — indigo→cyan gradient with a centered crosshair / target ring, mint "AI" wordmark, and a "GEO" chip below. Replaces the generic Store gradient; signals the tracking + AI-search category at a glance.
All three assets are stored in a named, public Apify key-value store (ai-search-visibility-tracker-marketing) so they don't expire and the README CDN-proxies them via images.apifyusercontent.com.
Tooling — repeatable visual generation
scripts/make-icon.py — generates marketing/icon-512.png and marketing/icon-128.png with the branded design. Re-run on each redesign.
scripts/make-screenshots.py — renders both README screenshots from real captured run data (Phase 2 multilingual run + cloud run sIXsrVM5qKzAHY8HP). Glyph-independent: drawn check marks (line segments) replace ✓ to avoid font-fallback rendering issues.
scripts/upload-screenshots.js — idempotent uploader that finds (or creates once) the named public KVS and PUTs each PNG.
Notes
No code changes in this release — purely Store-listing polish. The actor itself is bit-for-bit identical to v0.1.0; the new build only ships an updated README.
[0.1.0] — 2026-04-29
Initial scaffold — $0 build
First runnable version. Validates the core thesis: a multilingual GEO tracker can run on the Apify platform without the author paying for any third-party API.
Engines (all share the same return shape)
Gemini 2.5 Flash with google_search grounding — works on Google AI Studio's free tier (10 RPM, 250 RPD). Citations are returned as structured groundingChunks (URI + title + snippet).
OpenAI Responses API with web_search_preview tool (gpt-4o-mini-search-preview) — BYOK, ~$0.025/query.
registrableDomain — heuristic eTLD+1, handles .co.uk, .com.br, .co.jp, etc. without a Public Suffix List dependency.
extractUrlsFromText + normaliseCitations — merges engine-supplied structured citations with URLs mined from the answer text, dedup by canonical host+path.
detectBrandCitation — flags brand mentions via citation match OR whole-word brand-token match in the answer text.
citationShare — share-of-voice across tracked domains.
stabilityAcrossSamples — fraction of N samples in which each domain was cited (filters one-shot hallucinations when samplesPerQuery > 1).
diffRuns — gained/lost domains per query vs a prior dataset (delta mode).
pMap — bounded-concurrency async map, no external dep.
26 offline assertions (npm test) cover all of the above. Pass on first run.
Orchestrator (src/main.js)
Validates input, drops engines with missing keys (warns instead of failing).
Builds a work plan of (query × engine × sample) tasks.
Runs them with maxConcurrency (default 4 — stays under Gemini free-tier 10 RPM).
Writes per-call citation records, plus optional stability (when samplesPerQuery > 1), delta (when previousRunDatasetId set), and a final summary record.
Mirrors the summary into the run's KV store under key SUMMARY.
Input schema
queries, brandDomains are required; competitorDomains, language, engines and BYOK keys are optional.
24 language enum (en, de, fr, es, it, pt, nl, hu, pl, cs, sk, ro, bg, hr, tr, ja, ko, zh, ru, uk, sv, no, da, fi).
samplesPerQuery (1–5) for stability scoring.
previousRunDatasetId for delta mode.
Per-engine model overrides (geminiModel, openaiModel, perplexityModel, anthropicModel).
Tooling
scripts/test-utils.js — offline assertions for utils.js. No network, no keys.
scripts/smoke.js — live-network smoke against whichever engines have a key set in env.
scripts/test-comprehensive.js — 6-phase live integration runner with billing-aware error handling and retry on 503.
scripts/cloud-run.js — REST-API trigger + status poll, used to verify the actor on Apify cloud.
scripts/update-actor-metadata.js — applies Store metadata (categories, seoTitle/description, exampleRunInput) idempotently.
Why "BYOK + free Gemini tier"
Research showed that the cheapest viable competitor (Otterly Lite at $29/mo) gates users at 15 prompts/month. Profound has no free trial. Peec AI starts at €89/mo. The whole category locks out indie SEOs and small agencies. By passing the API-key cost transparently to the user, we charge only Apify pay-per-event for the orchestration layer, and the entry point is genuinely $0/month with Gemini's free tier.