Public
Like
Hubspot-Research
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Viewing readonly version of main branch: v55View latest version
This project automates the process of generating an AI-powered research report for new HubSpot leads and attaching a link to that report back onto the HubSpot contact record.
- A HubSpot account with admin rights to:
- Create Private Apps.
- Manage CRM properties.
- Set up Webhooks.
- A Perplexity AI account and an API key.
- In your HubSpot account, navigate to Settings (gear icon on the top) > Integrations > Private Apps.
- Click "Create private app".
- Basic Info:
- Name: Give your app a descriptive name (e.g., "ValTown Lead Research").
- Description: (Optional) Briefly describe its purpose.
- Scopes: Go to the "Scopes" tab. You need to grant the following permissions:
crm.objects.contacts.read
- To read newly created contact details.crm.objects.contacts.write
- To update the contact with the report link.- (Recommended for robustness)
crm.schemas.contacts.read
- (Recommended for robustness)
crm.schemas.contacts.write
- Click "Create app".
- After creation, HubSpot will show you an Access Token. Copy this token securely. This will be your
HUBSPOT_API_KEY
in Val Town.
- In HubSpot, navigate to Settings (gear icon) > Properties (under "Data Management").
- Ensure "Contacts" is selected as the object.
- Click "Create property".
- Property Details:
- Object type: Contact
- Group: Contact information (or any group you prefer)
- Property label:
Research Report URL
(or similar) - Click "Next".
- Field type: Select "Single-line text".
- Click "Create".
- Note down the Internal name of this property (e.g.,
research_report_url
). The Val Town script usesresearch_report_url
by default. If yours is different, you'll need to update the script.
- Navigate back to your Private App settings in HubSpot (Settings > Integrations > Private Apps > Your App Name).
- Go to the "Webhooks" tab.
- Click "Create subscription".
- Target URL: This will be the URL of your Val Town val.
- If you plan to use a custom subdomain for your Val Town val (e.g.,
https://your-app-name.val.run
), enter that. - Otherwise, it will be in the format
https://your-generated-valname.web.val.run
. You might need to create the val first (see Step 2) to get this exact URL.
- If you plan to use a custom subdomain for your Val Town val (e.g.,
- Object type: Select "Contact".
- Event type: Choose "Contact created" (often listed as
contact.creation
). - Save the webhook subscription.
- Ensure all HubSpot configurations (Private App scopes, custom property, webhook) are correctly set up and saved.
- Ensure your Val Town val is saved and your environment variables (
HUBSPOT_API_KEY
,PERPLEXITY_API_KEY
) are set. - In HubSpot, create a new test contact with an email address.
- Test with a generic email (e.g., a @gmail.com address for a known professional like "Steve Krouse").
- Test with a company-specific email if possible.
- Check Val Town Logs: Open the logs for your
hubspotLeadWebhook
val in Val Town. You should see:- "Received HubSpot webhook payload..."
- "Fetched HubSpot Contact Details (SDK)..."
- "Generating Perplexity research report for..."
- "Research report text received from Perplexity: ..." (This should show the actual report text).
- "Updating HubSpot contact ... with report link: ..."
- "HubSpot contact ... updated successfully."
- If there are errors from HubSpot or Perplexity, they will be logged here.
- Check HubSpot Contact:
- Open the newly created contact record in HubSpot.
- Find your custom property (e.g., "Research Report URL"). It should contain a link like
https://your-val-url.val.run/?key=...
.
- Verify Report Link:
- Click the link in the HubSpot custom property.
- Your browser should open a new tab displaying the plain text research report generated by Perplexity.
- Check the Val Town logs again; you should see entries related to the
GET
request for serving the blob, including "Raw object from blob.get()..." and "Successfully extracted text from blob...".
- Perplexity Model: You can change the Perplexity AI model used (default is
"sonar"
) in theperplexityPayload
section of the script. Refer to Perplexity AI documentation for available models. - Prompts: The
perplexitySystemPrompt
andperplexityUserPrompt
can be extensively customized to change the focus, tone, or content of the research report. - Generic Domains: The
genericDomains
array in the script can be updated if you want to add or remove email domains that should trigger the special "search for actual company" logic. - PixieBrix Use Cases: Modify the prompt to ask for use cases relevant to your product or service.
- "Enterprise Lead" Criteria: The script includes a
TODO
comment for adding logic to identify "Enterprise Leads" if you want to trigger research only for specific types of leads.