Profile new HubSpot leads from their website with a Slack alert

When a new contact lands in HubSpot, read their company website, fill in industry, product, ICP, and a one-line pitch, then ping sales in Slack.

Agentic Task
HubSpotScrapingBeeSlackSalesMarketingLead EnrichmentNotifications & Alerts

Run this workflow every time a new contact is created in HubSpot. Use HubSpot's webhook trigger on the contact creation event so it fires the moment the record appears, not on a poll.

When a new contact comes in, do the following:

1. Read the email address on the new contact and extract the domain (the part after the @).

2. If the domain is a known free or personal email provider (gmail.com, outlook.com, hotmail.com, yahoo.com, icloud.com, aol.com, proton.me, live.com, msn.com), skip the website enrichment entirely. Jump to step 6 and post a short Slack message noting this is a personal-email lead with no company website to profile.

3. Otherwise, call ScrapingBee's Extract Data with AI operation against https://{domain} (fall back to https://www.{domain} if the first attempt 404s). Use the ai_query parameter to ask for four fields in one call:

- industry: one or two words describing what industry the company operates in.

- primary_product: one sentence describing the main product or service the company sells.

- ideal_customer_profile: one sentence describing who this company sells to.

- value_proposition: a single one-line pitch in the company's own voice.

Ask ScrapingBee to return the result as structured JSON so the fields are easy to read back. If the homepage scrape fails or the values come back empty or nonsensical, set the missing fields to "unknown" and continue.

4. Use HubSpot Update Contact to write the four values into custom contact properties named company_industry, primary_product, ideal_customer_profile, and value_proposition. If any of those properties don't exist yet on the contact schema, create them as single-line text properties first.

5. Use HubSpot Create Note associated with the contact. Title the note "Company profile from website" and put the four enrichment fields in the body as a short bulleted summary, with the source domain at the top.

6. Use Slack Send a Message to post to the sales channel (default to #sales-new-leads, but prompt me to confirm the channel during setup). Format the message like this:

New lead: {first_name} {last_name} at {company_or_domain} Industry: {industry} Product: {primary_product} Sells to: {ideal_customer_profile} Pitch: {value_proposition} HubSpot record: {link_to_contact}

Build the HubSpot record link as https://app.hubspot.com/contacts/{portalId}/contact/{contactId}, where portalId is the HubSpot account/hub ID and contactId is the new contact's id from the trigger payload.

For free-email leads, send an abbreviated version of the Slack message that just announces the contact name and email and notes that no company profile was generated because the email is personal.

Keep the whole workflow focused on this enrichment pass. Don't create deals, don't assign owners, don't send outbound emails. The goal is to give sales reps real context the moment a lead lands.

Additional information

What does this prompt do?
  • Watches for new HubSpot contacts and reads the company domain from their work email.
  • Visits the company homepage and derives industry, primary product, ideal customer profile, and a one-line value proposition.
  • Writes those values into custom contact properties and files a short company summary as a note on the contact.
  • Posts a heads-up to your sales Slack channel with the highlights and a direct link to the HubSpot record.
What do I need to use this?
  • A HubSpot account with permission to read and update contacts and create notes.
  • A ScrapingBee API key for visiting the company homepage.
  • A Slack workspace and the channel where alerts should land.
  • Custom contact properties for industry, product, customer profile, and value prop (we can create these for you if they don't exist).
How can I customize it?
  • Change which questions get asked of the homepage. Add tech stack, employee count, recent news, or anything you can describe in plain English.
  • Pick a different Slack channel, or route alerts based on lead source, country, or deal owner.
  • Extend or replace the list of free email providers that get skipped (gmail.com, outlook.com, yahoo.com).

Frequently asked questions

What happens if the lead signs up with a personal email like gmail.com?
The workflow skips the website scrape and posts a short Slack heads-up noting it's a personal-email lead with no company to profile. Reps still see the new contact, they just don't get the enrichment.
Can I run this on contacts that already exist instead of brand-new ones?
Yes. Tell the workflow to sweep contacts missing the enrichment fields on a schedule instead of firing on the new-contact event. The same scrape and write-back logic applies.
What if the company website blocks scrapers or runs heavy JavaScript?
ScrapingBee handles browser rendering, proxy rotation, and stealth modes for tougher sites. You can switch on premium or stealth options inside the workflow if a particular domain keeps failing.
Does it work with HubSpot Free?
Yes. HubSpot Free supports custom contact properties and notes, which is all this workflow writes back. No paid tier required.
How do I change which Slack channel it posts to?
Open the workflow, swap the channel name in the Slack step, and save. You can also point different lead sources at different channels if your sales team is split by region or product.

Give every new lead instant context before sales even opens HubSpot.

Connect HubSpot, ScrapingBee, and Slack once, and Geni profiles every new contact the moment they land.