playbook-job-posting-language

Generates a copy-ready cold email clause from a company's current job postings filtered by keyword.

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

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Sales teams want to reference a prospect's live hiring activity in cold outreach, but manually checking job boards per company does not scale, and naive automation quotes stale postings or the wrong company. This playbook enriches each row of an existing domain list with one short, freshness-gated clause naming a role the company is currently hiring for. ## Core Features & Use Cases - Server-side keyword filtering: Queries jobs APIs with description-level keyword filters, since returned posting fields never include the full description (measured 5 of 8 matches server-side versus 1 of 8 client-side). - Mandatory safety gates: A name-match gate prevents quoting another company's posting after domain-to-profile resolution, and a 30-day freshness gate blanks lines sourced from older postings. - Locked line-writer prompt: A fixed prompt rewrites raw job titles into a lowercase clause that slots into "Saw {{job_posting_line_safe}}.", with measured guidance on model choice, reasoning effort, and token caps. - Use Case: Given a list of 500 B2B domains and the keyword set for cold-outbound language, produce a per-row clause like "you're hiring an account executive for private equity" ready to bind into an email sequence. ## Quick Start Give the skill a list of company domains and names plus your campaign keyword set, and ask it to produce the job_posting_line_safe clause for each row.

Frequently Asked Questions about playbook-job-posting-language

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

FAQPage Schema
How do I find what roles a company is hiring for from a domain list?

Resolve each bare domain to the company's job-board profile, then query a jobs API with a date_posted window and description keyword filters applied server-side. The playbook returns one cleaned clause per row plus an evidence URL and posted date.

Why does my job posting keyword filter return no matches?

Most jobs APIs never return the full description, so scanning returned fields locally misses nearly everything (1 of 8 versus 5 of 8 measured). Pass keywords through the API's description filter, and check for silently stripped unknown keys in the request body.

Should I use an AI classifier or keywords to detect hiring signals?

Start with keywords and measure recall first: three API calls plus a 25-row sample. Use keywords only at 90% recall or above, add a gated AI classifier between 60-90%, and fix the keyword set below 60% because AI will not rescue bad keywords.

How do I avoid quoting job postings that are no longer open?

Detect postings over a 60-day window but suppress the line in copy when the posting is older than 30 days, using a formula rather than a model call. Bind copy only to the gated job_posting_line_safe field, never the raw ungated line.

Why does the AI return empty output for rows that have job postings?

A reasoning model at default effort burns the completion token budget on hidden reasoning, returning finish_reason length with empty content while abstaining rows still succeed. Set reasoning effort low with a 2500-token cap, or use a non-reasoning model like gpt-4o-mini inside Clay.

When should I not use job posting language as an email angle?

Do not use it to count hires or headcount growth over time, which is a different playbook, or to discover new companies hiring a role, which requires a market-wide search endpoint. It also cannot be a mandatory copy variable since roughly 60% of rows blank after the freshness gate.