Use case

Portfolio company monitoring for private equity teams

Public signals give an operating partner a weekly outside view of each portfolio company and its competitors. Here is how to build the watchlist and design the digest.

Updated 5 October 20266 min read

An operating partner receives monthly numbers from each portfolio company and sees little of what its competitors are doing. Public signals add a weekly outside view of both: who is hiring for what, which tools and markets have changed on a website, what has been announced, and where a leadership role has changed. This guide designs that weekly digest, from the watchlist to the layout of the page, and shows how it sits beside management reporting.

The watchlist

Key the watchlist on the Fokals company ID, which is stable. Resolve each portfolio company and each competitor to a company ID once, by website: the companies endpoint of the API matches a name or website against the text you give it.

GET /api/v1/companies?q=acme-robotics.example&limit=5
Authorization: Bearer fk_live_...

Store one row per company with its role, portfolio or competitor, and for a competitor the portfolio company it is compared with. Five to ten competitors for each portfolio company is enough, and more dilutes the digest. Choose them by who the company meets in deals rather than by industry code, and review the sets each quarter. The industry of each company, which you need later for the sector line, appears in the dashboard and the data browser with the website labels. Store it with the watchlist.

Keep company_id as the grain of the list. A brand of a listed parent carries the parent's identifiers, so a join on isin would roll its postings up under the parent. For a listed competitor, Company News also includes its regulatory disclosures, typed with the same event types from their item numbers, which the guide to event-driven research with regulatory disclosures explains.

Map the signals before the first digest. For each company, confirm which signals are active: a website observed recently, a job board, a newsroom or feed. The digest then states which signals are active for each company, so a quiet week is read against what is being watched.

SignalEvidenceSection it feeds
Website observedlast_read_at in Website Profile is recentWebsite and technology changes
Job board observedRows in Hiring ActivityHiring
Newsroom or feed observedRows in Company News, or a newsroom entry in key_pagesAnnouncements

What goes in the digest

Each item has a source and a rule for when it appears. A digest that lists everything is not read. Announcements and traffic tiers come from the announcements and scale dataset, and the rest from the hiring, marketing stack, intent and market series datasets.

ItemSourceInclude when
Hiring momentumHiring Activityopen_postings goes above or below everything the company showed over the previous twelve weeks
Hiring collapseHiring Activityopen_postings stays near zero for more than a week
Sales organisationSales Team Metricsnew_countries or upmarket is set, or the sales share of open postings moves by more than your threshold
Site and stackTechnology ChangesA tool is added or removed in a category you follow, or a platform, market, currency, app or page event appears
AnnouncementsCompany NewsAlways. layoffs_restructuring, incident and leadership_change go first, with the role concerned from roles
IntentIntent Scoressurge is true, shown with its evidence
Traffic tierWeb TrafficIn the first digest of a month, when rank_bucket moves
SectorMarket SeriesAlways, as the line to compare against

Hiring momentum needs a rule that a partner can read at a glance. The simplest is a new twelve-week high or low in open_postings for the company itself, read from Hiring Activity.

select *
from (
  select
    h.company_id,
    h.day,
    h.open_postings,
    max(h.open_postings) over win as high_12w,
    min(h.open_postings) over win as low_12w
  from company_hiring_daily h
  join watchlist w on w.company_id = h.company_id
  window win as (
    partition by h.company_id
    order by h.day
    range between interval '84 days' preceding and interval '1 day' preceding
  )
) t
where day = current_date - 1
  and (open_postings > high_12w or open_postings < low_12w);

The rule needs no model and no sector assumption, and each flag can be explained in one sentence. Two further rules keep the digest honest. The first is to judge a company against its own history before its sector. Hiring that doubles against the company's own range means one thing, and hiring that grows more slowly than its industry means another. The weekly market series give the industry line on same-store cohorts over 7, 30 and 180 days, so the growth of hiring_new for the company's industry sits beside the company's own change over the same window.

The second rule is never to alarm on a single observation. The data records a removal or a closed posting only once it is confirmed, and the same patience suits hiring. A fall to zero followed by a return to the earlier level is a change of job board, not a freeze, so report a collapse only when it lasts past a week. The guide to detecting restructuring from postings and announcements covers the false positives in more detail.

If the digest shows a traffic tier, keep the attribution that comes with it. A tier is the monthly traffic tier of the website, which suits a coarse comparison of one company with another.

A digest layout

Order the page by what needs a decision. The top section holds only what warrants one this week: restructuring, an incident, a leadership change in a finance or revenue role, a hiring collapse that has persisted. Each portfolio company then gets three lines at most, and a company with no change gets one line saying so. Competitors appear as a compact table with one row per rival, and the page ends with a coverage footer that lists what could not be observed. Every item carries a link to its source, the url on a Company News row or on a posting.

