BETA · Google · Desktop · US

Pixel Position for Every SERP Element

Add pixel_position=true to any Google search call and every item — organic results, AI Overview, People Also Ask, featured snippet, knowledge panel, ads, shopping, videos, and local pack — comes back with the exact y-coordinate (in pixels) from the top of the rendered SERP. The only API that ships pixels for the whole response shape, at the same per-call price as base search.

Get an API Key Try in Playground
No price increase Every block, every item Single integer per item Opt-in flag

Rank Numbers Lie. Pixels Don't.

Google's first organic result no longer sits at the top of the page. AI Overviews, featured snippets, ads, and 4-question PAA boxes routinely push position #1 below 1,000 pixels. Two queries with identical "rank #1" results can have wildly different real visibility.

Honest Rank Tracking

A "rank #2" result sitting at y=1,800 px (below an AI Overview, featured snippet, and ad block) gets a fraction of the clicks of a "rank #2" result at y=320 px. Track real visibility, not just ordinal position.

Above-the-Fold Detection

Use a viewport threshold (e.g. y < 768) to identify which elements are visible without scrolling. Build dashboards that flag every page where your client lost the fold.

SERP Feature Impact

Compare pixel position over time as Google rolls out new SERP features. Catch the day your top-of-page snippet got pushed below an AIO — long before the rank metric notices anything has changed.

Ad Position Auditing

Each ad in the response carries a pixel_position too. Validate that paid placements are landing where the bid auction promised, not buried under organic SERP features.

Featured Snippet Dominance

Knowing your snippet exists isn't enough — knowing it sits at y=180 means it's the first thing users see. Track snippet pixel position across keywords and competitors.

Honest Reporting

Show clients the screenshot that matches their search. A pixel y-coordinate next to every result is the proof that builds trust without you having to ship screenshots.

One Flag. Pixels Everywhere.

Add pixel_position=true to any /api/search or /api/search/quick call. The request shape is otherwise unchanged. The response gains a single pixel_position integer on every item.

cURL — pixel position on Google web search
# Quick search with pixel positions
curl "https://apiserpent.com/api/search/quick?q=mesothelioma+lawyer&engine=google&country=us&pixel_position=true" \
  -H "X-API-Key: YOUR_API_KEY"
Python
import requests

resp = requests.get(
    "https://apiserpent.com/api/search",
    headers={"X-API-Key": "YOUR_API_KEY"},
    params={
        "q": "how to bake bread",
        "engine": "google",
        "country": "us",
        "pixel_position": "true",
    },
)
data = resp.json()

# Every organic item has an integer pixel_position
for item in data["results"]["organic"]:
    print(item["position"], item["pixel_position"], item["url"])

# SERP feature blocks too
if data["results"]["aiOverview"]:
    print("AIO at y =", data["results"]["aiOverview"]["pixel_position"])
