Skip to content
ScrapeField

Hiring and job-change signals from LinkedIn

A company that opens five sales roles is buying. A champion who moves to a new company is your warmest lead there. Both show on LinkedIn first. Read job postings and profiles on a schedule, with no LinkedIn account of yours anywhere near it.

What you get

  • New job postings by company and role, every week.
  • A contact’s current employer, checked against what your CRM says.
  • Industry, size and founding year for every account, and which are growing.
  • What a role pays, where a posting says it.

Worked examples

Each with the calls it makes and what a run costs, multiplied out from the published price of every call.

01

Track who is hiring, every week

Run the same job searches every Monday, keep the listings from the last seven days, and count them by company. A company that suddenly posts ten data roles is telling you something before any press release does.

GET linkedin/jobs× 80240 cr
a month, 20 searches every week240 cr

≈ $0.143 at the 250k pack

const API = 'https://api.scrapefield.com/v1';
const sf = (path, q) =>
  fetch(API + '/' + path + '?' + new URLSearchParams(q), {
    headers: { Authorization: 'Bearer ' + process.env.SCRAPEFIELD_KEY },
  }).then((r) => r.json());

const searches = [
  { query: 'data engineer', location: 'Berlin' },
  { query: 'data engineer', location: 'London' },
  { query: 'backend engineer', location: 'Amsterdam' },
];
const weekAgo = Date.now() - 7 * 24 * 60 * 60 * 1000;
const byCompany = {};

for (const s of searches) {
  const { data } = await sf('linkedin/jobs', { ...s, limit: 25 });
  for (const job of data) {
    // a posting with no date is not counted as new
    if (!job.listed_at || Date.parse(job.listed_at) < weekAgo) continue;
    const name = job.company.name;
    byCompany[name] = (byCompany[name] ?? 0) + 1;
  }
}

const top = Object.entries(byCompany).sort((a, b) => b[1] - a[1]);
console.table(top.slice(0, 10));
02

Fill in the blanks in your CRM

For every account with a LinkedIn URL, fetch the company page and write back its industry, size band, founding year, headquarters and follower count. Five hundred accounts is one loop. To finish sooner, run several calls side by side, up to your account's concurrency limit.

GET linkedin/company× 5001,500 cr
500 accounts, once1,500 cr

≈ $0.894 at the 250k pack

const API = 'https://api.scrapefield.com/v1';
const sf = (path, q) =>
  fetch(API + '/' + path + '?' + new URLSearchParams(q), {
    headers: { Authorization: 'Bearer ' + process.env.SCRAPEFIELD_KEY },
  }).then((r) => r.json());

for (const account of accounts) {
  const q = { url: account.linkedin_url };
  const { data: c, error } = await sf('linkedin/company', q);
  if (error) continue; // a page that is gone is refunded, not charged

  await crm.update(account.id, {
    industry: c.industry,
    size: c.company_size,
    founded: c.founded,
    hq: c.headquarters?.city,
    followers: c.follower_count,
  });
}
03

Watch competitors grow

Read the company pages of the competitors you watch every Monday and keep two numbers: followers, and the people who list the company on LinkedIn. A company adding people faster than its peers is hiring into something; one losing followers is losing attention.

GET linkedin/company× 40120 cr
a month, 10 companies weekly120 cr

≈ $0.072 at the 250k pack

const API = 'https://api.scrapefield.com/v1';
const sf = (path, q) =>
  fetch(API + '/' + path + '?' + new URLSearchParams(q), {
    headers: { Authorization: 'Bearer ' + process.env.SCRAPEFIELD_KEY },
  }).then((r) => r.json());

for (const url of competitors) {
  const { data: c } = await sf('linkedin/company', { url });

  // one row a week per company; the change between rows is the signal
  await save({
    company: c.name,
    week: new Date().toISOString().slice(0, 10),
    followers: c.follower_count,
    people: c.employees_on_linkedin,
  });
}

Step by step

Guides that build one of these from the first call to the finished sheet, workflow or alert.

The endpoints

Every call above, with its price. A failed call costs nothing.

What it does not do

Only public profiles, companies and postings: no messages, no connection lists, and nothing behind a login.

Your first call, in a minute

Get a key