AutomationFlowsMarketing & Ads › Enrich Linkedin Leads with Unipile and Google Sheets

Enrich Linkedin Leads with Unipile and Google Sheets

BySalman Mehboob @salmanmehboob on n8n.io

Automatically search LinkedIn for prospects using Unipile's API, enrich each profile with full details, and sync leads into a Google Sheet CRM — runs daily on a schedule with rate limiting, deduplication, and error logging built in. A daily Schedule Trigger fires at 08:00 and…

Cron / scheduled trigger★★★★☆ complexity21 nodesHTTP RequestGoogle Sheets
Marketing & Ads Trigger: Cron / scheduled Nodes: 21 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #16916 — we link there as the canonical source.

This workflow follows the Google Sheets → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "e5KWX2rIVmRWuOD8",
  "meta": {
    "builderVariant": "mcp",
    "aiBuilderAssisted": true
  },
  "name": "LinkedIn Lead Finder & CRM Enricher (Unipile)",
  "tags": [],
  "nodes": [
    {
      "id": "a175e5e4-7f18-40d4-babd-cb6b21d30de8",
      "name": "DailyTrigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1104,
        848
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "94dc613c-da2b-4229-8fa5-dfe3b8e8775b",
      "name": "SetConfig",
      "type": "n8n-nodes-base.set",
      "position": [
        -864,
        848
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "cfg-dsn",
              "name": "unipile_dsn",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Your Unipile DSN, e.g. https://api1.unipile.com:13111 (find it in the Unipile Dashboard)__>"
            },
            {
              "id": "cfg-account",
              "name": "unipile_account_id",
              "type": "string",
              "value": "<__PLACEHOLDER_VALUE__Your Unipile LinkedIn account_id (Dashboard > Accounts, or GET /api/v1/accounts)__>"
            },
            {
              "id": "cfg-api",
              "name": "search_api",
              "type": "string",
              "value": "classic"
            },
            {
              "id": "cfg-category",
              "name": "search_category",
              "type": "string",
              "value": "people"
            },
            {
              "id": "cfg-keywords",
              "name": "search_keywords",
              "type": "string",
              "value": "Head of Growth"
            },
            {
              "id": "cfg-results-per-page",
              "name": "results_per_page",
              "type": "number",
              "value": 25
            },
            {
              "id": "cfg-max-pages",
              "name": "max_pages",
              "type": "number",
              "value": 3
            },
            {
              "id": "cfg-max-enrich",
              "name": "max_profiles_to_enrich",
              "type": "number",
              "value": 30
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "42647d9d-45e9-49c1-b035-b99cb4687e9a",
      "name": "SearchLinkedIn",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "maxTries": 3,
      "position": [
        -560,
        848
      ],
      "parameters": {
        "url": "={{ $json.unipile_dsn }}/api/v1/linkedin/search",
        "method": "POST",
        "options": {
          "timeout": 15000,
          "pagination": {
            "pagination": {
              "parameters": {
                "parameters": [
                  {
                    "name": "cursor",
                    "value": "={{ $response.body.cursor }}"
                  }
                ]
              },
              "maxRequests": "={{ $json.max_pages }}",
              "requestInterval": 1000,
              "limitPagesFetched": true,
              "completeExpression": "={{ !$response.body.cursor || !$response.body.items || $response.body.items.length === 0 }}",
              "paginationCompleteWhen": "other"
            }
          }
        },
        "jsonBody": "={{ { api: $json.search_api, category: $json.search_category, keywords: $json.search_keywords } }}",
        "sendBody": true,
        "sendQuery": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "account_id",
              "value": "={{ $json.unipile_account_id }}"
            },
            {
              "name": "limit",
              "value": "={{ $json.results_per_page }}"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.4,
      "waitBetweenTries": 5000
    },
    {
      "id": "cf378a5e-a77d-45ca-bf99-68c8a2d02f81",
      "name": "ExtractItems",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -336,
        832
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "items"
      },
      "typeVersion": 1
    },
    {
      "id": "310e354b-518f-43f8-8d0d-46298cb66042",
      "name": "RemoveDuplicates",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        -112,
        832
      ],
      "parameters": {
        "compare": "selectedFields",
        "options": {},
        "fieldsToCompare": "id"
      },
      "typeVersion": 1.1
    },
    {
      "id": "7c725099-9ae2-4f1d-98c0-934f761ebda8",
      "name": "CapProfiles",
      "type": "n8n-nodes-base.limit",
      "position": [
        112,
        832
      ],
      "parameters": {
        "maxItems": "={{ $('Search Criteria & Unipile Config').item.json.max_profiles_to_enrich }}"
      },
      "typeVersion": 1
    },
    {
      "id": "fe0b53a1-5fd6-47be-8754-ab79d1c7a541",
      "name": "FetchProfile",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "maxTries": 3,
      "position": [
        624,
        880
      ],
      "parameters": {
        "url": "={{ $('Search Criteria & Unipile Config').item.json.unipile_dsn }}/api/v1/users/{{ $json.id }}",
        "options": {
          "timeout": 15000
        },
        "sendQuery": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "queryParameters": {
          "parameters": [
            {
              "name": "account_id",
              "value": "={{ $('Search Criteria & Unipile Config').item.json.unipile_account_id }}"
            },
            {
              "name": "linkedin_sections",
              "value": "*"
            }
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.4,
      "waitBetweenTries": 5000
    },
    {
      "id": "e8c283d8-0dbe-4525-9c06-e4be4f58e5ec",
      "name": "MapToCRM",
      "type": "n8n-nodes-base.set",
      "position": [
        880,
        864
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "row-name",
              "name": "full_name",
              "type": "string",
              "value": "={{ (($json.first_name || '') + ' ' + ($json.last_name || '')).trim() || $('Extract Search Result Items').item.json.name || '' }}"
            },
            {
              "id": "row-headline",
              "name": "headline",
              "type": "string",
              "value": "={{ $json.headline || $('Extract Search Result Items').item.json.headline || '' }}"
            },
            {
              "id": "row-location",
              "name": "location",
              "type": "string",
              "value": "={{ (typeof $json.location === 'string' ? $json.location : ($json.location?.name || '')) || $('Extract Search Result Items').item.json.location || '' }}"
            },
            {
              "id": "row-title",
              "name": "current_title",
              "type": "string",
              "value": "={{ $json.current_positions?.[0]?.title || $json.current_positions?.[0]?.role || '' }}"
            },
            {
              "id": "row-company",
              "name": "current_company",
              "type": "string",
              "value": "={{ $json.current_positions?.[0]?.company_name || $json.current_positions?.[0]?.company || '' }}"
            },
            {
              "id": "row-url",
              "name": "profile_url",
              "type": "string",
              "value": "={{ $json.public_profile_url || ($json.public_identifier ? 'https://www.linkedin.com/in/' + $json.public_identifier : '') || $('Extract Search Result Items').item.json.profile_url || '' }}"
            },
            {
              "id": "row-pubid",
              "name": "public_identifier",
              "type": "string",
              "value": "={{ $json.public_identifier || $('Extract Search Result Items').item.json.id || '' }}"
            },
            {
              "id": "row-degree",
              "name": "connection_degree",
              "type": "string",
              "value": "={{ $json.network_distance || $('Extract Search Result Items').item.json.network_distance || '' }}"
            },
            {
              "id": "row-email",
              "name": "email",
              "type": "string",
              "value": "={{ $json.contact_info?.emails?.[0] || '' }}"
            },
            {
              "id": "row-summary",
              "name": "summary",
              "type": "string",
              "value": "={{ $json.summary || '' }}"
            },
            {
              "id": "row-keywords",
              "name": "search_keywords",
              "type": "string",
              "value": "={{ $('Search Criteria & Unipile Config').item.json.search_keywords }}"
            },
            {
              "id": "row-enriched",
              "name": "enriched_at",
              "type": "string",
              "value": "={{ $now.toISO() }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d1af0d8a-e8d0-494f-a78d-59ceb74689e9",
      "name": "UpsertLead",
      "type": "n8n-nodes-base.googleSheets",
      "onError": "continueErrorOutput",
      "position": [
        1136,
        864
      ],
      "parameters": {
        "columns": {
          "value": {
            "email": "={{ $json.email }}",
            "summary": "={{ $json.summary }}",
            "headline": "={{ $json.headline }}",
            "location": "={{ $json.location }}",
            "full_name": "={{ $json.full_name }}",
            "enriched_at": "={{ $json.enriched_at }}",
            "profile_url": "={{ $json.profile_url }}",
            "current_title": "={{ $json.current_title }}",
            "current_company": "={{ $json.current_company }}",
            "search_keywords": "={{ $json.search_keywords }}",
            "connection_degree": "={{ $json.connection_degree }}",
            "public_identifier": "={{ $json.public_identifier }}"
          },
          "schema": [
            {
              "id": "full_name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "full_name",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "headline",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "headline",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "location",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "location",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "current_title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "current_title",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "current_company",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "current_company",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "profile_url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "profile_url",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "public_identifier",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "public_identifier",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "connection_degree",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "connection_degree",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "summary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "summary",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "search_keywords",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "search_keywords",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "enriched_at",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "enriched_at",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "public_identifier"
          ]
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Leads"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "",
          "cachedResultName": "LinkedIn Lead Finder - CRM"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "41b8e4d2-9ae8-44b4-980d-72155c1fe751",
      "name": "WaitRateLimit",
      "type": "n8n-nodes-base.wait",
      "position": [
        1440,
        912
      ],
      "parameters": {
        "amount": 3
      },
      "typeVersion": 1.1
    },
    {
      "id": "c1ac71ce-269f-48b1-a5d5-0b76c7ac554d",
      "name": "LogEnrichError",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1024,
        1328
      ],
      "parameters": {
        "columns": {
          "value": {
            "when": "={{ $now.toISO() }}",
            "stage": "enrichment",
            "profile_id": "={{ $('Extract Search Result Items').item.json.id }}",
            "error_message": "={{ $json.error?.message || $json.message || \"Unknown error\" }}"
          },
          "schema": [
            {
              "id": "when",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "when",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "stage",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "stage",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "profile_id",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "profile_id",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "error_message",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "error_message",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            }
          ],
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Errors"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "",
          "cachedResultName": "LinkedIn Lead Finder - CRM"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "486abe0b-5390-48e0-adc7-b260ed2c4d0b",
      "name": "BatchLoop",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        384,
        864
      ],
      "parameters": {
        "options": {},
        "batchSize": 5
      },
      "typeVersion": 3
    },
    {
      "id": "ebe2f116-02a7-443b-a4f2-c1ab96805c68",
      "name": "LogSearchError",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        720,
        1296
      ],
      "parameters": {
        "columns": {
          "value": {
            "when": "={{ $now.toISO() }}",
            "stage": "search",
            "error_message": "={{ $json.error?.message || $json.message || \"Unknown error\" }}"
          },
          "schema": [
            {
              "id": "when",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "when",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "stage",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "stage",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "error_message",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "error_message",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            }
          ],
          "mappingMode": "defineBelow"
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "name",
          "value": "Errors"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "",
          "cachedResultName": "LinkedIn Lead Finder - CRM"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "1cce53b8-6bfe-408a-b914-2a313248d427",
      "name": "\ud83d\udccb OVERVIEW",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1776,
        576
      ],
      "parameters": {
        "width": 552,
        "height": 1020,
        "content": "## \ud83d\udd17 LinkedIn Lead Finder & CRM Enricher (Unipile)\n**Who is this for?** Sales teams, recruiters, and growth operators who want to automatically build and enrich a prospect list from LinkedIn and sync it into a Google Sheet CRM \u2014 hands-free, every day.\n\n**What it does (high level):** Searches LinkedIn via Unipile's API using keywords you define, fetches full profile details for each match, and upserts every lead into a Google Sheet with 12 enriched fields. Rate-limited and error-safe out of the box.\n\n---\n**\u2699\ufe0f How it works**\n1. The Schedule Trigger fires daily at 08:00 and passes config values (DSN, account ID, keywords) to all downstream nodes.\n2. Unipile's Search API (`POST /api/v1/linkedin/search`) runs a keyword search and auto-paginates via cursor across up to 3 pages (configurable).\n3. Results are split per profile, de-duplicated by LinkedIn ID, and capped at a safe daily enrichment limit.\n4. Each profile is enriched via `GET /api/v1/users/{id}?linkedin_sections=*` \u2014 5 at a time, with a 3-second pause to respect LinkedIn rate limits.\n5. A Set node maps the Unipile response to 12 clean CRM columns and upserts the row into Google Sheets (matched on `public_identifier` \u2014 no duplicates on re-runs).\n6. Any error (search failure or per-profile failure) is caught, retried 3\u00d7, then logged to an Errors tab without stopping the run.\n\n---\n**\ud83d\udee0\ufe0f Setup \u2014 what you need before running**\n- [ ] A [Unipile](https://unipile.com) account with a connected LinkedIn account \u2014 copy your **DSN** and **account_id** from the Dashboard\n- [ ] Create an n8n **Header Auth** credential named `Unipile API Key` \u2192 header name: `X-API-KEY` \u2192 value: your Unipile access token\n- [ ] Create a Google Sheet named `LinkedIn Lead Finder - CRM` with two tabs: **Leads** and **Errors** (columns listed in Section 4 sticky below)\n- [ ] Connect your **Google Sheets OAuth2** credential to all three Google Sheets nodes\n- [ ] Fill in your DSN, account_id, and search keywords in the **\u2699\ufe0f Config** node (Section 1)"
      },
      "typeVersion": 1
    },
    {
      "id": "bb7827d9-4efc-4596-b73f-da62786d0e9b",
      "name": "\ud83d\udfe6 BG Section 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1184,
        688
      ],
      "parameters": {
        "color": 7,
        "width": 524,
        "height": 400,
        "content": "**\u2460 Configure Search & Credentials**\nFill in your Unipile DSN, account_id, keywords, and daily limits in the Config node. Attach credentials to the two HTTP nodes."
      },
      "typeVersion": 1
    },
    {
      "id": "633748f0-3ca2-48f8-a44b-de19c9618d00",
      "name": "\ud83d\udfe6 BG Section 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -640,
        688
      ],
      "parameters": {
        "color": 7,
        "width": 928,
        "height": 400,
        "content": "**\u2461 Search LinkedIn & Clean Results**\nSearches via Unipile Search API, paginates, splits items, removes duplicates, and caps to daily limit."
      },
      "typeVersion": 1
    },
    {
      "id": "3295ed66-a13a-4889-a146-161f001a5ec3",
      "name": "\ud83d\udfe6 BG Section 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        320,
        688
      ],
      "parameters": {
        "color": 7,
        "width": 1320,
        "height": 400,
        "content": "**\u2462 Enrich Profiles (Rate-Limited Loop)**\nBatches 5 profiles at a time, fetches full LinkedIn profile from Unipile, maps to 12 CRM fields, writes to Google Sheets, waits 3 seconds between batches."
      },
      "typeVersion": 1
    },
    {
      "id": "6baa3369-44a6-4bb3-bc4f-6df3b787804b",
      "name": "\ud83d\udfe6 BG Section 4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        608,
        1120
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 412,
        "content": "**\u2463 Error Logging**\nSearch failures \u2192 Log Search Error node. Per-profile failures \u2192 Log Enrichment Error node. Both retry 3\u00d7 before logging. Run never stops."
      },
      "typeVersion": 1
    },
    {
      "id": "4014f811-7f5f-4c3a-afb7-e4f25047c069",
      "name": "\ud83d\udccc Config Setup",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1104,
        1120
      ],
      "parameters": {
        "color": 3,
        "width": 384,
        "height": 380,
        "content": "**\ud83d\udc49 Add your details here:**\n\n`unipile_dsn`\nYour Unipile DSN\ne.g. `https://api1.unipile.com:13111`\n(Dashboard \u2192 Settings)\n\n`unipile_account_id`\nYour LinkedIn account ID\n(Dashboard \u2192 Accounts tab)\n\n`search_keywords`\nChange to your target role/ICP\n\n`max_profiles_to_enrich`\nKeep \u2264 100 per day (LinkedIn limit)"
      },
      "typeVersion": 1
    },
    {
      "id": "5ba62d5e-1226-4e09-81a0-87e51799335c",
      "name": "\ud83d\udccc Credentials Setup",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -400,
        1136
      ],
      "parameters": {
        "color": 3,
        "width": 292,
        "height": 276,
        "content": "**\ud83d\udc49 Add your Unipile API Key:**\n\nCreate a **Header Auth** credential:\n- Name: `Unipile API Key`\n- Header name: `X-API-KEY`\n- Value: your Unipile access token\n\nAttach it to:\n\u2705 Search LinkedIn node\n\u2705 Get Full LinkedIn Profile node"
      },
      "typeVersion": 1
    },
    {
      "id": "d94dcf12-a8c0-48dd-bbf9-023ffe8fc85e",
      "name": "\ud83d\udccc Google Sheets Setup",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1296,
        1168
      ],
      "parameters": {
        "color": 3,
        "width": 480,
        "height": 348,
        "content": "**\ud83d\udc49 Set up your Google Sheet:**\n\n1. Create a sheet named:\n`LinkedIn Lead Finder - CRM`\n\n2. Add tab **Leads** with columns:\n`full_name` `headline` `location`\n`current_title` `current_company`\n`profile_url` `public_identifier`\n`connection_degree` `email`\n`summary` `search_keywords` `enriched_at`\n\n3. Add tab **Errors** with columns:\n`when` `stage` `profile_id` `error_message`\n\n4. Select your sheet in the **Document** field of all 3 Google Sheets nodes and connect your **Google Sheets OAuth2** credential."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": true,
    "executionOrder": "v1"
  },
  "versionId": "2a08363c-1791-4d61-99b5-4274937f2a8a",
  "nodeGroups": [],
  "connections": {
    "MapToCRM": {
      "main": [
        [
          {
            "node": "UpsertLead",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "BatchLoop": {
      "main": [
        [],
        [
          {
            "node": "FetchProfile",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SetConfig": {
      "main": [
        [
          {
            "node": "SearchLinkedIn",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "UpsertLead": {
      "main": [
        [
          {
            "node": "WaitRateLimit",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "LogEnrichError",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "CapProfiles": {
      "main": [
        [
          {
            "node": "BatchLoop",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "DailyTrigger": {
      "main": [
        [
          {
            "node": "SetConfig",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ExtractItems": {
      "main": [
        [
          {
            "node": "RemoveDuplicates",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "FetchProfile": {
      "main": [
        [
          {
            "node": "MapToCRM",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "LogEnrichError",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "WaitRateLimit": {
      "main": [
        [
          {
            "node": "BatchLoop",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "LogEnrichError": {
      "main": [
        [
          {
            "node": "WaitRateLimit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "SearchLinkedIn": {
      "main": [
        [
          {
            "node": "ExtractItems",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "LogSearchError",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RemoveDuplicates": {
      "main": [
        [
          {
            "node": "CapProfiles",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Automatically search LinkedIn for prospects using Unipile's API, enrich each profile with full details, and sync leads into a Google Sheet CRM — runs daily on a schedule with rate limiting, deduplication, and error logging built in. A daily Schedule Trigger fires at 08:00 and…

Source: https://n8n.io/workflows/16916/ — original creator credit. Request a take-down →

More Marketing & Ads workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Marketing & Ads

This workflow transforms your Meta Ads creatives into a rich dataset of actionable insights. It's designed for data-driven marketers, performance agencies, and analysts who want to move beyond basic m

Facebook Graph Api, HTTP Request, Google Sheets
Marketing & Ads

I created this workflow with great care to help you simplify your daily reporting routine. If you manage Meta Ads campaigns, you know how time-consuming it can be to open Ads Manager, filter data, and

Google Sheets, Facebook Graph Api, Gmail +1
Marketing & Ads

I built this workflow to remove the daily pain of Meta Ads reporting. If you manage multiple ad accounts, you know how time-consuming it is to open Ads Manager, export campaign data, clean spreadsheet

Google Sheets, HTTP Request, Telegram
Marketing & Ads

This workflow monitors Meta Ads and Google Ads campaigns on a daily schedule to detect performance drops. It fetches yesterday’s campaign data, standardizes metrics, and calculates CTR and ROAS agains

Google Sheets, HTTP Request, Slack +3
Marketing & Ads

Pulls targeted leads from Apollo using predefined ICP filters Enriches each lead with Apollo people enrichment Filters verified contacts and formats lead data Creates or updates contacts inside MeldFl

Google Sheets, HTTP Request