Hi, I’m Gabriela, Customer Success Engineer at SerpApi. 👋

Working with Google Search data tends to follow a familiar pattern:

  • You start by scraping HTML.
  • Then someone asks, “But is our result above the fold?”
  • Suddenly you’re running a headless Chrome farm with Puppeteer or Playwright just to measure where things appear on the page.
  • Now you’re debugging viewport sizes, flaky renders, and layout shifts instead of building features your users actually care about.

You know what is on the SERP, but not where it appears on screen without re-implementing a browser pipeline.

This post is about getting you out of that trap.

I’ll walk through how to use SerpApi’s Pixel Position to get pixel-accurate Google SERP layout data via API- no screenshots, no custom browser farm. By the end, you’ll be able to:

  • Map where you’re secretly re-implementing the browser.
  • Think about SERP layout as simple numeric data.
  • Get your first pixel-accurate SERP working in under an hour.
  • Build a robust “above the fold” checker.
  • Go beyond above-the-fold into richer layout analytics.

What Is Pixel Position?

Pixel Position is an extension to SerpApi’s Google Search API that tells you where each supported SERP element sits on the screen. For each element (like an organic result or some SERP features), it adds a rectangle with x, y, width, and height, plus viewport metadata (viewport_width, viewport_height). That means you can answer questions like “Is this result above the fold?” or “How much of the first screen is ads?” using plain numbers - without maintaining your own headless browser setup.


Why This Matters (Even If You’re Not an Engineer)

You might not be the person writing Python scripts, but you probably care about things like:

  • Visibility: Are your key pages actually being seen, or are they buried below ads and SERP features?
  • Impact of SEO work: It’s one thing to move from position 4 to 2, and another to move from “below the fold on mobile” to “fully visible on load.”
  • Smarter reporting: Instead of vague “rank” charts, you can have metrics like:
    • “% of queries where our brand is fully above the fold on mobile”
    • “Average ad coverage of the first screen for our core keywords”

Pixel Position makes those kinds of answers possible without asking your engineering team to build and maintain a full browser rendering pipeline “just for layout.”

If you’re an SEO lead, PM, or marketing manager, you can think of Pixel Position as a way to turn “how it looks in Google” into reliable, repeatable metrics.


Key Terms in 45 Seconds (Mini Glossary)

  • SERP – “Search Engine Results Page,” the page you see after you perform a query on Google.
  • Viewport – The visible area of the page in the browser, measured in pixels (for example, 390×844 on a phone). If you have to scroll to see something, it’s below the viewport.
  • Above the fold – Everything that’s fully visible when the page first loads, before you scroll. The term comes from newspapers: the most important stories go on the top half of the front page, above the physical fold. On the web, “above the fold” means the part of the page users see immediately without doing anything. If your result is above the fold, users can see it right away; if it’s below, they have to scroll to find it.
  • SERP element – Any block on the search page: an organic result, an ad, a local pack, a knowledge panel, etc.
  • Rectangle / Pixel Position – A numeric description of where a SERP element sits on screen:x (left offset), y (top offset), width, height, all in pixels.
  • Headless browser – A browser (like Chrome) that runs without a visible window. Tools like Playwright and Puppeteer control it from code to render pages and extract layout, screenshots, etc.
  • Puppeteer / Playwright – Popular libraries used to control headless browsers (open a page, wait for elements, take screenshots, run JavaScript, etc.).

Keep these in mind. Most of what follows is simply: “Take these rectangles and apply simple rules.”


What People Do Today

Most teams still answer “Is this above the fold?” by running headless browsers: render Google, wait for elements, grab bounding boxes, store screenshots, fix brittle scripts. Pixel Position removes that whole pipeline and just adds the rectangles you need (x, y, width, height) straight into your SerpApi JSON.


Understand Pixel Position: Layout as Simple Numeric Data

Pixel Position turns “Where is this on the SERP?” into plain numbers in the API response.

Instead of reasoning about CSS, DOM trees, or viewport quirks, you can:

  • Work directly with x, y, width, and height for each supported SERP element.
  • Express business rules as simple numeric conditions.
  • Stop rebuilding browser logic just to answer layout questions.

Under the hood, Pixel Position adds two key pieces of data:

  • pixel_position_information – viewport size and timing.
  • rectangle – the on-screen rectangle for each supported element.

A Tiny JSON Example

Here’s a simplified example of what a Pixel Position response might look like for one result (fields shortened):

