DEV Community

Crawler Bros
Crawler Bros

Posted on

Hiring intelligence: tracking Indeed jobs and LinkedIn company data with Apify

Hiring intelligence: tracking Indeed jobs and LinkedIn company data with Apify

Job postings are public strategy leaks.

If a competitor starts hiring five sales engineers in Germany, expansion is likely. If a SaaS company posts ten AI infrastructure roles, the roadmap has moved. If salary ranges jump across a category, recruiters and founders need to know before the market average catches up.

Hiring intelligence is the practice of turning public job postings and company data into a structured signal about a company's priorities, growth, and strategy, instead of reading job boards one listing at a time. This Apify workflow collects those hiring signals from Indeed and enriches company context with LinkedIn data.

Quick answer

Use Indeed Jobs Scraper to collect job postings by role, location, salary, description, company, and country. Then enrich companies with LinkedIn Company Info Scraper to add company size, industry, website, and profile context. Store weekly snapshots to track hiring velocity and market demand.

The hiring intelligence setup

The pipeline starts with:

  1. Indeed Jobs Scraper for job listings across 60+ countries, including titles, salaries, descriptions, company ratings, job type, and posting dates.
  2. LinkedIn Company Info Scraper for company enrichment from LinkedIn company pages.

Indeed Jobs Scraper Actor page on Apify, showing job market data extraction input fields for position, location, and country

The data path:

\
Role and location queries
-> Indeed Jobs Scraper
-> company list
-> LinkedIn Company Info Scraper
-> hiring intelligence table
\
\

Recruiters, job boards, salary researchers, sales teams, and investors can all use the same weekly snapshot, even if they ask different questions.

Key facts

  • 2 Actors, 1 pipeline: Indeed Jobs Scraper output feeds directly into LinkedIn Company Info Scraper for enrichment.
  • Deduplication matters: the same job can appear through multiple searches, so keeping saveOnlyUniqueItems on avoids double-counting.
  • Descriptions carry the real signal: seniority, tools, geography, and remote policy usually live in the job description, not the title.
  • Hiring concentration is the tell: ten scattered roles usually means normal growth; ten roles in one function usually means a strategic bet.

Actor configuration that matters

Indeed Jobs Scraper can search with position, location, and country, or accept direct Indeed startUrls with filters already applied. The important caps and switches are maxItemsPerSearch, parseCompanyDetails, saveOnlyUniqueItems, and followApplyRedirects.

\json
{
"position": "AI engineer",
"location": "remote",
"country": "US",
"maxItemsPerSearch": 250,
"parseCompanyDetails": true,
"saveOnlyUniqueItems": true,
"followApplyRedirects": false
}
\
\

Keep deduplication on because the same job can appear through multiple searches. Only enable apply-link redirects when you need final external application URLs, since that adds run time.

What the output looks like

The job row needs enough structure for both humans and downstream scoring. Keep positionName, company, location, country, salary, jobType, postedAt, description, and jobUrl.

The LinkedIn enrichment row then adds company size, website, industry, and description. That makes it possible to separate a two-person startup hiring one engineer from a public company opening a new team.

In a small Indeed Jobs Scraper run for "data analyst" in remote US jobs, the Actor returned 40 rows even though the input asked for a small sample. Each row included positionName, company, location, salary, jobType, rating, reviewsCount, url, description, companyLogo, id, postedAt, postingDateParsed, isExpired, and scrapedAt.

What to track

From Indeed, collect:

  • position name
  • company
  • location
  • country
  • salary text and salary fields when available
  • job type
  • full description
  • posted date
  • company rating
  • job URL
  • external apply URL when enabled

From LinkedIn company data, enrich with:

  • company description
  • website
  • industry
  • company size
  • headquarters
  • specialties
  • follower count when available

The result is a dataset that shows not just open roles, but company context.

LinkedIn Company Info Scraper Actor page on Apify used for company enrichment, showing company size, industry, and website fields

Use case 1: market demand tracking

For a recruiting agency, the question is not "who is hiring?" It's "which roles are heating up before everyone else notices?"

