A competitor keeps its roadmap private, but its open roles are public: each names a function, a level, a place and often a tool. Read across all its postings and over a few months, hiring data shows where it is investing before the product, the pricing or the press release does. This guide explains what each part of a posting tells you, which datasets to read, and how to turn them into a monthly competitor brief.
What a posting reveals
Each reading is a dated observation that you read beside the others, and a single posting says little. The signal is a change in the mix over weeks. The hiring dataset holds every column named here, and the data dictionary defines them. It has four parts: Job Postings, with every role a company publishes; Hiring Activity, with daily open, new and closed postings; Sales Team Metrics, with weekly sales-organisation measures; and Sales Pay Benchmarks.
| Question | Read | What it suggests |
|---|---|---|
| Where is it investing? | by_function in Hiring Activity, or job_function in the Job Postings labels | A rising share for one function is a priority. A function that stops appearing is one it has built or dropped |
| Is the work new or scaling? | by_seniority, and the new_initiative and team_build flags | A first director or vice president in a function points to a new function. Many junior roles point to scaling one that works |
| Where is it going? | by_country and work_mode, and new_countries in Sales Team Metrics | A first posting in a country is an early sign of entry |
| Whom is it selling to? | by_segment and upmarket in Sales Team Metrics | A first enterprise-segment sales posting suggests a move up market |
| What is it building on and buying? | tech_mentions, tool flags such as tool_aws, and the selects_tools and replaces_vendor flags | Named tools show architecture choices. A role that selects tools suggests a purchase under consideration, and one that replaces a vendor suggests work moving in-house |
| What is it paying? | median_salary_usd and median_ote_usd | The wage pressure it faces, as advertised and not as paid |
Firsts carry more information than volume. A company that opens its fortieth engineering role has told you little. One that opens its first sales role in a new country, its first enterprise-segment posting or its first director in a function has changed something. Sales Team Metrics records two of these firsts directly, and for the rest you compare the mix with the month before.
Four of the ten role flags repay a column of their own in the brief. ai_role marks AI roles, which ai_postings counts for each day. new_initiative marks a role tied to something new. urgent marks an immediate start or an urgent hire, and a cluster of them suggests capacity pressure. budget_owner marks a role that owns a budget. Flags are set on firm readings, so a set flag is a reliable marker to count.
Setting up the watchlist
List the competitors by company ID, with the brands and subsidiaries that publish boards of their own, and look at what each one publishes before you read anything. Brands and subsidiaries carry the identifiers of their listed parent, so group their rows by isin when you want a group's hiring as one. The query counts each competitor's postings in Job Postings by board.
select
company,
board_platform,
count(*) as postings,
min(first_seen_at) as first_read
from job_postings
where company_id in (:competitors)
group by company, board_platform
order by company, board_platform;The result shows which competitors publish a board and how many postings each carries. A competitor with a few rows may publish most of its roles somewhere else, so read its postings beside its announcements. The earliest first-seen date marks the baseline observation of the board, and every posting on it that day is a baseline and not an opening.
A monthly brief in six parts
- Size and direction. Open postings at month end, and postings opened and closed in the month.
- Mix. The function and seniority of postings opened this month against the month before.
- Places. The countries with postings opened, and the countries new to its sales hiring.
- Go-to-market. The sales share of open postings (
open_salesoveropen_all), the segments,upmarketand the median on-target earnings. - Tools. The tools named in postings, and the movers since last month.
- Against the sector. The same measures for the competitor's industry from the weekly market series (
hiring_new,function_share,seniority_share), so that a competitor hiring faster than its sector is told apart from one rising with it.
Write one line of reading under each part and end the brief with the decision it implies for you. The first query counts the postings a competitor opened in a month by function and seniority. The second reads its sales organisation week by week, and the third gives the sector baseline from Market Series for part 6.
-- JSON operators differ by engine; this is the PostgreSQL form
select
labels ->> 'job_function' as job_function,
labels ->> 'seniority' as seniority,
count(*) as opened
from job_postings
where company_id = :competitor
and not found_on_first_read
and first_seen_at >= :month_start
and first_seen_at < :next_month_start
group by 1, 2
order by opened desc;select
week_start, open_sales, open_all, new_sales, closed_sales,
by_segment, new_countries, upmarket, median_ote_usd
from company_sales_weekly
where company_id = :competitor
and week_start >= :month_start
order by week_start;-- :industry is the industry id the dashboard shows for the competitor
select as_of, count, cohort, rate, growth
from market_series
where metric = 'hiring_new'
and dimension_kind = 'industry'
and dimension = :industry
and window_days = 30
order by as_of;Set the competitor's postings opened in the last 30 days against its own previous 30 days, and compare that change with growth for the industry. A competitor up 60 per cent in an industry up 5 per cent is changing course. One up 8 per cent in the same industry is not.
The exclusion of postings found on the first observation matters. A posting already on a board at the baseline observation was not seen opening, so its first-seen date is not its opening date, and it is not counted as new.
A worked reading
The figures here are illustrative. Acme Robotics, an invented competitor, opens 40 postings in a month: 22 in software_engineering, 8 in data_science_ml, 6 in sales and 4 elsewhere. Four of the six sales postings are account_executive roles in the enterprise segment, new_countries lists DE and FR for the first time, and a data warehouse is named in nine postings.
The brief for that month reads as follows.
| Part | Last month | This month | Reading |
|---|---|---|---|
| Postings opened | 24 | 40 | Hiring up by two thirds |
| Engineering share | 71 per 100 | 55 per 100 | Diluted by data and sales roles |
| Sales postings | 2 | 6 | A sales motion forming |
| New sales countries | None | DE and FR | Entry into Europe |
| Enterprise segment | None | 4 postings | A move up market |
Read together, that is a product-led company building a data capability and opening an enterprise sales motion in Europe. The decision for you is whether your European enterprise accounts are about to meet it, and whether your own hiring in those countries is ahead or behind. For a closer reading of the sales organisation, see tracking sales team build-out.
How to read the postings
- Evergreen and reposted roles. Some roles stay open as a standing pipeline, and some are closed and reopened. Compare open and new postings, and treat a jump in new postings with no change in open ones with suspicion.
- Baseline observation. The first time a board is observed, every posting on it is marked
found_on_first_readand none counts as new, so the record of openings for a board begins with its next observation. - Board changes. A competitor that moves to a new applicant tracking system can look as if it stopped hiring for a few days. A fall to zero followed by a return to the earlier level is a change of board, not a freeze.
- One country per posting.
countryis the first location's country, so a role open in several countries counts once, in the first. Thelocationslist holds all of them. - A plan to hire. A posting records an intention to hire. Advertised pay is the range in the posting and not what the company pays.
- Seasonality. Graduate intakes, budgets and holidays move postings, so compare the competitor with its sector, which shares the season, and not with last month alone.
Roles, then the other half of the picture
The data shows roles opened and closed, with function, level, place and tools: the shape of a competitor's investment. A closed posting records that the role left the board, and it may have been filled or withdrawn, so read closures as a trend across many roles.
Job Postings carries every role a company publishes on its own careers pages, and the blog explains why postings are read at the source. Each label is produced under a frozen version, so a brief compares like with like from month to month. What a competitor announces is the other half of the picture, and tracking competitor launches and partnerships at the source covers it.
Frequently asked questions
What can job postings tell you about a competitor?
Where it is investing, from the mix of functions. Whether the work is new or scaling, from seniority. Where it is expanding, from locations. Whom it sells to, from sales roles and segments. What it builds on, from the tools named. Postings record intention to hire, so they are strongest read as a change over weeks.
How do you track a competitor's hiring?
Put the competitor on a watchlist by company, then read its postings opened and closed each day, its function and seniority mix, its countries and its sales organisation each week. Compare each month with the last and with the competitor's industry. A monthly brief of six measures is enough for most teams, with a closer weekly look at sales hiring.
Can you tell a competitor's technology stack from its job postings?
Partly, and the two sources complement each other. Postings name tools, matched from a catalogue of software products, and show what the company asks candidates to know. The technologies detected on its website show what it runs in public. Read both together: a tool named in postings before it appears on the website is an early sign of adoption.
How often should you review a competitor's hiring?
Monthly for the strategic brief, because a month is long enough for the mix to change and short enough to act on. Look weekly at the sales organisation if the competitor sells into your accounts. The data refreshes daily, and a single day's postings are noisy, so compare longer windows.
What does a closed posting tell you about a competitor?
That a role has left the board, with the date. Across many roles it shows the pace at which a competitor fills or withdraws positions, and a run of closures in one function beside a fall in new postings points to a function being wound down. Read a single closure as one data point, and read the pattern over weeks.
The queries and code on this page are examples to adapt. Test them in your own environment before you rely on them.