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 type | What you measure | Typical question |
|---|---|---|
| Demand by occupation | Postings per job title or occupation group | Is demand for nurses, electricians or data engineers rising or falling? |
| Demand by industry | Postings per industry | Which sectors are adding capacity this quarter? |
| Demand by region | Postings per country, region or city | Where is hiring activity concentrating, and which regions are cooling? |
| Emerging skills and technologies | Share of postings mentioning a skill or tool | Is a new framework, cloud service or regulation-driven skill gaining traction? |
| Remote and hybrid shifts | Share of postings by work model | Are employers pulling roles back on-site, or expanding remote hiring? |
| Company expansion and contraction | Postings per company over time | Which competitors, customers or portfolio companies are scaling up or freezing? |
| Wage signals | Posted salary ranges, where available | Are 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:
- 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.
- Segments. Top occupations and industries by volume and by YoY change, separately for growth and decline.
- Regions. Countries, regions or cities ranked by YoY change, with a small-sample flag.
- Skills and technologies. Fastest-growing and fastest-declining skill terms by share, within the occupations you care about.
- Companies. Largest movers within your cohort (competitors, customers, prospects or portfolio companies).
- Wages. Median posted salary ranges for key roles, where coverage allows.
- 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
| Pitfall | What happens | How to handle it |
|---|---|---|
| Coverage changes | Adding or losing a source creates jumps that look like demand shifts | Use a stable source panel, track counts per source, document breaks |
| Duplicates | The same job is posted on several portals or by several agencies and counted multiple times | Deduplicate (same company, title and location within a short time window) before counting |
| Reposting | Employers refresh or repost the same ad to stay at the top of listings, inflating new postings | Treat near-identical postings within a window as one; compare with active postings |
| Ghost jobs | Ads 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 noise | A niche skill or small region goes from 10 to 20 postings: "+100%" | Set minimum volume thresholds, show absolute counts next to percentages |
| Extraction drift | Changes in how skills, industries or salaries are extracted shift the series | Keep extraction rules stable, or re-process history when they change |
| Recruiter and agency postings | Staffing agencies post on behalf of unnamed clients, distorting company-level analysis | Flag agency postings and exclude or analyze them separately |
| Platform bias | Some occupations (for example many blue-collar roles) are posted less online, or on different channels | Know 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:
- Job posting volumes by country show monthly new postings per country and how they develop over time.
- Job posting volumes by portal list the sources, from job boards and aggregators to public employment offices and ATS career pages.
- The data overview links both and more.
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.
