SEO Service Area Visibility Checker
Pricing
from $5.00 / 1,000 results
SEO Service Area Visibility Checker
Check a target domain's Google SERP visibility across multiple cities and keywords. Returns per-(keyword,city) rank and top competitors, plus a summary visibility score.
Pricing
from $5.00 / 1,000 results
Rating
5.0
(10)
Developer
Crawler Bros
Actor stats
11
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Track a target domain's Google SERP rank across multiple keywords × cities. Emits one row per (keyword, city) pair plus a summary row with visibility score and top competitors.
What this actor extracts
Per (keyword, city) row (type="visibility_row"):
keyword,city,country,targetDomainrank(1-based;0if not in top N)inTopResults,resultCountserpRows(list of{rank, domain, title, url})scrapedAt
Summary row (type="visibility_summary", emitted once at end):
targetDomain,totalQueries,successfulQueries,failedQueries,rankedQueriesvisibilityScore(% — higher is better;sum(1/rank) / successful * 100)citiesCovered,citiesMissing(sorted lists)topCompetitors(top 10 domains by appearance count)scrapedAt
Input
| Field | Type | Description |
|---|---|---|
targetDomain | string | Domain to track (e.g. "example.com"). Required. |
keywords | string[] | List of service keywords (e.g. "plumber"). Required. |
cities | string[] | Service area cities. Required. |
country | enum | Google gl code (default us). |
language | enum | Google hl code (default en). |
maxResults | integer | Organic results per query (1-20, default 10). |
includeCompetitors | boolean | Include top competitors in summary row. |
How it works
For each (keyword, city) pair the actor:
- Builds a UULE-encoded Google Search URL with the city as location context.
- Fetches the SERP via
curl_cffi(Chrome TLS fingerprint) through a fresh Apify RESIDENTIAL proxy session. - Parses organic results from
div#rso > div.MjjYud/div.gwith BeautifulSoup. - Finds the target domain's rank (1-based) among organic results.
- Tracks competitors across all queries.
At the end it emits one summary row with the overall visibility score and city coverage.
- Hardcoded RESIDENTIAL proxy pool; country follows the
countryinput. - No cookies or login required.
- 1024 MB memory.
Limitations
- UULE coverage: Google respects UULE for most cities in supported countries. Small / ambiguous city names may fall back to the country-level SERP.
- Rate limits: Google rate-limits aggressively. Each query rotates proxy session.
- 20 results max: Google's
numparam caps at 20 results per page. - SERP shape drift: If Google changes its card CSS classes the parser may return zero results per query. Report a drift and we'll update.
FAQ
Do I need a Google API key? No — we scrape public HTML SERPs directly.
Does it respect robots.txt? Google's robots.txt disallows /search. This actor is for legitimate SEO tracking of your own domains.
How is visibilityScore calculated? sum(1/rank for each ranked query) / successfulQueries * 100. A domain ranked #1 on every query gets 100; #2 everywhere gets 50; not-ranked queries contribute 0.