Albert's performance dashboard: two deals won this quarter worth $29,201

I Built an AI Sales Team for Under $1 a Day. It Closed $29,201 and Beat Salesforce and HubSpot’s AI

I Built an AI Sales Team for Under $1 a Day. It Closed $29,201 and Beat Salesforce and HubSpot’s AI

The first version of Albert cost about $15 to run, and my reaction wasn’t pride but suspicion. This is too expensive, I thought, and went hunting for what I could cut. That instinct is the whole story, so hold onto it.

I run a B2B sales operation across 14 international markets and 5 languages, by myself. The standard way to handle that is to rent a stack of software, one tool for each slice of the job: a CRM at $150 a month, a lead-generation tool at $120, an email assistant at another $150, and a meeting-prep bot at $40. Add it up and you are paying $460 a month, every month, for work that in my case exactly one person does, and you are renting four products from four companies to do it. When the month ends you own none of it, only the bill. So I built my own instead, named it Albert, and it has cost $15.85 to run across its entire life. That isn’t a cost comparison, it’s a different category of tool.

Albert isn’t a chatbot or a single clever script. It’s a workforce of a dozen or so small, specialized agents wired into the CRM, inbox, and tools I already run, each owning one slice of the work, with me approving every decision that reaches a real person. The architecture matters and I’ll get to it, but the architecture was never the point.

The trap I was trying to avoid

The honest reason most operators rent is that building sounds harder than it is while renting sounds safer than it is, and both feelings are wrong. Generic software is built for everyone, which means it is built for no one in particular: the CRM doesn’t know that a free email address with no company attached is almost never a real wholesale buyer in my world, the lead tool doesn’t know my 5 sales lanes, and the email assistant writes in a voice that belongs to nobody. You spend the first month bending four tools toward a business none of them understand, and then you do it again every time one of them ships an update you didn’t ask for. A thing you build knows your business because you taught it, and a thing you rent forgets you the moment you stop paying.

What Albert actually is

Picture an org chart rather than a program. There are two front doors, a command line I run from a terminal and a web dashboard I open in a browser, and both reach the same workforce underneath: a dozen or so single-purpose agents, each very good at exactly one job and completely ignorant of the rest. Some go out hunting for new business, one grades the leads, one builds the day, one writes the email, one reads the replies, one keeps score, and a few do the unglamorous maintenance that keeps a CRM from quietly rotting from the inside. None of them tries to be the whole salesperson, and that ignorance is the design rather than a flaw in it. Let me walk a lead through the ones that do the selling, then show you the crew that keeps the data clean.

It runs on the stack I already had, with HubSpot holding the records, Outlook handling the mail, and Claude doing the thinking, and none of the data ever leaves the building. Albert was never trained in the machine-learning sense, since there’s no fine-tuned model anywhere in it; instead it’s grounded three ways, by a company bible that tells it who we are, a library of lane-and-language templates, and a learning log that records every correction I make, so over time it gets better at how I write, how my business actually works, and what a real deal looks like.

Spread that across the world and it stops looking like a program and starts looking like reach. On Albert’s map the leads scatter across all 14 target markets on four continents, each dot sized by how many sit in that country and colored by temperature, so at a glance I can see not just where the pipeline is but where it is heating up.

The work, end to end

Follow a single lead and the whole machine comes into view. A contact arrives, usually from a web form, and the grader reads everything attached to it, the email history and the company and the website, then hands back three things: a lane, which is whether this is wholesale or B2B development or an event or OEM or retail or a partner, a score of hot, warm, or cold, and a one-line reason I can read in three seconds. It runs a free check before it spends anything, so a throwaway address with no company never reaches a paid model and only the genuinely uncertain leads do.

