Skip to main content
Connect OutX to n8n to build automated workflows that monitor LinkedIn, enrich leads, and trigger engagement — all without writing code.

What You Can Build

WorkflowOutX APIn8n Nodes
New LinkedIn post → Slack alertGET /api-postsSchedule Trigger → HTTP Request → Slack
Buying intent detected → CRM leadGET /api-posts + filtersSchedule Trigger → HTTP Request → HubSpot/Salesforce
New post → AI comment → post commentGET /api-posts → OpenAI → POST /api-commentSchedule Trigger → HTTP Request → OpenAI → HTTP Request
Profile fetch → lead enrichmentPOST /linkedin-agent/fetch-profile → pollHTTP Request → Wait → HTTP Request → Google Sheets

Prerequisites

  • An OutX account with an API key (get your key)
  • The OutX Chrome extension installed and active
  • An n8n instance (cloud or self-hosted)

Step-by-Step: LinkedIn Posts → Slack Alerts

This workflow checks your watchlist every hour and sends new posts to Slack.

1. Schedule Trigger

Add a Schedule Trigger node. Set it to run every 60 minutes.

2. Fetch Posts (HTTP Request)

Add an HTTP Request node:
  • Method: GET
  • URL: https://api.outx.ai/api-posts
  • Authentication: Header Auth
    • Name: x-api-key
    • Value: {{ $env.OUTX_API_KEY }}
  • Query Parameters:
    • watchlist_id: your watchlist ID
    • sort_by: recent_first
    • page: 1

3. Filter New Posts (Code Node)

Add a Code node to filter posts you haven’t seen:
// Store seen post IDs in static data
const seen = $getWorkflowStaticData("global");
if (!seen.postIds) seen.postIds = [];

const newPosts = $input.all().filter(item => {
  const postId = item.json.data?.id || item.json.id;
  if (seen.postIds.includes(postId)) return false;
  seen.postIds.push(postId);
  return true;
});

// Keep only last 500 IDs to avoid memory issues
if (seen.postIds.length > 500) {
  seen.postIds = seen.postIds.slice(-500);
}

return newPosts;

4. Send to Slack

Add a Slack node:
  • Channel: #linkedin-alerts
  • Message:
New LinkedIn post by {{ $json.author_name }}:
{{ $json.content.substring(0, 300) }}

Post URL: {{ $json.post_url }}
Engagement: {{ $json.likes_count }} likes, {{ $json.comments_count }} comments

Step-by-Step: Fetch Profile → Google Sheets

This workflow fetches a LinkedIn profile and adds the data to a Google Sheet.

1. Create the Task (HTTP Request)

{
  "method": "POST",
  "url": "https://api.outx.ai/linkedin-agent/fetch-profile",
  "headers": {
    "x-api-key": "{{ $env.OUTX_API_KEY }}",
    "Content-Type": "application/json"
  },
  "body": {
    "profile_slug": "{{ $json.slug }}"
  }
}

2. Wait for Completion

Add a Wait node set to 10 seconds, then an HTTP Request node to poll:
GET https://api.outx.ai/linkedin-agent/get-task-status?api_agent_task_id={{ $json.api_agent_task_id }}
Add a Switch node to check {{ $json.data.status }}:
  • completed → continue to Google Sheets
  • pending or processing → loop back to Wait
Space out LinkedIn Data API calls. OutX is a proxy — it does not rate-limit requests for you. Add a Wait node (30–60 seconds) between consecutive profile fetches. See Rate Limits.

3. Write to Google Sheets

Map the profile fields:
Sheet Columnn8n Expression
Name{{ $json.data.task_output.profile.full_name }}
Headline{{ $json.data.task_output.profile.headline }}
Location{{ $json.data.task_output.profile.location }}
LinkedIn URLhttps://linkedin.com/in/{{ $json.data.task_output.profile.profile_slug }}

Tips

  • Use environment variables for your API key — never hardcode it in n8n nodes
  • Add error handling with an Error Trigger node to catch failed HTTP requests
  • Rate limit LinkedIn Data API calls — add Wait nodes (30–60s) between consecutive requests
  • Use n8n’s static data to track which posts you’ve already processed

Partnerships

Interested in a collaboration or affiliate partnership? Reach out at support@outx.ai.

Learn More