Use case

How corp dev teams build acquisition target lists from public signals

Build an acquisition target list a deal committee can audit: a space set by what companies run and hire for, one ranking rule you state, the evidence on every row, and what SEC filings add for listed names.

11 min read

Corporate development teams build acquisition target lists from public signals in four moves: define the space by what companies run and hire for, measure each company's direction, keep the evidence behind every row, and refresh the list on a schedule. This guide gives the SQL that builds and ranks the list, what SEC filings add for listed companies and an illustrative ranking, for the analyst who defends each name to a deal committee.

How corporate development teams build a target list from public signals

A corporate development team builds a target list from public signals by fixing the space, then measuring direction. The space is the companies that run the technologies and hire for the functions the thesis names. Direction is hiring pace, technologies added, announcements and stated headcount. Each row keeps its evidence, and the list is rerun on a schedule.

  1. Define the space. Write the thesis as filters the data can test: the technology categories a company runs on its website, the job functions it hires for, the countries of its postings. Filters can be rerun and argued with; a list recalled from memory cannot.
  2. Measure direction. For each company, compute postings opened in a window, technologies added, announcements by event type and the latest stated headcount with its date.
  3. Rank by one stated rule. Write the rule in a sentence and store it with the list. Filters decide who is in; the rule decides only the order of reading.
  4. Keep the evidence and refresh. Store the link and date behind each number, rerun on a fixed day, and compare runs.

The list sits upstream of deeper work. Sourcing private companies for venture capital scores private companies for a first call, commercial due diligence with public signals studies one target in depth, and portfolio monitoring for private equity watches companies already owned. The list decides which companies earn the diligence.

Which public signals support acquisition target identification in M&A screening?

Acquisition target identification in M&A screening rests on two kinds of public signal. Fit signals say a company belongs in the space: the technologies it runs, how it sells and the functions it hires for. Direction signals say how it is moving: postings opened, technologies added, announcements by type and stated headcount. Read fit first, then direction.

SignalDatasetFields a query readsWhat it says on a target list
What it runsTechnology Stack (company_technologies)technology_category, first_seen_at, missing_sinceFit: the tools on its website, each with the first date it was seen
How it sellsWebsite Profile (company_site_facts)key_pages, markets, currenciesFit: pricing, demo and contact sales pages, and the markets the site declares
What it hires forHiring Activity (company_hiring_daily), Job Postings (job_postings)by_function, by_country, labels, technologiesFit: the functions and countries it staffs, and the software its postings name
Hiring paceHiring Activitynew_postings, open_postings, closed_postingsDirection: roles opened and closed, day by day
Stack changesTechnology Changes (company_tech_events)category, change, observed_atDirection: tools, markets and platforms added or removed, dated
AnnouncementsCompany News (company_news)event_types, at, urlDirection: launches, partnerships, expansion, acquisitions made, leadership changes
ScaleEmployee Headcount (company_headcounts)employees, as_ofStated headcount over time, each count with its date
ExclusionCompany Newsevent_types holding acquired_or_mergedA company that has announced it was acquired or merged

Read each signal as what it records. A posting records an intention to hire, a detection shows presence on the website, and a stated headcount is the count as stated on its date, with no estimate between two points. Every record carries the time it was observed, and daily and weekly rows are written once and never revised, so the record behind a list is point-in-time data. The hiring, marketing stack and announcements and scale pages describe the datasets, and the data dictionary defines every field above.

An M&A target screening and sourcing methodology for corp dev

An M&A screening methodology for corp dev turns the thesis into filters, runs them over the company index, ranks the result by one stated rule and stores it with its date. Rerun next month, the same filters give a comparable list, and a name that enters or leaves does so for a reason you can read.

The queries are PostgreSQL over datasets loaded from bulk files, with JSON columns as jsonb. A parameter starts with a colon and is a value you choose.

Step one: the space

The first query finds companies that run a technology in a category you name and had open postings in a job function you name on the last closed day. :job_function is one of the 26 job functions in the dictionary, such as software_engineering; :category is a category as the technology catalogue names it.

