§ data · jobs for ai

LinkedIn jobs for AI agents.

The jobs-data layer for the agent you're building. 45,000+ new roles indexed every day, delivered as a typed REST API, as MCP tools your agent calls natively, or as the whole 8M+-row archive in Postgres. Catch hiring signals without an enterprise sales cycle.
§ 01 · why ai builders choose this
structuredlinkfetch

Fields an LLM can reason over

salary as numbers (min · max · currency · interval), applicant_count as an integer with a timestamped history, is_active as a bool. No string-soup, no parsing on your side.

mcp-nativelinkfetch

One config block in Claude or Cursor

linkfetch-mcp registers jobs search, job detail, applicant history, and location lookup as tools. Your agent searches and cites jobs without you writing a fetch wrapper.

flat-pricelinkfetch

Or take the whole archive

8M+ postings since April 2026 as a PostgreSQL dump, CSV, and JSONL for $199 one-time — or $49/month for live read-only Postgres. No credits, no meter.

§ 02 · three ways to plug in

REST. MCP. Postgres.

Pick the surface that matches your stack. Same rows, same provenance — different ergonomics. No SDK to install: the API is plain HTTPS and JSON.

curl · rest1 credit per call
# Senior+ machine-learning roles in the US posted this week
curl "https://api.linkfetch.io/v1/jobs" \
  -H "Authorization: Bearer $LINKFETCH_KEY" \
  -G \
  --data-urlencode "q=machine learning" \
  --data-urlencode "level=senior,staff,principal" \
  --data-urlencode "location=United States" \
  --data-urlencode "posted_within=week" \
  --data-urlencode "limit=50"
typescript · fetchground an llm in fresh roles
// Plain fetch — no SDK to install
const params = new URLSearchParams({
  q: "machine learning",
  level: "senior,staff,principal",
  posted_within: "week",
  limit: "50",
});
const res = await fetch(`https://api.linkfetch.io/v1/jobs?${params}`, {
  headers: { Authorization: `Bearer ${process.env.LINKFETCH_KEY}` },
});
const { data: jobs, meta } = await res.json();

// Hand the typed rows to the model as grounded context
const summary = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{
    role: "user",
    content: `Summarize hiring trends from these ${jobs.length} roles (fetched ${meta.fetched_at}):\n${JSON.stringify(jobs)}`,
  }],
});
python · requestswatch a competitor
import os, requests

# Watch a competitor: everything they posted in the last 24h
r = requests.get(
    "https://api.linkfetch.io/v1/jobs",
    headers={"Authorization": f"Bearer {os.environ['LINKFETCH_KEY']}"},
    params={"company": "acme-inc", "posted_within": "24h", "limit": 50},
)
jobs = r.json()["data"]
for job in jobs:
    print(job["first_seen_at"], job["title"], job["applicant_count"])
mcp · claude · cursor · zedno fetch wrapper, no parser
# claude_desktop_config.json
{
  "mcpServers": {
    "linkfetch": {
      "command": "npx",
      "args": ["-y", "linkfetch-mcp"],
      "env": { "LINKFETCH_API_KEY": "sk_live_…" }
    }
  }
}

# Then ask Claude:
# "Find every infra-engineer role in Berlin posted this week.
#  Group by company and rank by applicant velocity."
§ 03 · the row

The shape your agent reasons over.

One JSON object per posting, deduped on linkedin_job_id. The same shape comes back from the API, the MCP tools, and the dataset. Field-level coverage is published on the dataset page: descriptions on every row, parsed salary on ~10%, applicant counts on ~8%.

get · /v1/jobs/:id1 credit · empty = free
{
  "linkedin_job_id": "4072311928",
  "title": "Staff Backend Engineer",
  "company": "Vercel",
  "company_id": 14080355,
  "location": "San Francisco, California, United States",
  "level": "Mid-Senior level",
  "employment_type": "Full-time",
  "salary_min": 220000,
  "salary_max": 290000,
  "salary_currency": "USD",
  "salary_interval": "year",
  "applicant_count": 117,
  "applicant_count_is_capped": false,
  "posted_at_precise": "2026-04-29T08:13:11Z",
  "first_seen_at": "2026-04-29T08:14:18Z",
  "is_active": true,
  "canonical_url": "https://www.linkedin.com/jobs/view/4072311928/"
}
§ 04 · vs the alternatives

Where the other vendors charge enterprise prices.

