All posts
· 8 min read·Tutorial · ICP

Building an ICP from your CRM in 30 minutes (without a data scientist)

Most teams describe their ICP from gut. The fast version: take closed-won deals from the last twelve months, find the four traits they share, and turn that into a signal-mining query the same afternoon. Step by step.

By Bora Esen

Most teams describe their ICP from gut. “Mid-market SaaS, EU, technical buyer, growth stage.” That sentence sounds rigorous; it is mostly a story the founder is telling themselves. The fast version of the same work uses your CRM as the ground truth. Take closed-won deals from the last twelve months. Find the four traits they share. Turn those into a signal-mining query. Total time: thirty minutes. Total cost: zero.

Step 1: pull the last 12 months of closed-won

Export from your CRM. Limit to deals that are closed-won, not closed-lost, not active. Exclude trials and free-tier upgrades — you want commercial customers who paid. If you have fewer than 30 closed-won deals in the period, drop the period to whatever volume gets you to 30. Below 30, the pattern is too noisy.

Pull the basics: company name, company domain, industry, headcount, country, deal size, source channel, time-to-close. If your CRM has tech-stack data (Built With, Wappalyzer integration), pull that too.

Step 2: find the four traits

Open the export in any spreadsheet. Run four counts.

  • Industry distribution. Sort the deals by industry. Look at the top two or three industries that account for >50% of your closed-won. Those are your ICP industries.
  • Headcount distribution. Bucket the deals into headcount bands (1–10, 11–50, 51–200, 201–1000, 1000+). Look for the band(s) that account for >60%. That is your ICP size band.
  • Geography distribution. Top three countries. Often the result here is uncomfortable — many teams discover they are selling to one country whose addressable market they have already half-saturated.
  • Tech-stack pattern (if available). Tools your closed-won deals share. If 70% of your closed-won runs Postgres + Stripe, “Postgres + Stripe” is part of your ICP and a powerful enrichment trigger.

Most teams find one or two of these traits are tighter than they expected and two are wider. The narrow ones define the ICP. The wide ones tell you where to look for adjacency later.

Step 3: write the one-line ICP

Compress the four traits into a single sentence. For Leafer, the sentence reads: “B2B SaaS companies, 11–50 employees, EU + Türkiye, running Postgres + Stripe.”

The sentence has to be specific enough that you can hand it to someone who has never met your product and they can find a hundred matching companies. If the sentence is “mid-market B2B,” it is not done yet.

Step 4: turn the sentence into a signal query

This is where the work pays off. Each trait becomes a filter on your signal-mining tool.

  • Industry. SIC / NAICS code filters in Google Maps + LinkedIn search.
  • Headcount. LinkedIn employee-count filter, validated by an enrichment vendor.
  • Geography. IP-to-country lookup plus a city/region filter.
  • Tech-stack. BuiltWith / Wappalyzer lookups for the company domain, or a crawl of the site itself for the tells (script tags, careers page, status page).

Plug those filters into your signal source and the “maybe-fit” pool shrinks 10–30× compared to running the same source on a generic ICP. The hit rate on the smaller pool goes up commensurately.

What the result looks like

A team that does this exercise for the first time typically discovers two things. First, the ICP they have been describing is two or three traits too generic — they are paying for a wider pool than they need. Second, the actual ICP is sharper than the gut version, and once the messaging is tuned to the sharper one it stops sounding like it was written for a category.

Whatever lift you get out of this, the reason is not magic and it is worth being clear about: the message did not improve, the pool did. That is also why we are not quoting you a percentage — the size of the effect depends entirely on how wrong your gut ICP was.

When to redo this

Once every six months in early stage. Once every twelve months in steady state. Sooner if you change the pricing or the positioning. The exercise is cheap. The mistake of running outbound on a stale ICP is expensive.

In Leafer the output of this exercise is the ICP you configure once: the traits above become the discovery query and the fit half of the lead score, and every lead in the workspace is re-scored against it nightly, so tightening the ICP re-ranks the pool you already have rather than only affecting what you find next. If you would rather do the whole thing by hand using the steps above, the recipe is the same. The point is to let the closed-won list tell you the truth instead of guessing.

Try it

Ready to run this in your workspace?

$99/month — transparent tiers.

Get started
Building an ICP from your CRM in 30 minutes (without a data scientist) — Leafer Blog · Leafer