{
  "pixel_position_information": {
    "viewport_width": 800,
    "viewport_height": 800,
    "time_taken": 1.23
  },
  "organic_results": [
    {
      "position": 1,
      "title": "Coffee - Example Site",
      "link": "https://example.com",
      "rectangle": {
        "x": 16,
        "y": 320,
        "width": 768,
        "height": 180
      }
    }
  ]
}

For layout questions, you mostly care about:

  • viewport_width, viewport_height
  • rectangle.x, rectangle.y, rectangle.width, rectangle.height

From this alone you can already answer: Is that first result above the fold?

Step-by-Step

a) Think in rectangles, not DOM

Each SERP element becomes a rectangle on the viewport:

  • x: distance from the left edge (pixels)
  • y: distance from the top edge (pixels)
  • width, height: size (pixels)

Once you think “rectangle”, you can mostly ignore CSS.

b) Map rectangles to the data you already use

You’re likely already consuming SerpApi’s structured data like organic_results, local_results, etc. Pixel Position augments those objects with a rectangle field, without changing how you access the rest of the data.

c) Rewrite key questions in terms of coordinates

Examples:

  • Fully above the fold?: element.y + element.height <= viewport_height
  • Partially visible?: element.y < viewport_height
  • Visible share of the viewport?:
    element.width * element.height / (viewport_width * viewport_height)
  • Relative prominence vs ads?: Compare the area of your result vs ad blocks vs competitors.

Real Example

Suppose you have:

  • rectangle.y = 320
  • rectangle.height = 180
  • viewport_height = 800

Then:

  • Bottom of the result = 320 + 180 = 500
  • 500 < 800 → the result is fully visible on initial load → above the fold.

No screenshots, no DOM walking—just arithmetic.

Common Mistakes to Avoid

  • Thinking Pixel Position is “rank, but fancier.”: Rank tells you order. Pixel data tells you visibility and screen share.
  • Treating coordinates as “magic numbers.”: You still choose sensible viewport assumptions per device:
    • Desktop: ~800–900 px height
    • Mobile: ~700–800 px height. Ideally informed by your analytics.

Quick Implementation Tip

Take 10 minutes to rewrite your core layout questions as formulas using:

  • x, y, width, height
  • viewport_width, viewport_height

Once those formulas are clear, the implementation becomes mostly copy-paste.


Get Your First Pixel-Accurate SERP in Under an Hour

You don’t need a big refactor to see value. One small script that fetches pixel data for a single query gives you:

  • A concrete example your team can read.
  • A snippet you can copy into other services.
  • Confidence that Pixel Position fits your workflow and tooling.

Step-by-Step

a) Grab your SerpApi API key

If you’re already using SerpApi, reuse the same key.

b) Call the Google Search API with Pixel Position enabled

For new searches, you can either:

  • Use a special endpoint:
GET https://serpapi.com/search.json_with_pixel_position
    ?engine=google
    &q=Coffee
    &api_key=YOUR_API_KEY
  • Or add an output parameter to your usual endpoint:
GET https://serpapi.com/search
    ?engine=google
    &q=Coffee
    &output=json_with_pixel_position
    &api_key=YOUR_API_KEY

For archive searches, you can also call the Search Archive with a pixel-position variant, or follow the pixel_position_endpoint from a previous search’s metadata.

c) Start with one simple query

Use something like:

  • q=coffee, or
  • A branded keyword you care about.

d) Log the viewport and a few rectangles

Print the viewport dimensions from pixel_position_information, plus rectangles for a handful of results. This is your sanity check.

Real Example (Python)

import requests

api_key = "YOUR_API_KEY"

params = {
    "engine": "google",
    "q": "coffee",
    "api_key": api_key,
    "output": "json_with_pixel_position",
}

response = requests.get("https://serpapi.com/search", params=params)
data = response.json()

ppi = data.get("pixel_position_information", {})
print(
    f"Viewport: {ppi.get('viewport_width')}x{ppi.get('viewport_height')} "
    f"(time_taken={ppi.get('time_taken')})"
)

for i, result in enumerate(data.get("organic_results", []), start=1):
    rect = result.get("rectangle") or {}
    print(
        f"Result #{i} - title={result.get('title')!r} "
        f"y={rect.get('y')} height={rect.get('height')}"
    )

You should see the viewport size plus each organic result’s y and height. From there, you already have enough to do basic above-the-fold checks.

Common Mistakes to Avoid

  • Mixing cache expectations: If you’re debugging layout changes, be explicit about whether you want cached results or fresh ones, and configure cache options accordingly.
  • Trying to migrate everything at once: Start with one script and one query—not your entire pipeline.

