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

# Waterfall Phone Enrichment

> Enrich your contact list with professional phone numbers using LinkedIn URLs and automated waterfall processing.

## What It Does

* Finds phone numbers for contacts using LinkedIn profile URLs.
* Preserves all input columns while adding `contact_phone_number` and `contact_phone_number_provider`.
* Supports template variables for flexible column mapping (e.g., `@linkedin_profile`).
* Handles errors and retries automatically without stopping the workflow.
* Credits are only consumed for successful enrichments (30 credits per phone number).

***

## 🏁 Getting Started

<Frame>
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/nurturev/images/Waterfall%20Phone%20Enrichment%20config%20screenshot.png" alt="Waterfall Phone Enrichment config screenshot" style={{ borderRadius: '0.5rem', width: '100%', margin: '1.5rem 0' }} />
</Frame>

<Steps>
  <Step title="Connect Input Data">Attach previous node output or S3 data containing LinkedIn profile URLs.</Step>
  <Step title="Map Person Reference">Select the LinkedIn URL column using template variables (e.g., `@linkedin_profile`).</Step>
  <Step title="Run Node">Execute the node in batches. Test Mode can be used for previewing a small subset.</Step>
  <Step title="Review Outputs">Access enriched phone numbers and provider info.</Step>
</Steps>

***

## Inputs

### 🛠️ Required Fields

* **Person Reference (✅)**\
  LinkedIn URL for the contact (template variable or direct URL).\
  *Why it matters:* Primary identifier for fetching phone numbers.

***

## Output

* Adds columns:\
  `contact_phone_number`, `contact_phone_number_provider`
* Preserves all original input columns.
* Column conflicts are resolved with numeric suffixes (e.g., `contact_phone_number_1`).

<Note>
  ✨ Failed rows do not stop processing; partial results are returned with detailed logging.
</Note>

***

## How It Works

1. Validate settings and template variables.
2. Load input data from S3 or previous node output.
3. Resolve LinkedIn URL templates per row (`@linkedin_profile`).
4. Send enrichment requests asynchronously in batches (default 100 rows).
5. Receive phone numbers and map to original rows.
6. Merge enriched data with input columns and handle column conflicts.

***

## 🚀 Example Use Cases & Prompts

| Use Case                | Setup Example                                                     |
| ----------------------- | ----------------------------------------------------------------- |
| Enrich sales leads      | Use `@linkedin_profile` to get direct phone numbers for outreach. |
| CRM cleanup             | Fill missing phone numbers for existing contacts.                 |
| Multi-source validation | Combine multiple identifiers to improve match accuracy.           |

***

## ✨ Pro Tips

<Tip>
  * Always include LinkedIn URL for each contact to improve enrichment success.
  * Test Mode can process a small subset before running full batch.
  * Rename output columns (`PhoneNumber`, `Provider`) for clarity in downstream reporting.
</Tip>

***

## ⚠️ Important Considerations

<Warning>
  * Credits are consumed per successful enrichment only (30 credits each).
</Warning>

***

## 🛠 Troubleshooting & Gotchas

| Symptom                      | Likely Cause                     | Quick Fix                                              |
| ---------------------------- | -------------------------------- | ------------------------------------------------------ |
| Blank `contact_phone_number` | LinkedIn URL missing or invalid  | Verify input column mapping                            |
| Missing input columns        | Template variable does not exist | Ensure input DataFrame contains referenced column      |
| Node stalls or slows         | Large batch or API rate limiting | Reduce batch size or split dataset into smaller chunks |

***

## 📝 FAQ

<AccordionGroup>
  <Accordion title="Can I use direct LinkedIn URLs?">
    Yes — you can provide static URLs without template variables for individual contacts or testing.
  </Accordion>

  <Accordion title="What happens if a phone number isn’t found?">
    The row remains in output with `contact_phone_number` empty. No credits are consumed.
  </Accordion>

  <Accordion title="How does Test Mode work?">
    Test Mode processes a small subset for fast validation without consuming full credits.
  </Accordion>
</AccordionGroup>

***

## 💰 Pricing

| Action                      | Credit Cost          |
| --------------------------- | -------------------- |
| Successful phone enrichment | 30 credits per phone |

<Note>
  Credits are only charged when a phone number is successfully returned. Batch processing optimizes usage.
</Note>

***

<p style={{ fontSize: '1rem', fontWeight: 'bold', marginTop: '1.5rem' }}>
  Drop this node into your Play to automatically enrich contacts with verified phone numbers—efficiently and at scale. 🚀
</p>
