home / skills / transilienceai / communitytools / job_posting_analysis

This skill extracts technology requirements from job postings and career pages to reveal a company's tech stack for targeted talent insights.

npx playbooks add skill transilienceai/communitytools --skill job_posting_analysis

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
7.5 KB
---
name: job-posting-analysis
description: Extracts technology requirements from job postings and career pages
tools: Bash, WebFetch, WebSearch
model: inherit
hooks:
  PreToolUse:
    - matcher: "WebFetch"
      hooks:
        - type: command
          command: "../../../hooks/skills/pre_network_skill_hook.sh"
        - type: command
          command: "../../../hooks/skills/pre_rate_limit_hook.sh"
  PostToolUse:
    - matcher: "WebFetch"
      hooks:
        - type: command
          command: "../../../hooks/skills/post_skill_logging_hook.sh"
---

# Job Posting Analysis Skill

## Purpose

Extract technology stack information from job postings and career pages, which often reveal internal tech stack details.

## Operations

### 1. find_careers_page

Locate company's career/jobs page.

**Search Strategies:**
```
1. Common paths: /careers, /jobs, /work-with-us, /join-us
2. Subdomains: careers.{domain}, jobs.{domain}
3. Web search: site:{domain} careers OR jobs
4. Footer links on main site
```

**Common Career Page URLs:**
```
https://{domain}/careers
https://{domain}/jobs
https://careers.{domain}
https://jobs.{domain}
https://{domain}/about/careers
https://{domain}/company/careers
```

### 2. detect_ats_platform

Identify Applicant Tracking System in use.

**ATS Detection Patterns:**
```json
{
  "Greenhouse": {
    "url_pattern": "boards.greenhouse.io",
    "indicates": ["Tech-forward startup", "Modern hiring"],
    "confidence": 95
  },
  "Lever": {
    "url_pattern": "jobs.lever.co",
    "indicates": ["Tech-forward startup", "Growth stage"],
    "confidence": 95
  },
  "Workday": {
    "url_pattern": ".wd5.myworkdayjobs.com|.wd3.myworkdayjobs.com",
    "indicates": ["Enterprise company", "Large org"],
    "confidence": 95
  },
  "Ashby": {
    "url_pattern": "jobs.ashbyhq.com",
    "indicates": ["Modern startup", "Tech-forward"],
    "confidence": 95
  },
  "iCIMS": {
    "url_pattern": "careers-.*\\.icims\\.com|icims.com",
    "indicates": ["Enterprise hiring"],
    "confidence": 95
  },
  "Taleo": {
    "url_pattern": "taleo.net",
    "indicates": ["Enterprise (Oracle)", "Large org"],
    "confidence": 95
  },
  "SmartRecruiters": {
    "url_pattern": "jobs.smartrecruiters.com",
    "indicates": ["Mid-market to Enterprise"],
    "confidence": 95
  },
  "BambooHR": {
    "url_pattern": ".bamboohr.com/jobs",
    "indicates": ["SMB company"],
    "confidence": 95
  },
  "Jobvite": {
    "url_pattern": "jobs.jobvite.com",
    "indicates": ["Mid-market hiring"],
    "confidence": 95
  },
  "Breezy HR": {
    "url_pattern": ".breezy.hr",
    "indicates": ["SMB startup"],
    "confidence": 95
  }
}
```

### 3. extract_tech_requirements

Parse job descriptions for technology mentions.

**Extraction Patterns:**
```regex
Experience with ([\w\s,/]+)
Proficiency in ([\w\s,/]+)
Knowledge of ([\w\s,/]+)
Tech stack:? ([\w\s,/]+)
Working knowledge of ([\w\s,/]+)
Familiar with ([\w\s,/]+)
Strong background in ([\w\s,/]+)
Required:?\s*([\w\s,/]+)
Nice to have:?\s*([\w\s,/]+)
Technologies:?\s*([\w\s,/]+)
Tools:?\s*([\w\s,/]+)
```

**Technology Keyword Categories:**

**Languages:**
```
JavaScript, TypeScript, Python, Java, Go, Rust, Ruby, PHP,
C#, C++, Kotlin, Swift, Scala, Elixir, Clojure
```

**Frontend Frameworks:**
```
React, Vue, Angular, Svelte, Next.js, Nuxt, Gatsby,
Redux, MobX, Zustand, React Query, Tailwind, Bootstrap
```

**Backend Frameworks:**
```
Node.js, Express, NestJS, Django, Flask, FastAPI,
Rails, Spring, .NET, Laravel, Phoenix
```

**Databases:**
```
PostgreSQL, MySQL, MongoDB, Redis, Elasticsearch,
DynamoDB, Cassandra, Neo4j, Snowflake, BigQuery
```

**Cloud/Infrastructure:**
```
AWS, GCP, Azure, Kubernetes, Docker, Terraform,
Ansible, CloudFormation, Pulumi
```

**Tools:**
```
Git, GitHub, GitLab, Jenkins, CircleCI, GitHub Actions,
Datadog, New Relic, Grafana, Prometheus, Sentry
```

### 4. calculate_tech_frequency

Weight technologies by mention frequency across postings.

**Scoring:**
```python
def calculate_frequency_score(tech, postings):
    mentions = sum(1 for p in postings if tech in p.requirements)
    total_postings = len(postings)

    frequency = mentions / total_postings

    # Classify importance
    if frequency >= 0.5:
        importance = "Core Stack"  # 50%+ of postings
    elif frequency >= 0.25:
        importance = "Common"      # 25-50%
    else:
        importance = "Occasional"  # < 25%

    return {
        "mentions": mentions,
        "frequency": frequency,
        "importance": importance
    }
```

### 5. analyze_role_patterns

