Guide
July 15, 2026 · 9 min read
Job Postings Are a Buying Signal. Here Is How to Read Them.
A job posting is a budget line with a description attached. Companies publish their plans in writing, in public, every day. Four signals hide in that data, and each one maps to a sales motion you can automate.

Author
Adam Ben-Ayoun
CTO · OpenWeb Ninja
JSearch · GTM · Sales Intelligence · Python
Key Takeaways
Job postings are forward-looking: a company hires before it buys, usually a quarter before. Most intent data only tells you someone is already evaluating.
Job descriptions leak the stack: "experience with Salesforce" means they run Salesforce. That is current, self-reported technographic data.
A "first X hire" (first data engineer, first DevOps, first compliance officer) predicts a new budget category before any other signal can see it.
Hiring velocity is the fastest public proxy for budget growth: five SDR openings at once is a go-to-market expansion, not recruiting.
Poll daily with date_posted=today, dedupe on job_id, and aggregate per company per week. Individual postings are noisy; weekly counts are actionable.

The intent data companies publish themselves
Every intent-data vendor sells you inferences. Somebody visited a pricing page, somebody downloaded a whitepaper, so somebody is "in market", probably, maybe. Meanwhile companies publish their actual plans, in writing, in public, every day: job postings.
A job posting is not an inference. It is a budget line with a description attached. Nobody posts "Salesforce Administrator, $95K" as a branding exercise. Several of our highest-volume JSearch customers are not job boards; they are GTM data teams that read hiring the way analysts read earnings calls. Here is what they extract.
Four signals inside a job posting
1. The tools a company runs
Job descriptions leak the entire stack: "experience with Salesforce", "we run on AWS", "dbt and Snowflake preferred". If you sell a Salesforce add-on, every company hiring a Salesforce admin is a qualified account, self-reported. This is technographic data that is current, free, and in the company’s own words.
2. The function being stood up
A company hiring its first data engineer is about to buy data infrastructure. A first DevOps hire means cloud spend is getting serious. A first compliance officer means an audit is coming. "First X hire" predicts a new budget category before any other signal can see it.
3. Velocity
Five SDR openings at once is not recruiting, it is a go-to-market expansion, and it means new spend on sales tooling, data, and enablement. Hiring rate is the fastest public proxy for budget growth.
4. The pain in the description
"You will help us migrate off our legacy monolith" is a company describing its problem in a public document. Responsibilities sections read like discovery-call notes someone published.
None of this is exotic. What makes it work is that the signal is forward-looking. A company hires before it buys, usually a quarter before. Website-visit intent tells you someone is evaluating. Hiring data tells you someone is about to start.
Pulling the data
JSearch aggregates postings from Google for Jobs, which covers the major boards, ATS pages, and company career sites. One endpoint does the work.
Python
# hiring_signals.py
import requests
API_KEY = "YOUR_API_KEY"
def search_jobs(query, **params):
r = requests.get(
"https://api.openwebninja.com/jsearch/search-v2",
headers={"x-api-key": API_KEY},
params={"query": query, "country": "us", "date_posted": "week", **params},
timeout=60,
)
r.raise_for_status()
return r.json()["data"]["jobs"]
# Every company that posted a Salesforce admin role this week
for job in search_jobs('"salesforce administrator"'):
print(job["employer_name"], "|", job["job_title"], "|", job["job_posted_at"])Output
Comply | Sr. Salesforce Administrator | 5 days ago LABUR | Senior Salesforce Leader | 17 hours ago Varmoda | Salesforce Administrator | 7 days ago VivSoft Technologies | Salesforce Administrator | 7 days ago Huron | Digital Consulting Senior Analyst, Salesforce Omni Developer | 11 hours ago ...
Response fields (truncated)
Each job carries 34 fields. The ones the four signals need, from the first result above:
{
"job_id": "9QYIrizCNC4fINexAAAAAA==",
"job_title": "Sr. Salesforce Administrator",
"employer_name": "Comply",
"employer_website": "https://www.comply.com",
"job_publisher": "LinkedIn",
"job_employment_type": "Full-time",
"job_posted_at_datetime_utc": "2026-07-10T00:00:00.000Z",
"job_location": "Washington, DC",
"job_description": "..."
}The stack signal is in job_description, which every posting carries. Comply's description alone names Sales Cloud, Service Cloud, CPQ, and Flow. That is an account profile writing itself. (job_highlights offers the same content pre-structured into Qualifications and Responsibilities when present, a convenient shortcut when you get it.)
The pipeline shape
The teams doing this in production converge on the same design:
1. Poll daily with date_posted=today
You want new postings, not the standing pool. Yesterday’s signal is already in your warehouse.
2. Dedupe on job_id
The same role syndicates across publishers; JSearch already collapses most of it, job_id catches the rest.
3. Extract, then score
Regex for known tool names in job_description is embarrassingly effective; our test query’s first four descriptions named nine distinct tools between them. An LLM pass catches the indirect phrasing ("experience with CRM administration" without naming one).
4. Aggregate per company per week
Individual postings are noisy. "Acme posted 9 engineering roles this month, 4 mention Kubernetes" is a signal an SDR can act on.
Query strategy beats volume. "salesforce administrator" in quotes finds tool-specific hires. Role queries like "sdr" OR "sales development" track GTM expansion. Both filtered to date_posted=week keep request counts small: a 500-account watchlist runs comfortably inside the Mega plan at $150/month for 200,000 requests, and a proof of concept fits in the free tier.
Limitations
Postings are a leading indicator, not a contract. Some are ghost jobs that will never be filled; weight recent postings and sustained velocity over any single listing. Titles lie ("ninja", "rockstar", "growth wizard"), which is why the description, not the title, carries the signal. And hiring freezes make the signal go quiet even when budget exists.
Treat hiring data the way its best users do: as the earliest signal in the stack, confirmed by the rest, replaced by none.
FAQ
Most common questions and answers
Where does JSearch get its job postings data?
How fresh are the postings?
Can I filter for remote roles or employment types?
How many API requests does a hiring-signal watchlist need?
About the author

Adam Ben-Ayoun
CTO @ OpenWeb Ninja
Adam leads engineering at OpenWeb Ninja, building the APIs and infrastructure that make public web data accessible to developers and AI agents.
Connect on LinkedInStart reading hiring signals
JSearch returns postings from Google for Jobs in real time: title, employer, description, salary, and 30+ fields per job. The free plan needs no credit card.
Didn't find the API you are looking for? Request an API
