Angi Lead Instant Reply (Webhook + AI SMS)
The Problem
Angi leads cost $50-300 each and fan out to 3-5 contractors simultaneously. Angi has no native Zapier trigger and no reply-back API, so most contractors check email every few hours and lose most of their leads to faster competitors. This recipe uses Angi's free direct webhook (you email crmintegrations@angi.com to turn it on) to push leads straight into a Zapier Catch Hook. From there, ChatGPT generates a personalized SMS using the project survey details and Twilio fires it to the customer's phone in under 30 seconds. The reply goes through your own Twilio number, not through Angi, so you also need to forward inbound Twilio SMS into Slack so the CSR sees the customer's replies.
How It Works
New Angi or HomeAdvisor lead pushed to a Zapier Catch Hook (direct webhook from Angi)
Zapier parses the webhook JSON, filters for SMS consent, ChatGPT generates a personalized SMS using the survey details, Twilio delivers it to the customer, and Slack alerts the CSR in parallel.
Customer receives a personalized SMS in 15-30 seconds referencing their specific job. CSR alerted in Slack with full lead context. 2-3x booking rate at the same lead spend.
Importable Templates
PRD
# Product Requirements Document
Recipe 112 — Angi Lead Instant Reply (Webhook + AI SMS)
THE AI TRADES Platform
---
Recipe Slug: `angi-lead-instant-reply`
Recipe Number: 112
Rank: 112 | Tier: 2
Difficulty: No-Code Flow
Time Estimate: 1 hour
Category: Call & Lead Handling
Software: Angi, Zapier, Twilio, ChatGPT
Roles: CSR, Owner
Trades: All
Principles: Speed Wins the Job
---
1. Recipe Overview
Angi leads cost $50-300 each. Most Angi leads also go to 3-5 other contractors at the same time. The ones that book are almost always the ones that responded in under 5 minutes.
Angi does not have a native Zapier trigger app and they do not offer a reply-back API. What they do offer is a direct webhook that pushes every lead to a URL you control the instant it comes in. This recipe wires that webhook into Zapier, generates an AI-written SMS through ChatGPT, and fires it to the customer's phone via Twilio. End-to-end in under 30 seconds.
Input: New Angi lead pushed to a Zapier Catch Hook webhook
Transformation: Zapier parses the payload, ChatGPT generates a personalized SMS, Twilio sends it to the customer's opted-in phone number. A parallel branch alerts the CSR in Slack.
Output: Customer receives a personalized SMS within 30 seconds referencing their specific job. 2-3x the normal Angi booking rate at the same lead spend.
---
2. The Problem
Angi Sends Leads Faster Than You Can See Them
Angi pushes the same lead to multiple contractors simultaneously. The homeowner is usually on the phone with the first contractor who responds, which means every minute you wait is a minute you are losing the lead.
The Angi lead-routing reality:
- Angi Ads and HomeAdvisor leads fan out to 3-5 contractors per lead
- Lead cost: $50-$300 depending on trade and market
- Many contractors treat Angi as email-only and check it every few hours
- First-response wins the job 78% of the time
- By the time you drive out, read the email, and call back, the customer has booked with someone else
Why Zapier alone does not fix this:
There is no native Angi trigger app on Zapier. If you try to use the Gmail "new email" trigger to watch for Angi notifications, polling delay is 1-15 minutes. By then, the lead is cold. You need a push webhook, not email polling.
---
3. The Solution
Use Angi's direct webhook feature (free, available to any Angi Ads or HomeAdvisor customer) to push leads straight to a Zapier Catch Hook. From there:
1. Zapier Catch Hook receives the Angi JSON payload the instant it is sent
2. Formatter extracts customer name, phone, service type, ZIP, and consent flags
3. Filter checks for SMS consent (Angi payload includes an opt-in flag)
4. ChatGPT generates a personalized SMS using the lead details and your business brief
5. Twilio sends the SMS to the customer
6. Slack alerts your CSR in parallel with full lead context
Total time from lead arrival to SMS delivery: 15-30 seconds.
Expected results:
| Metric | Before (manual) | After (automated) |
|---|---|---|
| Average response time | 30-60 min | Under 30 sec |
| Lead-to-booking rate | 12-18% | 30-40% |
| Cost per booked job (at $150/lead) | $830-$1,250 | $375-$500 |
| CSR manual touches per lead | 5-10 | 1 (the actual call) |
---
4. Prerequisites
| Requirement | Details | Cost |
|---|---|---|
| Angi Ads or HomeAdvisor account | Active lead buyer | Existing |
| Angi account number (SPID) | Found in your Angi dashboard | Free |
| Zapier account | Starter plan is fine for this single Zap | $19.99/mo |
| Twilio account | SMS-enabled number. A2P 10DLC registered. | $1/mo + $0.0079/msg |
| OpenAI API key | GPT-4o-mini is sufficient | ~$0.0002 per reply |
| Slack workspace (optional) | For CSR alerts | Free |
A2P 10DLC warning: Twilio outbound SMS to US consumers requires A2P 10DLC registration. Unregistered numbers get carrier-filtered and your texts never arrive. Registration takes 1-5 business days. Start this first.
---
5. Angi Webhook Setup
Angi does not have a self-serve webhook page. You have to email them to turn it on. The process is simple and free.
Step 1: Create a Zapier Catch Hook
1. In Zapier, create a new Zap
2. Choose Webhooks by Zapier as the trigger app
3. Select Catch Hook as the trigger event
4. Zapier generates a unique webhook URL. Copy it. It looks like:
```
https://hooks.zapier.com/hooks/catch/1234567/abcxyz/
```
Step 2: Email Angi to Enable the Webhook
Send the following to `crmintegrations@angi.com`:
```
Subject: Webhook integration request for account [YOUR SPID]
Hi Angi team,
Please enable webhook lead delivery for my account.
Account Number (SPID): [YOUR ANGI SPID]
Webhook URL: https://hooks.zapier.com/hooks/catch/1234567/abcxyz/
Format: JSON POST
Please confirm once configured and send a test lead so I can verify
the integration end to end.
Thanks,
[YOUR NAME]
[COMPANY NAME]
```
Turnaround is usually 1-3 business days. Angi will POST a test lead once they confirm. Run the Zapier trigger test at that moment to capture the real payload schema.
Step 3: Inspect the Payload
Once the test lead arrives, you will see the full JSON schema in Zapier. Key fields to map:
| Field | Description |
|---|---|
| `firstName`, `lastName` | Customer name |
| `primaryPhone`, `secondaryPhone` | Phone numbers (may include extensions) |
| `email` | Customer email |
| `address`, `city`, `state`, `postalCode` | Location |
| `taskName`, `comments` | Service description |
| `matchType` | Lead match quality |
| `feeAmount` | What this lead cost you |
| `leadSource` | e.g., "HomeAdvisor" or "Angi" |
| `spEntityId`, `companyName` | Your company ID |
| `leadOid` | Unique lead ID |
| `trustedFormUrl` | TCPA compliance reference |
| `automatedContactCompliance` | SMS consent flag |
| `interview` | Array of Q&A pairs from the customer survey |
| `smsEnabled` | Whether SMS is allowed for this lead |
Note: Angi does NOT let you customize the payload schema. Your Zap has to accept what they send.
---
6. Zap Flow Setup
Step 1: Trigger — Webhooks by Zapier, Catch Hook
Already configured in Section 5.
Step 2: Filter — SMS Consent Check
1. Add a Filter by Zapier step
2. Condition: `smsEnabled` is true AND `primaryPhone` exists
3. Without this filter, you risk TCPA violations and carrier filtering
Step 3: Formatter — Clean Phone Number
1. Add a Formatter by Zapier step
2. Type: Numbers → Format Phone Number
3. Input: `primaryPhone`
4. Output format: E.164 (e.g., `+14155550100`)
Twilio requires E.164 formatted numbers.
Step 4: Action — ChatGPT Generate SMS
1. Add an OpenAI (GPT) action
2. Model: `gpt-4o-mini`
3. System prompt: paste the business brief from Section 7
4. User message template:
```
New Angi lead. Here is what the customer told us:
Name: {{firstName}}
Service: {{taskName}}
Comments: {{comments}}
Location: {{city}}, {{state}} {{postalCode}}
Survey answers: {{interview}}
Write a text message reply following the system prompt rules.
Maximum 320 characters. Plain text. No URLs.
```
Step 5: Action — Twilio Send SMS
1. Add a Twilio action
2. Event: Send SMS
3. From Number: your registered Twilio number
4. To Number: the E.164 formatted phone from Step 3
5. Message: the ChatGPT output from Step 4
Step 6 (Parallel): Action — Slack CSR Alert
1. Add a Slack action
2. Channel: `#paid-leads` (or whatever you use)
3. Message template:
```
NEW ANGI LEAD ($${feeAmount})
Name: {{firstName}} {{lastName}}
Phone: {{primaryPhone}}
Service: {{taskName}}
Location: {{city}}, {{state}} {{postalCode}}
Customer details:
{{comments}}
Auto-text sent at {{timestamp}}
Next step: Call the customer within 5 minutes.
```
Step 7 (Optional): Google Sheets Log
Log every lead to a Google Sheet for metric tracking. See Section 12.
---
7. Business Brief (System Prompt)
Paste this into the ChatGPT action. Fill in the brackets.
```
You are texting a brand-new Angi lead on behalf of [COMPANY NAME],
a [TRADE] contractor in [CITY/REGION]. The customer just submitted
a request and picked a handful of contractors including us. We need
to be the first to reply, and the reply needs to feel like a real
person wrote it, not a bot.
Rules:
1. Maximum 320 characters (two standard SMS segments).
2. Start with the customer's first name.
3. Name your company once, early.
4. Reference one specific detail from their request so they know you
actually read it.
5. Ask a simple qualifying question or offer to call. Do not ask more
than one question per message.
6. Never quote a price.
7. No URLs, no emoji, no exclamation marks.
8. Sound like a local contractor, not a corporate form letter. Avoid
"I would be delighted," "at your earliest convenience," and any
stiff language.
9. End with your first name and the company name.
Company: [COMPANY NAME]
Your name: [OWNER/CSR FIRST NAME]
Phone: [PHONE]
Service area: [LIST]
Specialties: [LIST]
Things we do not do: [LIST]
```
---
8. Example Exchange
Angi webhook payload (abridged):
```json
{
"firstName": "Marcus",
"lastName": "Rivera",
"primaryPhone": "5558675309",
"smsEnabled": true,
"taskName": "HVAC Repair - Central Air",
"city": "Austin",
"state": "TX",
"postalCode": "78704",
"comments": "Central AC blowing warm air since yesterday. Outside unit is running. House is getting to 85 inside.",
"feeAmount": 165,
"leadSource": "Angi"
}
```
Generated SMS reply:
```
Hi Marcus, this is Dave at Capitol HVAC. Sounds like your AC is
running but not cooling — could be a refrigerant or capacitor issue,
both common in this heat. Can I send a tech out today? What is the
best time window for you? — Dave, Capitol HVAC
```
- Character count: 264
- Delivery time: 18 seconds after webhook fired
- References specific detail: yes (running but not cooling)
- Clear next step: yes (asking for time window)
---
9. Important: Replies Come Back to You, Not Angi
Unlike Yelp, Angi has no reply-back API. This means:
- The SMS comes from your Twilio number, not through Angi
- The customer's reply goes directly to your Twilio number
- You need a way to receive replies (Twilio inbox, Slack integration, or a two-way SMS app)
Recommended: Forward Twilio Replies to Slack
1. In Twilio, set up a webhook for inbound SMS
2. Point it to a new Zap: Twilio New SMS → Slack Message
3. Post incoming replies to the same `#paid-leads` channel
Your CSR sees the full conversation thread in Slack without needing to log into multiple tools.
---
10. Stop Conditions
Your Zap should NOT send an SMS in these cases. Add filter steps as needed.
| Condition | Detection | Action |
|---|---|---|
| No SMS consent | `smsEnabled` is false | Skip SMS. Alert CSR only. |
| No phone number | `primaryPhone` is empty | Skip SMS. Alert CSR with email instead. |
| Outside service area | ZIP not in your allow list | Skip SMS. Alert CSR to decline. |
| Service you do not offer | `taskName` matches your blocklist | Skip SMS. Alert CSR to decline. |
| Duplicate lead | `leadOid` already in your log | Skip everything. Angi sometimes double-fires. |
| After-hours emergency | Outside hours AND service is emergency | Still send SMS but use emergency template |
---
11. Testing Checklist
| # | Test | Expected Result | Pass? |
|---|---|---|---|
| 1 | Zapier Catch Hook URL receives Angi test lead | Full JSON payload visible in Zapier | ☐ |
| 2 | Filter correctly blocks leads with `smsEnabled: false` | Zap stops at filter step | ☐ |
| 3 | Phone number formats to E.164 | Output starts with +1 and is 12 chars | ☐ |
| 4 | ChatGPT generates reply under 320 chars | Character count stays in range | ☐ |
| 5 | Twilio sends the SMS | Status: delivered | ☐ |
| 6 | SMS arrives on a test phone | Received within 30 seconds of webhook | ☐ |
| 7 | Slack alert posts with all fields | All merge fields populated | ☐ |
| 8 | Duplicate webhook suppressed | Log matches prevent double-send | ☐ |
| 9 | Out-of-area lead blocked | Filter stops flow, CSR still notified | ☐ |
| 10 | Customer reply routes to Slack | Reply flow works end-to-end | ☐ |
| 11 | Reply references a specific detail from the lead | AI is actually reading the payload | ☐ |
| 12 | No URLs or emoji in any output | System prompt is being followed | ☐ |
Tip: Angi will send a test payload during setup. Use it. Do not try to fake the JSON, the real one has fields you will not think to add.
---
12. Cost Breakdown
Monthly at 30 Angi Leads
| Item | Cost |
|---|---|
| Zapier Starter plan | $19.99 |
| Twilio SMS (30 outbound at $0.0079) | $0.24 |
| Twilio number rental | $1.00 |
| OpenAI API (GPT-4o-mini, 30 leads) | $0.01 |
| Total | ~$22/mo |
Compared to Alternatives
| Option | Cost at 30 Leads/Mo |
|---|---|
| This recipe | $22/mo flat |
| LeadTruffle (Angi autoresponder) | $79/mo |
| Hatch | $149+/mo |
| Manual CSR watching email | Lost leads |
Break-even against LeadTruffle at 3 leads/month. Everyone with paid Angi leads should be running this.
---
13. Metrics to Track
Log every webhook-triggered reply to Google Sheets with:
| Column | Why |
|---|---|
| Lead OID | Unique key, duplicate detection |
| Lead source | Angi vs HomeAdvisor |
| Lead cost | ROI calculation |
| Timestamp received | When Angi pushed |
| Timestamp SMS sent | Your actual response time |
| Delta (seconds) | Speed metric |
| Service type | Segmentation |
| ZIP | Service area |
| SMS consent flag | Compliance tracking |
| AI reply text | Spot weird outputs |
| Customer replied? | Engagement rate |
| Booked? | Conversion rate |
| Revenue | ROI tracker |
Review weekly. The key numbers:
- Response time: 95%+ under 30 seconds
- Send-rate: 70%+ of leads get an SMS (the rest blocked by consent/filters)
- Reply rate: 35-50% of SMS recipients reply
- Booking rate: 25-35% of replies turn into jobs
---
14. TCPA Compliance Notes
Angi collects SMS opt-in consent as part of their lead submission flow. The payload includes a TrustedForm URL and consent flag. You must:
1. Always respect the `smsEnabled` / consent flag. If false, do not text.
2. Honor STOP replies. Twilio handles this automatically at the carrier level, but double-check your inbound SMS flow does not re-engage opted-out numbers.
3. Keep the TrustedForm URL in your logs. It is your proof of consent if a customer ever files a TCPA complaint.
4. First message must identify your business. The system prompt enforces this.
This recipe is designed to be TCPA-compliant when configured correctly. If you are ever unsure, consult a lawyer who specializes in telemarketing compliance. A single TCPA violation can cost $500-$1,500 per message.
---
Recipe 112 — Angi Lead Instant Reply (Webhook + AI SMS)
THE AI TRADES Platform
Difficulty: No-Code Flow | Setup: 1 hour | Category: Call & Lead Handling