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

# Magic Enrich

> Use AI to automatically standardize, classify, and enrich contact and company data within your workflows.

The Magic Enrich node uses AI to transform existing contact or company data into clean, structured values. Instead of relying on external enrichment tools or manual cleanup, Magic Enrich runs dynamically as contacts pass through a workflow — standardizing fields like persona, lead score, industry, and department using a prompt you define.

You can update any field on the contact or company record, and optionally enable web search to pull in additional context from the contact's domain or website.

## Configuration

Setting up a Magic Enrich node is a five-step process.

<Steps>
  <Step title="Choose a field to update">
    Select an existing field from your contact, company, or lead schema, or create a new field directly within the node.

    <Info>
      Note: you cannot update a contact's email field in magic enrich. 
    </Info>

    The **Overwrite existing values** toggle controls how the node handles fields that already have a value:

    | Toggle state      | Behavior                                                   |
    | ----------------- | ---------------------------------------------------------- |
    | **Off** (default) | Only fills in blank fields. Existing values are preserved. |
    | **On**            | Replaces current values with the AI-generated output.      |
  </Step>

  <Step title="Write your prompt">
    The prompt tells the AI model what data to use and how to transform it. You can insert contact and company variables directly into the prompt using the `/` command, which opens a list of available fields.

    Example prompt:

    ```text theme={null}
    Based on Job Title, Industry, and Domain, identify the contact's
    buyer persona from the standardized list below. Choose the single
    most relevant persona.
    ```

    <Warning>
      At least one field referenced in your prompt must contain a value for the enrichment to execute. If all referenced fields are empty on a given contact, the node is skipped entirely — no AI call is made and the contact moves to the next step.
    </Warning>
  </Step>

  <Step title="Enable web search (optional)">
    Toggle **Enable web search** to combine field data with live website and domain scraping for additional context. When disabled, the model uses exclusively CRM/MAP fields referenced in your prompt — this is faster and more deterministic. Enable web search when you need external validation or data not stored in your records.
  </Step>

  <Step title="Define your outputs">
    Predefined outputs constrain the AI model to select from a specific list of values rather than generating freeform text. This is strongly recommended for any variable where consistency matters.

    When you define outputs, the model selects the single best match from your list. Always include **"Other"** as the final option to handle edge cases.

    Example output list:

    1. Marketing Leader
    2. Sales Leader
    3. Operations Leader
    4. Product Leader
    5. Engineering Leader
    6. Other

    <Tip>
      Predefined outputs prevent inconsistent freeform text from entering your CRM. Without them, you may get variations like "Marketing", "marketing leader", "Head of Marketing" for the same persona.
    </Tip>
  </Step>

  <Step title="Preview and QA">
    The preview function displays up to 25 matched contacts where at least one prompt variable contains data. The output column shows the predicted enrichment result for each contact.

    Use preview to:

    * Verify the AI is selecting the correct output for known contacts
    * Identify edge cases where the prompt produces unexpected results
    * Adjust prompt wording, output definitions, or model mode before activating the workflow

    If results are inconsistent, refine your prompt to be more specific, add examples, or tighten your output list.
  </Step>
</Steps>

## Prompt writing best practices

* **Be specific.** Tell the model exactly what to do. Vague prompts like "classify this contact" produce inconsistent results. Instead: "Based on Job Title and Industry, classify the contact into one of the following buyer personas."
* **Include examples.** Add explicit mappings in your prompt: "If the job title is CMO, VP of Marketing, or Head of Growth, classify as Marketing Leader."
* **Anticipate variations.** Account for common title and industry variations. For example, "CTO" and "Chief Technology Officer" should produce the same result.
* **Request a single selection.** Explicitly tell the model to choose the single most relevant option. Without this, the model may return multiple or hybrid responses.
* **Use predefined outputs.** Always define an output list when possible. Freeform enrichment should only be used when the range of possible values is genuinely unbounded.

## Behavior

* The node executes once per contact as they pass through.
* If all referenced fields are empty, the node is skipped — no enrichment runs, no field is updated.
* If the overwrite toggle is off and the target field already has a value, the node is skipped.
* The enrichment result is written to the selected field before the contact advances to the next node.

## Use cases

| Use case                   | Variable        | Prompt approach                                                                                    |
| -------------------------- | --------------- | -------------------------------------------------------------------------------------------------- |
| **Persona classification** | `buyer_persona` | Use job title, domain, and industry to assign a standardized persona                               |
| **ICP fit scoring**        | `icp_fit`       | Evaluate company size, industry, and domain to categorize as High / Medium / Low fit               |
| **B2B vs B2C detection**   | `business_type` | Analyze domain and industry to classify as B2B, B2C, or Both                                       |
| **Department tagging**     | `department`    | Normalize job titles into functional departments (Marketing, Sales, Product, Engineering, Finance) |
| **Lead scoring**           | `lead_score`    | Combine contact and company data to assign a score tier                                            |
| **Data standardization**   | Any variable    | Clean and normalize messy CRM values into consistent, structured outputs                           |
