Score Supabase waitlist signups and alert sales in Slack
When someone joins your waitlist, research their company, score them against your ICP, save the contact to HubSpot, and post a one-paragraph summary in Slack.
Trigger this workflow whenever a new row is inserted in my Supabase waitlist table. I will set up a Supabase database webhook (Project > Database > Webhooks) that fires on INSERT and posts the payload to this workflow's incoming webhook URL. The trigger type is a standard incoming webhook.
When a new signup lands, do this end to end:
1) Read the incoming Supabase webhook payload. The payload includes the new row under a record field along with the table name and event type. To make sure you have the freshest data and the full column set, call Supabase Get Row on the waitlist table filtered by the row id from the payload. Pull every column so you can use anything available (email, name, source, referral, signup_reason, etc.) in the downstream steps.
2) Extract the company domain from the email. If the domain is a common personal address (gmail.com, yahoo.com, outlook.com, hotmail.com, icloud.com, proton.me, aol.com, live.com, msn.com), skip the company research step entirely. Tag the lead as 'personal email' in the Slack alert and the HubSpot note so the rep knows there is no enrichment to read.
3) For business domains, do web research and build a short company profile covering: company name and a one-line description of what they do, industry and a rough employee headcount band, tech stack and what they sell into, and anything notable from the last 90 days (funding rounds, product launches, hiring spikes, leadership moves).
4) Score the lead against this ICP and pick exactly one tier. ICP: B2B SaaS, 20 to 500 employees, technical buyer (developer tools, internal platforms, AI products). Tiers: 'hot' means clean ICP match plus recent momentum and ready for outbound today; 'warm' means partial fit, worth a single touch; 'cold' means out of ICP or not enough signal, queue but no rush. If the email was personal, default to 'cold' unless the signup_reason text suggests otherwise.
5) Create the lead in HubSpot using Create Contact. Map fields like this: email is the signup email; firstname and lastname come from the row if present, otherwise leave blank; company is the researched company name; website is the company domain; lifecyclestage is 'salesqualifiedlead' for hot, 'marketingqualifiedlead' for warm, and 'lead' for cold. Put the full research summary (one paragraph plus the score and the reasoning) into a notes property or the description field so the rep sees the context inside HubSpot too. Capture the new HubSpot contact id so you can link to the record from Slack.
6) Send a Slack Bot message to the #signups channel using Send a Message. The reader is a salesperson scanning on mobile who needs to decide in under ten seconds whether to fast-track outreach. Format the message exactly like this: lead with the score emoji (🔥 hot, 🌤️ warm, ❄️ cold), then the person's name and company on the same line. Underneath, write one tight paragraph of three or four sentences covering who they are, what the company does, and why they matter (or why they do not). End with the signup email and a 'View in HubSpot' link to the new contact record. No bullet lists, no headings, no walls of text. Keep it crisp.
Error handling: if web research fails or returns nothing useful, still create the HubSpot contact and still send the Slack alert, just mark the company section as 'no research available' so the rep knows to look manually. Never silently swallow a signup.
Additional information
What does this prompt do?
- Watches your Supabase waitlist table for new signups so sales never misses one.
- Researches each signup's company on the web and scores them against your ideal customer profile.
- Saves the enriched contact to HubSpot with a lifecycle stage that reflects the score.
- Posts a tight, scannable summary to your sales channel so reps can fast-track the hot ones in under ten seconds.
What do I need to use this?
- A Supabase project with a waitlist table (or any table that captures signups) and a database webhook that fires on insert.
- A HubSpot login with permission to create contacts and set lifecycle stages.
- A Slack workspace with a channel for sales alerts, like #signups.
How can I customize it?
- Swap the table name, the Slack channel, or the lifecycle stage names to match how your team already works.
- Rewrite the scoring rubric so it reflects your real ideal customer profile, not the example.
- Skip enrichment for more or fewer email domains depending on how strict you want the personal-email filter to be.
Frequently asked questions
Does this work if my waitlist table has a different name or different columns?
What happens if someone signs up with a personal email like Gmail or Outlook?
Will it create duplicate HubSpot contacts if the same person joins twice?
Can it post to a different Slack channel, or DM the salesperson instead?
Do I need a paid HubSpot plan?
Never miss a high-intent waitlist signup again.
Connect Supabase, HubSpot, and Slack once. Every new signup gets researched, scored, and routed to your sales team automatically.