Skip to content
Solution

CRM automation that does the handoffs and never guesses who a customer is

Automation for the clerical work of a CRM: every lead captured once and routed to an owner, follow-ups that stop when they should, a won deal handed to delivery and to the accounts, and data clean enough to report on. On HubSpot, monday CRM, Airtable, Pipedrive-style CRMs or a custom build.

CRM automation is software doing a CRM's clerical work: capturing each lead once, routing it to an owner, chasing the follow-up, handing a won deal to delivery and to the accounts, and keeping the records clean enough to report on. Our position is simple. Automate the moves between stages and the handoffs between systems. Never let an automation decide on its own who a customer is, whether they have already been sent something, or what they owe. Those three need a stored key, a record of what was done and, where it matters, a person. Most CRM automation that goes wrong breaks one of them.

Most of our evidence is Make work around a monday.com CRM. For a vocational training provider we built flows that take lead-ad and website forms into the CRM, log calls and voicemails, forward a lead's email reply to the rep who owns them, and raise Xero invoices from a status change. For a trailer manufacturer, a flow matches each website enquiry to the quotes and invoices raised for it in Xero. Two client case studies go further. They describe a CRM we built from scratch for a UK commercial solar installer, as part of one system that replaced a patchwork that had included another CRM. Beyond what is published, we have built CRM and project-management systems for businesses in hospitality, events and furniture, and Zapier work that takes WooCommerce orders into monday.com and on to Xero invoices.

Three neighbouring pages answer different questions. Which CRM to buy is our monday.com vs HubSpot CRM article. How to set up HubSpot properties, lifecycle stages and workflows is our HubSpot page. Integration work in general, for any pair of systems, is the API integration consultant page. This page covers automating the CRM you have, and the point at which it should be replaced.

Should and should not

Seven jobs for CRM automation, and the line each one must not cross

These are the jobs worth automating, in roughly the order a lead meets them. For each one: what the automation should do, what it must not do, and where we have built it, including the gaps the build still has.

  1. 01

    Capture every lead once

    Every channel (ad forms, website forms, calls, chat) should land in the CRM within minutes, with its source and what the person said. The automation should search before it creates, on a stored key such as a normalised email, and turn a repeat into a note on the existing record. It must not create a second lead because an email had a capital letter in it. Our lead-ad flow for the training provider searches by name and email and adds a note when it finds a match: 286 runs and no errors in Make's counters. Its stated gap is that a changed email still makes a second lead. The same client's website-form flow has no duplicate check at all, and its page says so.

  2. 02

    Route it to an owner, and chase until someone claims it

    Assign by a rule you can read (territory, product, an answer on the form) and treat an unclaimed lead as the failure to watch for. A lead that matches no rule must go to a person, not disappear. For a short-term rental company, a website lead becomes a Slack card, an Airtable row and a CRM contact, and the flow reads the claim thread after five minutes, nudges the first owner and hands over to a second if nobody has replied. The training provider's reply forwarders read the owner from the CRM rather than choosing one: 441 runs each, no errors. Their lead-ad flow, by contrast, drops a lead that matches no eligibility route. That is the gap we now design out with a catch-all route.

  3. 03

    Follow up on a schedule the CRM can see

    Reminders and sequences should keep their state on the record, so a salesperson can see what was sent and move it on, and they should stop on a reply or an opt-out. They must not send twice, or send to someone who has opted out. The training provider's SMS sequences keep the current day on the CRM item as the cursor. They are built but have not run yet, and they do not check opt-out, which their page states. Our own outreach platform puts the two rules in the database instead: a step can send only once per enrolment, and one suppression stops every sequence for that person.

  4. 04

    Make a stage change trigger what the stage promises

    A pipeline is a set of promises: when a deal reaches this stage, someone does that. Automation should fire on the specific move, filtered on where the deal came from and where it went, and record what it did on the record's timeline. The training provider's document chaser fires only when a lead moves from one particular group to another. It has 17 runs, and most of them stop at that first filter. Where a stage needs data, the gate belongs in the CRM. On the solar installer's system, dragging a deal forward asks the API whether the deal has what that stage needs, and a refusal names what is missing. An override exists, but it needs its own permission and a reason.

  5. 05

    Hand a won deal to delivery

    Winning should open the delivery record, carry across what delivery needs, and be safe to run twice. It should not keep the deal open through delivery, because then the forecast, close rate and stage durations all start describing fulfilment. On the solar ops platform, winning a deal opens one project per building, each with its own delivery board, tasks and milestones. The contract value is split across the buildings, and a test checks that the parts always add back to the total. A building linked after the win gets its project on the next run, and nothing is duplicated.

  6. 06

    Raise the quote or invoice in the accounting system

    The CRM knows what was sold. The accounting system should hold the invoice. Automation should create the invoice from the CRM record, match the customer on a stored ID and write the invoice number back. It must not raise a second invoice because someone selected the status again. The training provider's Xero flow does the first part well. The second is its stated gap, and the section below covers both.

  7. 07

    Keep the data clean enough to report on

    Normalise at the point of entry, join systems on IDs that do not change, and accept that a report built on a loose match is a loose report. The trailer manufacturer's attribution flow stores each enquiry's email in a canonical form, so later matches against quotes and invoices are exact. It has 523 runs, and its five errors all came in its first two days. The training provider's ad reporting stores each campaign's platform ID as the join key, so renaming a campaign breaks nothing. Its lead-stage mirror has run 752 times without error, but it matches on name or email and can over-match. Its page says that too.

