AnswerLine Start free

, Integrations · Tutorials

AI-answer alerts without code: a Zapier setup

A Zap can check an AI answer every morning and post to Slack only when something that matters changes: your brand dropped out of the answer, your domain stopped being cited, or a competitor’s domain appeared. It needs no server and only one short code step. Below: the Zapier steps, the fields to map, cost per run, and when to move to another tool.

Definitions

Alert on transitions because AI answers are reworded from run to run, so a “not mentioned” message every day buries the one day it changed. See AI answer volatility and mentions vs citations for what the two states measure.

The app

Connection

Connecting the app asks for three fields:

Field Value
API Key a key from the dashboard
Base URL https://api.answerline.dev (default)
Engines comma-separated task types to offer, default CHATGPT,GEMINI,PERPLEXITY,COPILOT,AIMODE,GOOGLE,GOOGLE_NEWS,GROK

The connection test calls GET /v1/credits, which is free and fails with 401 on a wrong key. Every request sends the key as Authorization: Bearer <key>.

Step Type What it does Output
Run Monitor action submits the request as an async task, pauses, resumes with the answer the body a synchronous call returns: success, result
Create Task action same, plus a Priority field (1-10, higher first) the task status: task, credits, response
Find Task search GET /v1/async/task/{taskId} task, credits, response; no result for an unknown ID

Both actions share these inputs: Engine, Prompt or Query, Country (ISO 3166-1 alpha-2, default US), Additional Fields (JSON) for any other request field (for example {"include": {"shopping": true}}), and Idempotency Key.

The difference that matters for alerts: when a task fails, Run Monitor fails the Zap step with the API’s error code, while Create Task resumes either way and hands you task.status (COMPLETED or FAILED) to branch on. Use Run Monitor when a failure should stop the Zap and show in Zap history; use Create Task when you want to log failures as rows.

Why both actions wait

Zapier’s documentation lists a 30-second limit for a create or search action, requests and scripting combined (Zapier operating constraints, checked 2026-09-17). An AI engine can take longer than that, and a synchronous call to the API can wait up to five minutes. So neither action calls the engine synchronously. Each one submits POST /v1/async/task with a Zapier-issued callback URL as the task’s webhook.url, and the step resumes when the API posts the finished task to that URL. Zapier documents a maximum of 30 days for a callback to arrive (Zapier CLI core reference, checked 2026-09-17). You do not need a separate Catch Hook step.

The Zap, step by step

Step 1: Schedule by Zapier

Trigger: every day at a fixed hour. Daily fits alerting; see setting a monitoring cadence for when more or less often makes sense.

Step 2: get the prompt list

Use a Google Sheets “find many rows” style search, or a Looping by Zapier step over a line-item list, so each prompt and market pair runs the rest of the Zap. Sheet columns: promptId, prompt, country, brand, domain. Keep promptId stable; it is the join key for state comparison.

For a first build, skip the loop: one Zap per important prompt is easier to debug and still cheap.

Step 3: AnswerLine, Run Monitor

Field Value
Engine Monitor ChatGPT Responses
Prompt or Query mapped prompt
Country mapped country
Additional Fields (JSON) leave empty
Idempotency Key {promptId}-{country}-{date} built from mapped fields

Always map an idempotency key. Zapier does not give the action a run identifier, so without your key the app falls back to a hash of the callback URL. With a key derived from prompt, market and date, a replayed run returns the task already created instead of creating and charging a second one. The API refuses a different request under a used key with 409 RESOURCE_CONFLICT; see idempotency keys explained.

The step shows as waiting until the task finishes, then continues with result.text, result.sources[] (each with position, url, label, description) and, for ChatGPT, fields like result.citationPills[].

Step 4: compute the state

Add a Code by Zapier (JavaScript) step. Map result.text to text and the sources’ URLs to sourceUrls. How Zapier presents a nested array to a later step depends on the mapping, so check the test run’s mapped value; the code below accepts either a comma-joined string or a list.

const text = inputData.text || "";
const brand = (inputData.brand || "").toLowerCase();
const domain = (inputData.domain || "").toLowerCase();
const urls = String(inputData.sourceUrls || "").split(/[,\n]/).map((u) => u.trim()).filter(Boolean);

