How to Capture Google Search Screenshots for Real Estate SEO Competitors
Capture and label competitor Google results as dated visual evidence, compare like with like, and understand what screenshots can—and cannot—tell you.
To capture a Google search screenshot for a real estate SEO competitor, search the exact query in a browser, set the location, language, and device context you want to examine, then capture the results page. Save the original image with the query, timestamp and time zone, intended geography, language, viewport, and capture method. It is evidence of what appeared in that particular view—not proof of a competitor’s historical ranking, traffic, or clicks.
This guide covers a repeatable manual workflow, a runnable browser automation option, how to compare captures, the limits of Google Search Console, and how to preserve screenshots accurately.
1. Define the search you want to document
Start with the query a buyer, seller, or property owner might actually use. Real estate searches often combine a place with a property type, service, or intent. Examples include “homes for sale in Austin,” “condos for rent in Miami,” or “real estate agent in Denver.” These are examples, not prescribed keywords.
Before searching, write down the context you want to keep consistent:
- Exact query: Preserve spelling, punctuation, and wording.
- Intended location: Record the city, region, or other target geography. A browser search does not guarantee every user in that market sees the same results.
- Language: Record the language in which you want to inspect results.
- Device and viewport: Choose desktop or mobile and keep the viewport consistent in later captures.
- Purpose: Note whether you are looking at organic listings, local results, ads, snippets, or another visible feature.
Consistency matters: if the query, location, language, or viewport changes between captures, the images no longer isolate change over time.
2. Capture the Google results page manually
- Open Google Search in a browser configured for the audience context you want to study.
- Enter the exact query. Check that the search and its visible results match the intended language and geography as closely as your setup allows.
- Capture the page using the browser or operating system’s ordinary screenshot function. Include enough of the visible results to support the comparison.
- If you capture content below the viewport using a full-page capture, label it as a longer-page screenshot. Do not imply that all captured elements appeared together in a single viewport.
- Save the original image and add a note or filename containing the query and capture context.
Use an unaltered screenshot as the evidence record. Avoid changing Google’s interface or manufacturing, removing, or altering search suggestions or results. For intended publication, check Google’s current [Search screenshot guidance](https://about.google/brand-resource-center/products-and-services/), including its requirements concerning the medium, third-party content, and the Google Search trademark tagline.
3. Build a repeatable evidence record
A screenshot without context is hard to compare or interpret later. Keep a sidecar note, spreadsheet row, or capture log with every image.
| Field | What to record |
|---|---|
| Query | Exact search text entered. |
| Captured at | Date, time, and time zone. |
| Target context | Intended location and language. |
| Device | Desktop or mobile and viewport dimensions, if known. |
| Capture method | Browser or operating system screenshot, or the tool used. |
| Visible feature | Organic result, local result, ad, snippet, or other element being reviewed. |
| File | Path or descriptive filename for the original image. |
A filename can make the image easier to find, for example homes-for-sale-austin_2026-10-04_0930-utc_desktop.png. Keep the exact query in the accompanying record if the filename would become unwieldy.
4. Automate a browser screenshot with Playwright
For recurring captures, a browser automation script can set a viewport, open a search URL, and save a screenshot. This records the browser’s rendered view; it does not guarantee that Google will show every searcher the same layout or ordering. Google may present consent, verification, or other interstitial pages, so inspect saved captures rather than assuming every run reached the results.
Install Playwright and its Chromium browser:
npm init -y
npm install playwright
npx playwright install chromium
Save the following as capture-serp.js, then run it with a query argument. It creates a full-page PNG and a JSON sidecar containing the query and capture context. Set the intended location and language in the metadata and use a browser setup appropriate to your research; the script does not claim to force a particular geographic result set.
const { chromium } = require('playwright');
const fs = require('node:fs/promises');
(async () => {
const query = process.argv.slice(2).join(' ').trim();
if (!query) {
console.error('Usage: node capture-serp.js "homes for sale in Austin"');
process.exitCode = 1;
return;
}
const viewport = { width: 1365, height: 900 };
const now = new Date();
const stamp = now.toISOString().replace(/[:.]/g, '-');
const browser = await chromium.launch({ headless: true });
try {
const page = await browser.newPage({
viewport,
locale: 'en-US',
deviceScaleFactor: 1
});
const searchUrl = `https://www.google.com/search?q=${encodeURIComponent(query)}`;
await page.goto(searchUrl, { waitUntil: 'domcontentloaded', timeout: 60000 });
await page.locator('body').waitFor({ state: 'visible', timeout: 15000 });
const base = `serp_${stamp}`;
await page.screenshot({ path: `${base}.png`, fullPage: true });
await fs.writeFile(`${base}.json`, JSON.stringify({
query,
capturedAt: now.toISOString(),
intendedLocation: 'REPLACE_WITH_TARGET_LOCATION',
language: 'en-US',
viewport,
captureMethod: 'Playwright Chromium full-page screenshot',
searchUrl
}, null, 2));
console.log(`Saved ${base}.png and ${base}.json`);
} finally {
await browser.close();
}
})().catch(error => {
console.error(error);
process.exitCode = 1;
});
Run:
node capture-serp.js "homes for sale in Austin"
The locale and viewport in the script are explicit browser settings. The intendedLocation value is a record for your workflow, not a guarantee that the results were served from that location. Review the resulting page and metadata for each run. Keep the original capture unchanged if it will be used as evidence.
5. Compare captures like with like
When comparing competitors or dates, line up the records by exact query, timestamp, intended location, language, device or viewport, capture method, and visible result feature. Then describe what the images show: for example, which listings, ads, or result features are visible in those two captures.
Repeat the same setup later to build a dated visual record. Search results can vary by audience and context, so one capture is not a universal view of the market. A screenshot preserves an observed view; it does not establish a complete ranking history, traffic, clicks, or the cause of a change. Those are different questions from what the image can show.
6. Use Search Console for your own site’s performance
Google Search Console is useful for a property you manage, but its tools answer different questions from a competitor results screenshot.
- URL Inspection screenshot: Google’s rendered-page screenshot is available in the successful live-test context described in the [URL Inspection documentation](https://support.google.com/webmasters/answer/9012289). It shows how Google rendered the inspected page; it is not a capture of a competitor’s search results.
- Performance report: Search Console reports clicks, impressions, click-through rate, and average position for links to your property, with dimensions such as country and device. It is not a competitor analytics feed. See [How are you performing on Google?](https://support.google.com/webmasters/answer/7576553).
- Average position: This is an aggregated topmost-position metric across queries where your property appeared. Search result layouts make a one-to-one comparison with the position of a listing in one screenshot unreliable. See Google’s definitions of [impressions, position, and clicks](https://support.google.com/webmasters/answer/7042828).
Use the screenshot to answer “what was visible in this recorded search view?” Use URL Inspection to investigate Google’s rendering of a page you can inspect, and Performance reports to analyze search performance for your own property.
7. Publish screenshots accurately
If you publish a Google Search screenshot, review Google’s current [Search Guidelines](https://about.google/brand-resource-center/products-and-services/) for the intended use. The guidance asks that Search be shown naturally and that suggestions or results not be manufactured, removed, or altered. It says educational or instructional print use is treated differently from use in advertising, and that third-party material may require the owner’s approval. It also asks for the tagline “Google and the Google logo are trademarks of Google LLC.” beneath images featuring Google Search. Apply the guidance to the actual medium and use; do not assume a rule for print automatically covers other contexts.
8. Troubleshooting
| Symptom | Likely cause | What to do |
|---|---|---|
| The screenshot shows a consent or verification page | The browser session received an interstitial rather than the results view. | Inspect the image before using it. Do not label it as a SERP capture if the results did not load. For repeat research, use a compliant, stable browser workflow and record what appeared. |
| Results differ between captures | The query, timing, location, language, device, or search context may differ. | Compare the metadata first. Repeat with the same intended context and record the new timestamp. |
| A full-page image looks different from the initial viewport | It includes content extending below the visible screen. | Label it as a full-page or longer-page capture and distinguish below-the-fold content from what was initially visible. |
| Playwright reports a navigation timeout | The page did not reach the requested lifecycle event before the timeout, or access was delayed. | Inspect the browser page and network conditions. Increase the timeout only when appropriate, and preserve failed runs as failures rather than presenting an empty or interstitial page as results. |
| Playwright says the package or browser executable is missing | The dependency or Chromium browser was not installed in the environment running the script. | Run npm install playwright and npx playwright install chromium in that environment. |
| Screenshot file exists but contains an unexpected page | Saving a screenshot succeeded even though the intended result page did not load. | Open and review every capture; filename existence alone is not evidence of a successful search capture. |
| Search Console does not show competitor metrics | Its performance report covers links to the property you manage. | Use screenshots as visual records of observed competitor results; do not treat Search Console as competitor analytics. |
9. Performance, reliability, and cost
A manual screenshot is quick for a one-off check and has no separate capture-service charge, though it takes a person to run and label. Browser automation saves repetitive steps but requires a maintained runtime, browser installation, storage for images and metadata, and review of each result. A successful file write only confirms that an image was saved, not that the intended Google results appeared.
For reliable comparisons, preserve originals, use consistent naming and metadata, and keep failed or unexpected captures distinguishable from valid SERP screenshots. Do not infer a ranking trend from a handful of visually different pages without accounting for query and capture context. Search Console metrics for your own site can add performance context, but they do not reveal competitor clicks or traffic.
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server for developers. One GET request can return a PNG, JPEG, WebP, or PDF; see the API documentation for options. For a one-off target-page capture, use the request below. A Google SERP screenshot is still a record of the fetched view and its context, not competitor ranking or traffic data.
ScreenshotNeo accepts cookie or consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and billing status. Its MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients. The free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://www.google.com/search?q=homes%20for%20sale%20in%20Austin -o shot.webp
import requests
r = requests.get(
"https://api.screenshotneo.com/v1/shot",
params={
"access_key": "YOUR_API_KEY",
"url": "https://www.google.com/search?q=homes%20for%20sale%20in%20Austin",
},
timeout=90,
)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({
access_key: 'YOUR_API_KEY',
url: 'https://www.google.com/search?q=homes%20for%20sale%20in%20Austin'
});
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
const fs = await import('node:fs/promises');
await fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer()));
For recurring captures, the API also supports custom viewport and device presets, full-page capture, waits, headers and cookies, caching, async jobs, signed webhooks, and bulk capture of up to 100 URLs per call. Configure a capture to match the device and context you are recording, and retain the query and timestamp alongside its output.
Create a free ScreenshotNeo account for 1,000 screenshots a month with no card.
FAQ
Can I use one screenshot to prove a competitor ranked in a specific position?
It documents the ordering visible in that capture. It does not establish a universal or historical ranking across users, locations, devices, or dates.
Can Google Search Console show how many clicks a competitor received?
No. Its performance reports cover search traffic to the property you manage, not another site’s clicks or impressions.
Does URL Inspection capture the search results page?
No. Its rendered screenshot concerns the inspected page in a successful live test, not a Google results page.
Should I edit a screenshot to make a comparison clearer?
Keep the evidence image unaltered, and review Google’s current guidance for publication. If you need to discuss a detail, explain it in accompanying text without changing what the screenshot depicts.