HubSpot, monday CRM, Airtable, Pipedrive, custom

What each kind of CRM automates natively, and how it spots a duplicate

The jobs above do not change from one CRM to the next. Where the work lives does. So does each CRM's idea of what a duplicate is, and that decides most of the design.

CRMIts own automation is enough forHow it recognises a duplicateThe trap we design around
HubSpotWorkflows inside HubSpot: enrolment, property updates, internal notifications and marketing emailContacts by email address and companies by domain, automatically. Companies created through the API are not deduplicated by domainA record enrols in a workflow once by default. Re-enrolment has to be switched on per trigger, so a workflow that ran last time is no evidence it will run again
monday CRM and monday.com boardsBoard automations: status moves, assignment, notifications, reminders on a dateA Manage duplicates tool that matches on identical values in a column you choose and archives the extra items. Nothing stops a duplicate arrivingStatus labels. An API write with a label the board does not have fails unless it is told to create the label, and creating it quietly fills the board with near-identical options
Airtable used as a CRMAutomations inside one base: notifications, record updates and scriptsThere is no unique field. The API can upsert on up to three merge fields, and the request fails if more than one record matchesA base grows into a database without the permissions, audit or constraints of one. Our Airtable automation limits article covers where that starts
Pipedrive and similar pipeline CRMsAutomations on deal, person, lead and organisation events, including stage changesA merge tool that flags people with the same name and a matching phone, email or organisation. Merges cannot be undone, and deals cannot be mergedA stage-change automation also fires when a deal is moved backwards, so a deal dragged back and forth repeats the action unless the action checks first
A custom CRMWhatever you build, tested like the rest of the codeWhatever the database enforces, for example a unique constraint on a normalised emailYou own the maintenance, and somebody has to keep owning it
Native automation, duplicate handling and the trap to design around, by CRM

Our default split is the one the HubSpot page argues. Logic that stays inside the CRM uses the CRM's own automation, because the people who run the CRM can read and change it. Anything that crosses into another system goes on a platform built for that, such as Make, Zapier or n8n, or into code. Native CRM automation is usually weak at retries, error routes and telling anyone it failed, and a handoff to accounts needs all three.

Deal won

When the deal is won: the handoff to delivery and to Xero or QuickBooks

This is the automation with the most value and the most ways to quietly go wrong, because it is where one system's record becomes another system's obligation.

To delivery

Close the deal when it is won, and open the work in the system that runs delivery. That might be a monday.com board, a project tool or the delivery module of a custom system. Carry across what delivery needs, keep a link back to the deal, and let only the fields sales actually uses flow back. The handoff should be one-way for each field, and it should be safe to re-run: the second run finds the project the first run opened. On the solar ops platform that rule matters more than usual, because one deal can cover six buildings and opens six projects. Re-running a win opens projects only for buildings linked since.

