Report sales from Zapier or Make
When a lead you bought turns into a sale, tell us. Reported sales flow back to the ad platforms that found the lead, so the ads learn which leads become customers and find more like them.
This guide sets up one automation: when a deal is won in your CRM, report it to Sent 24/7. It takes about ten minutes and needs no changes to your CRM. We find the lead by the customer’s phone or email, so you don’t need to store our lead ID anywhere.
Before you start
Section titled “Before you start”- Your postback API key. In the buyer portal, open API and generate
your key. It starts with
pk_live_and is shown once, so copy it somewhere safe. Keep it out of shared notes: anyone with it can update your leads. - Your won stage. Most accounts use
closed_won. The portal’s API page lists the stages your account accepts. - A Zapier or Make account that can send webhooks. Webhooks by Zapier needs a paid Zapier plan. If our leads already reach you through a Zapier catch hook, you have one.
What you send
Section titled “What you send”Every request is a POST to:
https://api.sent247.com/api/v1/postback/dispositionwith these two headers:
Authorization: Bearer pk_live_your_keyContent-Type: application/jsonand a JSON body like this:
{ "phone": "0412 345 678", "stage": "closed_won", "value": "12500", "currency": "AUD", "notes": "6.6kW system, signed today", "ignore_unmatched": "true"}| Field | Required | What to map |
|---|---|---|
phone |
phone or email |
The customer’s phone. Any format works: 0412 345 678, +61412345678 and 61412345678 all match. |
email |
phone or email |
The customer’s email. Case and spaces don’t matter. Send both when you have them. |
stage |
yes | Your won stage, usually closed_won. The stage name as the portal shows it (e.g. Closed Won) works too. |
value |
no | The deal amount. 12500, "12500" and "$12,500" are all read as 12500. |
currency |
no | e.g. AUD. Defaults to your billing currency. |
notes |
no | Anything useful, kept with the update. |
ignore_unmatched |
recommended | Set to true. See below. |
Set it up
Section titled “Set it up”-
Trigger: your CRM. Create a Zap and pick your CRM. Choose the event that fires when a deal or opportunity changes stage, for example Updated Deal Stage. Connect your CRM account and pull in a test deal.
-
Filter: only won deals. Add Filter by Zapier. Set it to continue only if the deal’s stage (or status) exactly matches your CRM’s won stage, e.g.
Won. -
Action: Webhooks by Zapier, POST. Add Webhooks by Zapier and choose the POST event. Fill it in:
- URL:
https://api.sent247.com/api/v1/postback/disposition - Payload Type:
json - Data: one row per field. Put the key on the left and map the
value from your CRM on the right:
phone→ the contact’s phoneemail→ the contact’s emailstage→ typeclosed_wonvalue→ the deal valuecurrency→ typeAUDignore_unmatched→ typetrue
- Headers:
Authorization→Bearer pk_live_your_keyIdempotency-Key→ map the deal’s ID (optional, stops a replayed Zap from reporting the same sale twice)
Leave the other options at their defaults.
- URL:
-
Test the step (see Test it safely first), then publish the Zap.
-
Trigger: your CRM. Create a scenario and add your CRM’s module that watches deals or opportunities, for example Watch Deals. Connect your CRM account.
-
Filter: only won deals. Click the link between the two modules and add a filter: the deal’s stage (or status) equal to your CRM’s won stage, e.g.
Won. -
Action: HTTP, Make a request. Add the HTTP app’s Make a request module:
-
URL:
https://api.sent247.com/api/v1/postback/disposition -
Method:
POST -
Headers:
Authorization=Bearer pk_live_your_key, and optionallyIdempotency-Key= the deal’s ID -
Body: raw JSON, content type
application/json. Paste the body below and map your CRM’s fields into the quotes:{"phone": "{{contact phone}}","email": "{{contact email}}","stage": "closed_won","value": "{{deal value}}","currency": "AUD","ignore_unmatched": "true"} -
Parse response: Yes
Keep every mapped value inside quotes. We read
"12500"and"true"correctly, and a quoted value can’t break the JSON when a field is empty. -
-
Run once (see Test it safely first), then switch the scenario on.
Test it safely
Section titled “Test it safely”A real closed_won reports a real sale to our ad platforms, so don’t test
with a made-up win against a real customer. Instead:
- Check the wiring with an address that can’t be a lead. Run the step
once with
phoneleft empty,emailset to[email protected]andignore_unmatchedset totrue. You should get200and{"matched": false}. That proves your key, URL and body are right without touching any lead. - Then wait for a real win. The first genuine sale should come back
with
"matched": trueand the lead, and the lead’s stage in the portal changes to Closed Won.
If you get an error instead, the response says what’s wrong:
| Response | Meaning | Fix |
|---|---|---|
400 phone or email is required |
Both fields were empty or unusable | Check the mapping in your Data or body |
400 stage ... valid stages: ... |
Your account doesn’t have that stage | Use one from the list in the message |
400 value must be a number |
The deal value wasn’t a number | Map the numeric amount field, not a formatted label |
401 |
Key missing, mistyped or revoked | Check the Authorization header starts with Bearer |
403 |
The key isn’t a buyer key | Use your pk_live_ key from the portal |
404 no lead you bought matches |
No match and ignore_unmatched not set |
Set ignore_unmatched to true |
How the match works
Section titled “How the match works”- We only look at leads delivered to your account. Nobody else’s leads can match, and a lead sold to someone else looks exactly like no lead.
- If the same person came to you more than once, the sale goes on the most recent one. A lead that matches both the phone and the email wins over one that matches only one of them.
- We don’t store the phone or email you send. Each call is logged for
troubleshooting with those two fields blanked out, so keep other personal
details out of
notes.
Rejecting a bad lead the same way
Section titled “Rejecting a bad lead the same way”The same pattern works for rejections. POST to
https://api.sent247.com/api/v1/postback/reject with phone or email,
plus a reason your account allows (e.g. wrong_number) and optional
notes. Your account’s rejection window and allowed reasons still apply;
the portal’s API page lists them. See the
postback API reference for every
field.