Apify vs AnswerLine
Apify publishes its own actors for ChatGPT, Perplexity, Gemini, Copilot, Google AI Mode, AI Overviews and Google Search, priced per event on top of a platform plan. This API is one request contract across AI assistants, Google Search and Google News, priced in credits.
Coverage
| Apify | AnswerLine | |
|---|---|---|
| ChatGPT | Yes, Apify's ChatGPT Search Scraper actor: answer text, sources, query fan-out and widgets. | Yes, POST /v1/monitor/chatgpt. |
| Perplexity | Yes, Perplexity Search Scraper actor: answer text and sources; images and related questions optional. | Paused, coming back soon. |
| Gemini | Yes, Gemini Search Scraper actor: answer and cited sources. | Yes, POST /v1/monitor/gemini. |
| Microsoft Copilot | Yes, Microsoft Copilot Search Scraper actor. | Paused, coming back soon. |
| Grok | No Apify-published actor in the Apify Store (checked 2026-09-17); community actors only. | Paused, coming back soon. |
| Google AI Mode | Yes, Google AI Mode Scraper actor, or an add-on of the Google Search actor. | Yes, POST /v1/monitor/aimode. |
| Google AI Overview | Yes, Google AI Overviews Scraper actor, or an add-on of the Google Search actor. | Supported by the API. +35 credits, added once per request. |
| Google Search | Yes, Google Search Results Scraper actor. | Supported by the API. |
| Google News | No Apify-published actor in the Apify Store (checked 2026-09-17); community actors only. | Supported by the API. |
Apify's platform plans
| Plan | Monthly | Prepaid usage | Store price tier |
|---|---|---|---|
| Free | $0 | $5 | No store discount |
| Starter | $19 | $19 | Bronze |
| Scale | $199 | $199 | Silver |
| Business | $999 | $999 | Gold |
Apify's event prices for these actors
| Event | Starter (Bronze) | Business (Gold) |
|---|---|---|
| Google Search results page | $0.0025 | $0.0018 |
| Google Search run start | $0.001 | $0.001 |
| AI Overview | $0.002 | $0.001 |
| AI Mode answer | $0.005 | $0.002 |
| ChatGPT, Gemini or Copilot answer | $0.005 | $0.003 |
| Perplexity answer | $0.013 | $0.009 |
Price per request
| Request | AnswerLine credits | AnswerLine price | Apify |
|---|---|---|---|
| ChatGPT | 7 | $0.001 | $0.005 (Business: $0.003) |
| Perplexity (paused, coming back soon) | 56 | $0.006 | $0.013 (Business: $0.009) |
| Gemini | 5.6 | $0.001 | $0.005 (Business: $0.003) |
| Microsoft Copilot (paused, coming back soon) | 90 | $0.009 | $0.005 (Business: $0.003) |
| Grok (paused, coming back soon) | 56 | $0.006 | No Apify-published actor listed |
| Google AI Mode | 70 | $0.007 | $0.005 (Business: $0.002) |
| Google AI Overview | 70 | $0.007 | $0.0025 per page + $0.002 per AI Overview |
| Google Search | 35 | $0.004 | $0.0025 per results page + $0.001 per run |
| Google News | 35 | $0.004 | No Apify-published actor listed |
How requests, geo, billing and delivery work
| Apify | AnswerLine | |
|---|---|---|
| Parsing depth | Dataset items per actor: text and sources for AI answers (ChatGPT adds query fan-out and widgets); organic and paid results, People Also Ask and related queries for Google. | One JSON schema per engine in the OpenAPI document. Assistants: answer text, markdown and sources, plus the engine-specific fields each schema defines. Google Search: organic results, ads, People Also Ask, local pack, knowledge graph and the AI Overview. Google News: the news results with their source, date and position. |
| Geo targeting | Google Search actor: country, search and interface language, UULE location and mobile results. The standalone ChatGPT, Gemini, AI Mode and AI Overview actors' input schemas list queries only (checked 2026-09-17). | country on every engine: ChatGPT, Gemini, AI Mode and Google Search answer from 213 countries, Copilot takes any country, and Google News the 71 countries with a Google News edition. Google Search and AI Mode also take a city, and Gemini a US state. |
| Billing on failures | AI answer events are charged when an answer is returned and Google pages when successfully scraped; run-start events are charged per run. | A failed request or task is not charged, and neither is a queued task you clear before it starts. |
| Async and webhooks | Synchronous run-and-get-items endpoint (408 after 300 s), or start a run with ad-hoc webhooks on run events such as succeeded, failed and timed out. | Synchronous monitor calls, or async tasks and batches with idempotency keys, polled or delivered to a signed webhook with up to 10 delivery attempts. |
Where Apify fits
- Apify's store lists thousands of actors beyond search and AI answers, so one account also covers maps, social and e-commerce data.
- The Google Search actor can attach AI Overview, AI Mode, ChatGPT, Perplexity, Copilot and Gemini results, plus lead enrichment, to one run.
- Schedules, storage, proxies, CSV and Excel exports and Zapier and Make integrations come with the account.
This API fits when you measure AI answers across engines on a schedule and want one request schema, sync or async on every engine, and per-task webhooks. The guide below covers the migration.
Which platform fits
Apify earns its place when AI answers are one input among many web data jobs you already run there, when you want one Google Search run to carry AI Overview, AI Mode and assistant add-ons together, or when you need an actor for a site no search or AI API covers.
This API fits when AI answers are the product input itself: a prompt set that runs across ChatGPT, Gemini, Copilot, Google Search, Google AI Mode and Google News on a schedule, with answers and sources in documented fields.
If you already run Apify for maps, social or e-commerce data, keep those actors and move only the AI answer jobs.
Actors versus endpoints
Apify is a platform for running programs. An actor is a packaged scraper with its own input schema, output dataset and pricing events. Running one means starting a run, waiting for it to finish and reading the dataset items it produced. Each engine is a separate actor maintained on its own schedule, with its own input fields: the Google Search actor takes countryCode, languageCode and locationUule; the standalone ChatGPT actor’s input schema takes queries and nothing else (checked 2026-09-17).
This API is a request/response contract. Each engine has one endpoint, POST /v1/monitor/<engine>, and one response schema documented in the OpenAPI document. The same request can run synchronously or as an async task, and every task can carry its own idempotency key and webhook. There is no run, dataset or actor version to manage.
- Unit of work. On Apify a run can hold many queries and its cost has a run-start event plus a per-answer event. Here one request is one answer, and its cost is known before you send it.
- Schema. Actor outputs are defined by each actor’s README and dataset. Here every engine’s fields are in one OpenAPI document.
- Markets. On Apify, geo options vary by actor. Here ChatGPT, Gemini, Google Search and Google AI Mode answer from 213 countries, and Gemini also takes a US state; Copilot takes any country, Google Search and AI Mode also take
locationoruuleandhl, and Google News takes the 71 countries with a Google News edition plushl.
Migration: the same job, two requests
The job: ask ChatGPT “best CRM for a 10-person agency” and store the answer and its sources.
On Apify
Apify’s API reference documents a synchronous endpoint that runs an actor and returns its dataset items. The body is the actor’s input; for the ChatGPT Search Scraper the input schema’s field is queries, a newline-separated string (checked 2026-09-17 on docs.apify.com and the actor’s input schema).
curl -X POST "https://api.apify.com/v2/acts/apify~chatgpt-search-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "queries": "best CRM for a 10-person agency" }'
The response is an array of dataset items, one per query, with query, text, sources, queryFanOut and widgets. Apify’s docs say a synchronous run that takes longer than 300 seconds returns a 408, after which you read the dataset of the still-running run.
On this API
curl -X POST https://api.answerline.dev/v1/monitor/chatgpt \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "best CRM for a 10-person agency",
"country": "US",
"include": { "markdown": true }
}'
The response is { "success": true, "result": { ... } }. The fields you would have mapped from the actor output:
| Apify ChatGPT actor | This API |
|---|---|
query |
the prompt you sent |
text |
result.text (and result.markdown with include.markdown) |
sources[] (title, url) |
result.sources[] (label, url, position, description) |
queryFanOut |
result.searchQueries (with include.searchQueries) |
widgets |
result.shoppingCards, result.entities (result.inlineProducts is in the contract but empty today) |
The same request in TypeScript with the SDK:
import { Client } from "@answerline/sdk";
const client = new Client({ apiKey: process.env.API_KEY!, baseUrl: "https://api.answerline.dev" });
const { result } = await client.chatgpt({
prompt: "best CRM for a 10-person agency",
country: "US",
include: { markdown: true },
});
for (const s of result.sources ?? []) console.log(s.position, s.url);
Replacing scheduled Apify runs
Most visibility pipelines don’t call one prompt at a time; they run a prompt set every day or week. On Apify that is typically a schedule that starts a run, plus an ad-hoc webhook on ACTOR.RUN.SUCCEEDED that tells your service to read the dataset.
Here the equivalent is a batch of async tasks with a webhook per task:
import os, requests
prompts = ["best CRM for a 10-person agency", "HubSpot or Pipedrive for agencies?"]
day = "2026-09-17"
tasks = [
{
"taskType": "CHATGPT",
"payload": {"prompt": p, "country": "US"},
"idempotencyKey": f"crm-{i}-US-{day}",
"webhook": {"url": "https://your-app.com/hooks/answers"},
}
for i, p in enumerate(prompts)
]
r = requests.post(
"https://api.answerline.dev/v1/async/task/batch",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json=tasks,
timeout=60,
)
for item in r.json()["results"]:
if not item["success"]:
print(tasks[item["index"]]["idempotencyKey"], item["error"]["code"])
Differences to plan for:
- Granularity. An Apify webhook fires per run; here a delivery arrives per task, carrying the task’s status, its credits and the engine result. Your receiver stores one answer per delivery instead of paging a dataset.
- Retries you control. The idempotency key is derived from prompt, market and day, so resubmitting a batch after a timeout never runs a task twice: a repeat answers
RESOURCE_ALREADY_EXISTSfor that item. See async tasks. - Signatures. Deliveries carry a
Webhook-Signatureheader (HMAC-SHA256 over timestamp and raw body). Verify it before trusting the payload; webhooks has the code. - Batch limit. One batch call takes up to 500 tasks. Larger prompt sets are several batch calls.
Modeling cost
Apify pricing has three layers: the platform plan (which sets the store price tier), the per-event price of each actor at that tier, and any run-start events. The event price for the same ChatGPT answer differs between Apify’s Starter and Business tiers, and its Free plan lists AI answer events at $0.20 each, so trial runs on the Free plan are not a guide to production cost.
This API has two layers: credits per request and the credit price of your plan. A ChatGPT task costs 7 credits, plus 6.7 once if you add shopping or the raw response; a synchronous call adds 6.7 more. Other engines are on pricing and in credits.
To compare for your own workload:
- List prompts × engines × markets × runs per month.
- For Apify, multiply the answer count per engine by that engine’s event price at the tier your plan gives you, then add run-start events for the number of runs you start.
- For this API, multiply the answer count per engine by credits per request, and pick the smallest plan whose monthly credits cover the total.
- Add the engineering time for anything one side does not return and you would have to derive, such as citation positions.
A two-week overlap
Run the same prompts, markets and schedule on both sides before changing anything, writing into one table with a provider column.
- Pick prompts for engines both sides cover.
- Keep your Apify schedule unchanged.
- Submit matching tasks here with a webhook, using a key built from prompt, engine, market and day.
- Store both in one table; on Apify note which runs timed out and which queries went to the errors dataset.
At the end, four numbers decide it:
- Completion rate per engine: answers you can use divided by answers you asked for.
- Market effect: answers here in the markets you report on versus the standalone Apify AI actors, whose input schemas list no market field (checked 2026-09-17).
- Cited domains overlap per prompt, read against how much the same prompt’s domain set moves between two days on one provider.
- Cost per usable answer at your Apify plan tier, including run-start events.
Retire one actor at a time, and keep the overlap rows. The run-start event is the reason not to rush: a half-migrated Apify schedule still pays to start runs that now carry two queries instead of twenty, so move the actors with the most runs per day first and leave the cheapest one running longest.
What changes in your error handling
On Apify, failure is a run-level event. A run times out as a whole, queries that return nothing land in the separate errors dataset on the ChatGPT and AI Mode actors, and the run-start event is charged either way. Here the unit is the task: a failure is one missing answer rather than a partly usable run, and a FAILED task is not charged.
That changes the retry unit in your code. Instead of rerunning a run and paying its start event again, branch on the code in the error body and resubmit only the tasks that failed, with a new idempotency key. Authentication and errors lists every code and which are safe to retry; rate limits covers the 429s and the Retry-After header.
Before you move an actor
- Engines. Do you need Google News? Apify’s store lists no Apify-published actor for it (checked 2026-09-17); this API has an endpoint for it.
- Markets. Which markets do answers need to come from? Check each actor’s input schema; here ChatGPT, Gemini, Google Search and Google AI Mode answer from 213 countries, and Gemini also takes a US state; Copilot takes any country, and Google News the 71 countries with a Google News edition.
- Fields. Do you store citation positions, shopping cards or brand entities? Map each to a documented output field before migrating.
- Scheduling. Is the schedule already in your own job runner? Then per-task webhooks map onto it one task at a time, where run-level webhooks report a whole run.
- Other data. Do you depend on Apify actors outside search and AI answers? Keep those; move only the AI answer jobs.
- Failure semantics. Decide how you treat an answer that did not come back. Here a failed task has status
FAILEDand is not charged; on Apify, check each actor’s event definitions and the run-start charge.
Pitfalls when moving
- Joining on the query string. Apify datasets return
query; tasks here return your idempotency key and task id. Keep your own prompt id in the key, as in the batch example, and join on that. - Assuming one answer per run. A run-level retry on Apify reruns every query in it. Here retry only the tasks that failed; completed ones are final.
- Forgetting the synchronous surcharge. Synchronous calls cost more than tasks. Use them for interactive lookups; use tasks for anything scheduled.
- Unverified webhook payloads. Apify ad-hoc webhooks and this API’s deliveries are different formats. Rewrite the receiver instead of adapting the old one, and deduplicate by
task.id, since the same delivery can arrive more than once. - Mixing engines in one parser. Each engine’s result has its own schema. ChatGPT defines
searchQueries; Gemini’s schema has no such field. Read the engine pages before writing a shared mapper.
Start with the quickstart, or read the ChatGPT engine page for the full result schema.
Apify is a trademark of its owner. AnswerLine is not affiliated with or endorsed by Apify.
Questions
Does Apify have actors for ChatGPT, Perplexity and Google AI Mode?
Yes. As checked on 2026-09-17, Apify publishes its own ChatGPT Search Scraper, Perplexity Search Scraper, Gemini Search Scraper, Microsoft Copilot Search Scraper, Google AI Mode Scraper and Google AI Overviews Scraper, priced per event. Its store lists no Apify-published actor for Grok or Google News.
Can I target a country with Apify's AI answer actors?
The Google Search Results Scraper takes a country code, languages and a UULE location. The input schemas of the standalone ChatGPT, Gemini, AI Mode and AI Overview actors take only queries (checked 2026-09-17). On this API, ChatGPT, Gemini, Google Search and Google AI Mode answer from 213 countries, and Gemini also takes a US state; Copilot takes any country, Google Search and AI Mode also take a location or UULE, and Google News takes the 71 countries with a Google News edition.
How do I replace an Apify run-sync call with this API?
Replace the POST to the actor's run-sync-get-dataset-items endpoint with a POST to the engine's monitor endpoint, and send one prompt per request instead of a newline-separated queries string. For scheduled volume, submit async tasks in batches and receive results by webhook.
How do Apify's prices compare at 10,000 ChatGPT answers a month?
Apify's store pages, checked 2026-09-17, list a ChatGPT answer event at $0.005 on Starter (Bronze) and $0.003 on Business (Gold): $50 or $30 for 10,000 answers, plus run-start events, paid from the plan's prepaid usage. Its Free plan lists each AI answer event at $0.20. This API's ChatGPT task is 7 credits, which is $0.70 per 1,000 answers on its Starter plan and $0.25 on Max billed annually; the pricing page converts credits to dollars per plan.
How does this API differ from Apify's ChatGPT actor?
Both return the answer text and its sources. The differences are in the request: this API delivers each task to its own webhook, with its own idempotency key, and also covers Google News, for which Apify's store listed no Apify-published actor when checked on 2026-09-17.