Field Mapping Definitions
HubSpot, Salesforce, Pipedrive and Slack use a default, pre-built integration, so there is no field mapping required there. If you are connecting through the Zapier Webhook or a Standard Webhook, you can map the following Bread & Butter data points directly to your own fields.

In short: this article lists every field available in the Intelligence Brief and Intelligence Stream. HubSpot, Salesforce, Pipedrive and Slack use a default, pre-built integration, so no field mapping is needed there; field mapping only applies when you are connecting through the Zapier Webhook or a Standard Webhook. The Brief carries identity, firmographic and attribution fields, What's interesting (the single most useful thing to know about the lead right now), the written sales-context fields and every Nurture email sent, all at the top level of the payload. The Stream carries everything in the Brief plus the full raw material behind it: engagement detail, top pages, complete session-by-session history, the current Nurture draft and the full draft history. Jump to a section below, or read on for details on when each field populates.
Two columns below tell you where each field is available. The Intelligence Brief carries the summary; the Intelligence Stream carries the summary plus all the raw material behind it. The Stream is a strict superset of the Brief: every Brief field appears in the Stream under the same name. The Stream is available only through Zapier and Webhooks, because the payload is larger than standard CRM field mapping can absorb.
Field names below are given exactly as they appear in the payload. Timestamps are ISO 8601 with three fractional digits and a trailing Z, for example 2026-09-18T14:32:07.412Z . Scores are rounded to two decimal places, except focused_score , which is a whole number, or null until the lead has been scored. A value that is absent arrives as null , never as an empty string, so your field mappings never break.
Payload type
The first two fields of every Brief and Stream delivery tell your receiver what it has.
| Field | Type | Brief | Stream | Description |
|---|---|---|---|---|
event |
string | ✓ | ✓ | Which payload this is: intelligence_brief or intelligence_stream (the List arrives as basic_list ) |
schema_version |
number | ✓ | ✓ | The payload format version, currently 1 . It goes up if a change could break an existing receiver |
Trigger (trigger )
Every Brief and Stream delivery says which trigger sent it, so one receiver can tell leads from different integrations apart. Alongside name and kind , the object carries the one field that matches kind . The List doesn't carry a trigger object.
| Field | Type | Brief | Stream | Description |
|---|---|---|---|---|
trigger.name |
string | ✓ | ✓ | The integration's name, as entered when it was set up |
trigger.kind |
string | ✓ | ✓ | What the trigger is: lead_stage , saved_filter (a funnel you've saved) or event |
trigger.lead_stage |
string | ✓ | ✓ | The lead stage, by its label as shown in your dashboard. Present when kind is lead_stage |
trigger.saved_filter |
string | ✓ | ✓ | The name of the saved funnel. Present when kind is saved_filter |
trigger.event |
string | ✓ | ✓ | The event the integration fires on. Present when kind is event , which applies only to integrations set up on a single event before 9.6 |
Out of credits (out_of_credits , notice )
When your account is out of Bread & Butter credits, the Brief and Stream keep arriving with the same fields, so your mappings don't break. The lead's name and email are filled in, every researched field is null , and these two top-level fields tell your receiver why.
| Field | Type | Brief | Stream | Description |
|---|---|---|---|---|
out_of_credits |
boolean | ✓ | ✓ | true when the payload was sent while your account was out of Bread & Butter credits |
notice |
string | ✓ | ✓ | One line to show in place of the research: "Your Bread & Butter account is out of credits. Add Bread & Butter credits to resume the full Intelligence Brief." |
Session
| Field | Type | Brief | Stream | Description |
|---|---|---|---|---|
session_date |
ISO 8601 | ✓ | ✓ | The exact date and time the visitor's session closed and the payload was generated |
User Profile (user )
These fields capture the lead's core identity, professional background and current intent level.
| Field | Type | Brief | Stream | Description |
|---|---|---|---|---|
created_date |
ISO 8601 | ✓ | ✓ | The date the lead record was first created in Bread & Butter |
email_address |
string | ✓ | ✓ | The primary email address associated with the lead |
first_name |
string | ✓ | ✓ | The lead's first name |
last_name |
string | ✓ | ✓ | The lead's last name |
profile_url |
url | ✓ | ✓ | A direct link to the lead's profile in Bread & Butter |
role |
string | ✓ | ✓ | Current job title or professional designation |
profile_summary |
text | ✓ | ✓ | An AI-generated summary of professional background and career trajectory |
linkedin_url |
url | ✓ | ✓ | A direct link to the lead's LinkedIn profile |
lead_stage |
string | ✓ | ✓ | The current Lead Stage, as labelled in your dashboard |
lead_stage_rank |
number |
|
✓ | The stage's position in the 10-slot funnel (1 to 10), stable even if the label is customised |
focused_score |
number | ✓ | ✓ | The 1 to 10 intent score. An integer, rounded down; null if the lead has not been scored yet |
previous_focused_score |
number | ✓ | ✓ | The score before the most recent recalculation, so you can see which way it moved. null until the score has changed at least once |
engagement_score |
number | ✓ | ✓ | The engagement score from the lead's most recent session |
top_user_engagement_score |
number |
|
✓ | The highest single-page engagement score the lead has ever recorded |
average_user_engagement_score |
number |
|
✓ | Average engagement score across every scored page view |
total_engaged_pages |
number |
|
✓ | Count of page views that received an engagement score |
profile_highlights |
array |
|
✓ | Scannable bullets on career history, education and shared connections |
Company (company )
These fields deliver deep firmographic enrichment based on the lead's employer.
| Field | Type | Brief | Stream | Description |
|---|---|---|---|---|
name |
string | ✓ | ✓ | The official name of the company |
website |
url | ✓ | ✓ | The primary website URL |
summary |
text | ✓ | ✓ | A brief, scannable summary of what the company does |
industry |
string | ✓ | ✓ | The primary market sector (e.g. Software, Manufacturing) |
number_of_employees |
number | ✓ | ✓ | Total employee headcount as a number. null when the figure was found only as a range |
number_of_employees_text |
string | ✓ | ✓ | Headcount exactly as it was found, including ranges such as "11-50" |
year_founded |
number | ✓ | ✓ | The year the company was established |
phone_number |
string | ✓ | ✓ | The primary corporate phone number |
address |
string | ✓ | ✓ | The headquarters or primary address |
linkedin_url |
url | ✓ | ✓ | The company's official LinkedIn page |
overview |
text |
|
✓ | A deeper look at the business model and market position |
history |
text |
|
✓ | Key milestones and historical context |
products_services |
text |
|
✓ | Core offerings, products or services sold |
highlights |
array |
|
✓ | Scannable bullets on funding, growth, acquisitions and partnerships |
employees_list |
array |
|
✓ | Notable employee profiles with names and roles |
social_accounts |
array |
|
✓ | Active social media profiles |
latest_news |
array |
|
✓ | Recent press releases and news mentions with dates and links |
specialties |
array |
|
✓ | Niche focuses and keywords associated with the company's expertise |
linkedin_followers |
number |
|
✓ | Total followers on the company's LinkedIn page |
locations |
array |
|
✓ | Additional offices and geographic operating regions |
First Attribution (first_attribution )
These fields capture the origin data from the lead's very first visit to your website.
| Field | Type | Brief | Stream | Description |
|---|---|---|---|---|
country / country_code |
string | ✓ | ✓ | Country name and two-letter code (e.g. US, CA) |
state_prov / state_prov_code |
string | ✓ | ✓ | State or province name and abbreviated code (e.g. NY, BC) |
city |
string | ✓ | ✓ | The city the lead was in during their first visit |
device |
string | ✓ | ✓ | Hardware type (e.g. Desktop, Mobile) |
referrer |
url | ✓ | ✓ | The website that originally referred them to your site |
utm_source |
string | ✓ | ✓ | The original source of traffic (e.g. google, newsletter) |
utm_medium |
string | ✓ | ✓ | The original marketing medium (e.g. cpc, email) |
utm_campaign |
string | ✓ | ✓ | The campaign name that drove the first visit |
utm_term |
string | ✓ | ✓ | The search term used, if from paid search |
utm_content |
string | ✓ | ✓ | The specific content piece or ad variation clicked |
gclid |
string | ✓ | ✓ | Google click identifier, for Google Ads tracking |
gclsrc |
string | ✓ | ✓ | Google click source (e.g. aw) |
dclid |
string | ✓ | ✓ | DoubleClick click identifier |
fbclid |
string | ✓ | ✓ | Facebook click identifier |
mkcid |
string | ✓ | ✓ | Mailchimp click identifier |
msclkid |
string | ✓ | ✓ | Microsoft Ads click identifier |
ip_address |
string |
|
✓ | The IP address during their first visit |
latitude / longitude |
number |
|
✓ | Approximate geographic coordinates |
continent / continent_code |
string |
|
✓ | Continent name and two-letter code (e.g. NA, EU) |
isp |
string |
|
✓ | The Internet Service Provider used |
operating_system |
string |
|
✓ | Device OS (e.g. Windows 11, macOS) |
browser |
string |
|
✓ | Web browser and version (e.g. Chrome 125) |
Click identifiers are passed through exactly as they arrived in the URL, capitalisation included, so a value you receive can be matched against your ad platform without transformation.
Last Attribution (last_attribution )
These fields capture data from the lead's most recent session, the visit that just closed. It includes the exact same location, device and UTM fields as first_attribution , letting you see what specifically brought a returning lead back to your site today.
What's interesting (whats_interesting )
The single most useful thing to know about this lead right now: a short headline and one or two sentences with the facts behind it, in plain words. It starts with how the person relates to what you sell, and draws on what Bread & Butter already holds on them: their journey on your website, how they found you, their profile and company research, and colleagues from the same company who have visited. It's the first thing a rep reads in the Brief, wherever the Brief goes.
It's rewritten after every visit, and again when the lead's profile or company research completes. The new version replaces the old one. The three fields sit at the top level of the payload, so you can map the combined line to one CRM field, or the headline and text to two.
| Field | Type | Brief | Stream | Description |
|---|---|---|---|---|
whats_interesting |
text | ✓ | ✓ | The headline and text together, as "Headline. Text" |
whats_interesting_headline |
string | ✓ | ✓ | The headline on its own |
whats_interesting_text |
text | ✓ | ✓ | The one or two sentences on their own |
Written Sales Context
Six AI-generated fields designed for immediate outreach, written to be scanned in about ten seconds. They sit at the top level of the payload alongside user and company ; there is no wrapper object around them. Two companion fields sit beside them: latest_session_summary_html , the session summary as HTML, and compelling_sales_trigger_url , the source link for the sales trigger.
| Field | Type | Brief | Stream | Description |
|---|---|---|---|---|
latest_session_summary |
text | ✓ | ✓ | A single sentence on what they did during their most recent visit, in plain text |
latest_session_summary_html |
html | ✓ | ✓ | The same session summary as HTML |
user_journey_summary |
text | ✓ | ✓ | A full paragraph covering every session, including how their intent has shifted over time |
attribution_summary |
text | ✓ | ✓ | How they originally found you, and what keeps bringing them back |
real_time_icebreaker |
text | ✓ | ✓ | A hyper-local, time-sensitive reference based on the lead's geography, to help reps build rapport |
live_talking_point |
text | ✓ | ✓ | Up-to-the-minute personal context: recent promotions, career milestones, shared connections |
compelling_sales_trigger |
text | ✓ | ✓ | Company intelligence flagging newly won awards, product launches, acquisitions or press mentions. Prose only; the link is in compelling_sales_trigger_url |
compelling_sales_trigger_url |
url | ✓ | ✓ | The source link for the sales trigger. null when the trigger is drawn from the company's business highlights rather than a linked source |
Nurture (nurture_sent , nurture_draft , nurture_drafts )
Nurture generates a draft email each time a lead returns. The Brief carries every email actually sent. The current draft, and the full history of every draft ever generated, are in the Stream only.
| Field | Type | Brief | Stream | Description |
|---|---|---|---|---|
nurture_draft.generated_date |
ISO 8601 |
|
✓ | When the current draft was generated |
nurture_draft.status |
string |
|
✓ | draft , sent , not_sent or dismissed |
nurture_draft.angle |
string |
|
✓ | The approach the draft takes |
nurture_draft.subject |
string |
|
✓ | Suggested subject line |
nurture_draft.body |
text |
|
✓ | Plain-text version of the draft |
nurture_draft.body_html |
html |
|
✓ | HTML version, with simple markup for links |
nurture_sent[] |
array | ✓ | ✓ | Every email actually sent to this lead: subject, body, angle, generated and sent dates |
nurture_drafts[] |
array |
|
✓ | Every draft ever generated for this lead, sent or not, with status |
Top Engaged Pages (top_engaged_pages )
Stream only. Up to 20 of the pages this lead has viewed across all sessions, as structured data, ordered by number of visits with the most visited first. Use total_engagement_score or average_engagement_score to rank by attention instead. It sits at the top level of the payload beside sessions . The Brief describes the same thing in prose through user_journey_summary and latest_session_summary .
| Field | Type | Description |
|---|---|---|
top_engaged_pages[].title |
string | The page title |
top_engaged_pages[].no_query_url |
url | The page URL with query parameters stripped |
top_engaged_pages[].visits |
number | How many times the lead has viewed that page |
top_engaged_pages[].total_engagement_score |
number | Sum of engagement scores across those visits |
top_engaged_pages[].average_engagement_score |
number | Average engagement score per visit |
top_engaged_pages[].top_engagement_score |
number | The highest single-visit engagement score |
Session History (sessions )
Stream only. An array containing every session the lead has ever had on your site, not just the most recent one. This is the raw material behind the summaries above, and it is what makes the Stream suited to data warehouses and BI tools rather than CRM fields.
| Field | Type | Description |
|---|---|---|
sessions[].session_date |
ISO 8601 | When that session occurred |
sessions[].entry_page |
url | The first page of that session |
sessions[].exit_page |
url | The last page of that session |
sessions[].duration |
number | Session length in seconds, from first to last recorded event |
sessions[].focused_score |
number | The score for that specific session |
sessions[].pages[].url |
url | Each page visited |
sessions[].pages[].title |
string | That page's title |
sessions[].pages[].engagement_score |
number | Engagement score for that page |
sessions[].pages[].time_on_page |
number | Seconds spent on that page. null on the exit page, since there is no following event to measure against |
sessions[].events[] |
array | Events triggered during that session, with timestamps |
sessions[].exit_destinations[] |
array | Outbound links clicked during that session, each with a url and a timestamp |
sessions[].attribution |
object | Full attribution for that individual visit, same fields as first_attribution |
session_count |
number | Total number of sessions on record for the lead |
sessions_truncated |
boolean | true if the history was cut short to keep the payload deliverable (see below) |
Sessions are ordered newest first. There is no cap on the number of sessions, but if a lead's history would push the payload past roughly 2 MB, older sessions are dropped, sessions_truncated is set to true and session_count still reports the real total, so you can tell how many are missing. In practice this only affects leads with an unusually long history; most leads' entire history is a few tens of kilobytes.
Event types
sessions[].events[] is a closed list. Every entry carries a type and a timestamp, and your own events also carry the name you gave them in name .
| Type | What it means |
|---|---|
authentication |
The lead returned through a Bread & Butter gate using an account they already had |
identity_conversion |
The lead gave an email address for the first time and became a named contact |
verified_conversion |
The email address passed Real-Time Email Verification |
form_submission |
A form on your site was completed |
contact_us |
A contact form or contact CTA was completed |
opt_in |
Marketing consent was given |
opt_out |
Marketing consent was withdrawn |
cookie_consent |
A choice was recorded in the Privacy Manager |
custom_data_updated |
Your site attached or changed custom data on the lead's profile |
custom |
One of your own events. The name you gave it arrives in name |
Page views and outbound clicks are not events. Pages live in sessions[].pages[] and outbound clicks in sessions[].exit_destinations[] , so you never have to filter them back out of the event array.
Exit destinations
sessions[].exit_destinations[] records the outbound links the lead clicked during that session, which is often where the real intent shows: a booking tool, a review site, a comparison page. Each entry carries a url and a timestamp , and nothing else.
When a session contained no outbound click the field is null rather than an empty array. That is the normal value for most sessions rather than a sign of anything missing. Exit destinations are Stream only; the Brief carries no exit destination field.
When Fields Are Populated
Not every field arrives on every payload.
UTM fields and click identifiers are always present in every attribution object. They are null when a lead arrives directly or through organic search, since there is no campaign to report, so your field mappings never break.
Enrichment fields under user and company populate once enrichment has run against that lead. Newly captured leads may arrive before enrichment completes.
whats_interesting , whats_interesting_headline and whats_interesting_text are null until the first What's interesting has been written for the lead, which happens shortly after their profile research completes. A lead captured moments before the Brief is sent may arrive without one; the next Brief carries it.
When out_of_credits is true , every researched field is null and only the lead's name and email are filled in.
focused_score is null until the lead has been scored, so you can tell "scored zero" apart from "not scored yet". previous_focused_score is null until the score has moved at least once.
number_of_employees is null when the figure was found only as a range, and number_of_employees_text carries the range instead, so a warehouse can filter on the number and a CRM field can display the text.
real_time_icebreaker requires a resolvable location. Leads on VPNs or corporate proxies may not receive one.
last_attribution matches first_attribution exactly on a lead's first session, since it is the same visit.
lead_stage carries the stage's current label as shown in your dashboard, so a renamed stage changes the value that arrives. Warehouses should join on lead_stage_rank in the Stream instead.
nurture_draft (Stream only) is absent until Nurture has generated a draft for the lead.
Every field is Bread & Butter's own. Nothing in either payload passes through a third-party data vendor's raw response or field names, so what you map today stays stable if a source changes behind the scenes.