DEV Community

Cover image for Measure competitor overlap against the query scopes you actually observed
Tim Zinin
Tim Zinin

Posted on

Measure competitor overlap against the query scopes you actually observed

A domain that appears in half a keyword export has achieved half of something: coverage of that observed sample. The result becomes misleading when the denominator disappears and the ratio is presented as search market share. A useful competitive set keeps the query scope and collection limits beside every coverage claim.

SERP Competitor Overlap Analyzer processes an existing search-results batch. It produces domain assessments with observed keyword coverage, page-one rank evidence and source URLs. Collection happens upstream; the transformation organizes the sample that the team already owns.

Keep query context in the input

This example is a shortened projection of an installed public historical snapshot. It preserves the query scope and a bounded subset of its organic results for a small inspection. It is not a newly fetched ranking report, and its shortened result set is not a complete view of the original query.

{
  "items": [
    {
      "searchQuery": {
        "term": "website performance audit",
        "url": "http://www.google.com/search?q=website+performance+audit&hl=en",
        "device": "DESKTOP",
        "page": 1,
        "type": "SEARCH",
        "domain": "google.com",
        "countryCode": "US",
        "languageCode": "en",
        "locationUule": null,
        "resultsPerPage": 10
      },
      "organicResults": [
        {
          "title": "PageSpeed Insights",
          "url": "https://pagespeed.web.dev/",
          "position": 1,
          "description": "Make your web pages fast on all devices. Check out. What's new · Documentation · Learn about Web Performance.Read more"
        },
        {
          "title": "Complete Website Performance Audit Checklist",
          "url": "https://dev.to/digitalunicon/complete-website-performance-audit-checklist-2fi",
          "position": 2,
          "description": "A. Page Speed Audit · Measure Load Time · Reduce Render-Blocking Resources · Optimize Above-the-Fold Content · Minify CSS & JavaScript. Compress ...Read more"
        }
      ]
    }
  ],
  "maxInputRows": 100,
  "maxResults": 10
}
Enter fullscreen mode Exit fullscreen mode

The scope includes more than the search term. Country, device, language and location can distinguish observations that should not be merged as equivalent searches. Pages of the same scope are combined, while different scopes remain separate in the denominator.

Preserve empty observations

totalObservedQueries includes valid query scopes with empty organic results. That matters because excluding empty pages would inflate every domain's apparent share of the sample. A valid empty observation is different from a failed source row whose content was never observed.

Store keywordCoverageCount and totalObservedQueries together. A ratio alone cannot explain whether the domain appeared across one of two queries or fifty of a hundred. Both have the same fraction while supporting very different research confidence.

Keep page-relative positions in their place

An organic result's position on page two is not automatically a global rank. The installed weighted rank uses only verified page-one evidence. A later-page appearance can contribute to observed coverage while leaving the page-one rank fields unavailable.

weightedRank sums reciprocal verified page-one positions across supported query scopes. Preserve that definition in any report that uses the field. It is an internal comparison measure for the collected sample, not a traffic forecast or a substitute for search volume.

Preserve hostnames rather than guessing company groups

The transformation normalizes hostnames without reducing every domain to its last two labels. That avoids treating arbitrary suffix patterns as a corporate identity rule. If a report needs several subdomains grouped into one company, define that mapping explicitly and retain the original domain evidence.

Review the bounded keyword and URL lists with their counts and partial flags. A truncated display list can still represent a larger measured set, so export the counts as separate fields. Keep source row indices so a reviewer can inspect a surprising competitor against the saved batch.

For a recurring workflow, store each accepted batch with its query roster and capture context. Compare like scopes before describing a change as a competitive movement. A new country mix or a narrower query set can alter overlap without any underlying ranking change. The resulting report is useful because it explains both the observed competitive set and the exact sample that produced it.

Price and verification scope

Listing pricing read on 23 October 2026 is $0.02 per result-found event on the FREE tier. The documented unit is: One useful competitor assessment delivered with source evidence and a recommended next step. Source errors, invalid rows and budget diagnostics request no result event. Other platform tiers have their own rates. This pricing record has no separate start event. A usable result from an illustrative input can still be billable; inspect the applicable listing and run spending limit before executing it. maxResults is an output cap, separate from the platform's Max total charge option.

This article uses the installed source contract from build 0.1.2 (SxS5l7nepgE5f3HyW). The example is a shortened historical source projection, with local pure-transform validation only. No new Apify cloud build or run was started for this article. Local output does not establish cloud delivery, customer acceptance or commercial results.

Inspect the Actor's current input and pricing.

AI-assisted draft; independent technical and cover review is required before publication.

Top comments (0)