Tutorial

How to Add a Citation Layer to LinkedIn Outreach Messages

Enrich LinkedIn outreach with real citations from search data. Reference specific articles, news, or company updates in your messages.

An r/micro_saas post showed that generic LinkedIn outreach gets ignored. The fix: reference something specific about the prospect's company -- a recent article, a product launch, a hiring post. This tutorial builds a citation layer that enriches outreach messages with real, verifiable references from search data.

Prerequisites

  • Scavio API key
  • Python 3.8+
  • List of prospect companies or people

Walkthrough

Step 1: Research the prospect's company

Search for recent news and mentions.

Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}

def research_company(company_name):
    news = requests.post('https://api.scavio.dev/api/v1/search',
        headers=H,
        json={'platform': 'google', 'query': f'{company_name} news 2026'}).json()
    reddit = requests.post('https://api.scavio.dev/api/v1/search',
        headers=H,
        json={'platform': 'reddit', 'query': company_name}).json()
    return {
        'news': news.get('organic_results', [])[:3],
        'reddit': reddit.get('results', [])[:3]
    }

Step 2: Extract citation-worthy details

Find specific, referenceable facts.

Python
def extract_citations(research):
    citations = []
    for article in research['news']:
        title = article.get('title', '')
        link = article.get('link', '')
        if any(kw in title.lower() for kw in ['launch', 'raise', 'announce', 'hire', 'expand', 'partner']):
            citations.append({'type': 'news', 'title': title, 'url': link})
    for post in research['reddit']:
        if post.get('upvotes', 0) > 20:
            citations.append({'type': 'reddit', 'title': post.get('title', ''), 'url': post.get('url', '')})
    return citations

Step 3: Generate personalized message with citations

Weave the citation into a natural outreach message.

Python
def personalized_message(prospect_name, company, citations, your_offer):
    if not citations:
        return None  # Skip if no good citations found
    cite = citations[0]
    return (f'Hi {prospect_name},\n\n'
            f'I saw {company} was mentioned in "{cite["title"]}" -- '
            f'congrats on the momentum.\n\n'
            f'I work on {your_offer} and thought it might be relevant '
            f'given what you are building. Worth a quick look?\n\n'
            f'Reference: {cite["url"]}')

Step 4: Batch process a prospect list

Enrich an entire outreach list with citations.

Python
import csv

def enrich_outreach_list(input_csv, output_csv, your_offer):
    with open(input_csv) as fin, open(output_csv, 'w', newline='') as fout:
        reader = csv.DictReader(fin)
        writer = csv.DictWriter(fout, fieldnames=['name', 'company', 'message', 'citation_url'])
        writer.writeheader()
        for row in reader:
            research = research_company(row['company'])
            citations = extract_citations(research)
            msg = personalized_message(row['name'], row['company'], citations, your_offer)
            if msg:
                writer.writerow({'name': row['name'], 'company': row['company'],
                    'message': msg, 'citation_url': citations[0]['url']})

Python Example

Python
import os, requests
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}

def cite_enrich(company):
    data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
        json={'platform': 'google', 'query': f'{company} news 2026'}).json()
    for r in data.get('organic_results', [])[:3]:
        print(f"Citation: {r['title']}\n  URL: {r['link']}")

cite_enrich('Stripe')

JavaScript Example

JavaScript
const res = await fetch('https://api.scavio.dev/api/v1/search', {
  method: 'POST',
  headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
  body: JSON.stringify({platform: 'google', query: `${company} news 2026`})
});
const data = await res.json();
const citation = data.organic_results?.[0];

Expected Output

JSON
Enriched outreach CSV with personalized messages containing real citations. 2 queries per prospect (Google + Reddit) = $0.01/prospect.

Related Tutorials

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

Scavio API key. Python 3.8+. List of prospect companies or people. A Scavio API key gives you 500 free credits per month.

Yes. The free tier includes 500 credits per month, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Start Building

Enrich LinkedIn outreach with real citations from search data. Reference specific articles, news, or company updates in your messages.