> For the complete documentation index, see [llms.txt](https://support.parvenu.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://support.parvenu.io/features/flows/exports-and-notifications.md).

# Exports and Notifications

Where the finished lead goes, and how you hear about it.

A Flow can have more than one export - send the same lead to a campaign and your CRM at the same time.

## Email and LinkedIn campaigns

| Step              | What it does                                            | Needs        |
| ----------------- | ------------------------------------------------------- | ------------ |
| Send to Smartlead | Adds the lead to a Smartlead campaign.                  | Email        |
| Send to Instantly | Adds the lead to an Instantly campaign.                 | Email        |
| Send to Lemlist   | Adds the lead to a Lemlist campaign.                    | Email        |
| Send to Mailshake | Adds the lead to a Mailshake campaign.                  | Email        |
| Send to Reply.io  | Adds the lead to a Reply.io campaign.                   | Email        |
| Send to Aimfox    | Adds the lead's LinkedIn profile to an Aimfox campaign. | LinkedIn URL |

{% hint style="success" %}
In **Send to Smartlead** you can set the campaign to `{{trigger.campaign_id}}`. The leads then go back into whichever campaign triggered the run - the usual pairing with the **Smartlead campaign running low** trigger.
{% endhint %}

### What Smartlead receives

Each lead gets its name, email, company, website, LinkedIn profile, phone number and location:

* **Phone number** - the mobile number if one was found (including by a **Find Mobile Phone** step earlier in the Flow), otherwise the company phone.
* **Location** - the address, otherwise the city, state and country.
* Anything blank is left out. **Add to Smartlead** in the leads table sends the same.

**Send to Smartlead** also adds these custom fields to each lead:

| Smartlead custom field | Comes from                                                                 |
| ---------------------- | -------------------------------------------------------------------------- |
| `Title`                | The lead's job title                                                       |
| `Company_Linkedin_URL` | The company's LinkedIn page                                                |
| `Personalize_with_AI`  | The text written by **Personalize with AI**, if the Flow has that step     |
| `Hiring_Title`         | The job the lead's company is hiring for, from a job post on the same list |
| `Hiring_Location`      | Where that job is based                                                    |

Put `{{Personalize_with_AI}}` in your Smartlead email where you want the AI line to appear. You don't need a copy step - the export picks it up on its own.

`Hiring_Title` and `Hiring_Location` use the same names as **Add to Smartlead** in the leads table, so `{{Hiring_Title}}` works in your Smartlead email with no extra setup. They are only sent when the lead's company has a job post on the same list. To tidy the title first, add a **Clean Hiring Title** step before the export.

#### Extra Smartlead fields

To send more, fill in **Extra Smartlead fields**: each row is a Smartlead field name and where its value comes from. The value can be a field, such as `job.url`, or text with placeholders, such as `Hiring a {{job.title}}`.

| Smartlead field | Value           |
| --------------- | --------------- |
| `Hiring_Line`   | `{{job.title}}` |
| `Job_URL`       | `job.url`       |
| `CTA_AI`        | `flow.cta_text` |

Then use `{{Hiring_Line}}` and so on in your Smartlead email.

* Field names can use letters, numbers and underscores, starting with a letter. The Flow builder warns you about anything else.
* A value that comes out empty for a lead is not sent for that lead.
* Using a built-in name, such as `Personalize_with_AI`, replaces the built-in value.
* The step checks that Smartlead saved every field it sent, the extra ones included.

{% hint style="info" %}
**Two AI texts.** Each AI step writes to the same place, so a second **Personalize with AI** step replaces the first one's text. To keep both, add a **Copy / Rename Fields** step after the first AI step that copies `ai.generated_text` to another field (for example `flow.cta_text`), then map that field in **Extra Smartlead fields**.
{% endhint %}

{% hint style="warning" %}
Output from **Research with AI**, **Scrape Website with AI** and **Find Company News** is not sent unless you map it in **Extra Smartlead fields**, or feed it into a **Personalize with AI** prompt.
{% endhint %}

### Which leads are sent

By default, **Send to Smartlead** sends a lead only when its email is **valid** or **catch-all**. Any other lead is skipped, and the step log says why (for example `email not valid or catch-all (unknown)`).

Two switches change this. Both are off until you turn them on.

* **Also send emails nobody can confirm** - also sends an email the checker could not confirm either way (unknown), when it is the person's own address at a company. Free-mail addresses (gmail.com, outlook.com and so on) and shared inboxes (info@, careers@, no-reply@ and so on) are never sent, and with this switch on that also applies to catch-all emails. Valid emails are sent as before.
* **Skip leads already in this campaign** - before sending, the step checks whether Smartlead already has the email in this campaign. If it does, the lead is skipped and left exactly as it is: its fields are not replaced and it keeps its place in the sequence. Without the switch, Smartlead updates a lead it already has with the new fields. The check is by email, so the same person under a different address is not caught.

{% hint style="warning" %}
If your Flow has a **Verify Email** step that keeps only valid and catch-all emails, unknown emails never reach **Send to Smartlead**. To send them, set that step to keep every lead and let **Send to Smartlead** decide. Unknown emails bounce more often, so watch the campaign's bounce rate.
{% endhint %}

## CRMs and spreadsheets

| Step                  | What it does                                                                                |
| --------------------- | ------------------------------------------------------------------------------------------- |
| Send to HubSpot       | Creates the contact in HubSpot, optionally in a named list.                                 |
| Send to Salesforce    | Creates the lead in Salesforce.                                                             |
| Send to Close CRM     | Creates the lead in Close.                                                                  |
| Send to Google Sheets | Appends the lead as a row in a sheet you already have, or in a new sheet made for each run. |

### Google Sheets

You need Google Sheets connected on the Parvenu integrations page first. Then choose **Which sheet**:

* **Add to a sheet I already have** - give the step the spreadsheet URL and the name of an existing tab. The header row is written for you if the tab is empty.
* **Create a new sheet for each run** - Parvenu makes one new spreadsheet per run, in the connected Google account, and every lead in the run goes into it. Later steps can use its link as `{{export.sheet_url}}`. You can name the sheet with placeholders, and optionally share it with an email address (edit access).

**Extra columns** lets you add your own columns, each mapped to a field or a `{{placeholder}}`.

#### Who can open a new sheet

A new sheet is **private** by default: only the connected Google account can open it.

Turn on **Anyone with the link can view** if people outside your account need to open it - for example when a later step emails `{{export.sheet_url}}` to a prospect. The setting is off by default, and Flows saved before it existed stay private.

{% hint style="warning" %}
Making a sheet public needs Google Drive access, not just Sheets. If Google refuses, the step fails with "Google wouldn't make the new sheet public" instead of sending a private link. Reconnect Google Sheets on the integrations page and allow Drive access, or turn the setting off.
{% endhint %}

## Parvenu lists

| Step                   | What it does                                                                                                    |
| ---------------------- | --------------------------------------------------------------------------------------------------------------- |
| Save to a Parvenu List | Adds the lead to another Parvenu list.                                                                          |
| Move to a list         | Moves the lead out of this Flow's list into another one, keeping every column and the whole enrichment history. |

{% hint style="warning" %}
**Move to a list** must be the last step. After it runs the lead is no longer in this Flow's list, so any later step that writes back to the list will find nothing. The row is re-pointed rather than copied - nothing is re-enriched, and duplicates at the destination are merged.
{% endhint %}

* **Leads that are not on a list yet** - from a **New Smartlead Reply** or an **Inbound webhook** - have nothing to move out of. **Move to a list** adds them to the list you pick instead, the same way **Save to a Parvenu List** does.
* When either step adds a lead, it writes a line in that row's log column, for example `Move to a list - Parvenu - Added from Smartlead reply (Interested) ✅ - 10-12-26 - 0 Credits - Flow`.

## Start another flow

Starts one of your other flows with this lead's fields, as that flow's **Incoming webhook** would. The other flow must start from an Incoming webhook and be turned on. In **Fields to send**, name each field and give it a value or a placeholder - for example `keywords` = `{{ai.generated_text}}` and `company_name` = `{{base.organization_name}}`. The other flow reads them as `{{trigger.keywords}}`, `{{trigger.company_name}}` and so on, including in the settings of its source steps. Free.

## Send to Slack

Posts to a Slack channel. You choose one of two modes:

* **Each lead** - one message per lead, using a message template you write.
* **When the run finishes** - a single summary. You pick which endings you want to hear about: completed, completed with errors, failed, cancelled.

### What the run summary shows

* **The result first** - for example "344 leads added to *your campaign*", or "50 of 526 leads added (476 failed)" when something went wrong.
* **Problem** - when leads failed, the step they failed at and the most common reason, in plain words (for example "Needs an email, and this lead doesn't have one.").
* **Why it ran** - for the Smartlead trigger, how many days of leads the campaign had left to email, and the level this Flow tops up at.
* **Leads left to email after this run** - an estimate of how many leads the campaign now has waiting, and how many days of sending that covers.
* **Where leads dropped out** - how many stopped at each step (not an ICP match, no work email found, and so on) and how many were sent.
* **Emails and phones found** - for each Work Email, Personal Email or Mobile Phone step in the Flow, how many were found out of how many were looked up, and how many leads already had a good work email so were not looked up.
* **Credits** - the total, the cost per lead sent, and what each step cost.
* **Retries** - if you retried failed leads, a second summary is posted with how many were retried, how long the retry took and what it cost.
* **Open run** - a button that opens the run in Parvenu.

There is also a **spend alert**: the first time a single run passes a number of credits you set, Parvenu warns you in Slack. The run carries on. To stop a run instead, set **Stop paid steps after (credits per run)** on the Flow's trigger.

{% hint style="info" %}
For a private channel, invite the bot first with `/invite @Parvenu`.
{% endhint %}
