How to correctly track the first sales email sent via workflow

Hi everyone!
I’m trying to create a contact-based workflow that captures the first time a sales email is sent. I’ve already created a custom property called “First Sales Email Timestamp”, and set up a workflow that fills this property when an outgoing email is associated with a contact and the timestamp is still empty.

My challenge:
If a contact already received sales emails before I created this workflow, the next email they receive will incorrectly be stamped as the “first” one.

What I hoped to do:
I wanted to filter for contacts with no email activities, but HubSpot workflows don’t seem to support activity count filtering (e.g. “less than X emails sent”).

Workaround I’m considering:
Create a list of contacts who already had outgoing sales emails in the past (based on activity filters), and then exclude that list from the workflow enrollment.

Has anyone solved this differently?
Or is there a better way to backfill or prevent incorrect timestamps?

Thanks in advance

Hi @COHagan8,

If you want to find contacts without any logged emails, there’s an easier way:

  • Create a list that filters for contacts associated to at least one activity with type email
  • Create a list of contacts who are not a member of the first list

Tye second list is the one you’re looking for and which you can now use in workflows, views, reports etc.

Best regards!

Hey @COHagan8 what was the workflow criteria you have setup? Do you want a sales email send, open, click etc?

I don’t believe there is a way to easily set something on the last sales email send, you can easily trigger somerthing from the last email engagement date though.

Thanks for the response!

To clarify:
I’m specifically trying to track the timestamp of the first outgoing sales email sent to a contact (not opens or clicks). I’ve created a custom property called First Sales Email Timestamp and the workflow is set up to only populate this property if it’s currently empty.

Here’s how I’ve built it (screenshot attached):

  • The contact is associated to an email
  • The email is outgoing
  • The activity date exists
  • The property First Sales Email Timestamp is unknown

My Challenge:

The problem is with retroactive contacts. For example:
If a contact already received sales emails in the past (before this workflow existed), then the next sales email will wrongly populate the property — giving a false “first” timestamp.

What I’m trying to avoid:

I want to prevent backdating errors and only track the true first interaction going forward.

Workaround I’m testing:

I’m planning to build a static list of contacts who already had outgoing emails (based on activity filters) and exclude them from this workflow.


Do you think that’s the best way? Or is there a way to filter contacts based on the count of sales emails or check for email activity before enrollment?

Thanks again!