How to Compare Competitor Ranking Screenshots for Indian Ecommerce Keywords
Compare Indian ecommerce search screenshots fairly by matching query, location, language, device, result type, and capture time.
To compare competitor ranking screenshots for Indian ecommerce keywords, capture the same exact query in the same search engine, search type, location, language, device class, and personalization state, then compare the same result type. Record the timestamp and the exact ranking URL. A screenshot is evidence of what appeared in one search context at one time; by itself, it does not prove a permanent ranking or a change in rank.
Google explains that results can vary with time, location, language, device, and personalization. Its Search Console documentation also notes that results are specific to the searcher’s time, place, device, and recent history. Keep those settings with each capture so a changed context is not mistaken for a competitor movement. See Google’s explanation of why results differ and Search Console’s Performance report documentation.
1. Define what you are comparing
Start with a comparison record, not a screenshot. Decide what “rank” means for this task and write it down. Organic web rank, a Shopping ad position, a free product listing, and a local result are different observations. Do not combine them into one number.
- Query: preserve the exact spelling, script, transliteration, and wording entered. Treat English, Hindi, and Hinglish variants as separate observations. For example, a Romanized Hindi query and its Devanagari form are different query records.
- Search engine and search type: identify the engine and whether the capture is ordinary web search, Shopping, image search, or another search experience.
- Location: specify India at country level or name a city, such as Mumbai or Bengaluru. Country-level and city-level checks answer different questions; keep each as a separate comparison slice.
- Language: preserve the language setting and the query’s language or script.
- Device class: use desktop or mobile consistently. Record viewport dimensions if your capture method depends on them.
- Personalization: use a consistent signed-in or signed-out state where feasible, and note it. Private browsing does not by itself guarantee identical results or eliminate every contextual difference.
- Time: record the capture date, time, and time zone. Two captures made hours apart can differ.
A practical comparison key is engine + search type + exact query + location + language + device + personalization state. Compare rankings only when that key matches. If any element differs, label the screenshots as different contexts rather than treating them as a before-and-after ranking change.
2. Capture and label screenshots consistently
- Choose the query and save it exactly as entered, including its script and spelling.
- Set the same engine, search type, location, language, and device class for each capture. If you need both India-wide and city-level visibility, create separate records for each.
- Capture the results page at a consistent viewport and record the timestamp. Keep the original screenshot with its settings and notes.
- For each relevant competitor, record its domain, exact landing-page URL, visible title, snippet, and result type.
- Number results within the result type you chose. For example, say “organic web result 3,” not simply “position 3,” if ads and product blocks also appear above it.
- Repeat captures on a consistent schedule before describing a trend. Keep each dated observation rather than overwriting the previous one.
Keep a capture manifest alongside the files. This sample JSON is a record format, not a claim that a particular capture tool supports every field:
{
"engine": "Google",
"search_type": "web",
"query_exact": "cotton kurta online",
"query_script": "Latin",
"country": "India",
"city": null,
"language": "English",
"device_class": "desktop",
"viewport": "1440x1000",
"personalization_state": "signed out; state recorded, not guaranteed neutral",
"captured_at": "2026-10-04T10:30:00Z",
"result_type_measured": "organic web listings",
"screenshot_file": "google-in-cotton-kurta-online-2026-10-04.png"
}
3. Compare the same result types and fields
Separate web listings from sponsored ads, Shopping ads, free product listings, local or map results, featured snippets, and other visible search features. A product block can change the prominence and screen position of ordinary listings without changing their organic order. Merchant Center’s competitor analytics also treats Shopping ads and organic or free listings as distinct traffic types. See Google Merchant Center’s product analytics documentation.
| Field | What to record | Why it matters |
|---|---|---|
| Result type | Organic web, Shopping ad, free listing, local result, or named SERP feature | Prevents unlike placements from being ranked together |
| Rank | Ordinal rank within that result type, with the counting rule | Makes “position” interpretable |
| Merchant and domain | Visible merchant name and destination domain | Distinguishes marketplace pages, merchant stores, and alternate domains |
| Exact ranking URL | Full destination URL where visible or available | A merchant can rank with a category, product, or editorial page; the domain alone hides that change |
| Title and snippet | Visible text as displayed | Helps distinguish changed pages and search presentation |
| SERP features | Ads, product grids, snippets, local results, or other prominent blocks | Explains changes in visibility that a blue-link rank alone misses |
When comparing multiple competitors, compare (1) organic rank and exact URL for the same query and context, (2) result type and SERP features, (3) country or city and language coverage, (4) repeated visibility across consistent dates, and (5) for product placements, ads versus free listings and page overlap where suitable data is available.
4. A repeatable screenshot workflow with Python and Playwright
The following script opens a supplied search-results URL in a desktop Chromium browser and saves a full-page screenshot. It is a capture starting point, not a ranking API: it does not set a verified Google city location, guarantee a language or personalization state, bypass bot checks, or turn a screenshot into structured rank data. Search pages may show consent screens, block automation, or change layout. Use a search provider’s permitted interface and applicable terms; do not use this script to evade access controls.
Install the browser automation package and browser first:
python -m pip install playwright
python -m playwright install chromium
Save this as capture_serp.py:
import asyncio
import os
from datetime import datetime, timezone
from pathlib import Path
from playwright.async_api import async_playwright
async def main():
search_url = os.environ["SEARCH_URL"]
output = Path(os.environ.get("OUTPUT", "serp.png"))
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True)
page = await browser.new_page(
viewport={"width": 1440, "height": 1000},
device_scale_factor=1,
)
response = await page.goto(
search_url,
wait_until="domcontentloaded",
timeout=60000,
)
# This waits for the document to settle briefly; it does not prove
# that every search result or lazy element has finished loading.
await page.wait_for_timeout(1500)
await page.screenshot(path=str(output), full_page=True)
print({
"file": str(output),
"http_status": response.status if response else None,
"final_url": page.url,
"captured_at_utc": datetime.now(timezone.utc).isoformat(),
"viewport": "1440x1000",
})
await browser.close()
asyncio.run(main())
Run it with a URL you are allowed to access:
SEARCH_URL='https://www.google.com/search?q=cotton+kurta+online' OUTPUT='serp.png' python capture_serp.py
The example URL does not establish an India city, language, device search context, or neutral personalization state. Record the actual context separately and verify the location shown by the search experience. Avoid adding undocumented query parameters and assuming they reliably set those conditions. For production monitoring, prefer a provider that documents the locations, languages, search types, and result depth it supports.
5. Interpret movement without overstating it
One screenshot is one observation. A defensible statement is “Domain A appeared as organic web result 4 for this exact query in the recorded Mumbai desktop capture at this time.” A screenshot alone does not establish that the domain permanently ranks fourth in India, that every shopper sees the same page, or that a later difference was caused by an SEO change.
To make a trend claim, repeat the same observation unit over time. Look for repeated movement, and note when several competitors move together. If many domains shift at once, first check whether the query, location, device, capture method, result layout, or timestamp changed. Search results can also vary over time independently of your capture process.
6. Use first-party and product-visibility data for the right question
Search Console answers questions about your own site. Its Performance report can show clicks, impressions, CTR, and average position, with dimensions such as query, page, country, device, search appearance, and date. Google defines average position as the average position of your site’s topmost result in the relevant grouping. It is not a direct measurement of a competitor’s rank. Use it to contextualize your own query and country or device performance, not to validate a rival’s position. See the report overview and metric definitions.
Merchant Center can answer a different ecommerce question. When the concern is product exposure in Google Shopping or free listings, Merchant Center competitor analytics offers relative visibility, page overlap, higher position, and ads-versus-free-listings measures, with filters such as country, category, traffic, and time. Those product visibility measures are not ordinary organic blue-link rank. Google notes that competitor insights are unavailable for multi-client accounts. Consult Merchant Center help for the feature’s current scope and account conditions.
Rank trackers and SERP history tools can operationalize repeated checks. Vendors describe features such as historical snapshots, competitor charts, daily product-level tracking, keyword gaps, and India or city-level checks. Those are vendor claims, not independent validation. Before relying on a service, confirm that it supports your exact market, city, language, device, search type, and result depth. Save the settings used so the resulting series remains interpretable.
7. Troubleshooting common comparison problems
| Problem | Likely cause | What to do |
|---|---|---|
| The competitor’s rank differs between two screenshots | Query, city, time, device, language, personalization, or result type differs | Compare the capture manifests. Re-capture with matching settings before calling it movement. |
| A merchant appears lower on the screen but has the same organic rank | An ad, Shopping block, local result, or other feature occupies more space above it | Record the feature and calculate rank within the organic result type. |
| The English query and Hindi or transliterated query show different competitors | They are distinct queries and may return different results | Keep separate query records; do not merge their ranks into one observation. |
| Search Console average position does not match the screenshot | Search Console aggregates first-party performance over selected dates and dimensions; a screenshot captures one context and moment | Align query, country, device, date, and search type where possible, and treat the metrics as different evidence rather than expecting equality. |
| Browser automation saves a consent page, blank page, or challenge | The destination did not present normal results to that automated request, or navigation was blocked or incomplete | Do not count it as a ranking observation. Check the final URL and page, use an allowed access method, and record the failed capture. |
| Screenshot dimensions or content vary between runs | Viewport, device scale factor, dynamic content, wait condition, or page layout changed | Fix viewport and scale, record the timestamp, use a consistent wait strategy, and keep the full-page setting consistent. |
| A rank tracker has no India city or language option you need | The tool may not cover that location or setting | Do not label a country-level or different-language result as a city-level observation. Verify documented coverage or choose another method. |
8. Performance, reliability, and cost considerations
- Keep capture scope manageable. Full-page screenshots can be large, and capturing many keywords across several cities, languages, devices, and dates multiplies the work. Begin with the query-location-device slices that answer a real decision.
- Make runs repeatable. Store the exact query, capture settings, timestamp, source URL, and screenshot together. Use stable filenames or a manifest so a later review can reconstruct each observation.
- Handle failures as missing observations. A challenge page, timeout, blank result, or blocked request is not rank zero. Mark it as failed and retry under the same documented conditions when appropriate.
- Separate manual and automated evidence. Browser automation may not reproduce a normal user’s location, language, account state, or result experience. A screenshot is useful for inspection but does not replace a source that documents its SERP collection method.
- Budget by coverage. The main cost driver is the number of distinct queries, locations, device classes, languages, and capture dates. Avoid paying to collect duplicate contexts that cannot be compared or will not inform a decision.
- Respect access rules. Search pages and data providers can impose terms, rate limits, or access restrictions. Use permitted methods and documented APIs, and do not attempt to defeat bot checks or CAPTCHAs.
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server for developers. One GET request returns a screenshot; the available formats include PNG, JPEG, and WebP. Use it to capture a results URL you are authorized to access, then keep the query and context manifest described above. A screenshot API makes capture simpler, but it does not make search results identical across locations or prove a permanent rank.
cURL:
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://www.google.com/search?q=cotton+kurta+online -o shot.webp
Python:
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://www.google.com/search?q=cotton+kurta+online"}, timeout=90)
open("shot.webp", "wb").write(r.content)
Node.js:
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://www.google.com/search?q=cotton+kurta+online' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
await Bun.write('shot.webp', new Uint8Array(await res.arrayBuffer()));
See the ScreenshotNeo API documentation for request options. Cookie and consent banners are accepted and removed before capture, along with known newsletter popups and chat widgets; each cleanup step can be turned off. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, and response headers identify the page verdict and billing status. Its MCP server provides screenshot tools for AI agents. Plans include 1,000 screenshots a month free with no card; paid plans start at $5 for 3,000. ScreenshotNeo is one option for capturing pages; confirm that the results URL and search context meet your comparison needs.
Sign up for ScreenshotNeo’s free 1,000 screenshots a month, with no card required.
FAQ
Should I use one India-wide screenshot or separate city screenshots?
Use whichever scope matches the question. Keep country-level and named-city captures separate because they represent different search contexts.
Can I say a competitor improved its India ranking from two screenshots?
Only if the query, location, language, device, result type, and other recorded conditions match. Even then, two captures establish two observations; repeated measurements provide stronger evidence of a trend.
Does Search Console show where competitors rank?
No. It reports performance for your own site. Use a consistently configured SERP observation or an appropriate product visibility source for competitor analysis.
Are Shopping positions interchangeable with organic positions?
No. Label ads, free product listings, and organic web results separately. Use Merchant Center product visibility measures for the product listing question they address.
What is the minimum useful comparison record?
Save the exact query, engine and search type, location, language, device class, personalization state, timestamp, result type, competitor URL, and screenshot.


