When the user wants to research keywords for a local business, find local search opportunities, build a keyword map for location pages, or understand local search intent.
Library skill — the default version is maintained in GitHub; edits you make live in your own clone.
Default data tool: LocalSEOData (
localseodata-tool). Usekeyword_opportunitiesfor business-specific keyword ideas,keyword_suggestionsfor seed keyword expansion,search_volumefor volume data,keyword_trendsfor seasonality,keywords_for_sitefor current rankings. For advanced gap analysis, use Semrush.
You are an expert in keyword research for local businesses. Your goal is to build comprehensive keyword strategies that capture local search demand across services, locations, and intent types — driving both map pack and organic local rankings.
Local keyword research isn't just "regular keyword research + city names." It has unique dynamics:
The primary services the business offers, without location modifiers.
Examples:
- plumber
- emergency plumbing
- drain cleaning
- water heater repair
- sewer line replacement
These carry implicit local intent — Google shows local results without a city name.
Service + specific location.
Formats:
- [service] [city] — plumber buffalo
- [service] in [city] — plumber in buffalo
- [service] [city] [state] — plumber buffalo ny
- [service] [neighborhood] — plumber elmwood village
- [service] [county] — plumber erie county
- [service] [zip] — plumber 14075 (less common but real)
Location-less queries with explicit local intent.
plumber near meemergency plumber near mebest plumber near me24 hour plumber near meImportant: "Near me" queries are determined by the searcher's device location, not by your content. You can't "optimize for near me" with on-page content — you optimize by having strong GBP presence, reviews, and proximity.
What the customer is experiencing, not what the business calls its service.
pipe burst (they don't search "pipe repair")furnace not turning on (not "furnace repair")tooth pain (not "endodontics")water in basement (not "basement waterproofing")These often have high urgency and conversion rates.
Modifiers that signal specific intent.
Urgency: emergency, 24 hour, same day, immediate Cost: cheap, affordable, cost, pricing, free estimate Quality: best, top rated, licensed, certified, experienced Comparison: vs, alternative, reviews, near [competitor]
Long-tail queries from People Also Ask and autocomplete.
how much does a plumber cost in buffalodo I need a permit for a water heater in nyhow long does drain cleaning takeGood for content/FAQ but rarely drive direct conversions.
Many businesses offer proprietary or branded services that patients/customers search by name.
Healthcare examples: Discseel, Intracept, CoolSculpting, Invisalign, LASIK, Botox Home services examples: Rinnai (tankless water heaters), Mitsubishi (mini-splits), Generac (generators) Legal examples: specific legal programs or certifications by name
Why these matter: - Patients/customers often research the procedure first, then search "Discseel near me" or "Invisalign plattsburgh ny" - Very high intent — they already know what they want - Lower competition than generic terms ("pain management") - The manufacturer/brand often has its own "find a provider" directory — get listed there too
Searchers filtering by whether they can use/afford the service.
Healthcare: "[service] that accepts Medicaid," "[service] that takes Blue Cross," "workers comp pain management," "[specialty] accepting new patients" Legal: "free consultation personal injury," "contingency fee lawyer," "pro bono attorney" Home services: "licensed plumber," "insured roofing contractor," "financing available HVAC" General: "[service] that takes [payment method]"
These keywords have very high conversion intent — the searcher has already decided they need the service, they're checking if they can access it.
Businesses near national borders or in multilingual markets have a keyword category most competitors miss entirely.
Examples: - Plattsburgh, NY (1 hour from Montreal): "gestion de la douleur Plattsburgh," "dentiste Plattsburgh NY" - San Diego (near Tijuana): "dentist san diego," "[service] san diego desde mexico" - Miami: Spanish-language service keywords - Border towns, military bases near international borders, tourism destinations
Check: Does the business serve customers who search in another language? If yes, those keywords deserve their own category and potentially their own landing pages.
How people search when they're talking to an AI assistant (ChatGPT, Gemini, Perplexity, Google AI Mode/Overviews) instead of typing into a search box. This isn't a modifier on the other categories — it's a different query shape.
How they differ from typed keywords: - Full sentences, not fragments — "who's a good family lawyer near Amherst that handles custody" instead of "family lawyer amherst ny" - Multiple constraints in one utterance — a single AI prompt often folds service + geo + qualifier + insurance/qualification together: "a plumber in Buffalo that does emergency work and offers financing." The matrix combinations you'd track as separate keywords collapse into one natural question. - Context and follow-ups — the searcher may give backstory ("my basement flooded last night") or refine across turns, so intent is richer and more specific than a keyword string. - Recommendation-seeking — "best," "recommend," "who should I call" phrasings are far more common than in typed search, because people expect the model to choose.
How to find them: - Rewrite your top service + geo keywords as full questions a person would actually ask an assistant — several phrasings per need, since people ask the same thing many ways - Mine the problem/symptom (#4), qualifier (#5), and insurance/qualification (#8) categories into natural-language prompts — these are exactly the constraints people voice to an AI - Pull People Also Ask and autocomplete questions (from Step 2.5) as starting phrasings
A note on volume: AI query demand is emerging and hard to size — tooling is thin, and for hyperlocal terms measured demand is often near zero even where typed-search demand exists. Treat these as an intent category to cover, not a volume play. Don't ignore a natural-language query because a tool reports no volume; the demand signal for AI is directional at best today.
This category identifies the queries. For how to earn citation in AI answers once you know them, see ai-local-search.
Before touching any tool, gather:
Ask the business: "When someone calls you, what do they say they need?" That language is your keyword seed.
For each seed keyword, pull: - Search volume (monthly) - Keyword difficulty - SERP features (local pack? ads? AI overview?) - CPC (indicates commercial value even for organic) - Related keywords / suggestions
Tool options: - Semrush Keyword Magic Tool - Ahrefs Keywords Explorer - DataForSEO keyword data API - Google Keyword Planner (free, less precise on volume) - Google Autocomplete (free, real-time suggestions) - People Also Ask (free, question mining) - SERP API for live SERP feature detection
When you search for the client's primary keywords, the SERP results contain competitor intelligence:
This step is often skipped but it's free and produces the highest-quality keyword additions because it's based on actual search behavior, not tool estimates.
For local businesses, the keyword universe is a matrix:
Services × Locations × Modifiers = Keyword Universe
Example:
10 services × 25 cities × 3 modifiers = 750 keyword combinations
Don't create a page for every combination. Use the matrix to: - Identify which combinations have real volume - Decide which deserve dedicated pages vs. which are covered by broader pages - Find gaps where competitors have pages but you don't
Every keyword gets an intent tag:
| Intent | Example | Content Type |
|---|---|---|
| Emergency/urgent | "emergency plumber now" | GBP, dedicated emergency page |
| Transactional | "plumber buffalo ny" | Service + city landing page |
| Commercial investigation | "best plumber buffalo reviews" | Review/comparison content |
| Informational | "how to unclog drain" | Blog/FAQ content |
| Navigational | "[business name]" | Homepage, GBP |
Priority order for local businesses: Emergency > Transactional > Commercial > Informational
Each keyword (or keyword cluster) maps to a specific page:
| Keyword Cluster | Target Page | Page Type |
|---|---|---|
| plumber buffalo ny, plumber in buffalo, buffalo plumber | /plumber-buffalo-ny/ | Service + city |
| emergency plumber, 24 hour plumber, pipe burst | /emergency-plumbing/ | Service (urgent) |
| drain cleaning [cities] | /drain-cleaning/ | Service page |
| how much does plumbing cost | /blog/plumbing-cost-guide/ | Blog/FAQ |
Rules: - One primary keyword per page - Group related keywords that share SERP overlap onto the same page - Don't create thin pages for keywords with <10 monthly searches unless high conversion value - Every service page should target the service keyword AND 2-3 geo-modified variants
Know this going in: Keyword tools significantly undercount local search volume.
What to do about it: - Use Search Console data for existing pages as ground truth - Treat tool volume as directional, not absolute - Never ignore a keyword just because the tool says "0 volume" if the intent is real - CPC data is often a better signal of keyword value than volume
| Market Size | Service Keyword Volume | Geo-Modified Volume |
|---|---|---|
| Major metro (NYC, LA) | 5,000-50,000/mo | 500-5,000/mo |
| Mid-size city (Buffalo, Tampa) | 1,000-10,000/mo | 100-1,000/mo |
| Small city / suburb | 100-1,000/mo | 10-100/mo |
| Rural / small town | 10-100/mo | 0-10/mo |
Not all keywords produce the same SERP. Check what actually appears:
| SERP Feature | What It Means |
|---|---|
| Local pack (3-pack) | Implicit local intent — GBP optimization critical |
| LSAs at top | Pay-per-lead opportunity, high commercial intent |
| Ads in map pack | Local search ads opportunity |
| AI Overview / AI Mode | Query is answered by synthesis and citation, not ten blue links — the target shifts from ranking a page to being a cited source (see ai-local-search) |
| People Also Ask | FAQ content opportunity |
| Organic only (no local pack) | Informational intent, blog/guide content |
Run SERP checks for your top 20 keywords to understand what you're competing for. A keyword that triggers a local pack requires different optimization than one that shows only organic results.
Sometimes the best opportunities are keywords with decent volume but weak competition: - Check top 3 results for the keyword — are they homepage rankings? (weak) - Are the ranking pages thin or outdated? (opportunity) - Is the keyword a newer phrasing that hasn't been targeted yet?
For businesses with multiple locations, the research scales differently:
The final deliverable is a keyword map document:
| Keyword | Volume | KD | Intent | Target Page | Status | Priority |
|---|---|---|---|---|---|---|
| plumber buffalo ny | 720 | 35 | Transactional | /plumber-buffalo-ny/ | Exists | High |
| emergency plumber | 480 | 42 | Emergency | /emergency-plumbing/ | Needs creation | High |
| drain cleaning buffalo | 210 | 28 | Transactional | /drain-cleaning-buffalo/ | Exists | Medium |
| how much does plumber cost | 590 | 22 | Informational | /blog/plumbing-costs/ | Needs creation | Medium |
| water heater repair near me | 880 | 38 | Transactional | /water-heater-repair/ | Needs update | High |
Status options: Exists (optimized), Exists (needs update), Needs creation, Low priority
| What You Found | Next Action | Skill |
|---|---|---|
| Keywords identified, need pages for them | Create location and service pages targeting the keyword map | local-landing-pages |
| Found keyword gaps vs. competitors | Deep-dive competitive analysis on those gaps | local-competitor-analysis |
| Keywords have high CPC, worth running ads | Build PPC campaigns targeting high-value keywords | local-ppc-ads |
| Keywords trigger LSA results | Ensure LSA profile is set up for those service categories | lsa-ads |
| Keywords trigger AI Overviews | Optimize content for AI citation | ai-local-search |
| Need to know current rankings for these keywords | Run geogrid scans per keyword | geogrid-analysis |
| Keywords done, need full audit context | Feed keyword map into the audit framework | local-seo-audit |
Default next step: Keyword research without page creation is wasted effort. Map keywords → pages → publish → scan rankings.
This skill requires data from external tools. See docs/tool-routing to pick based on what's connected.