# VOCTOS Arab AI Visibility Index: pre-registration **Version 1.0, drafted 2026-10-27, before any index data was collected.** No answer for this index has been captured. The SHA-256 of this file, and the UTC time it was computed, are in `HASHES.txt`. This file becomes binding when D approves it and publishes it with that hash before the first capture of round 1 (planned Tuesday 17 November 2026). If anything above the change log is edited before then, the hash is recomputed and the new hash is the one that counts. After the first capture, nothing above the change log is edited; every later decision goes into a dated addendum at the end. Arabic name: المؤشر العربي للظهور في إجابات الذكاء الاصطناعي. Panel: `panel.csv`, 150 questions, SHA-256 `08ee843250ed017c809b02cb546f5d4a75baee029bc5b98ba7ffb6b5cbed0dc5`. Source bank: `arabic-citation-index/questions_msa.csv`, 5,958 questions, bank hash `566becef044c4d6412b436c8ef9809b802c7e6bb2385b9541bebfc02f274692c` (the content hash defined in that bank's own METHODOLOGY.md and `run_index.py`). Run orders for rounds 1 to 6: `orders/ORDERS.sha256`, SHA-256 of that list `8c51d1eb0a085dfc951806f5da1eadaea9c80c404485d69e9c6b07e13cd112a9`. --- ## 1. Why this exists, and what it borrows The full Arabic Citation Index (`arabic-citation-index/`) is built and blocked: it needs engine API keys and $600 to $1,500 per round. This index is the version that runs now. It asks a small fixed panel each month in the browser, logged out, the way VOCTOS already captured 200 answers for the Egypt recommendations study (`research/chatgpt-egypt-recommendations/`), and it publishes the method before the data, the data with a DOI, and every round including the dull ones. The foreign models, checked on 27 October 2026: | index | what it publishes each period | what it discloses about method | what we take, what we do differently | |---|---|---|---| | Semrush AI Visibility Index ([site](https://ai-visibility-index.semrush.com/), [methodology](https://ai-visibility-index.semrush.com/methodology)) | Per market and month: top 20 most-mentioned brands, top 10 cited sources, brand co-occurrence, top-100 overlap between platforms. 180M+ answers, 22 industries, 9 markets, 4 platforms. Half-year study PDFs (H2 2026, October 2026). | Prompts come from Semrush's own AI-search and clickstream data; ranks by mention count and citation count; no combined score; a month is shown only when all four platforms have data. Prompt list and raw data are not published. States that month-to-month differences "should not be interpreted as growth or decline" on their own. | We keep mentions and citations separate and report each engine separately, with no blended score. We publish the prompt list and raw data, and we replace the blanket caution with a change rule written in advance (section 8). | | Ahrefs most-cited domains, monthly country lists (e.g. [Germany, September 2026](https://ahrefs.com/de/blog/chatgpt-deutschland-meistzitierte-domains/)) | Top 50 domains cited by ChatGPT in a country, share of citations, rank change against the previous month. | Brand Radar over "a large prompt index" with web search on; share = a domain's citations divided by the top-50 total. Prompt count, prompt list and repeat variance are not published. | We publish a monthly domain table, but we use answer reach (share of answers citing the domain) as the main figure, state the denominator, and do not report rank moves as changes. | | SOCi100 / Local Visibility Index ([press](https://lifestyle.kbew98country.com/story/67658/soci-announces-the-2026-soci100-the-most-visible-enterprise-brands-in-local-and-ai-search/), [PDF](https://golocal.soci.ai/rs/355-TUF-572/images/The_2026_Local_Visibility_Index_SOCi100.pdf?version=0)) | Annual ranking of about 2,700 enterprise brands and 350,000 locations, adding AI recommendation visibility in 2026 (ChatGPT, Gemini, Perplexity). | Composite of local search, reviews, social and AI signals; component weights were not found in the press materials. The PDF was not read in full for this draft. | Not a model for cadence or method. Useful only as evidence that "which brands AI recommends locally" is a reported story. A yearly brand list is a later product, not this index. | | Profound ([docs](https://docs.tryprofound.com/cookbook/citations/top-citing-domains.md)) and indices built on vendor data (e.g. [Everything-PR](https://everything-pr.com/claude-citation-source-index-2026)) | No public periodic index found. Vendor docs define citation share; third parties publish rankings that synthesise vendor datasets without running new queries. | Citation share = a domain's count over total citations per model, then averaged across models. | We report per engine and never average engines. Every figure here comes from captures we ran ourselves, and the captures are published. | None of these covers Arabic questions or the three markets here, and none publishes the questions it asked. That gap is the reason for this index, and it is the part a competitor cannot copy without also publishing their method. ## 2. Research questions When someone asks a commercial question in Modern Standard Arabic about Saudi Arabia, the UAE or Egypt, on logged-out ChatGPT and on signed-out Google AI Mode: - **RQ1. Brands.** How often does the answer name a specific business, brand or institution as an option, and how many? - **RQ2. Local or global.** Of the brands named, what share originate in the market the question is about, in another Arab country, or outside the Arab world? - **RQ3. Sources.** Which domains does the answer cite, how concentrated are they, and what kind of site are they (brand-owned, government or institution, media, directory, forum, social or video, encyclopaedia, other)? - **RQ4. Language.** What share of the cited sources are Arabic-language pages, and what share English? - **RQ5. Movement.** Which of these change from one month to the next by more than the instrument's own day-to-day variation, and which only appear to? Descriptive throughout. No hypothesis about direction is registered, and no causal claim about why a figure moved will be made from this data. ## 3. The panel ### 3.1 Source and draw The panel is drawn by `build_panel.py` from `questions_msa.csv`. The script refuses to run if the bank's content hash is not `566becef…4692c`. In that bank every vocabulary item exists in all three markets (1,986 items × 3), and the trailing number of a `question_id` is the item. The panel draws **items**, then takes each drawn item in all three markets, so every market comparison is the same question asked about three places. For each (sector, question type) cell, items present in all three markets are sorted and `k` are sampled with `random.Random(seed)`, where `seed` is the first 64 bits of SHA-256(`"20261027|panel||"`). The base seed 20261027 is the drafting date. Running `python build_panel.py --check` rebuilds the panel in memory and confirms it equals `panel.csv` byte for byte. ### 3.2 Composition | sector | items per question type | question types | markets | questions | |---|---|---|---|---| | health (الصحة والمختبرات) | 4 | 5 | 3 | **60** | | real estate (العقارات) | 2 | 5 | 3 | **30** | | education and training (التعليم والتدريب) | 2 | 5 | 3 | **30** | | finance and banking (التمويل والبنوك) | 2 | 5 | 3 | **30** | | **total** | | | | **150** | 50 questions per market; 30 per question type (recommend, criteria, cost, compare, when). 60 questions name a city (the recommend and criteria types); the other 90 name the country and, for cost, its currency. **Why these sectors.** Health is the first slice by design: it is where VOCTOS has its deepest work, where earlier VOCTOS studies already captured answers (labs, dental, radiology), and where the question "is the answer built on English sources" has the most weight for an Arabic reader. It gets twice the questions so the health slice can be reported on its own. Real estate, education and finance are the other three high-consideration purchases asked in all three markets, and real estate and education are sectors the Egypt study also covered (developers, schools), which gives continuity at sector level. The drawn items are whatever the seed picked: in education they happen to be mostly training courses and institutes rather than schools. Marketing and advertising is deliberately excluded because VOCTOS competes in it. **Why 150.** It is the largest panel that fits the capture constraint: two engines, two repeats, 600 captures, two working days in the browser at the pace in section 4.4 (timings in CAPTURE-PLAN.md). **Overall figures weight the four sectors equally.** Health's extra 30 questions buy precision for the health slice, not extra weight in the headline. Every overall figure is the mean of the four sector figures. Per-market and per-type figures use the same equal sector weighting. ### 3.3 What the panel does not contain - **No dialect subset.** The source bank is Modern Standard Arabic only (`register = msa` for all 5,958 rows), by its own design: dialect variants are agenda asset 02, a separate bank with its own register codes. A dialect arm would need that bank first and would be registered as a separate arm with its own hash. The Egyptian colloquial questions of the Egypt study are not added, because they cover one market and one question type and would mix registers. - **No English questions** and no agency-selection questions. Either could be a separate arm with its own registration and hash, never mixed into this series. ### 3.4 Fixed for the series The panel is fixed for the whole v1 series. It is not edited, extended or rebalanced between rounds. A different panel is a v2 series; if one is ever started, at least one round captures v1 and v2 together so the two series can be bridged. ## 4. Engines and instrument ### 4.1 Engines | code | engine | condition | |---|---|---| | C | ChatGPT at chatgpt.com | logged out, free tier as served, new chat per question, model as served (recorded where shown, otherwise `unknown`) | | G | Google AI Mode, `https://www.google.com/search?udm=50&hl=ar&q=` | signed out of Google, one fresh search per question, interface language declared as Arabic (`hl=ar`), no `gl` or `uule` parameter | Other engines were tested in earlier VOCTOS work and fail the logged-out condition or expose no readable sources: logged-out Perplexity hides its source list behind a sign-in wall (`research/arabic-citation-study/PILOT-LOG.md`), Brave's AI summary carries no destinations (`METHOD-APPENDIX.md` section 8b), and Gemini requires sign-in. Adding an engine later is a separate arm with an addendum, never a silent change to the series. ChatGPT is asked through the composer, not through `?q=…&hints=search`. The hint forces a web search; the index measures what a logged-out user gets by default, so whether ChatGPT chooses to search is itself recorded (the zero-citation rate). ### 4.2 Where the questions are asked from All captures run in the built-in browser of the Claude desktop app on D's machine, on its normal connection in Egypt. **The question names the market; the connection does not move.** Saudi and Emirati questions are asked from Egypt. Google prints its own location conclusion in the results footer; that line is recorded on every AI Mode capture, and a capture whose line names a country other than Egypt is invalid and re-asked once. ChatGPT exposes no equivalent. This is the largest limitation of the index and it is stated on every release. ### 4.3 What the operator never does - never logs in to any engine, and never uses a paid tier; - never clears cookies or site data, opens a private window, switches browser or profile, or changes network, VPN or IP address to get more answers; - never solves, skips or works around a verification challenge. If Google shows one ("unusual traffic", CAPTCHA), the AI Mode arm stops for the day and the stop is reported; - never works around a message limit. If logged-out ChatGPT shows its limit, the run waits. ### 4.4 Pace Questions run in blocks of 50, alternating engines (C1, G1, C2, G2, C3, G3), so each engine rests about 40 minutes between its blocks. Minimum spacing: 45 seconds between ChatGPT sends, 20 seconds between AI Mode searches (start to start). The reason for 50: in both earlier VOCTOS runs, logged-out ChatGPT showed its limit after 74 to 75 consecutive sends and cleared within 22 to 30 minutes (`chatgpt-egypt-recommendations/METHODOLOGY.md` item 1, `wave2/CAPTURE-LOG.md`). Blocks of 50 with long rests stay under the rate at which the limit appeared. If it appears anyway, the run waits. ### 4.5 Repeats Each round asks every panel question **twice per engine**: repeat A on day 1 and repeat B on the next working day, each in its own order. 150 × 2 engines × 2 repeats = **600 captures per round**. Orders are fixed now for all six rounds in `orders//.json` (arm CA, CB, GA, GB), shuffled with seed SHA-256(`"20261027|order||"`). The two repeats are what make a month-to-month claim testable: they measure how much an answer moves when nothing but the day changes. ### 4.6 What is recorded per capture qid, panel_id, round, engine, repeat, UTC send and completion times, tries and the reason for each retry, status, full answer text, every source the engine surfaced (section 5), place cards or places module, sponsored units, whether the answer ends with a question to the user, Google's location line (G), chat URL (C), browser and app version for the day. **Valid capture:** status `done`, answer text of at least 200 characters, no limit message or sign-in wall in place of an answer, and (for C) the composer value asserted equal to the question before sending. A ChatGPT answer showing only "Searching the web" after 120 seconds is `stalled`; an AI Mode answer with no answer text after 90 seconds, or AI Mode not served, is `not_served`. Each may be re-asked once, later in the same day or on the reserve day, in a fresh chat or search; every re-ask is logged with its reason. A send blocked by a message limit produces no answer and is not a capture; it is sent again after the wait and the blocked attempts are recorded in `tries`, as in wave 2. A valid capture is never re-asked. A capture still missing after the reserve day stays missing, and the count is published. **Smoke test.** Before each round, the operator may ask at most three questions that are not in the panel, to check that extraction still works after any interface change. They are logged as a smoke test in the capture log and never analysed. ## 5. What counts as a citation The rule is the Arabic Citation Index rule (`arabic-citation-index/METHODOLOGY.md` section 4), applied to what the browser can read: - **ChatGPT:** every entry in the citation buttons' `data-assistant-sources-payload` (url, title, attribution), every external link in the answer body, and every source pill or popover. Strip `utm_source=chatgpt.com`. Exclude links to chatgpt.com and openai.com and map-tile attribution links (mapbox.com, openstreetmap.org copyright links). - **Google AI Mode:** every `a[href^="/goto?url="]` anchor, de-duplicated on the token, resolved to its landing URL by navigation as set out in CAPTURE-PLAN.md, plus any plain external anchor in the answer. Each citation is tagged with its **surface**: `inline` (citation chip or source card) or `places` (the Website button on a places strip). Places-strip websites are reported separately and excluded from RQ3 and RQ4, because they are a business's own site attached to a map listing, not a source the engine chose to quote. - **Map links and place cards** (Google Maps links, ChatGPT place cards) are recorded per answer (card names, map links) and are not citations. - **Sponsored units** are never citations; they are counted in the sponsored rate. - The same URL twice in one answer counts once. Position is the order of first appearance. - A token or link that cannot be resolved is kept with `resolved = false` and its reason (`UNRESOLVED-`). It stays in citation counts and the unresolved rate is published; it is excluded from every domain-level and language figure. If an AI Mode token cannot be resolved, the source label the engine displayed may map it to a domain through the domain register; such rows carry `resolved = label` and are counted in domain figures, with their share published. Each URL is reduced to its registrable domain using the Public Suffix List, from a copy saved and hashed before round 1 (`registers/public_suffix_list.dat`, hash added to `HASHES.txt` when saved) and kept for the series. The short suffix list in `run_index.py` is not used, because it has no `gov.ae`, `ac.ae` or `med.sa` and would reduce `dha.gov.ae` to `gov.ae` and `kfsh.med.sa` to `med.sa`. Subdomains are kept in a separate column (`host`), so `pubmed.ncbi.nlm.nih.gov` and `ar.wikipedia.org` remain visible. ## 6. Coding ### 6.1 Picks: wave-2 rules, adapted Picks are coded with the wave-2 rules (`chatgpt-egypt-recommendations/wave2/CODING-RULES-W2.md`), adapted for five question types, three markets and non-local brands. The adapted rules are fixed in **Appendix A** of this file and are the only rules coders see. - **Two independent coders** code every answer from the rules alone (in practice, two separate model instances given the same input and no other context, as in wave 2). They do not see the round date, the other repeat, earlier rounds, or the VOCTOS client list. - Every `anchor` must be found verbatim in the answer text; a script checks this, and any pick whose anchor is not found is returned for recoding. - **Agreement is published every round:** Cohen's kappa on "answer names at least one pick", and pick-level F1 between the coders' lists (names matched after normalisation). - **Disagreements** go to a third coder, who sees both lists and the rules and chooses per pick. The adjudicated list is the data. All three files are published. ### 6.2 Brand register: local, regional, global Each distinct brand gets one row in `registers/brand_register.csv`: brand key, spellings seen, origin country, evidence URL, date decided. **Origin country** is the country of the brand owner's headquarters as stated on the brand's own site or legal footer, then a commercial registry, then Wikipedia. A licensed or franchised brand takes the origin of the brand owner, not the local operator, and the row says it is licensed. If no evidence is found, origin is `unknown`. For each pick, origin class is computed against the question's market: **local** (origin = the question's market), **regional** (another Arab League country), **global** (outside the Arab League), **unknown**. A brand is decided once and keeps its value in every round; a correction is a dated note in the register and is applied to all rounds, never to one. Government institutions offered as an option (a public hospital, a state university) are picks with their country as origin. ### 6.3 Domain register: source type and language Each cited domain gets one row in `registers/domain_register.csv`: source type (the eight values in `arabic-citation-index/METHODOLOGY.md` section 5), country (ccTLD, then registered entity, else unknown), default page language, evidence, date decided. Same rule: decided once, corrections dated and applied to all rounds. ### 6.4 Language of a cited source (RQ4) Applied in order, first rule that decides wins, and the rule used is stored per citation: 1. **Displayed title.** The title or label the engine shows for the source (ChatGPT payload `title`, AI Mode chip label). Count Arabic-script letters and Latin letters. 60% or more Arabic script: `ar`. 60% or more Latin and the domain's default language is not French or another Latin-script language: `en`. Otherwise go on. 2. **URL marker.** A path segment or parameter: `/ar/`, `/ar-xx/`, `lang=ar` → `ar`; `/en/`, `/en-xx/`, `lang=en` → `en`. 3. **Domain default** from the domain register. 4. Otherwise `unknown`, excluded from the share and counted. **Check each round:** 40 resolved inline citations are drawn with seed SHA-256(`"20261027|langcheck|"`), each page is fetched once and its `` read, and the agreement between that and the rule above is published. If agreement is below 85% in any round, the release says the language figure is unreliable for that round. ## 7. Metrics The unit is the valid capture (one question, one engine, one repeat). Each engine is reported separately and engines are never averaged. ### 7.1 Headline metrics, per engine | code | metric | definition | |---|---|---| | **H1** | Brand-naming rate | share of valid answers with at least one pick | | **H2** | Local-brand share | local picks ÷ picks with known origin; regional and global shares shown beside it | | **H3** | Arabic source share | inline citations coded `ar` ÷ inline citations coded `ar` or `en` | | **H4** | Top cited domains | the 10 domains with the highest answer reach: share of valid answers citing at least one resolved inline URL on that domain; citation share (domain's inline citations ÷ all resolved inline citations) shown beside it. Wikimedia projects are counted by host (`ar.wikipedia.org` and `en.wikipedia.org` separately), because their language is the point of RQ4 | ### 7.2 Reported every round, not headline Picks per answer and distinct brands per sector and market; zero-citation rate (valid answers with no inline citation); unresolved rate; label-mapped rate (section 5); source-type distribution; share of citations on a domain in the question's market (ccTLD or registered there); sponsored-unit rate; places-module rate (G); authority-mention rate (answers naming a regulator or licensing body, Appendix A); follow-up question rate; answer language; the **repeat agreement** between A and B (per-question Jaccard of pick sets, same-first-pick rate, Jaccard of cited domain sets); cuts by sector (health always shown), market and question type; VOCTOS-client appearances (section 9). ### 7.3 Intervals Every share carries a 95% percentile bootstrap interval that resamples **panel questions** (both repeats of a question move together), 10,000 resamples, seed SHA-256(`"20261027|boot|||"`). Citations and picks within one answer are not independent, which is why the question is the resampling unit. ### 7.4 Planning precision With about 300 valid answers per engine per round, an answer-level rate near 50% can be told apart from last month's at roughly 11 percentage points (80% power, two-sided 5%, treating months as independent; pairing by question should narrow this, clustering of citations will widen it for H3). Near 20% the figure is roughly 9 points. The health slice alone (120 answers per engine) needs roughly 18 points; each other sector (60 answers) roughly 25. These are planning figures, not results, and they are why sector-level moves are reported as exploratory only. ## 8. What counts as a change from one month to the next A month-to-month difference is called a **change** only if all of these hold. Otherwise it is reported as **no change detected**, with the difference and interval shown. 1. **Permutation test.** For engine e and metric m, each panel question has up to four captures: last month A and B, this month A and B. Under "no change", those are exchangeable within the question. 10,000 times, for every question independently, the captures are randomly relabelled between the two months (keeping how many each month had), and the difference is recomputed. The two-sided p-value is (1 + number of permuted |differences| ≥ observed) ÷ 10,001. Seed SHA-256(`"20261027|perm|||"`). This builds day-to-day variation into the null, because the two repeats of a month are already a day apart. 2. **Multiplicity.** H1, H2 and H3 for both engines form one family of six tests, Holm-corrected at 5%. For H4, the domains tested are the union of the two months' top-10 lists for that engine, a separate Holm family per engine. 3. **Size.** The difference is at least 5 percentage points. 4. **Noise floor.** The difference is larger than the A-versus-B difference for the same metric within either of the two months. 5. **Both months valid.** Each engine-round has at least 90% valid captures in each repeat. An engine-round below that is published as **incomplete** and is not tested. Labels: - **Change, engine update**: a change that coincides with an engine event logged in `registers/engine_events.md` between the two rounds (an announced model or product change, or an interface change the operator recorded at capture). The release does not attribute it to the market or to publishers. - **Sustained change**: changes in the same direction in two consecutive monthly comparisons, or a change against the round three months earlier using the same test. Only a sustained change is described as a trend. - **Rank moves are not changes.** A domain moving from 4th to 2nd is shown, never headlined. Only a reach difference that passes the rule above is a change. - Sector, market and question-type cuts are tested the same way but are always labelled **exploratory**, uncorrected, and never headlined. Round 1 is the baseline: it reports levels and the within-round A-versus-B agreement, and makes no change claim. ## 9. Conflict of interest VOCTOS sells the services this index measures demand for. That is stated on every release. **VOCTOS clients are disclosed and flagged, never excluded.** Clients known to the drafter that operate in the panel's sectors and markets: Delta Medical Labs (health, SA), Mouwasat (health, SA), HyperPay (payments, SA; finance sector). D confirms or completes this list before the hash is published; the confirmed list is part of this file. Every pick and every cited domain belonging to a client carries `voctos_client = 1` in the released data, and every release has a line stating how often client brands were named and cited, including when the answer is zero. Coders never see the list. VOCTOS itself sits in the marketing sector, which is not in the panel. Structural guards: the panel and orders are fixed and hashed before capture; coding rules are in this file; every capture and every coding file is published, so anyone can recompute every figure. ## 10. Publication commitments - **Every completed round is published**, including round 1 and rounds where nothing changes, within 10 working days of its last capture, in Arabic and English together. - The release carries this file's hash, the panel hash, the capture window, the capture log (limits met, challenges, re-asks, missing captures), coder agreement and the language check. - Data is published under CC BY 4.0 with a DOI per round (PUBLISH-PLAN.md). - A correction is a dated note on the release and a new data version, never a silent edit. ## 11. Limitations, declared before the first capture 1. **One vantage point.** Every question is asked from one machine in Egypt. Saudi and Emirati answers are what an asker in Egypt sees about Riyadh or Dubai, not what an asker in Riyadh sees. 2. **Two engines, logged out.** Logged-in users, paid tiers, apps, and other engines may differ. 3. **150 questions in four sectors.** A sample of commercial questions, not the Arab market and not informational, news or civic questions. 4. **MSA only.** Nothing here generalises to dialect or English queries. 5. **Two draws per question per month.** Both engines are non-deterministic; earlier VOCTOS runs found the first pick unchanged in only about half of repeated questions. Brand-level and domain-level tables are noisier than the rates. 6. **Engines change without notice.** A change can be a product change; section 8 labels the ones we can see, and some will not be visible. 7. **Citation recovery on AI Mode depends on resolving redirect tokens** that expire within minutes; the unresolved and label-mapped rates are published so the reader sees the hole. 8. **Brand origin and page language are coded by rule**, with known edge cases (licensed brands, bilingual pages). The rules, registers and language check are published. 9. **Two coders that are model instances.** Agreement between them is published; an outside review of a coding sample is invited (PUBLISH-PLAN.md), not yet arranged. 10. **Uneven spacing.** Round dates keep clear of Ramadan and Eid al-Fitr and finish before LEAP, so the gap between rounds runs from 19 to 42 days (CAPTURE-PLAN.md). A comparison across a longer gap has had more time to move, and the release states each gap. ## 12. Deviations Anything the run needs that this file does not settle is decided at the time, written in a dated addendum below the change log with the reason, and reported in the release. The text above the change log is never edited after the first capture. ## 13. Change log | date | version | change | |---|---|---| | 2026-10-27 | 1.0 draft | Written before any data. Panel drawn and hashed. Not yet approved or published by D. | --- ## Appendix A. Coding rules for picks (adapted from wave-2 rules) You code AI answers to Modern Standard Arabic questions about Saudi Arabia, the UAE or Egypt. The question types are: recommend ("what is the best X in city"), criteria ("what should I look for when choosing X in city"), cost ("how much does X cost in country"), compare ("A or B, which suits country"), and when ("when do I really need X in country"). Each block in the input is one answer. Code every block. Do not skip any. ### A1. Picks A pick is a specific, named business, brand, product or institution that the answer offers the reader as an option to use, buy, visit or apply to. Count it when: - it is a numbered or headed entry, a bullet, a place card, or a named option in a "my recommendations" list; - it is named as a good choice inside a paragraph ("I'd start with X", "X and Y offer this"); - in a cost answer, it is named as a place to get the service, with or without a price; - it is a named product offered as one of the options compared (a named aligner system, a named bank account, a named fund). Do not count: - directories, booking platforms, review sites, maps, social networks, marketplaces or articles used as sources or as places to look up other businesses (for example Vezeeta, Bayut, Property Finder, Dubizzle, Yellow Pages, Facebook, Google Maps). Record these under `platforms`. Count a platform as a pick only when the platform itself is the service the question asks about; - regulators, ministries and licensing or accreditation bodies named as something to check (for example a health ministry, a central bank, an accreditation scheme). Record these under `authorities`; - a business named only to warn against it or only as a negative example; - generic categories with no name ("large chain labs", "government hospitals"); - for ChatGPT: the rendered map pin list that follows "Reset view / Expand map / Location map" (it repeats picks), and any unit labelled as an ad; - for Google AI Mode: the source panel at the end, sign-in text, "Terms", follow-up suggestions, and any unit labelled as an ad. The same business named twice in one answer is one pick. ### A2. For each pick record - `name`: the name as written. - `anchor`: an exact substring of the answer where the pick first appears as a pick (usually its heading). It must occur verbatim in the answer text. Keep it short. - `kind`: `business`, `product` or `institution` (a public hospital, a university, a state body offered as an option to use). - `branch`: the branch or area named with it, as written, or null. - `card` (ChatGPT blocks only): true if the name, or a clear variant, is in the "PLACE CARDS SHOWN" line. Keep picks in the order they appear. ### A3. Per answer record - `platforms`: names of platforms and directories mentioned (A1), in order, as written. - `authorities`: names of regulators or licensing bodies mentioned (A1), in order, as written. - `sponsored`: true if any unit is labelled as an ad ("إعلان", "Sponsored", "مُموَّل", "Ad"). - Google AI Mode only: `map_module`: true if the answer shows a places module (entries with star rating and review count, opening hours, "الاتجاهات" or "الموقع الإلكتروني" buttons); `sources`: the source names displayed as citations, one per distinct source, as written, in order. ### A4. Output One JSON object keyed by qid: ```json {"2611CA001": {"picks": [{"name": "...", "anchor": "...", "kind": "business", "branch": null, "card": false}], "platforms": [], "authorities": [], "sponsored": false, "notes": ""}} ``` AI Mode blocks add `"map_module": true, "sources": [...]` and omit `card`. Use `notes` only for a real ambiguity, in a few words. ### A5. Changes from CODING-RULES-W2.md, listed - extended from "best business type in area" to five question types and three markets; - a pick may be a product or institution, not only a local business; `kind` added; - `w1` and `brand_match` removed (there is no wave 1 to match); `branch` added; - `platforms` and `authorities` added, so excluded mentions are recorded rather than dropped; - `sponsored` recorded for ChatGPT as well as AI Mode, since wave 1 found ads in ChatGPT answers; - the "do not count" examples now include Gulf platforms, regulators and ad units.