const hosts = urls.map((u) => { try { return new URL(u).hostname.replace(/^www\./, ""); } catch { return ""; } });
const citedAt = hosts.findIndex((h) => h === domain || h.endsWith("." + domain));

output = {
  mentioned: brand !== "" && text.toLowerCase().includes(brand),
  cited: citedAt >= 0,
  firstCitedPosition: citedAt >= 0 ? citedAt + 1 : "",
  sourceCount: urls.length,
};

firstCitedPosition here is the order of the URL in the mapped list, which follows sources[] order. If you map the position field too, use it directly.

Step 5: look up the previous state

Google Sheets “Lookup spreadsheet row” in a history tab, matching promptId and country (store a combined key column to match on one field). Take mentioned and cited from the last row.

Step 6: Filter

Continue only if mentioned differs from the previous mentioned, or cited differs from the previous cited. The first run for a prompt has no previous row; decide once whether that alerts (usually not).

Step 7: Slack and the log

Post to the channel with the prompt, market, old and new state, and the top three source URLs so the reader sees who replaced you. Then append the new row to history regardless of the filter result; to do that, put the append before the Filter, or use Paths with one branch for logging and one for alerting.

What to alert on

Signal Field Why it matters
Brand mention appeared or disappeared result.text the answer stopped recommending you
Your domain entered or left citations result.sources[].url you lost (or won) the page the engine relies on
Competitor domain in the first three sources result.sources[] where position is 1-3 someone else is shaping the answer
Product position changed result.shoppingCards[].products[].position (ChatGPT, needs include.shopping; empty on the answers served today) commerce visibility moved
Advertiser appeared result.ads[] with rendered: true (ChatGPT, needs include.ads; empty on the answers served today) paid presence on your prompt

Shopping and ads fields are only returned when their include flag is set in Additional Fields, and both flags are free. ads[] comes back empty on the ChatGPT answers served today, so an ads alert will not fire. Details in tracking ChatGPT shopping cards and ads in AI answers.

Cost per run

Prices at the Starter tier: ChatGPT $0.0006, Gemini $0.0006, Perplexity $0.0015, Copilot $0.00274, Grok $0.00218, AI Mode $0.00206, Google Search $0.00103, Google News $0.0002.

Zap Tasks per day Cost per task Cost per day
10 prompts, US, ChatGPT 10 $0.0006 $0.006
10 prompts, US, Gemini 10 $0.0006 $0.006

At $0.012 a day for both Zaps ($0.006 + $0.006), a 30-day month costs about $0.36. New accounts get 100 free requests on any live engine, enough to build and test the Zap; after that the Zaps draw on your topped-up balance; see pricing for tier prices. Your Zapier plan’s own usage limits apply separately.

Pitfalls

When to move beyond Zapier

Zapier suits a handful of prompts and teams that already work in Slack and Sheets. Move on when you need hundreds of prompts, several engines per prompt, or queries over months of history. The same pattern in n8n gives batch control and a database sink (n8n workflow); a small service with webhooks and batches of up to 500 tasks scales further. For the monitoring program itself, see AI visibility tracking and brand protection.

Connection details are on the Zapier integration page.

Questions

Which Zapier actions does the app have?

Two actions, Run Monitor and Create Task, and one search, Find Task. Both actions submit the request as an async task and pause the Zap until the task finishes; Run Monitor continues with the engine's answer, Create Task with the full task status.

Why does the Zap wait instead of calling the engine synchronously?

Zapier stops a create or search action after 30 seconds, and an AI engine can take longer than that to answer. The app submits an async task with a Zapier callback URL as its webhook, so the step resumes whenever the task finishes.

What does one Zap run cost?

The engine's request price: for example $0.0006 at the Starter tier for ChatGPT, $0.0006 for Gemini, $0.00206 for AI Mode, $0.00103 for Google Search, $0.0002 for Google News. ChatGPT's include flags are free.

How does the Zap decide that something changed?

A Code step reduces each answer to mentioned, cited, firstCitedPosition and sourceCount. The next step looks up the previous row for the same prompt and market in the history sheet, and the Filter continues only when mentioned or cited flipped. The first run of a prompt has no previous row, so decide once whether that case alerts.

Try it on your own prompts

100 free requests on any engine, no card. One POST returns the answer, sources and citations as JSON.

Keep reading