with runs as (
  select company_id, min(first_seen_at) as first_seen
  from company_technologies
  where technology_category = :category
    and missing_since is null
  group by company_id
),
hires as (
  select company_id,
         open_postings,
         coalesce((by_function ->> :job_function)::int, 0) as open_in_function
  from company_hiring_daily
  where day = (select max(day) from company_hiring_daily)
)
select h.company_id, r.first_seen, h.open_postings, h.open_in_function
from hires h
join runs r using (company_id)
where h.open_in_function >= :min_in_function;

missing_since is set while a technology is absent from recent readings and not yet counted as removed, so missing_since is null keeps what is present now. by_function holds open postings by job function. Store the result as your own table, target_space, with the run date. For private companies only, add ticker is null and isin is null to hires: every file carries the listing identifiers of a company or its listed parent.

Step two: direction and the ranking rule

The second query measures direction for each company in the space and ranks by one rule: postings opened in the last 90 days per 100 stated employees, or hiring pace set against size.

with pace as (
  select company_id, sum(new_postings) as opened_90d
  from company_hiring_daily
  where day >= current_date - 90
    and company_id in (select company_id from target_space)
  group by company_id
),
staff as (
  select distinct on (company_id) company_id, employees, as_of
  from company_headcounts
  order by company_id, as_of desc
),
added as (
  select company_id, count(*) as tools_added_90d
  from company_tech_events
  where category = 'technology' and change = 'added'
    and observed_at >= current_date - 90
  group by company_id
),
news as (
  select company_id,
         count(*) filter (where "at" >= current_date - 90
           and (event_types @> '["product_launch"]'
             or event_types @> '["partnership"]'
             or event_types @> '["expansion"]'))          as growth_news_90d,
         bool_or(event_types @> '["acquired_or_merged"]') as acquired_or_merged
  from company_news
  where "at" >= current_date - 365
  group by company_id
)
select p.company_id,
       p.opened_90d,
       st.employees,
       st.as_of                                                 as headcount_as_of,
       round(100.0 * p.opened_90d / nullif(st.employees, 0), 1) as opened_per_100_staff,
       coalesce(a.tools_added_90d, 0)                           as tools_added_90d,
       coalesce(n.growth_news_90d, 0)                           as growth_news_90d
from pace p
left join staff st using (company_id)
left join added a  using (company_id)
left join news n   using (company_id)
where not coalesce(n.acquired_or_merged, false)
order by opened_per_100_staff desc nulls last;

new_postings counts postings seen opening that day, not those already on a board at its first read, so a newly read board does not inflate the pace. The latest stated count from Employee Headcount keeps its as_of date beside the ratio, because a count for a period that closed a year ago is an older denominator. Rows with no stated count sort last: list them apart rather than dropping them.

The exclusion drops a company whose announcements of the last year carry the event type acquired_or_merged. Open the item at its url and read the company's own words before a name leaves the list. Tools added and growth announcements sit beside the rank as evidence and carry no weight in it.

An illustrative example: one stated rule over five invented companies

Every company and figure here is invented, and the ranking is illustrative.

Assumptions:

  • The space: companies that run a technology in the payments category on their website and had at least five open software engineering postings on the last closed day. Five qualify: Acme Robotics and peers labelled B to E.
  • The rule, stated by the team: rank by postings opened in the last 90 days per 100 stated employees. A company with no stated headcount is listed apart.
  • Tools added and growth announcements are evidence and carry no weight.
CompanyPostings opened, 90 daysStated employees, as ofOpened per 100 employeesTools added, 90 daysGrowth announcements, 90 daysRank
Acme Robotics36240, 31 Dec 202515.0321
Company B54900, 31 Mar 20266.0143
Company C21150, 30 Jun 202614.0012
Company D12400, 31 Dec 20253.0204
Company E18none statednot computed11listed apart

The working:

  • Acme Robotics: 36 ÷ 240 × 100 = 15.0
  • Company C: 21 ÷ 150 × 100 = 14.0
  • Company B: 54 ÷ 900 × 100 = 6.0
  • Company D: 12 ÷ 400 × 100 = 3.0
  • Company E: no stated headcount, so no ratio; it is listed apart with its 18 postings opened

