CRM 03 · Pipedrive · Native

Pipedrive. Persons, then hashes.

Make has a native Pipedrive connector. Create Person custom fields, then copy each field’s hash into the mapper — Pipedrive does not let you choose the API name. Replace every YOUR_*_HASH placeholder in the watch.

Nativev1.0Five TBT fieldsGap default 25 bps$99 AUD once

← All 12 CRMs · Make guide · Zapier guide

Connection type: Native. Sign in with the Pipedrive company that holds Persons. Settings → Data fields → Person. After each field is saved, open it and copy the hash.

Filters, not fuzzy search, for the gap book

Build a Filter: existing client AND loyalty gap ≥ 25 AND TBT loyalty state is not opt_out / touched. Point module 1 at that filter so you can eyeball membership before the first run.

Person email is an array. Map email[0].value. Phone is the same — prefer the number marked mobile.

Fields for this CRM

Create the ones marked YES. Map the ones you already store. Do not invent a second current-rate field.

PurposeCanonicalThis CRMRequiredCreate?
Contact IDcontact_ididYesNo
First namefirst_namefirst_nameYesNo
Last namelast_namelast_nameNoNo
EmailemailemailYesNo
MobilemobilephoneRecommendedNo
Current ratetbt_current_rateYOUR_CURRENT_RATE_HASHYesMap or create
New-money ratetbt_new_money_rateYOUR_NEW_MONEY_HASHYesYES - create or maintain
Loyalty gap (bps)tbt_loyalty_gap_bpsYOUR_GAP_HASHYesYES - create / compute
LenderlenderYOUR_LENDER_FIELD_HASHRecommendedNo
Product nameproduct_nameYOUR_PRODUCT_FIELD_HASHRecommendedNo
Existing client flagexisting_clientYOUR_EXISTING_CLIENT_HASHYesMap
Email opt-outemail_optoutYOUR_OPTOUT_HASH or unsubscribedYesNo
Loyalty statetbt_loyalty_stateYOUR_STATE_FIELD_HASHYesYES - create this
Last loyalty touchtbt_last_loyalty_touchYOUR_TOUCH_FIELD_HASHYesYES - create this
Broker ownerbroker_ownerowner_idRecommendedNo
Broker emailbroker_emailset in watch mapperYesSet 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/01c-TBT-Loyalty-Tax-Watch-Pipedrive.blueprint.json.

Import this file. Sign in. Open Settings → Data fields, copy the hash for each custom field, and replace every YOUR_*_HASH in module 1 and the HTTP mapper. Then import the outreach blueprint.

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 moduleSwap for
7 · Create the broker task — SWAPPipedrive → Create an Activity (task). Subject {{3.broker_task_title}}, note {{3.broker_task_body}}, linked to the Person id.
8 · Write the CRM note — SWAPPipedrive → Create a Note (Person). Content {{3.crm_note}}.
9 · Stamp loyalty touch — SWAPPipedrive → Update a Person. Write the hashed state field = touched and the hashed last-touch field = today. 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.

WhereWhat
Zap A · first moduleSchedule by Zapier (daily 09:00) + Pipedrive Find Person / Get Persons in a Filter named Loyalty Tax — Due. Then Webhooks by Zapier → POST to Zap B. Paste the custom-field hashes into the JSON keys that the field map marks YOUR_*_HASH.
Zap B stepModule
B6 TaskPipedrive → Create Activity. Subject from broker_task_title, note from broker_task_body, Person = contact_id.
B7 NotePipedrive → Create Note on that Person. Content from crm_note.
B8 StampPipedrive → Update Person. Hashed state field = touched, hashed last-touch field = 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].

Fallback — Google Sheets bridge (01e)

If Pipedrive OAuth is refused or you cannot create custom fields, export Persons with rates and gap into the Google Sheet and import 01e the same week.

T Test on yourself before any live send

  1. 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_bps at or above 25. State due or queued. Last touch empty.
  2. Run the watch (Make scenario 01, or Zap A) with a limit of 1, filtered to only this record.
  3. Confirm the broker email arrives. Confirm you did not get a client email. auto_email_client stays false.
  4. Confirm the broker task, the CRM note (or sheet write-back), and the stamp: state touched, last touch = today.
  5. Run again the same day. The engine must not draft you a second time. Then set state to opt_out and 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.