Lead scoring

How to identify product qualified leads (PQLs)

Identify product qualified leads: pull in product usage, score every signup with AI, and write PQL scores and reasons back to your CRM.

Photo of Utku Zihnioglu

By

ยท CEO & co-founder

Updated Oct 16, 2026

ยท 10 min read

Warehouse wording replaced, write-back timing corrected, fit added to the PQL definition

Free plan: 200 credits a month, 3 integrations, no card

Guide cover: 3 to 5 PQL signals from your last 50 upgrades, beside the PostgreSQL, PostHog, and Stripe logos

In short

A PQL is a free or trial user whose product use says they are ready to buy, at an account that fits your ICP.

Pick three to five signals from what your last 50 upgrades did in the two weeks before they paid.

Read usage straight from Postgres, PostHog, or Stripe, matched to CRM contacts by email; no warehouse needed.

Write a 0 to 100 score and a one-line reason back to the CRM, then route hot, warm, and expansion tiers.

Your database already knows which signups are about to buy. The columns are sitting right there: last_login_at, teammates_invited, a usage meter creeping toward its plan limit. None of it reaches the CRM where your sales team decides who to call, so reps prioritize by job title and company size while your best product qualified leads sit invisible in Postgres.

Score leads on Stripe billing data and product usage signals together: bring subscription status, plan tier, last login, and features activated alongside each CRM contact, then let AI rate every signup 0 to 100 with a one-line reason for the number. Both the score and the reason sync back to your CRM.

This guide shows how to identify product qualified leads in Oneprofile: pull your signups in, add product usage data straight from your product database or analytics tool, let AI score every signup and write the reason, then push scores back to your CRM.

To build it alongside the guide, connect your CRM and product database in a free workspace before you start.

What is a product qualified lead? Activation, depth, expansion

A product qualified lead is a free or trial user whose in-product behavior says they are ready to buy, at an account that also fits who you sell to. Someone who connected two integrations, invited a teammate, and logged in four times this week is closer to paying than someone who downloaded a whitepaper. The signal comes from what they did, not what they clicked.

Fit is the half most PQL definitions leave out. A student exploring your free plan can out-use a buyer, so usage tells you who is ready and fit tells you who is worth a sales conversation.

Useful signals cluster into three categories:

  • Activation: did the user reach your product's core value moment? For us, that is a new prospect showing up already researched, with no manual lookups. For a project management app, it might be a project with a second collaborator on it.

  • Depth: is usage sustained after activation? Login frequency over seven days, distinct features used, session length trending up or down.

  • Expansion: is the user outgrowing their plan? Teammates invited, usage limits approached, gated features attempted, pricing page visits after a week of steady use.

Signal

Category

What it predicts

core_feature_used

Activation

The value moment happened

login_count_7d

Depth

The product is becoming a habit

features_activated

Depth

Usage is widening, not just repeating

session_minutes_trend

Depth

Interest is rising or fading

teammates_invited

Expansion

The account is spreading internally

usage_limit_pct

Expansion

The current plan is running out

pricing_page_views

Expansion

They are pricing the upgrade

Define your PQL signals before you build anything: three to five, not fifteen. The honest way to choose is to pull your last 50 free-to-paid conversions and look at what each account did in the two weeks before upgrading. Raw login counts often say less than you expect, and a teammate invite in the first week can outweigh a month of solo activity. Your mix will differ, but expect one signal to embarrass the rest.

One opinion while we're here: the industry has made PQL definitions far too ceremonial. You do not need a quarter of cross-functional alignment meetings to agree that a free user who invited three teammates deserves a call. Pick the signals, ship the list, and let close rates correct you.

Put product usage next to your CRM contacts

Most PQL guides send you to a warehouse at this point: instrument an SDK, pipe events into Snowflake, model a score in SQL, then run another pipeline to copy it back to the CRM. If a data team already runs that stack for you, it works, and it may honestly be the better fit. Most teams under 200 people are not that team.

The Oneprofile build:

  1. Pull your signups in. Create a table from your CRM contacts, or directly from your product's users table. Each signup is matched to its CRM record by email.

  2. Add product usage data. Connect your Postgres database with a read-only database user, or connect your product analytics tool. Add each signal: login_count_7d, features_activated, teammates_invited. Turn on scheduled refreshes for the table and each signal stays current.

  3. Add billing data from Stripe. plan_status and monthly revenue turn "active free user" into "active free user on a team that already pays you", which is a different conversation.

