Get the FREE Ultimate OpenClaw Setup Guide →
d

ABM Outbound

Scanned

@dru-ca

npx machina-cli add skill @dru-ca/abm-outbound --openclaw
Files (1)
SKILL.md
7.4 KB

ABM Outbound

Turn LinkedIn prospect lists into multi-channel outbound: email sequences, LinkedIn touches, and handwritten letters.

Prerequisites

ServicePurposeSign Up
ApifyLinkedIn scraping, Skip Traceapify.com
ApolloEmail & phone enrichmentapollo.io
ScribelessHandwritten lettersplatform.scribeless.co
Instantly (optional)Dedicated cold emailinstantly.ai
export APIFY_API_KEY="your_key"
export APOLLO_API_KEY="your_key"
export SCRIBELESS_API_KEY="your_key"

Pipeline

┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  1. INPUT   │───▶│  2. SCRAPE  │───▶│  3. ENRICH  │───▶│  4. ADDRESS │───▶│ 5. OUTREACH │
│  LinkedIn   │    │  Profiles   │    │ Email/Phone │    │ Skip Trace  │    │             │
│    URLs     │    │             │    │             │    │             │    │             │
└─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘
   Your list          Apify             Apollo            Apify PFI        Email +
                                                                          LinkedIn +
                                                                          Scribeless

Step 1: Gather LinkedIn URLs

Provide a list of LinkedIn profile URLs from:

  • LinkedIn Sales Navigator exports
  • LinkedIn search scrapers
  • CRM exports
  • Manual prospecting
linkedin_url
https://linkedin.com/in/johndoe
https://linkedin.com/in/janesmith

Step 2: Scrape LinkedIn Profiles

curl -X POST "https://api.apify.com/v2/acts/harvestapi~linkedin-profile-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "profileUrls": [
      "https://linkedin.com/in/johndoe",
      "https://linkedin.com/in/janesmith"
    ]
  }'

Returns: First name, last name, company, title, location.

Step 3: Enrich with Apollo (Email & Phone)

curl -X POST "https://api.apollo.io/api/v1/people/bulk_match" \
  -H "X-Api-Key: $APOLLO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "reveal_personal_emails": true,
    "reveal_phone_number": true,
    "details": [{
      "first_name": "John",
      "last_name": "Doe",
      "organization_name": "Acme Corp",
      "linkedin_url": "https://linkedin.com/in/johndoe"
    }]
  }'

Returns: Work email, phone numbers.

Step 4: Get Mailing Address (Skip Trace)

curl -X POST "https://api.apify.com/v2/acts/one-api~skip-trace/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": ["John Doe"]}'

Returns: Street address, city, state, postal code.

Important: Verify Skip Trace state matches LinkedIn location.

Step 5: Multi-Channel Outreach

5a: Email Sequence

Option 1: Apollo Sequences (Recommended)

curl -X POST "https://api.apollo.io/api/v1/emailer_campaigns/add_contact_ids" \
  -H "X-Api-Key: $APOLLO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "emailer_campaign_id": "YOUR_SEQUENCE_ID",
    "contact_ids": ["CONTACT_ID_1", "CONTACT_ID_2"],
    "send_email_from_email_account_id": "YOUR_EMAIL_ACCOUNT_ID"
  }'

Option 2: Instantly.ai

curl -X POST "https://api.instantly.ai/api/v1/lead/add" \
  -H "Authorization: Bearer $INSTANTLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaign_id": "YOUR_CAMPAIGN_ID",
    "email": "john@acme.com",
    "first_name": "John",
    "last_name": "Doe",
    "company_name": "Acme Corp",
    "personalization": "Saw Acme just expanded to UK"
  }'

Option 3: CSV Upload

email,first_name,last_name,company,title,phone,personalization
john@acme.com,John,Doe,Acme Corp,VP Marketing,555-1234,Saw Acme just expanded to UK

5b: LinkedIn Sequence

  • Day 1: View profile
  • Day 2: Connection request with personalized note
  • Day 4: Follow-up message if connected
  • Day 7: Engage with their content

5c: Handwritten Letter (Scribeless)

Create campaign at platform.scribeless.co, then add recipients:

curl -X POST "https://platform.scribeless.co/api/recipients" \
  -H "X-API-Key: $SCRIBELESS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "campaignId": "YOUR_CAMPAIGN_ID",
    "data": {
      "firstName": "John",
      "lastName": "Doe",
      "company": "Acme Corp",
      "address": {
        "address1": "123 Main St",
        "city": "San Francisco",
        "state": "CA",
        "postalCode": "94102",
        "country": "US"
      },
      "variables": {
        "custom1": "Saw Acme just expanded to the UK — congrats!"
      }
    }
  }'