Node.js
const resp = await fetch(
  "https://apiserpent.com/api/search?q=tesla+stock+price&engine=google&country=us&pixel_position=true",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();

// Filter to "above the fold" results (y < viewport height)
const aboveFold = data.results.organic.filter(r => r.pixel_position < 768);
console.log(`${aboveFold.length} organic results visible without scroll`);
JSON Response (annotated)
{
  "success": true,
  "engine": "google",
  "results": {
    "organic": [
      {
        "position": 1,
        "title": "",
        "url": "https://example.com",
        "pixel_position": 168     // y-coordinate from top of SERP
      }
    ],
    "aiOverview": {
      "text": "",
      "pixel_position": 175       // AIO block top
    },
    "featuredSnippet": {
      "text": "",
      "pixel_position": 252       // FS block top
    },
    "knowledgePanel": {
      "title": "",
      "pixel_position": 789       // right-rail KP top
    },
    "peopleAlsoAsk": [
      { "question": "", "pixel_position": 462 }
    ],
    "ads": {
      "top": [
        { "title": "", "pixel_position": 120 }
      ]
    }
  }
}

What You Get

A single pixel_position integer per item, applied uniformly across the entire response shape. No source-of-pixel flags, no separate per-block fields — one number per element, identical for every result type.

Parameter
pixel_position=true on /api/search or /api/search/quick. Defaults to false; default-off responses are byte-identical to today.
Engine support (v1)
Google (desktop, US locale). Yahoo, Bing, and DuckDuckGo are on the roadmap.
Viewport
1366 × 768 (desktop default).
Where it appears
Every organic[] item, plus aiOverview, featuredSnippet, knowledgePanel, peopleAlsoAsk[], ads.top[], shopping[], videos[], localPack[], and relatedSearches[] when present.
Tier
All paid tiers. Free-tier responses include metadata.pixelPositionUnavailable: 'free_tier' and no pixel fields.
Pricing impact
None. A search with pixel_position=true costs the same as one without.
Pages 2+
Items beyond rank 10 receive a uniform y-coordinate matching the typical Google page-2 layout.
Coordinate origin
Pixels measured from the top of the rendered page (y = 0 is the very top of the SERP). Larger numbers mean further down.
Stability
BETA. Rare drift on individual blocks may produce a missing pixel_position field; integrate with a fallback to ordinal rank in those cases.

Pixel Position vs. SerpAPI & DataForSEO

Pixel-style metrics are a small subset of what most SERP APIs ship. Here is what the field looks like across the three providers offering anything in this space.

Capability Serpent API SerpApi.com DataForSEO Live Advanced
Pixel position on every organic resultYesPartial (block-level only)Yes
Pixel position on AI Overview / featured snippet / knowledge panel / PAA / adsYes (every block)Some blocksYes
Single integer per item (no nested rectangle object)YesNo (offset_top object)No (rectangle x/y/w/h)
Opt-in flag (no charge when disabled)Yes (pixel_position=true)Always returnedSeparate paid product
Price increase when enabledNoneBundled into base plan~5–10× the base SERP cost
Free tier10 free searches100/moTrial credits only

Comparison reflects the Pixel Position scope only. See our full SERP API price comparison for the complete picture.

Pixel Position Questions

Pixel position is the y-coordinate (in pixels) of an element on the rendered search results page, measured from the top of the page. A result at rank #2 with an AI Overview, featured snippet, and four PAA boxes above it might have a pixel position of 1,800 px — meaning the user has to scroll past 1,800 pixels of vertical content before seeing it. Rank tells you the ordinal position; pixel position tells you what users actually see.
Add the query parameter pixel_position=true to any /api/search or /api/search/quick call. Every item in the response — organic results, AI Overview, People Also Ask, featured snippet, knowledge panel, ads, shopping, videos, and local pack — gets a pixel_position integer field. The base request behavior is unchanged when the flag is omitted.
No. Pixel position uses the same per-call pricing as the underlying Google SERP search. A search with pixel_position=true costs the same as a search without it. The feature is included for paid tiers; free-tier responses include metadata.pixelPositionUnavailable: 'free_tier' instead of pixel data.
v1 supports Google desktop SERPs in the US locale. Mobile pixel positions and additional engines (Yahoo, Bing, DuckDuckGo) are on the roadmap. The viewport used for measurement is 1366 × 768.
SerpApi.com exposes pixel_offset_top on a few SERP feature blocks but not on every organic item. DataForSEO offers rectangle coordinates on its Live Advanced product (significantly more expensive). Serpent API returns pixel_position on every item across the entire response shape — organic, AIO, PAA, FS, KP, ads, shopping, videos, local pack — at the same flat per-call price as base search, with no upgrade required.
It launched in BETA. The contract may evolve with the SERP layout — selector drift on Google's side can cause occasional null y-coordinates on individual blocks. Treat pixel_position as best-effort during BETA and integrate with a fallback path that uses ordinal rank when the field is missing.

Try Pixel Position Free

Add pixel_position=true to any Google search and every item comes back with a pixel y-coordinate. No price increase, opt-in flag, BETA. Get started with 10 free searches.

Get an API Key