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

# Personalize with variables and spintax

> Drop a column's value into an email, vary the wording between sends, and let AI write a line per row.

Every column of the audience table is available inside a step as a variable. Type a slash to insert one, rotate a sentence's wording with spintax, or have AI write a line for each row.

<Frame caption="The slash menu, open inside a message.">
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/oneprofile/images/outreach/write-with-variables-and-spintax.png" alt="The slash command menu open over a message, listing audience table columns under Contact, sender fields, context entries like Today and Greeting, and AI snippet and Spintax under Generated, with one variable pill already sitting in the text above it." />
</Frame>

## Insert a variable

Type `/` in the subject or message, or click the variables icon beside the field. The menu lists every column of the audience table, plus sender fields and context entries like today's date or a greeting. Picking one inserts a pill that resolves to that contact's value when the step sends.

If the column behind a pill is later deleted, the pill turns red and names the problem on hover. A required variable left blank for a contact skips that contact rather than sending a gap.

## Rotate the wording

<Steps>
  <Step title="Open Spintax">
    Type `/spintax` in the message. Add at least two phrasings with **Add option**.
  </Step>

  <Step title="Insert it">
    Click **Insert**. Each contact locks onto one option, so a preview and the real send always agree.
  </Step>
</Steps>

**Autospintax** proposes rotations for you: select a sentence first to scope it, or leave the draft as it is to cover the whole message. Review each suggestion and accept only the ones you want.

## Let AI write a line

Pick **AI snippet** from the slash menu and describe the fragment in a sentence, like a line about a contact's recent funding. It is written fresh for every contact at send time, from that row's data, and spends credits only on a real send. A contact with nothing to write is skipped rather than sent a message with a gap.

## Good to know

<AccordionGroup>
  <Accordion title="What happens if the column behind a variable gets deleted?">
    The pill turns red and shows why on hover. Remove the reference or restore the column to fix it.
  </Accordion>

  <Accordion title="Why does spintax need at least two options?">
    One alternative is just text. **Add option** stays available until 20 phrasings are added.
  </Accordion>

  <Accordion title="Can I edit an AI snippet or spintax rotation after inserting it?">
    Yes. Click its pill to reopen the same dialog, pre-filled with what you wrote.
  </Accordion>

  <Accordion title="Does an AI snippet always come back with something?">
    No. If nothing comes back for a contact, that contact is skipped rather than sent a message with a blank in it.
  </Accordion>
</AccordionGroup>

## Next steps

<CardGroup cols={2}>
  <Card title="Email steps" icon="mails" href="/outreach/email-steps">
    Write the subject and message a step sends.
  </Card>

  <Card title="Message templates" icon="file-text" href="/outreach/message-templates">
    Save a message with its variables ready to reuse.
  </Card>
</CardGroup>
