How Job Ads Data Uncovers Market Trends

How to use job postings as a leading indicator: which trends they reveal, methods like YoY and share-of-postings, recurring reports and pitfalls.

Posted by Jörg Rech on July 3, 2023 at 15:33:06

Reading Time: 14 min read

Companies post a job ad before they hire, and they hire before they ship, open a site or enter a market. That ordering is what makes job ads data useful for trend detection: postings record an intention to grow (or the lack of one) weeks or months before it shows up in headcount figures, revenue or official statistics.

This guide covers what job postings can and cannot tell you about market and labour market trends, the methods that turn raw postings into reliable indicators, how to set up a recurring market intelligence report, and the pitfalls that most often produce false trends.

Why job postings work as a leading indicator

Official labour statistics such as employment surveys and vacancy surveys are reliable, but they are published with a lag, aggregated to broad categories and often only quarterly. Job postings have different properties:

  • Timeliness. A posting is visible on the day it is published. With daily or hourly data you can see changes within days instead of waiting for the next statistical release.
  • Granularity. Each posting carries a job title, company, location, often an industry, required skills, work model and sometimes a salary. You can cut the data by any of these instead of relying on predefined categories.
  • Intent. A posting is a budgeted decision to add capacity. A company that starts hiring for a new product line, a new city or a new technology reveals that plan in its job ads.

It is commonly reported that aggregated online job posting counts move broadly in line with official vacancy and employment statistics, which is why statistical offices, central banks and researchers use them as a supplementary, more timely signal. Treat that as a general relationship, not a guarantee: the strength of the correlation depends on the country, the occupation mix and how well the posting data covers the local market. Before you build decisions on a posting-based indicator, compare it with the official series for your market over a few years.

Job postings are a measure of demand, not of hires or employment. A posting does not tell you whether the role was filled, how many people were hired for it, or whether it was ever meant to be filled (see the pitfalls below).

Which trends job ads data can reveal

Trend typeWhat you measureTypical question
Demand by occupationPostings per job title or occupation groupIs demand for nurses, electricians or data engineers rising or falling?
Demand by industryPostings per industryWhich sectors are adding capacity this quarter?
Demand by regionPostings per country, region or cityWhere is hiring activity concentrating, and which regions are cooling?
Emerging skills and technologiesShare of postings mentioning a skill or toolIs a new framework, cloud service or regulation-driven skill gaining traction?
Remote and hybrid shiftsShare of postings by work modelAre employers pulling roles back on-site, or expanding remote hiring?
Company expansion and contractionPostings per company over timeWhich competitors, customers or portfolio companies are scaling up or freezing?
Wage signalsPosted salary ranges, where availableAre advertised salaries for a role moving, and where are they highest?

A few notes on the less obvious ones:

Emerging skills and technologies. New technologies show up in job requirements long before they show up in market sizing reports. Employers need people to build, run and sell a product before it becomes mainstream. Tracking skill terms (frameworks, programming languages, certifications, tools) as a share of postings in an occupation is one of the most practical ways to see a technology moving from niche to standard.

Company expansion and contraction. Aggregated per company, postings show growth trajectories: a sudden burst of sales roles in a new country, engineering hiring for a new product area, or a hiring freeze. This is the basis for competitive intelligence, sales prospecting and investment research. See market intelligence use cases for typical applications.

Wage signals. Salary data in postings is uneven. Some countries and portals show salaries on most postings (often driven by pay transparency rules), others rarely. Use posted salaries as a directional signal within markets where coverage is stable, and always report the share of postings that actually contain a salary. For a hands-on example, see Hope Springs Eternal, as Do Salaries.

Methods: turning postings into trend indicators

Raw posting counts are noisy. The methods below are what separates a usable indicator from a chart that mostly reflects changes in data collection.

New vs. active postings

There are two basic time series:

  • New postings: postings first seen in a period (day, week, month). This is a flow measure and reacts quickly to changes in hiring intent.
  • Active postings: postings that are online at a given point in time. This is a stock measure. It rises when hiring increases, but also when positions take longer to fill.

Tracking both is informative. Rising active postings with flat new postings can point to harder-to-fill roles rather than more demand. For most trend work, new postings per month is the cleaner starting point.

Normalize by source coverage

Any posting dataset is a sample of the market. If a large job board is added to (or drops out of) the collection, counts jump without any real change in demand. Ways to handle this:

  • Compute trends on a stable panel of sources that were collected throughout the whole period you are analyzing.
  • Track counts per source and look for breaks before interpreting the total.
  • Prefer ratios (see share-of-postings below) over absolute counts, because ratios are less sensitive to coverage changes.