Identify tech stack from role types.

**Role Type Signals:**
```json
{
  "Frontend Engineer": {
    "implies": ["React/Vue/Angular", "JavaScript/TypeScript", "CSS frameworks"],
    "confidence": 70
  },
  "Backend Engineer": {
    "implies": ["Server-side language", "Database", "API development"],
    "confidence": 70
  },
  "Full Stack Engineer": {
    "implies": ["Frontend framework", "Backend framework", "Database"],
    "confidence": 65
  },
  "DevOps Engineer": {
    "implies": ["Cloud platform", "CI/CD", "Kubernetes/Docker", "IaC"],
    "confidence": 75
  },
  "Data Engineer": {
    "implies": ["Python/Scala", "Spark/Airflow", "Data warehouse"],
    "confidence": 75
  },
  "ML Engineer": {
    "implies": ["Python", "TensorFlow/PyTorch", "Cloud ML services"],
    "confidence": 75
  },
  "iOS Developer": {
    "implies": ["Swift", "Xcode", "iOS SDK"],
    "confidence": 85
  },
  "Android Developer": {
    "implies": ["Kotlin/Java", "Android SDK"],
    "confidence": 85
  }
}
```

## Output

```json
{
  "skill": "job_posting_analysis",
  "domain": "string",
  "results": {
    "careers_page": {
      "url": "string",
      "ats_platform": "Greenhouse",
      "ats_confidence": 95
    },
    "postings_analyzed": "number",
    "technologies_extracted": [
      {
        "name": "React",
        "category": "Frontend Framework",
        "mentions": 15,
        "total_postings": 20,
        "frequency": 0.75,
        "importance": "Core Stack",
        "contexts": [
          "Experience with React and TypeScript",
          "Build UIs using React"
        ],
        "confidence": 80
      }
    ],
    "role_distribution": {
      "Frontend": 5,
      "Backend": 8,
      "Full Stack": 4,
      "DevOps": 2,
      "Data": 1
    },
    "tech_stack_inference": {
      "frontend": ["React", "TypeScript", "Tailwind"],
      "backend": ["Node.js", "PostgreSQL", "Redis"],
      "infrastructure": ["AWS", "Kubernetes"],
      "confidence": "Medium"
    },
    "company_signals": {
      "engineering_size": "Large (20+ open roles)",
      "growth_stage": "Scaling",
      "tech_culture": "Modern (tech-forward ATS, current stack)"
    }
  },
  "evidence": [
    {
      "type": "job_posting",
      "title": "Senior Frontend Engineer",
      "url": "string",
      "technologies_mentioned": ["React", "TypeScript", "GraphQL"],
      "timestamp": "ISO-8601"
    }
  ]
}
```

## Rate Limiting

- Careers page fetch: 10/minute
- Job posting pages: 20/minute
- ATS APIs: Varies by platform

## Error Handling

- 404: No careers page found
- Access denied: ATS may require authentication
- Continue with partial data
- Fall back to search engine results

## Security Considerations

- Only access public job postings
- Do not apply to jobs or create accounts
- Respect robots.txt
- Do not scrape PII (recruiter names, emails)
- Log all fetches for audit

## Confidence Notes

Job posting data provides **indirect signals**:
- Technologies mentioned in job posts may not be currently deployed
- "Nice to have" vs "Required" distinction matters
- Combine with direct technical evidence for validation
- Base confidence: 60-80% (lower than direct signals)

Overview

This skill extracts technology requirements from public job postings and company career pages to infer a company's likely tech stack and hiring signals. It locates careers pages, detects applicant tracking systems, parses role descriptions for technology mentions, and summarizes frequency and role-based patterns. Outputs include extracted technologies, role distribution, inferred stack areas, and confidence indicators. The goal is to turn hiring text into actionable intelligence about platform choices and priorities.

How this skill works

The skill first locates a company's careers or jobs page using common paths, subdomains, and site search heuristics. It detects ATS platforms by matching known URL patterns to signal company size and hiring maturity. Job descriptions are parsed with regex patterns and curated keyword lists (languages, frameworks, databases, cloud, tools) to extract technology mentions and context. Technologies are weighted by mention frequency across postings and combined with role-type signals to infer frontend, backend, and infrastructure priorities.

When to use it

  • When you need to infer a company's tech stack from public hiring material
  • Prior to penetration testing or asset reconnaissance to prioritize technology-specific checks
  • When evaluating targets for bug bounty triage to focus on likely platforms
  • To enrich OSINT profiles with engineering size and hiring signals
  • When comparing tech trends across competitors or market segments

Best practices

  • Respect robots.txt and only fetch public pages; avoid creating accounts or applying to jobs
  • Distinguish required vs. nice-to-have mentions when weighting importance
  • Combine job-posting signals with direct technical evidence (fingerprints, headers, repos) for higher confidence
  • Rate-limit fetches per the documented limits and log all requests for audit
  • Treat ATS detections and inferred stacks as probabilistic; report confidence and contexts

Example use cases

  • Scan a target's career pages to prioritize testing frameworks (e.g., React, Next.js) and libraries
  • Triage bounty targets by identifying common backend languages and cloud providers
  • Map hiring signals to likely CI/CD and infrastructure tools for attack surface modeling
  • Track technology adoption trends across an industry by aggregating many companies' postings
  • Estimate engineering team size and growth stage from counts of open roles and ATS type

FAQ

How reliable are technology inferences from job postings?

Job postings provide indirect signals; reliability is moderate (typically 60–80%). Distinguish required vs optional mentions and corroborate with direct technical evidence.

Does the skill scrape private or personal data?

No. It only accesses public job postings, avoids PII, and follows robots.txt. Do not attempt to create accounts or apply to roles.