{"id":92137,"plugin_id":"plugin_asdk_app_6ac9cf9ff06c819192f0e26259430a1d","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-11-12T00:09:22.419Z","digest":"2a600a866ed5b2d217296ee2336dd4b2ca836c844598d05ec42e3afe78a68449","against":null,"payload":{"description":"Researches keywords for a client using Google Ads planning data (volumes, competition, bid ranges) joined with what the site already ranks for in Search Console. Use when onboarding a client, planning new service pages, building a campaign, or asked \"what should we target\", \"keyword ideas for X\", \"what are people searching for\". Produces a prioritised keyword map by page. Requires the Google Ads tools on the Agency Autopilot connector.","included_files":[],"name":"keyword-research","skill_md_contents":"---\nname: keyword-research\ndescription: Researches keywords for a client using Google Ads planning data (volumes, competition, bid ranges) joined with what the site already ranks for in Search Console. Use when onboarding a client, planning new service pages, building a campaign, or asked \"what should we target\", \"keyword ideas for X\", \"what are people searching for\". Produces a prioritised keyword map by page. Requires the Google Ads tools on the Agency Autopilot connector.\n---\n\n# Keyword research\n\n## Inputs to establish first\n- The client (`list_clients`), its Google Ads account (`ads_list_accounts` → `customer_id`), and its Search Console site if linked.\n- The service area: `ads_find_locations` for the city or county the client serves; keep the geo target ID.\n- Seeds: the client's services in the words a customer would use (\"cedar fence installation\", \"deck builder\"), and the client's site URL.\n\n## Pull\n1. `ads_keyword_ideas` with `seeds`, `url` and `geo_target_ids`. Volumes are Google Search only, the same as Keyword Planner shows the client; add `network: GOOGLE_SEARCH_AND_PARTNERS` only if asked. The result is `ideas` sorted by volume plus `total_ideas`; the default `limit` is 100, so raise it (up to 1000) when the total is higher and the brief needs the long tail. Keep: keyword, monthly volume, competition, top-of-page bid range.\n2. If Search Console is linked: `gsc_query` (last 90 days, dimension `query`, row_limit 1000) to see what the site already earns impressions for.\n3. Join the two lists on the keyword text. Mark each keyword: **already ranking (position and clicks)**, **ranking but weak (position > 10)**, or **new**.\n\n## Prioritise\nScore = intent × volume × winnability.\n- Intent: \"near me\", \"cost\", \"installers\", \"company\", city names → high. \"how to\", \"DIY\", \"ideas\" → informational (blog only, or negatives for ads).\n- Winnability: existing impressions and a page that already matches beat brand-new terms.\n- Local: prefer the geo-scoped volume over national numbers.\n\n## Output\nA keyword map, one row per target: keyword · monthly volume · competition · bid range · current position (or \"new\") · **page that should own it** (existing URL or \"new page: <title>\") · priority (1–3).\nThen:\n- Three to five **page briefs** for the top new pages: working title, primary keyword, 3–5 secondaries, questions to answer.\n- A **negative list** for paid search: informational and DIY terms found along the way.\n\n## Rules\n- Volumes are estimates; say so once, then stop hedging.\n- Never invent a keyword's volume. If `ads_keyword_ideas` returns nothing for a seed, report that and try broader seeds.\n- Hand page briefs to `seo-content`; hand the negatives to `google-ads-manager`.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}