branded-split
Skill0 starsChanged 21 days agoMITView on GitHub
Split a Search Console property's performance into branded and non-branded search with the GSC Wizard MCP tools: totals, branded click share, the daily trend and the top queries per side from get_branded_performance, the brand filter status from get_filter_options, brand variants missing from the saved list spotted with query_top_queries, and the saved branded keywords created or extended with update_site after confirmation, anchored on get_site_summary. Use when the user asks "how much of my traffic is branded", "brand vs non-brand", "is my growth just brand demand or real SEO", "set up or fix my branded keywords", or wants the non-branded trend for a client report.
In this repository33 other files it gives its agents.
- ai-assistant-trafficSkill
- anomaly-checkSkill
- bing-crawl-healthSkill
- bing-performanceSkill
- cannibalizationSkill
- client-reportSkill
- content-decaySkill
- content-groupsSkill
- core-web-vitalsSkill
- country-deviceSkill
- ctr-optimizationSkill
- experiment-resultsSkill
- ga4-overviewSkill
- indexing-healthSkill
- indexing-trackerSkill
- indexnow-submitSkill
- long-tail-analysisSkill
- merchant-center-healthSkill
- onpage-auditSkill
- page-deep-diveSkill
- portfolio-overviewSkill
- property-setupSkill
- query-deep-diveSkill
- quick-winsSkill
- ranking-changesSkill
- shopping-performanceSkill
- site-auditSkill
- sitemap-auditSkill
- site-migrationSkill
- traffic-dropSkill
- traffic-forecastSkill
- weekly-reportSkill
- yandex-performanceSkill
The file
We split this skill into the rules it gives an agent
11 rules. About 0 are common, 3 are distinctive, and 8 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
Resolve the property: If the user's request or the conversation names a property, use it.
- Very specific: line 14
Anchor and windows: Call get_site_summary with days: 28, or with startDate/endDate when the user gave dates.
- Very specific: line 15
Read current, previous and deltas, and keep range.startDate/range.endDate and comparison.startDate/comparison.endDate: the split tool only …
- Very specific: line 18
Is a brand filter defined?: Call get_filter_options with siteUrl.
- Very specific: line 19
Read brand.configured, brand.keywordCount and brand.skippedKeywords (saved keywords the filter could not compile).
- Very specific: line 20
When brand.configured is false, or the response carries emptyBecause, no branded keywords are saved: go to step 5 to propose a list before …
- Very specific: line 22
The split: Call get_branded_performance with siteUrl, startDate/endDate set to the current window, comparisonStartDate/comparisonEndDate …
- Very specific: line 23
If it answers notConfigured: true, read reason: no_branded_keywords means none are saved (step 5), and no_usable_keywords means none of the …
- Distinctive: line 29
When no keywords are saved yet, propose a starter list from this scan: the brand name, its common misspellings, the domain without its …
- Distinctive: line 33
ALWAYS list the exact keywords and ask the user to confirm before calling.
- Distinctive: line 48
Do not fabricate rows the tools did not return.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Branded versus Non-branded Split
Measure how much of one property's search traffic is brand demand and how much is non-branded SEO, how each side is trending, and what share of the period's growth each side explains. The user's request may contain a property (a GSC site URL or a recognizable name), a date range, the brand name or a list of brand terms to save, or a focus such as "non-branded only for the client report".
Workflow
- Resolve the property. If the user's request or the conversation names a property, use it. Site URLs use GSC formats:
sc-domain:example.comorhttps://www.example.com/. Otherwise calllist_sitesand pick the obvious match. If several plausible properties exist, ask the user which one before continuing. - Anchor and windows. Call
get_site_summarywithdays: 28, or withstartDate/endDatewhen the user gave dates. Use the last 28 days compared with the previous period unless the user specifies dates.- Read
current,previousanddeltas, and keeprange.startDate/range.endDateandcomparison.startDate/comparison.endDate: the split tool only compares periods when both comparison dates are passed, so these four dates are what keep its comparison aligned with the anchor. - GSC data lags about 2 to 3 days: never treat the most recent 2 days as complete, and if a dip appears at the very edge of the range, say it is likely reporting lag, not a real drop.
- Read
- Is a brand filter defined? Call
get_filter_optionswithsiteUrl. This call reads configuration only and fetches no Search Console data.- Read
brand.configured,brand.keywordCountandbrand.skippedKeywords(saved keywords the filter could not compile). - When
brand.configuredis false, or the response carriesemptyBecause, no branded keywords are saved: go to step 5 to propose a list before running the split, and say the split cannot run until it is saved.
- Read
- The split. Call
get_branded_performancewithsiteUrl,startDate/endDateset to the current window,comparisonStartDate/comparisonEndDateset to the comparison window (both are required for a comparison; omitting them gives no baseline), andlimit: 25.- If it answers
notConfigured: true, readreason:no_branded_keywordsmeans none are saved (step 5), andno_usable_keywordsmeans none of the saved ones compile;savedKeywordslists the stored keywords verbatim andhintsays what to fix. - Otherwise read
branded,nonBrandedandtotal(eachclicks,impressions,ctron 0-100,position),brandedClickShare(0-100),anonymized(the part ofnonBrandedwith no query row),daily[](date,brandedClicks,nonBrandedClicks,brandedShare, oldest first),topBrandedQueriesandtopNonBrandedQueries(query,clicks,impressions,ctr,position),previous(branded,nonBranded,total,brandedClickSharefor the comparison window),brandedKeywords(total,used,skipped) andsavedKeywords. - Two caveats the tool states:
nonBrandedis the property total minusbranded, so the two sides always add up tototal; and Search Console leaves anonymised queries out of any query-filtered read, so those rare queries land innonBranded,brandedClickShareis a floor, andcoverage.hiddenClicksShare(0-1) is the share of clicks no query row carries.emptyBecausemeans the window holds no traffic at all, not that nothing is branded.
- If it answers
- Brand variants missing from the saved list. Scan
topNonBrandedQueriesfor the brand name misspelled, split or concatenated, the domain name, product or model names only this brand uses, and "brand + login/pricing/reviews" phrasings; each is a variant the saved list misses.- Then call
query_top_querieswithbrand: "non_branded"andlimit: 500(thebrandscope needs saved keywords and a paid plan; without either, call it unscoped withlimit: 500) and scan again. Page withoffsetset topagination.nextOffsetonly if the first page is dominated by brand terms. - When no keywords are saved yet, propose a starter list from this scan: the brand name, its common misspellings, the domain without its extension, and product names unique to the brand.
- Keep generic words out of the list. A keyword is a case-insensitive substring, so "pro" or "shop" would swallow non-branded queries; a term wrapped in slashes like
/acme ?corp/is a regex (RE2 syntax, no lookahead or backreferences,\bsupported), so/\bpro\b/matches the word on its own.
- Then call
- Save or extend the keywords (write step).
update_sitewithbrandedKeywordsreplaces the stored list wholesale, so the list to send issavedKeywordsfrom step 4 plus the additions, never the additions alone.- ALWAYS list the exact keywords and ask the user to confirm before calling. Explain that the call changes the property's saved branded keywords in GSC Wizard (the web app's reports and this split read the same list) and changes nothing in Search Console.
- Then call
update_sitewithsiteUrlandbrandedKeywords(strings of at least 1 character, at most 500 entries); the response echoessite.brandedKeywords. A keyword the filter could never use makes the call fail with nothing saved and the message names it; fix it and resend. - This step needs write access, and on a property shared with the user it needs full access. If it is refused because the connection is read-only, say that this step needs write access and continue with the read-only parts. After a successful save, re-run step 4 so the split reflects the new list.
- Trend and growth attribution. From
daily[], comparebrandedShareover the first 7 days with the last 7 days, and name any day where either side moved sharply (deploys, campaigns and PR spikes show up as branded jumps).- Derive, and say you derived, from
get_branded_performance: the branded delta (branded.clicksminusprevious.branded.clicks), the non-branded delta (nonBranded.clicksminusprevious.nonBranded.clicks), the total delta, and each side's share of the total delta when the total moved in one direction. When the two sides moved in opposite directions, report both deltas and say the split cannot be expressed as a share. - Growth carried mostly by brand is demand (campaigns, PR, seasonality), not SEO; growth carried by non-brand is SEO; a non-branded delta near zero while branded grows means the organic programme is not yet contributing.
- Cross-check the sum of the two sides against
deltas.clicksfromget_site_summaryand say so if the two disagree by more than rounding (the summary's window or scope then differs).
- Derive, and say you derived, from
Interpretation rules
ctrvalues are already percentages on a 0-100 scale, and so arebrandedClickShareand the dailybrandedShare. Never multiply them by 100.coverage.hiddenClicksShareis a 0-1 fraction, so multiply that one by 100 to present it.position: lower is better. A change toward a lower number is an improvement; never color it as a decline.- Judge by clicks and impressions at stake, not by percentage alone: a brand variant with 3 clicks is not worth a keyword entry unless it is a misspelling the list should cover anyway.
- Present every multi-row result as a compact markdown table (top rows only, typically 5 to 10); keep prose for interpretation, not for restating numbers.
- Do not fabricate rows the tools did not return. If a side has no top queries in the window, say so.
Output
Present, in this order:
- Anchor: one sentence with the window, the comparison window and the property's clicks, impressions, CTR and position with deltas (
get_site_summary). Split table (
get_branded_performance), followed by the branded click share now versus the prior window and the keyword count (usedoftotal, withskippednamed):Side Clicks Prior clicks Delta Impressions CTR Position Branded / Non-branded / of which anonymised / Total - Trend: branded share in the first and last week of the window, and any sharp day, from
daily[]. - Top queries per side: two tables (query, clicks, impressions, CTR, position) from
topBrandedQueriesandtopNonBrandedQueries, with the suspected brand variants in the non-branded table flagged. - Growth attribution: the derived deltas and shares from step 7, with the sentence that says whether the period's growth is brand demand or SEO.
- End with a short prioritized list of 3 to 7 concrete recommendations: the keywords to add (or the starter list to save), the non-branded queries and pages to grow when SEO is not yet contributing, branded queries with a weak CTR or position to protect (a competitor or a marketplace listing above the brand's own page), and whether the client report should carry the non-branded series alone.
Error handling
If any tool call fails with an authentication or subscription error, tell the user to run /mcp to (re)authenticate, and that a GSC Wizard account with an active plan or trial plus a connected Google Search Console account is required. If the property is not found, re-run list_sites and offer the closest matches instead of guessing a URL format. If a single tool fails for another reason, report the gap in the relevant section and complete the rest of the workflow with the remaining data.
Grounding
Every number you report must name the tool it came from and the date range it covers, for example "clicks 12,340 (get_site_summary, 2026-09-21 to 2026-09-27)". For a table, state the tool and date range once on the line above it. If you derive a figure yourself (a delta, a sum, a share), say so and name the tool outputs it was computed from. Never report a number no tool returned.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

