DEV Community

Mozi Mohidien
Mozi Mohidien

Posted on

How to Use Job Postings as B2B Lead Signals (with AI)

Timing is the part of B2B sales most people get wrong. They reach out to companies that might buy, instead of companies that are buying right now.

A company that just posted three senior data engineer roles has an open headcount budget, an active hiring cycle, and a head of data with approval authority who is already thinking about their stack. They are in motion. That is the moment to reach out — not six months later when the hiring is done and the budget is spent.

The problem is that job postings are scattered across LinkedIn, Greenhouse, Lever, Indeed, and dozens of company career pages. Manually checking them isn't realistic at any scale.

This tutorial shows you how to automate it. The Job Posting AI Analyzer scrapes job posting URLs you feed it and sends each one through Claude AI to extract: tech stack, seniority, what business problem the hire is solving, who likely approved it, and a B2B signal score from 1–10.


What You'll Build

A pipeline that takes a list of job posting URLs and returns:

  • B2B hiring signal score (1–10) for each posting
  • Tech stack extracted from the job description
  • Seniority level and team context
  • Business problem the hire is solving
  • Decision-maker title (who probably approved the req)
  • Outreach timing recommendation

A 50-URL batch runs in under 2 minutes and costs less than $0.75 total.


What You Need

  • An Apify account — free tier includes $5 compute
  • An Anthropic API key — Claude Haiku handles the analysis; fractions of a cent per posting
  • A list of job posting URLs from LinkedIn, Greenhouse, Lever, Indeed, or company career pages

Step 1: Find Job URLs

LinkedIn's job search is the easiest source. Filter by:

  • Function (e.g., "Engineering", "Data", "Marketing")
  • Company size (e.g., 51–200, 201–500 employees)
  • Date posted (past week)

Copy the job URLs from the results. You can also use Apify's LinkedIn Jobs Scraper if you want to automate the URL collection step.

For Greenhouse and Lever boards (common at Series A–C companies), the URL format is consistent: boards.greenhouse.io/[company]/jobs/[id] and jobs.lever.co/[company]/[id]. Both work with this actor.


Step 2: Open the Actor

Go to Job Posting AI Analyzer on Apify and click Try for free.


Step 3: Configure Your Run

Here's a sample input for a data tooling company targeting companies scaling their data teams:

{
  "jobUrls": [
    "https://www.linkedin.com/jobs/view/4253571918",
    "https://boards.greenhouse.io/databricks/jobs/7614285002",
    "https://jobs.lever.co/airbyte/abc123",
    "https://careers.acmecorp.com/jobs/senior-data-engineer"
  ],
  "anthropicApiKey": "sk-ant-api03-...",
  "minScore": 7,
  "extractTechStack": true,
  "maxConcurrency": 5
}
Enter fullscreen mode Exit fullscreen mode

jobUrls — any publicly accessible job posting URL. Boards requiring login won't work; most don't.

minScore — posts scoring below this are dropped. 7+ means the company is hiring in or near the function your product serves. 9–10 means the hire directly implies budget for your category.

extractTechStack — keep this true. Even when tech isn't listed explicitly, Claude infers it from context ("experience with our data warehouse" in a Snowflake shop tells you their stack).


Step 4: Run It

Click Start. A 5-URL batch finishes in under a minute. A 50-URL batch takes 1–2 minutes.


Step 5: Read a High-Score Output

Here's what a score-9 record looks like:

{
  "url": "https://boards.greenhouse.io/somecompany/jobs/4567890",
  "company": "Acme Analytics",
  "jobTitle": "Senior Data Engineer",
  "location": "Remote",
  "analysis": {
    "hiringSignalScore": 9,
    "seniority": "Senior (5+ years)",
    "techStack": ["Python", "dbt", "Snowflake", "Airflow", "AWS"],
    "teamContext": "Third data hire in 60 days — building out platform team, not just backfilling",
    "businessProblem": "Moving from ad-hoc analytics to a self-serve data platform. Engineering is the current bottleneck for reports.",
    "decisionMakerTitle": "Head of Data / VP Engineering",
    "outreachTiming": "Ideal — actively scaling, budget open, buying cycle in progress"
  }
}
Enter fullscreen mode Exit fullscreen mode

Score 9 with "actively scaling, budget open" means reach out this week. The Head of Data is approving headcount — they're also thinking about tooling to make that team productive.

The techStack field tells you exactly what they use. If your product integrates with Snowflake and dbt, lead with that. If they're on a stack you don't support, don't waste their time.

The businessProblem field gives you your opening line: "Saw you're building out your data platform — specifically around self-serve analytics. Worth a 20-minute call to show you how [X companies your size] handled the engineering bottleneck for reporting?"


Step 6: Export and Outreach

Export the dataset as CSV → import into HubSpot, Apollo, or your CRM. Use the decisionMakerTitle to find the right person on LinkedIn. Use businessProblem as your first sentence.

Don't reference that you saw their job posting directly — it can feel intrusive. Use it as intelligence, not as your opening.


Tips

Hiring patterns that signal open budget:

  • Multiple hires in the same function within 60 days — budget is flowing
  • Senior-level hires (5+ years) — they're paying above median, budget is real
  • "Head of" or "Director of" hires — building a new function from scratch

Patterns that signal cost-cutting (avoid):

  • Backfill postings ("joining our existing team of X")
  • Junior-heavy postings (they're reducing cost, not scaling)
  • Postings that have been live for 60+ days (either very hard to fill or frozen)

How often to run it: Weekly. A 7-day cadence catches companies early in their hiring cycle while the budget decision is still fresh. Monthly is too slow — the window closes.

Building your URL list at scale: Use LinkedIn job search with filters for your ICP (company size + function + date posted), export the URLs, run them through this actor. Takes 20 minutes to set up a weekly process that would otherwise take hours.


Pricing

Component Cost
Apify compute ~$0.01–$0.02 per job URL
Anthropic (Claude Haiku) ~$0.003 per posting analyzed
50 job postings Under $0.75 total

Weekly runs of 100 postings cost about $1.50. You only need one good lead per week to justify it.


Try It

The actor is live: Job Posting AI Analyzer on Apify

Start with 10 job URLs from LinkedIn for companies in your ICP. See what scores 8+. Use the business problem field to write your first outreach line.


Questions or feedback on the actor? Drop a comment below.

Top comments (0)