Skip to content
All work

Case study 08 / 11

AI voice and customer service

Live

Universal CRM Connector for an AI Calling Agent

Call Agent AI builds AI agents that handle business phone calls, and every new customer used a different CRM. Each one needed its own lengthy integration. I designed a universal connector that handles several CRMs through one shared approach, then delivered a full Jobber integration end to end, so the AI agent now works directly with the business's own customer records.

AI

AI calling agent

System

Universal CRM connector

  • Output

    HubSpot

  • Output

    Zoho

  • Output

    Jobber

  • Output

    More CRMs

The agent talks to one connector, so adding a CRM doesn't change the agent.

The challenge

Call Agent AI builds AI agents that answer and make phone calls for businesses. To be truly useful, the agent has to work with the customer records a business already keeps: who the caller is, their history, and what should happen next.

The problem was that every business uses a different CRM. Each one (HubSpot, Zoho and others) needed its own integration, written from scratch and running to hundreds of lines of code. Every new CRM meant more work, more code to maintain and a longer wait before a new customer could go live.

What I delivered

  • A universal CRM connector. One shared approach to connecting CRMs, so adding a new one takes a small amount of CRM-specific setup instead of a whole new integration. It's built to support several types of CRM, including HubSpot, Zoho and Jobber.
  • A complete Jobber integration. Jobber is a popular CRM for home-service and field-service businesses. I designed the architecture, built it and delivered it end to end, so the AI calling agent now works directly with a business's Jobber data. Just by talking with the caller, the agent can do the work a receptionist would: find or create the contact, offer available time slots and book the meeting, log the call and its notes, and handle invoices.
  • Documentation for the team, so the engineering team can add and extend CRM integrations using the same pattern.

How it works

Most of what a CRM integration does is the same everywhere: sign in securely, find a contact, create or update a record, and keep the data in step. The universal connector handles all of that once, in a shared core. Each CRM then only needs a small, specific layer that explains how its data is shaped.

For the business, that means the AI agent behaves the same way whichever CRM they use. For Call Agent AI, it means a new CRM is a small, contained piece of work rather than a new project.

Key decisions

  • Build the pattern, not just the integration. Writing a Jobber integration on its own would have solved one customer's problem. Building it on a universal connector solves the next ten.
  • Keep the AI agent CRM-agnostic. The calling agent talks to the connector, not to each CRM directly, so it doesn't need to change when a new CRM is added.
  • Deliver end to end. I owned the Jobber work from architecture to a working connection with the live agent, not just a prototype.

Built for trust

Businesses are trusting the connector with their customer records, so it only accesses the data the agent needs for the call, signs in through each CRM's own OAuth flow, so no CRM passwords are ever shared or stored, and keeps each business's connection separate.

The results

  • A new CRM no longer means a new integration project written from scratch.
  • Call Agent AI's AI agent can now work with Jobber, opening the product up to home-service and field-service businesses.
  • The engineering team has one clear, documented pattern for every future CRM.
Under the hoodShow technical details
  • Sign-in: each business connects its CRM through OAuth, so the connector holds a revocable access grant rather than a password.
  • Shared core, thin adapters: sign-in, contact lookup, record creation and updates, and data sync live in one shared core. Each CRM adds only an adapter that maps its data to the agent's common model.
  • Jobber actions: contacts, available time slots and bookings, call logs and notes, and invoices, all exposed to the calling agent as actions it can take during a live call.
  • The platform it plugs into: a TypeScript backend on Node.js and NestJS, with raw WebSockets for live call audio, MongoDB and PostgreSQL for data, Redis for caching and scheduled jobs. The agent speaks through real-time voice models (OpenAI Realtime and Gemini Live) with Deepgram for speech, over Twilio and Telnyx phone lines.
  • Other integrations on the same platform: HubSpot, Zoho CRM, Cal.com for bookings, and SMS, WhatsApp and email messaging.
  • Cloud: containers on AWS ECS Fargate behind a load balancer, with secrets in AWS Secrets Manager, infrastructure written in Terraform and deployments through GitHub Actions.