Quick Implementation Tip

Commit this script as something like pixel_position_smoke_test.py.

Any time you:

  • Upgrade libraries,
  • Change viewport assumptions, or
  • Modify your SerpApi integration,

You can run this script as a fast regression test.


Build a Simple Above-the-Fold Checker

“Is it above the fold?” is one of the most common questions from SEO, product, and marketing teams.

With Pixel Position, you can build a robust checker in under 50 lines:

  • No screenshots.
  • No CSS parsing.
  • Just coordinates + a viewport height.

Step-by-Step

a) Choose viewport heights per device

You can refine them later using analytics, but good starting points are:

  • Desktop: ~800–900 px
  • Mobile: ~700–800 px

b) Define your above-the-fold rules

For example:

  • Fully above the fold: y + height <= viewport_height
  • Partially visible: y < viewport_height

Agree internally whether “partially visible” counts as “above the fold” or not.

c) Apply it to each element you care about

  • Your domain’s results.
  • Key competitors.
  • Ad blocks, local packs, or SERP features you want to track.

d) Export a simple report

For example, a CSV with:

  • keyword
  • device
  • result_type
  • domain
  • above_the_fold
  • y
  • height

Real Example (Pseudo-Python)

VIEWPORT_HEIGHT_MOBILE = 760

def is_above_the_fold(rect, viewport_height=VIEWPORT_HEIGHT_MOBILE):
    if not rect:
        return False
    bottom = rect["y"] + rect["height"]
    return bottom <= viewport_height

rows = []
for result in data.get("organic_results", []):
    rect = result.get("rectangle") or {}
    domain = result.get("domain")
    above = is_above_the_fold(rect)
    rows.append({
        "keyword": "coffee",
        "device": "mobile",
        "result_type": "organic",
        "domain": domain,
        "above_the_fold": above,
        "y": rect.get("y"),
        "height": rect.get("height"),
    })

You now have a dataset you can feed into BI tools, dashboards, or alerts.

Common Mistakes to Avoid

  • Using one viewport for everything: Mobile and desktop layouts differ a lot. Use different heights per device.
  • Leaving “partially visible” undefined: If “any visibility” is enough, say so. If you require 100% visibility, codify that rule.

Quick Implementation Tip

Start with mobile only (it’s often where visibility is tightest). Once everything is stable, add separate configs for desktop and tablet.


Go Beyond Above-the-Fold: What Layout Data Unlocks

Once you have rectangles and viewport metadata, a lot of “screenshot-only” questions become straightforward numeric checks:

  • Ad clutter analysis: Measure how much of the initial viewport is occupied by ads vs organic results:ad_area / (viewport_width * viewport_height).
  • SERP feature impact: Track when local packs, knowledge panels, or short videos push your listings down—and quantify by how many pixels.
  • Layout regression testing for SEO: Store rectangle data for critical queries and alert when key elements cross important thresholds:
    • “Our main brand result dropped below 1,000 px on mobile yesterday.”
    • “Competitor X is now above the fold for 80% of queries in this cluster.”
  • Competitor benchmarking: Compare how often competitor domains are fully above the fold vs yours for the same keyword set, per device.

Because Pixel Position is delivered as JSON, you can plug it into your existing stack:

  • Cron jobs / Airflow
  • dbt models
  • Your favorite BI or alerting tools

No new screenshot pipeline required.


Conclusion: Stop Rendering, Start Measuring

If you’re spending valuable engineering time and infrastructure just to answer “Where is this on the page?”, Pixel Position is designed to provide you with that answer directly via API.

To recap:

  1. Map your current pain: Find jobs that exist only to compute x, y, width, height for SERP elements.
  2. Understand the data model: Think of SERPs as rectangles plus viewport metadata.
  3. Get one pixel-accurate SERP working: A small script is enough to validate the approach with real data.
  4. Ship an above-the-fold checker: Turn a recurring SEO question into a simple, automated dataset.
  5. Expand into deeper layout analytics: Ad clutter, SERP features, regression checks, competitor visibility—without screenshot pipelines.

Instead of asking your team to maintain yet another flaky Playwright job, you can ask a simpler question:

“Can we get this as rectangles from Pixel Position instead?”

If the answer is “yes”, that’s one more script you never have to debug at 2 a.m.

Thank you for reading :). If you need more information about how to add this feature to your plan, feel free to contact us via email at contact@serpapi.com.