← All 12 CRMs · Make guide · Zapier guide
Connection type: API. HTTP modules only after they have said yes. The URL is the one they issued. Authorization is Bearer (or the header they specify) plus the key, stored in a Make / Zapier connection — not in the blueprint.
If the answer is no, stop. Use the Sheets bridge the same week. Do not half-build an HTTP scenario you cannot authenticate. This pack does not invent a Salestrekker endpoint.
Canonical crm value in the payload: salestrekker. Full payload and stamp body: 02-make-blueprints/02-notes.md.
If they will not let you create custom fields, hold state on the Sheet even if the read is live — otherwise the seven-day stamp does not work.
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 | clientId | Yes | No |
| First name | first_name | firstName | Yes | No |
| Last name | last_name | lastName | No | No |
email | email | Yes | No | |
| Mobile | mobile | mobile | Recommended | No |
| Current rate | tbt_current_rate | custom.tbt_current_rate | Yes | Map or create |
| New-money rate | tbt_new_money_rate | custom.tbt_new_money_rate | Yes | YES - create or maintain |
| Loyalty gap (bps) | tbt_loyalty_gap_bps | custom.tbt_loyalty_gap_bps | Yes | YES - create / compute |
| Lender | lender | lender | Recommended | No |
| Product name | product_name | productName | Recommended | No |
| Existing client flag | existing_client | existingClient | Yes | Map |
| Email opt-out | email_optout | emailOptOut | Yes | No |
| Loyalty state | tbt_loyalty_state | custom.tbt_loyalty_state | Yes | YES - create this |
| Last loyalty touch | tbt_last_loyalty_touch | custom.tbt_last_loyalty_touch | Yes | YES - create this |
| Broker owner | broker_owner | ownerId | Recommended | No |
| Broker email | broker_email | set in watch mapper | 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
No dedicated watch file for this CRM. There is no dedicated Salestrekker watch file. Either: (1) HTTP → Make a request using the URL they issued, Iterator over the contact array, HTTP POST the canonical payload to the outreach webhook; or (2) import the Sheets bridge until access is granted. Everyone still imports the outreach blueprint.
Fallback file: 02-make-blueprints/01e-TBT-Loyalty-Tax-Watch-GoogleSheets-Bridge.blueprint.json.
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 | HTTP → Make a request. Method and URL: whatever they issued for creating a task / activity. Title {{3.broker_task_title}}, body {{3.broker_task_body}}, linked to contact_id. |
| 8 · Write the CRM note — SWAP | HTTP POST a note on the same record. Body {{3.crm_note}}. Date: today. |
| 9 · Stamp loyalty touch — SWAP | HTTP PATCH/PUT the same record. Body uses the field-map names: custom.tbt_loyalty_state = touched, custom.tbt_last_loyalty_touch = today. Confirm names with the aggregator. 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 | Webhooks by Zapier → GET / Custom Request (or Code) against the search URL they issued. Filter gap ≥ 25, existing clients, not opt_out. Then Webhooks → POST the canonical payload to Zap B. Map clientId, firstName, custom.tbt_* from the table. Do not invent a path. |
| Zap B step | Module |
|---|---|
| B6 Task | Webhooks by Zapier → Custom Request. Task/activity URL they issued. Title from broker_task_title, body from broker_task_body, linked to contact_id. |
| B7 Note | Webhooks → Custom Request. Note URL they issued. Body from crm_note. |
| B8 Stamp | Webhooks → Custom Request. Update/patch URL they issued. custom.tbt_loyalty_state = touched, custom.tbt_last_loyalty_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].
- If the API cannot filter by gap, pull a tighter set (settled / current clients) and let blueprint 02 drop anyone below 25 bps.
- Do not widen the query to pull TFNs, ID numbers or full account numbers.
- Joint applications: one broker-task target per household unless they have asked to be written to separately.
- Leave
auto_email_clientasfalse. Default is email the broker, not the client.
01e)
If the key is refused, export Salestrekker’s settled book (current rate, new-money rate, gap) into 05-templates/Google-Sheet-Bridge-template.csv and import 01e-TBT-Loyalty-Tax-Watch-GoogleSheets-Bridge.blueprint.json the same week. Stamp the sheet so they are not hit twice in a week. Add a note back in Salestrekker by hand that week if you need it on the file.
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.