See references/scribeless-api.md for full API details.

Coordinated Timing

DayEmailLinkedInLetter
1View profileLetter sent
3Connection request
5"Got my note?"Letter arrives
7Value emailMessage if connected
10Case study
14Break-upEngage content

The play: Letter lands → Email references it → LinkedIn reinforces.

Complete Workflow

# 1. Start with LinkedIn URLs
linkedin_urls = load_csv("prospects.csv")

# 2. Scrape profiles
profiles = apify_linkedin_scrape(linkedin_urls)

# 3. Enrich with Apollo
for profile in profiles:
    enriched = apollo_bulk_match(profile)
    profile['email'] = enriched['email']
    profile['phone'] = enriched['phone']

# 4. Get mailing addresses
for profile in profiles:
    address = skip_trace(profile['name'])
    if address['state'] == profile['linkedin_state']:
        profile['address'] = address
        profile['mailable'] = True

# 5. Push to channels
push_to_email_tool(profiles)
push_to_scribeless(profiles, campaign_id)
export_for_linkedin(profiles)

Output Format

first_name,last_name,email,phone,company,title,address1,city,state,postal,country,linkedin,mailable
John,Doe,john@acme.com,555-1234,Acme Corp,VP Marketing,123 Main St,San Francisco,CA,94102,US,linkedin.com/in/johndoe,TRUE

Best Practices

  1. Verify addresses — Skip Trace state should match LinkedIn location
  2. Personalize everything — Company news, job changes, shared connections
  3. Coordinate timing — Letter lands before "did you get my note?" email
  4. Start small — Test with 20-50 prospects before scaling
  5. Track by channel — Know which channel drives replies

Source

git clone https://clawhub.ai/dru-ca/abm-outboundView on GitHub

Overview

ABM Outbound turns LinkedIn prospect lists into coordinated multi-channel campaigns. It scrapes profiles, enriches with Apollo for email and phone, retrieves mailing addresses via Skip Trace, and orchestrates email sequences, LinkedIn touches, and handwritten letters via Scribeless to stand out in crowded inboxes.

How This Skill Works

The workflow begins with gathering LinkedIn URLs, then scraping profiles using Apify. Next, Apollo enriches each profile with work emails and phone numbers, followed by Get Mailing Address via Skip Trace. Finally, it coordinates multi-channel outreach across email sequences, LinkedIn touches, and handwritten letters through Scribeless, with an optional dedicated cold email path via Instantly.

When to Use It

  • You have a list of LinkedIn URLs and want a coordinated multi-channel outbound campaign.
  • You need verified emails, phone numbers, and mailing addresses to personalize outreach at scale.
  • You want to differentiate outreach with handwritten letters for high-value accounts.
  • You aim to scale ABM cadences across email, LinkedIn, and postal touches without manual routing.
  • You are validating data quality and location alignment before a large-scale rollout.

Quick Start

  1. Step 1: Prepare your LinkedIn URL list and set up API keys for Apify, Apollo, and Scribeless (and optional Instantly for cold email).
  2. Step 2: Run the scrape, enrich, and address steps using the API endpoints described in the Pipeline to build complete contact records.
  3. Step 3: Configure your outreach cadences (email, LinkedIn touches, and Scribeless letters) and launch the multi-channel campaign.

Best Practices

  • Start with a clean, deduplicated LinkedIn URL list and consistent contact identifiers.
  • After enrichment, verify data quality (deliverability of emails, validity of phone numbers, accuracy of roles).
  • Cross-check Skip Trace addresses with LinkedIn location to avoid misaddressed mail.
  • Design cadences that stagger channels to prevent overlap and fatigue across touches.
  • Run a small pilot with clearly defined KPIs (response rate, meeting rate, letter response) before scaling.

Example Use Cases

  • A SaaS vendor targets mid-market IT buyers by pairing LinkedIn outreach with targeted emails and personalized handwritten notes.
  • An industrial supplier reaches procurement and operations leads using address-based mail plus email follow-ups.
  • A fintech startup engages CFOs with coordinated emails, LinkedIn touches, and handwritten letters to differentiate outreach.
  • A marketing services firm uses Apollo enrichment to add phone numbers for warm calls after initial emails.
  • An HR tech vendor sends handwritten letters to VP-level accounts while continuing email and LinkedIn engagement.

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers