Every row of Market Series answers a question about a market: how much hiring, technology adoption or funding news an industry, a country or a size band saw in a window of days. The answer is worth reading when a change in it reflects what companies did and nothing else. This post sets out the rule that secures that, the same-store cohort, and the arithmetic behind each measure, so that you can read the count, the cohort, the rate, the previous count, the growth and the index knowing how each was made.
Why a raw count misleads
The Fokals company index expands continuously. A count of every technology adopted, posting opened or funding round announced across all the companies covered on a given Sunday would rise week after week with the index, whether or not any company behaved differently. It would measure coverage as much as the market, and the same holds for a raw count in any dataset that adds companies.
Dividing by the number of companies covered does not repair it. A company first covered five days before a 30-day window ends can show five days of activity at most, yet it would count as a whole company in the denominator. The more companies arrive in a window, the lower the rate falls, again for a reason that has nothing to do with the market.
Two rules that keep coverage out
A first observation is a baseline. The first observation of a website records the stack already in place and writes no change event. Job postings are treated the same way: a posting already published when a company's postings are first observed is not counted as a new posting. A newly covered company therefore adds no changes and no new postings on the day it arrives.
The cohort is same-store. The companies, or websites, behind a rate are those already covered before the window opened and still covered when it closes. The count for the preceding window is made over that same group. A company that arrives or leaves part-way through is in neither figure.
Membership is decided for each window. Take three websites and a window that ends on a given Sunday.
| Website | Covered since | Still covered at the window's end | In the cohort |
|---|---|---|---|
| A | Before the window began | Yes | Yes |
| B | A day inside the window | Yes | No |
| C | Before the window began | No | No |
Website B is not lost. It enters the cohort of the first window that begins after its coverage did, which comes sooner for the 7-day window than for the 180-day one.
The arithmetic of one row
A series is a metric, a dimension and a window, and it gets one row a week, as of the Sunday the week closed. Take an illustrative row: the websites of one industry that added a given technology, over 30 days. The figures are invented to show the arithmetic.
| Websites | How many | Added the technology in the window |
|---|---|---|
| Covered since before the window began and still covered at its end | 2,000 | 64 |
| First covered inside the window | 400 | 9 |
| Covered before the window, no longer covered at its end | 40 | 1 |
A raw count would say 74. The row is built from the first line only.
| Measure | How it is computed | Illustrative value |
|---|---|---|
| Count | Events in the window, over the cohort | 64 |
| Cohort | Websites covered since before the window began and still covered at its end | 2,000 |
| Rate | The count per 100 of the cohort | 3.2 |
| Previous | The same count over the 30 days just before, on the same 2,000 websites | 60 |
| Growth | The count less the previous count, divided by the previous count | 0.0667 |
| Index | Set to 100 on the base date of the series, and afterwards the rate relative to the rate on that date. With a base rate of 2.5, that is 3.2 divided by 2.5, times 100 | 128 |
Growth of 0.0667 says that the same 2,000 websites added the technology about 7 per cent more often than in the 30 days before. The ten additions on websites that arrived or left are real changes, each observed between two dated observations of the website. They are left out of this row because those websites were not covered for the whole window, and each is still delivered as a dated event in Technology Changes.
You can check the arithmetic on any series whose unit is per 100 companies or per 100 websites. The query does it for one technology over all companies.
select
as_of,
"count",
cohort,
rate,
100.0 * "count" / cohort as rate_check,
previous,
("count" - previous) * 1.0 / nullif(previous, 0) as growth_check,
"index"
from market_series
where metric = 'tech_added:salesforce'
and dimension_kind = 'all'
and window_days = 30
order by as_of;The two check columns reproduce the rate and the growth as delivered. Where the previous window holds nothing to compare with, the growth is empty.
Windows and units
The windows are 7, 30 and 180 days, each ending on the as-of Sunday. Hiring, technology, sales, announcements, intent and website changes are dated by the day, so each of their windows is made of real days. Web Traffic is a monthly tier, so its 30-day window sets the latest month against the month before, and its 180-day window sets it against the month six earlier. Employee Headcount is read year over year, on a window of 365 days.
The cohort is not always a set of companies. The unit follows what is counted.
| What is counted | Unit of the rate | Taken over |
|---|---|---|
| Something a company does once, such as adopting a technology, raising money, cutting staff, opening a country or adding a pricing page | Per 100 companies or per 100 websites | Companies or websites, same-store |
| Something counted in postings, such as AI roles, remote roles, seniority, function, sales roles or segments | A share of the postings opened in the window | Postings |
| Pay | A median in yearly US dollars | Postings |
| Headcount change | The median year-over-year percentage | Companies with two stated headcounts about a year apart |
| Listings | A plain count | The listings of each market |
New listings follow the baseline rule too. The first observation of a market sets its baseline, and a listing is counted as new when it appears on a market already under observation.
Two more properties protect a reader. Every row stands on a cohort large enough to carry a rate: the methodology sets a minimum cohort size, and every published row clears it. And each row is written once for its as-of date and never rewritten, so whenever you read Market Series, a row still says what was known on its Sunday. If the definition of a metric changes, the changed metric gets a new identifier and the series already written stays as written. Why we write each table once explains that choice.
How to read a same-store series
- It measures continuing companies. A series states how the companies covered through the whole window behaved. That is the like-for-like measure a trend needs, and the cohort beside it says how many companies stand behind the rate.
- Compare rates and indices across weeks. Each as-of date has its own cohort. Compare the rate or the index from one Sunday to the next, and read the count and the cohort to judge how much weight a rate can bear.
- Growth follows the count. Growth is computed from the count and the previous count over the same cohort. For a share metric, where the count is a number of postings, read the share in the rate.
- The index has a fixed base. It reads 100 on the base date of its series and states every later rate against that one, so series in different units can be charted on one scale.
- Windows of different lengths answer different questions. Consecutive rows of the 7-day window share no days and show the week. Consecutive rows of the 30-day window share 23 days and show the trend.
The market series dataset holds 28 families of series built this way, across 21 industries, countries, company size bands and markets, and section 9 of the methodology is the full statement of the rules. For the series in use, see sector hiring trends for macro and thematic research, and for charting and citing them, producing market research from weekly aggregate series.
Frequently asked questions
What is a same-store cohort in a data series?
A same-store cohort is the fixed group of companies, or websites, that a rate is measured over: those covered since before the window began and still covered at its end. The count for the previous window is taken over the same group. Because nobody joins or leaves the group between the two counts, a change in the series reflects what those companies did, not a change in coverage.
Why does a growing dataset distort trend counts?
A dataset that adds companies every day counts more events every week, even if no company changes its behaviour. A raw count therefore rises with coverage. A rate over all covered companies has the opposite fault, because a company covered for only part of a window can show only part of its activity. Measuring over companies covered for the whole window removes both effects.
How is the rate in a Fokals market series calculated?
The rate is the count expressed in the unit of the metric. For an event a company does once, such as adopting a technology, it is the count per 100 companies or per 100 websites of the same-store cohort. For metrics counted in postings it is a share of the postings opened in the window, and for pay it is a median in yearly US dollars.
Can I compare a market series from one week to the next?
Yes, compare one week with the next on the rate or the index. Each weekly row has its own cohort, so raw counts from two as-of dates are not over the same companies. Remember that consecutive rows of a 30-day window share 23 days, so that window moves slowly from one week to the next. The 7-day rows do not overlap.
The queries and code on this page are examples to adapt. Test them in your own environment before you rely on them.