Skip to main content

Sheet-Driven Connect & Message Automation

Sheet Driven

This workflow reads profile data from a Google Sheet and automatically decides whether to send a message or send a connection request based on each profile's connection status. It allows you to manually trigger outreach sequences directly from sheet data.


Flow Steps Explained

Authentication Setup (Custom API Key + API Secret)

In your n8n workspace:

  1. Go to Overview → Credentials → New
  2. Choose Custom Auth
  3. Add your authentication details:
{
"headers": {
"x-api-key": "546………………….41a",
"x-api-secret": "WQi……………………….pM=",
"Content-Type": "application/json"
}
}

Global Variables in n8n

n8n allows you to store common values as global variables so they can be reused across all workflows.

Steps to create variables:

  1. Go to n8n Dashboard → Overview → Variables
  2. Click Add Variable
  3. Set:
    • Key → Name of the variable (example: accountId)
    • Value → Actual value
  4. Save the variable
  5. Use it in workflows like this:
{{ $vars.accountId }}

This credential will be used in all HTTP Request nodes calling WeLink APIs.


1. Manual Trigger ("When clicking Execute workflow")

  • Node Type: Manual Trigger
  • Purpose: Starts the workflow manually whenever you click Execute Workflow in n8n.

This lets you process Google Sheet data on demand.


2. Get Row(s) in Sheet

  • Node Type: Google Sheets – Get Rows
  • Purpose: Fetches all rows from your LinkedIn profile sheet.

Each row includes fields like:

  • profile_id
  • first_name
  • headline
  • is_connected
  • etc.

Output: An array of rows that the workflow will process.


3. IF Connected?

  • Node Type: IF Condition
  • Purpose: Checks whether the profile is already connected to your LinkedIn account.

Condition Example:

{{ $('Get row(s) in sheet').item.json['is_connected'] }}

Branch Behavior:

  • TRUE → Already Connected → Go directly to generating a personalized message using AI.
  • FALSE → Not Connected → Go to the "Connect to Profile" API call.

4. Message a Model (AI Message Generator)

  • Node Type: OpenAI / LLM
  • Purpose: Creates a personalized LinkedIn message using:
    • First name
    • Headline
    • Other profile sheet data

Used only when the profile is already connected. The generated text is passed to the next node.


5. Send Message to Profile

  • Node Type: HTTP Request
  • API: /api/v1/send_message
  • Purpose: Sends the AI-generated message to the LinkedIn profile via WeLink.

Triggered only if connected.


6. Connect to Profile

  • Node Type: HTTP Request
  • API: /api/v1/connect
  • Purpose: Sends a connection request to profiles that are not yet connected.

Triggered from the false branch of "IF Connected?".


Purpose of This Flow

  • Semi-manual outreach automation
  • Uses sheet data as the source of truth
  • Automatically chooses between:
    • Send Message (if connected)
    • Send Connection Request (if not connected)

This makes it ideal for controlled outreach campaigns.