Job Posting Intent Detection
Detect buying intent from job postings

Detect buying intent from job postings. When a company posts a job in your problem area, they've allocated budget and are actively thinking about the problem.
--- name: job-posting-intent version: 1.1.0 description: > Detect buying intent from job postings. When a company posts a job in your problem area, they've allocated budget and are actively thinking about the problem. This skill finds those companies, qualifies them, extracts personalization context, and outputs everything to a Google Sheet. Does NOT do outreach — just delivers qualified leads with reasoning. tags: [lead-generation, outreach] --- # Job Posting Intent Detection Find companies that are hiring for roles related to the problem you solve. A job posting is a **budget signal** — the company has allocated money to solve a problem your product addresses. Results are automatically exported to a **Google Sheet** with signal strength, decision-maker suggestions, outreach angles, and personalization context. ## Why This Works
Overview
Find companies that are hiring for roles related to the problem you solve. A job posting is a budget signal — the company has allocated money to solve a problem your product addresses.
Manual install (npx, ZIP)
npx skills add gooseworks-ai/goose-skills --skill job-posting-intent -g -a claude-codemkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/gooseworks-ai/goose-skills/tar.gz/615c685f34f8 \
| tar -xz -C ~/.claude/skills --strip-components=4 goose-skills-615c685f34f8/skills/lead-generation/capabilities/job-posting-intentNew-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/ab128f56ef34e7917ed2/job-posting-intent.zip" -OutFile "$env:TEMP\job-posting-intent.zip"; Expand-Archive "$env:TEMP\job-posting-intent.zip" -DestinationPath "$HOME\.claude\skills" -ForceConnects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md8.6 KBskill.meta.json282 Bscripts/3 files · 36.4 KB
Read the files here
gooseworks-ai/
Show the full text241 lines
Job Posting Intent Detection
Find companies that are hiring for roles related to the problem you solve. A job posting is a budget signal — the company has allocated money to solve a problem your product addresses.
Results are automatically exported to a Google Sheet with signal strength, decision-maker suggestions, outreach angles, and personalization context.
Why This Works
When a company posts a job, they've:
- Allocated budget (headcount is expensive)
- Acknowledged the problem exists
- Started actively solving it
If your product helps solve that problem faster, cheaper, or better than a hire alone, the timing is perfect.
Cost
Apify Actor: harvestapi/linkedin-job-search (pay-per-event)
| Component | Cost |
|---|---|
| Actor start (per run) | $0.001 |
| Per job result | $0.001 |
| Apify platform fee | +20% |
Typical run costs:
| Scenario | Titles | Jobs/title | Runs | Est. Cost |
|---|---|---|---|---|
| Quick scan | 3 | 25 | 3 | ~$0.09 |
| Standard | 5 | 25 | 5 | ~$0.16 |
| Deep search | 5 | 100 | 5 | ~$0.60 |
| Multi-location | 5×3 | 25 | 15 | ~$0.47 |
Google Sheet creation is free (uses Rube/Composio integration).
Always run --estimate-only first to see the Apify cost before executing.
Track usage: https://console.apify.com/billing
Setup
1. Apify API Token
# Get your token at https://console.apify.com/account/integrations
export APIFY_API_TOKEN="apify_api_YOUR_TOKEN_HERE"
2. Install dependencies
pip3 install requests
3. Rube/Composio (for Google Sheets)
Google Sheet creation uses Rube MCP with Composio. The token is preconfigured.
If it stops working, update the RUBE_TOKEN env var or the default in search_jobs.py.
Usage
Step 1: Define your ICP and target titles
Think about it this way: "If a company is hiring for [role], it means they're investing in [problem area you solve]."
Examples:
- GTM agency: "Growth Marketing Manager", "SDR Manager", "RevOps Engineer", "GTM Engineer"
- AI dev tools: "AI Engineer", "ML Ops Engineer", "Prompt Engineer", "LLM Engineer"
- Sales automation: "SDR", "BDR Manager", "Sales Ops", "Revenue Operations"
Step 2: Estimate cost
python3 scripts/search_jobs.py \
--titles "GTM Engineer,SDR Manager,Head of Demand Gen" \
--locations "United States" \
--max-per-title 25 \
--estimate-only
Step 3: Run the search
The script searches LinkedIn Jobs, groups results by company, qualifies leads, and creates a Google Sheet automatically.
# Standard search (creates Google Sheet)
python3 scripts/search_jobs.py \
--titles "GTM Engineer,SDR Manager,RevOps Engineer" \
--locations "United States" \
--max-per-title 25
# Deep search with custom sheet name
python3 scripts/search_jobs.py \
--titles "AI Engineer,ML Ops Engineer,Prompt Engineer" \
--locations "United States" \
--max-per-title 50 \
--sheet-name "AI Hiring Signals - Feb 2026"
# Filter results to only relevant titles (LinkedIn search is fuzzy)
python3 scripts/search_jobs.py \
--titles "GTM Engineer,Growth Marketing Manager,SDR Manager" \
--locations "United States" \
--relevance-keywords "gtm,growth,sdr,marketing,demand gen,revops"
# Also save raw JSON alongside the sheet
python3 scripts/search_jobs.py \
--titles "GTM Engineer,SDR Manager" \
--locations "United States" \
--output results.json
# Skip Google Sheet, console + JSON only
python3 scripts/search_jobs.py \
--titles "GTM Engineer" \
--no-sheet --json
What the Script Does
- Searches LinkedIn Jobs for each title/location combination via Apify
- Groups results by company (deduplicates)
- Computes signal strength based on number of relevant postings + seniority
- Extracts personalization context from job descriptions (tech stack, growth signals, pain points)
- Suggests decision-maker title (one level above the hired role)
- Suggests outreach angle (accelerate / replace / multiply the hire)
- Creates a Google Sheet with all qualified leads
- Prints a console summary of all companies found
Options Reference
Required:
--titles Comma-separated job titles to search
Optional:
--locations Comma-separated locations (default: no filter)
--max-per-title Max jobs per title per location (default: 25)
--posted-limit Recency: 1h, 24h, week, month (default: week)
--output, -o Also save raw JSON to this file path
--json Print JSON output to console
--estimate-only Show cost estimate without running
--no-sheet Skip Google Sheet creation
--sheet-name Custom Google Sheet title (default: "Job Posting Intent Signals - {date}")
--relevance-keywords Comma-separated keywords to filter truly relevant postings
Google Sheet Columns
| Column | Description |
|---|---|
| Signal | HIGH / MEDIUM / LOW based on # postings + seniority |
| Company | Company name |
| Employees | Employee count |
| Industry | Company industry |
| Website | Company website |
| Company LinkedIn URL | |
| # Postings | Number of relevant job postings found |
| Job Titles | The actual job titles posted |
| Job URL | Link to the primary job posting |
| Location | Job location(s) |
| Decision Maker | Suggested title of person to contact |
| Outreach Angle | Accelerate / Replace / Multiply the hire |
| Tech Stack | Technologies mentioned in job descriptions |
| Growth Signals | Growth indicators (first hire, scaling, series stage) |
| Pain Points | Pain indicators (automate, optimize, manual processes) |
| Description | Company description snippet |
AI Agent Integration
When using this skill as an agent, the typical flow is:
- User describes their product and the types of roles that signal intent
- Agent runs
--estimate-onlyand confirms cost with user - Agent runs the search (Google Sheet is created automatically)
- Agent shares the Google Sheet link with the user
- Agent provides a brief summary of top leads and why they're qualified
Example prompt:
"Find companies hiring growth marketers and SDRs in the US this week. These are signals they need GTM help. We sell AI-powered GTM systems to Series A-C B2B SaaS companies with 20-200 employees."
The agent should NOT:
- Do any outreach
- Send any emails or messages
- Contact anyone
The agent SHOULD:
- Present cost estimate before running
- Run the search (sheet is created automatically)
- Share the Google Sheet link
- Provide a brief summary of the top leads with reasoning
Outreach Angle Templates
The script auto-assigns an angle based on job posting context:
"Accelerate while you hire" — Best when: posting is recent, role is junior/mid
They're looking for someone to do X. Your product can deliver X outcomes while they ramp the hire.
"Replace the hire" — Best when: small company, "first hire" signals, building from scratch
They want the output of a [role] but may not need a full-time person if they use your product.
"Multiply the hire" — Best when: company is clearly scaling, multiple related roles
When their new hire starts, your product makes them 10x more effective from day one.
Troubleshooting
"No jobs found"
- Try broader titles (e.g., "marketing" instead of "demand generation specialist")
- Extend the time window:
--posted-limit month - Remove location filter to search globally
"Too many irrelevant results"
- Use
--relevance-keywordsto filter by title keywords - LinkedIn's search is fuzzy — the grouping and qualification step helps filter
"Google Sheet creation failed"
- Check that Rube MCP is accessible (the token may have expired)
- Use
--no-sheet --json --output results.jsonto save results without a sheet - You can create the sheet later with
scripts/create_sheet_mcp.py
High cost estimate
- Reduce
--max-per-title(25 is usually enough) - Search fewer titles
- Use
--posted-limit 24hfor a quick daily scan
Links
| 1 | |
| 2 | name job-posting-intent |
| 3 | version 1.1.0 |
| 4 | description > |
| 5 | Detect buying intent from job postings. When a company posts a job in your problem area, |
| 6 | they've allocated budget and are actively thinking about the problem. This skill finds those |
| 7 | companies, qualifies them, extracts personalization context, and outputs everything to a |
| 8 | Google Sheet. Does NOT do outreach — just delivers qualified leads with reasoning. |
| 9 | tags [lead-generation, outreach] |
| 10 | |
| 11 | |
| 12 | # Job Posting Intent Detection |
| 13 | |
| 14 | Find companies that are hiring for roles related to the problem you solve. A job posting is a **budget signal** — the company has allocated money to solve a problem your product addresses. |
| 15 | |
| 16 | Results are automatically exported to a **Google Sheet** with signal strength, decision-maker suggestions, outreach angles, and personalization context. |
| 17 | |
| 18 | ## Why This Works |
| 19 | |
| 20 | When a company posts a job, they've: |
| 21 | Allocated budget (headcount is expensive) |
| 22 | Acknowledged the problem exists |
| 23 | Started actively solving it |
| 24 | |
| 25 | If your product helps solve that problem faster, cheaper, or better than a hire alone, the timing is perfect. |
| 26 | |
| 27 | ## Cost |
| 28 | |
| 29 | **Apify Actor:** `harvestapi/linkedin-job-search` (pay-per-event) |
| 30 | |
| 31 | | Component | Cost | |
| 32 | |-----------|------| |
| 33 | | Actor start (per run) | $0.001 | |
| 34 | | Per job result | $0.001 | |
| 35 | | Apify platform fee | +20% | |
| 36 | |
| 37 | **Typical run costs:** |
| 38 | | Scenario | Titles | Jobs/title | Runs | Est. Cost | |
| 39 | |----------|--------|------------|------|-----------| |
| 40 | | Quick scan | 3 | 25 | 3 | ~$0.09 | |
| 41 | | Standard | 5 | 25 | 5 | ~$0.16 | |
| 42 | | Deep search | 5 | 100 | 5 | ~$0.60 | |
| 43 | | Multi-location | 5×3 | 25 | 15 | ~$0.47 | |
| 44 | |
| 45 | Google Sheet creation is free (uses Rube/Composio integration). |
| 46 | |
| 47 | Always run `--estimate-only` first to see the Apify cost before executing. |
| 48 | |
| 49 | Track usage: https://console.apify.com/billing |
| 50 | |
| 51 | ## Setup |
| 52 | |
| 53 | ### 1. Apify API Token |
| 54 | |
| 55 | |
| 56 | # Get your token at https://console.apify.com/account/integrations |
| 57 | export APIFY_API_TOKEN="apify_api_YOUR_TOKEN_HERE" |
| 58 | |
| 59 | |
| 60 | ### 2. Install dependencies |
| 61 | |
| 62 | |
| 63 | pip3 install requests |
| 64 | |
| 65 | |
| 66 | ### 3. Rube/Composio (for Google Sheets) |
| 67 | |
| 68 | Google Sheet creation uses Rube MCP with Composio. The token is preconfigured. |
| 69 | If it stops working, update the `RUBE_TOKEN` env var or the default in `search_jobs.py`. |
| 70 | |
| 71 | ## Usage |
| 72 | |
| 73 | ### Step 1: Define your ICP and target titles |
| 74 | |
| 75 | Think about it this way: **"If a company is hiring for [role], it means they're investing in [problem area you solve]."** |
| 76 | |
| 77 | Examples: |
| 78 | GTM agency: "Growth Marketing Manager", "SDR Manager", "RevOps Engineer", "GTM Engineer" |
| 79 | AI dev tools: "AI Engineer", "ML Ops Engineer", "Prompt Engineer", "LLM Engineer" |
| 80 | Sales automation: "SDR", "BDR Manager", "Sales Ops", "Revenue Operations" |
| 81 | |
| 82 | ### Step 2: Estimate cost |
| 83 | |
| 84 | |
| 85 | python3 scripts/search_jobs.py \ |
| 86 | --titles "GTM Engineer,SDR Manager,Head of Demand Gen" \ |
| 87 | --locations "United States" \ |
| 88 | --max-per-title 25 \ |
| 89 | --estimate-only |
| 90 | |
| 91 | |
| 92 | ### Step 3: Run the search |
| 93 | |
| 94 | The script searches LinkedIn Jobs, groups results by company, qualifies leads, and creates a Google Sheet automatically. |
| 95 | |
| 96 | |
| 97 | # Standard search (creates Google Sheet) |
| 98 | python3 scripts/search_jobs.py \ |
| 99 | --titles "GTM Engineer,SDR Manager,RevOps Engineer" \ |
| 100 | --locations "United States" \ |
| 101 | --max-per-title 25 |
| 102 | |
| 103 | # Deep search with custom sheet name |
| 104 | python3 scripts/search_jobs.py \ |
| 105 | --titles "AI Engineer,ML Ops Engineer,Prompt Engineer" \ |
| 106 | --locations "United States" \ |
| 107 | --max-per-title 50 \ |
| 108 | --sheet-name "AI Hiring Signals - Feb 2026" |
| 109 | |
| 110 | # Filter results to only relevant titles (LinkedIn search is fuzzy) |
| 111 | python3 scripts/search_jobs.py \ |
| 112 | --titles "GTM Engineer,Growth Marketing Manager,SDR Manager" \ |
| 113 | --locations "United States" \ |
| 114 | --relevance-keywords "gtm,growth,sdr,marketing,demand gen,revops" |
| 115 | |
| 116 | # Also save raw JSON alongside the sheet |
| 117 | python3 scripts/search_jobs.py \ |
| 118 | --titles "GTM Engineer,SDR Manager" \ |
| 119 | --locations "United States" \ |
| 120 | --output results.json |
| 121 | |
| 122 | # Skip Google Sheet, console + JSON only |
| 123 | python3 scripts/search_jobs.py \ |
| 124 | --titles "GTM Engineer" \ |
| 125 | --no-sheet --json |
| 126 | |
| 127 | |
| 128 | ## What the Script Does |
| 129 | |
| 130 | **Searches** LinkedIn Jobs for each title/location combination via Apify |
| 131 | **Groups** results by company (deduplicates) |
| 132 | **Computes signal strength** based on number of relevant postings + seniority |
| 133 | **Extracts personalization context** from job descriptions (tech stack, growth signals, pain points) |
| 134 | **Suggests decision-maker title** (one level above the hired role) |
| 135 | **Suggests outreach angle** (accelerate / replace / multiply the hire) |
| 136 | **Creates a Google Sheet** with all qualified leads |
| 137 | **Prints a console summary** of all companies found |
| 138 | |
| 139 | ## Options Reference |
| 140 | |
| 141 | |
| 142 | Required: |
| 143 | --titles Comma-separated job titles to search |
| 144 | |
| 145 | Optional: |
| 146 | --locations Comma-separated locations (default: no filter) |
| 147 | --max-per-title Max jobs per title per location (default: 25) |
| 148 | --posted-limit Recency: 1h, 24h, week, month (default: week) |
| 149 | --output, -o Also save raw JSON to this file path |
| 150 | --json Print JSON output to console |
| 151 | --estimate-only Show cost estimate without running |
| 152 | --no-sheet Skip Google Sheet creation |
| 153 | --sheet-name Custom Google Sheet title (default: "Job Posting Intent Signals - {date}") |
| 154 | --relevance-keywords Comma-separated keywords to filter truly relevant postings |
| 155 | |
| 156 | |
| 157 | ## Google Sheet Columns |
| 158 | |
| 159 | | Column | Description | |
| 160 | |--------|-------------| |
| 161 | | Signal | HIGH / MEDIUM / LOW based on # postings + seniority | |
| 162 | | Company | Company name | |
| 163 | | Employees | Employee count | |
| 164 | | Industry | Company industry | |
| 165 | | Website | Company website | |
| 166 | | LinkedIn | Company LinkedIn URL | |
| 167 | | # Postings | Number of relevant job postings found | |
| 168 | | Job Titles | The actual job titles posted | |
| 169 | | Job URL | Link to the primary job posting | |
| 170 | | Location | Job location(s) | |
| 171 | | Decision Maker | Suggested title of person to contact | |
| 172 | | Outreach Angle | Accelerate / Replace / Multiply the hire | |
| 173 | | Tech Stack | Technologies mentioned in job descriptions | |
| 174 | | Growth Signals | Growth indicators (first hire, scaling, series stage) | |
| 175 | | Pain Points | Pain indicators (automate, optimize, manual processes) | |
| 176 | | Description | Company description snippet | |
| 177 | |
| 178 | ## AI Agent Integration |
| 179 | |
| 180 | When using this skill as an agent, the typical flow is: |
| 181 | |
| 182 | User describes their product and the types of roles that signal intent |
| 183 | Agent runs `--estimate-only` and confirms cost with user |
| 184 | Agent runs the search (Google Sheet is created automatically) |
| 185 | Agent shares the Google Sheet link with the user |
| 186 | Agent provides a brief summary of top leads and why they're qualified |
| 187 | |
| 188 | **Example prompt:** |
| 189 | > "Find companies hiring growth marketers and SDRs in the US this week. These are signals they need GTM help. We sell AI-powered GTM systems to Series A-C B2B SaaS companies with 20-200 employees." |
| 190 | |
| 191 | The agent should NOT: |
| 192 | Do any outreach |
| 193 | Send any emails or messages |
| 194 | Contact anyone |
| 195 | |
| 196 | The agent SHOULD: |
| 197 | Present cost estimate before running |
| 198 | Run the search (sheet is created automatically) |
| 199 | Share the Google Sheet link |
| 200 | Provide a brief summary of the top leads with reasoning |
| 201 | |
| 202 | ## Outreach Angle Templates |
| 203 | |
| 204 | The script auto-assigns an angle based on job posting context: |
| 205 | |
| 206 | **"Accelerate while you hire"** — Best when: posting is recent, role is junior/mid |
| 207 | > They're looking for someone to do X. Your product can deliver X outcomes while they ramp the hire. |
| 208 | |
| 209 | **"Replace the hire"** — Best when: small company, "first hire" signals, building from scratch |
| 210 | > They want the output of a [role] but may not need a full-time person if they use your product. |
| 211 | |
| 212 | **"Multiply the hire"** — Best when: company is clearly scaling, multiple related roles |
| 213 | > When their new hire starts, your product makes them 10x more effective from day one. |
| 214 | |
| 215 | ## Troubleshooting |
| 216 | |
| 217 | ### "No jobs found" |
| 218 | Try broader titles (e.g., "marketing" instead of "demand generation specialist") |
| 219 | Extend the time window: `--posted-limit month` |
| 220 | Remove location filter to search globally |
| 221 | |
| 222 | ### "Too many irrelevant results" |
| 223 | Use `--relevance-keywords` to filter by title keywords |
| 224 | LinkedIn's search is fuzzy — the grouping and qualification step helps filter |
| 225 | |
| 226 | ### "Google Sheet creation failed" |
| 227 | Check that Rube MCP is accessible (the token may have expired) |
| 228 | Use `--no-sheet --json --output results.json` to save results without a sheet |
| 229 | You can create the sheet later with `scripts/create_sheet_mcp.py` |
| 230 | |
| 231 | ### High cost estimate |
| 232 | Reduce `--max-per-title` (25 is usually enough) |
| 233 | Search fewer titles |
| 234 | Use `--posted-limit 24h` for a quick daily scan |
| 235 | |
| 236 | ## Links |
| 237 | |
| 238 | [Apify LinkedIn Job Search Actor] |
| 239 | [Apify API Token] |
| 240 | [Apify Billing Dashboard] |
| 241 |
Details
- Version
- 1.1.0
- Updated
- Sep 21, 2026
- License
- MIT
- Stars on the repo
- ★ 1,220
- Checked
- Source
- gooseworks-ai/goose-skills ↗
- Creator
- gooseworks-ai · 205 listings
Similar skills
See all →
SkillChampion Job Change Tracker
SkillExpansion Opportunity Detector
SkillSeries A-C Signal Tracker
SkillFunded Company Outreach
SkillBuying Signal Detector
SkillBuying Signal ScannerMore from gooseworks-ai
SkillAd Angle Miner
SkillAd Campaign Analyzer
SkillLead Quality Analyzer
SkillMessage Match Auditor
SkillAI Search Visibility
SkillAmazon Product Search