The whole pipeline is three data points and a connection string. GTM data tools that read product usage at all tend to route it through a warehouse connection gated to a higher tier. Here it is a direct Postgres, PostHog, or Stripe connection, and every connection in this guide is included on the $20 Team plan.

Score product qualified leads with AI

This is where product qualified leads stop being a definition and become a ranked list. With usage, billing, and firmographic data in one place, add AI scoring. The prompt holds your ICP and signal weights in plain language: what activation means for your product, which signals matter most, what disqualifies a signup outright. AI reads all of a signup's usage, billing, and firmographic data, scores it 0 to 100, and writes a one-line reason next to the number.

The reason is the part reps actually use. "Invited 3 teammates this week, free plan near its usage limit, fits ICP" tells a rep how to open the conversation. Formula-based scoring in a CRM can add points per condition, but it cannot explain a record, and it never notices that two weak signals together make a strong one.

You also see what a scoring run will cost in credits before you start it, and enrichment lookups that come back empty cost nothing. For the fundamentals of scoring models before you write the prompt, the lead scoring guide covers demographic, behavioral, and predictive approaches.

Write PQL scores and reasons back to your CRM

A score that lives in a list nobody opens is a report, not a pipeline. Create two CRM properties once, pql_score and pql_reason, and map the score and the reason to them. The write-back runs on every paid plan. Run the export after each scoring pass and it skips contacts whose score has not changed, so when fresh usage data moves a score, the CRM record moves with it.

This works whether "your CRM" means a mature Salesforce instance or a HubSpot free account. Reps sort their view by pql_score descending and read pql_reason before the first touch. For the CRM-specific details, which properties to create and where the native scoring tools fit, see the HubSpot lead scoring guide or the Salesforce setup.

Route product qualified leads by tier: warm, hot, expansion

Not every product qualified lead needs a phone call, and sending all of them to an AE queue is how the queue starts getting ignored.

  • Hot (score 80+, activated, hitting limits): direct AE outreach within the hour. Enrol that view in a sequence with the reason attached, so the first email references what they actually did.

  • Warm (40 to 79, activated, light usage): an automated nurture sequence with setup tips and upgrade prompts.

  • Expansion (already paying, adding seats, or attempting gated features): route to customer success, not sales, where the signal sits beside the account's customer health score.

Two habits keep the tiers honest. First, re-run scoring on a schedule, because scores should decay as signals age. A signup who stopped logging in three weeks ago is not a PQL anymore, and the next run will say so in the reason. Second, once a quarter, compare closed-won and closed-lost deals against their scores at the time. If 40-score contacts close as often as 80-score contacts, your weights are off. Rewrite the prompt and re-score every signup in one pass, which is the adjustment a CRM formula rebuild never makes easy.

Start with the smallest version this afternoon: your CRM contacts, last_login_at, teammates_invited, and plan_status as signals, one AI score, write-back on. The free plan covers three connections, 200 credits a month, and 100 rows per table, enough to score your current trial cohort and see whether the reasons hold up before you pay anything. Get started free and score the cohort today.

Do this in Oneprofile

Usage, billing, and fit in one score

Product data from Postgres or PostHog and billing from Stripe sit beside each CRM contact, and AI writes a 0 to 100 score with a one-line reason.

  • PostgreSQL logo
  • PostHog logo
  • Stripe logo
  • HubSpot logo
  • Salesforce logo

6 steps to build it

Before you start

Your CRM connected, or your product's users table with an email column

Read access to product data: a Postgres database user or your analytics tool

Two custom CRM properties for the score and the reason, such as pql_score

1

Define your PQL signals

Pull your last 50 free-to-paid conversions and pick the 3-5 signals that showed up before each upgrade. Cover all three categories: activation (core feature used), depth (login frequency, features used), and expansion (teammates invited, usage limits hit).

2

Pull your signups in

In Oneprofile, create a table from your CRM contacts or directly from your product's users table. Each signup is matched to its CRM record by email, so every signal you add next lands on the right person.

3

Add product usage data

Connect your Postgres database with a read-only database user, or your product analytics tool. Add each PQL signal, plus billing status from Stripe. Turn on scheduled refreshes for the table so each signal stays current.

4

Score product qualified leads with AI

Add an AI column with your ICP and signal weights written in plain language. It reads each signup's usage, billing, and firmographic data, scores it 0 to 100, and writes a one-line reason. The credit cost of the run is shown before you start it.

