# Perplexity Scraper & Perplexity Search API: Answers, Citations (`plainrows/perplexity-search-api`) Actor

Perplexity Search API and MCP tool: ask Perplexity Sonar (live web search) your questions, get each answer as JSON with citations, cited domains and an optional brand and domain check. A Perplexity scraper alternative. Pay per answer, plus a small start fee.

- **URL**: https://apify.com/plainrows/perplexity-search-api.md
- **Developed by:** [PlainRows](https://apify.com/plainrows) (community)
- **Categories:** AI, SEO tools, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $12.00 / 1,000 answer returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Perplexity Scraper & Perplexity Search API: Answers, Citations

Give it **a list of questions** and get one row per question: **Perplexity's answer (Markdown), every source it cites (rank, URL, title, domain), the cited domains in order, and the web searches it ran**. Add your brand and domain to see **whether Perplexity names your brand and cites your site, and at which rank**.

A **Perplexity scraper alternative**: no browser, no proxies, no CAPTCHAs, no Perplexity account. Questions run five at a time, a few seconds each. **You only pay for questions that got an answer**, plus a small start fee per run.

**Where the answers come from:** this Actor calls the **Perplexity Sonar API (model `sonar`, with live web search)** through a commercial data API. It does **not** read the perplexity.ai website. Answers from the API can differ from what you see in the perplexity.ai app (other models, Pro search, your account history and location all change the answer).

### Typical uses

- **AI search visibility (GEO / AEO)**: is your brand named, is your site cited, at which rank, for the questions your buyers ask?
- **Competitor research**: `citedDomains` shows which sites Perplexity relies on for your topic: the pages to beat or to get mentioned on.
- **Answers with sources for your app or agent**: Perplexity search as plain JSON, with the citations kept apart from the text.
- **Weekly reports**: schedule a run and send the rows to Google Sheets, Looker Studio, Slack, n8n, Make or Zapier.

### What you get for each question

| Field | Description |
|---|---|
| `question` | The question asked |
| `answer`, `answerLength` | Perplexity's answer as Markdown; its markers `[1]`, `[2]`... match `citations.rank` |
| `citations` | Each source: `rank`, `url`, `title`, `domain` (up to 30) |
| `citedDomains` | Domains cited, in order, without duplicates |
| `fanOutQueries` | Web searches Perplexity ran for the answer, when the API gives them |
| `webSearchUsed`, `model` | Whether the web was searched; the model that answered (`sonar`) |
| `brandMentioned` | Your brand appears as a whole word in the answer (only with `brand`) |
| `domainCited`, `domainCitationRank` | Your domain or a subdomain is cited, and its position among the cited domains, 1 = first (only with `domain`) |
| `inputTokens`, `outputTokens`, `maxOutputTokens` | Size of the question and the answer, and the bound you set |
| `found`, `status`, `message` | `ANSWERED` for a billed row; free rows say why: `EMPTY_ANSWER`, `UNREADABLE`, `REJECTED`, `PROVIDER_ERROR`, `NOT_CHECKED` |
| `country`, `checkedAt` | Country of the web search; when the question was asked |

Missing values are `null`, never guessed.

### Input

```json
{
  "queries": ["What is the best CRM for small businesses?", "Which project management tools do agencies recommend?"],
  "country": "US",
  "maxOutputTokens": 800,
  "brand": "Asana",
  "domain": "asana.com"
}
```

- **queries**: up to 200 questions per run, 1 to 500 characters each. Each question is one answer.
- **country** (default US): country whose web results Perplexity searches. US, GB, CA, AU, IE, IN, DE, AT, CH, FR, BE, ES, MX, IT, NL, PT, BR, PL, SE, JP.
- **maxOutputTokens** (default 800, 100 to 2,048): upper bound on the answer length. The price per answer does not change.
- **brand**, **domain** (optional): your brand name and your website for the visibility fields.

### Pricing

Pay per event, no subscription (see the **Pricing** tab for the current prices):

- **Answer returned**: once per question that got a non-empty answer.
- A small **Actor start** fee per run.

Empty answers, questions the data source refused or failed, and questions not reached (budget or timeout) get a free row with `found: false` and the reason. The run never spends more than the maximum cost you set.

**Free Apify plan:** each run asks the first 3 questions, so you can test the output. A paid Apify plan removes this limit.

### Good to know

- **Answers vary from one run to the next**, even for the same question: track trends over several runs, not a single answer.
- Answers come from the **Perplexity Sonar API with web search**, not from the perplexity.ai interface; they can differ from the app.
- For ChatGPT, Gemini and Google AI Mode answers, use [AI Visibility Tracker](https://apify.com/plainrows/ai-search-brand-visibility); for Google AI Overviews, [AI Overview Tracker](https://apify.com/plainrows/ai-overview-tracker).
- Not affiliated with Perplexity AI.

### Run summary

Each run stores a summary in the key-value store (`OUTPUT`): questions asked, empty answers, answers billed, and anything skipped because of the free-plan or budget limit.

### Use it from code, automations or AI agents

**API (one call, results returned directly):**

```bash
curl -X POST "https://api.apify.com/v2/acts/plainrows~perplexity-search-api/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries": ["What is the best CRM for small businesses?"]}'
```

**n8n, Make, Zapier:** use the Apify integration, pick `plainrows/perplexity-search-api`, schedule it and send the rows to Google Sheets or Slack.

**AI agents (MCP tool):** add `https://mcp.apify.com?tools=plainrows/perplexity-search-api` to Claude, Cursor or any MCP client, then ask "What does Perplexity answer to these questions, and which sites does it cite?".

### FAQ

**Is this a Perplexity search API?**
Yes: one call per list of questions, JSON rows back with the answer and its sources, usable from the Apify API, n8n, Make, Zapier or as an MCP tool.

**Is it the same as the perplexity.ai website?**
No. It uses the official Perplexity Sonar model with web search. The website may use other models and personal context, so its answer can differ.

**How do I check if Perplexity cites my site?**
Put your site in **domain**. `domainCited` and `domainCitationRank` answer it question by question; `citedDomains` shows who is cited instead.

**Do I pay for empty answers or errors?**
No. Only questions with a non-empty answer are charged, plus the start fee.

### More PlainRows tools

Same pay-per-result pricing, same clean JSON, built to chain together in n8n, Make, Zapier or AI agents.

- **SEO and keywords:** [Keyword Search Volume, CPC & Difficulty](https://apify.com/plainrows/keyword-search-volume) · [Keyword Planner Alternative (Bulk Search Volume & CPC)](https://apify.com/plainrows/keyword-planner-alternative) · [Bing Keyword Search Volume & CPC](https://apify.com/plainrows/bing-keyword-search-volume) · [Keyword Ideas Generator](https://apify.com/plainrows/keyword-ideas-generator) · [Google Autocomplete & People Also Ask](https://apify.com/plainrows/google-autocomplete-questions) · [Google Trends Explorer](https://apify.com/plainrows/google-trends-explorer) · [Google Trends Keyword Discovery (Rising & Related)](https://apify.com/plainrows/google-trends-keyword-discovery) · [Website Organic Traffic & Top Keywords](https://apify.com/plainrows/domain-seo-overview) · [SEO Competitors & Keyword Gap Finder](https://apify.com/plainrows/seo-competitors-keyword-gap) · [PPC Competitor Keywords (SpyFu Alternative)](https://apify.com/plainrows/ppc-competitor-keywords) · [Bulk Domain Authority Checker](https://apify.com/plainrows/domain-authority-checker) · [Backlink Checker](https://apify.com/plainrows/backlink-checker) · [Broken Link Checker](https://apify.com/plainrows/broken-link-checker) · [AI Search Visibility Tracker (ChatGPT, Gemini, AI Mode)](https://apify.com/plainrows/ai-search-brand-visibility) · [Google Maps Rank Tracker (Geo-Grid Local SEO)](https://apify.com/plainrows/google-maps-rank-tracker)
- **Leads and companies:** [Google Maps Scraper](https://apify.com/plainrows/google-maps-businesses) · [Google Maps Email Extractor](https://apify.com/plainrows/google-maps-email-extractor) · [Google Maps Businesses Without Website](https://apify.com/plainrows/google-maps-no-website-leads) · [Yellow Pages Australia Scraper](https://apify.com/plainrows/yellowpages-au-scraper) · [Website Technology Checker](https://apify.com/plainrows/website-tech-stack) · [Website Email Extractor](https://apify.com/plainrows/website-email-extractor) · [Contact Details Scraper (Emails, Phones, Socials)](https://apify.com/plainrows/contact-details-scraper) · [ATS Jobs Scraper (Workday, Greenhouse, Lever, Ashby)](https://apify.com/plainrows/ats-job-postings) · [Workday Jobs Scraper](https://apify.com/plainrows/workday-jobs-scraper) · [Greenhouse Jobs Scraper](https://apify.com/plainrows/greenhouse-jobs-scraper) · [Lever Jobs Scraper](https://apify.com/plainrows/lever-jobs-scraper) · [Ashby Jobs Scraper](https://apify.com/plainrows/ashby-jobs-scraper) · [Google Jobs Scraper](https://apify.com/plainrows/google-jobs-scraper) · [Reed.co.uk Jobs Scraper (UK)](https://apify.com/plainrows/reed-jobs-scraper) · [jobs.ch & jobup.ch Jobs Scraper (Switzerland)](https://apify.com/plainrows/jobs-ch-scraper) · [Arbeitsagentur Jobs Scraper (Germany)](https://apify.com/plainrows/arbeitsagentur-jobs-scraper) · [Gupy Jobs Scraper (Brazil)](https://apify.com/plainrows/gupy-jobs-scraper) · [Catho Jobs Scraper (Brazil)](https://apify.com/plainrows/catho-jobs-scraper) · [Vagas.com.br Jobs Scraper (Brazil)](https://apify.com/plainrows/vagas-jobs-scraper) · [Jobs.cz Scraper (Czech Republic)](https://apify.com/plainrows/jobs-cz-scraper) · [Google Ads Scraper (Transparency Center)](https://apify.com/plainrows/google-ads-transparency) · [Company Registry Lookup (SIRENE, LEI, Brreg)](https://apify.com/plainrows/company-registry-lookup) · [Public Tenders Search (EU TED & UK)](https://apify.com/plainrows/public-tenders-search)
- **E-commerce and travel:** [Amazon Product Search Scraper](https://apify.com/plainrows/amazon-product-search) · [Google Shopping Prices Scraper](https://apify.com/plainrows/google-shopping-prices) · [Google Hotels Prices Scraper](https://apify.com/plainrows/google-hotels-prices) · [Google Hotels Scraper](https://apify.com/plainrows/google-hotels-scraper) · [Tripadvisor Reviews Scraper](https://apify.com/plainrows/tripadvisor-reviews) · [Trustpilot Reviews Scraper](https://apify.com/plainrows/trustpilot-reviews)
- **Marketplaces and classifieds:** [AliExpress Scraper](https://apify.com/plainrows/aliexpress-scraper) · [Kleinanzeigen Scraper (Germany)](https://apify.com/plainrows/kleinanzeigen-scraper) · [AutoScout24 Scraper (Cars, Europe)](https://apify.com/plainrows/autoscout24-scraper) · [Kijiji Scraper (Canada)](https://apify.com/plainrows/kijiji-scraper) · [Marktplaats Scraper (Netherlands)](https://apify.com/plainrows/marktplaats-scraper) · [Property Finder Scraper (UAE)](https://apify.com/plainrows/propertyfinder-scraper) · [Redfin Scraper (US Homes for Sale)](https://apify.com/plainrows/redfin-scraper) · [Otomoto Scraper (Polish Car Listings)](https://apify.com/plainrows/otomoto-scraper) · [Otodom Scraper (Poland Property)](https://apify.com/plainrows/otodom-scraper) · [Imovirtual Scraper (Portugal Property)](https://apify.com/plainrows/imovirtual-scraper) · [Standvirtual Scraper (Portugal Cars)](https://apify.com/plainrows/standvirtual-scraper) · [Immoweb Scraper (Belgium Property)](https://apify.com/plainrows/immoweb-scraper) · [Blocket Scraper (Sweden)](https://apify.com/plainrows/blocket-scraper) · [FINN.no Scraper (Norway)](https://apify.com/plainrows/finn-scraper) · [coches.net Scraper (Spain Cars)](https://apify.com/plainrows/coches-net-scraper) · [2dehands Scraper (Belgium)](https://apify.com/plainrows/2dehands-scraper) · [Storia Scraper (Romania Property)](https://apify.com/plainrows/storia-scraper) · [Autovit Scraper (Romania Cars)](https://apify.com/plainrows/autovit-scraper) · [FINN.no Car Scraper (Norway Cars)](https://apify.com/plainrows/finn-cars-scraper) · [DBA Scraper (Denmark)](https://apify.com/plainrows/dba-scraper) · [Tori.fi Scraper (Finland)](https://apify.com/plainrows/tori-scraper)
- **Content and media:** [Google News Scraper](https://apify.com/plainrows/google-news-scraper) · [YouTube Search Scraper](https://apify.com/plainrows/youtube-search-scraper) · [YouTube Search API (JSON)](https://apify.com/plainrows/youtube-search-api) · [YouTube Comments Scraper](https://apify.com/plainrows/youtube-comments-scraper) · [Google Images Scraper](https://apify.com/plainrows/google-images-scraper) · [Website Screenshot API](https://apify.com/plainrows/website-screenshot) · [Google Maps Reviews Scraper](https://apify.com/plainrows/google-maps-reviews) · [Google Reviews Scraper](https://apify.com/plainrows/google-reviews-scraper) · [App Store & Google Play Reviews Scraper](https://apify.com/plainrows/app-reviews-scraper) · [App Store & Google Play App Details Scraper](https://apify.com/plainrows/app-details-scraper) · [Google Play Reviews Scraper](https://apify.com/plainrows/google-play-reviews-scraper) · [App Store Reviews Scraper](https://apify.com/plainrows/app-store-reviews-scraper)

### Support

Missing a field or found a bug? Open an issue on this page. Issues are read and answered.

# Actor input Schema

## `queries` (type: `array`):

One question per line, as you would type it in Perplexity. Up to 200 questions per run, 1 to 500 characters each. Each question is one Perplexity Sonar answer with web search.

## `country` (type: `string`):

Country whose web results Perplexity searches (two-letter ISO code).

## `maxOutputTokens` (type: `integer`):

Upper bound on the length of each answer, in tokens (about 0.75 words each). 800 fits a detailed answer; the price per answer does not change.

## `brand` (type: `string`):

Your brand, e.g. "Asana". Adds brandMentioned: the name appears as a whole word in the answer (case-insensitive).

## `domain` (type: `string`):

Your website, e.g. "asana.com". Adds domainCited and domainCitationRank (position among the cited domains, 1 = first). Subdomains count; "https://", "www." and paths are ignored.

## Actor input object example

```json
{
  "queries": [
    "What is the best CRM for small businesses?",
    "Which project management tools do agencies recommend?"
  ],
  "country": "US",
  "maxOutputTokens": 800
}
```

# Actor output Schema

## `results` (type: `string`):

No description

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

No description

# 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 = {
    "queries": [
        "What is the best CRM for small businesses?",
        "Which project management tools do agencies recommend?"
    ],
    "country": "US",
    "maxOutputTokens": 800
};

// Run the Actor and wait for it to finish
const run = await client.actor("plainrows/perplexity-search-api").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 = {
    "queries": [
        "What is the best CRM for small businesses?",
        "Which project management tools do agencies recommend?",
    ],
    "country": "US",
    "maxOutputTokens": 800,
}

# Run the Actor and wait for it to finish
run = client.actor("plainrows/perplexity-search-api").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 '{
  "queries": [
    "What is the best CRM for small businesses?",
    "Which project management tools do agencies recommend?"
  ],
  "country": "US",
  "maxOutputTokens": 800
}' |
apify call plainrows/perplexity-search-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,plainrows/perplexity-search-api"
        }
    }
}
```

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/sLruEANeTEpAe5HL4/builds/3HIQ4Z3rso5PQzVvU/openapi.json
