← All 12 CRMs · Make guide · Zapier guide
Connection type: Sheets bridge. Same watch file as ActivePipe and Suite360. Keep column headers exact.
Copy Google-Sheet-Bridge-template.csv into a Google Sheet. Tab name Loyalty tax. source_crm = brokerengine.
Map typical BrokerEngine export columns onto the canonical headers (Client ID → contact_id, names, email, mobile, current rate, new-money / retention reference, lender, product). Compute gap. existing_client = TRUE only where that is true.
Week one of the month: re-export new settlements. Do not overwrite tbt_loyalty_state, tbt_last_loyalty_touch or opt-outs already on the Sheet — join on contact_id.
Fields for this CRM
Create the ones marked YES. Map the ones you already store. Do not invent a second current-rate field.
| Purpose | Canonical | This CRM | Required | Create? |
|---|---|---|---|---|
| Contact ID | contact_id | contact_id | Yes | No |
| First name | first_name | first_name | Yes | No |
| Last name | last_name | last_name | No | No |
email | email | Yes | No | |
| Mobile | mobile | mobile | Recommended | No |
| Current rate | tbt_current_rate | tbt_current_rate | Yes | Map or create |
| New-money rate | tbt_new_money_rate | tbt_new_money_rate | Yes | YES - create or maintain |
| Loyalty gap (bps) | tbt_loyalty_gap_bps | tbt_loyalty_gap_bps | Yes | YES - create / compute |
| Lender | lender | lender | Recommended | No |
| Product name | product_name | product_name | Recommended | No |
| Existing client flag | existing_client | existing_client | Yes | Map |
| Email opt-out | email_optout | email_optout | Yes | No |
| Loyalty state | tbt_loyalty_state | tbt_loyalty_state | Yes | YES - create this |
| Last loyalty touch | tbt_last_loyalty_touch | tbt_last_loyalty_touch | Yes | YES - create this |
| Broker owner | broker_owner | broker_owner | Recommended | No |
| Broker email | broker_email | broker_email | Yes | Set in the watch |
Full translation and notes: 05-templates/CRM-Field-Map.csv. Gap is in basis points. Example: current 6.40 and new-money 5.90 is a 50 bps gap. Default watch threshold is 25 bps.
Make — watch file to import
Import 02-make-blueprints/01e-TBT-Loyalty-Tax-Watch-GoogleSheets-Bridge.blueprint.json.
Import this file plus the outreach blueprint. Connect Google Sheets. Filter existing_client TRUE, gap ≥ 25, not opt_out. Paste the outreach webhook URL.
Everyone also imports 02-make-blueprints/02-TBT-Loyalty-Tax-Outreach.blueprint.json. Import outreach first so you have the webhook URL. Walkthrough: MAKE-Setup-Guide.html.
Make — last-step swap
On the outreach scenario, modules 7, 8 and 9 are HTTP placeholders labelled SWAP. Replace them. The middle (consent, gap gate ≥ 25 bps, OpenAI, broker Gmail) does not change.
| Outreach module | Swap for |
|---|---|
| 7 · Create the broker task — SWAP | Broker Gmail in blueprint 02 is the task. Optionally a Write-back tab row. |
| 8 · Write the CRM note — SWAP | Optional Sheets write-back. Add a note in BrokerEngine by hand that week if you need it on the file. |
| 9 · Stamp loyalty touch — SWAP | Google Sheets → Update a row. tbt_loyalty_state = touched, tbt_last_loyalty_touch = today. Match on contact_id. Do not skip. |
Stamp body (use this CRM’s field names from the table):
{
"tbt_loyalty_state": "touched",
"tbt_last_loyalty_touch": "{{formatDate(now; \"YYYY-MM-DD\")}}"
}
Zapier — first module and last three
Zapier cannot import a Make blueprint. Build two Zaps by hand. Full click-path: ZAPIER-Setup-Guide.html. This page is the CRM-specific first and last steps only.
| Where | What |
|---|---|
| Zap A · first module | Schedule by Zapier + Google Sheets Lookup Spreadsheet Rows. Filter existing_client TRUE, gap ≥ 25, state not opt_out. POST canonical payload to Zap B. Set crm = brokerengine (or the Sheet’s source_crm). |
| Zap B step | Module |
|---|---|
| B6 Task | Broker Gmail in Zap B is the task. |
| B7 Note | Optional Sheets write-back of crm_note. Hand-note in BrokerEngine that week if needed. |
| B8 Stamp | Google Sheets → Update Spreadsheet Row. State = touched, last touch = today. |
Zap A then POSTs the canonical keys (see the field-map Canonical column) to Zap B’s Catch Hook. Leave auto_email_client as false. Replace [YOUR BROKER EMAIL], [YOUR FIRST NAME], [YOUR BUSINESS NAME].
- There is no unofficial BrokerEngine API workaround in this pack and we will not help you build one.
- Leave
auto_email_clientasfalse. Default is email the broker, not the client.
01e)
This bridge is the path. If BrokerEngine later grants you an API, you can swap the first and last modules then. Until that letter exists, stay on 01e.
T Test on yourself before any live send
- Create yourself as a settled existing-client test record with a real email you read, a current variable rate, a new-money / retention reference, and
tbt_loyalty_gap_bpsat or above 25. Statedueorqueued. Last touch empty. - Run the watch (Make scenario 01, or Zap A) with a limit of 1, filtered to only this record.
- Confirm the broker email arrives. Confirm you did not get a client email.
auto_email_clientstaysfalse. - Confirm the broker task, the CRM note (or sheet write-back), and the stamp: state
touched, last touch = today. - Run again the same day. The engine must not draft you a second time. Then set state to
opt_outand run again — must not draft.
If the stamp fails, stop. Fix it before anyone else is in the set. After the loop is proven on you, you may flip auto_email_client — not before. Read 04-compliance first.