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

3.24intermediate4 min read

Knowledge Graph, Featured Snippets, People Also Ask

Three high-value SERP blocks that answer the query directly. Each has its own data shape and scraping pattern.

What you’ll learn

  • Distinguish the three answer-shaped blocks visually and structurally.
  • Parse a Knowledge Graph entity into a typed object.
  • Extract featured snippet text + source.
  • Walk a People Also Ask tree depth-N.

Three SERP blocks that try to answer the user's question without sending them anywhere. From a scraper's perspective, they're high-density structured data, the SERP doing parsing work for you.

Knowledge Graph (Knowledge Panel)

The boxed panel on the right (desktop) or top (mobile) for entity queries, people, places, brands, products, organisations.

Sample shape:

{
  "knowledge_graph": {
  "title": "Catalog108",
  "type": "Online practice platform",
  "kgmid": "/g/123abc",
  "description": "Catalog108 is the practice site for scrapingcentral.com...",
  "source": {"name": "scrapingcentral.com", "link": "https://..."},
  "website": "https://practice.scrapingcentral.com",
  "founded": "2025",
  "headquarters": "Web",
  "social_profiles": [
  {"name": "Twitter", "link": "..."},
  {"name": "GitHub", "link": "..."}
  ],
  "thumbnail": "...",
  "related_entities": [
  {"name": "scrapingcentral.com", "link": "..."}...
  ]
  }
}

The fields vary by entity type. A person has birthdate, spouse, education; a brand has parent_organization, headquarters, revenue; a movie has director, release_date, actors. SERP-APIs usually normalize these and expose attributes dictionaries.

Use case: populate entity profiles cheaply. If you need company data, the knowledge graph is often more reliable (and structured) than scraping the company's own site.

Featured Snippets

A paragraph, list, or table answering the query at the top of the SERP, with a citation to a single source.

{
  "featured_snippet": {
  "type": "paragraph",  // or "list" or "table"
  "snippet": "API scraping is the practice of...",
  "snippet_highlighted_words": ["API scraping"],
  "title": "What is API scraping? - scrapingcentral.com",
  "link": "https://scrapingcentral.com/learn/api-scraping",
  "displayed_link": "scrapingcentral.com › learn"
  }
}

Types:

  • Paragraph, block of text.
  • List, bulleted or numbered list, often a procedural answer.
  • Table, comparison or data lookup.

Use case: the snippet IS the answer for many informational queries. A scraper that aggregates featured snippets for a domain of queries builds a high-quality knowledge base.

Note: featured snippets disappear and reappear; same query today might not have one tomorrow. Always handle the featured_snippet key being missing.

People Also Ask (PAA)

A list of related questions, each clickable to expand into an answer. Often appears beneath the first few organic results.

{
  "related_questions": [
  {
  "question": "What is API scraping?",
  "answer": "API scraping is the practice of...",
  "title": "Source title",
  "link": "https://...",
  "displayed_link": "..."
  },
  {
  "question": "Is API scraping legal?",
  "answer": "...",
  "link": "..."
  }...
  ]
}

PAA is dynamic in browsers, clicking a question expands it AND injects more questions, recursively. Some SERP-APIs return only the initial set; others let you specify a paa_depth to fetch deeper.

Use case: keyword research, content planning ("what else are people asking?"), content gap analysis. The PAA tree often surfaces long-tail queries you wouldn't have brainstormed.

Parsing strategy

Each block needs its own parser. With a SERP-API response:

def extract_answers(data: dict) -> dict:
  out = {}

  # Knowledge graph
  if kg := data.get("knowledge_graph"):
  out["entity"] = {
  "name": kg.get("title"),
  "type": kg.get("type"),
  "description": kg.get("description"),
  "website": kg.get("website"),
  "attributes": kg.get("attributes", {}),
  }

  # Featured snippet
  if fs := data.get("featured_snippet"):
  out["featured"] = {
  "type": fs.get("type"),
  "answer": fs.get("snippet"),
  "source_url": fs.get("link"),
  "source_title": fs.get("title"),
  }

  # PAA
  out["paa"] = [
  {"q": q["question"], "a": q.get("answer"), "src": q.get("link")}
  for q in data.get("related_questions", [])
  ]

  return out

Catalog108 example

practice.scrapingcentral.com/search?q=catalog108 returns a SERP shape including a knowledge panel for "Catalog108" (the brand) plus organic results and PAA-style related-question chips.

import requests

r = requests.get("https://practice.scrapingcentral.com/api/search", params={"q": "catalog108"})
data = r.json()

if "knowledge_graph" in data:
  kg = data["knowledge_graph"]
  print(f"Entity: {kg['title']} ({kg.get('type')})")
  print(f"Description: {kg.get('description', '')[:200]}")

Featured snippet recovery

Real Google's featured snippets are unstable, same query may or may not show one. A scraper that's tracking "do we own the snippet for X" should:

  1. Run the query daily or weekly.
  2. Record snippet ownership (URL, snippet type) when present.
  3. Track absence over time, losing a snippet is meaningful signal.

PAA depth

Some SERP-APIs:

  • Return only the first 3-4 PAAs by default.
  • Accept a paa_depth=N parameter to recursively follow expansions.
  • Charge extra credits for deeper PAA fetches.

For SEO research, depth 2-3 is usually enough; for content planning, depth 5+ surfaces niche queries.

Block presence per query type

Block When it appears
Knowledge Graph Entity queries (brands, people, places, things)
Featured Snippet Informational queries ("what is", "how to", definitions)
People Also Ask Most informational queries; some commercial

If your scraper expects all three on every query, wrong. Build optional handling: if "knowledge_graph" in data: ....

Hands-on lab

Open /search?q=catalog108 on Catalog108. Note the knowledge panel and any related-question chips. Fetch the JSON via the API (/api/search?q=catalog108) and parse the knowledge_graph block into a Python dict. Then try queries with different intents: phone (commercial), weather (answer-shaped), python tutorials (informational). Each will surface different blocks, your parser should handle missing blocks gracefully.

Hands-on lab

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

Open lab target → /search?q=catalog108

Quiz, check your understanding

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

Knowledge Graph, Featured Snippets, People Also Ask1 / 8

Which SERP block typically returns structured ENTITY attributes (founder, headquarters, founded date)?

Score so far: 0 / 0