Zapier
Send iMessage from any Zapier trigger and route replies back into your stack, with no code.
Outbound: any trigger sends a message
- New Zap, pick your trigger (new row, new form submission, CRM stage change, whatever you already run).
- Action: Webhooks by Zapier, event Custom Request.
- Method POST, URL
https://api.bluereacher.com/v1/messages. - Headers:
Authorization: Bearer brk_your_api_key
Content-Type: application/json- Data (as raw JSON, not the key-value fields, so nesting stays intact):
{
"to": "{{phone}}",
"message": "Hi {{first_name}}, it's Marcus from Northside. Saw your enquiry come through, want me to send times?",
"metadata": { "crm_id": "{{record_id}}" }
}Map metadata.crm_id to whatever ID your trigger step already returns, and keep your own phone-to-record mapping for the inbound side; webhook events identify the contact by phone number.
Formatting phone numbers
Zapier's Formatter step, Numbers, Format Phone Number, converts to E.164. Put it between the trigger and the webhook action and map its output to to. Skipping this is the most common cause of validation failures in Zapier builds.
Inbound: replies into your stack
- New Zap, trigger: Webhooks by Zapier, Catch Hook.
- Copy the custom webhook URL Zapier gives you.
- Register it as your Blue Reacher webhook endpoint.
- Send yourself a test message and reply to it, so Zapier can sample a real payload.
- Add a Filter step: continue only if
eventexactly matchesmessage.received. - Add your action: look up the CRM record by the phone number in
data.phone_number, post to Slack, create a task, whatever your team needs.
The payload fields are listed in connecting other CRMs.
What Zapier cannot do
Catch Hook does not verify the HMAC signature, so a Zapier endpoint accepts any POST to that URL. The URL is unguessable, which is adequate for routing a reply into Slack and not adequate for anything that writes to a system of record or triggers a payment. For those, run a small handler that verifies x-bluereacher-signature and calls Zapier afterward, or use n8n where you can verify in a code node.
Notify a human fast
The highest-value Zap in most accounts is the simplest: on message.received, post to a Slack channel with the contact name and the reply text. Reply speed drives close rate, and a notification beats a dashboard nobody has open. See deliverability for why the clock matters.
Handling opt-outs
Add a second Filter branch for event equals contact.opted_out and have it flag the record in your CRM. Sends are blocked platform-side either way, but your team should see the flag before they work the record.

