Founding tester program10 spotsFree forever for beta usersEvery paid feature unlockedDirect Slack with the founderApply now
Founding tester program10 spotsFree forever for beta usersEvery paid feature unlockedDirect Slack with the founderApply now
Founding tester program10 spotsFree forever for beta usersEvery paid feature unlockedDirect Slack with the founderApply now
Founding tester program10 spotsFree forever for beta usersEvery paid feature unlockedDirect Slack with the founderApply now

PLG sales handoff in HubSpot

Automate PLG sales handoffIn HubSpot, in real time.

The moment a free user crosses the SQL line, sales should know. Not at tomorrow's pipeline review. Not in a CSV someone exported on Friday. Within a minute, in Slack, with the context that makes the call worth taking.

The problem with manual handoff

In most PLG companies, the handoff from product to sales runs on spreadsheets. RevOps pulls a weekly export of users who hit some activity threshold. The list goes to an SDR who triages it manually. By the time an AE reaches out, the user has either already converted on their own or moved on.

The reason this persists is that the underlying signals (activation, key events, account-level usage) live in the product analytics tool, not in HubSpot. So the handoff workflow can't use them. Sales ops ends up building the workflow on the wrong inputs (MQL form-fills, email opens) and the model degrades quietly.

The fix isn't to score harder. It's to get the right signals onto the contact record so the handoff workflow can actually trigger on them. Once that's in place, the workflow itself is straightforward: promote lifecycle stage, assign owner, alert in Slack.

What a working handoff looks like

Four moving parts. Each one is a HubSpot artifact you can audit.

Clear SQL definition

A short list of conditions on contact and company properties. Written in plain English, not buried in a workflow. Everyone (sales, marketing, RevOps) can recite it.

One enrollment trigger

A HubSpot workflow that enrolls when those conditions are met. Sets lifecycle stage to SQL, assigns the right owner, and stamps a handoff timestamp.

A Slack alert with context

The alert names the contact, the company, the trigger that fired, and the most recent product activity. The AE clicks once and lands in the HubSpot record ready to call.

A return-to-marketing safety net

If the AE doesn't engage in N days OR usage drops, the contact returns to MQL and the AE assignment clears. Pipeline stays clean, AE trust stays intact.

Concrete setup walkthrough

Real HubSpot property names, real workflow logic, copy-paste ready.

  1. 1

    Define SQL conditions in plain language

    Write the SQL definition as a single sentence everyone signs off on. Example: 'A free user becomes an SQL when zo_activation_status = activated AND zo_pql_score >= 50 AND the company is not on a personal email domain AND zo_company_active_users >= 2.' If anyone on the team can't recite this, simplify it.

  2. 2

    Create the supporting HubSpot properties

    Add zo_activation_status (single-line text), zo_pql_score (number), zo_last_active_at (datetime), zo_company_active_users (number on the company object), and zo_handoff_at (datetime, set by the workflow). Put them all in a 'Product activity' property group so they're easy to find.

  3. 3

    Wire Zoody to populate the inputs

    In Zoody, map activation events to zo_activation_status, configure the zo_pql_score formula, and set up zo_company_active_users as a company-level rollup of distinct active contacts in the last 30 days. Within minutes the properties start updating in real time.

  4. 4

    Build the SQL handoff workflow in HubSpot

    Create a contact-based workflow with enrollment trigger: zo_activation_status = activated AND zo_pql_score >= 50 AND email domain is not in the personal-domain list AND associated company zo_company_active_users >= 2. Actions: set Lifecycle stage to SQL, assign HubSpot owner using your routing rule, set zo_handoff_at to current timestamp, send a Slack notification using HubSpot's Slack integration.

  5. 5

    Build the return-to-marketing workflow

    Second workflow with enrollment trigger: Lifecycle stage = SQL AND (zo_handoff_at >= 14 days ago AND last activity by owner = none) OR zo_pql_score < 30. Actions: clear HubSpot owner, set Lifecycle stage to MQL, send a Slack notification to the marketing channel so they pick the lead back up. This one keeps your handoff trustworthy.

Worked example: Acme

A fictional B2B SaaS, $18k ACV, three AEs covering inbound PLG.

Acme defines an SQL as a contact who meets all of these:

  • -zo_activation_status = activated
  • -zo_pql_score >= 50
  • -Company zo_company_active_users >= 2 (at least one teammate also active)
  • -Email domain not in personal-email blocklist

The workflow assigns owner using a round-robin among 3 AEs, sets zo_handoff_at to now, and fires a Slack message to the AE's DM and the #pql-handoff channel:

New SQL: Sarah Chen at FinPilot (~85 employees)
Score 65 - activated 3 days ago, invited 2 teammates, 14 key actions this week
Owner: @maria - first call due within 2 hours
Open in HubSpot: hubspot.com/contact/12345

Result after 90 days: Acme's median time from SQL handoff to first AE outreach dropped from 11 hours to 38 minutes. Closed-won rate on PLG-sourced SQLs went from 14% to 22% because AEs reach hot leads while they're still hot.

What this enables

Real-time Slack alerts

Slack notification to the assigned AE's DM the moment the handoff fires. Includes the context the AE needs to make the first call worth taking.

Round-robin AE assignment

HubSpot owner rotates across the AE pool using its native rotation tool. Territory rules optional. Handoff stamps the assignment so reporting holds up later.

Handoff SLA reporting

Time from zo_handoff_at to first AE activity becomes a HubSpot report. SLA breaches surface in the weekly RevOps review without anyone running a manual analysis.

Frequently asked questions

When should a free user become an SQL?+

When their behavior matches what your closed-won users did before they bought. That's the only honest answer. In practice, most teams converge on a combination of: completed activation, hit a usage threshold (like 3+ key actions in a week), and crossed an account-level signal (multiple users from the same domain, visited pricing, or hit a usage limit). The exact mix varies by ACV.

Who owns the PLG handoff process - Marketing, Sales, or RevOps?+

RevOps owns the system. Marketing owns the upstream qualification criteria. Sales owns the response time and outcome. The system needs to be transparent enough that all three can audit it, which is why putting the underlying signals on HubSpot properties (instead of hiding them in a black-box scoring algorithm) is non-negotiable.

Should the handoff be automatic or human-reviewed?+

Automatic for low and mid ACV. Human-reviewed for high ACV. Below ~$15k ACV, the cost of an SDR or AE manually qualifying every PQL exceeds the cost of a few false positives, so let the workflow auto-assign. Above $15k ACV, route to a queue for SDR review before AE assignment.

How do I prevent the SDR/AE from seeing dead leads?+

Two ways. First, exclude personal email domains (gmail, hotmail, etc.) from auto-handoff. Second, require an account-level signal (more than one user from the same company, OR a meaningful firmographic match). Both go in the workflow as enrollment criteria, not in the score itself.

What happens if a contact gets handed off, then goes cold?+

Build a return-to-marketing workflow. If the assigned AE doesn't engage within X days OR the contact's product activity drops below threshold within Y days, demote back to MQL and remove the AE assignment. Otherwise the AE pipeline fills with stale leads and trust in the handoff erodes.

Get the handoff workflow live

Beta access is hands-on. We pair on the SQL definition, the workflow, and the Slack alert. By the end of week one, sales is getting alerts instead of CSVs.