Then the planner takes everyone hot or warm, plus the deals already in motion, and builds the day. Not a to-do list but a real calendar: the just-replied hot leads get the early block at 15 minutes each, deals in active negotiation get mid-morning, warm follow-ups get late morning, the long shots, deals that went cold months ago, get the early afternoon, and cold verification gets the end of the day. Everything is grouped by language so I am not whiplashing between Spanish and Portuguese every fifteen minutes, and anything I don’t finish quietly reschedules itself to tomorrow.

For the contacts ready for a message, the drafter writes one, and it chooses how to write from the history it can see: a first touch for someone brand new, a follow-up that softens with each attempt for someone who has gone quiet, a continuation that reads the existing thread and answers on topic for someone who has already replied, and a different opening entirely for someone who came to us first. It writes in whichever of the 5 languages the prospect uses, theirs rather than mine.

The rest of the workforce runs in the background while I work the calls. The lead-generation agent goes looking for operators who never filled out a form, searching 14 countries in their own languages across five verticals, from distributors and eco-resort developers to outdoor-gear retail, camping and overlanding, and events. The partner prospector hunts a different kind of contact entirely, the surveyors and architects and contractors across 50 states who send business rather than buy it. An inbox-triage agent reads every reply as it lands and sorts it into one of six buckets, flagging the ones that want pricing or a follow-up or are asking a real question as buying signals the moment they arrive. When one of those conversations turns serious, Albert can open the deal in the pipeline and line up the invoice behind it, all through the same HubSpot connection, so the path from a first reply to signed paperwork never has to leave one system. A dead-lead detector keeps a quiet watch on anything that has gone 45 days without a heartbeat. And an outcome tracker sits at the very end of the line, matching the deals that close back to the outreach that touched them. Every one of those steps stops at the same gate, which is me, because the system proposes and I dispose.

And underneath all of that runs a quieter crew whose only job is keeping the data honest, because a CRM rots from the inside the moment nobody tends it. One agent finds duplicate contacts and merges them, another clears out duplicate tasks before they pile up, and another fills in missing company phone numbers and reconnects orphaned contacts to the businesses they actually belong to. It is the unglamorous half of the job, the part no per-seat subscription ever quite does for you, and it runs for the same fractions of a cent as everything else.

Making it write like me, not like an AI

The drafts were the part I was most afraid would give the whole thing away, since nothing announces "a machine wrote this" like a cold email that reads like a machine wrote it. So most of the craft went into the opposite. A forbidden-phrase list is baked into the prompt and a plain regex strips the tells out afterward as a safety net, so the em-dashes and the "leverage" and the "seamless" and the rest of the corporate-AI vocabulary are gone before I ever see a draft. It matches the prospect’s own language, reading how they describe themselves and then picking one word, glamping or eco-resort or experiential, and using it consistently instead of guessing at five. It knows exactly how long the silence has been, so a note written after 29 days of quiet acknowledges the 29 days rather than pretending we spoke yesterday. And every draft is mine before it goes anywhere: I can rewrite it myself or just tell it what to fix, make it shorter, warm up the opening, mention the Star Valley job, and it reworks the draft on the spot, with each edit logged so the next one comes back a little closer to how I would have written it in the first place.

I put it up against HubSpot and Salesforce

A few days ago I ran a simple test, the kind a skeptical buyer would actually care about. Imagine hiring a new sales rep and handing them the AI inside HubSpot, the AI inside Salesforce, or Albert, then asking the only three questions that matter: could they find and work a lead, would it be accurate and easy, and would it stay cheap? I picked an industry, hospitality, went looking for glamping operators, and pulled the kind of cold leads you actually get in the wild, where some came with an email, some with only a phone number, some with just a name, and some with nothing but a business address. Then I dropped them into each system and tried to turn them into someone I could contact.

HubSpot did well when a lead already had a website to pull from and laid out plenty once it had something to work with, but hand it a bare name or an address and it had nowhere to go. Salesforce had more features, yet they only helped when the contact’s fields were already filled in, and the moment I wanted it to find the missing pieces I was looking at bolting on more paid services, which is exactly the direction you never want a cost to move. Both tools quietly assumed I would show up with the data already in hand.

