Back

Hands-Free CRM Automation with AI Agents

August 18, 2025 by Matthew Congrove

Keeping a CRM perfectly up to date sounds easy… until you try doing it without a dedicated sales team. For us, it was a constant game of catch-up.

Hands-Free CRM Automation with AI Agents

New users would sign up for Agentuity, but their details never made it to our CRM. Positive replies to outbound outreach sat unnoticed. Payments didn’t flow back into account records, leaving us without a clear view of account value.

We knew our CRM was lagging behind reality, and the more it fell out of sync, the harder it was to trust.

To close the gap, we built three event-driven AI agents for Attio (our CRM), each powered by Composio and triggered directly by the systems we already use: Clerk, SmartLead, and Stripe.

The Agents

Accounts Agent

Whenever a new user signs up for Agentuity (or an organization profile changes) in Clerk, this agent automatically creates or updates the matching Person and Company record in Attio. The result is a CRM that always reflects who’s actually using our product, with customer journeys tracked from the first touchpoint.

Leads Agent

SmartLead is where our outbound leads live, and in the past, “positive” replies often went unnoticed until it was too late. Now, when a positive reply comes in, the agent reads the email, decides if it’s a type of request it’s allowed to handle, and either responds autonomously or calls in a human.

For example, if someone wants to book a meeting, it sends our Cal.com link. If they’re asking where to find more information, it points them to our website or docs. But if the reply is nuanced or outside that scope, the agent pings the account owner in Slack. In both cases, the agent also auto-creates a Lead in our deal pipeline, ensuring every opportunity is tracked from the first interaction. Either way, no lead is ever lost.

Payments Agent

Stripe already tells us when we get paid, but that information lived in isolation. Now, every successful payment updates the customer’s account value in Attio and sends a concise summary to Slack. The sales view of the CRM is no longer just contacts and deals, it’s a live representation of the value each customer brings.

One Architecture, Many Integrations

We built a generic agent framework that only needs a custom prompt file for each integration. If we want to swap out Stripe for Paddle or add an entirely new system, we just write a prompt telling the agent what to do.

We also made it CRM-agnostic from the start. Composio’s 350+ tools make it possible to hot-swap CRMs without rewriting logic. HubSpot, Salesforce, Pipedrive, and more are just a toolkit change away.

// Example: grabbing the Attio toolkit via Composio
const crm_tools = await composio.tools.get("default", {
  toolkits: ["ATTIO"],
});

Swap ATTIO for SALESFORCE or HUBSPOT and the same agent logic works with a different CRM.

Shared Infrastructure

Even though the agents are triggered by different services, they run on the same backbone. Every Agentuity agent gets its own webhook URL, so events from Clerk, SmartLead, and Stripe each go directly to the right agent with no polling delays. Slack alerts follow a consistent format, making them easy to scan. And because they all use Composio’s CRM tools, we’re not duplicating integration code, which keeps the system maintainable and easy to extend.

The Results

Since launch, our CRM has been in sync with reality at all times. Looking up a customer in Attio now shows onboarding status, payment history, and account value without touching another system. No leads fall through the cracks — some get an AI reply within seconds, others get a personal follow-up after a Slack ping.

It also meant our new Head of Growth started on day one with a complete and accurate picture of every account, ready to reach out personally to new signups without chasing down data.

Built by Our Interns

One of the best parts of this project is who built it. Our interns Dhilan, Joel, and Nick took it on as their end-of-summer project and ran with it from start to finish: gathering requirements, designing the architecture, integrating with external services, writing the prompts, coding the agents, and testing everything themselves.

It was the perfect capstone to a summer where they tackled real-world problems and shipped production-grade work. We wrote more about their experience in this blog post, and it’s worth the read if you want to see what talented interns can do when you give them full ownership.

Closing Thoughts + Code

This project isn’t just about syncing systems. It’s about freeing teams — especially startups without dedicated sales staff — from the manual, repetitive work that makes CRMs useful but so often neglected. It’s also about improving customer support, since every interaction and payment now flows back into a single, accurate source of truth.

By designing these agents to be prompt-driven, CRM-agnostic, and webhook-first, we ended up with something that doesn’t just work for our current setup, it’s ready to adapt and grow with us. And that’s exactly the kind of infrastructure that turns “we’ll get to it later” into “it’s already done.”

And best of all, you can grab the entire project on our GitHub.