To the accounts

  • Match the customer on a stored ID, not a name. Xero's documentation says a contact name may not be unique and recommends its contact ID. Creating a contact with PUT returns an error if the name or contact number already exists. QuickBooks Online requires display names to be unique across customers, vendors and employees. A flow that creates customers by name will fail on the second Alex Smith, or attach the invoice to the wrong one.
  • Write the invoice back to the CRM, and check before creating. Store the invoice number and link on the deal, and have the automation stop if one is already there. Xero accepts an idempotency key on create requests, but it only keeps the key for a few minutes. It protects a retry. It does not protect a status set again tomorrow.
  • Build the invoice lines from the CRM's products and prices, so a deal with five items becomes an invoice with five lines and the right item codes. Retyping the price, or squashing it into one line, is where totals stop agreeing.
  • Let the accounting system own tax, payment and paid status. The CRM can show that an invoice is paid, but it should read that from the ledger, never have someone type it.

Chasing the invoices once they are out is a separate job, with its own rules about tone, timing and when a person takes over. Our accounts receivable automation page covers it. The CRM side ends when the invoice exists and the CRM knows its number.

Failure modes

How CRM automation fails, mostly from our own builds' stated limits

Each of these is written up as a known gap on one of our own Make project pages, or is a vendor behaviour that causes one. That is why we design for them first.

The duplicate check is too strict

Matching on name and email together means a lead who uses a new email becomes a second lead. Matching on name alone merges two different people. We match on a normalised email or a normalised phone number, and send near-misses to a person instead of guessing. The cleanup merge runs after the inbound routes are fixed, never before, or it has to be done again next month.

A lead that fits no rule vanishes

A router with no fallback route ends the run silently, and the lead never reaches anyone. We now give every router a final route that hands the lead to a named person and posts an alert. An empty owner is acceptable only when someone is told to choose.

The same trigger fires twice

Someone selects a status twice, a deal is dragged backwards and forwards, or a workflow re-enrols. Each one repeats the action, and if the action is an invoice or a message, the customer notices. So the action checks its own write-back first: an invoice number already on the record, or a sent stamp on the step.

It stops, and nobody hears

A mail connection expires and the lead hook stops taking leads. The short-term rental company's lead flow logged its three errors that way. It also logs every failure to a heartbeat table and alerts a health channel, while a Slack failure is never allowed to block saving the lead. Most of the training provider's scenarios have no error route at all, which their pages state.

Renaming the board breaks the automation

Scenarios that name groups, labels or columns break when someone tidies the board. A label the board lacks fails the run, which is better than polluting the options but still needs catching. Join records on IDs that do not change, as the ad-reporting flow does with each platform's campaign ID, and treat the board structure as an interface someone owns.

A message goes to someone who opted out

A sequence that checks opt-out only when the lead is enrolled will keep messaging after the person unsubscribes. Check suppression at the moment of sending, every time. Where it matters most, put it where code cannot skip it. On our outreach platform, one suppression row stops every enrolment for that address.

Evidence

What we have built, and what it does not prove

Two client case studies are CRM work at heart. Both describe one system we built for the same client, a CRM of its own rather than automation on one bought in. The solar operating system replaced a CRM, a monday.com workspace, spreadsheets and several no-code apps for a UK commercial solar installer. It has a pipeline gated on the data each stage needs. Meeting transcripts are matched to CRM records by attendee, and the actions in them are confirmed by a person and then chased. A website chatbot gets exactly one tool, capture a lead. Importers brought across the previous CRM's companies, deals and contacts, and can be re-run safely. The solar ops platform is the same client's deal and site model. A captured lead opens an opportunity linked to its company and contact, and a won deal opens a project for each building it covers.

FlowAroundWhat it doesMake's counters, and the catch
Lead-ad capturemonday.com CRMLead-ad submissions into the CRM once, a duplicate becomes a note, eligibility routing286 runs, no errors. A changed email still creates a second lead
Website forms to CRMmonday.com CRMA webhook per page, lead created with source and course, questionnaire as a note51 runs, five errors while building. No duplicate check
Reply forwardingmonday.com CRM, OutlookA lead's reply goes to the rep the CRM names as owner441 runs in each forwarder, no errors
Call and voicemail loggingmonday.com CRM, Aircall, TwilioEvery call on a board, every voicemail a routed task2,910 runs, no errors. One call can create several rows
CRM-triggered invoicingmonday.com CRM, XeroA status change raises, sends and writes back an invoice78 runs, one error. Not idempotent
Lead-to-invoice attributionGravity Forms, XeroEnquiries matched to the quotes and invoices raised for them523 runs, five early errors. Matches on email alone
Lead intake pipelineAirtable, a CRM, SlackA website lead becomes a card, a row and a contact, with a response clock31 runs. Switched off on 2 October
Make flows built around a CRM, as their project pages describe them

