8 min read
- CRM integration
- API integration
- Webhooks
- Data sync errors
- Business process automation
- Integration architecture

Founder, InfoWebPlus
Full analysis
A CRM integration that impresses everyone in a demo and one that survives eighteen months of real customer traffic are not the same engineering problem, even though they look identical on the day it ships. Demos run on clean test data, a handful of records, and a stable network. Production runs on messy data, thousands of records, vendor API changes nobody announced, and traffic spikes nobody planned for. Almost every "the integration just stopped working" conversation we have with clients traces back to one of a small number of predictable failure modes, and every one of them is a design decision, not bad luck.
Why the Demo Doesn't Predict Production
Vendors selling integration platforms and contractors quoting a fixed-price build both have an incentive to show you a working connection between two systems and call it done. And it is done, in the narrow sense that data flows from A to B when both systems are healthy and the volume is low. What a demo can't show you is what happens when the CRM's API returns an error at 2am, when a sales rep re-imports a spreadsheet that already synced last week, or when the vendor deprecates the API version your integration was built against. Those are the moments that actually determine whether the integration holds up.
If you've already worked through a framework for screening automation candidates and decided a process is worth automating, the integration layer is where that decision either pays off or quietly erodes. A process with a high exception rate that gets automated on top of a fragile integration doesn't save time, it just moves the manual work downstream to whoever has to clean up the duplicate records.
Duplicate Records and Sync Conflicts
The most common integration failure we see in CRM work is duplicate records, and it almost always comes from the same root cause: the integration doesn't have a reliable way to tell "this is a new record" apart from "this is an update to a record I already synced." Without a stable external ID strategy, a sync job that retries after a timeout, or a webhook that fires twice for the same event, will create a second lead instead of updating the first one.
The fix is idempotency: every write to the CRM should be tied to a unique key generated at the source, and the integration should always attempt an upsert (update if it exists, insert if it doesn't) rather than a plain insert. This is an established pattern in API design generally, not something specific to one CRM. The business cost of skipping it is concrete: sales reps working duplicate leads, marketing emails sent twice to the same contact, and pipeline reports that overcount revenue because the same deal exists under three different record IDs.
Webhooks vs Polling: The Trade-off That Gets Glossed Over
Webhooks (the vendor's system pushing data to yours the moment something changes) are usually presented as the modern, efficient choice, and polling (your system asking "anything new?" on a schedule) is treated as the outdated fallback. In practice each has a failure mode the other doesn't. A webhook that fires while your endpoint is down, deploying, or briefly unreachable is often gone for good, since most vendors retry delivery a limited number of times over a short window, not indefinitely. Polling doesn't have that problem, because you're the one asking, so you simply ask again next cycle. What polling costs you is latency and, at higher volume, pressure on rate limits.
The integrations that hold up in production usually don't pick one or the other. They use webhooks for real-time responsiveness and a lower-frequency polling job as a reconciliation check, comparing record counts or timestamps between the two systems and flagging anything that drifted. That reconciliation job is unglamorous, and it's the piece most contractors skip when quoting a fixed price, because it never shows up in a demo.
Auth Tokens That Expire Quietly
OAuth tokens expire on a schedule, refresh tokens get revoked when someone changes a password or an admin removes an app's permissions, and API keys occasionally rotate during a vendor's own security work. None of that is unusual. What determines whether it's a five-minute fix or a two-week silent outage is whether the integration treats an authentication failure differently from a temporary network error.
A lot of integrations retry every failure the same way: wait, try again, log the error, move on. If the underlying cause is an expired token, that loop can run for weeks without anyone noticing, because from the outside nothing looks broken, records just stop appearing. The design decision that prevents this is alerting specifically on authentication failures, separate from generic error logs, and running the integration under a dedicated service account rather than an individual's login, so a departing employee's password reset doesn't take the integration down with it.
Schema Drift: When the Vendor Changes Their API Under You
CRMs and other SaaS platforms change their APIs. Fields get renamed, deprecated, or shift from optional to required. If your integration reads or writes fields by hard-coded name and assumes the contract never moves, a vendor's routine update can silently start dropping data into the wrong place or failing on a field that used to work fine. This is one of the more common documented causes of CRM sync errors, and it's rarely caused by a bug, it's caused by an assumption that the contract between two systems is static when it isn't.
The mitigation isn't glamorous either: pin to a specific API version where the vendor supports it, validate the shape of incoming data before writing it anywhere, and alert on unexpected or missing fields instead of writing nulls and moving on. The exposure here can be more than an annoyance. If the field that silently stops populating is a consent flag, a retention date, or a required disclosure, a schema change on the vendor's side has become a compliance problem on yours.
Rate Limits: Fine at Ten Records, Broken at Ten Thousand
Every CRM API enforces rate limits, and a demo or pilot rarely generates enough traffic to hit them. Production does, especially during the exact moments the business cares about most: a marketing campaign, a seasonal sales push, a bulk data cleanup. An integration that wasn't built with backoff and retry logic doesn't fail gracefully under those limits, it fails abruptly, and depending on how it's written it can drop the records that didn't make it through rather than queueing them for later.
This is the failure mode most likely to translate into a number someone can point to: lost orders, leads that never made it into the CRM, or a support queue full of "where's my confirmation" tickets after a sale. Asking a vendor or contractor how their integration behaves specifically at five or ten times the volume shown in the demo is a fair question, and a vague answer is worth taking seriously.
The Failure Mode That Matters Most: Nobody Notices
Every failure mode above eventually produces the same worst-case outcome: silence. The integration stops working, or starts working incorrectly, and there's no message anyone sees, because the failure happened between two systems and neither is designed to tell a human about it. The team finds out when a customer calls asking why their order was never processed, or a sales manager notices the pipeline numbers don't match what the reps say they're working.
Integrations built to hold up in production treat observability as part of the build, not an afterthought: a log of every sync attempt and its outcome, a periodic reconciliation report comparing record counts between systems, and alerts that reach a person rather than sit in a log file nobody checks. This is the same pattern we describe in the internal tool lifecycle model: tools and integrations don't fail all at once, they degrade quietly, and the ones caught early are the ones someone built a way to notice.
No one budgets for a vendor changing an auth flow eighteen months after launch, but someone still has to own the fix when it happens. We've written about the same maintenance gap in the context of AI features in our piece on who maintains an AI feature in month 18; the same question applies to any third-party integration your team didn't build and doesn't fully control.
What to Ask Before You Approve an Integration Proposal
- What happens if the other system's API is unreachable for an hour: does data queue, retry, or silently drop?
- How does the integration prevent duplicate records when a sync retries after a timeout?
- Is the integration using webhooks, polling, or both, and what's the reconciliation check between them?
- What alerts a person, not just a log file, if authentication fails or a scheduled sync stops running?
- What happens the day the vendor renames a field or deprecates the API version this was built on?
- Has this been tested at meaningfully higher volume than the demo, not just at the numbers shown on the call?
None of these questions require a technical background to ask, and a contractor or vendor who has actually thought about production reliability will have concrete answers rather than reassurance. This is also the point where it's worth asking whether the integration is the right approach at all, which is the same judgment call documented in our case study on when we recommend against building custom software: sometimes the honest answer to a fragile integration is a smaller, more reliable one, not a more elaborate one.
We build Custom Software with this list in mind from the start, because integrating with a CRM or a vendor's API is rarely a side detail, it's usually the part of a project most likely to cause problems a year or two in. If you're evaluating a proposal for a CRM or API integration, or trying to work out why one that's already live keeps generating quiet problems, it's worth working through this list before more data goes missing than anyone's noticed yet.
What's the difference between a webhook and a polling integration?
How do I know if our CRM integration has silent failures?
Should we build a custom integration or use a pre-built connector?
Share this article
Copy the article URL or use your device share sheet.
Related reading
How to Tell Which Business Processes Are Actually Worth Automating
A practical, five-signal framework for screening automation candidates before you commit budget: volume, frequency, exception rate, rule clarity, and cost of error.
- Process automation
- Workflow mapping
- Automation ROI
How Much Does Custom Software Development Really Cost?
A realistic breakdown of what drives custom software pricing, why two quotes for the same project can differ by five times, and the questions that separate a solid estimate from one that blows up in month six.
- Custom software cost
- Software pricing
- Internal tools
How Search Engines Verify Your Business Is Real
Search engines cannot call you to check you are legitimate. Here is what they check instead, and why it directly affects your rankings.
- Entity Stacking
- Trust Signals
- SEO Services
Want help applying this?
Rough scope is fine. Tell us what you are building, we reply with options and tradeoffs, not a generic pitch.