# 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.

- Workflow type: code
- Services: Google Sheets, Unipile
- Categories: Sales
- Published: 2026-07-08

## What it does

- 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 you'll need

- 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.

## Prompt

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.

## How to customize

- 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.

## FAQ

### 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.

Use this prompt in General Input: https://www.generalinput.com/prompts/weekday-linkedin-invites-with-a-personalized-icebreaker