Ranked on postings opened alone, Company B would come first with 54. The stated rule puts it third: it has the largest stated headcount of the five, so 54 postings are a smaller share of its staff. Neither order is right in itself. The rule expresses what the thesis values, here pace against size, and its name is stored with the list.

The as-of dates matter as much as the ratios. Acme Robotics states its count as of 31 December 2025, so anyone hired since is missing from the denominator, and its ratio reads high against Company C's, stated as of 30 June 2026. Before Acme Robotics goes to a committee, open its 36 postings in Job Postings for function and seniority, read the three tools added in Technology Changes, and open its two announcements. The rank sets the order of reading, nothing more.

What SEC filings add to acquisition target signals for corporate development

For a listed target, SEC filings add statements under the regulator's rules: the company's description of its business and segments with, where material, the number of people it employs, its current reports by item, filings by beneficial owners of over 5 percent of a class of its equity, and financial data tagged in XBRL. Read them beside the signals.

In Fokals data a listed company carries its ticker, MIC, ISIN, LEI and share-class FIGI, and its SEC CIK where it has one, so each row joins to the filer's record. The entry on the Central Index Key explains the identifier.

  • Business and headcount. Item 101 of the SEC's Regulation S-K, headed Description of business, directs a registrant to describe what it and its subsidiaries do and intend to do, centred on its dominant or reportable segments, and, to the extent material to the business as a whole, its human capital resources, including how many people it employs (17 CFR 229.101). The SEC made human capital a disclosure topic in amendments adopted on 26 August 2020 (press release 2020-192).
  • Current reports by item. The SEC's staff interpretations of Form 8-K are arranged by item, among them Item 1.01 (entry into a material definitive agreement), Item 2.01 (completion of acquisition or disposition of assets), Item 5.01 (changes in control of registrant) and Item 5.02 (departure of directors or certain officers, election of directors, appointment of certain officers and compensatory arrangements of certain officers) (Form 8-K interpretations). In Company News, a listed company's regulatory disclosures are classified into the same 13 event types as its newsroom items.
  • Holders above 5 percent. Under the SEC's beneficial ownership rules, an investor that beneficially owns more than 5 percent of a covered class of equity securities files a Schedule 13D or 13G; amendments adopted on 10 October 2023 cut the deadline for an initial Schedule 13D to five business days (press release 2023-219). These filings show which investors have reported a stake above that line.
  • Financial data. The SEC's APIs on data.sec.gov return JSON with no authentication or API key: a filing history by 10-digit CIK, and XBRL data by company and concept, for all concepts of a company, or for one concept across filers in the period closest to a calendar period you name (EDGAR APIs). Its fair access page sets a current maximum of 10 requests a second and asks for a declared user agent with a company name and contact email (Accessing EDGAR data).
  • Search and sector codes. EDGAR full-text search covers filings submitted electronically since 2001, exhibits included, takes exact phrases in quotation marks and filters by form type, dates, company name and CIK (full-text search FAQ), which tests whether a term from your thesis appears in filers' own words. The SEC's SIC code list says the SIC code in a company's EDGAR filings indicates its type of business: a coarse check beside the space your filters define.
  • Private companies. The SEC describes Form D as the notice of an exempt offering of securities, filed within 15 days after the first sale (Filing a Form D notice). Company Funding carries private capital raises reported in regulatory filings, and the guide to following private funding reads them in full.

How private equity firms screen for growing companies in a sector

Private equity firms can screen for growing companies in a sector by fixing the sector and a size band, then reading each company's growth against the sector's own line. Stated headcount sets the band, hiring pace measures growth, and weekly market series give the sector's pace on same-store cohorts.

The sector line comes from Market Series, which aggregates the company tables each week by industry, country, size band and market over 7, 30 and 180 days. Industry is the website label, one of 21 industries, shown for each website in the dashboard and the data browser. Size bands follow stated employees, from 1-10 to 5000+. Each row of a hiring family covers at least 20 companies. This query reads the latest 30-day line for postings opened in one industry.

