Skip to content
Sales
Skill

/playbook-social-link-finding

Resolve a company domain to its verified official social profile URLs (LinkedIn, X, Facebook, Instagram, YouTube, TikTok). Triggers on "find their LinkedIn", "get the company LinkedIn URL", "find their Instagram", "we need social handles for this list", "which companies have a

BOOST
From plugin
coldoutboundskills
76452 skills
Install
$ npx -y skills add growthenginenowoslawski/coldoutboundskills --skill playbook-social-link-finding --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/playbook-social-link-finding

Context preview

The summary Claude sees to decide when to auto-load this skill.

Resolve a company domain to its verified official social profile URLs (LinkedIn, X, Facebook, Instagram, YouTube, TikTok). Triggers on "find their LinkedIn", "get the company LinkedIn URL", "find their Instagram", "we need social handles for this list", "which companies have a

SKILL.md

playbook-social-link-finding.SKILL.md
name: playbook-social-link-finding
description: Resolve a company domain to its verified official social profile URLs (LinkedIn, X, Facebook, Instagram, YouTube, TikTok). Triggers on "find their LinkedIn", "get the company LinkedIn URL", "find their Instagram", "we need social handles for this list", "which companies have a TikTok", "social links for the TAM". Outputs one canonical profile URL per platform, or an empty string when the company genuinely has no account.

Playbook: Company Social Link Finding

> All rules here are best practice, not law. Override any of them when the campaign calls for it; note the best practice once and move on.

**Use when:** a campaign or a downstream playbook needs the company's own social profile URL — most often LinkedIn for engagement scraping, or Instagram and Facebook for a DTC brand angle.

**Do not use when:** you want a **person's** profile, post-level engagement (`playbook-linkedin-engagement`), or an ad-library readout (`playbook-ad-library`, which consumes this playbook's Facebook output).

**One-line output:** `company_linkedin_url = "https://www.linkedin.com/company/yampa-precision-manufacturing"`

1. Trigger and scope

One bare domain in, up to six verified profile URLs out.

**This is infrastructure, not copy.** Almost nothing here goes into an email directly. What it does is feed the playbooks that DO produce copy — and every one of them treats the URL you hand over as ground truth and scrapes whatever is behind it.

**That is the whole reason this playbook is strict:**

> A social URL that points at a similarly named company is **worse than an empty cell**, because the > empty cell degrades gracefully and the wrong URL produces confident, specific, completely false > personalization.

Both paid sources in the chain were measured returning **the wrong company's page** on real rows, so **every value that did not come off the company's own website has to clear an ownership check before it is written.**

2. Output contract

Inputs

| Field | Type | Required? | |---|---|---| | `domain` (bare, lowercase, no scheme, no `www`, no path) | string | yes | | `company_name` | string | yes — the verifier and the search queries both need it |

Output fields

One canonical URL per platform, or `""`:

`company_linkedin_url` · `company_x_url` · `company_facebook_url` · `company_instagram_url` · `company_youtube_url` · `company_tiktok_url`

Plus, per platform, the **evidence source** that produced it. Keep that column: it is how you decide later whether a value is trustworthy enough for a new use.

**Abstain value:** `""`. An empty cell means "no account found", which is a real and common answer.

3. Source chain (cost-tagged)

| # | Source | Cost | What it gives | Notes | |---|---|---|---|---| | 1 | An internal company database, exact `domain:=` lookup | FREE | LinkedIn only | always run — it also supplies `company_name`. **Exact match only, never fuzzy** | | 2 | A company-search API, **batched by domain** | FREE / cheap | LinkedIn 6/8, X 5/8, FB 5/8, IG 4/8, **YouTube 0/8, TikTok 0/8** (no field exists) | ⚠️ see the batching trap below. **Bind results by PRIMARY domain only** | | 2b | A domain ↔ company-profile converter | CHEAP | LinkedIn only, **both directions** | the reverse direction is what other playbooks come here for | | 3 | **Plain website HTML fetch** — `https://<d>`, then `https://www.<d>`, then `http://<d>`, then `/contact`, `/about`, `/contact-us` | FREE | **the winning value on 5/8 rows, and the ONLY source of TikTok** | **the strongest evidence in the whole chain**, because a link in the company's own footer is self-attested ownership. **Pick the best match on the page, never the first one** | | 3b | Rendering proxy | METERED | recovers bot-blocked sites | 1/1 on the blocked row, returned 4 correct platforms. ⚠️ see the challenge-page trap | | 4 | SERP search, one simple query per empty platform | CHEAP | 5 correct values plus **4 correct rejections** across 8 rows | never an OR chain | | 5 | **Model ownership verifier** | CHEAP | **20/20 correct decisions including 4 decoys** | **mandatory** on every search-derived and every secondary-domain candidate. Does not run on a site-footer value, which is self-attested |

⚠️ The batching trap

A company-search endpoint that accepts an array of domains may still be **hard-paginated at 25 results per page with no page-size parameter.**

Measured: posting **35 domains** returned `{"current_page":1,"per_page":25,"total_page":2,"total_count":32}` and **25 results**.

**So a 500-domain body does not return 500 matches. It returns 25, and the other ~475 come back as nothing — with no error and no warning.** An earlier draft of this playbook claimed "500 domains per call" and would have **silently dropped roughly 95% of matches on any real backfill.**

Two things, both required:

  • **Chunk to the page size** (25 here), and
  • **still loop `page` to `total_page`**, because one domain can match more than one company record.

The live test could not catch this, because it used 8 domains — under the page cap — **even though the raw response already said `"per_page": 25`.** Read the pagination block on your first call, every time.

⚠️ The challenge-page trap

Advance to the rendering proxy on HTTP 403, HTTP 429, **or a 200 whose body is a challenge page.**

**Check the body, not just the status.** A common bot interstitial is served with **HTTP 200**, yields zero matches, and otherwise looks like a clean legitimate miss.

⚠️ X requires company-site evidence, from every path

Accept search-derived evidence for LinkedIn, Facebook, Instagram, YouTube and TikTok. **For X, require evidence from the company's own site.**

**X handles are short, recycled and squatted.** Measured: searching `site:x.com <brand>` returned a handle that **matched the brand better than the real account does** — and was titled "Bug Poc".

This bans search-derived X **and** database-derived X, includ

Read more
Ships withcoldoutboundskills

Open-source Claude Code skills for cold email infrastructure, lead sourcing, copywriting, and operations. Built by GrowthEngineX from patterns across 1,000+ real B2B campaigns. 31 skills that work together.

Get the whole plugin
Stats
766
Stars
269
Forks
Active
Maintenance
TypeScript
Language
MIT
License
9d ago
Last commit
7mo ago
Created
5h ago
Added

Repo: growthenginenowoslawski/coldoutboundskills

Other skills on coldoutboundskills.