Hiring-market research with an LLM:
what US companies want from an AI engineer
A real run: 200 LinkedIn and Indeed postings for AI engineers, read by an LLM for skills, seniority and pay, for $0.43, including where the model overreached.
Job postings are the most honest public signal of what companies need: they cost money to run and they list exactly what the team is missing. Reading a few hundred of them is slow; a model reads them in minutes. We pulled US postings for "AI engineer" from LinkedIn and Indeed and asked a model to turn each one into the same handful of facts. Everything below is from that run on 26 October 2026, for $0.43, including the part where the model added skills the postings never mentioned.
The question
What do US employers ask of an AI engineer right now: which skills, how senior, and for what pay? The same run answers it for any role, from a recruiter's market map to a job seeker's study plan.
The data we collected
| Source | Tool | What we asked for | Results | Cost |
|---|---|---|---|---|
| LinkedIn jobs | "AI engineer", United States, posted in the past month | 150 postings | $0.137 | |
| Indeed | Indeed jobs | "AI engineer", remote, US | 50 postings | $0.250 |
36 postings appeared twice (the same company and title), which left 164 unique postings; the model judged 162 of them to be roles that build AI or ML systems. Indeed returns each posting's pay range as structured data when the employer gives one; LinkedIn only has whatever the description says.
How the model was used
gpt-5.6-luna, a fast and inexpensive model, read the postings in four batches of 50, the first 3,000 characters of each. For every posting it returned the seniority, the remote policy, the minimum years of experience, the skills asked for (with standard names, so "PyTorch" and "pytorch" count together) and, if stated, the pay range with the exact sentence it came from. Code then removed duplicates, checked every pay sentence against the posting and did all the counting. The four calls cost about $0.04 in total.
What we found
It's an LLM job now. Of the 162 roles, 104 ask for experience with LLMs, 90 with agents, 84 with evaluation and 58 with retrieval-augmented generation (RAG). Classic ML frameworks trail: PyTorch in 36, TensorFlow in 27. These are conservative counts: a skill counts only when the model tagged it and the posting's text names it.
| Skill | Postings (of 162) |
|---|---|
| LLMs | 104 |
| Agents | 90 |
| Evaluation | 84 |
| Python | 67 |
| RAG | 58 |
| Prompt engineering | 40 |
| PyTorch | 36 |
| AWS | 30 |
| Fine-tuning | 29 |
| LangChain | 16 |
| Vector databases | 12 |
Mostly senior. 52 roles are senior and 18 staff or above, against 37 mid-level, 22 junior and 3 internships; 30 don't say. Of the 81 postings that state a minimum, the median is 3 years of experience.
Pay: $155k in the middle. 33 of the 50 Indeed postings gave a yearly range. The median midpoint was $155,000, with the middle half between about $129,000 and $196,000; the lowest range started at $60,000 and the highest reached $322,000. Only 9 of 117 LinkedIn postings stated pay within the text we sent, too few to say much (their median midpoint was $209,000).
Remote policy is mostly unstated. For 106 of the 162 roles, the text we sent didn't say whether the job is remote, hybrid or on-site, so we drew no conclusion. Sending the full description, or the job board's own workplace field, would answer it.
Where the model overreached
The inexpensive model was good at reading and bad at restraint: it added skills that a typical AI engineer "would" need, even when the posting didn't ask for them. We caught it by searching each posting's text for the skill's name:
| Skill | Tagged by the model | Named in the posting |
|---|---|---|
| Python | 98 | 67 |
| MLOps | 41 | 17 |
| RAG | 75 | 58 |
| Vector databases | 25 | 12 |
Taken at face value, the tags would have put Python in 60% of postings and MLOps in a quarter; the text supports 41% and about one in ten. The fix is cheap: keep a tag only when the text backs it, as we did for every number above, or ask a stronger model to quote the words it based each skill on.
Run it yourself
With an API key in LOVELY_API_KEY and the run_tool and ask helpers from the market research case study:
li = run_tool("linkedin-jobs", {"keywords": "AI engineer", "location": "United States", "datePosted": "r2592000", "limit": 150}, 150)
indeed = run_tool("indeed-jobs", {"title": "AI engineer", "location": "remote", "country": "us", "limit": 50}, 50)
posts = [{"id": i, "title": p["title"], "text": (p.get("description") or "")[:3000]} for i, p in enumerate(li)]
facts = []
for i in range(0, len(posts), 50):
facts += json.loads(ask("For each posting return {id, seniority, remote, min_years, skills, pay_quote, pay_min, pay_max}. JSON array.",
posts[i:i + 50], model="gpt-5.6-luna"))
# Keep a skill only if its name appears in the posting text; keep pay only if pay_quote is in the text.Swap the keywords for any role, or the location for any market. For the tools behind it, see recruiting and job data.
Frequently asked questions
How much does it cost to analyse job postings with AI?+
This run cost $0.43: $0.39 for 200 postings from two job boards and about $0.04 for the model reading them. Job tools bill per posting returned; see each tool's page for its price.
Which model should read the postings?+
For extraction at volume, a fast, inexpensive model is fine, as long as you check its output against the text. Ours added skills that weren't there; a check in code fixed that for free. If you need it right the first time, use a stronger model and ask for the quote behind each answer.
Can I track the market every week?+
Yes. Run the same searches weekly with datePosted set to the past week, keep posting ids to skip ones you've seen, and compare the counts. An agent can do the whole run through the MCP server.
Are the salary numbers reliable?+
They are what employers posted, for the postings that posted pay: 33 of 50 on Indeed. Pay-transparency laws make stated ranges common in the US, but ranges are wide and the sample is small, so treat them as a guide, not a benchmark.