---
title: "Local SEO keyword research | SEO Skill"
description: "Find location-specific Search Console queries, landing pages and repeated local templates. Add a few exact local result snapshots only when needed."
canonical: "https://seoskill.dev/docs/reports/local-search-demand"
language: "en"
---

# Local SEO keyword research

Find the local searches already associated with the site and the pages receiving that demand. Start with first-party evidence, then add exact local results only where current intent, competitors or result features would change the decision.

## Install and run the report

Install the CLI once, then run `seo start` to connect your site and Google data. After setup you can run this report yourself or ask your agent to run it.

Install the SEO CLI globally.

```
npm i -g seo
```

Run setup after installation.

```
seo start
```

Find retained location-specific demand before requesting paid live results.

```
seo reports run local-search-demand --params '{"site":"sc-domain:example.com","locationTerms":["london","manchester"],"days":90}' --json
```

## What you get from this report

Find location-specific Search Console demand, landing pages, and repeated local page patterns, with optional live results for one exact search market.

Best for

You want owner-verified evidence for place names, nearby wording, or postal-code searches.

Needs

Connected Search Console property

You get

A limited local query queue with clicks, impressions, CTR, Search Console average position, matched local wording, action, and landing-page coverage.

Use next

Prioritise keyword opportunities

## What you need before you run it

This report uses finalized Search Console query and page rows from one bounded request. explicit location terms plus conservative nearby and postal-code heuristics, with every match retained. optional provider SERP snapshots for up to three retained queries in one canonical location and device.

### Connected Search Console property

Provides finalized query and landing-page rows for the selected dates, up to one explicit row limit.

### Location terms and evidence thresholds

Add the place names and aliases that matter to the site while bounding the minimum impressions and returned opportunities.

### Optional exact search market

Adds up to three paid live result snapshots for one canonical location, device, language, and search engine.

## How the report finds the opportunity

The report uses existing search and page evidence to build a limited review list. An opportunity is a reason to inspect a page, not a promise of more traffic.

01

Filters malformed, conflicting, duplicate, low-actionability, non-local, brand, and below-threshold rows with separate counts.

02

Classifies explicit named locations, nearby phrases, UK postcodes, and US ZIP codes with supporting local wording through a documented heuristic.

03

Aggregates retained queries and pages deterministically, then finds repeated URL shapes for programmatic template review.

04

Keeps exact local snapshots optional and bounded, with their market, timestamp, features, cache, coverage, task state, and cost attached.

## Check the evidence behind each opportunity

Start with the query, page and date range behind each suggestion. Thin or partial evidence belongs in the review pile, not the implementation queue.

| Read first | Why it matters |
| --- | --- |
| Result | A limited local query queue with clicks, impressions, CTR, Search Console average position, matched local wording, action, and landing-page coverage. |
| More detail | Repeated local page patterns, source completeness, filtered-row counts, omitted-result counts, warnings, caveats, and precise next steps. |
| Read it with | Start with the first-party queries and pages. Use their action labels to protect existing visibility, improve a relevant page, investigate fit, or review page overlap. |

## What the result cannot prove

A place in the query does not prove the searcher's location, and a query without local wording can still have local intent. Search Console position is averaged across impressions. A live result is one query, location, device, language, and observation time. An observed local pack does not show whether the site or a particular business listing appeared in it.

Start with the first-party queries and pages. Use their action labels to protect existing visibility, improve a relevant page, investigate fit, or review page overlap. Request paid snapshots only for a shortlist where current result format, intent, competitors, or exact rank would alter the next step. Run exact local results for no more than three decision-critical queries when live context is needed.

## Use a different report for these jobs

You need Google Business Profile performance, Maps listing details, reviews, calls, or directions. You plan to infer a searcher's physical location from query wording alone.

[

### You need all first-party keyword opportunities, including searches without explicit local wording.

Run keyword opportunities first, then use this report to isolate the retained searches whose wording supports local intent.

Keyword opportunity report

](https://seoskill.dev/docs/reports/keyword-opportunities)[

### You need one exact result page for a query you already chose.

Run SERP results directly with the required canonical location and device instead of scanning Search Console demand first.

Live SERP results report

](https://seoskill.dev/docs/reports/serp-results)

### You need listing performance, review data, calls, directions, or complete Maps results.

Use the relevant business-profile or maps-listing source. This report does not connect to those datasets.

Needs more evidence

## Use the report with an agent or in code

The command above is enough for most work. These options let an agent, script or application run the same report with explicit input and structured output.

### CLI

Use the report catalog when an agent, script or CI job needs predictable JSON instead of the normal terminal output. Check the current input first, then run the report with the validated parameters.

Check the current input before the agent or script runs the report.

```
seo reports describe local-search-demand --json
```

Once the input is valid, run the report through the report catalog.

```
seo reports run local-search-demand --params '{"site":"sc-domain:example.com","locationTerms":["london","manchester"],"days":90,"minImpressions":10,"limit":25}' --json
```

### MCP

An MCP agent follows the same two-step flow. It inspects the current schema, fills the required fields and only then runs the report.

Ask the MCP server for the current report input.

```
{
  "id": "local-search-demand"
}
```

Run the report after the agent has checked and filled the input.

```
{
  "id": "local-search-demand",
  "params": {
    "site": "sc-domain:example.com",
    "locationTerms": [
      "london",
      "manchester"
    ],
    "days": 90,
    "minImpressions": 10,
    "limit": 25
  }
}
```

### TypeScript

Install the package in a Node 22 project when your application needs to run the report directly. The result includes the same evidence, warnings and limits returned through the CLI and MCP server.

Add the SEO package to your project.

```
npm install seo
```

Run the report from your TypeScript application.

```
import { executeReport } from 'seo/mcp'

const result = await executeReport(
  'local-search-demand',
  {
  "site": "sc-domain:example.com",
  "locationTerms": [
    "london",
    "manchester"
  ],
  "days": 90,
  "minImpressions": 10,
  "limit": 25
},
)

console.log(result)
```

## What to do next

Start with the retained local queries and their landing pages. Inspect repeated page families before expanding them, and request exact local results only for the few terms whose current intent, competitors or result features would change the work.

1.  01Inspect the leading query-page pairs and representative pages from repeated templates.
2.  02Add the real place names and aliases used in the market when the automatic patterns are too narrow.
3.  03Run exact local results for no more than three decision-critical queries when live context is needed.

## Related reports

[

Build one bounded queue from existing Search Console opportunities, then optionally add market estimates without changing the first-party priority scores.

Keyword opportunity report

](https://seoskill.dev/docs/reports/keyword-opportunities)[

Extend observed template and query-cluster evidence with optional keyword discovery, live results, competitor patterns, costs, and data-source checks.

Programmatic SEO opportunities

](https://seoskill.dev/docs/reports/pseo-opportunities)[

Inspect one bounded search snapshot with exact retained organic ranks, market context, result features, provider coverage, cache status, and request cost.

Live SERP results report

](https://seoskill.dev/docs/reports/serp-results)[

Collect exact organic positions for a saved keyword set, then compare compatible local snapshots with coverage, task state, and cost kept visible.

Keyword rank tracking report

](https://seoskill.dev/docs/reports/rank-tracking)

## Sources used by this report

These primary sources define the provider data or search controls used by the result.

-   [Search Console Search Analytics API guidance](https://developers.google.com/webmaster-tools/v1/how-tos/search_analytics)
-   [DataForSEO live Google SERP API reference](https://docs.dataforseo.com/v3/serp-google-organic-live-advanced/)
