> ## Documentation Index
> Fetch the complete documentation index at: https://docs.growthxai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# AI Variables and the Review Table

> Write a per-lead opening line for 500 leads at once, read them all in one table, and approve only the good ones.

An **AI variable** is a saved prompt plus a fallback, used in your copy as `{{ai.opening_line|fallback}}`.

Lines are written **ahead of time** and stored on the lead, not at the moment of sending. That is what makes bulk review possible — and it means a slow model can never delay a send.

<Warning>
  **Only a line a person approved is ever sent.** Anything not approved renders the fallback instead. There is no setting to turn this off.
</Warning>

## 1. Create the variable

**Settings → AI & data → AI variables** (Managers).

| Field                         | Notes                                                                               |
| ----------------------------- | ----------------------------------------------------------------------------------- |
| **Name**                      | For example *Opening line*                                                          |
| **Key**                       | The name you use in copy: `opening_line` → `{{ai.opening_line}}`                    |
| **What should the AI write?** | The prompt. Be specific about length, tone and what to avoid.                       |
| **Fallback text**             | Sent when a lead has no approved line. Leave it empty to send nothing in its place. |
| **Max characters**            | A hard limit on the generated line                                                  |
| **Needs recent posts**        | Fetches the lead's posts so the prompt can use them. Costs a post fetch per lead.   |

A good prompt is narrow:

> One friendly sentence that refers to their current role and company. No flattery, no questions, no exclamation marks.

The writer may only use facts that are on the profile. When there is nothing usable, the line is left **blank** and the fallback is used. It does not invent anything.

## 2. Generate lines

From **AI review → Generate**, or from the enrol flow.

Choose the variable, then where the leads come from: a **list**, a **tag**, or the leads you selected on the Leads page. **Try on one lead** writes a single line and shows it to you without saving anything.

Leads without an [enriched profile](/ai-and-data/profile-enrichment) are queued for enrichment first, so their lines arrive a little later.

Existing approved lines are kept unless you tick **write new lines for leads that already have one** — which loses their approval.

## 3. Review

The **AI review** tab holds the table: the lead, the **source facts used**, and the **generated line**.

| Action               |                                                         |
| -------------------- | ------------------------------------------------------- |
| **Approve**          | The line can now be sent                                |
| **Edit**             | Change the text, then approve. Edited lines are marked. |
| **Regenerate**       | Ask for a new line                                      |
| **Skip**             | Use the fallback for this lead                          |
| **Select all shown** | Approve a filtered page in one go                       |

Filter by status: **pending** (queued), **generated** (waiting for you), **approved**, **skipped**, **blank** (the profile had nothing usable) and **failed**.

The badge on the AI review tab counts the lines waiting for a person.

## 4. Send

Use `{{ai.opening_line|Fallback sentence.}}` anywhere you write copy.

In a sequence's settings, **Hold leads until AI-written lines are approved** makes a lead wait rather than send the fallback. Without it, an unapproved lead simply gets the fallback and carries on.

<Note>
  The step preview never shows an unapproved line. If a preview shows the fallback, that is exactly what would be sent right now.
</Note>

## Bring your own AI key

**Settings → AI & data → AI provider.**

The platform's Gemini key is included in your plan and needs no setup. You can instead use your own key from **Gemini**, **Anthropic** or **OpenAI**, optionally pinning a model. The key is tested before it is saved, and it is write-only afterwards: we show a hint, never the key.

Your own key is used for AI variables, AI routing, AI drafts and reply classification in this workspace.

## From Claude

Claude can list your variables, generate lines for a filtered set of leads, and show them to you. **Approving is your decision** — it will show the lines and wait, and any bulk approval is confirmation-gated.

## Related articles

* [Profile Enrichment](/ai-and-data/profile-enrichment)
* [AI Routing](/ai-and-data/ai-routing)
* [How Manual Tasks and AI Draft Approvals Work](/sequences/creating-managing-sequences/manual-tasks-and-ai-drafts)
