Daily PQL alerts from Mixpanel into HubSpot and Slack

Every weekday at 8am, surface the freshest product-qualified leads in Mixpanel, tag them in HubSpot, and post a ranked digest to your sales team in Slack.

Agentic Task
MixpanelHubSpotSlack BotSalesProductLead EnrichmentDaily DigestsNotifications & Alerts

Every weekday at 8am in my timezone, run an agent that finds my freshest product-qualified leads in Mixpanel, tags them in HubSpot, and posts a ranked digest to a sales channel in Slack. The goal is that sales sees the hottest new opportunities every morning, with no manual triage from me.

Step 1, find candidates in Mixpanel. Use Query Segmentation against my Mixpanel project for the last 7 days, one call per high-intent event I care about. Default signals: invited a teammate, viewed the pricing or upgrade page, used a paid-tier feature N or more times, and completed the activation funnel. Make the event names and per-event thresholds easy to edit at the top of the workflow. Then use Query Profiles to pull the user profiles for any distinct_ids that crossed at least one threshold, so we have their email, display name, company, and any plan or workspace properties.

Step 2, dedupe against last week. Skip anyone who was already a PQL in the previous run (track this with a small state file or by reading the HubSpot lifecycle stage). We only want net-new PQLs in today's digest.

Step 3, match and update HubSpot. For each qualifying user, call Search Contacts in HubSpot by email to find their contact record. If there is no match, drop them from the contact-update step and add them to a separate 'no HubSpot match' section in the Slack digest so the team can decide whether to add them manually. If there is a match, call Search Deals to check whether the contact is already associated with an open deal. If they are, skip them entirely. Otherwise, call Update Contact to set lifecycle stage to 'Product Qualified Lead' and write any custom PQL properties I configure (PQL score, top signal, signal count, qualification date). Never downgrade a contact whose lifecycle stage is already Product Qualified Lead or further down the funnel.

Step 4, attach context. For each contact we updated, call Create Note in HubSpot, associated with that contact, summarizing which Mixpanel events tripped the threshold, the timestamps of the most recent hits, and a one-line 'why now' talking point a rep can open the call with. Keep notes short and scannable, not essays.

Step 5, post the digest. Use Slack Bot's Send a Message to post a single ranked message to a channel I specify (default #sales-pqls). Include the top 5 to 10 new PQLs ranked by signal strength, each with the user's name and company, the signals they fired, and a direct link to their HubSpot contact record. Add a short footer with the total count of new PQLs and any 'no HubSpot match' users. Use Slack mrkdwn formatting and one message per run, not a thread of many.

Safety rules: never downgrade an existing PQL or anyone further down the lifecycle, never touch contacts in an open deal, and if Mixpanel returns no qualifying users, post a short 'no new PQLs today' note instead of staying silent so the team knows the workflow ran.

Additional information

What does this prompt do?
  • Each weekday morning, pulls the freshest signs of buying intent from Mixpanel: teammate invites, pricing or upgrade page visits, paid-tier feature usage, and completed activation funnels in the last 7 days.
  • Tags every newly qualified user as a Product Qualified Lead in HubSpot and attaches a note explaining which events tripped the threshold, when they fired, and a one-line opener for the rep.
  • Posts a single ranked digest in Slack with the top new PQLs, the signals each one fired, and direct links to their HubSpot records, so sales sees the freshest opportunities every morning.
  • Skips users with no HubSpot match, anyone already in an open deal, and never downgrades a contact that was already a PQL last week.
What do I need to use this?
  • A Mixpanel project tracking the events you treat as high-intent signals (teammate invites, pricing page views, paid-feature usage, activation milestones).
  • A HubSpot account where your sales team works deals, with permission to read contacts and deals, update contacts, and create notes.
  • A Slack workspace and the channel where your sales team should see the morning digest.
How can I customize it?
  • Change which Mixpanel events count as high-intent and how many times each one has to fire before a user qualifies.
  • Shift the cadence and send time, for example twice a day, only Tuesday through Thursday, or earlier than 8am to land before standup.
  • Pick the Slack channel the digest posts to and cap the list at the top 5, top 10, or every fresh PQL from the last day.

Frequently asked questions

What exactly counts as a product-qualified lead here?
Whatever you decide. You hand the agent a list of Mixpanel events and thresholds, for example 'invited at least one teammate', 'viewed the pricing page twice', 'used the export feature five or more times', or 'completed the activation funnel'. Anyone in the last 7 days who crosses one of those bars and was not already a PQL last week shows up in the morning digest.
Will this overwrite leads my team is already working?
No. The agent skips any contact whose lifecycle stage is already Product Qualified Lead or further down the funnel, and it skips anyone with an open deal in HubSpot. It will never push a contact backwards. You get a clean stream of net-new opportunities.
What happens if a hot user does not exist in HubSpot yet?
They are skipped during the contact update step, since there is nothing to tag. You can extend the workflow to create new contacts for unmatched users, or call them out in a separate section of the Slack digest so your team knows to add them manually.
Does this work with HubSpot Free?
Yes. Lifecycle stage, contact notes, and deals are standard HubSpot objects available on every tier. Custom properties for the PQL score or signal list need a paid plan only if you choose to add them; the default flow works on Free.
Can I send the digest somewhere other than Slack?
Yes. The agent is easy to retarget. Swap Slack for Microsoft Teams, an email to the sales channel, or a row in a Google Sheet, and the rest of the workflow keeps running the same way.

Stop letting hot product signals die inside Mixpanel.

Connect Mixpanel, HubSpot, and Slack once, and Geni hands sales the freshest product-qualified leads every weekday at 8am.