Scraping Central is reader-supported. When you buy through links on our site, we may earn an affiliate commission.

3.26intermediate4 min read

Image Pack, Video Carousel, Top Stories

Three media-shaped SERP blocks. Each has its own data shape and its own scraping mechanics, distinct from text results.

What you’ll learn

  • Identify Image Pack, Video Carousel, and Top Stories blocks.
  • Extract media URLs, thumbnails, sources, and timestamps.
  • Understand how Image Search differs from the on-SERP Image Pack.
  • Pull each block from a SERP-API response shape.

Three SERP blocks that aren't text. Useful when your scraping question is "what does the web look like for this query?", visually, journalistically, or in terms of motion.

Image Pack

A horizontal carousel of images embedded on the main SERP. Click any → expanded image viewer with source info.

SERP-API shape:

{
  "inline_images": [
  {
  "title": "iPhone 15 in white",
  "link": "https://www.apple.com/iphone-15",
  "thumbnail": "https://encrypted-tbn0.gstatic.com/images?q=tbn:...",
  "original": "https://www.apple.com/v/iphone-15/.../hero.jpg",
  "source": "Apple",
  "size": {"width": 1200, "height": 900}
  }...
  ]
}

Key fields:

  • thumbnail, small, served from Google's CDN. Fast.
  • original, full-resolution, on the source domain. Slower, copyrighted.
  • source, the publisher.

The inline Image Pack on the main SERP shows ~5-10 thumbnails. The full Image Search tab (Google Images, ?tbm=isch) returns hundreds.

Image Search vs Image Pack

Two distinct endpoints:

  • Image Pack, small inline block on text-search SERP.
  • Image Search, google.com/search?tbm=isch&q=..., the full image-only results page. Hundreds of results, infinite scroll, separate XHRs.

Most SERP-APIs expose both: engine=google for the SERP (including inline images), engine=google_images for the dedicated image search.

Video Carousel

YouTube + web videos shown as thumbnail cards, often horizontally scrollable.

{
  "inline_videos": [
  {
  "title": "iPhone 15 Pro - Full Review",
  "link": "https://www.youtube.com/watch?v=abc123",
  "thumbnail": "https://i.ytimg.com/vi/abc123/hq.jpg",
  "channel": "TechReviewer",
  "duration": "12:35",
  "platform": "YouTube",
  "views": "2.1M",
  "date": "2 weeks ago"
  }...
  ]
}

Most entries are YouTube. Some SERPs surface TikTok, Vimeo, or first-party hosted video.

Use case: influencer / video-content monitoring, competitive content analysis, sentiment tracking.

Top Stories (News)

A horizontal carousel of news articles, surfaced for trending or recent queries.

{
  "top_stories": [
  {
  "title": "iPhone 15 launches with a USB-C port",
  "link": "https://www.example-news.com/iphone-15-launch",
  "source": "Example News",
  "date": "2 hours ago",
  "thumbnail": "https://..."
  }...
  ]
}

Sometimes called news_results in SERP-API responses. Replaces Google News for many queries.

Use case: breaking-news monitoring, PR / brand-mention tracking, sentiment.

Block timing, when each appears

  • Image Pack, almost always on commercial / product queries. Less common on pure information queries.
  • Video Carousel, common on reviews, tutorials, entertainment.
  • Top Stories, only when there's recent news for the query. A "iPhone 15" query gets stories during launch week, none three months later.

If your scraper assumes presence, you'll get KeyError constantly. Always use .get().

Parsing all three from one response

def parse_media_blocks(data: dict) -> dict:
  return {
  "images": [
  {
  "title": i.get("title"),
  "thumbnail": i.get("thumbnail"),
  "url": i.get("original") or i.get("link"),
  "source": i.get("source"),
  }
  for i in data.get("inline_images", [])
  ],
  "videos": [
  {
  "title": v.get("title"),
  "url": v.get("link"),
  "thumbnail": v.get("thumbnail"),
  "channel": v.get("channel"),
  "duration": v.get("duration"),
  "views": v.get("views"),
  }
  for v in data.get("inline_videos", [])
  ],
  "stories": [
  {
  "title": s.get("title"),
  "url": s.get("link"),
  "source": s.get("source"),
  "date": s.get("date"),
  "thumbnail": s.get("thumbnail"),
  }
  for s in data.get("top_stories", [])
  ],
  }

PHP version: same structure with array_map and ?? null for missing fields.

Catalog108

practice.scrapingcentral.com/search?q=phone&tab=images simulates the image-search tab. Inspect its XHRs in DevTools to practice parsing the image-search shape.

Downloading the originals

If your scraper needs to download the full-res images:

import requests, os, hashlib

def download_image(url: str, out_dir: str) -> str:
  r = requests.get(url, timeout=30, stream=True)
  r.raise_for_status()
  name = hashlib.sha1(url.encode()).hexdigest()[:16] + os.path.splitext(url)[1][:5]
  path = os.path.join(out_dir, name)
  with open(path, "wb") as f:
  for chunk in r.iter_content(8192):
  f.write(chunk)
  return path

Watch out:

  • Copyright. Most image-pack images are owned by the source site. Use must comply with copyright law and the source's ToS.
  • CDN tokens. Some original URLs require referrer headers. Set Referer: https://www.google.com/.
  • Hot-linking. Some servers reject downloads if Referer is wrong.

Video data, beyond the thumbnail

For deeper video analytics (view counts, captions, comments), you need:

  • YouTube Data API v3, official, requires API key + quota.
  • Apify's YouTube scraper / SerpApi's YouTube engine, proxied access without the quota.
  • yt-dlp, extracts metadata locally without the API.

The video carousel in the SERP is just the entry-point; the rich data is one click deeper.

News data, beyond the headline

Similarly for news:

  • Top Stories block = headline + source + date.
  • For body text → fetch the article URL, parse with newspaper3k or a custom extractor.
  • For aggregate news monitoring → use Google News (engine=google_news on most SERP-APIs).

Hands-on lab

Open /search?q=phone&tab=images on Catalog108. Inspect the image-pack XHR. Build a parser that extracts thumbnail URL, original URL, source, and size for each image. Then practice the same on a real Google query in a SERP-API simulator (most providers have a free playground). Compare what the SERP-API returns vs what you see on the page, they should be a one-to-one map.

Hands-on lab

Practice this lesson on Catalog108, our first-party scraping sandbox.

Open lab target → /search?q=phone&tab=images

Quiz, check your understanding

Pass mark is 70%. Pick the best answer; you’ll see the explanation right after.

Image Pack, Video Carousel, Top Stories1 / 8

On a SERP-API response, what's the difference between `thumbnail` and `original` URLs for an image?

Score so far: 0 / 0