Perplexity AI Answer Scraper avatar

Perplexity AI Answer Scraper

Under maintenance

Pricing

from $5.00 / 1,000 answers

Go to Apify Store
Perplexity AI Answer Scraper

Perplexity AI Answer Scraper

Under maintenance

Submits natural-language queries to Perplexity's answer engine (via the reversed Perplexity Android API) and returns the model's answer text plus its cited web sources. Anonymous guest tier, no account needed.

Pricing

from $5.00 / 1,000 answers

Rating

0.0

(0)

Developer

R.L.

R.L.

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

4

Monthly active users

2 hours ago

Last modified

Categories

Share

Submit natural-language questions to Perplexity and get back the model's answer text and the web sources it cited — as structured dataset rows. The actor talks to Perplexity's mobile answer API directly (reversed from the ai.perplexity.app.android app), using the app's anonymous guest tier, so no Perplexity account or API key is required.

What it does

For each query you provide, the actor:

  1. impersonates the Perplexity Android client against POST /rest/sse/perplexity_ask,
  2. streams the answer, and
  3. pushes one dataset row with the answer and its citations.

A fresh exit IP is drawn per attempt, so a walled/rate-limited exit is retried rather than dropped; only a genuine per-query failure emits an error field.

Input

FieldTypeNotes
queriesstring listOne or more questions. Each produces one row.
sourcesmulti-selectCorpora to search: web, scholar, social, video, image. Default [web].
maxSourcesintegerCap citations kept per answer. 0 = all.
maxAttemptsintegerTries per query (fresh exit IP + identity each), before an error row. Default 8, max 20.
languagestringAnswer language (BCP-47 code).
timezonestringIANA timezone for time-relative answers.
proxyGroupselectApify proxy group: RESIDENTIAL (default) or UNBLOCKER.
proxyConfigurationproxyOptional custom/own proxy servers. Leave empty to use proxyGroup.

Example input

{
"queries": [
"What is the capital of Lithuania?",
"Who won the 2022 FIFA World Cup?"
],
"sources": ["web"],
"proxyGroup": "RESIDENTIAL",
"maxAttempts": 8
}

Output

Each dataset row:

{
"query": "What is the capital of Lithuania?",
"answer": "The capital of Lithuania is **Vilnius**. ...",
"source_count": 10,
"sources": [
{ "name": "Vilnius - Wikipedia", "url": "https://en.wikipedia.org/wiki/Vilnius", "snippet": "..." }
],
"mode": "concise",
"backend_uuid": "…"
}

If a single query fails, its row carries an error field and the batch continues.

What decides whether an answer comes back

Perplexity can answer an anonymous ask with Sign up and repeat your request. instead of a result. The deciding factor is the app build this actor impersonates, carried in the User-Agent — not the exit IP. Holding everything else constant and asking the same question once per freshly drawn residential exit:

User-Agent buildanswers
2.98.0 / 260653 (stale)3 / 10
2.99.0 / 260659 (current)10 / 10

and the version is read from the User-Agent specifically, not from the X-App-Version / X-Client-Version headers, which turn out to be cosmetic:

headersUser-Agentanswers
2.99.02.98.02 / 5
2.98.02.99.05 / 5

So when the wall rate climbs, the app build is what has gone stale, and the actor needs a new release rather than a different proxy. This is maintained on our side; if you see a run go mostly-walled, that is a bug to report, not a proxy setting to tune.

Why a proxy is still used

A residential-grade proxy spreads the request rate across addresses so no single exit gets throttled, and it keeps the actor off Apify's shared datacenter ranges.

RESIDENTIAL is the default proxy group. UNBLOCKER (Apify Unblocker) is also selectable — it automatically handles anti-bot challenges/CAPTCHAs and rotates the exit IP on every request — but it costs extra Apify proxy units (10 units per successful request) on top of the $0.005 answer charge, and in our testing it did not outperform residential here. A custom/own proxy can be supplied through proxyConfiguration (proxyUrls).

How exit-IP rotation works

Each query — and each retry of a walled/empty answer — is handled by a brand-new client: a fresh impit client (new connection pool, new TCP connection) wired to a freshly drawn proxy URL, so no keep-alive connection survives a proxy change. For RESIDENTIAL a unique session id (proxy.new_url(session_id=<uuid>)) guarantees a distinct sticky exit per attempt; UNBLOCKER has no session model, so its new_url() is called plainly and relies on Unblocker's automatic per-request rotation. A brand-new visitor identity (frontend_uuid + android_device_id) is minted per attempt, and the run logs the actual exit IP per attempt (via api.apify.com/v2/browser-info, hit through the same client) so rotation is observable in the Apify run logs. A small randomized backoff (1–3 s) is applied between queries and before each retry, up to maxAttempts tries per query (default 8, max 20).

Pricing

Pay-per-event: $0.005 per answer (one charge per query answered). Citations are included in that charge. The Unblocker proxy group additionally costs Apify proxy units (10 per successful request); RESIDENTIAL consumes proxy units at the standard residential rate.

Notes & limitations

  • Guest tier: answers come from Perplexity's default model for anonymous clients; account-only features (custom models, Pro search history, file upload) are out of scope.
  • The app ships Play Integrity attestation (attest.perplexity.ai → X-Attestation-Token), but the anonymous ask is served without it, so this actor sends no attestation token.
  • This is an unofficial client and is not affiliated with or endorsed by Perplexity AI.