Score Sales Navigator leads by ICP and draft outreach with n8n

Queue Sales Navigator searches in Notion, pull every lead with Periodix Actions, score each one against your ICP with AI, and save qualified leads with a connection note and first message to Google Sheets.

Save Sales Navigator or LinkedIn search URLs in a Notion database, and n8n does the rest: it pulls every lead with Periodix Actions, scores each one against your ICP with AI, and writes a personalized connection note and first follow-up message for qualified leads. Rejected leads are logged with the reason, so you can refine your ICP over time.

Why scoring before outreach beats messaging everyone or enriching every row in Clay, and how to run the same flow from MCP or REST: see the playbook Score LinkedIn or Sales Navigator leads by ICP and draft outreach.

Import the template: Score LinkedIn ICP leads and draft outreach with Claude, Notion and Sheets

What you need

  • A Periodix Actions account with a connected LinkedIn profile (3-day free trial). Sales Navigator searches need an active Sales Navigator subscription on that profile.
  • The Periodix Actions node installed (listed in n8n as Periodix LinkedIn), see Installation
  • An Anthropic API key added as an n8n credential (OpenAI or Gemini also work with small changes)
  • A Notion database with these properties: Status (select: Pending, Done), Sales Nav URL (URL), Campaign (text), Processed At (date)
  • A Google Sheet with two tabs, Validated and Rejected, with these column headers: First Name, Last Name, Title, Company, Location, Industry, LinkedIn URL, Score, Reason, Connection Note, M1 Message, Campaign, Date, Notion Page ID

Workflow at a glance

Schedule Trigger → Notion: Get Pending Search URLs → Extract Sales Nav URLs → Loop Over Search URLs → Search by URL (Periodix Actions) → Sanitize Profiles → Loop Over Profiles → Claude: Scoring → Score ≥ 5? → Claude: Connection Note + M1 → Sheets: Append Validated / Sheets: Append Rejected → Notion: Mark as Done

Step by step

1. Schedule Trigger

Runs every hour by default and picks up any new searches your team adds to Notion.

2. Notion: Get Pending Search URLs

  • Resource: Database Page
  • Operation: Get Many
  • Filter: Status equals Pending

Your team adds a row per search: a campaign name and a LinkedIn or Sales Navigator search URL. Nobody has to open n8n.

3. Extract Sales Nav URLs (Code node)

Maps each Notion page to three fields: notion_page_id, campaign_name, and sales_nav_url, and drops rows without a URL.

4. Loop Over Search URLs and Search by URL (Periodix Actions: Search)

Processes one search at a time:

  • Resource: Search
  • Profile: your connected LinkedIn profile
  • Search URL: {{ $('Loop Over Search URLs').item.json.sales_nav_url }}
  • Limit: the maximum number of leads per search

The search runs asynchronously with automatic rate limiting. Each lead becomes one item.

5. Sanitize Profiles (Code node)

Normalizes each lead to clean fields: first name, last name, headline, current role and company, location, industry, summary, and public profile URL. It also removes duplicates within the batch and trims long text, so the AI prompt stays small and predictable.

6. Claude: Scoring (HTTP Request)

For each lead, AI scores ICP fit from 1 to 10 with a short reason, based on headline, role, company, location, industry, and summary. Put your ICP rules in this prompt: target roles, company types, geographies, and what does not qualify. The more concrete the signals, the better the scores.

7. Score ≥ 5? (If node)

Leads scoring 5 or higher go to the outreach step. Everyone else goes to the Rejected tab with the score and reason.

8. Claude: Connection Note + M1 (HTTP Request)

For qualified leads only, a second AI call writes a connection note and a first follow-up message (M1) based on the lead's profile. Put your tone, value proposition, and banned phrases in this prompt.

9. Sheets: Append Validated and Append Rejected

Validated leads are saved with score, reason, connection note, and M1. Rejected leads are saved with score and reason. Both include the campaign name and Notion page ID, so you can trace every lead back to its search.

10. Notion: Mark as Done

When all leads from a search are processed, the Notion row is set to Done with a Processed At date.

Example output (Validated tab row)

{
  "First Name": "Maria",
  "Last Name": "Lopez",
  "Title": "Head of Growth",
  "Company": "Example Analytics",
  "Location": "Madrid, Spain",
  "Industry": "Software Development",
  "LinkedIn URL": "https://www.linkedin.com/in/marialopez",
  "Score": 8,
  "Reason": "Growth leader at a B2B SaaS company running outbound, in target geography.",
  "Connection Note": "Maria, your post on rebuilding outbound around intent signals was a great read. Would love to connect.",
  "M1 Message": "Thanks for connecting, Maria. Rebuilding outbound around signals usually means stitching several tools together. How are you handling the step from signal to first message today?",
  "Campaign": "Spain SaaS growth leaders",
  "Date": "2026-09-25",
  "Notion Page ID": "00000000-0000-0000-0000-000000000000"
}

Customization

  • Stricter or looser filter: change the threshold in Score ≥ 5? to 6 or 7 for fewer, better leads.
  • Skip leads already processed: add Google Sheets read nodes for the Validated and Rejected tabs before Sanitize Profiles, and drop any LinkedIn URL that already appears there. This avoids paying to score the same person twice across searches.
  • Pre-filter by geography: drop leads from locations outside your target countries in Sanitize Profiles, before any AI call.
  • Send automatically: add a Periodix Actions node after Append Validated with Resource: Connection, Operation: Send Request, and the Connection Note as the note. Add a Wait node with a randomized delay between sends.
  • Different AI provider: swap the URL and body in both AI nodes.

Troubleshooting

  • Nothing happens: check that Notion rows have Status set to Pending and a valid URL in Sales Nav URL.
  • Sales Navigator search returns nothing: the connected profile needs an active Sales Navigator subscription. LinkedIn Classic URLs work without it.
  • Authentication error from Claude: use an Anthropic credential in the HTTP Request node instead of pasting the key into a header, and check that the key is active.
  • Scoring fails with a JSON error: the AI reply was not valid JSON. Keep the "Respond only in valid JSON" instruction and strip code fences before parsing.
  • Notion row stays Pending: the Mark as Done step runs only after the whole search is processed. Check the execution log for the step where the run stopped.

Related


Did this page help you?