THE SIGNAL

Most outbound treats "they are hiring a VP Sales" as a buying signal.

It is not. It is noise.

Every lead gen tool on the market can see that a company is hiring. Every AI SDR queues up a templated "I saw you are hiring a Head of Growth..." email the same day a posting goes live. Which is exactly why those emails get 1.8% reply rates. The posting is public. The opener writes itself. Every single vendor in the category is sending some version of the same message.

The actual buying signal is one layer deeper, and 99% of outbound tools skip it. It lives inside the body of the job description itself.

Here is what I mean.

A company posting "VP Sales" tells you nothing. A company posting "VP Sales to take over the sales function from our CEO and build our sales process from scratch" tells you four specific, actionable things:

  1. The founder is still running sales personally. They are the decision maker on this tool purchase.

  2. There is no existing sales infrastructure. No CRM to replace, no tool stack to uproot, no incumbent vendor to dislodge.

  3. The hire is late. Founder-selling has hit its ceiling and they are under real pressure to stop.

  4. Whoever lands first defines how the entire function gets built. Day-one relationships compound. Day-sixty relationships are already losing to whoever got in on day one.

None of that comes from the job title. All of it comes from one sentence buried halfway down a 1,200-word JD that most scrapers throw away.

That is the signal. And it is completely unmined because nobody reads the JD text at scale. They scrape titles, filter by seniority, and move on.

I built a skill that mines it. It is called JD Intent, and you can download it below.


What JD Intent Actually Does

JD Intent is a Claude Code skill file. You drop it into .claude/skills/jd-intent/SKILL.md in any project, then run it with a role keyword.

Its job is simple: take a list of LinkedIn job postings for a target role and rank the companies by how much real buying intent is visible in the JD body text. Output is a ranked CSV with the exact JD language to quote in your cold email opener.

Two input modes:

  1. Apify auto-scrape. Give it a role keyword and a company size range, and it builds a LinkedIn Jobs search URL, calls the Apify actor that scrapes LinkedIn Jobs, pulls down 100-500 postings, and runs the analysis. Total cost per run is under $5. You need an Apify API key for this mode.

  2. Bring your own CSV. Already have a job postings export from LinkedIn Recruiter, Greenhouse, Lever, or even a hand-collected spreadsheet? Hand it the CSV (columns: company_name, job_title, company_linkedin_url, employee_count, jd_text) and it runs the same ranking without touching any API. No subscription, no keys, no cost.

