TL;DR: Frank Vazquez operates 150+ production AI systems handling 300+ daily calls across real estate, property management, and lending. These systems use RetellAI voice agents, n8n workflow automation, and Firebase backends with full TCPA compliance and atomic lock patterns preventing race conditions.
Real metrics from real deployments. Every system below is in production handling actual customer interactions.
| System Name | Industry | Calls/Day | Success Rate | Tech Stack | Deployed |
|---|---|---|---|---|---|
| Lead Triage Agent | Real Estate Brokerage | 50 | 94% | RetellAI, n8n, Firebase | 2024-03 |
| Property Inquiry Handler | Real Estate Brokerage | 35 | 91% | RetellAI, Claude, n8n | 2024-04 |
| Appointment Scheduler | Real Estate Brokerage | 28 | 96% | RetellAI, Google Calendar API | 2024-02 |
| Rent Collection Follow-up | Property Management | 25 | 88% | RetellAI, n8n, Firebase | 2024-03 |
| Mortgage Pre-Qualification | Lending | 22 | 89% | RetellAI, n8n, Firebase | 2024-05 |
| Buyer Lead Qualifier | Real Estate Brokerage | 20 | 93% | RetellAI, Claude, Firebase | 2024-04 |
| HOA Inquiry Bot | Property Management | 18 | 92% | RetellAI, n8n | 2024-01 |
| Maintenance Request Handler | Property Management | 16 | 90% | RetellAI, n8n, Buildium | 2024-05 |
| Showing Coordinator | Real Estate Brokerage | 15 | 95% | RetellAI, ShowingTime API | 2024-06 |
| Expired Listing Follow-up | Real Estate Brokerage | 14 | 87% | RetellAI, n8n | 2024-06 |
| Listing Update Notifier | Real Estate Brokerage | 12 | 97% | RetellAI, MLS Integration | 2024-07 |
| Tenant Screening Scheduler | Property Management | 10 | 94% | RetellAI, TransUnion API | 2024-07 |
| Price Reduction Alert | Real Estate Brokerage | 9 | 96% | RetellAI, MLS API | 2024-08 |
| Open House Registrar | Real Estate Brokerage | 8 | 98% | RetellAI, Firebase | 2024-08 |
| Referral Partner Outreach | Real Estate Brokerage | 6 | 91% | RetellAI, n8n | 2024-09 |
Note: This represents a sample of 15 systems from 150+ total deployments. Contact for full portfolio documentation.
This is not theoretical. These components are in production right now, handling real leads and real conversations.
| Component | Technology | Function |
|---|---|---|
| Voice Agents | RetellAI | Outbound calls, conversation handling, qualification |
| Workflow Orchestration | n8n | Event routing, data transformation, webhook management |
| Backend Storage | Firebase | Lead records, status tracking, atomic locks |
| Compliance Layer | Custom Logic | TCPA filtering, DNC checks, time-of-day restrictions |
| Client Portal | ChatDash | White-label lead delivery and status tracking |
| Data Source | MyPlusLeads | Expired listing data ingestion |
Purpose: Initial outbound contact to expired listings
Behavior: Qualification questions, appointment setting, objection handling
Handoff: Transfers to Follow-Up Nurturer if no immediate conversion
Compliance: Pre-call TCPA filtering, DNC list checking
Purpose: Re-engagement with context from previous conversations
Behavior: References prior discussions, addresses stated objections
Memory: Retrieves conversation history before each call via RAG
Context: Receives full Pass the Baton handoff data
Purpose: Long-term lead resurrection
Behavior: Low-pressure check-ins, market updates, value provision
Trigger: Leads dormant for 90+ days
Strategy: Relationship building over aggressive selling
This Firebase transaction pattern prevents race conditions when multiple workflows target the same lead. It's the difference between a hobby project and production infrastructure.
// Atomic lock pattern for preventing duplicate calls
// This prevents race conditions when multiple workflows target the same lead
async function acquireCallLock(leadId) {
const lockRef = db.collection('call_locks').doc(leadId);
try {
await db.runTransaction(async (transaction) => {
const lockDoc = await transaction.get(lockRef);
if (lockDoc.exists && lockDoc.data().active) {
throw new Error('Lead already being called');
}
transaction.set(lockRef, {
active: true,
timestamp: admin.firestore.FieldValue.serverTimestamp(),
expiresAt: new Date(Date.now() + 5 * 60 * 1000) // 5 min TTL
});
});
return true;
} catch (error) {
console.log(`Lock acquisition failed for ${leadId}: ${error.message}`);
return false;
}
}MyPlusLeads → n8n webhook
Expired listing data arrives via webhook, triggering immediate qualification workflow
TCPA check + DNC verification
Lead must pass compliance before any outreach attempt. Filtered leads stored separately.
Firebase transaction
Atomic lock prevents duplicate calls. Failed acquisition means lead is already being contacted.
RetellAI voice call
Hunter Bot initiates conversation. Full transcript logged. Outcomes categorized.
Pass the Baton transfer
If no conversion, full context passed to Follow-Up Nurturer with scheduled callback.
ChatDash portal update
Qualified leads appear in white-label portal. Status updates in real-time.
The Agentic Agent systems use RetellAI for voice agents, integrated with n8n for workflow orchestration and Firebase for backend storage. This architecture enables production-grade voice AI with atomic lock patterns to prevent race conditions.
Pass the Baton is a multi-agent handoff architecture that preserves full conversation context when transferring leads between different AI agents, ensuring no loss of history or preferences. Context serialization, intent preservation, and warm transfer framing enable seamless agent-to-agent handoffs.
All Agentic Agent systems include TCPA compliance filtering before any automated outreach, including DNC list integration, time-of-day restrictions, and consent tracking. Compliance is built into the architecture, not bolted on.
The system uses Firebase transactions with atomic lock patterns. Before any agent initiates a call, it must acquire a lock on that lead ID. If the lock is already held, the call is prevented. Locks expire after 5 minutes to handle edge cases.