Year-over-year and seasonality

Hiring is seasonal: there are typical peaks after the turn of the year and dips around summer and year-end holidays, and the pattern differs by country and industry. Month-over-month comparisons mostly measure the season. Use:

  • Year-over-year (YoY) growth: compare a month with the same month a year earlier.
  • Rolling averages (for example a 3-month rolling sum) to smooth out short-term noise.
  • Seasonal decomposition (such as STL) if you have several years of history and need a deseasonalized series.

This is where history matters. With data since January 2020 you can compute YoY growth for every month from January 2021 onwards and see how a series behaved through the pandemic shock, the recovery and the hiring slowdown afterwards.

Share-of-postings metrics

Instead of "how many postings mention Kubernetes", ask "what share of DevOps postings mention Kubernetes". A share is normalized by the overall hiring volume of the segment, so it separates a genuine shift in requirements from a general hiring boom or slump. The same logic applies to work models (share of remote postings), regions (a city's share of national postings) and industries.

Skill-term growth

To find emerging skills, compute YoY growth of each skill's share and rank the terms. Add a minimum volume threshold, otherwise rare terms with a handful of mentions dominate the list. Normalizing synonyms ("k8s" and "Kubernetes", "JS" and "JavaScript") before counting matters more than any statistical refinement.

A minimal pandas example, assuming one row per posting with a creation date and a list of extracted skills (field names follow the Techmap format; the threshold is illustrative):

import pandas as pd

# One posting per line (JSON Lines), e.g. from a historical dataset
df = pd.read_json("postings_de.jsonl.gz", lines=True)
# same company, city and title on the same day counts as one posting
df = df.drop_duplicates(subset=["company", "city", "title", "dateCreated"])
df["month"] = pd.to_datetime(df["dateCreated"]).dt.to_period("M")

total = df.groupby("month").size()               # all new postings per month

skills = df[["month", "skills"]].explode("skills")
skills["skills"] = skills["skills"].str.lower().str.strip()
counts = skills.groupby(["month", "skills"]).size().unstack(fill_value=0)

share = counts.div(total, axis=0)                # share of postings per skill
yoy = share.pct_change(periods=12)               # year-over-year change of the share

latest = share.index.max()
ranked = (
    yoy.loc[latest]
    .where(counts.loc[latest] >= 200)            # ignore low-volume terms
    .dropna()
    .sort_values(ascending=False)
)
print(ranked.head(20))

The output is a ranked list of skills whose share of postings grew the most compared with the same month a year earlier. Run the same calculation within one occupation or industry to get more specific signals.

Company cohorts

To measure expansion and contraction without being fooled by changes in which companies are covered, build a cohort: a fixed set of companies (for example all companies that posted in every quarter of the base year, or a defined peer group of competitors) and track their postings over time. Changes within a fixed cohort reflect real hiring behavior, not changes in coverage. Cohorts also work for questions like "how many of last year's active employers in this region are still hiring".

Building a recurring market intelligence report

A one-off analysis is useful. A recurring report with stable definitions is what lets you spot a trend early, because you compare like with like every period.

Structure

A practical structure for a monthly report:

  1. Headline indicators. New postings (YoY), active postings, share of remote postings, share of postings with salary. One line per indicator, with the change since last month and last year.
  2. Segments. Top occupations and industries by volume and by YoY change, separately for growth and decline.
  3. Regions. Countries, regions or cities ranked by YoY change, with a small-sample flag.
  4. Skills and technologies. Fastest-growing and fastest-declining skill terms by share, within the occupations you care about.
  5. Companies. Largest movers within your cohort (competitors, customers, prospects or portfolio companies).
  6. Wages. Median posted salary ranges for key roles, where coverage allows.
  7. Data notes. Source changes, coverage breaks, and any definition changes during the period.

Cadence

  • Monthly is the right default for most trend reporting. It smooths daily noise and aligns with how most stakeholders plan.
  • Weekly works for fast-moving questions (a competitor's hiring push, the effect of a policy change), ideally as rolling 4-week sums.
  • Quarterly suits strategic reviews and board reporting, built on the same monthly series.

Charts that work

  • Indexed line charts (base period = 100) to compare segments of different size on one chart.
  • YoY bar charts per segment or region, sorted, so growth and decline are visible at a glance.
  • Stacked area or line charts of shares for work models or skill shares over time.
  • Small multiples per country or occupation instead of one overloaded chart.
  • A coverage chart (postings per source over time) in the appendix, so readers can check that a trend is not a data artifact.

The labour market intelligence use case and Exploit Job Posting Data for Effective Labor Market Intelligence go deeper into how public institutions and researchers structure this kind of analysis. For a step-by-step data science walkthrough, see How to Analyze the Job Market.

Pitfalls that create false trends

PitfallWhat happensHow to handle it
Coverage changesAdding or losing a source creates jumps that look like demand shiftsUse a stable source panel, track counts per source, document breaks
DuplicatesThe same job is posted on several portals or by several agencies and counted multiple timesDeduplicate (same company, title and location within a short time window) before counting
RepostingEmployers refresh or repost the same ad to stay at the top of listings, inflating new postingsTreat near-identical postings within a window as one; compare with active postings
Ghost jobsAds for roles that are not actively being filled (talent pools, evergreen ads, employer branding)Watch for postings that stay online for very long or recur unchanged; analyze trends rather than levels
Small-sample noiseA niche skill or small region goes from 10 to 20 postings: "+100%"Set minimum volume thresholds, show absolute counts next to percentages
Extraction driftChanges in how skills, industries or salaries are extracted shift the seriesKeep extraction rules stable, or re-process history when they change
Recruiter and agency postingsStaffing agencies post on behalf of unnamed clients, distorting company-level analysisFlag agency postings and exclude or analyze them separately
Platform biasSome occupations (for example many blue-collar roles) are posted less online, or on different channelsKnow which segments your sources represent well; validate against official statistics

Duplicates deserve a special note: deleting them is not always right. Techmap flags duplicates instead of removing them. A posting with the same company name, city, country and job title within a 3-day window is marked with isDuplicate: true; the data feeds additionally link each duplicate to the earliest identical posting via isDuplicateOf (a feed-only field). With the API, group by those four fields and take the smallest dateCreated if you need the first publication. For demand trends you filter them out; for questions like "where does a company distribute its job ads" the duplicates are the signal.

Getting the data

You can collect postings yourself by scraping job boards and career pages, but for trend analysis the hard part is not a one-off crawl. It is keeping coverage stable over years, normalizing fields across many portals, and handling deduplication consistently. Inconsistent collection is the main source of the false trends described above.

Start with free public volume pages

Before you buy any data, check how well a market is covered:

These pages are a quick way to judge whether a country or source mix is large and stable enough for the analysis you have in mind.

Historical datasets for back-testing

Historical job posting datasets contain all normalized job postings of a country since January 2020 as gzip-compressed JSON Lines files delivered via AWS Data Exchange. Across all countries that is 451M+ new job postings since January 2020. History is what makes the methods above work: you need at least two years for YoY comparisons, and more to separate seasonality from trend and to back-test whether an indicator would have flagged past turning points. Datasets are a one-time purchase per country, and a free Luxembourg dataset is available to evaluate the format.

Ongoing feeds for recurring reports

Job posting data feeds deliver normalized postings of the last 3 months per country, re-exported hourly, as files to your S3 bucket or via an AWS Data Exchange subscription. Techmap collects around 8M new job postings per month across 250 countries and territories. For a monthly or weekly report, a feed per country keeps your series current while the historical dataset provides the baseline. A free Luxembourg feed in the same format as every paid country is available. For smaller, query-based needs there is the Jobs API on RapidAPI: same collection, but a rolling window of the last 3 months - for anything older you need the historical datasets.

Each record includes fields such as title, company, country, city, industry, skills, work place (remote, hybrid, on-site), salary where posted, creation date and portal, which map directly onto the trend types and methods in this guide. For broader business applications beyond trend detection, see Analyzing Job Posting Data for Business Insights.

Summary

  • Job postings are a timely, granular measure of labour demand that often moves ahead of official statistics, but they measure demand, not hires.
  • They reveal demand by occupation, industry and region, emerging skills, work-model shifts, company expansion and, where salaries are posted, wage signals.
  • Reliable indicators need YoY comparisons, share-of-postings metrics, stable source panels, company cohorts and minimum volume thresholds.
  • A recurring report with fixed definitions, a monthly cadence and a data-notes section turns these indicators into early warnings.
  • Most false trends come from coverage changes, duplicates, reposting, ghost jobs and small samples, so check the data before reading the chart.

Find more Articles on the following topics:

Build something great!

Unleash the full potential of our high-quality job postings to achieve your business objectives and gain a competitive edge in your industry!

Excellent Service

Our reliable services are tailored to meet your needs, helping you achieve your goals with confidence.

Scalable Solution

Our global coverage is designed to support your use-case, enabling you to easily add new markets.

Fast Set-up

Download job postings from our API or AWS S3 and load them into your Databases in minutes.

Explore our Data!