The Broker Times · Shop product

The Fixed Expiry Engine - Make.com setup guide

Import the watch for your CRM, import the outreach middle, test on yourself. Default: email the broker, not the client.

About twenty-five minutes for a native CRM. Longer if you are wiring HTTP for an API CRM. Zapier users: stop here and open ZAPIER-Setup-Guide.md. Zapier cannot import these files.

Australian English. Existing clients only. Default: the engine emails you, not the client.

What you will have at the end

Two Make scenarios running on a weekday morning:

  1. A watch that reads your CRM (or the Google Sheet) and posts a canonical payload.
  2. An outreach scenario that runs the same middle for every CRM: consent gate, 90 / 60 / 30 window, OpenAI draft, broker email, CRM note, stamp.

Only the first and last steps touch the CRM. Do not rebuild the middle for each system.

Before you open Make

  1. Create or map the fields in 05-templates/CRM-Field-Map.csv. At minimum you need a fixed-expiry date and the three stamp fields (tbt_fixed_expiry_state, tbt_last_fixed_expiry_touch, tbt_last_window_sent).
  2. Read the section for your CRM in CRM-SCENARIOS.md.
  3. Add yourself as a test client with a fixed-expiry date 90, 60 or 30 days out. Mark yourself an existing client.
  4. Have an OpenAI API key and a real mailbox at your business domain.

If the fields are missing, the imported modules show as invalid. Create them first.

Pick your watch file

Your CRMFileConnection type
HubSpot02-make-blueprints/01-TBT-Fixed-Expiry-Watch-HubSpot.blueprint.jsonNative sign-in
Salesforce01b-TBT-Fixed-Expiry-Watch-Salesforce.blueprint.jsonNative sign-in
Pipedrive01c-TBT-Fixed-Expiry-Watch-Pipedrive.blueprint.jsonNative sign-in
Zoho CRM01d-TBT-Fixed-Expiry-Watch-Zoho.blueprint.jsonNative sign-in
ActivePipe01e-TBT-Fixed-Expiry-Watch-GoogleSheets-Bridge.blueprint.jsonSheet export
BrokerEngine01e (same file)Sheet export
AFG Suite36001e (same file)Sheet export
SalestrekkerNo watch file. HTTP + 02-notes.md, or 01e until the aggregator grants access.API
ConnectiveSame as SalestrekkerAPI
LMG MyCRMSame as SalestrekkerAPI
EffiSame as SalestrekkerAPI
Finsure InfynitySame as SalestrekkerAPI

Everyone also imports 02-TBT-Fixed-Expiry-Outreach.blueprint.json.

Step 1. Import the outreach scenario first

You need its webhook URL before the watch can post.

  1. In Make, click Create a new scenario.
  2. Click the three dots (bottom centre) → Import Blueprint.
  3. Choose 02-TBT-Fixed-Expiry-Outreach.blueprint.json.
  4. The canvas should show nine modules: webhook, OpenAI (with the consent filter), JSON parse, router, broker Gmail, client Gmail (off), then three HTTP modules labelled SWAP.
  5. Click module 1 (the webhook). Click Create a webhook or Add. Copy the URL. It looks like https://hook.make.com/....
  6. Leave auto_email_client alone. The watch sends false. Module 6 will not run.

Save. Do not turn it on yet.

Step 2. Connect OpenAI and Gmail on the outreach scenario

  1. Click module 2. Add an OpenAI connection. Paste your API key. The model is gpt-4o-mini. Leave it unless you have a reason to change it.
  2. Click module 5. Add a Gmail (or Google Email) connection for the mailbox that should receive broker drafts. This must be a mailbox you read.
  3. Module 6 uses the same Gmail connection. You can connect it now so it is ready. The filter still holds it off.
  4. Replace [YOUR FIRST NAME], [YOUR BUSINESS NAME] and [YOUR BROKER EMAIL] later, in the watch payload. The outreach scenario reads them from the webhook.

Step 3. Import the watch for your CRM

Native: HubSpot, Salesforce, Pipedrive, Zoho CRM

  1. Create a second scenario. Import the matching watch file.
  2. Click module 1. Sign in.

- HubSpot: pick the portal that holds settled clients. Create the four properties before this sign-in if you have not. - Salesforce: pick the org. Confirm the SOQL object is the one that has the expiry date (Contact by default). If the date lives on a Loan object, change the SOQL. Create the __c fields first. - Pipedrive: pick the company. Open Settings → Data fields, copy the hash for each custom field, and replace every YOUR_*_HASH in module 1 and module 2. - Zoho CRM: pick the org. Module is Contacts. Change it if you store the expiry on Deals or a custom module.

  1. Click module 2. Paste the outreach webhook URL into the URL field, replacing https://hook.make.com/YOUR_OUTREACH_WEBHOOK.
  2. In the JSON body, replace:

- [YOUR BROKER EMAIL] - [YOUR FIRST NAME] - [YOUR BUSINESS NAME]

  1. Leave "auto_email_client": "false".