select as_of, count, previous, growth
from market_series
where metric = 'hiring_new'
  and dimension_kind = 'industry'
  and dimension = :industry
  and window_days = 30
order by as_of desc
limit 1;

growth is count minus previous, divided by previous, both over the same cohort of companies covered since before the window began, so a growing company index does not read as a growing sector. Set beside it each company's postings opened in the same 30 days against the 30 before, from Hiring Activity. A company ahead of the line is adding roles faster than its sector. The entry on same-store cohorts explains the construction, and the market series page lists the families.

Three refinements suit a private equity screen. Set a floor on open postings before reading any ratio. Use stated headcount, with its date, to place a company in a band rather than to measure it. And add Web Traffic, the monthly traffic tier of each website, as a coarse comparison of reach.

Keeping the evidence and refreshing the list

A list a committee can audit stores, for every row, the records behind each number.

KeepFromWhy
Run date, rule and filtersYour job logRuns can be compared and rebuilt
Company ID and listing identifiersEvery dataset; the CIK from the company indexThe join key, and the CIK for listed names
Postings behind the paceJob Postings: url, title, first_seen_atEach role can be opened
Tools addedTechnology Changes: technology_name, observed_atEach stack change, dated
AnnouncementsCompany News: url, at, event_typesThe company's own words, dated
Stated headcountEmployee Headcount: employees, as_of, refThe denominator and its date
Filings, for listed namesAccession numbers from the regulatorThe regulator's record

Hiring refreshes daily, the marketing stack daily to weekly and announcements daily to every three days; stated headcount refreshes yearly and traffic tiers monthly. Run the full list monthly on a fixed day, and the direction query weekly for names under review. Because daily and weekly rows are written once and never revised, and every record is dated as observed, a past run can be rebuilt from the rows observed on or before it. Bulk exports deliver any dataset for any period as JSON, JSON Lines or CSV, and the methodology sets out how each dataset is built. Keep a decision per company ID, as in the venture sourcing guide, so that a name set aside returns only on new evidence.

Frequently asked questions

What deal sourcing criteria do private equity firms use to screen high growth companies?

Criteria come from each firm's own strategy, so write them as filters that data can test: a sector defined by what companies run and hire for, a size band from stated headcount, a growth threshold on hiring pace read against the sector line, and exclusions such as a company that has announced it was acquired or merged. The screening process then runs those filters on a schedule, ranks the result by one stated rule and keeps the evidence for each row.

How do you screen private companies that report little?

Use what they publish themselves. A private company with a careers board and a website still shows its hiring pace, the functions and countries it staffs, the tools added to its site and its own announcements, and some raise private capital reported in regulatory filings. A stated headcount appears where a company or public reference data states one, so rank the other names on measures that need no denominator, or list them apart, and read the postings behind each number.

Which SEC filings help when screening a listed acquisition target?

Four kinds. The description of business under Regulation S-K Item 101, which covers segments and, where material, human capital resources including the number of people employed. Current reports by item, such as a completed acquisition, a change in control or an officer's departure. Schedules 13D and 13G from investors beneficially owning more than 5 percent of a covered class of equity securities. And financial data tagged in XBRL, served by SEC APIs that need no key and take the CIK.

Why rank an acquisition target list by one stated rule?

A single rule can be explained in a sentence, rerun by someone else and argued with. A composite score hides its trade-offs, and a reader cannot tell whether a name rose on hiring, tools or news. Changing the rule changes the order, as ranking by postings opened instead of postings per employee shows, so store the rule's name with each run and keep the other measures beside the rank as evidence.

How often should an acquisition target list be refreshed?

Monthly for the full list and weekly for the names under review suits the data. Hiring refreshes daily, website stack changes daily to weekly and announcements daily to every three days, while stated headcount refreshes yearly. Store each run with its date and its rule, so that a name's entry to the list or exit from it can be traced to the evidence that changed.

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

What this page says about the products it names was checked against their public documentation on 7 October 2026. Product and company names are trademarks of their owners. Fokals is not affiliated with them or endorsed by them.