# People Also Ask Scraper - Google PAA Questions & Answers (`santhej/people-also-ask-scraper`) Actor

Extract Google's People Also Ask questions with their answers, source pages and related searches for any keyword. Rebuilds the full question tree, flags AI-answered questions, and never bills for a keyword with no PAA box. Bulk keywords, 18 countries, JSON/CSV.

- **URL**: https://apify.com/santhej/people-also-ask-scraper.md
- **Developed by:** [Santhej Kallada](https://apify.com/santhej) (community)
- **Categories:** SEO tools, Marketing
- **Stats:** 8 total users, 8 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## People Also Ask Scraper — Google PAA Questions & Answers

**Pull every "People Also Ask" question Google shows for your keywords — with the answer Google displays, the exact page it took that answer from, and the related searches — as clean JSON or CSV.**

The People Also Ask box is Google's own research department, published in public. For any topic it tells you precisely what searchers want to know next, in their own words, and which page currently owns each answer. That is a content brief, an FAQ section, and a featured-snippet hit list in one place — if you can get it out of the SERP at scale.

This Actor searches Google for each keyword, expands the PAA box two levels deep (the follow-up questions Google loads behind the first four), and returns one row per question: the question text, the answer snippet Google shows, and the source page's URL, domain and title. Related searches from the bottom of the page are included as a bonus row per keyword.

### What you get per question

| Field | What it tells you |
|---|---|
| `question` | The question exactly as Google phrases it |
| `parent_question` | The question this one was expanded from, when Google reports it — lets you rebuild the question tree |
| `answer_type` | `web` when Google answers with a classic page snippet, `ai_overview` when it answers with a generated AI Overview |
| `answer_text` | The answer snippet Google displays when the question is expanded |
| `answer_source_url` | The page Google pulled that answer from — the page to beat |
| `answer_source_domain` | Its domain, ready for competitor tallies |
| `answer_source_title` | The source page's title |
| `position` | The question's order in the PAA box (1-based) |
| `related_searches` | One extra row per keyword with Google's related-searches list |

A run summary is written to the key-value store with total questions found, the average per keyword, and which keywords showed no PAA box at all.

**About `answer_type`:** on many informational topics Google now answers PAA questions with a
generated AI Overview instead of a page snippet. Google does not expose that generated text, so
those rows carry `answer_type: "ai_overview"` with an empty `answer_text` — the question, its
position and the tree are still fully captured. Commercial and product questions usually still
get classic `web` answers with the full snippet and source page.

### Use cases

- **FAQ sections & schema** — ship FAQPage markup built from the questions Google already asks for your topic.
- **Content briefs** — every H2 your article needs, with the answer each section must beat.
- **Featured-snippet targeting** — see which page owns each answer today, then write the better one.
- **Keyword expansion** — every question and related search is a long-tail keyword with proven demand.
- **Chatbot & AI training data** — real user questions with sourced answers, in bulk.
- **Client reporting** — a dated record of who owns the question space on every topic you manage.

### Pricing

Pay per event. No monthly fee, no setup fee, no minimum.

| Event | Price |
|---|---|
| Actor start | $0.001 per run |
| Keyword scraped | **$0.01 per keyword** |

You pay per **keyword**, not per question. A keyword typically returns 6–15 expanded questions, so a 25-keyword run costs **$0.251** and usually yields 150+ questions complete with answers and source pages. Related searches are included at no extra charge.

### Input example

```json
{
  "keywords": [
    "best crm for small business",
    "crm pricing",
    "how to choose a crm"
  ],
  "countryCode": "us",
  "languageCode": "en",
  "includeRelatedSearches": true
}
```

### Output example

```json
{
  "record_type": "paa_question",
  "keyword": "best crm for small business",
  "question": "What is the most popular CRM for small businesses?",
  "answer_text": "HubSpot is one of the most widely adopted CRMs for small businesses thanks to its free tier ...",
  "answer_source_url": "https://www.example.com/best-crm-small-business",
  "answer_source_domain": "example.com",
  "answer_source_title": "The 10 Best CRMs for Small Business (2026 Review)",
  "position": 1,
  "country": "us",
  "language": "en",
  "checked_at": "2026-08-24T09:14:00.000Z"
}
```

And once per keyword, when enabled:

```json
{
  "record_type": "related_searches",
  "keyword": "best crm for small business",
  "related_searches": [
    "best free crm for small business",
    "best crm for small business 2026",
    "simple crm for small business"
  ],
  "country": "us",
  "checked_at": "2026-08-24T09:14:00.000Z"
}
```

### FAQ

**Do I need an API key?** No. Everything is handled for you — just add keywords and run.

**How many questions per keyword?** Google renders four initially; this Actor expands the box two clicks deep, which typically surfaces 6–15 questions per keyword. Broad topics return more, narrow ones fewer.

**Why did a keyword return no questions?** Google does not show a PAA box on every search — navigational and very niche queries often have none. Those keywords are listed under `keywords_with_no_paa` in the run summary so you can tell "no box" apart from an error.

**Is `answer_text` the full page?** It is the snippet Google actually displays in the expanded question — the text you need to outdo to win the slot. Use `answer_source_url` to read the full page.

**Which countries work?** 18 countries are selectable, with the United States as the default. Questions and answers are localized per market.

**Can I export it?** Yes — JSON, CSV, Excel, or straight into n8n, Make or Zapier via the Apify API.

### More Google SERP intelligence

- [Google AI Overview Tracker](https://apify.com/santhej/google-ai-overview-tracker) — does Google's AI Overview answer your keywords, and does it cite you?
- [Google AI Mode Tracker](https://apify.com/santhej/google-ai-mode-tracker) — the same visibility check for Google's conversational AI tab.
- [AI Citation Gap Finder](https://apify.com/santhej/ai-citation-gap-finder) — which domains Google's AI cites across your whole keyword set, and where competitors are cited but you are not.
- [Keyword Clustering Tool](https://apify.com/santhej/keyword-clustering-tool) — group your expanded question list into content clusters automatically.

***

*Tags: people also ask scraper, paa scraper, people also ask api, google paa, google questions scraper, question research, question keywords, faq generator, faq schema seo, featured snippet tool, related searches scraper, serp api, content brief generator, content research tool, seo questions, long tail keywords*

# Actor input Schema

## `keywords` (type: `array`):

The Google searches to pull People Also Ask questions for. Topical and question-style keywords ("best crm for small business", "how to start a podcast") return the richest boxes. One row of output per question found.

## `includeRelatedSearches` (type: `boolean`):

Also output one row per keyword with Google's "related searches" list from the bottom of the results page. It comes from the same search request, so it does not change the price.

## `countryCode` (type: `string`):

Country to search from. People Also Ask questions and their answers vary by market, so pick the one your audience searches in.

## `languageCode` (type: `string`):

Two-letter interface language code (ISO 639-1), e.g. 'en', 'de', 'es'. Should match the language of your keywords.

## Actor input object example

```json
{
  "keywords": [
    "best crm for small business"
  ],
  "includeRelatedSearches": true,
  "countryCode": "us",
  "languageCode": "en"
}
```

# Actor output Schema

## `dataset` (type: `string`):

One row per query, plus aggregate rows where applicable.

## `summary` (type: `string`):

Coverage, citation rates, billing breakdown and net margin for the run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keywords": [
        "best crm for small business"
    ],
    "countryCode": "us",
    "languageCode": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("santhej/people-also-ask-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keywords": ["best crm for small business"],
    "countryCode": "us",
    "languageCode": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("santhej/people-also-ask-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keywords": [
    "best crm for small business"
  ],
  "countryCode": "us",
  "languageCode": "en"
}' |
apify call santhej/people-also-ask-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,santhej/people-also-ask-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Lw5j4Lbhc3tsDtNq3/builds/8nFtegTI25QY1bZal/openapi.json
