Perplexity AI Answer Scraper
Under maintenancePricing
from $5.00 / 1,000 answers
Perplexity AI Answer Scraper
Under maintenanceSubmits 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.
Maintained by CommunityActor 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:
- impersonates the Perplexity Android client against
POST /rest/sse/perplexity_ask, - streams the answer, and
- 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
| Field | Type | Notes |
|---|---|---|
queries | string list | One or more questions. Each produces one row. |
sources | multi-select | Corpora to search: web, scholar, social, video, image. Default [web]. |
maxSources | integer | Cap citations kept per answer. 0 = all. |
maxAttempts | integer | Tries per query (fresh exit IP + identity each), before an error row. Default 8, max 20. |
language | string | Answer language (BCP-47 code). |
timezone | string | IANA timezone for time-relative answers. |
proxyGroup | select | Apify proxy group: RESIDENTIAL (default) or UNBLOCKER. |
proxyConfiguration | proxy | Optional 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 build | answers |
|---|---|
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:
| headers | User-Agent | answers |
|---|---|---|
2.99.0 | 2.98.0 | 2 / 5 |
2.98.0 | 2.99.0 | 5 / 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.