Week to Sunday 4 October 2026 (illustrative)

Needs attention
  Acme Robotics: leadership change, finance role, announced on its newsroom

Portfolio
  Acme Robotics      open postings 41 (+6 on four weeks); first sales posting in Germany
                     tool added: payments; page added: pricing
  Acme Foundry       no change this week

Competitors of Acme Robotics
  Competitor A       open postings 120 (+2); no announcements
  Competitor B       open postings 64 (+18); expansion announced
  Industry           new postings +4% on the previous 30 days

Signals active
  Acme Robotics      website, hiring, announcements
  Acme Foundry       website, announcements

Using it in the monthly call

Turn each item into a question for management. A first sales posting in Germany becomes a question about the plan for that market and who funds it. A new payments tool becomes a question about whether a vendor was replaced, and a competitor's expansion announcement becomes a question about pricing and exposed accounts. The digest sets the agenda, and the company supplies the numbers behind each answer. Over a few months, the record of what the digest flagged and what the company said shows which signals were worth a question.

Building and running it

Two routes bring the week into your warehouse. The export endpoints return a dataset for a period as JSON, JSON Lines or CSV, with every company's rows, so you page through the whole dataset and keep the watchlist. They need the exports scope. The per-company endpoints return only the companies you ask for, which means fewer rows and more requests.

GET /api/v1/exports/hiring/company_sales_weekly?from=2026-09-28&to=2026-10-04&format=jsonl
GET /api/v1/exports/marketing_stack/company_tech_events?from=2026-09-28&to=2026-10-04&format=jsonl
GET /api/v1/companies/{id}/changes?since=2026-09-28

Choose by the size of the watchlist against the size of the dataset. The feeds run oldest first from a time you set, and the last cursor is your bookmark; the guide to incremental sync of company data covers it.

Some events should not wait for Monday. Add a daily check of the announcements feed for the event types that need a decision, and match its rows to the watchlist. That feed lists the newest first. Announcements refresh daily to every three days, so one can take up to three days to appear.

GET /api/v1/news?since=2026-10-03T00:00:00Z&event_type=layoffs_restructuring&limit=200

Run the weekly job on the Monday after the week closes, since the weekly datasets are written once the week has ended. Store each digest as you send it, so that the record of what you knew on a date is your own. Run the digest silently for four weeks first, and tune the thresholds until a normal week produces a page that someone reads to the end.

How the digest sits beside management reporting

  • Management reporting. Portfolio reporting stays the source for revenue, margin, cash, churn and pipeline. The digest is an independent cross-check on what management reports, and for competitors it is the outside view you work from.
  • Reading a quiet week. No postings, announcements or changes can mean a stable company or one that publishes little. Treat a quiet week for a covered company as an absence of evidence, and keep the coverage footer beside it.
  • Evidence behind each score. Where the digest shows an intent surge, it shows the dated signals behind the score, so a partner can open the evidence and judge it.
  • Company ranges. A company new to the data starts with a baseline, so compare it with the weeks available until its twelve-week range is complete.

The data is collected from first-party company sources and public records and processed in-house. The sourcing statement sets out what is collected, and it is the document to hand to a compliance team that asks.

Frequently asked questions

What should a private equity portfolio monitoring report include?

Only what changed and what needs attention: leadership changes by role, restructuring or incident announcements, hiring momentum against the company's own range and its sector, sales expansion into new countries or segments, and tool or market changes on its website. Give each item a source link, and add a coverage line for any company that could not be observed.

How can I track a portfolio company's competitors with public data?

Resolve each competitor to a company ID, then watch the same signals you watch for the portfolio company: postings, sales hiring, website changes and announcements. Show them as a compact table beside the portfolio company, and compare hiring with the industry line from the weekly market series so that a rising tide is not mistaken for a competitor's gain.

How often should a portfolio monitoring digest run?

Weekly is a good default. The sales and intent datasets are written weekly, and hiring and announcements rarely call for a decision within a day. Run the digest on the Monday after the week closes, and keep a daily check for the few event types that cannot wait, such as restructuring or an incident. A monthly run misses changes while they can still be acted on.

How do public signals complement management reporting from a portfolio company?

They give an independent, dated outside view: hiring, website changes and announcements for the company, and the same for its competitors. Management reporting supplies revenue, margins, cash and customers. Read together, a first sales posting in a new country or a new tool on the website becomes a specific question for the monthly call, and the digest records what was known on each date.

How do I read a quiet week for a portfolio company?

Read it against the signals that are active for that company. The digest lists them for each company: website, hiring, announcements. A company with all three active and no change had a quiet week in public. Each signal follows what the company itself publishes, so the list of active signals tells the reader exactly what the quiet week covers.

The queries and code on this page are examples to adapt. Test them in your own environment before you rely on them.