The Monthly SEO Report in 4 Prompts
Search Console holds every number a client asks for and has no report button. These four prompts are the button. Connect Search Console to Mavek, fill one header block, paste the prompts one at a time, and download the report as a PDF. Works for any brand, any month.
The Steps
- Start a free trial at mavek.ai. Sign up and fill in your details. This takes about a minute and you only do it once.
- Connect Google Search Console. Open Integrations, choose Google Search Console, sign in with the Google account that owns the property, and select the site you want to report on. The site must be selected after connecting, not just authorised.
- Fill the header block once. Client name, domain, the two date ranges and the brand terms. Paste this block at the top of every prompt below.
- Run prompts 1, 2 and 3 one at a time in Mavek chat, in that order. Each one pulls a different cut of the same Search Console data. Wait for each answer before sending the next.
- Run prompt 4 to build the report. Mavek uses the three answers already in the conversation to produce an HTML file. Open it, check the numbers against what you saw in the earlier answers, then download it as a PDF and send it.
The Header Block
Fill this once per client per month. Every prompt below expects it at the top.
Client: <brand name>
Domain: <domain.com>
Range A (before): <YYYY-MM-DD> to <YYYY-MM-DD>
Range B (report month): <YYYY-MM-DD> to <YYYY-MM-DD>
Brand terms: <"brand", "brand with spaces", "common misspelling"> Three rules that decide whether the numbers mean anything:
- Range A is the same number of days immediately before Range B, fully before the work started. That pairing is what turns a number into a delta.
- Search Console lags two to three days. Use closed windows only. Never extend the end date to today or the last rows will be partial and the delta will read low.
- Brand terms include the misspellings. If people type your name wrong, those searches are still brand traffic and prompt 3 needs to know.
Every data prompt maps to the search_console_get_performance tool, which supports the query, page, country, device and date dimensions up to 1,000 rows. If Mavek reaches for search_console_get_top_queries or search_console_get_top_pages instead, steer it back by adding "use search_console_get_performance specifically" to the top of the prompt.
Prompt 1: The Headline Delta
Run this first. The report leads on it.
For the domain above in Search Console, pull totals for Range A and Range B and compare.
For each range give me total clicks, total impressions, average CTR and average position. Use search_console_get_performance with dimensions ["date"] and row_limit 1000, then sum clicks and impressions yourself and compute CTR as clicks/impressions. For average position, weight it by impressions rather than taking a plain average of the daily rows.
Output one markdown table: metric, Range A, Range B, absolute change, percent change. Then one line telling me which single metric moved most and by how much. Why weighted position: a plain average of daily positions lets a single low-impression day swing the number. Weighted by impressions is the honest figure, and it matches the number Search Console's own interface shows.
Prompt 2: Impressions by Page, to Attribute the Movement
For the domain above in Search Console, run search_console_get_performance twice with dimensions ["page"] and row_limit 1000, once for Range A and once for Range B.
Join the two on URL and give me a markdown table sorted by impression change descending: URL, impressions A, impressions B, change, clicks A, clicks B, avg position A, avg position B.
Include every URL that appears in either range, using 0 where a URL is absent from one. At the end, tell me how many distinct URLs got at least one impression in each range. The count of URLs earning impressions in each range is the cleanest proof of indexing work, and a fact the client can check themselves in their own Search Console.
Prompt 3: Queries, Split Brand vs Non-Brand
For the domain above in Search Console, Range B, run search_console_get_performance with dimensions ["query"] and row_limit 1000.
Split the results into two groups:
- BRAND: any query containing one of the brand terms above
- NON-BRAND: everything else
For each group give total clicks, total impressions and average position weighted by impressions. Then list the top 15 non-brand queries by impressions as a table: query, clicks, impressions, CTR, average position.
Also run the same query dimension for Range A and tell me the non-brand impression total for that range, so I can compare. Brand queries were always going to find the site. Non-brand impressions are the only number that shows the work reaching people who did not already know the brand. If non-brand is near zero, say so in the report rather than hide it.
Prompt 4: Build the Report
Send this in the same conversation, after the three answers above.
Hey Mavek, using the output of the last 3 prompts, can you please create an html file that I can download? I want this to be a SEO report which I can send to my client. Mavek returns an HTML file built from the three tables already in the chat. Open it, read the headline line and the brand split against the answers you already saw, then download it as a PDF. That is the report.
What Each Answer Feeds
| Prompt | Feeds |
|---|---|
| 1 | The single headline delta line the report opens with |
| 2 | The "pages earning impressions" count, the strongest proof of indexing work |
| 3 | The honest read on whether the work has reached non-brand demand yet |
| 4 | The report itself, as a downloadable HTML file you export to PDF |
If a Prompt Fails
- "No access token" or "No site URL saved": Search Console needs reconnecting in Integrations, and the site must be selected after connecting.
- Mavek picks the wrong tool (returns top queries when you asked for a date series): add "use search_console_get_performance specifically" to the top of the block and send it again.
- Any table comes back at exactly 1,000 rows: flag it. The totals are understated and the query needs paging before the numbers go in front of a client.
Frequently Asked Questions
How long does a monthly SEO report take with these prompts?
Around ten minutes once Search Console is connected. Filling the header block takes a minute, the three data prompts take a minute or two each to run, and the fourth prompt builds the HTML file. The first month takes a little longer because of the trial sign-up and the Search Console connection, both one-time steps.
Why compare against the month before instead of the same month last year?
Because the month immediately before is the last period the current work had not touched. That pairing is what turns a number into a delta you can attribute. Year-on-year is useful for seasonality, but it mixes twelve months of other changes into the comparison and makes it impossible to say what this month's work did.
Why is average position weighted by impressions?
A plain average of daily positions lets a single low-impression day swing the number. A page seen 5 times at position 40 should not count the same as a page seen 5,000 times at position 4. Weighting by impressions is the honest figure, and it matches how Search Console's own interface calculates it.
Why split brand and non-brand queries?
Brand queries were always going to find the site. Someone who types your company name was coming regardless of any SEO work. Non-brand impressions are the only number that shows the work reaching people who did not already know the brand. If non-brand is near zero, the report should say so rather than hide it inside a total that looks healthy.
Why do the prompts insist on closed date windows?
Search Console data lags by two to three days. If Range B ends today, the last rows are partial and the month reads low, which makes the delta look worse than it is. End every range at least three days before the day you run the prompts.
Can I use these prompts for more than one client?
Yes. The prompts do not change. Only the header block changes: client name, domain, the two date ranges and the brand terms. Run the same four prompts in each client's workspace and you get the same report structure for every account.
What if the report needs a different set of numbers?
Add a prompt. The three data prompts cover the headline delta, page-level movement and the brand split because those are the three questions a client asks first. If a client cares about a specific country or device, run the same search_console_get_performance call with dimensions ["country"] or ["device"] and paste the answer in before the build step.