HubSpot note: the watch filter requires lifecyclestage = customer. If your settled clients use another stage, change that one condition.

Salesforce note: the watch filter expects tbt_existing_client__c not false. If you filter by Account type instead, change the SOQL and the filter.

Bridge: ActivePipe, BrokerEngine, AFG Suite360 (and fallback)

  1. In Google Sheets, File → Import → upload 05-templates/Google-Sheet-Bridge-template.csv. Name the tab Fixed expiry.
  2. Export from your CRM every contact that has a fixed-expiry date. Map columns to the template. existing_client must be TRUE. source_crm is ActivePipe or BrokerEngine or AFG Suite360.
  3. Create a second Make scenario. Import 01e-TBT-Fixed-Expiry-Watch-GoogleSheets-Bridge.blueprint.json.
  4. Click module 1. Sign in to Google. Pick the spreadsheet. Confirm the tab name is Fixed expiry.
  5. Click module 2. Paste the outreach webhook URL. Replace the three [YOUR ...] placeholders if the sheet row does not already have broker_email.

Re-export the sheet when dates change. The stamp writes back to the sheet only after you swap module 9 for Google Sheets Update a Row. Until you do that, stamp by hand after a test run so you are not hit twice.

API: Salestrekker, Connective, LMG MyCRM, Effi, Finsure Infynity

  1. Ask the aggregator (or the vendor) to grant API access. Do not scrape a login.
  2. If they say no, or they have not answered, use the sheet bridge above. The middle does not change.
  3. If they say yes, do not import a native watch. Build a two-module scenario yourself:

- Module 1: HTTP Make a request, using the URL and token they gave you, filtered to existing clients with an expiry in the next 95 days. - Module 2: HTTP POST the canonical payload in 02-make-blueprints/02-notes.md to the outreach webhook.

  1. Map every key from 05-templates/CRM-Field-Map.csv. Confirm names with the aggregator. The names in the map are labels, not a promise the vendor uses them verbatim.
  2. Leave auto_email_client as false.

Step 4. Swap the last three outreach modules for your CRM

Blueprint 02 ends with three HTTP modules pointed at dummy SWAP_FOR_YOUR_CRM_* URLs. They are labelled on the canvas. Replace them. Do not leave them as HTTP calls to hook.make.com/SWAP_....

ModuleJobNative swapSheet swapAPI swap
7Create a broker taskHubSpot / Salesforce / Pipedrive / Zoho "Create a Task" (or Activity)Skip, or add a row in a Tasks tabHTTP POST a task, see 02-notes.md
8Write a CRM noteNative "Create a Note" (HubSpot: POST /crm/v3/objects/notes)Google Sheets Update a Row, write crm_note into a Notes columnHTTP POST a note
9Stamp the windowNative Update the contactUpdate the same row: tbt_fixed_expiry_state, tbt_last_fixed_expiry_touch, tbt_last_window_sentHTTP PATCH the stamp fields

Stamp body (every CRM):

tbt_fixed_expiry_state      = touched_{{3.window}}
tbt_last_fixed_expiry_touch = today
tbt_last_window_sent        = {{3.window}}

If you skip the stamp, the same person is drafted every morning. That is the one module you cannot "do later".

Step 5. Scheduling and limits

Do not raise the limit in week one.

Step 6. Test on yourself

  1. Turn the outreach scenario on (the webhook must be listening).
  2. On the watch, click Run once.
  3. You should receive one broker email. You should not receive a client email.
  4. Check the CRM (or the sheet): task, note, stamp.
  5. Click Run once again. You should not get a second draft for the same window.
  6. Set your test record to opt_out. Run once. Nothing should draft.

If step 5 drafts you again, the stamp is not writing. Fix that before anyone else is in the set.

Read the draft out loud. If it quotes a rate, invents a saving, or says they will be cheaper on variable, do not send it. Check the prompt has not been edited. See 04-compliance/02-What-the-AI-Must-Never-Say.md.

Step 7. The client-email switch (leave this)

When, and only when, the loop above is clean:

  1. Open the watch, module 2, JSON body.
  2. Change "auto_email_client": "false" to "auto_email_client": "true".
  3. Confirm module 6 is connected to a real, monitored mailbox at your business domain.
  4. Confirm you will honour UNSUBSCRIBE the same day (by hand is fine).
  5. Test on yourself again. Confirm the client email arrives, and that UNSUBSCRIBE is in it.
  6. Run a second time. Confirm you are not emailed twice for the same window.

There is no reply-triage blueprint in this pack. If you cannot honour an opt-out the same day, leave the switch off.

Placeholders you must replace

Search both scenarios for:

What the consent gate checks

On outreach module 2. Three bands (90 / 60 / 30). Every condition inside a band must pass:

The same gate runs for Salesforce, HubSpot, Pipedrive, Zoho CRM, the five API CRMs, and the three sheet CRMs. That is intentional.

If a module is red after import

Almost always a missing field or a missing connection.

Do not