How to Identify and Track Product Qualified Leads in HubSpot
Learn how to identify and track Product Qualified Leads (PQLs) in HubSpot. Complete guide to syncing product usage data and building PQL scoring systems.
Quick answer: To identify and track Product Qualified Leads (PQLs) in HubSpot, you need to sync product usage data into HubSpot as custom properties, then build a scoring model that weighs key signals like activation milestones, feature usage, and engagement frequency. The fastest method is using a real-time sync tool like Zoody ($149/mo, no engineering work) - or build it yourself with reverse ETL from a data warehouse (requires engineering, 4-8 weeks setup).
- Real-time product sync + calculated properties - RevOps-friendly, updates as users engage, enables instant PQL scoring
- Data warehouse + reverse ETL - Most powerful but expensive ($350-$800/mo + warehouse costs + engineering time)
- HubSpot API custom integration - Full control, highest engineering overhead, ongoing maintenance burden
- Manual tracking - Spreadsheets and CSV uploads don't scale beyond 100 free users
What Are Product Qualified Leads (PQLs) and Why They Matter
A Product Qualified Lead (PQL) is a user who has experienced value in your product firsthand through meaningful usage - not just downloaded a whitepaper or attended a webinar. PQLs have activated, engaged with core features, and demonstrated buying intent through their behavior inside your product.
The difference matters: PQLs convert to paying customers at 3-5x the rate of traditional Marketing Qualified Leads (MQLs). A recent OpenView study of 500+ B2B SaaS companies found PQL-to-customer conversion rates of 25-40%, compared to 5-15% for MQLs. This isn't surprising - someone who has already solved a problem with your free tier is much easier to convert than someone who just read your blog.
The Evolution from MQL to PQL
Traditional MQL scoring tracks engagement with marketing content: email opens, content downloads, webinar attendance, demographic fit. This worked when buyers couldn't trial your product before talking to sales. But in 2026, 67% of B2B SaaS buyers expect to try the product before a sales conversation (Gartner).
Product-led growth (PLG) companies recognize this shift. Instead of gating product access behind a sales call, they offer free trials or freemium tiers and let users self-qualify through usage. The RevOps team's job becomes identifying which free users have experienced enough value to justify sales outreach.
MQLs answer "Are they interested?" PQLs answer "Have they gotten value?"
PQL Impact on Revenue Metrics
Beyond higher conversion rates, PQL-focused sales motions improve other core metrics:
- Shorter sales cycles - PQLs already understand your product's value prop because they've used it. Your demo shows them how to do more of what already works, not what the product could theoretically do. Average cycle time drops 30-50% compared to cold outbound.
- Higher average contract values - Users who have hit usage limits or explored premium features during their trial already know what they need. They're buying to unlock more capacity, not to test whether it works.
- Better win rates - Sales isn't convincing skeptics, they're helping power users formalize their purchase. Win rates on PQL-sourced deals typically run 40-60%, vs 15-25% for cold leads.
- Lower CAC - When your product does the qualification work, you spend less on content marketing and demand gen to nurture leads who will never convert.
For RevOps teams managing HubSpot at PLG companies, the challenge is getting product usage data into HubSpot so you can identify, score, and route PQLs without waiting on engineering.
Key Product Signals That Indicate a Qualified Lead
Not all product usage indicates buying intent. A user who logs in once and never returns isn't qualified. A user who completes onboarding, invites teammates, and uses your product daily for two weeks is. Effective PQL identification requires tracking specific behavioral signals that correlate with conversion.
Behavioral Indicators of Product Engagement
Activation milestones are the first signal. Activation means the user has experienced your product's core value - not just signed up. For a project management tool, that might be creating their first project and assigning a task. For an analytics platform, running their first report with real data.
Track these as boolean properties in HubSpot:
activation_completed(true/false)activation_date(date)days_to_activation(number - measures friction in your onboarding)
Feature adoption metrics show depth of engagement. Which features matter depends on your product, but generally:
- Core features - the 2-3 features that deliver your primary value prop
- Power features - advanced capabilities that only engaged users discover
- Collaboration features - anything involving multiple users or sharing
Store these as count properties:
feature_launches_count(number of times they've used your key feature)reports_created_total(or whatever your core action is)integrations_connected(shows investment in your ecosystem)
Engagement frequency separates casual users from habitual ones. Daily active users (DAUs) convert at much higher rates than weekly or monthly actives.
Properties to track:
last_active_date(date - critical for freshness)days_active_last_30_days(number - shows consistency)average_session_duration_minutes(number - depth of sessions)total_sessions_count(number - overall engagement)
Usage Milestones That Signal Buying Intent
Certain usage patterns indicate a user is approaching a buying decision:
Hitting limits - Free tier caps on storage, users, API calls, etc. When someone maxes out their free allotment, they've self-qualified. Track:
usage_percentage_of_limit(number - calculated from your product's usage data)limit_hit_date(date - when they first hit a cap)limit_type_hit(string - which limit: users, storage, API calls)
Exploring premium features - Users who click on locked features or visit your pricing page inside the app are researching whether to upgrade. Track these pageviews:
pricing_page_visits_count(number)premium_feature_clicks_count(number)last_pricing_page_visit(date)
Velocity of adoption - How quickly is usage ramping? A user who goes from 1 session in week 1 to 10 sessions in week 2 shows accelerating value recognition. Calculate:
usage_growth_percentage_last_7_days(number - week-over-week change)activation_to_power_user_days(number - time from activation to heavy usage threshold)
Team-Based Adoption Signals
B2B buying decisions involve multiple stakeholders. When one user invites teammates or creates shared workspaces, it signals organizational adoption - not just individual curiosity.
Track these company-level properties (synced to the HubSpot Company record):
total_active_users(number - count of users from this company's domain)users_added_last_7_days(number - growth signal)workspaces_created(number - shows multi-project usage)team_invite_count(number - viral adoption indicator)
And on contacts:
invited_teammates_count(number - champions who bring in colleagues)is_workspace_creator(boolean - identifies potential decision-makers)
A single contact with high individual usage is a possible PQL. A contact who has invited 3 teammates, all of whom are active, is a qualified account.
The Challenge: Getting Product Data Into HubSpot
Your product usage data lives in your application database, your product analytics tool (Mixpanel, Amplitude, PostHog, etc.), or both. HubSpot has no native access to this data. To build PQL scoring in HubSpot, you need to pipe product events and properties from where they're generated to your CRM.
The Data Warehouse Complexity Problem
The "enterprise" approach: build a data warehouse (Snowflake, BigQuery, Redshift), pipe all your product events into it using your analytics tool's export or a CDP like Segment, then sync specific tables from the warehouse to HubSpot using a reverse ETL tool like Hightouch or Census.
This works. It's also expensive and slow:
Cost:
- Data warehouse: $100-$500/mo for early-stage usage, scales with volume
- Reverse ETL tool: Hightouch starts at $350/mo, Census at $400/mo (plus per-row or per-destination fees at scale)
- CDP if needed: Segment starts at $120/mo, scales with MTU (monthly tracked users)
- Engineering time: 40-80 hours to set up, 5-10 hours/month maintenance
Timeline:
- 2-4 weeks to provision warehouse and get event data flowing
- 1-2 weeks to model data for reverse ETL sync
- 1 week to configure and test HubSpot sync
- Total: 4-8 weeks from decision to working PQL scoring
For a RevOps manager at a company doing $5M ARR, this requires convincing engineering leadership to prioritize warehouse setup over product work. At many companies, this never happens.
Why Traditional Integration Approaches Fall Short
Custom-built HubSpot API integration - You could skip the warehouse and write code that reads from your app database or analytics tool and pushes to HubSpot's API. Pros: full control, no reverse ETL cost. Cons: you own the code forever. HubSpot's API has rate limits (100 calls per 10 seconds on Professional tier, 150 on Enterprise), requires OAuth token management, and the integration breaks when either your product's data schema or HubSpot's API changes. Budget 60-100 engineering hours to build, 10-15 hours/month to maintain.
Manual CSV uploads - Export product data weekly, transform it in Google Sheets, import to HubSpot. This works for 10 users. At 100+ free users generating daily activity, it's untenable. Biggest problem: CSV imports aren't real-time, so your sales team is always calling users based on stale data.
Zapier / Make - No-code automation tools can trigger on some events (new user signup via webhook, form submission) but can't handle bulk syncing of product usage metrics or event counts. Zapier's data passthrough limits and task-based pricing make it impractical for syncing thousands of product events per day.
HubSpot Operations Hub custom code workflows - Operations Hub Professional ($800/mo) includes custom code actions in workflows. You can write JavaScript to call your API and update contact properties. This technically works but has severe limits:
- Workflows execute on a schedule (not real-time)
- Code actions timeout at 10 seconds
- Rate limits still apply
- You're embedding business logic in HubSpot's workflow UI, making it hard to version control or test
None of these approaches give RevOps teams real-time product data sync without engineering dependencies.
Real-Time Requirements for Modern Sales Teams
Batch syncs (daily or weekly updates) create a lag between user behavior and sales action. A user hits your free tier limit on Monday morning. With batch sync, sales doesn't see it until Tuesday. By then, the user has either figured out a workaround, churned, or signed up for a competitor.
Real-time sync means HubSpot updates within minutes of product events occurring. When a user completes activation, activation_completed flips to true and workflows trigger immediately. When they invite a teammate, invited_teammates_count increments and the account gets re-scored.
For PLG sales motions, speed matters. The best time to call a PQL is within 24 hours of qualification. After 48 hours, conversion rates drop 40% (data from Pocus 2024 PLG Benchmark Report).
How to Set Up PQL Tracking in HubSpot: Technical Implementation
Here's the actual setup process, assuming you have a way to get product data into HubSpot (covered in the next section).
Step 1: Define Your PQL Criteria
Before creating properties, document exactly what qualifies a lead. Interview your sales team and analyze your existing customers. Which behaviors during their trial or freemium usage predicted they would convert?
Example PQL definition for a project management tool:
- Completed activation (created first project, invited at least one teammate)
- Active at least 10 days in the last 30
- Created at least 5 tasks
- Has 2+ active users from their company domain
- Either: (a) invited 3+ teammates, OR (b) created 3+ projects, OR (c) used a premium feature
Document these criteria in a shared doc. You'll translate them to HubSpot properties and scoring logic.
Creating Custom Properties for Product Signals
In HubSpot, go to Settings > Properties. Create custom properties on the Contact object for individual user behavior:
Activation:
activation_completed- Single checkbox (Boolean)activation_date- Date pickerdays_to_activation- Number (calculated: today minus signup date when activation occurs)
Engagement frequency:
last_active_date- Date picker (updated every time the user logs in or performs an action)days_active_last_30- Number (count of unique days with activity in past 30 days)total_sessions_count- Number (cumulative sessions since signup)average_session_duration_minutes- Number (calculated from session start/end events)
Feature usage:
projects_created_total- Numbertasks_created_total- Numberintegrations_connected- Numberpremium_feature_clicks_count- Number
Team adoption:
invited_teammates_count- Numberis_workspace_creator- Single checkbox
Create Company-level properties for account-wide signals:
total_active_users- Number (count of contacts from this company domain withlast_active_datein last 7 days)users_added_last_7_days- Numbercompany_activation_date- Date picker (earliest activation date among all contacts)
Set the "Group name" for all product-related properties to "Product Usage" so they appear together in contact records.
HubSpot Property Setup Examples
When creating last_active_date, set:
- Object type: Contact
- Group: Product Usage
- Label: Last Active Date
- Description: Last date this user performed any action in the product. Updated in real-time by product usage sync.
- Field type: Date picker
- This property is used in: (leave blank initially, add later as you build workflows)
For days_active_last_30:
- Object type: Contact
- Group: Product Usage
- Label: Days Active (Last 30 Days)
- Description: Count of unique days with product activity in the past 30 days. Used for engagement scoring.
- Field type: Number
For boolean properties like activation_completed:
- Field type: Single checkbox
- If checked, the contact has completed activation (created first project + invited teammate)
Use consistent naming: lowercase with underscores, past tense for date properties (activation_date, last_active_date), present tense for counts (tasks_created_total).
Building Your PQL Scoring Model
HubSpot's built-in lead scoring property works, but calculated properties give you more control. Create a calculated property pql_score that weighs multiple product signals.
Go to Settings > Properties > Create property:
- Object: Contact
- Label: PQL Score
- Field type: Calculation
- Calculation type: Custom equation
Example scoring formula:
(if days_active_last_30 >= 10 then 25 else 0) +
(if activation_completed = true then 20 else 0) +
(projects_created_total * 3) +
(invited_teammates_count * 5) +
(if integrations_connected >= 1 then 15 else 0) +
(if premium_feature_clicks_count >= 3 then 10 else 0)
This formula gives:
- 25 points for consistent engagement (10+ active days)
- 20 points for completing activation
- 3 points per project created
- 5 points per teammate invited
- 15 points for connecting at least one integration
- 10 points for exploring premium features at least 3 times
A score of 60+ indicates a strong PQL. 40-59 is warm. Under 40 is not yet qualified.
You can't use if statements in HubSpot's calculated properties directly - the syntax above is pseudocode. The actual implementation uses separate calculated properties:
Create individual score component properties:
pql_score_engagement:
- Calculation type: Conditional
- If
days_active_last_30 >= 10, then25, else0
pql_score_activation:
- Calculation type: Conditional
- If
activation_completed = true, then20, else0
pql_score_projects:
- Calculation type: Custom equation
projects_created_total * 3
pql_score_invites:
- Calculation type: Custom equation
invited_teammates_count * 5
pql_score_integrations:
- Calculation type: Conditional
- If
integrations_connected >= 1, then15, else0
pql_score_premium_interest:
- Calculation type: Conditional
- If
premium_feature_clicks_count >= 3, then10, else0
Then create the final score:
pql_score:
- Calculation type: Custom equation
pql_score_engagement + pql_score_activation + pql_score_projects + pql_score_invites + pql_score_integrations + pql_score_premium_interest
All calculated properties update automatically when their inputs change - so when invited_teammates_count increments, pql_score recalculates immediately.
Automating PQL Identification with Workflows
Create a workflow that updates the contact's Lifecycle Stage to "Product Qualified Lead" when their score crosses your threshold.
Workflows > Create workflow > Contact-based > Start from scratch
Enrollment trigger:
pql_scoreis greater than or equal to60
Re-enrollment: Yes, every time criteria is met (in case score drops and rises again)
Actions:
- Set property value:
Lifecycle stage= "Product Qualified Lead" - Set property value:
pql_qualified_date= "Date of step" (create this date property to track when they became a PQL) - Create task: Assigned to contact owner, task title "New PQL: {contact name}", due date: tomorrow, description includes
pql_score,days_active_last_30,projects_created_total,invited_teammates_count - Send internal notification email to sales manager with PQL details
Optional sophistication: create a second workflow for PQL tier assignment. Add a custom property pql_tier (dropdown: Hot, Warm, Cold):
Workflow: PQL Tier Assignment
Branch logic:
- If
pql_score >= 80: Setpql_tier= "Hot", create high-priority task - Else if
pql_score >= 60: Setpql_tier= "Warm", create standard task - Else if
pql_score >= 40: Setpql_tier= "Cold", add to nurture sequence
This lets sales reps prioritize their outreach queue.
Building a PQL Scoring System in HubSpot
The calculated property approach above works for simple models. As you refine your PQL criteria, you'll want more sophisticated scoring.
Designing Your PQL Score Formula
Effective PQL scoring weighs signals by their correlation with conversion, not just by gut feel. To calibrate your model:
- Export your customer list - All contacts who converted in the last 6 months
- Pull their product usage data at the time they converted - What were their
days_active_last_30,projects_created_total, etc. when they signed the deal? - Identify the median values for each metric - Example: your customers had a median of 15 active days, 8 projects created, 2 teammates invited
- Set point values proportional to predictive power - Run a simple logistic regression (Google Sheets has plugins) or use judgment: which signals show up in 80%+ of conversions?
Example findings from a real analysis:
- 93% of customers had invited at least 1 teammate (strong signal - weight it high)
- 78% had created 5+ projects (moderately strong)
- 64% had connected an integration (moderate)
- 51% had clicked on premium features (weak predictor - maybe they were just curious)
Adjust your point values accordingly. In this case, invited_teammates_count should have the highest per-unit weight.
Implementing Multi-Signal Scoring
Beyond static point values, consider:
Recency weighting - A user who was active 29 days ago is colder than one active yesterday, even if both meet the "10 active days in last 30" threshold. Create a decay factor:
engagement_recency_score:
- Calculation:
if last_active_date is within 3 days then 10 else if last_active_date is within 7 days then 7 else if last_active_date is within 14 days then 4 else 0
Add this to your total pql_score.
Velocity bonuses - Users whose activity is accelerating are hotter than those plateauing. Create:
usage_growth_last_7_days (number) - percentage change in activity week-over-week
Then add a velocity bonus:
pql_score_velocity:
- Calculation:
if usage_growth_last_7_days > 50 then 15 else if usage_growth_last_7_days > 20 then 8 else 0
Account-level signals - If multiple users from one company are active, that's a stronger signal than a lone user. Create a company score that rolls up:
company_pql_score (on Company object):
- Sum of
pql_scorefor all associated contacts, divided by number of contacts
Or simply:
if total_active_users >= 3 then 20 else if total_active_users >= 2 then 10 else 0
Sync this back to contacts as company_engagement_bonus and add to individual pql_score.
PQL Tier Segmentation Strategy
Don't treat all PQLs equally. Segment into tiers based on score and urgency:
Hot PQLs (80+ points):
- High product engagement + recent activity + team adoption or limit-hit
- Sales action: Immediate outreach (same day), personalized email referencing specific usage, phone call within 24 hours
- SLA: First touch within 24 hours
Warm PQLs (60-79 points):
- Moderate engagement, activated but not yet power users
- Sales action: Automated email sequence with value-based messaging, followed by manual outreach after 2-3 days
- SLA: First touch within 72 hours
Cold PQLs (40-59 points):
- Met minimum threshold but low urgency signals
- Sales action: Add to nurture drip, provide self-serve resources, check back in 14 days if engagement increases
- No SLA - marketing-driven
Create a pql_tier property and automate tier assignment in a workflow. Filter your sales views by tier.
Operationalizing PQLs for Your Sales Team
Scoring is pointless if sales doesn't act on it. Make PQL data actionable.
Setting Up PQL Views and Alerts
Create a saved view in HubSpot: Contacts > All Contacts > Save view
"Hot PQLs - Action Required" view:
Filters:
- Lifecycle stage = "Product Qualified Lead"
pql_tier= "Hot"pql_qualified_dateis within last 3 days- Contact owner = (current user) - so reps see only their PQLs
Columns to display:
- Name
- Company
- PQL Score
- Last Active Date
- Days Active (Last 30)
- Projects Created
- Invited Teammates
- PQL Qualified Date
Sort by pql_score descending.
Reps bookmark this view and check it first thing each morning.
Workflow: Daily PQL Digest Email
Send sales reps a daily summary of their new PQLs:
Enrollment trigger: Contact created or updated in last 24 hours, where pql_tier = "Hot" or "Warm"
Action: Send internal email to contact owner
Email content:
Subject: You have {number of enrolled contacts} new PQLs today
{contact cards with properties: name, company, pql_score, last_active_date, days_active_last_30, projects_created_total}
[View all your PQLs in HubSpot] (link to saved view)
Slack notifications for hot PQLs:
Use HubSpot's Slack integration or a webhook to post to a #pql-alerts channel whenever pql_tier = "Hot" is set:
New Hot PQL: Sarah Chen at Acme Corp
PQL Score: 87
Last active: Today
15 active days | 12 projects | 3 teammates invited
[View in HubSpot]
Sales managers monitor this channel to ensure SLAs are met.
Creating PQL-Driven Workflows
Automated nurture for warm PQLs:
Workflow: Warm PQL Nurture
Enrollment: pql_tier = "Warm" AND pql_qualified_date is within last 1 day
Sequence:
- Day 0: Send email "You're getting the most out of [Product]" - highlights features they're using, includes case study of similar company
- Day 2: Send email with tips for their use case - based on which features they've engaged with
- Day 4: Create task for sales rep to manually reach out
- Day 7: If no reply, send email with calendar link to book demo
Exit criteria: If pql_tier changes to "Hot" or if contact owner engages (task completed, email replied), exit and trigger hot PQL workflow instead.
Re-engagement for PQLs who go cold:
Workflow: PQL Re-engagement
Enrollment: Lifecycle stage = "Product Qualified Lead" AND last_active_date is more than 14 days ago
Actions:
- Send email "We miss you in [Product]" - highlight new features or usage tips
- Wait 7 days
- If still no activity (
last_active_datestill > 14 days ago), changeLifecycle stageback to "Lead" andpql_tierto empty
Sales Enablement for Product-Led Conversations
Equip reps with context. When calling a PQL, they should reference specific product usage.
Custom HubSpot card on contact record:
Use the HubSpot CRM Development Tools to create a custom card that displays product activity timeline:
- List of recent actions (fetched via API from your product or analytics tool)
- "Sarah created 'Q1 Planning' project 2 days ago"
- "Sarah invited teammate john@acmecorp.com 5 days ago"
- "Sarah viewed Pricing page yesterday"
Reps glance at this before calling. Opens the conversation with "I see you've been using [Product] to manage Q1 planning - how's that going?"
PQL-specific talk track:
Train reps on the difference between cold calling and PQL calling:
❌ Cold call: "Hi, I'm calling to tell you about our product..." ✅ PQL call: "Hi Sarah, I noticed you and your team have been using [Product] to manage projects - I wanted to check in and see how it's working for you. I see you created 12 projects in the last two weeks, which is awesome."
The goal is helping them get more value from what they're already doing, not convincing them the product works.
Battle cards for common PQL profiles:
Create internal docs for typical PQL personas:
"The Solo Power User" - high individual usage, hasn't invited teammates yet
- Approach: Help them see team collaboration value, offer to co-sell to their manager
- Objection likely: "I'm happy using the free tier alone"
"The Team Pioneer" - invited teammates, moderate usage across 2-3 users
- Approach: Focus on team productivity gains, emphasize what unlocks with paid plan
- Objection likely: "We're still figuring out our workflow"
"The Limit-Hitter" - maxed out free tier, exploring pricing
- Approach: Easy win, focus on removing blockers, fast deal cycle
- Objection likely: Budget approval needed
Reps select the right playbook based on the PQL's profile in HubSpot.
How Modern RevOps Teams Sync Product Data to HubSpot
You've seen what to do with product data in HubSpot. Now, how to get it there without a 3-month engineering project.
The No-Engineering-Required Approach
Zoody syncs product usage data to HubSpot in real time without a data warehouse or reverse ETL pipeline. Built specifically for RevOps teams who need product signals on their HubSpot records but can't wait for engineering to build infrastructure.
How it works:
- Connect Zoody to your HubSpot account (OAuth, 2 minutes)
- Add Zoody's tracking SDK to your product (one line of code, or use a CDP like Segment if you already have one)
- Define which events and properties to sync (in Zoody's UI, no code)
- Events flow from your product → Zoody → HubSpot as custom properties on contacts and companies
Example: When a user creates a project in your app, your code sends:
zoody.track('project_created', {
userId: 'user_123',
email: 'sarah@acmecorp.com',
properties: {
project_name: 'Q1 Planning',
project_id: 'proj_456'
}
});
Zoody automatically:
- Creates or updates the HubSpot contact with email
sarah@acmecorp.com - Increments the
projects_created_totalproperty - Updates
last_active_dateto today - Logs the event on the contact's timeline
You configure the mapping once ("project_created events should increment projects_created_total"), and all future events sync automatically.
Timeline: Setup in under an hour. Product data flowing to HubSpot same day.
Cost: $149/mo Pro plan, $249/mo Growth plan (flat rate, unlimited contacts, unlimited events). Free sandbox for testing.
Tradeoffs: Zoody only works with HubSpot (not Salesforce or other CRMs). It doesn't replace your product analytics tool (Amplitude, Mixpanel, PostHog) - it's purpose-built for syncing usage data to CRM. If you need to sync data to multiple destinations or run complex SQL transformations, you need reverse ETL.
Real-Time Sync vs Batch Processing
Batch sync (daily or hourly) means there's a lag between when a user does something in your product and when HubSpot updates.
Impact on conversions:
- Real-time: User hits free tier limit at 10am. HubSpot updates within 5 minutes. Rep calls at 10:30am while the pain is fresh. User converts 40% of the time.
- Daily batch: User hits limit at 10am Monday. HubSpot updates overnight. Rep calls 10am Tuesday. User either found a workaround, forgot about it, or already signed up with a competitor. Conversion drops to 18%.
Real-time sync compounds over every PQL signal. When a user invites their third teammate (crossing your PQL threshold), you want sales alerted immediately - not tomorrow.
RevOps teams using real-time product sync report 25-35% higher PQL-to-customer conversion rates compared to daily batch syncs, primarily due to faster sales response times.
Getting Started with Product Data Sync
If you're not ready to commit to a tool, start with:
Option 1: Webhook from your product to HubSpot
When key events occur (user activation, limit hit, teammate invited), send a POST request from your backend to HubSpot's Contacts API:
POST https://api.hubapi.com/crm/v3/objects/contacts/{contactId}
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json
{
"properties": {
"activation_completed": true,
"activation_date": "2026-04-27",
"projects_created_total": 5
}
}
This works for event-driven signals. It doesn't handle aggregate metrics (like days_active_last_30) well unless you pre-calculate them in your app.
Option 2: Nightly batch script
If you can't add real-time webhooks, write a script that runs nightly:
- Query your database for all users active today
- Calculate their usage metrics (sessions, actions, etc.)
- Bulk update HubSpot via the Batch API
Example pseudocode:
users = db.query("SELECT email, sessions_count, last_login FROM users WHERE last_login > NOW() - INTERVAL 30 DAY")
hubspot_updates = []
for user in users:
hubspot_updates.append({
"email": user.email,
"properties": {
"total_sessions_count": user.sessions_count,
"last_active_date": user.last_login
}
})
hubspot.batch_update(hubspot_updates)
Use HubSpot's batch endpoints to avoid rate limits. On Professional tier (100 calls per 10 seconds), you can update ~8,000 contacts per hour if batching 10 records per call.
Option 3: Use an existing tool you already have
If you use Segment as a CDP, you can send events to Segment and use Segment's HubSpot destination. Limitation: Segment's HubSpot integration only syncs identify() calls (user properties), not track() events (event counts). You'd need to pre-aggregate event counts as user properties before sending to Segment.
If you use Hightouch or Census for other data syncs, add a HubSpot sync for product usage. You'll need to model the data in your warehouse first (aggregate events into metrics per user), then sync those aggregated tables.
The right approach depends on your existing stack and how fast you need to move.
Measuring and Optimizing Your PQL Program
Once PQL tracking is live, measure what's working and iterate.
Essential PQL Performance Metrics
PQL conversion rate - Percentage of PQLs who become paying customers.
Calculate: (PQLs who converted to Customer) / (Total PQLs created) over a time period.
Industry benchmarks: 25-40% for B2B SaaS PLG companies (OpenView 2024 PLG Benchmark Report). If you're under 20%, your PQL criteria are too loose or sales isn't following up effectively.
Track in HubSpot: Create a deal report filtered to deals associated with contacts where Lifecycle stage = "Product Qualified Lead" at deal creation. Measure close rate.
Time to conversion - Days from PQL qualification to closed deal.
Create a calculated property on Deal:
days_pql_to_closed:
- Custom equation:
Close dateminuspql_qualified_date(from associated contact)
Average for PLG companies: 14-21 days. If yours is 30+, investigate: Are reps slow to follow up? Is your pricing unclear? Are PQLs not actually ready to buy?
PQL-sourced revenue - ARR generated from deals where the contact was a PQL.
In HubSpot reporting, create a custom report:
- Object: Deals (closed won)
- Filter: Associated contact's
Lifecycle stageincludes "Product Qualified Lead" - Metrics: Sum of
Amount - Group by:
Close date(monthly)
Track this as a percentage of total new ARR. Healthy PLG companies see 40-60% of new revenue from PQL-sourced deals.
PQL velocity - Number of new PQLs created per week/month.
Dashboard chart:
- Object: Contacts
- Filter:
pql_qualified_dateis known - Metric: Count of contacts
- Group by:
pql_qualified_date(weekly or monthly)
Upward trend = your product is driving more qualified leads over time. Flat or declining = activation or engagement problems.
Response time to PQL - How long until sales makes first contact after PQL qualification.
Create a calculated property:
hours_to_first_contact:
- Custom equation: First task completion date (or first email sent) minus
pql_qualified_date, converted to hours
Target: Under 24 hours for hot PQLs, under 72 hours for warm PQLs. Every 24-hour delay reduces conversion by ~15%.
Optimizing Your PQL Criteria Over Time
Your initial PQL definition is a hypothesis. Test and refine it.
Analyze which signals matter most:
Export all contacts where pql_qualified_date is in the last 90 days. Tag them:
- Converted to customer: Yes/No
- Pull their property values at the time of PQL qualification
Run a correlation analysis (or just eyeball it in a spreadsheet):
- Of PQLs who converted, what was the median
days_active_last_30? What about those who didn't convert? - Which signals show the biggest difference between converters and non-converters?
Example findings:
- Converted PQLs had median
invited_teammates_countof 2. Non-converted had 0. → Increase weight on this signal. - Both groups had similar
projects_created_total(median 5 vs 4). → This signal doesn't predict conversion as strongly, reduce its weight.
Adjust your pql_score formula weights and re-deploy. Track if conversion rate improves.
A/B test PQL thresholds:
Run two workflows with different score cutoffs:
- Workflow A: Qualify at
pql_score >= 60 - Workflow B: Qualify at
pql_score >= 70
Randomly assign contacts to each workflow (use a randomizer property). Measure conversion rate for each cohort over 60 days.
Higher threshold = fewer PQLs but higher conversion. Lower threshold = more PQLs but some waste sales time. Find the optimal balance.
Segment analysis by industry/use case:
PQL criteria may differ by segment. Create custom PQL scores for different verticals:
pql_score_agency(weights team invites heavily, agencies are multi-user)pql_score_solopreneur(weights individual power usage, ignores team signals)
Use a branch workflow that calculates the relevant score based on company_industry or another segmentation property.
Attribution and Revenue Reporting
Create a PQL attribution report to prove the program's value:
Custom report in HubSpot:
- Object: Deals
- Filter:
Deal stage= "Closed Won" - Group by:
Original source(or create a custom propertypql_attributed= true if the contact was ever a PQL) - Metrics: Count of deals, Sum of
Amount
Compare PQL-attributed revenue vs non-PQL (MQL, outbound, etc.). Show leadership that PQLs drive X% of revenue at Y% higher close rate.
Track PQL influence on deal velocity:
For deals associated with PQLs, compare average days in pipeline vs non-PQL deals. Typically 30-50% shorter for PQL deals.
Report this to justify investing in better product data sync and PQL tracking tools.
FAQ
How to determine if a lead is qualified?
A lead is qualified when they meet your defined criteria for either sales readiness (SQL) or product engagement (PQL). For PQLs specifically, qualification means the lead has used your product in ways that correlate with conversion - activated their account, engaged with core features regularly, and demonstrated buying signals like inviting teammates or hitting free tier limits. Set a scoring threshold (typically 60+ points in a weighted model) based on your historical conversion data, and automatically qualify leads when they cross it.
How to identify quality leads in HubSpot?
Use a combination of custom product usage properties and calculated scoring properties. Create properties like days_active_last_30, activation_completed, projects_created_total, and invited_teammates_count that track meaningful product engagement. Build a pql_score calculated property that weights these signals based on their correlation with conversion. Set up workflows that automatically tag contacts as PQLs when their score exceeds your threshold and create tasks for sales to follow up within 24 hours.
What is your approach to identifying and qualifying leads?
Track product usage data in real time, sync it to HubSpot as custom properties on contact and company records, then score leads based on behavioral signals that predict conversion. Activation milestones (completing onboarding, achieving first value), engagement frequency (10+ active days in 30 days), feature adoption depth (using core features consistently), and team collaboration signals (inviting teammates) are weighted in a scoring formula. Leads above 60 points become PQLs and trigger automated sales workflows. The criteria are refined quarterly based on actual conversion data.
How do I track product usage data in HubSpot?
The three main approaches: (1) Use a purpose-built sync tool like Zoody that sends product events to HubSpot in real time without requiring a data warehouse - fastest setup, RevOps-friendly, $149/mo. (2) Build a reverse ETL pipeline from your data warehouse using Hightouch or Census - most flexible, requires warehouse setup and engineering work, $350-$800/mo plus warehouse costs. (3) Write custom code using HubSpot's API to push data from your product or analytics tool - full control, highest maintenance burden, free but significant engineering time. For most RevOps teams at PLG companies, option 1 removes engineering blockers and ships in under a day.
What's the difference between a PQL and MQL?
An MQL (Marketing Qualified Lead) is qualified based on demographic fit and engagement with marketing content - downloaded an ebook, attended a webinar, visited your pricing page multiple times. They've shown interest but haven't used your product. A PQL (Product Qualified Lead) has actually used your product and experienced its value through meaningful engagement - completed activation, used core features regularly, often invited teammates. PQLs convert 3-5x better than MQLs because they've already proven the product solves their problem. In PLG companies, PQLs are the primary pipeline source, and MQLs feed top-of-funnel awareness.
Be one of the first 10
Founding testers shape what Zoody becomes. Free forever once you're in, every paid feature unlocked, direct Slack with the founder.