Skip to main content

Updated Sep 30, 2026

Non-product activity

Non-product activity (NPA) models capture events that are not core in-app product usage: marketing engagement, website visits, form submissions, email opens, support-adjacent actions, or any other event stream you want on the account timeline without labeling it as product activity.

Prerequisites​

Configure the Accounts model and Users model first. The user_id and account_id in activity events are resolved against those models — without them, events won't link to the right accounts.

Model keys​

PropertyTypeKey?Description
activity_idstringyesUnique identifier for the event.
account_idstringyesAccount the event belongs to.

Default properties​

PropertyTypeDescription
user_idstringUser associated with the event, if known.
timestamptimestampWhen the event occurred.

Activities​

Rows feed Activity occurred timeline events for this model's name, similar to other activity-shaped models.

Configure​

  1. Configuration → Data models → Add model → Non-product activity.
  2. Choose a connection and provide a query or managed source.
  3. Map to activity_id, account_id, and default properties.
  4. Validate, save, refresh, then check an account timeline.

Supported connections for this model type include warehouses, databases, HubSpot, Salesforce, Segment, SES-backed pipelines, and others per your workspace — see Data connections.


HubSpot behavioral events​

HubSpot tracks several types of contact-level behavioral events — website visits, form submissions, marketing email opens and clicks, link clicks, and CTA clicks. FunnelStory syncs these events from HubSpot's contact events API and makes them available in the page_views virtual table.

Each event type can be configured as a separate non-product activity model, giving you individual timeline activities per engagement type (for example a distinct "Page View" activity and a separate "Form Submission" activity).

Available event types​

Event typeevent_type valueWhat it tracks
Website page viewe_visited_pageContacts visiting your website or tracked pages
Form submissione_submitted_formForm fills on your site or landing pages
Marketing email openede_opened_emailHubSpot marketing email opens
Marketing email clickede_clicked_emailClicks on links inside marketing emails
Link clickede_clicked_linkClicks on tracked links
CTA clickede_clicked_ctaClicks on HubSpot calls to action

Prerequisites​

  • A connected HubSpot data connection.
  • The Accounts and Users models must be configured first. Account resolution for behavioral events is done by matching visitor email to known users.
  • HubSpot tracking on your website so events are collected and linked to contact email addresses.

Ask Claude via the MCP server to configure all behavioral event models at once:

"Configure HubSpot page view and form submission non-product activity models"

Claude reads the data model guide, previews queries, and creates each model in the correct order. See Configure HubSpot models with Claude for a full walkthrough.

Manual configuration​

Add a Non-product activity model with the HubSpot connection for each event type you want to track. The page_views virtual table resolves account_id by matching the visitor's email to your users model.

Example — page views:

SELECT
id,
account_id,
user_id,
timestamp,
properties->>'hs_url' AS url,
properties->>'hs_page_title' AS page_title
FROM page_views
WHERE event_type = 'e_visited_page'
AND account_id IS NOT NULL

Example — form submissions:

SELECT
id,
account_id,
user_id,
timestamp,
properties->>'hs_url' AS url,
properties->>'hs_page_title' AS page_title
FROM page_views
WHERE event_type = 'e_submitted_form'
AND account_id IS NOT NULL

Mappings (for both):

ColumnProperty
idactivity_id
account_idaccount_id
user_iduser_id
timestamptimestamp

Use the same pattern with different event_type values for email opens (e_opened_email), email clicks (e_clicked_email), link clicks (e_clicked_link), and CTA clicks (e_clicked_cta).

Account resolution requirement

The page_views table resolves account_id by matching the visitor's email to your users model. Visitors whose emails aren't linked to a known user in FunnelStory will have a NULL account_id and be excluded by the WHERE account_id IS NOT NULL filter.

For best results, make sure your HubSpot contacts are associated with deal companies and your users model is up to date.

Enable HubSpot visitor tracking​

For page views and behavioral events to be collected, HubSpot's tracking code must be installed on your site.

Install the snippet:
Use the tracking code from HubSpot Settings → Tracking & analytics → Tracking code. HubSpot's guide: Install the HubSpot tracking code.

Identify visitors after login:
Call identify with the user's email so page views are linked to a known contact:

_hsq.push(['identify', { email: '[email protected]' }]);

See Identify a visitor.

Single-page applications:
Trigger page view tracking on route changes:

_hsq.push(['trackPageView']);