---
name: weekly-aeo-seo-report
description: Build a weekly AI-answer, AI-referral and search report with three tracked actions, send the owner a draft, and publish to the weekly thread only after approval.
---

# Weekly AEO & SEO Report

Combine AI-answer visibility, AI-referral traffic and search performance into one weekly report with three concrete actions. The owner approves the draft before it appears in the report channel. Part of the [Answer Engine Optimization (AEO) skillset](https://type.com/library/skills/answer-engine-optimization).

## When it runs

- Recommended schedule: Mondays at 8am in `timezone`, after the daily standup opens the AEO weekly thread.
- DM the exact draft to `owner`. Post only after explicit owner approval, as a reply to today's AEO weekly thread; use a standalone post only if that thread does not exist.
- If no answer by noon in `timezone`, send one one-line reminder DM, then stop reminding.

## Inputs

| Input | What it is | Example |
| --- | --- | --- |
| `brand_name`, `brand_domains`, `brand_exclusions`, `brand_query_variants` | Exact brand spelling, citation domains, look-alikes, search-query spellings | Example Co; example.com; common misspellings |
| `tracker_monitors`, `tracker_engines` | Buyer-problem, competitor/category and brand panels, engines and activation dates | A, B, Brand; ChatGPT search |
| `buyer_question_tag`, `historical_baseline` | Buyer cohort and verified historic naming rate/date | Technical-buyer cohort; recorded baseline |
| `ga4_property`, `signup_events` | Analytics property and real signup/conversion events | Your GA4 property; sign_up or key events |
| `search_console_property`, `search_country`, `search_filter_reason` | Verified property, country filter and reason | https://example.com/; US; configured market |
| `owner`, `engineering_owner`, `drafting_owner`, `report_channel`, `timezone` | Action owners, destination and local timezone | @owner; Eng; agent; #aeo; America/Los_Angeles |
| `aeo_master_doc`, `tracking_registry` | Shared alerts, tracker, weekly results and panel history | The AEO master doc; the tracking registry |

## Before you start

Connect Promptwatch in type.com as a Custom API connection using your Promptwatch project API key. Another tracker works if it exposes equivalent paginated `responses` and `monitors` data. Connect GA4, Search Console, Slack or equivalent, and scoped editing access to the named shared docs.

Find the AEO master doc and tracking registry. On first run create missing documents and sections, tell the owner where they are, and initialize Alert log, Weekly results and Action tracker. The Action tracker columns are # | Action | Source | Owner | Status | Added | Done. Populate panel history from actual tracker evidence; do not invent a baseline.

Domain Search Console properties may not be verified on the connected account. Fall back to a verified URL-prefix property for the same site and keep its scope clear in the allowed Search note. If GA4 has no sign_up event, use configured key events that actually exist; retain the event definition in the doc.

## Steps

### 1. Gather AI-answer data

Read every page of `responses` by configured monitor, engine and date range for the last completed Sunday 00:00 through Saturday 23:59 in `timezone`, and the prior equivalent week. Use these same dates throughout the report title, analytics and search queries.

For each engine count total answers, answers naming `brand_name`, and answers citing a URL in `brand_domains`. Exclude look-alikes in `brand_exclusions`. An answer may cite the brand without naming it; compute the two independently.

Compare only questions and engines active in both weeks. Read question, persona and engine changes in the tracking registry. After a material panel/persona change, mark the new baseline week's WoW cells “new”. A newly collecting engine stays “new” until it has a full prior week. If no prior-week data exists for a row, show “new”.

For `buyer_question_tag`, separately count total answers, names, citation count and naming rate. Always include a Progress line: verified historic naming baseline → current named/answers = percentage. If no historical baseline exists, state “baseline not recorded” in the AEO note and use this run as the recorded baseline rather than inventing improvement.

### 2. Read the week's daily alerts

Read Alert log entries inside the same weekly window. Count LOST NAME, LOST CITE, TAKEOVER, WIN and NEW SOURCE separately; retain the split in Weekly results. Identify repeatedly flagged questions and the most frequent takeover competitors. Use these in What moved and the three actions. If the log is absent or empty, say “no daily alerts logged” in the AEO note.

### 3. Gather AI-referral traffic

Query `ga4_property` for the same two completed weeks: sessions, new users and signups using real configured sign_up, workspace-created or key events. Match session source, medium or referrer against chatgpt.com, chat.openai.com, perplexity.ai, claude.ai, gemini.google.com, copilot.microsoft.com, you.com, phind.com, mistral.ai and grok.com, or utm_source = chatgpt.com. Also get the top 3 landing pages for those sessions. Keep new-user detail in the doc. If GA4 is unavailable show “n/a” in the table and one AEO-note explanation.

### 4. Gather country-filtered Google search data

Pull query-level Search Console data for `search_console_property`, filtered to `search_country` (recommended default US). For each week compute total clicks, Mon–Fri clicks excluding weekends, non-brand clicks, and total impressions. Non-brand queries exclude `brand_name`, `brand_query_variants` and obvious brand misspellings. Calculate WoW percentage changes. Keep Non-brand clicks even when zero.

### 5. Write What moved and choose the next three actions

Write 3–4 one-line What moved bullets, numbers first: primary search engine naming/citation statistics; totals across engines and any engine still at zero; alert counts and leading takeover competitor; country-filtered search clicks, weekday clicks and impressions.

Read open Action tracker rows before choosing the three highest-impact actions. Each action is one line: owner · verb · exact page/question/listing · justifying number · link. Outreach, listings, review sites and login-dependent actions belong to `owner`; site/schema/crawl/indexing fixes belong to `engineering_owner`; drafting belongs to `drafting_owner`. Outreach actions are requests for the owner to review or perform manually.

Do not create another row for an already-open action: state it is still open and how long. Summarize rows added last week, done, and open more than 14 days. After approval add only new actions with Source weekly report, Status open, Added today.

### 6. Format and request approval

Use the report structure below. Put the three actions first, above a single code block containing all three tables. DM the exact draft to `owner`, preceded by “Weekly AEO report draft. Reply approved / post it, or tell me what to change.”

Wait for explicit approval such as “approved”, “post it”, “go”, “looks good” or “send it”. If changes are requested, edit and resend the exact draft, then wait again. Send at most one one-line reminder at noon. Never treat silence as approval.

### 7. Publish the approved draft

Find today's channel message beginning “AEO weekly”. Post the approved draft as a thread reply. If no such thread exists, use a standalone post. Confirm delivery; do not claim a post succeeded without a successful receipt.

### 8. Update the master doc

After the approved report posts, update only Weekly results and the approved new Action tracker rows. Mark Alert log entries covered by a tracker row “status: tracked #<row>”. Preserve other sections and existing owner/status choices.

## What it posts

The complete report must stay under 40 lines including the code block. Omit blank lines, use 3 What moved bullets when needed, and list the configured engines:

```text
Next 3 actions
1. <owner>: <verb + exact object> · <number> · <link>
2. <owner>: <verb + exact object> · <number> · <link>
3. <owner>: <verb + exact object> · <number> · <link>
Tracker: <X> added last week, <X> done, <X> open >14 days
[code block begins]
<brand_name> AEO & SEO: <last Sun–Sat dates> vs <prior Sun–Sat dates>
Notes
- AEO: <tracking status, baseline changes or unavailable source; omit if unchanged>
- Search: <search_country> only · <search_filter_reason>
AI answers (same questions & engines both weeks)
<Engine>        Answers  Name <brand_name>  Cite <brand_name>  WoW
<engine 1>      <n>      <n>                <n>               <delta or new>
<engine 2>      <n>      <n>                <n>               <delta or new>
<engine 3>      <n>      <n>                <n>               <delta or new>
<engine 4>      <n>      <n>                <n>               <delta or new>
Progress: <historical naming rate/date> → <named>/<answers> = <rate>% now
Buyer questions: named <n>/<answers> (<rate>%), cited <n>
Daily alerts: <lost> lost, <takeovers> takeovers (top: <competitor>), <wins> wins, <new sources> new sources
AI referrals (GA4)
                 Last    Prior   WoW
Sessions         <n>     <n>     <delta>
Signups          <n>     <n>     <delta>
Top landing: <page>, <page>, <page>
Google search (<search_country> only)
                 Last    Prior   WoW
Clicks           <n>     <n>     <delta>
Clicks Mon–Fri   <n>     <n>     <delta>
Non-brand clicks <n>     <n>     <delta>
Impressions      <n>     <n>     <delta>
[code block ends]
What moved
- <numbers-first finding>
- <numbers-first finding>
- <numbers-first finding>
```

Replace the code-block markers with actual fences when posting. The draft DM contains this same report plus the one-line approval request; its source-specific cap is the report's under-40-line limit, rather than the four-line alert-DM cap used by other skills.

## Output rules

- Every action and bullet gets its own line. No sub-bullets or paragraphs.
- Numbers, not adjectives. No preamble or method.
- Do not include a master-doc link in this report. The two Notes lines are the only allowed notes; put material source limitations there and full details in Weekly results.
- Keep the Progress line and Non-brand clicks row. Write `brand_name` exactly.
- Whole report under 40 lines including the code block. Keep it actionable rather than expanding tables into explanations.

## Safety

- Read-only on every third party: never submit forms, send email/outreach, sign up, comment, vote or post on Reddit, X, LinkedIn or other social/community sites. Action text may ask the owner to review a draft or act manually.
- Never change tracker prompts, monitors, personas, models or schedules.
- Only writes: draft/reminder DMs to `owner` alone, the approved report-channel post, and scoped edits to Weekly results, Action tracker and covered Alert log status fields.
- Never publish without explicit owner approval. Never @-mention anyone in the channel. Never include credentials, tokens or passwords.

## Example configuration

How type.com configures this skill (example):

- Mondays 8am America/Los_Angeles; owner Sam; engineering owner Eng; drafting owner agent; report channel #b-aeo.
- Brand type.com; exclude type.ai; non-brand search excludes type.com, type com, typecom, type .com and misspellings. US-only search removes the observed Habr/Yandex spam effect.
- Engines: Claude Code, ChatGPT search, Google AI Mode and Codex. The October 2026 Codex start date is October 26.
- The question set changed October 19 and technical-buyer persona stacking started October 20. October 19–25 is a new baseline; show “new” for affected comparisons. Cohort example: tech-buyer-oct19.
- Historic Progress comparison: ChatGPT named type.com in 0–1% of answers before October 14, 2026.
- Dry-run learning: the connected domain property was unverified, so the URL-prefix property worked but excluded docs; GA4 had no sign_up event, so key events supplied the signup metric.
