Why This Matters
In Salesforce, the standard FirstRespondedDate on the Campaign Member object is a Date-only field. While this might be sufficient for high-level reporting, it poses limitations when working with platforms like Marketo Measure (Bizible). Let’s dive a bit further.
Here’s the crux of the issue: when an offline touchpoint is created using FirstRespondedDate or CreatedDate, the touchpoint date defaults to midnight (00:00:00). While this gets CLOSE to the actual time the interaction happened, it can throw off sequencing. Think about this:
- 9am: Prospect comes from paid search and views some content on your site
- 11am: Prospect comes back to your site and registers for a webinar
- 4pm: Prospect attends webinar
In this sequence, if you’re using FirstRespondedDate field, the touchpoint journey would look like this:
- 12:00AM: FT, LC, Form – Webinar Attendance
- 11am: Webinar Registration Form Fill
You might notice a few issues with this:
- Inaccurate order of touchpoints
- Original source of traffic (Paid Search web visit) gets skipped
- This happens because Marketo Measure only creates web visit touchpoints for milestones. While that visit SHOULD have gotten FT credit, when Webinar sneaks back to midnight, the visit no longer appears as a FT and therefore will be missing unless something changes
To solve this, we need a custom FirstRespondedDateTime field that records the actual time the Campaign Member was marked as responded—not just the date.
Step-by-Step: Creating the FirstRespondedDateTime Field
1. Create the Custom Field
- Object: Campaign Member
- Field Type: Date/Time
- Field Label: FirstRespondedDateTime
- Field Name (API): FirstRespondedDateTime__c
- Visibility: Make sure the field is visible and editable for relevant profiles or automation processes. Also, make sure that your Marketo Measure connected user has visibility to this field so that it can be used in setup.
Populating the Field Going Forward
To keep the new field updated in real-time, use a Flow:
2. Build a Record-Triggered Flow
Trigger: When a Campaign Member record is created or updated
Condition:
- HasResponded = TRUE
- FirstRespondedDateTime__c IS NULL
Logic:
- If the Campaign Member has responded and no datetime is recorded yet, populate FirstRespondedDateTime__c with NOW() (current DateTime).
This ensures the timestamp captures the exact time when the Campaign Member first meets the “responded” criteria.
Backfilling Historical Data
Once your new field is live and the flow is confirmed to be working, it’s time to focus on historical data. You have a few options here:
- Backfill historical campaign members to populate the FirstRespondedDateTime field and simply update Touchpoint Date area of Campaign Rules in Measure (relies on SFDC work). More on this option below:
- Modify your Custom Campaign Sync rules in Marketo Measure to point to the new FirstRespondedDateTime field moving forward and just use FirstRespondedDate historically (relies on additional rulebuilding in Measure)
Option 1: Backfill Campaign Members with FRDT field
⚠️ Important Caveat: Exact Timestamps Are Not Recoverable
Salesforce does not store the time a field like FirstRespondedDate was populated—unless you had Field History Tracking enabled for that field (and even then, it only stores that data for 18 months).
That means:
You cannot retrieve the original timestamp for past responses.
So instead, the best approach is to infer a datetime value by combining the existing FirstRespondedDate (a date-only field) with a default time, typically 00:00:00.
How to Backfill FirstRespondedDateTime__c
Option 1: One-Time Backfill via Data Loader (No Code)
- Export Campaign Members Needing Backfill (you can do all-time, or a more manageable range of past two years, for example)
Use this SOQL query in Data Loader or Workbench:
sql
CopyEdit
SELECT Id, FirstRespondedDate
FROM CampaignMember
WHERE HasResponded = TRUE
AND FirstRespondedDate != NULL
AND FirstRespondedDateTime__c = NULL
- Prepare Your CSV File
In Excel or Google Sheets, add a new column called FirstRespondedDateTime__c.
Use a formula to create a datetime string in UTC format:
Excel Formula Example:
excel
CopyEdit
=TEXT(B2,”yyyy-mm-dd”) & “T00:00:00.000Z”
You can replace 00:00:00 with any default time that makes sense for your business needs, such as 08:00:00.
- Import Updated Values
Use Data Loader’s Update operation:
- Select CampaignMember object
- Map Id to Id and your new column to FirstRespondedDateTime__c
- Run a test batch first to verify the formatting is correct
- Update Rules in Bizible
Once all campaign members in your backfill range have had the FirstRespondedDateTime field populated, it’s time to update things in Measure. The steps here are straightforward:
- Log into Bizible > My Account > Settings > Campaigns
- Modify each rule where FirstRespondedDate is the field used in the ‘Touchpoint Date’ column on the right
- Select Pencil Icon
- Delete the ‘FirstRespondedDate’ value
- Search for ‘responded’ or ’time’ to find your newly created FirstRespondedDateTime field
- Click that field when it comes up
- Checkbox, Save as a Draft
- Repeat for all rules
Once you’ve changed all the rules, you can save & publish, and now it should be good to go!
Option 2: No backfill of Campaign Members; changing Campaign Sync Rules
If you’ve already pestered your SFDC admins enough and want to just update things in Bizible, that’s completely fine – the quality of data will be just the same. All it requires is some changing of rules within the Campaigns section of Bizible. Steps to do that are below:
- Pencil Icon (edit) each rule in place today which uses FirstRespondedDate as the Touchpoint Date value
- Using the plus button (+), add ‘And’ logic to each rule, search for newly created FirstRespondedDateTime field and select it, Operator = ‘Is Equal To’ and leave Value box blank
- Repeat for all rules that are currently using FirstRespondedDate
- Save as Draft
- Rebuild (as new rules) ALL rules that use FirstRespondedDate as touchpoint date
- Replicate rules exactly, except change operator for the last line (FirstRespondedDateTime Is Equal To: Null)
- Change Operator to ‘Is Not Equal To’
- Change Touchpoint Date on each rule to point to FirstRespondedDateTime field
- Repeat
- Once each rule has been replicated and modified to use FirstRespondedDateTime, you’re safe to Save & Process!
Wrapping Up
The FirstRespondedDateTime field fills a crucial gap for those using Marketo Measure or any system that requires precise chronological event data. By combining a DateTime field, real-time Flow automation, and a backfill strategy, you ensure your attribution data is both accurate and future-proof.
If you have any questions, please reach out to info@attributa.io or stop by our bi-weekly office hours! If you aren’t already on that invite, send a note to mmofficehours@attributa.io to get invited.