Albert assumed the opposite. Handed almost nothing, a name or a number or a single email address, it used the email to find the company’s domain, pulled up the site, wrote the missing details back into the CRM, summarized the business, graded the lead hot, warm, or cold with a reason I could read in a sentence, and drafted a first outreach email for me to approve. A scrap of contact information went in, and a researched, scored, ready-to-send opportunity came out, for a few cents. The rented tools wait for you to feed them; Albert goes and gets it, and the only time either incumbent could keep pace was the moment it offered to find the rest for an extra fee. It also remembers what it has seen, so when I tag a company as a competitor it stays tagged and drops out of every future search, which means I am never handed the same name twice and never spend a cent researching someone I will never sell to.

The receipts

I didn’t want a demo, because demos are easy, so the only question that mattered was whether a thing I’d built alone could move real money. The very first version of Albert was crude, and a single run of it cost $15.07, but that one expensive pass scored 1,051 contacts and surfaced $82,998 in pipeline I didn’t know I had, leads that had been sitting invisible in my own CRM for months, and it pulled $18,000 in quotes out of contacts I had already written off. The idea clearly worked. The price tag told me it wasn’t finished.

So I did what the opening instinct demanded and went hunting for the waste. I split the work across agents sized to each task, a cheap model where I only needed a label and a stronger one only where the writing had to be good, and I pushed everything I could off the paid models and onto free Python and the HubSpot API, which it turns out will do a startling amount of the busywork for nothing. The cost of a run fell by more than 90 percent, from $15 to well under a dollar, often closer to 30 cents. What once paid for a single pass now runs the whole operation for cents a day, and across 42 days of real work the finished system has cost $15.85. The first version spent $15.07 in one morning; the version I kept has spent about the same in six weeks.

And the version I kept closes business. Over the quarter two deals worth $29,201 came in, both carried by Albert from the first touch through the follow-up, with a $5,000 deal still live in the pipeline.
Here is the part I won’t airbrush. For weeks, Albert’s own performance dashboard read zero across the board, zero revenue attributed and zero deals won, and not because anything had broken. Sales cycles run 3 to 18 months, so the software is simply faster than the business it serves, and while my dashboard insisted nothing had happened the bank account quietly disagreed. Both were telling the truth, just on different clocks. Full attribution won’t mature until late this year, deal by deal, on its own schedule, and a system honest enough to measure its own results has to be patient enough to wait for them.

Why it never fell over

Two more decisions did the load-bearing work on reliability. The first is that Albert refuses to redo finished work, because the cheapest model call is the one you never make, so the grader only looks at a contact when something about it has actually changed since the last time. That sounds trivial, and it caused the nastiest bug in the project. The first version decided whether anything had changed by watching the field that logs the last email reply, a field that often stays empty because the mail integration doesn’t always catch the inbound message, so Albert quietly concluded that nothing had ever changed for anyone and skipped every contact, confidently and without throwing a single error. When you build a system that skips work to save money, the signal it uses to decide what to skip is load-bearing, and choosing it wrong turns your optimization into an outage that never announces itself.

The second is that the agents never talk to each other. No agent calls another and the grader never hands off to the planner; instead they share a destination rather than a conversation, so the grader writes a score to the CRM and later, independently, the planner reads it back. The payoff shows up in how the system fails, because nothing waits on anything else: any agent can crash and be restarted without the rest of them noticing, and there’s no fragile chain where step four dies the moment step three hiccups. Independent systems fail gracefully, while monolithic ones fail all at once, and I wanted the kind that degrades a little over the kind that collapses completely.