What happens after the scan:

  • Filters out recruiting firms (they list jobs on behalf of other companies and pollute every LinkedIn Jobs scrape)

  • Drops companies outside your size range

  • Deduplicates by company (so one company with three postings doesn't dominate the list)

  • Scans the JD body text for high-intent phrases across six categories

  • Scores each company and sorts HOT / WARM / COOL

  • Writes a suggested cold email opener for each company that quotes the exact JD language back

Run time: two to five minutes depending on volume. No ongoing cost. No database. One file, one argument, one CSV.


The Six Intent Categories

This is the core of the skill, and the part you will want to customize.

Category 1 - First Hire

The word "first" is the single strongest signal in any job description. "First marketing hire." "First SDR." "Our first in-house growth lead." It means the function does not exist yet. There are no tools to rip out, no vendor incumbents, no playbook to compete against. Whoever lands the day-one relationship defines how the function gets built.

Score: +3 per phrase matched.

Category 2 - Founder Handoff

When a JD explicitly names the CEO or founder as the person the hire is taking over from ("take over sales from the CEO", "reporting directly to the founder", "currently owned by the CEO"), you are reading a founder's desperation in writing. They are not delegating a task they never touched. They are offloading a function they have been running themselves, probably badly, for months.

Score: +3 per phrase matched.

Category 3 - Build From Scratch

Language like "build from scratch", "design our outbound motion", "define our ICP", or "greenfield opportunity" means there is no existing infrastructure to work around. The biggest objection in B2B ("we already have a tool for that") does not exist.

Score: +2 per phrase matched.

Category 4 - Sole Ownership

"Sole marketer." "Team of one." "You will be the marketing team." One hire owns the entire function. That means one decision maker, no committee, fast tool purchases, and a huge advantage for whoever gets in early with a working system.

Score: +2 per phrase matched.

Category 5 - Prior Attempt Failed

"Rebuild the pipeline." "Fix our attribution." "Overhaul our outbound." "Our previous agency." A previous attempt failed. The company already paid the budget scar. They are primed for a different approach and do not need to be convinced the problem is real.

Score: +2 per phrase matched.

Category 6 - Urgency / Mandate

"Post-Series A." "Hit $5M ARR in 18 months." "Recently raised." The hire has a quota that starts day one. Budget is approved. Board is watching.

Score: +1 per phrase matched.

Tiering:

  • HOT (6+): matches in two or more categories. Reach out today.

  • WARM (3-5): clear signal in one category. Reach out this week.

  • COOL (1-2): weak signal. Nurture list.

  • DROP (0): no intent. Remove.

A HOT company is one where two independent intent signals fire in the same JD - say, "first marketing hire" (Category 1) plus "recently raised Series A" (Category 6). That combination means the function does not exist yet AND the budget is sitting there AND the timeline is board-mandated. Those companies are worth emailing today, not next week.


How to Tune It For Your Own Signals

This is the part most lead gen tools will never give you, because they are trying to sell the same rules to every buyer.

The Tell Phrase Library inside the skill file is plaintext. Every phrase is a line you can add, edit, or delete. The skill reads the library from the same file at runtime, so any change you make takes effect on the next run.

How to customize:

  1. Open .claude/skills/jd-intent/SKILL.md in your editor

  2. Scroll to the "Tell Phrase Library" section

  3. Find the category that matches the signal you want to add

  4. Add your phrase on a new line inside the code block

  5. Save and run the skill again

Examples of tuning for specific markets:

  • Selling to fintech? Add "SOC 2", "compliance lead", "regulatory reporting" to Category 6 (Urgency). These phrases signal a board-level compliance deadline, which behaves exactly like a funding mandate.

  • Selling to developer tools companies? Add "DevRel", "developer advocate", "API monetization" to Category 1 (First Hire). A dev tools company hiring their first DevRel is in the same structural position as a SaaS company hiring their first marketer.

  • Selling to ecommerce brands? Add "Shopify Plus migration", "headless commerce", "subscription model" to Category 3 (Build From Scratch). These phrases flag a platform replatform, which is the ecommerce equivalent of greenfield GTM.

  • Selling to agencies? Add "billable utilization", "client services lead", "scope creep" to Category 5 (Prior Attempt Failed). These phrases show up in agencies that have been running without a RevOps function and are starting to feel the drag.

The point is you are not buying someone else's signals. You are encoding what you have seen work in your own outbound and getting Claude to scan for it at scale.

Pro tip on weighting: keep the Category 1 and 2 weights at +3. Those are the two strongest predictors across every market I have tested. Tune Categories 3 through 6 freely.


Why This Matters More In 2026 Than Ever

Three things are true right now that make JD-level targeting the single highest-ROI move in B2B outbound:

1. AI SDRs have commoditized the hiring signal at the title level.

Every major AI SDR tool already scrapes LinkedIn job postings. Every one of them sends the same generic "I saw you are hiring a Head of Sales..." email within 48 hours of a posting going live. Your prospect is getting 10-40 of those per week. If you lead with the title, you are one of 40.

If you lead with a sentence the founder literally wrote in the JD, you are one of one.

2. Reply rates on generic cold email have collapsed.

The industry-wide B2B cold email reply rate in 2026 is 1.8% for generic campaigns. Signal-based campaigns - the kind that anchor on a concrete trigger rather than a broadcast message - are running 15-25% reply rates. Some are hitting 40%+. The gap is widening because it compounds: better timing leads to better data leads to better future timing.

The question is no longer "how do I write a better subject line?" The question is "how do I write to someone who actually has a reason to read it today?" JD Intent answers that question.

3. The JD body text is the last remaining un-scraped signal surface.

Every other signal has been mined. Funding announcements, LinkedIn post engagement, tool sightings, job title changes - dozens of vendors compete on each of these. But almost nobody is reading the body of job descriptions at scale. The text is too long for manual review, and most scrapers drop the description field because it is verbose and messy.

Which means it is a competitive wedge that is not yet crowded. Yet.


How To Run It

Install in two minutes:

  1. Download the SKILL.md file (link to the file is in the Lead Magnet Library)

  2. Drop it at .claude/skills/jd-intent/SKILL.md in any Claude Code project

  3. (Optional, for auto-scrape mode) Add APIFY_API_KEY=your_key to your .env

  4. In Claude Code, run one of:

/jd-intent "first marketing hire" --size=5-50 --recency=week --apify

or

/jd-intent "Head of Growth" --input=./my-jobs.csv

The skill prints a terminal summary and writes a CSV to your working directory with one row per company, sorted by score descending. Each row includes the matched phrases, the highest-weight JD snippet, and a suggested cold email opener that quotes the JD language back verbatim.

What you do with the output:

Take the top 20 HOT companies. For each one, open the suggested opener, then write a short cold email that uses the opener as the first sentence. Do not rewrite the JD phrase in your own words. Quote it back exactly. The founder wrote that sentence. Hearing it back from a stranger is a pattern interrupt no subject line can match.

One Last Thing

The reason this works is not because JD Intent is clever. It is because the JD is a brief the buyer wrote themselves, and almost nobody in outbound is reading it.

When a founder writes "we need someone to take over sales from me because I cannot keep doing this and build the team in parallel", they have told you exactly what they want, exactly why they want it, and exactly what the opening line of your email should be. All that is left is for someone to quote it back.

This is Week 1 of the Lead Magnet Library: working Claude Code tools, skill files, and systems for B2B GTM engineering. A new one ships every Thursday. Next week is a tool for turning a product spec into a cold email sequence. Subscribe to get it when it drops.

Until next week,
The GTM Architects

Keep Reading