playbook-social-posts

Fetches recent LinkedIn posts from company or person profiles for cold outreach personalization.

Updated May 28, 2025
One-click install
npx skills add https://github.com/meloShaya/insteltech --skill playbook-social-posts-meloshaya
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: playbook-social-posts
Source: https://github.com/meloShaya/insteltech/tree/main/crm/library/skills/playbooks/playbook-social-posts
Command: npx skills add https://github.com/meloShaya/insteltech --skill playbook-social-posts-meloshaya

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Cold outreach campaigns need proof that you read a prospect's content, but manually checking LinkedIn profiles at scale is slow and inconsistent. This playbook scrapes the most recent usable LinkedIn post from a company page or personal profile and stores the raw post text, URL, and age as reusable personalization variables. ## Core Features & Use Cases - Batched async scraping: Runs an async 3-call pattern (start, poll, read dataset) over up to 100 profile URLs per batch, with reposts off and a 3-month window, keeping cost near $2.95 per 1,000 unique profiles. - Mandatory fail-closed content filter: Skips personal, political, bereavement, and charged posts, advancing to the next post rather than abstaining, so only sendable business content reaches your copy. - Optional AI personalization line: Generates a one-line reference (e.g., "Noticed they became an IBM Business Partner") only when the operator opts in, with list-split guidance instead of spintax gating. - Use Case: A sales team with a 1,000-contact list across 620 companies dedupes to unique profiles, scrapes recent posts, fans company posts back out to every contact, and uploads two segments to their sequencer with an honest A/B control. ## Quick Start Ask the assistant to fetch the most recent usable LinkedIn post for each profile URL in my prospect list and output the post text, URL, and days ago.

Frequently Asked Questions about playbook-social-posts

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I get a prospect's recent LinkedIn post for cold email personalization?

Provide the company page or personal profile URL and run the async 3-call scrape pattern: start the run, poll for completion, then read the dataset. The playbook returns the post text, URL, days ago, and author type, with an optional one-line personalization on request.

How do I scrape LinkedIn posts at scale without high costs?

Batch up to 100 profile URLs per run start, since each run start bills separately and a batch of 8 costs the same start fee as a batch of 1. Dedupe contacts to unique profiles before scraping and fan results back out, cutting cost from about $2.95 to $1.83 per 1,000 contacts.

Can this playbook use both company pages and personal LinkedIn profiles?

Yes, one scraper accepts both URL types. Company posts fan out to every contact at that company, while person posts never fan out. Group results on universalName or publicIdentifier, because the company-style identifier is null on person items.

Why are person profile rows coming back empty after scraping?

On person items the company-style identifier is null and the slug lives in publicIdentifier instead. Group on universalName or publicIdentifier and normalize URLs before joining, otherwise every person row silently vanishes with no error.

What fill rate should I expect for recent LinkedIn posts?

Testing showed 71% coverage on high-frequency B2B SaaS company pages, which is an upper bound. SMB, trades, and long-tail lists typically yield 20 to 40%, so measure fill on a 100-row sample of your own list before writing copy around it.

Why should I not use spintax to gate the personalization line?

Spintax picks at random and cannot see an empty variable, so it renders broken text like "Noticed ." and discards personalization you already paid for. Split the list on a non-empty social_post_line before upload and rewrite the clause for the empty segment.