5

Write PQL scores and reasons back to your CRM

Create CRM properties such as pql_score and pql_reason once, then map the score and the reason to them. Run the export after each scoring pass; contacts whose score has not changed are skipped.

6

Route product qualified leads by tier

Send hot PQLs (score 80+) to an account executive and enrol them in a sequence with the reason attached. Warm PQLs enter a nurture sequence. Expansion signals on paid accounts go to customer success. Re-run scoring on a schedule so stale PQLs decay.

Free plan: 200 credits a month, 3 integrations, no card

6 steps to build it

Before you start

Your CRM connected, or your product's users table with an email column

Read access to product data: a Postgres database user or your analytics tool

Two custom CRM properties for the score and the reason, such as pql_score

1

Define your PQL signals

Pull your last 50 free-to-paid conversions and pick the 3-5 signals that showed up before each upgrade. Cover all three categories: activation (core feature used), depth (login frequency, features used), and expansion (teammates invited, usage limits hit).

2

Pull your signups in

In Oneprofile, create a table from your CRM contacts or directly from your product's users table. Each signup is matched to its CRM record by email, so every signal you add next lands on the right person.

3

Add product usage data

Connect your Postgres database with a read-only database user, or your product analytics tool. Add each PQL signal, plus billing status from Stripe. Turn on scheduled refreshes for the table so each signal stays current.

4

Score product qualified leads with AI

Add an AI column with your ICP and signal weights written in plain language. It reads each signup's usage, billing, and firmographic data, scores it 0 to 100, and writes a one-line reason. The credit cost of the run is shown before you start it.

5

Write PQL scores and reasons back to your CRM

Create CRM properties such as pql_score and pql_reason once, then map the score and the reason to them. Run the export after each scoring pass; contacts whose score has not changed are skipped.

6

Route product qualified leads by tier

Send hot PQLs (score 80+) to an account executive and enrol them in a sequence with the reason attached. Warm PQLs enter a nurture sequence. Expansion signals on paid accounts go to customer success. Re-run scoring on a schedule so stale PQLs decay.

Free plan: 200 credits a month, 3 integrations, no card

Product qualified leads: common questions

What is a product qualified lead?

A product qualified lead is a free or trial user whose in-product behavior signals readiness to buy, such as activating core features, returning often or inviting teammates, at an account that fits your ICP. The signal comes from what they did in your product, not from form fills.

What are common PQL criteria?

Three families: activation (the user hit your product's core value moment), depth (login frequency, features used, session trends), and expansion (teammates invited, usage limits approached, pricing page visits). Pick the 3-5 that preceded your last 50 upgrades.

Do I need a data warehouse to identify product qualified leads?

No. Oneprofile reads product usage directly from your Postgres database, PostHog, or Stripe, matched to CRM contacts by email. A warehouse pipeline works too, but it assumes a data team most companies under 200 people don't have.

How is PQL scoring different from lead scoring?

Lead scoring weighs demographic, firmographic, and marketing-engagement signals. What a signup actually did in the product is the input it never sees, and that behavior is what makes a PQL. In Oneprofile both feed one AI score with a written reason, so reps see why a lead ranks where it does.

How do PQL scores get into my CRM?

Oneprofile writes the score and the reason back to your CRM as contact properties you create once. Write-back runs on every paid plan and works with HubSpot, Salesforce, and Attio, so reps sort by the score field and read the reason before the call.

How do I score leads using Stripe and product usage data?

Bring Stripe subscription status and plan tier together with product signals such as last login and features activated as data sources next to the CRM contact. AI scores each signup 0 to 100 and writes a one-line reason, and the score and reason sync back to your CRM.

About this article

Photo of Utku Zihnioglu

Utku Zihnioglu

CEO & co-founder

Serial entrepreneur who built infrastructure companies handling billions of requests. Now leads engineering at Oneprofile, which finds the people worth talking to, researches each one, and follows up until they reply.

Drafted with AI from our product docs and code. Utku Zihnioglu answers for what it says.

Find the signups who are ready to buy

Connect your product database and CRM, score each signup with a reason, and write it back.

Free plan: 200 credits a month, 3 integrations, no card

Find the signups who are ready to buy

Connect your product database and CRM, score each signup with a reason, and write it back.

Free plan: 200 credits a month, 3 integrations, no card