Beyond what is published, we have built CRM and project-management systems for businesses in hospitality, events and furniture, and solar CRM and ERP work. On Zapier, that includes WooCommerce orders into monday.com and then into Xero invoices with multiple line items, Gravity Forms into Cliniko with conditional logic, Airtable with Calendly, and Heymarket SMS. None of those has a published write-up, so we give no figures or results for them.

The honest limit

When the CRM should be replaced, not automated harder

Keep the CRM you have by default. A standard pipeline (one deal, one customer, a handful of stages, an invoice at the end) is exactly what HubSpot, monday CRM and Pipedrive are built for, and a custom build next to one is a second system to keep in step. Automation on a CRM that fits is cheaper than any replacement.

Replacement starts to pay when the automation is propping up the wrong shape. The record you work on is not a deal, for example a building, a vehicle or an event. One sale has to open several pieces of work. The rules that must hold, such as no quote without a survey or no stage without the data, cannot be enforced in the CRM, only reminded about. Or the same customer is being re-keyed between three tools. That was the solar installer's situation, and the answer was one system with the gates in the database and importers that brought the old CRM's records across safely.

It is the wrong answer for a small team with a standard pipeline, where nobody will own the system after it ships, and wherever the main complaint is really per-seat cost. A seat problem is usually solved by a portal or a report, not by a new CRM. If you are a solar business weighing the question, our solar operations software page covers that build, and our article on solar CRM versus solar ERP covers the choice.

Scope

What moves the estimate for CRM automation, and what to send

Most of our projects land between $5,000 and $10,000 (US dollars). Larger systems cost more. That is a typical range, not a quote, and no case study or flow page states a price. Your automation platform's usage is a running cost on top. What moves the number:

  • How many ways leads arrive, and whether each channel carries an email or phone number to match on.
  • How much duplicate data is already in the CRM, and whether a cleanup is part of the job.
  • Whether the won-deal handoff goes to one system or several: a delivery board, Xero or QuickBooks Online, a project tool.
  • Whether the rules exist on paper (who owns which lead, what each stage needs) or have to be agreed first.
  • Whether the automation lives in the CRM, on Make, Zapier or n8n, or in code, which follows from how much has to be retried and audited.
Upwork record

CRM work delivered on Upwork

12 CRM jobs from Saveez Irfan's Upwork history, anonymised by industry and country. These are client engagements, most of them short, not written-up case studies. Each summary is the client's brief unless a review confirms what was built, and reviews are quoted as written, only where the client left five stars and text.

  • Top Rated
  • 100% Job Success Score
  • 114 jobs
  • 1,925 hours
  • Member since Sep 2022
  • Make Advanced certification, Oct 2025

Saveez Irfan’s Upwork profile, as of 21 October 2026. View the profile on Upwork (opens in a new tab)

  • 2025–2026 · North Carolina, USA

    HubSpot, Google Drive and Slack connected through Zapier

    We set up and tidied the Zapier connections between HubSpot, Google Drive and Slack for a small team, with suggestions for the processes worth automating next.

    • Zapier
    • HubSpot
    • Google Drive
    • Slack
    “I had a great experience working with Saveez. He is very skilled and thorough. He is responsive and available. He completed the project quickly and with no problems. The automations that he created save our small team time. He's a great resource. We will work with him again in the future as our automation needs increase.”
    Upwork review, 5 out of 5
  • 2025

    Calendly bookings assigned to the right owner in Close

    We built a Zapier automation that assigns each new Calendly call booking in Close to the team member it was booked with, and attaches the phone number to the correct lead. A one-day build, then a follow-on contract.

    • Zapier
    • Close
    • Calendly
    “Saveez was amazing. He went above and beyond and even made suggestions to help the optimization of my current tech stack. Highly recommended”
    Upwork review, 5 out of 5
  • 2025 · California, USA

    Scheduled PropertyRadar exports into GoHighLevel contacts

    We built phase one of a two-phase project: two scheduled Zaps that export a PropertyRadar list at 6am on weekdays and create or update the contacts in GoHighLevel, with field mapping and error handling. Phase two was dropped over a limit in the client's tech stack, as the review says.

    • Zapier
    • GoHighLevel
    • PropertyRadar
    “Saveez is great. Highly skilled. Finished part of 1 of a 2 phase project swiftly. We unfortunately hit an unavoidable roadblock w/the tech stack that forced us to abandon a 2nd phase. Would recommend.”
    Upwork review, 5 out of 5
  • 2025 · Oregon, USA

    AI receptionist messages mapped into HubSpot

    We fixed the field mapping for an AI receptionist that sends customer messages into HubSpot through a form via Zapier, in a single day.

    • Zapier
    • HubSpot
    “Saveez was incredibly kind and helpful. He fulfilled our needs quickly and excelled in his work. I highly recommend him!”
    Upwork review, 5 out of 5
  • 2025 · Local service business · Wisconsin, USA

    GoHighLevel data pushed into an API-only field-service system

    The brief was to push data from GoHighLevel into FieldRoutes, which is reachable only through its API, using a Zapier connection.

    • Zapier
    • GoHighLevel
    • FieldRoutes
