Skip to main content
Generic first lines get ignored. This workflow has a smart column research each prospect and write one specific opening line, lets you check the sources behind it, and merges it into a campaign with a column token. Each email uses the line as it stands when that email is scheduled, so the workflow finishes the research and deals with any gaps before anything is approved.

Before you start

Step by step

1

Write the opener prompt and test it on ten rows

Ask for exactly the sentence you want to send, and tell the column what to do when it finds nothing, so every row ends up with a usable line:
deep_research checks live sources for every row and records them, which matters when the line will be sent under your name. For large lists where a lighter touch is fine, standard is cheaper.
2

Check the lines and the sources behind them

Poll GET /business/lists/{listId}/smart-columns/{jobId}/status until the run finishes, then read the lines under columnValues on GET /business/lists/{listId}/rows. For any line you want to check, ask where it came from:
If the lines are too long, too salesy or wrong, change the prompt now with PATCH /business/lists/{listId}/smart-columns/{columnId}. A prompt edit rewrites every line already written, so it is cheapest while that is only ten rows.
3

Write lines for the rest of the list

new_only writes lines only for rows that do not have one yet, so the ten sample rows are not billed twice. You can build the campaign in the next steps while this runs. Just do not approve it until the run has finished.
4

Create a manual campaign

Column tokens go in the steps you write yourself, so use a manual campaign. Its steps exist as soon as it is created:
Then confirm the exact token for the column:
5

Put the opener in the first email

List the steps with GET /business/campaigns/{campaignId}/steps, then write the first one:
Write the follow-up step the same way, with daysBetween set to the wait in days. Built-in tokens such as {Contact First Name} use single braces and exact names; see Merge tokens.
6

Wait for every line, then close the gaps

Poll the re-run’s status until it is completed or partially_completed. Then page through GET /business/lists/{listId}/rows and look for rows where columnValues has no value for the column. Those are the rows the column could not answer.A contact with an empty cell would get the email with a gap where the opener goes. Take them off the list before you approve:
This only removes them from the list, not from your workspace. Put them in a list of their own if you want to write their openers by hand.
7

Preview, then approve

Render the step for a sample contact with POST /business/campaigns/{campaignId}/steps/{stepId}/generate and read it as the prospect will see it. Then approve:

How column values reach the email

  • The value is read when each email is scheduled. It is then frozen onto the queued email, so changing the column afterwards does not rewrite emails already queued. Finish editing the prompt before you approve.
  • An empty cell leaves a gap. A row the column failed on, or found nothing for, renders as nothing, and the email still sends. That is why step 6 removes those contacts first.
  • A line still being written stops the contact. If a contact’s cell is still running when their step comes due, that step is not scheduled and is not retried automatically. Always let the run finish before the campaign reaches a contact.

Add new prospects in batches

Columns belong to a list, and a dynamic campaign enrolls new rows within about 30 minutes, often before a smart column could write their line. So add new prospects in batches rather than straight to the campaign’s list:
  1. Put the batch in a new list and add a smart column named Opener with the same prompt.
  2. Let it finish, and remove any rows it could not answer.
  3. Add the batch’s list to the campaign with PATCH /business/campaigns/{campaignId} and the full listIds, old lists included. With isDynamic: true set on the campaign, at creation or in the same PATCH, it enrolls the batch on its next check.
The token resolves by column name across the campaign’s lists, so {Column: Opener} finds each contact’s line on whichever list holds it.

What it costs

Troubleshooting

Run the whole workflow

Do it from Claude

With the Fuse MCP server connected:
On my list “Fintech finance leaders”, add a smart column called “Opener” that writes one sentence under 25 words referring to something specific each person’s company announced in the last six months. Run it on ten rows and show me the lines with their sources.
Run “Opener” on the rest of the list and wait for it to finish. Remove anyone it could not write a line for, then draft a two-step manual campaign on the list that opens the first email with that column. Don’t launch it.
The assistant uses the smart column and list tools, then creates the campaign as a draft. Removing rows is marked as destructive, so your client may ask you to approve that step.

Smart columns

Engines, prompts, re-runs and provenance.

Campaigns

Merge tokens and how column values render.

Qualify leads before enriching

Build the list this workflow personalizes.

Follow up on replies and clicks

Hand off repliers and re-engage clickers after the campaign.