ย ย ย
ย ย ย
ย ย ย
ย ย ย
ย ย ย
ย ย ย
ย ย ย
ย ย ย
ย ย ย
Dedalus ADK ยท Google Cloud ยท ElevenLabs ยท Brave Search MCP ยท FastAPI
๐ค 14 Specialized AI Agents ย ยทย ๐ ๏ธ 12+ Integrated Tools ย ยทย ๐๏ธ 5 Microservices ย ยทย ๐จ 8 Agentic Design Patterns
Find. Research. Call. Close. โ A comprehensive multi-agent system of 14 specialized AI agents working in concert to automate the entire sales development lifecycle, from geographic lead discovery to AI-powered phone calls and branded email outreach.
Built with Dedalus ADK at Columbia ADI DevFest 2026.
- What It Does
- Architecture & Scale
- System Architecture
- Agent Workflow
- Key Features
- Tech Stack
- How We Built It
- Challenges We Ran Into
- Accomplishments We're Proud Of
- What We Learned
- Project Structure
- Quick Start
- Environment Configuration
- API Reference
- How the AI Works
- Design Patterns
- What's Next
- License
RapidReach is not just a single application โ it's a comprehensive system of 14 specialized AI agents working in concert across 5 microservices. It replaces the entire manual SDR workflow โ prospecting, research, cold-calling, proposal writing, and email outreach โ with an intelligent multi-agent pipeline that runs autonomously end-to-end:
๐ DISCOVER ๐ง RESEARCH ๐ CALL ๐ง EMAIL
โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ
โ Google โโโโโโโโโโถโ Brave โโโโโโโโโโถโEleven โโโโโโโโโโถโ Gmail โ
โ Maps โ โ Search โ โ Labs โ โ API โ
โ Places โ โ + LLM โ โ Voice โ โ + Deck โ
โ API โ โ(Dedalus)โ โ AI โ โ(Dedalus)โ
โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ
Google Maps API Brave Search MCP ElevenLabs Gmail API +
โ find businesses + Dedalus ADK Conversational AI python-pptx
without websites (GPT-4.1/Claude) phone calls via Dedalus ADK
| Step | Agent | Tool / API | What Happens |
|---|---|---|---|
| 1 | Lead Finder | Google Maps Places API + Dedalus ADK | Searches for local businesses without websites in a target city |
| 2 | SDR โ Research | Brave Search MCP via Dedalus ADK | Deep-researches each business โ reviews, competitors, pain points |
| 3 | SDR โ Proposal | Dedalus ADK (Claude Sonnet 4) | Generates a tailored website proposal (generator-critic pattern) |
| 4 | SDR โ Call | ElevenLabs Conversational AI | Places an AI phone call and retrieves transcript |
| 5 | SDR โ Classify | Dedalus ADK (GPT-4.1 + Pydantic) | LLM classifies call outcome: interested / agreed_to_email / not_interested |
| 6 | SDR โ Deck | Dedalus ADK (GPT-4.1) + python-pptx |
Generates a professional PowerPoint business solution deck |
| 7 | SDR โ Email | Gmail API via Google Cloud | Sends branded HTML email with .pptx deck + .ics calendar invite |
RapidReach is built as a production-grade multi-agent system with impressive scale for a hackathon project:
| # | Agent | Type | Model / Runtime |
|---|---|---|---|
| 1 | Lead Finder Coordinator | LLM Orchestrator | Dedalus โ GPT-4.1 |
| 2 | SDR Pipeline Coordinator | Sequential Orchestrator | Direct Python (8-step pipeline) |
| 3 | Research Agent | LLM + MCP Tool | Dedalus โ GPT-4.1 + Brave Search MCP |
| 4 | Proposal Draft Agent | LLM (Creative) | Dedalus โ Claude Sonnet 4 |
| 5 | Fact-Check Agent | LLM (Analytical) | Dedalus โ GPT-4.1 |
| 6 | Phone Call Agent | External API | ElevenLabs Conversational AI |
| 7 | Conversation Classifier | LLM + Pydantic | Dedalus โ GPT-4.1 + Structured Outputs |
| 8 | Deck Generator Agent | LLM + Code Gen | Dedalus โ GPT-4.1 + python-pptx |
| 9 | Email Outreach Agent | API + Template | Gmail API + HTML renderer |
| 10 | Lead Manager Orchestrator | Sequential Orchestrator | Python + Dedalus LLM |
| 11 | Email Checker Sub-Agent | API Reader | Gmail API (fetch + filter) |
| 12 | Email Analyzer Sub-Agent | LLM Classifier | Dedalus โ GPT-4.1 (intent + confidence) |
| 13 | Calendar Organizer Sub-Agent | API Writer | Google Calendar API + Meet |
| 14 | Post-Action Sub-Agent | Data Pipeline | BigQuery + Gmail (mark read) |
graph TB
%% โโ ROW 1: Three blocks across the top โโ
subgraph "๐ฅ๏ธ Dashboard"
UI["๐ฅ๏ธ UI Client<br/><i>FastAPI + WebSocket</i>"]
end
subgraph "๐ Lead Discovery"
LF["๐ Lead Finder Agent<br/><i>Dedalus ADK (GPT-4.1)</i>"]
MAPS["๐บ๏ธ Google Maps<br/><i>Places API</i>"]
end
subgraph "๐ Voice & Email"
XI["๐ AI Phone Call<br/><i>ElevenLabs Conv. AI</i>"]
GMAIL["๐ง Email Sender<br/><i>Gmail API (Google Cloud)</i>"]
end
%% โโ ROW 2: SDR Pipeline spans full width below โโ
subgraph "๐ง SDR Outreach Pipeline ยท 8-Step Sequential"
SDR["๐ง SDR Coordinator<br/><i>Dedalus ADK (GPT-4.1)</i>"]
RA["๐ Research Agent<br/><i>Brave Search MCP + Dedalus ADK (GPT-4.1)</i>"]
PA["โ๏ธ Proposal Agent<br/><i>Dedalus ADK (Claude Sonnet 4)</i>"]
FA["โ
Fact-Check Agent<br/><i>Dedalus ADK (GPT-4.1)</i>"]
CA["๐ท๏ธ Classifier Agent<br/><i>Dedalus ADK (GPT-4.1) + Pydantic</i>"]
DA["๐ Deck Generator<br/><i>Dedalus ADK (GPT-4.1) + python-pptx</i>"]
SDR --> RA --> PA --> FA --> CA --> DA
end
%% โโ ROW 3: Data Layer at the bottom โโ
subgraph "๐พ Data Layer"
BQ["๐พ BigQuery<br/><i>Google Cloud</i>"]
end
%% User triggers (top โ middle)
UI -->|"Find Leads"| LF
UI -->|"Run SDR"| SDR
%% Lead Finder โ Maps + BigQuery
LF -->|"discover"| MAPS
LF -->|"persist leads"| BQ
%% SDR โ Voice & Email (middle โ top-right)
SDR -->|"4. call"| XI
DA -->|"7. email + deck"| GMAIL
%% SDR โ BigQuery (middle โ bottom)
SDR -->|"save session"| BQ
%% Callbacks (dashed, back to UI)
LF -.->|"callback"| UI
SDR -.->|"callback"| UI
%% Styles
style UI fill:#6366f1,stroke:#4f46e5,color:#fff
style LF fill:#10b981,stroke:#059669,color:#fff
style MAPS fill:#4285F4,stroke:#1a73e8,color:#fff
style XI fill:#1a1a2e,stroke:#16213e,color:#fff
style GMAIL fill:#4285F4,stroke:#1a73e8,color:#fff
style SDR fill:#f59e0b,stroke:#d97706,color:#000
style RA fill:#fbbf24,stroke:#f59e0b,color:#000
style PA fill:#fbbf24,stroke:#f59e0b,color:#000
style FA fill:#fbbf24,stroke:#f59e0b,color:#000
style CA fill:#fbbf24,stroke:#f59e0b,color:#000
style DA fill:#8b5cf6,stroke:#7c3aed,color:#fff
style BQ fill:#4285F4,stroke:#1a73e8,color:#fff
| Tool | API / Library | Purpose |
|---|---|---|
| Google Maps Search | Places API (New) | Discover businesses without websites |
| Brave Search MCP | MCP Server | Deep web research on prospects |
| Google Search MCP | MCP Server | Fallback research when Brave unavailable |
| ElevenLabs Phone | Conversational AI API | AI-powered cold calls with transcripts |
| Gmail Send | Gmail API (OAuth2) | Branded HTML email with attachments |
| Gmail Read | Gmail API (OAuth2) | Fetch & filter inbound emails |
| Calendar Create | Google Calendar API | Schedule meetings with Meet links |
| BigQuery CRUD | BigQuery API (ร3 tables) | Persist leads, sessions, meetings |
| Deck Generator | python-pptx + LLM | Professional PowerPoint decks |
| ICS Generator | Custom Python | Calendar invite attachments |
| Email Extractor | Regex + NLP | Parse dictated emails from transcripts |
| Meeting Time Parser | Regex + NLP | Extract scheduling from spoken text |
| UI Callback | HTTP POST + WebSocket | Real-time dashboard event streaming |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MICROSERVICE TOPOLOGY โ
โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ UI Client โ โ Lead Finder โ โ SDR Agent โ โ
โ โ :8000 โโโโบโ :8081 โ โ :8084 โ โ
โ โ (FastAPI + โ โ (Dedalus + โ โ (8-step โ โ
โ โ WebSocket) โ โ Maps API) โ โ pipeline) โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโฌโโโโโโโโ โ
โ โฒ โ โ
โ โ โโโโโโโโโโโโโโโ โโโโโโโโโโผโโโโโโโ โ
โ โโโโโโโโโโโโโLead Manager โ โDeck Generator โ โ
โ callbacks โ :8082 โ โ :8086 โ โ
โ โ(Gmail+Cal+ โ โ(Dedalus + โ โ
โ โ BigQuery) โ โ python-pptx) โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โ
โ โ
โ Communication: HTTP REST + WebSocket callbacks + Dedalus ADK โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- Agent-as-Tool โ Specialist agents invoked as tool functions by coordinators
- Coordinator + Specialists โ Cheap model routes, strong models execute
- Generator-Critic โ Draft Agent writes โ Fact-Check Agent validates โ refined output
- Structured Outputs โ Pydantic
response_formatfor guaranteed JSON schemas - Callback Broadcasting โ All services POST to
/agent_callbackโ WebSocket fan-out - Multi-Tier Fallback โ Brave MCP โ Google MCP โ LLM knowledge โ template
- Merge-not-Replace โ New data merges with existing by ID (preserves state across restarts)
- Shared Domain Models โ Pydantic models as single source of truth across all services
| Service | Port | Powered By | Role |
|---|---|---|---|
| UI Client | 8000 |
FastAPI + Jinja2 | Dashboard โ WebSocket real-time updates, workflow trigger proxy |
| Lead Finder | 8081 |
Dedalus ADK + Google Maps | Google Maps search โ dedup โ BigQuery storage (up to 60 results/type) |
| SDR Agent | 8084 |
Dedalus ADK + ElevenLabs + Gmail | Full pipeline: research โ proposal โ call โ classify โ deck โ email |
| Deck Generator | 8086 |
Dedalus ADK + python-pptx | AI-powered PowerPoint business solution deck generation |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ DATA FLOW โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ User clicks "Find Leads" โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโ Google Maps โโโโโโโโโโโโ BigQuery โโโโโโโโโโโโ โ
โ โ UI ClientโโโโโโโโโโโโโโโโถโLead Finderโโโโโโโโโโโโโโโถโ BigQuery โ โ
โ โ :8000 โโโโcallbackโโโโโ :8081 โ (Dedalus โ (Google โ โ
โ โ (FastAPI)โ (WebSocket) โ (Dedalus) โ ADK) โ Cloud) โ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โ โฒ โ
โ โ User clicks "Run SDR" โ โ
โ โผ โ โ
โ โโโโโโโโโโโโ Brave MCP โโโโโโโโโโโโ Save session โ โ
โ โSDR Agent โโโโโโโโโโโโโโโโถโ Research โโโโโโโโโโโโโโโโโโโโโ โ
โ โ :8084 โ (Dedalus) โ(Dedalus) โ โ
โ โ(Dedalus) โ โโโโโโโโโโโโค โ
โ โ โ Dedalus ADK โ Proposal โ โ
โ โ โโโโโโโโโโโโโโโโถโ(Claude S4)โ โ
โ โ โ โโโโโโโโโโโโค โ
โ โ โ ElevenLabs โ AI Call โ โ
โ โ โโโโโโโโโโโโโโโโถโ โ โ
โ โ โ โโโโโโโโโโโโค โ
โ โ โ Dedalus ADK โ Classify โ โ
โ โ โโโโโโโโโโโโโโโโถโ(GPT-4.1) โ โ
โ โ โ โโโโโโโโโโโโค โ
โ โ โ python-pptx โ Deck Gen โโโโถ .pptx โ
โ โ โโโโโโโโโโโโโโโโถโ(Dedalus) โ โ
โ โ โ โโโโโโโโโโโโค โ
โ โ โ Gmail API โ Email โโโโถ HTML + .pptx + .ics โ
โ โโโโโโโโโโโโ (Google) โโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
sequenceDiagram
participant U as ๐ค User
participant UI as ๐ฅ๏ธ Dashboard<br/>(FastAPI)
participant SDR as ๐ง SDR Agent<br/>(Dedalus ADK)
participant BRAVE as ๐ Brave Search<br/>(MCP Server)
participant XI as ๐ ElevenLabs<br/>(Conv. AI)
participant DG as ๐ Deck Gen<br/>(Dedalus + pptx)
participant GM as ๐ง Gmail<br/>(Google Cloud)
participant BQ as ๐พ BigQuery<br/>(Google Cloud)
U->>UI: Click "Run SDR" on lead
UI->>SDR: POST /run_sdr {business}
rect rgb(59, 130, 246, 0.1)
Note over SDR,BRAVE: Step 1 โ Research (Dedalus ADK + Brave MCP)
SDR->>BRAVE: Search business + competitors
BRAVE-->>SDR: Research summary
end
rect rgb(139, 92, 246, 0.1)
Note over SDR: Step 2 โ Draft Proposal (Dedalus ADK / Claude Sonnet 4)
SDR->>SDR: Generate tailored proposal
end
rect rgb(16, 185, 129, 0.1)
Note over SDR: Step 3 โ Fact-Check (Dedalus ADK / GPT-4.1)
SDR->>SDR: Validate claims (generator-critic)
end
rect rgb(245, 158, 11, 0.1)
Note over SDR,XI: Step 4 โ Phone Call (ElevenLabs)
SDR->>XI: Batch call API
XI-->>SDR: Call transcript
end
rect rgb(239, 68, 68, 0.1)
Note over SDR: Step 5 โ Classify Outcome (Dedalus ADK / GPT-4.1 + Pydantic)
SDR->>SDR: LLM structured classification
end
rect rgb(99, 102, 241, 0.1)
Note over SDR,DG: Step 6 โ Generate Deck (Dedalus ADK + python-pptx)
SDR->>DG: POST /generate {research, transcript}
DG-->>SDR: .pptx binary
end
rect rgb(236, 72, 153, 0.1)
Note over SDR,GM: Step 7 โ Send Email (Gmail API / Google Cloud)
SDR->>GM: HTML email + .pptx + .ics calendar invite
end
SDR->>BQ: Save session (Google BigQuery)
SDR-->>UI: callback: sdr_completed
UI-->>U: Real-time update via WebSocket
- Geographic targeting โ search any city via Google Maps Places API
- Smart filtering โ auto-excludes chains (Starbucks, McDonald's, etc.) via Dedalus ADK orchestration
- No-website filter โ only finds businesses without web presence (highest-value prospects)
- Pagination โ follows
next_page_tokenfor up to 60 results per business type - Data persistence โ leads stored in Google BigQuery with dedup by
place_id - Mock fallback โ works in local dev without API key (generates mock data)
- Deep web research via Brave Search MCP through Dedalus ADK โ reviews, competitors, market position
- Generator-critic pattern โ Dedalus ADK (Claude Sonnet 4) drafts โ Dedalus ADK (GPT-4.1) fact-checks โ refined output
- Model specialization โ GPT-4.1 for research/coordination, Claude Sonnet 4 for creative drafting โ both routed via Dedalus ADK
- Natural conversations via ElevenLabs Conversational AI
- Batch calling API with transcript polling (ElevenLabs)
- Structured classification โ Dedalus ADK (GPT-4.1 + Pydantic) parses transcript into
interested/agreed_to_email/not_interested - Email extraction โ sophisticated parser handles dictated addresses ("a-r-n-a-v at gmail dot com")
- Branded HTML emails โ gradient header, CTA button, professional footer sent via Gmail API (Google Cloud)
- PowerPoint attachment โ AI-generated deck via Dedalus ADK +
python-pptx - Calendar invite โ .ics file with proposed meeting time
- Fallback email โ uses configured fallback when no business email found
- AI-powered content โ executive summary, situation analysis, proposed solutions, ROI, timeline (via Dedalus ADK)
- Professional slides โ built with
python-pptx, styled for business presentations - Template system โ professional, creative, and tech color schemes
- WebSocket updates โ live event streaming from all agents
- Lead table โ discovered businesses with status badges
- SDR Outreach tab โ session cards with call outcomes and email status
- Stats bar โ leads found, contacted, emails sent
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ TECH STACK โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ ๐ค AI & Orchestration (Dedalus ADK) โ
โ โโโ Dedalus ADK โ agent-as-tool orchestration (core) โ
โ โโโ Dedalus ADK โ OpenAI GPT-4.1 โ research, classify โ
โ โโโ Dedalus ADK โ Claude Sonnet 4 โ proposal drafting โ
โ โโโ Dedalus ADK โ Brave Search MCP โ web research โ
โ โโโ ElevenLabs โ conversational AI phone calls โ
โ โ
โ ๐ง Backend โ
โ โโโ Python 3.12 / FastAPI โ
โ โโโ WebSockets โ real-time dashboard updates โ
โ โโโ httpx โ async HTTP client โ
โ โโโ Pydantic v2 โ data validation & structured output โ
โ โโโ python-pptx โ PowerPoint deck generation โ
โ โ
โ โ๏ธ Google Cloud โ
โ โโโ Google BigQuery โ leads + sessions storage โ
โ โโโ Gmail API โ send outreach emails โ
โ โโโ Google Maps Places API โ business discovery โ
โ โโโ Google OAuth2 โ authentication โ
โ โ
โ ๐ฅ๏ธ Frontend โ
โ โโโ Vanilla HTML/CSS/JS โ no framework overhead โ
โ โโโ Jinja2 templates โ server-side rendering โ
โ โโโ Dark theme dashboard โ real-time WebSocket UI โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
rapidreach/
โโโ .env # API keys & configuration
โโโ pyproject.toml # Python packaging & dependencies
โโโ requirements.txt # pip install dependencies
โ
โโโ common/ # โโ Shared across all services โโ
โ โโโ config.py # Ports, URLs, BigQuery config, model names
โ โโโ models.py # Pydantic: Lead, Meeting, SDRResult, AgentCallback, etc.
โ
โโโ lead_finder/ # โโ Service 1: Discover Leads โโ
โ โโโ __main__.py # Entrypoint (port 8081)
โ โโโ agent.py # FastAPI + Dedalus ADK orchestration
โ โโโ prompts.py # LEAD_FINDER_PROMPT, MERGER_PROMPT templates
โ โโโ tools/
โ โโโ maps_search.py # Google Maps Places API (pagination + mock fallback)
โ โโโ bigquery_utils.py # Google BigQuery: lead persistence + dedup
โ
โโโ sdr/ # โโ Service 2: SDR Outreach Pipeline โโ
โ โโโ __main__.py # Entrypoint (port 8084)
โ โโโ agent.py # Dedalus ADK pipeline: research โ call โ email โ deck
โ โโโ tools/
โ โโโ phone_call.py # ElevenLabs batch calls + transcript polling
โ โโโ email_tool.py # Gmail API: MIME email with .pptx + .ics attachments
โ โโโ bigquery_utils.py # Google BigQuery: SDR session persistence
โ
โโโ deck_generator/ # โโ Service 3: PowerPoint Generation โโ
โ โโโ __main__.py # Entrypoint (port 8086)
โ โโโ agent.py # Dedalus ADK content gen + python-pptx rendering
โ
โโโ ui_client/ # โโ Service 4: Dashboard โโ
โโโ __main__.py # Entrypoint (port 8000)
โโโ main.py # FastAPI: WebSocket, callbacks, workflow proxies
โโโ templates/
โ โโโ dashboard.html # Interactive dark-theme dashboard
โโโ static/
โโโ css/style.css # Dark theme styles
โโโ js/app.js # WebSocket client + UI state management
git clone <repo-url>
cd adi-devfest-hackathon
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtCopy and fill in your API keys in .env:
# โโ Required: AI Orchestration โโ
DEDALUS_API_KEY=your-dedalus-key # https://dedaluslabs.ai/dashboard/api-keys
# โโ Required: Lead Discovery โโ
GOOGLE_MAPS_API_KEY=your-maps-key # GCP Console โ APIs โ Places API
# โโ Required: Data Persistence โโ
GOOGLE_CLOUD_PROJECT=your-gcp-project # GCP Console โ Project ID
# โโ Required: Phone Calls โโ
ELEVENLABS_API_KEY=your-elevenlabs-key # https://elevenlabs.io
ELEVENLABS_AGENT_ID=your-agent-id # ElevenLabs โ Conversational AI โ Agents
ELEVENLABS_PHONE_NUMBER_ID=your-phone-id # ElevenLabs โ Phone Numbers
# โโ Required: Email โโ
SALES_EMAIL=sales@yourdomain.com
# โโ Optional: LLM Models โโ
DEFAULT_MODEL=openai/gpt-4.1 # Coordinator + research
DRAFT_MODEL=anthropic/claude-sonnet-4-20250514 # Proposal writing
# โโ Optional: Fallback โโ
FALLBACK_EMAIL=your-fallback@gmail.com # Used when no business email foundOpen 4 terminal tabs and start each service:
# Terminal 1 โ ๐ฅ๏ธ Dashboard (start first)
PYTHONPATH=. python -m ui_client
# Terminal 2 โ ๐ Lead Finder
PYTHONPATH=. python -m lead_finder
# Terminal 3 โ ๐ง SDR Agent
PYTHONPATH=. python -m sdr
# Terminal 4 โ ๐ Deck Generator
PYTHONPATH=. python -m deck_generatorโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๐ GETTING STARTED โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ 1. Open http://localhost:8000 in your browser โ
โ โ
โ 2. Enter a city (e.g. "San Francisco, CA") โ
โ โ Click "Find Leads" โ
โ โ Watch leads populate in real-time โ
โ โ
โ 3. Click "Run SDR" on any lead โ
โ โ Agent researches, calls, emails automatically โ
โ โ Track progress in the activity log โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Key | Where to Get It | What It Enables |
|---|---|---|
DEDALUS_API_KEY |
Dedalus Dashboard | All LLM calls (OpenAI, Anthropic) via unified API |
GOOGLE_MAPS_API_KEY |
GCP Console โ Enable Places API | Lead discovery via Maps |
GOOGLE_CLOUD_PROJECT |
GCP Console โ Project ID | BigQuery data storage |
SALES_EMAIL |
Your Gmail/Workspace email | Sending outreach emails |
ELEVENLABS_API_KEY |
ElevenLabs | AI phone calls |
ELEVENLABS_AGENT_ID |
ElevenLabs โ Conversational AI โ Create Agent | Phone call agent persona |
ELEVENLABS_PHONE_NUMBER_ID |
ElevenLabs โ Phone Numbers | Outbound caller ID |
Required IAM Roles / OAuth Scopes:
โโโ Gmail API โ gmail.send (send outreach emails)
โโโ BigQuery โ bigquery.dataEditor, bigquery.user
โโโ Maps API โ Places API enabled
| Method | Endpoint | Description |
|---|---|---|
GET |
/ |
Dashboard HTML |
WS |
/ws |
WebSocket โ real-time event stream |
POST |
/agent_callback |
Receive agent status callbacks |
POST |
/start_lead_finding |
Trigger lead discovery for a city |
POST |
/start_sdr |
Trigger SDR pipeline for a lead |
GET |
/api/businesses |
Get all discovered leads |
GET |
/api/sdr_sessions |
Get SDR session history |
GET |
/api/events |
Get activity event log |
POST |
/api/human-input/request |
Agent requests human feedback |
POST |
/api/human-input/respond |
Human provides feedback |
| Method | Endpoint | Description |
|---|---|---|
GET |
/health |
Health check |
POST |
/find_leads |
Start lead discovery {city, business_types, radius_km, max_results} |
GET |
/api/leads?city= |
Get discovered leads (BigQuery + in-memory) |
| Method | Endpoint | Description |
|---|---|---|
GET |
/health |
Health check |
POST |
/run_sdr |
Execute full SDR pipeline for a lead |
GET |
/api/sessions |
Get all SDR sessions (BigQuery + in-memory merged) |
| Method | Endpoint | Description |
|---|---|---|
GET |
/health |
Health check |
POST |
/generate |
Generate PowerPoint deck from SDR session data |
RapidReach uses the Dedalus ADK with a coordinator โ specialist architecture:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ COORDINATOR AGENT (Dedalus ADK) โ
โ (GPT-4.1 via Dedalus) โ
โ โ
โ "Research this business, draft a proposal, โ
โ call them, then send an email" โ
โ โ
โ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โ
โ โResearch โ โ Draft โ โ Call โ โ Email โ โ
โ โ Tool โ โ Tool โ โ Tool โ โ Tool โ โ
โ โโโโโโฌโโโโโ โโโโโโฌโโโโโ โโโโโโฌโโโโโ โโโโโโฌโโโโโ โ
โ โ โ โ โ โ
โ โผ โผ โผ โผ โ
โ Dedalus ADK Dedalus ADK ElevenLabs Gmail API โ
โ + Brave MCP + Claude S4 Batch API (Google) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโ
โ Task โ Model (via Dedalus) โ Why โ
โโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโค
โ Coordination โ Dedalus โ GPT-4.1 โ Fast, cheap routing โ
โ Web Research โ Dedalus โ GPT-4.1 + Brave โ Grounded in search โ
โ Proposal Drafting โ Dedalus โ Claude Sonnet 4 โ Creative writing โ
โ Fact-Checking โ Dedalus โ GPT-4.1 โ Analytical โ
โ Classification โ Dedalus โ GPT-4.1 + Pydanticโ Structured output โ
โ Deck Content โ Dedalus โ GPT-4.1 โ Structured JSON โ
โโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโ
Classification and analysis use Pydantic response_format for reliable parsing:
# Classify call outcome with guaranteed schema (via Dedalus ADK)
result = await runner.run(
input="Classify this call transcript...",
model="openai/gpt-4.1", # Routed through Dedalus ADK
response_format=ConversationClassification, # Pydantic model
)
# Result is always: {outcome: "interested"|"agreed_to_email"|"not_interested", ...}| Pattern | Where | How |
|---|---|---|
| Agent-as-Tool | SDR (Dedalus ADK) | Each specialist is a nested runner.run() call wrapped as a tool function โ the coordinator invokes research, drafting, classification as callable tools |
| Coordinator + Specialists | All agents (Dedalus ADK) | Cheap model (GPT-4.1) coordinates routing; Claude Sonnet 4 handles creative drafting; GPT-4.1 + Pydantic handles classification |
| Generator-Critic | Proposal pipeline (Dedalus ADK) | Draft agent (Claude) writes โ Fact-check agent (GPT-4.1) validates โ refined output; ensures accuracy before reaching prospects |
| Structured Outputs | Classification (Dedalus ADK) | Pydantic response_format ensures LLM returns valid JSON matching ConversationClassification schema every time |
| Callback Broadcasting | All services โ UI (FastAPI) | Services POST to /agent_callback โ WebSocket broadcast to all connected dashboard clients |
| Multi-Tier Fallback | Research + Maps | Brave MCP โ Google Search MCP โ LLM knowledge โ static template; Maps API โ mock data; ensures the pipeline never fully fails |
| Shared Domain Models | common/models.py (Pydantic) |
Lead, SDRResult, Meeting, AgentCallback, EmailAnalysis โ single source of truth across all 5 services |
| Merge-not-Replace | SDR sessions, Leads (BigQuery) | New data merges with existing by ID (never overwrites accumulated state); in-memory overlays BigQuery history |
RapidReach is not just a single script โ it's a comprehensive system of 14 specialized AI agents working in concert across 5 microservices, communicating via HTTP callbacks and WebSocket real-time updates. We built the entire system from scratch in a single hackathon sprint.
- Dedalus ADK as the AI backbone โ Every LLM interaction flows through Dedalus's unified API, letting us route between OpenAI GPT-4.1 and Anthropic Claude Sonnet 4 with a single
model=parameter change. No vendor lock-in, no separate SDK integrations. - Agent-as-Tool pattern โ Instead of one monolithic prompt, we decomposed the SDR workflow into 8 discrete specialist agents, each invoked as a tool function by a lightweight coordinator. This gave us modularity, debuggability, and the ability to swap models per task.
- Direct sequential execution โ After experimenting with LLM-driven orchestration (where the coordinator decides step order), we switched to deterministic Python-driven sequencing for the SDR pipeline. This guarantees every step executes in order โ research โ proposal โ fact-check โ call โ classify โ deck โ email โ save โ with no steps skipped by a hallucinating orchestrator.
- Real-time dashboard โ WebSocket-powered event streaming means the user sees every agent step as it happens โ "Researching...", "Calling...", "Email sent!" โ creating an engaging, transparent experience.
- Dedalus ADK โ Unified LLM gateway with MCP server support, structured outputs, and multi-model routing
- Google Maps Places API (New) โ Pagination with
next_page_tokenfor up to 60 results per business type; smart chain exclusion - ElevenLabs Conversational AI โ Batch calling API with async transcript polling; natural voice that prospects actually engage with
- Gmail API (OAuth2) โ MIME multipart emails with HTML body +
.pptxattachment +.icscalendar invite in a single message - python-pptx โ AI-generated slide content rendered into professional PowerPoint decks with branded color schemes
- Google BigQuery โ Three tables (
leads,sdr_sessions,meetings) with automatic schema creation and merge-on-fetch recovery
Building a system this complex in a hackathon presented significant challenges:
Managing the state and communication flow between fourteen agents spread across five microservices was our biggest challenge. Each agent produces output that the next agent depends on โ research feeds proposals, call transcripts feed classification, classification determines email content. Ensuring proper coordination and maintaining data consistency required careful state management and robust error handling at every step.
When ElevenLabs captures a phone call transcript, business owners dictate their email addresses in unpredictable ways โ "T M zero seven M A R C H at gmail dot com" or "it's my email tm07march at gmail.com". We built a sophisticated 5-tier regex parser with number word mapping, leading word stripping, and priority-ranked deduplication to reliably extract emails from messy spoken text. This single function is 80+ lines of carefully tuned regex logic.
Brave Search MCP and Google Search MCP servers don't always respond reliably during high-traffic hackathon conditions. We implemented a three-tier fallback chain โ Brave MCP โ Google Search MCP โ LLM knowledge-based research โ static template โ so the pipeline never fully fails, even if every external search API is down. Getting the cascading exception handling right without losing context between tiers was tricky.
We initially used the Dedalus ADK's DedalusRunner to let the LLM orchestrator decide which tools to call and in what order. This worked well for the Lead Finder (where the LLM coordinates Maps search + BigQuery storage). But for the 8-step SDR pipeline, we found the LLM would sometimes skip steps, reorder them, or hallucinate tool calls. We pivoted to direct Python sequential execution for the SDR โ the coordinator calls each specialist function directly, guaranteeing the full pipeline executes every time.
Creating output that looks genuinely professional โ not "AI-generated" โ required significant iteration. The HTML email uses gradient headers, styled CTAs, and semantic bullet points. The PowerPoint deck uses professional color schemes with proper slide layouts. Getting the MIME encoding right for a single email containing HTML body + base64-encoded .pptx + .ics calendar invite took substantial debugging.
- Successfully orchestrated 14 AI agents in a cohesive, working system โ each agent has a clear responsibility and produces outputs consumed by downstream agents
- Implemented 8 distinct agentic design patterns โ Agent-as-Tool, Generator-Critic, Structured Outputs, Multi-Tier Fallback, Callback Broadcasting, Coordinator+Specialists, Merge-not-Replace, Shared Domain Models
- Built a complete end-to-end pipeline โ from typing a city name to a business receiving a personalized phone call, branded email with PowerPoint deck, and calendar invite โ fully autonomous
- 3-tier research fallback that ensures the pipeline never fails โ Brave MCP โ Google Search MCP โ LLM knowledge โ static template
- Sophisticated NLP parsing โ 80+ lines of regex logic to extract emails from spoken transcripts ("T M zero seven march at gmail dot com" โ
tm07march@gmail.com)
- Replaces an entire human SDR workflow โ lead discovery, research, cold-calling, proposal writing, email outreach โ tasks that take a human sales rep hours per lead
- Actually calls real phone numbers via ElevenLabs โ not a mock or simulation, but production-grade conversational AI phone calls
- Sends real emails with professional HTML formatting, PowerPoint attachments, and iCalendar invites โ indistinguishable from a human sales team
- Scales from one city to any city โ type "San Francisco" or "Mumbai" and the system finds, researches, and reaches out to local businesses
- Real-time WebSocket dashboard โ watch every agent step as it happens: "Researching...", "Calling...", "Classifying...", "Email sent!"
- Professional output quality โ gradient-styled HTML emails, branded PowerPoint decks,
.icscalendar invites - One-click operation โ click "Find Leads" then "Run SDR" and the entire 8-step pipeline executes autonomously
Starting this project was an ambitious leap for us. We built the entire system from scratch in a single hackathon sprint, which meant a steep but incredibly rewarding learning curve.
We were new to Dedalus ADK, but we were immediately impressed by its unified approach to multi-model AI orchestration. We learned how to route between GPT-4.1 (fast, analytical) and Claude Sonnet 4 (creative, nuanced) within the same pipeline โ using the cheap model for coordination and research, and the strong model for proposal writing. The MCP server integration (Brave Search, Google Search) gave us grounded web research without building custom scrapers. The DedalusRunner abstraction let us focus on agent logic rather than API plumbing.
Integrating real phone calls into an automated pipeline was one of our most exciting challenges. We learned how ElevenLabs' batch calling API works โ you initiate a call, then poll for the transcript asynchronously. The conversational AI agent needs careful prompt engineering to sound natural, ask the right questions, and gracefully handle rejection. We also learned that parsing spoken email addresses from transcripts is a problem nobody has cleanly solved โ so we built our own 5-tier regex parser.
We learned how to use Google Maps Places API (New) with pagination tokens for deep business discovery, Gmail API with OAuth2 for sending MIME multipart emails with attachments, Google Calendar API for programmatic meeting creation with Google Meet links, and BigQuery for structured data persistence with automatic schema management. Getting all four Google APIs working together with proper OAuth2 scoping was a valuable lesson in cloud-native development.
Perhaps our biggest takeaway was learning when to let the LLM orchestrate vs. when to use deterministic control. The Lead Finder works beautifully with LLM-driven tool calling (the agent decides how to search and store). But the SDR pipeline needed deterministic Python sequencing to guarantee all 8 steps execute. We also learned the power of the Generator-Critic pattern โ having one model draft and another model critique produces dramatically better output than a single model alone.
We came away from this hackathon with a profound appreciation for how powerful modern AI tooling has become. Dedalus ADK, Google Cloud, and ElevenLabs gave us building blocks that let a small team build something that would have taken an enterprise sales team months to replicate manually.
- Industry Specialization โ Expand beyond website development to target other service industries (legal, healthcare, consulting)
- Advanced Analytics Dashboard โ ML-powered conversion prediction and A/B testing on proposal styles
- Multi-Language Support โ Localized phone calls and emails for international markets
- CRM Integration โ Connect with Salesforce, HubSpot, and Pipedrive for enterprise workflows
- Parallel Lead Processing โ Fan-out/gather pattern to research and call multiple leads simultaneously
- AI-Powered Negotiations โ Advanced follow-up agents that handle objections and close deals
- Predictive Lead Scoring โ Use historical conversion data to prioritize the highest-value prospects
- Voice Cloning & Personalization โ Custom voice profiles for different industries and markets
- Human-in-the-Loop Refinement โ Let sales managers review and edit proposals before they're sent
- Agent Marketplace โ Allow users to create and share custom specialist agents
- No-Code Pipeline Builder โ Drag-and-drop interface to compose custom SDR workflows
- Webhook Integrations โ Connect with Slack, Teams, and other business tools for notifications
RapidReach represents just the beginning of what's possible when combining Dedalus ADK's multi-model orchestration, Google Cloud's powerful APIs, and ElevenLabs' conversational AI with real-world business needs. We're excited to continue pushing the boundaries of AI-powered sales automation!
erDiagram
Lead {
string place_id PK
string business_name
string address
string city
string phone
string email
float rating
string business_type
boolean has_website
string lead_status
}
SDRResult {
string session_id PK
string place_id FK
string business_name
string call_outcome
string call_transcript
boolean email_sent
string research_summary
string proposal
timestamp created_at
}
Lead ||--o{ SDRResult : "outreach"
Built at Columbia ADI DevFest Hackathon 2026.
โก RapidReach โ 14 AI Agents ยท 12+ Tools ยท 5 Microservices ยท 8 Design Patterns
Built with โค๏ธ for automating the sales development process