← all playbooks

Write one sourced opening line per person on a list you have already built

Your list with one specific opening line per person, the source link and its date beside each line so you can check it, blanks where nothing true was found, and on your approval the lines loaded as per-lead variables into a paused lemlist campaign.

use when
the list is built and qualified, and the only thing between you and a generic mail merge is a first line that is actually about the person reading it
starts from
A list

The prompt

Paste it into Claude Code or the Claude desktop app with Hyreflow connected. The first line tells your agent to use Hyreflow, so it reads the play, asks before it spends anything, and hands the work back to you.

paste this into Claude
Use hyreflow and write one opening line per person on my list, each grounded
in something true and recent, with the source kept beside it.

The list: <FILE_OR_LIST>, already qualified. These are
<CLIENT_CONTACTS_OR_CANDIDATES> and I am writing about <WHAT_I_AM_PITCHING>.

A signal is a raise, an office opening, the roles they are advertising, or
something they posted, from the last <DAYS> days.

Rules for the lines:
- One sentence, specific to that person or company. No flattery, no
  "congratulations on the round", no "I came across your profile".
- Keep the source link and its date in the column next to each line.
- If nothing true and recent turns up, leave the line blank and flag the
  row. Do not invent one.

Run five first and tell me what the full run costs before you do the rest.
Show me every line. Once I approve, load them as per-lead variables into a
paused lemlist campaign, <CAMPAIGN_NAME>. Stage it, do not send anything.

Replace every <PLACEHOLDER> with your own detail. Everything else can stay as written.

What you need first

  • A list that is already built and qualified, with company website and LinkedIn profile where you have them
  • One sentence on what you are writing to them about
  • A connected lemlist account, if you want the lines staged in a campaign
  • A Hyreflow workspace with credits

Tools it can reach for

The agent picks per step from what your workspace has. Nothing here is required by name.

What happens when you run it

Free steps are marked free. Anything that spends credits is marked, and the agent asks before the first paid run of any size.

  1. 1

    Agree what counts as a signal

    free

    Which events are worth opening on, how recent they have to be, and what you are writing about. A raise means something different to a finance recruiter than to an engineering one, so the angle is set before anything is looked up.

  2. 2

    Pull company events and open roles

    credits

    Funding rounds, company news and the roles a company is advertising, read once per company and shared across everyone on the list who works there. A lookup is charged whether or not the company has anything to show.

  3. 3

    Read what they have been posting

    credits

    The recent LinkedIn posts of the person or their company, newest first, with dates. The handle is taken from the profile link already on the row, because a guessed handle is billed like a real answer.

  4. 4

    Fill the gaps from the public web

    credits

    Where the first two turn up nothing, a news search and a web search look for an office opening, a launch or a press mention. Every search is charged, including one that finds nothing, so this runs only on rows still empty.

  5. 5

    Write one line per person

    credits

    A separate pass writes the line from the facts collected for that row and nothing else. One sentence, tied to what you are pitching, with no flattery and no template phrases.

  6. 6

    Drop the lines with nothing under them

    free

    A row with no true, recent fact keeps a blank line and a flag. The same goes for a fact that is too old, or a post that turns out to be a repost of someone else's words.

  7. 7

    Review the lines beside their sources

    free

    You get the list with the line, the fact it rests on, the link and the date in adjacent columns. Edit, strike or approve. Nothing moves until you do.

  8. 8

    Load into a paused lemlist campaign

    free

    After your approval, each lead is added with its line as a custom variable, and the campaign is confirmed as paused first. Starting it is a separate action that you take.

What a run costs

Credits are spent per record the play actually works, and a lookup that finds nothing usually costs nothing. The two figures are the run where the first provider answers and the run where every lookup walks its full chain.

recordsif the first provider answersif every lookup walks the chain
25$7.373 credits$7.575 credits
100$29290 credits$30300 credits
500$1451450 credits$1501500 credits
1,000$2902900 credits$3003000 credits

Free before anything is charged

  • Agree what counts as a signal
  • Drop the lines with nothing under them
  • Review the lines beside their sources
  • Load into a paused lemlist campaign

What moves the number

  • How many records survive the free filters. Everything dropped before the paid steps costs nothing.
  • The scoring and drafting steps run on the metered agent, charged on what they read and write rather than per record, so they sit outside this table.
  • Providers you connect with your own key. Those calls bill your account, not your credits.

An estimate, not a quote, priced at the volume credit rate. Your agent sizes the run against your own workspace and tells you what it will cost before it spends anything.

A first line is a claim, so it needs a source

The opening sentence decides whether the rest gets read, and most of them fail the same way. They praise, they congratulate, or they say "I came across your profile". The reader has seen each of those many times and files the message before the second sentence.

A line that works is a small, checkable fact tied to the reason you are writing. The company is advertising three controls engineers in a city where it had no office last year. The head of finance posted about closing the books with half a team. Facts like these exist for much of a list, never for all of it, and the honest response to a row with nothing is a blank.

This play sits between a finished list and a sequence. It does not build the list, and it does not choose the cadence: building an outreach sequence covers that. It produces the one column that a mail merge cannot.

What you get back

Your list with four added columns: the opening line, the fact it rests on, the source link and the date of the source. Rows where nothing true and recent was found carry a flag and no line. On your approval, the leads go into a lemlist campaign that is paused, each with its line as a variable. Nothing is sent.

Variations worth knowing

Candidates, not clients. For a candidate list the line is drawn from the person's own history and posts, and the channel is LinkedIn and personal email. A candidate is never written to at their work address.

Lines only. Skip the loading step and take the file. Useful when a colleague owns the sequencer.

One signal type. If you only want to open on advertised roles, say so. The other lookups are skipped and the run costs less. For a list built from funding news, the angle is already set: reaching a funded company before the roles go live covers it.

Where this goes wrong

A repost read as their own words. A post feed shows reshares under the original author. The author is checked against the person on the row before anything is quoted back to them.

The same line five times. Five people at acme share one company fact. If they compare notes, identical openers look worse than none. Ask for a different angle per person, or write to one of them.

A variable that cannot be corrected. lemlist sets a custom variable once, when the lead is added, and will not overwrite it. Fix the lines in the review, before the load.

A template that does not use the line. The campaign's first message has to reference the variable. If it does not, the lines are loaded and never appear.

A stale signal. An opener about an event from half a year ago tells the reader you are working from an old list. Keep the window short.

Questions

What happens when nothing recent can be found about someone?

The line stays blank and the row is flagged. An invented line is worse than none, because the reader knows their own company better than you do. Flagged rows are listed separately, so you can give them your standard opener or hold them back.

How do I know a line is true?

Each line sits beside the fact it was written from, the link to where that fact came from, and its date. The writing pass only sees those collected facts, so it has nothing else to draw on. Checking a line takes one click, and you are expected to check.

What is wrong with congratulating someone on their funding round?

Every supplier who saw the announcement opens that way, so it reads as a template however sincerely it is meant. The same goes for praise of a profile or a post. A useful line says what the event means for the reader's hiring, such as the team a raise has to build. Flattery says nothing.

Can I use a sequencer other than lemlist?

The staging step is built on lemlist, which takes a custom variable per lead when the lead is added. For any other tool you get the file with the line and source columns, and you import it the way you import any list. SourceWhale has no documented per-lead variable, so that is the route there too.

What does it cost?

The research is the spend: company lookups, post feeds and web searches are charged per request, including the ones that come back empty, which is why they run once per company and only on rows that still need them. The writing pass is metered on usage. Loading into lemlist uses no Hyreflow credits. Five rows run first, and you see what the full list will cost before it goes ahead.