One decision matters more than those two. Albert has no autonomous mode, and not because I haven’t built it yet, since there’s no code path anywhere that writes to the CRM or reaches a real person without an explicit yes from me. Skynet’s whole problem was that nobody had to press the button, and an AI that acts on the world at machine speed, on imperfect information, with no human standing between the decision and the consequence, isn’t a productivity tool but a liability with good marketing. The human in the loop isn’t a feature I haven’t gotten around to removing yet, it’s the feature.

Why I turned it off

Because the experiment was over, and it had won. I didn’t build Albert to run forever, I built it to answer a single question, which was whether one person with no team and no SaaS budget could own the entire machine around the selling and have it pay for itself. At $15.85 in, with five figures closed and the dashboard still catching up to reality, the answer was obvious, and a test that has already succeeded doesn’t need to keep running to stay true, so I switched it off the way you stop a stopwatch once you have the time.

We were sold a dream about the AI that replaces the person, and the one I actually built does the opposite, because it replaced a $460 invoice and a team I never hired, and it answers to me. I can turn it on when I need it and off when it has made its point, because I own it instead of renting it. That is the part worth keeping, more than anything about Albert itself: the leverage didn’t come from the AI being smart, it came from the AI being mine, infrastructure I own instead of software I rent. That isn’t a smaller version of the dream we were sold. It might be the better one.

Why it isn’t really about my business

Albert stands on three things: a company bible, the HubSpot API, and the agents. The agents are the workers and the API is the plumbing, but the company bible is the part that actually knows the business, who I am, who my competitors are, what we sell and to whom. It is a plain document, and I can rewrite it. Swap that one file and Albert’s whole personality and commercial instinct change with it, because the agents never needed to know what business they were in. The company bible tells them, so the same machine that sells hospitality could sell energy, or loans, or finance, or anything with a pipeline and a customer on the other end of it.

Which means the real ceiling on Albert was never the model or the code. It was me. Underneath everything, Albert is a new sales rep: it learns from you, from your website and your materials and every draft you correct, and it gets a little better at the job every day while keeping the business tidy enough that you can spend your hours on the one thing software still cannot do for you, which is close. I turned this version off because it had made its point. The next one is just getting started.

Frequently asked questions

What is Albert?
Albert is a multi-agent sales system built and run by a single operator. It scores leads, plans the day, drafts outreach in 5 languages, sorts inbound replies, finds new prospects and partners, diagnoses the pipeline, tracks which deals close, and keeps the CRM clean behind the scenes, all from one command line and one web dashboard on top of HubSpot and Outlook.

How much did Albert cost to build and run?
Its total spend to date is $15.85, against roughly $460/month for the conventional SaaS stack it replaced, which was a CRM, a lead tool, an email assistant, and a meeting-prep bot.

Did Albert actually generate revenue?
Yes. Albert’s outreach closed two deals worth $29,201 this quarter, with a $5,000 deal still open, against $15.85 in total cost. Because sales cycles run months, the system’s own attribution dashboard read zero for weeks before those deals finally closed.

Why did you turn it off?
It was a time-boxed experiment to prove that a solo operator could own the full sales machine cheaply and have it pay for itself, and once it had, the test was complete. Because I own it rather than rent it, I can run it again whenever I choose.

How does Albert keep costs so low?
It filters the obvious cases out for free before any paid model is called, never reprocesses a contact that hasn’t changed, and routes work by economics, with a cheap fast model for high-volume scoring and a stronger model only where writing quality matters.

Does Albert send anything without human approval?
No. There is no autonomous mode in the code, and every contact creation, score change, and outbound email passes through an approval queue first.

Can Albert work for an industry other than yours?
Yes. Everything Albert knows about a specific business lives in one plain document called the company bible. Swap that file and the same agents sell something else, because the workforce and the plumbing never depended on the industry, the company bible supplied it. It could run sales for hospitality, energy, finance, loans, or anything with a pipeline and a customer.

Related reading

Cognitive AI: The Next Leap from Algorithms to Awareness

How We Accidentally Built the Death Star and Called It the Golden Dome