Run recurring queries such as:

  • "AI engineer remote"
  • "solar sales representative Texas"
  • "nurse practitioner Florida"
  • "data analyst Germany"

Then compare weekly counts. If postings for a role jump 30% in a region, that becomes a sales trigger or content topic.

Use case 2: salary intelligence

Salary data is messy because not every job includes it. But when enough listings include ranges, patterns emerge.

Extract salary fields where available and group by role, city, company size, and seniority terms in the title. That gives a rough compensation benchmark from live job ads instead of stale survey data.

Use case 3: competitor monitoring

For founders and investors, competitor hiring is a roadmap signal.

A company hiring:

  • customer success managers may be expanding accounts
  • enterprise account executives may be moving upmarket
  • localization specialists may be entering new regions
  • compliance roles may be preparing for regulated customers
  • mobile engineers may be investing in an app

The job description often gives away the internal priority.

The fields that turn into signals

Raw job posts are useful, but derived fields make the workflow much stronger. Usually add:

  • seniority from title terms like junior, senior, lead, principal, or head of
  • function from keywords like sales, engineering, product, support, compliance, or finance
  • remote policy from location and description language
  • tools mentioned in the description
  • geography from city, country, and remote markers
  • salary midpoint when a range is available

These fields make trend analysis easier. Instead of reading 500 descriptions, you can ask which companies are increasing enterprise sales hiring, which markets show remote pullback, or which technical skills appear most often.

The enrichment step also helps sales teams. A company hiring many support roles may be scaling customer operations. A company hiring implementation consultants may need tooling around onboarding, documentation, or integrations.

The weekly hiring report

The final report is intentionally simple: the fastest-growing role categories, companies with the most new postings, regions with salary movement, and unusual job descriptions worth reading manually.

This matters because hiring intelligence can easily become a giant spreadsheet no one opens. The report should answer practical questions: which companies should sales contact, which roles should recruiters prioritize, which markets are warming up, and which competitors are telegraphing a strategic move.

For investors, also flag hiring concentration. Ten scattered roles may mean normal growth. Ten roles in one function usually means a bet.

Production notes

Use specific queries. Broad queries produce noisy data. "Software engineer" is too wide. "backend engineer fintech London" is more useful.

Deduplicate by job ID. Job boards repeat listings across searches. Indeed Jobs Scraper includes deduplication support — keep it enabled.

Parse descriptions for signals. Tools, locations, compliance terms, and seniority markers often live in the description, not the title.

Be careful with LinkedIn cookies. LinkedIn company scrapers require a valid session cookie. Treat it as sensitive and rotate it when it expires.

Store snapshots. Hiring velocity matters more than one scrape.

Job counts alone miss intent. A row count says a company is hiring. The description says why. Extracting tools, geographies, and seniority from descriptions makes the dataset far more useful for sales and strategy teams.

Cost comparison

Approach Best for Weakness
Manual job board checks Small competitor list Slow and incomplete
Labor market SaaS Enterprise reports Expensive and less flexible
Apify hiring pipeline Custom role/location tracking Requires analysis setup

Check the current Pricing tabs for Indeed Jobs Scraper and LinkedIn Company Info Scraper before running at scale. LinkedIn workflows also depend on cookies, so pricing isn't the only operational cost to plan for.

FAQ

Can Apify scrape Indeed jobs?

Yes. Indeed Jobs Scraper (built by CrawlerBros) extracts job listings, salaries, descriptions, and company fields from Indeed.

Can I track hiring trends over time?

Yes. Schedule the Actor and compare weekly or monthly datasets.

Why add LinkedIn company data?

Job listings tell you what a company needs. LinkedIn company data adds size, industry, website, and positioning context.

What's the fastest way to try this?

Start with five role-location queries, export the Indeed dataset, group by company, then enrich the top companies with LinkedIn Company Info Scraper.

Try it yourself

Start with five role-location queries using Indeed Jobs Scraper. Export the dataset, group by company, then enrich the top companies with LinkedIn Company Info Scraper. Run the same setup next week. The deltas are where the intelligence lives.

Top comments (0)