Weekday LinkedIn invites with a personalized icebreaker

Every weekday at 9am, send each pending contact in your Google Sheet a personalized LinkedIn invite and log the outcome back to the row.

Deterministic Code
Google SheetsUnipileSalesEmail AutomationContent GenerationLead Enrichment
PromptCreate

Build a code workflow that works through my LinkedIn outbound queue in Google Sheets every weekday at 9am ET and sends each pending contact a personalized connection invitation.

Trigger: cron, weekdays (Mon-Fri) at 9:00 America/New_York.

Inputs I supply at run configuration: the Google Sheets spreadsheet ID and the queue tab name (default "Queue"). Assume row 1 is headers with columns: LinkedIn URL, Name, Reason, Status, Sent At, Icebreaker Sent, Error.

Step 1: Use Google Sheets Get Values on the queue tab to read all rows. Filter in code to rows where Status is empty or exactly "Pending" and the LinkedIn URL column is non-empty. Cap the batch at 20 rows per run so we stay well below LinkedIn's daily invite ceiling.

Step 2: For each pending row, extract the LinkedIn public handle from the profile URL (e.g. https://www.linkedin.com/in/satyanadella/ becomes satyanadella). Call Unipile Retrieve User Profile with that handle to pull the recipient's first name, title (headline job), current company, and full headline.

Step 3: Feed the recipient's name, title, company, headline, and the row's Reason column into a built-in AI generation step. Ask it to write a two-sentence icebreaker under 300 characters (LinkedIn's connection-note limit), warm and specific to the Reason, no emojis, no exclamation marks, no em dashes. Trim to 297 characters if longer, appending an ellipsis.

Step 4: Call Unipile Send Invitation with the profile identifier returned by Retrieve User Profile and the generated note as the message body.

Step 5: Use Google Sheets Update Values to write back to the same row: Status = "Invited", Sent At = current ISO timestamp in America/New_York, Icebreaker Sent = the exact note that was sent, Error = blank. On any error from Unipile, instead set Status = "Failed: <short reason>" and put the full error message in the Error column, then continue with the next row (never abort the whole run).

Between invites, sleep 3-5 seconds so the pacing looks human. At the end of the run, log a summary line to the workflow output with counts for sent, failed, and skipped.

Both integrations are already public: Google Sheets (Get Values, Update Values) and Unipile (Retrieve User Profile, Send Invitation). Use those exact operations.

What does this prompt do?

  • Reads the queue tab in your Google Sheet and picks up rows still waiting to be contacted.
  • Looks up each person on LinkedIn to grab their title, headline, and company so the note lands with context.
  • Writes a warm two-sentence icebreaker that fits inside LinkedIn's invite note limit.
  • Sends the connection invitation and logs the outcome, timestamp, and exact note back to the same row.

What do I need to use this?

  • A Google account with edit access to your outreach spreadsheet.
  • A Unipile account with your LinkedIn profile connected.
  • A queue tab in your sheet with columns for LinkedIn URL, name, reason for reaching out, and status.

How can I customize it?

  • Change the schedule to twice a day, only certain weekdays, or a different time zone.
  • Raise or lower the per-run cap (default 20) to match your LinkedIn invite ceiling and warm-up plan.
  • Rewrite the icebreaker style to match your voice, or pull in extra sheet columns like industry or shared connection.
  • Point it at a different tab, or filter on a different status value than Pending.

FAQs

How does the workflow know which rows to contact?
It reads your queue tab and only picks up rows where the status is blank or Pending and a LinkedIn URL is present. Anything already marked Invited or Failed is skipped, so re-running the workflow the next day is safe.
Won't LinkedIn flag me for sending too many invites?
Each run is capped at 20 invites, which sits well under LinkedIn's daily invite ceiling. You can lower that number further if the account is fresh or still warming up.
Can I write my own icebreaker style?
Yes. The note is generated from the person's title, company, and headline plus the Reason you wrote in the sheet, and you can adjust the tone, length, or format in the workflow. Every note stays inside LinkedIn's 300 character invite limit.
What happens if an invite fails?
The row's status is set to Failed along with the reason, and the workflow moves on to the next row instead of stopping. You can review the failures and re-queue them by clearing the status.
Do I need a paid LinkedIn plan?
No. This works with a regular LinkedIn account connected through Unipile. Sales Navigator or Recruiter seats work too, but aren't required.

Related templates

Call overdue Xero customers with an AI collections agent

Every weekday at 10am, an AI voice agent phones your most overdue Xero accounts, logs what each customer promised, and reports back to finance in Slack.

LiveKit
Xero
Deepgram
+2
Agentic Task
Local listing health board for every location you manage

See every Google Maps listing you manage on one screen, ranked worst first, with an audit button that writes the fix list for you.

Local Business Data
Google Sheets
App
Let support send one-off Loops emails without an engineer

Your team picks a template, finds the customer, checks they are safe to email, then sends it, with every send logged where the whole team can see it.

Loops.so
Stripe
Google Sheets
App
Stop cold emails to anyone with a live deal in Pipedrive

Every night at 2am, pull the contacts on your open and won deals and block them from your cold outreach before the next send goes out.

Mailshake
Pipedrive
Google Sheets
Deterministic Code
iMessage campaign console with pre-flight checks and delivery board

Build every text campaign in one screen: check who is actually reachable, see a realistic send plan, then watch delivery land row by row.

LoopMessage
Google Sheets
HubSpot
App
LinkedIn Ads budget pacing dashboard for every client account

See every LinkedIn ad account's spend against the budget you committed to, catch overspend early, and rebalance without rebuilding a spreadsheet.

LinkedIn Ads
Google Sheets
Slack Bot
App

Turn your outreach spreadsheet into a warm invite machine.

Connect Google Sheets and Unipile once, and every weekday morning your queue turns into personalized LinkedIn invites, logged straight back to the row.