capabilityLinkFetchCoresignalBright Data
01Floor price$0 · $5 free credit, then $29/mo$49 / mo$250 min order
02Bulk export$199 one-time · 8M+ rows$1,000+ per dataset$2.50 / 1K records
03MCP server (Claude · Cursor · Zed)Yes — linkfetch-mcp
04Time to first call90 seconds, no cardDemo · eval · contractHours · proxy setup
05is_active flag (re-checked on recrawl)YesYesNot surfaced
06Parsed salary fieldsmin · max · currency · intervalYesRange only
07Applicant count + historyYes — timestamped series
08Provenance per rowsource · fetched_at · freshness_daysPartial

competitor figures from their public pricing pages · sources linked from each full teardown

§ 05 · agents you can ship this week

Three patterns, one data layer.

Each pattern is a recipe with a working prompt and tool chain. Same API key, same rows, different agent loop.

agent · 01recipe

AI recruiter

Ground a candidate-matching agent in fresh roles. Pull new postings into your vector store on a schedule; let the model reason over current demand, not last quarter's snapshot.

  • Poll posted_within=24h → embed → match
  • is_active flag keeps the index clean
  • Salary fields drive offer benchmarking
Hiring-scan recipe
agent · 02recipe

Sales intent signal

Hiring is the loudest growth signal a company emits. Trigger your SDR agent when a target account posts a role that matches your buyer pattern.

  • Filter by company_id + role family
  • New posting → CRM enrichment → outbound
  • Applicant velocity says how urgent the hire is
ICP-enrichment recipe
agent · 03recipe

Market research

Watchlist of N companies, weekly LLM-written market brief. Hiring velocity, role-mix shifts, geo expansion — the alt-data signal, indie-priced.

  • Buy the dataset for the full archive
  • Long-form description for thematic analysis
  • Provenance on every row for citation
Market-digest recipe
§ 06 · faq

What AI builders ask before they sign up.

  • What makes this AI-ready vs a generic jobs API?

    Three things. Structured fields the model can reason over — parsed salary as numbers, level and employment_type as strings, is_active as a boolean, applicant_count as an integer — not a bag of strings. MCP-native, so Claude Desktop, Claude Code, Cursor, and Zed pick it up as a tool with one config block (linkfetch-mcp). And provenance on every row, so when your agent surfaces a job to a user it can cite where and when it learned it.

  • Why not just use Coresignal or Bright Data?

    Coresignal is an enterprise data-warehouse product with a sales cycle; Bright Data has a $250 minimum order and doesn't surface an is_active flag. Both are built for procurement, not for an indie dev shipping an agent on a Tuesday. LinkFetch starts at $0 with a $5 credit, ships an MCP server, and sells the whole archive for $199 one-time if you'd rather have the rows in Postgres.

  • How fresh is the data?

    We crawl LinkedIn's public guest endpoints continuously and index about 45,000+ new postings per day across 218 regions. Every row carries first_seen_at and last_seen_at, and is_active is re-checked on recrawl, so your index doesn't fill up with expired listings.

  • Do you have webhooks?

    Not yet. Today you poll GET /v1/jobs with posted_within=24h (1 credit per call), or take the $49/month live database access and query first_seen_at directly. Real-time push delivery is on the roadmap; we'll announce it in the changelog when it ships rather than before.

  • Is this legal? Can I cite it from my agent?

    Yes. We only index public job postings — listings any logged-out visitor can see. No fake accounts, no rented sessions, no cookie theft. We're aligned with GDPR and CCPA. Provenance fields (source, fetched_at, freshness_days) ship on every API row, so your agent can always say where it learned what it learned.

  • What does it cost to run an agent on top of this?

    Flat per request, no per-result math. A jobs search is 1 credit and a job detail is 1 credit, whether the page holds one row or fifty. Empty results are free. The $5 free credit covers thousands of jobs calls; Starter is $29/month and Pro is $99/month. If you'd rather not meter at all, the dataset is $199 one-time or $49/month for live Postgres access.

  • Which LLM frameworks does this work with?

    All of them — the REST API returns plain JSON, so any HTTP client works and there is no SDK to install. The MCP server (linkfetch-mcp) plugs straight into Claude Desktop, Claude Code, Cursor, Zed, and Continue. Most customers wire it as a tool inside their agent loop alongside web search and a vector store.

  • How does it compare to scraping LinkedIn jobs myself?

    You can. LinkedIn's guest endpoints are public. But you'll spend a quarter building the parser, another on rate-limit and proxy management, and you'll still be missing the structured shape — parsed salary, level, industry_ids, applicant counts over time — that we extract per row. We sell the time, not the access.

ready when you are

Ship the agent. Catch the signal.