> 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.
npx skills add https://github.com/gooseworks-ai/goose-skills --skill job-posting-intent
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.
When a company posts a job, they've:
If your product helps solve that problem faster, cheaper, or better than a hire alone, the timing is perfect.
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
# Get your token at https://console.apify.com/account/integrations
export APIFY_API_TOKEN="apify_api_YOUR_TOKEN_HERE"
pip3 install requests
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.
Think about it this way: "If a company is hiring for [role], it means they're investing in [problem area you solve]."
Examples:
python3 scripts/search_jobs.py \
--titles "GTM Engineer,SDR Manager,Head of Demand Gen" \
--locations "United States" \
--max-per-title 25 \
--estimate-only
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
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
| Column | Description |
|--------|-------------|
| Signal | HIGH / MEDIUM / LOW based on # postings + seniority |
| Company | Company name |
| Employees | Employee count |
| Industry | Company industry |
| Website | Company website |
| LinkedIn | 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 |
When using this skill as an agent, the typical flow is:
--estimate-only and confirms cost with userExample 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:
The agent SHOULD:
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.
--posted-limit month--relevance-keywords to filter by title keywords--no-sheet --json --output results.json to save results without a sheetscripts/create_sheet_mcp.py--max-per-title (25 is usually enough)--posted-limit 24h for a quick daily scanA set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).
Extracts and analyzes competitors' ads from ad libraries (Facebook, LinkedIn, etc.) to understand what messaging, problems, and creative approaches are working. Helps inspire and improve your own ad campaigns.
Identifies high-quality leads for your product or service by analyzing your business, searching for target companies, and providing actionable contact strategies. Perfect for sales, business development, and marketing professionals.
Analyzes your recent Claude Code chat history to identify coding patterns, development gaps, and areas for improvement, curates relevant learning resources from HackerNews, and automatically sends a personalized growth report to your Slack DMs.
Complete App Store Optimization (ASO) toolkit for researching, optimizing, and tracking mobile app performance on Apple App Store and Google Play Store
NGS analysis toolkit. BAM to bigWig conversion, QC (correlation, PCA, fingerprints), heatmaps/profiles (TSS, peaks), for ChIP-seq, RNA-seq, ATAC-seq visualization.
Materials science toolkit. Crystal structures (CIF, POSCAR), phase diagrams, band structure, DOS, Materials Project integration, format conversion, for computational materials science.
Transforms vague UI ideas into polished, Stitch-optimized prompts. Enhances specificity, adds UI/UX keywords, injects design system context, and structures output for better generation results.
Take gooseworks-ai/job-posting-intent from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference pip.
Without those the skill loads but fails at the first command.