Google Search People are saying
The 'People are saying' discussion links Google shows for a query.
The forum and social threads Google shows under 'People are saying' come back with title, link and relative date, so you can see which discussions searchers are sent to for your brand or topic.
Returned in result
| Field |
|---|
peopleAreSaying |
Request
curl -X POST "https://api.answerline.dev/v1/monitor/google" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"project management software","country":"US","include":{"aioverview":{"markdown":true}}}'
What “People are saying” is
“People are saying” is the Google results page module that surfaces community discussion for a query: cards labeled “What people are saying” or “Trending posts and discussions”, each pointing to a thread or post, often on Reddit, Quora or a community forum. Each card shows a title and how long ago it was posted.
result.peopleAreSaying returns those cards. This is where Google sends searchers who want first-hand opinions, so a critical thread promoted for your brand query is a visible reputation risk. The platforms and threads that appear show where to take part in discussions, and discussions outranking editorial pages point to questions the existing pages don’t answer. The same threads are often cited by AI answers; see Reddit citations in AI answers.
Field reference
result.peopleAreSaying[]
| Field | Type | Meaning |
|---|---|---|
position |
number, required | 1-indexed position within the module. |
title |
string, required | Card title as displayed. |
link |
string, required | Destination URL of the card, often a Reddit, Quora or forum thread. When Google served a redirect, this is the resolved destination. |
date |
string, required | Google’s relative-time text, such as 5 days ago. Free-form, not normalized to a timestamp. |
redirectLink |
string | Google’s /goto redirect for the link, in the absolute form POST /v1/monitor/google/goto accepts. Present only when Google served the link as a redirect. |
The whole field is omitted from result when the page has no such module.
Annotated excerpt
Values are illustrative; names and types follow the POST /v1/monitor/google result schema.
{
"result": {
// Omitted entirely when the results page has no discussions module.
"peopleAreSaying": [
{
"position": 1,
"title": "Anyone switched from ExampleVPN? Speeds dropped for me",
"link": "https://www.reddit.com/r/example/comments/abc123/",
"date": "5 days ago" // relative text, not a timestamp
},
{
"position": 2,
"title": "Is ExampleVPN worth it in 2026?",
"link": "https://forum.example-tech.org/t/examplevpn-worth-it/8812",
"date": "2 weeks ago"
}
]
}
}
Cost
No include flag is needed. The module comes with every Google Search request at the base price: $0.00103 for one page. The module is read from the first results page, so extra pages do not add cards.
Example: discussion presence and platform share
The script checks brand and category queries, then reports how many show the module, each platform’s share of cards, and the threads on brand queries that are newer than 30 days, converting Google’s relative dates using the run time.
import os
import re
import time
from collections import Counter
from datetime import date, datetime, timedelta, timezone
from urllib.parse import urlparse
import requests
API = "https://api.answerline.dev"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
BRAND_QUERIES = ["examplevpn review", "examplevpn reddit", "is examplevpn safe"]
CATEGORY_QUERIES = ["best vpn for streaming", "vpn for travel"]
DAY = date.today().isoformat()
UNITS = {"minute": 1 / 1440, "hour": 1 / 24, "day": 1, "week": 7, "month": 30, "year": 365}
def run_tasks(tasks):
resp = requests.post(f"{API}/v1/async/task/batch", headers=HEADERS, json=tasks, timeout=60)
resp.raise_for_status()
pending = {item["task"]["id"]: tasks[item["index"]] for item in resp.json()["results"] if item["success"]}
done = []
while pending:
time.sleep(10)
for task_id in list(pending):
body = requests.get(f"{API}/v1/async/task/{task_id}", headers=HEADERS, timeout=30).json()
if body["task"]["status"] in ("COMPLETED", "FAILED"):
task = pending.pop(task_id)
if body["task"]["status"] == "COMPLETED":
done.append((task["payload"]["query"], body["response"]["result"]))
return done
def age_days(text):
"""Approximate age from text like '5 days ago'; None when the text isn't relative."""
match = re.match(r"(\d+)\s+(minute|hour|day|week|month|year)s?\s+ago", text.strip().lower())
return int(match.group(1)) * UNITS[match.group(2)] if match else None
queries = BRAND_QUERIES + CATEGORY_QUERIES
tasks = [
{"taskType": "GOOGLE", "payload": {"query": q, "country": "US"}, "idempotencyKey": f"pas-{i}-{DAY}"}
for i, q in enumerate(queries)
]
ran_at = datetime.now(timezone.utc)
platforms = Counter()
with_module = 0
fresh_brand_threads = []
for query, result in run_tasks(tasks):
cards = result.get("peopleAreSaying", [])
with_module += bool(cards)
for card in cards:
platforms[(urlparse(card["link"]).hostname or "").removeprefix("www.")] += 1
age = age_days(card["date"])
if query in BRAND_QUERIES and age is not None and age <= 30:
posted = (ran_at - timedelta(days=age)).date().isoformat()
fresh_brand_threads.append((query, card["position"], posted, card["title"], card["link"]))
total = sum(platforms.values()) or 1
print(f"module shown on {with_module}/{len(queries)} queries")
for host, count in platforms.most_common(10):
print(f" {host:32} {count / total:5.1%} of cards")
print("\nBrand-query threads from the last 30 days (approximate dates):")
for row in fresh_brand_threads:
print(" ", *row)
Run it daily and diff the set of link values per brand query: a new thread entering the module is the event worth alerting on, not the module’s presence.
Pitfalls
peopleAreSaying is omitted when the page has no module: result["peopleAreSaying"] raises, result.get("peopleAreSaying", []) doesn’t.
“2 weeks ago” covers a range of days. Store the raw date text and the request time, compute approximate dates at read time, and keep text that doesn’t match a relative pattern as is.
Whether Google shows discussions for a query varies over time and by market, and discussion sources are often language-specific. Measure presence as a rate across runs with country fixed.
The same thread can appear with different URL forms (trailing slashes, query parameters). Normalize before diffing so a URL variant isn’t reported as a new thread.
Related
- Brand protection and brand crisis monitoring in AI answers.
- Reddit citations in AI answers: the same threads as AI sources.
- Tracking SERP feature changes for diffing modules over time.
- People Also Ask and knowledge graph, the other brand SERP modules.
- Google Search engine guide for targeting, batches and billing.
Questions
What is the People are saying module in Google?
It is the results page module Google titles "What people are saying" or "Trending posts and discussions", a row of cards linking to discussions, often Reddit, Quora or community forum threads. The API returns it as result.peopleAreSaying.
Why is peopleAreSaying missing from my result?
The field is omitted from result when the results page has no such module. Treat it as optional and default to an empty list in code.
Is the date on a People are saying card a timestamp?
No. date is Google's relative text as displayed, such as "5 days ago" or "2 weeks ago". Convert it yourself using the time the request ran.
Does People are saying cost extra?
No. It comes with every Google Search request at the base price: $0.00103 for one page.
Can I see which discussion platforms Google promotes for my keywords?
Yes. Group peopleAreSaying[].link by host across a keyword set to get each platform's share of cards, and count how many keywords show the module at all.
More Google Search data
organic results
Ranked Google listings with titles, URLs and snippets, pages 1 through 10.
ads
The ads Google shows for a query, with block position, copy, destination and shopping-card prices.
People Also Ask
The People Also Ask questions Google clusters around a query, with their answers.
related searches
The related queries Google suggests at the foot of the page.
knowledge graph
The knowledge panel Google shows for an entity: description, website, profiles, key facts and Knowledge Graph ID.
local pack
Map-pack results with names, ratings and positions for local queries.
AI Overview
Google's AI Overview for a query: answer text, cited sources and citation pills, or null when absent.