Show 7 more
  • 2025 · California, USA

    monday.com CRM with proposal tracking, linked by Zapier to Outlook and QuickBooks

    The brief was a monday.com CRM with a sales pipeline, proposal tracking, workflow automations and executive dashboards, connected by Zapier to Outlook, SharePoint and QuickBooks.

    • monday.com
    • Zapier
    • QuickBooks
    • Outlook
    • SharePoint
  • 2025 · Custom signage and design · Australia

    Quoting, proofing and job-management stack for two related businesses

    The brief was to recommend and integrate a quoting, invoicing, design-proofing and project-management stack for two related businesses, with Zapier automations, training and documentation.

    • Zapier
    • HubSpot
  • 2025 · Talent and recruitment · Australia

    Migration to monday Sales CRM, linked to a talent board

    The brief was to move workflows and leads from monday Work Management into monday Sales CRM, configure Contacts and Deals, and link the CRM to a talent board with Zapier.

    • monday.com
    • Zapier
  • 2024–2025 · E-commerce · Australia

    monday.com CRM configured with the team, so they could run it

    The brief was to configure and automate a monday.com CRM on calls with the team, so they could maintain it themselves afterwards.

    • monday.com
  • 2025–2026 · Real estate agent recruiting · Illinois, USA

    Recruiting board linked to monday CRM by five Make scenarios

    The brief was five Make scenarios linking a custom recruiting board to monday CRM Contacts, Accounts and Deals: contacts created automatically, and a deal created when a lead's status becomes Won.

    • Make.com
    • monday.com
  • 2025 · Arizona, USA

    AWeber lead sync into HubSpot repaired

    The brief was to fix a Make scenario that had stopped syncing lead captures from AWeber into HubSpot.

    • Make.com
    • HubSpot
    • AWeber
  • 2025 · UK

    Contract generation from Close CRM, fixed and replicated

    The brief was to fix a failing Make scenario that generates contracts (webhook to Close to PandaDoc, with a Slack alert) and replicate it for a second contract type.

    • Make.com
    • Close
    • PandaDoc
    • Slack

3 of these were for Australian businesses. Our work for Australian businesses

Adjacent work

Related projects that were not this job

Here for the argument rather than as evidence of this exact work. Each one bears on a decision above, and the note says which.

Related reading

Questions

CRM automation, specifically

Software doing a CRM's clerical work: capturing leads from every channel once, routing each to an owner, running follow-ups, triggering the work a stage promises, handing a won deal to delivery and the accounts, and keeping data clean enough to report on. The parts to keep away from automation are deciding who a customer is without a stored key, re-sending without checking what was sent, and anything about money without a record of it.

Sources

Statements about what a platform, regulator or provider says come from their own pages. Rules and limits change, so check the current page before you rely on one.

Page copy drafted with AI assistance. Skofi is accountable for it. Editorial policy

Start here

Tell us about the process that keeps costing you.

A 15-minute call is usually enough to say whether this is an automation, an integration, or something that should be built, and whether we are the right people for it.

Book a 15-minute callsaveez@skofi.tech

What happens on the call

  • 15 minutes, no deck
  • We map the process on the call
  • A written scope, or an honest no
Book a call