The False Dichotomy of Product Integrations: Speed vs. Depth
Are you forced to choose between the speed of a unified API and the depth of an embedded iPaaS? Here is why that tradeoff is an architecture problem, not a rule.
You do not have to choose between launching an integration this quarter and actually building what your enterprise customer asked for.
If you are a product manager or engineering leader at a B2B SaaS company, the decision usually hits during a quarterly planning meeting. Your sales team just lost a deal because your product doesn't integrate with a prospect's HRIS. Your biggest enterprise customer is asking you to sync a custom Salesforce object that your current integration doesn't support. And your engineering backlog is already six months deep.
The numbers make the pressure real: 92% of B2B SaaS leaders observe that customers using integrations are less likely to churn, and 51% of B2B tech buyers consider poor integration with their existing tech stack as a strong reason to explore new SaaS vendors. Integrations aren't a nice-to-have. They are the deal.
When evaluating the build vs. buy decision, the market presents you with a frustrating choice. On one side, standard unified APIs promise incredible speed—integrate once, connect to 50 platforms—but force your data into rigid, lowest-common-denominator schemas. On the other side, embedded iPaaS solutions offer deep, custom functionality, but force your engineering team to drag and drop visual workflows to build integrations one at a time.
This is the classic "speed vs. depth" tradeoff. It dominates the conversation around unified API vs. embedded iPaaS.
But this tradeoff is a lie. It is not an absolute rule of software engineering. It is an artifact of flawed architectures. Here is why the industry consensus is wrong, and how a programmable integration layer allows you to ship deep, custom-tailored integrations at the speed of a single unified API.
Why the Industry Thinks Unified APIs Are "Shallow"
Competitors in the integration space openly admit their limitations. Vendors like Nango explicitly state that unified APIs work best for "shallow integrations across many APIs" where only basic details are needed. Paragon echoes this, arguing that "even for shared entity types, nuances between APIs can lead to many limitations," and suggests that embedded iPaaS is a more scalable solution.
Why is this the industry consensus? Because API schema normalization is hard.
To make 50 different CRMs look exactly the same, traditional unified API providers rely on the Adapter Pattern. They write a hardcoded adapter class for Salesforce, another for HubSpot, and another for Pipedrive. To make these adapters maintainable, they create a standardized, lowest-common-denominator schema.
If a feature exists in Salesforce but not in Pipedrive, it gets stripped out of the unified model. When your biggest enterprise customer asks you to sync a heavily modified nested object from their HubSpot instance, the unified API provider's rigid data model simply drops the payload. You check the vendor's documentation, submit a feature request, and get told the endpoint is "on the roadmap for Q4."
Read more: Your Unified APIs Are Lying to You: The Hidden Cost of Rigid Schemas
This architectural rigidity is exactly why unified APIs earned a reputation for being shallow. When integration logic is hardcoded into the vendor's application layer, every new custom field or endpoint requires a code deployment from the vendor. You are entirely at the mercy of their engineering velocity.
The Embedded iPaaS Illusion
Frustrated by rigid schemas and missing endpoints, many product managers and engineering leaders pivot to embedded iPaaS platforms.
Embedded iPaaS platforms give you direct access to the underlying API. They let you handle custom fields, map bespoke data structures, and orchestrate complex, multi-step workflows. But they do this by abandoning the "build once, connect many" velocity that made you want an integration platform in the first place.
Visual Programming is Still Programming
With an embedded iPaaS, you are still building integrations one by one. Instead of writing code in your IDE, your engineers are connecting nodes in a proprietary visual workflow builder.
You still have to understand the quirks of the Salesforce API. You still have to figure out the pagination limits of Zendesk. You still have to navigate the undocumented authentication flows of legacy ERPs. The embedded iPaaS gives you the infrastructure to run the integration, but you still own the logic. Furthermore, senior engineers often find visual workflow builders disjointed from the rest of their software development lifecycle—they want code, version control, and CI/CD.
Industry data shows that maintaining a single custom integration costs engineering teams between $50,000 and $150,000 annually. Moving that maintenance burden into a drag-and-drop UI does not eliminate the cost; it just changes the interface. If you need to integrate with 30 CRMs, you are building 30 separate workflows. You are trading the architectural gridlock of a unified API for the linear scaling pain of an embedded iPaaS.
Breaking the Dichotomy: The Programmable Integration Layer
You should not have to choose between 1-to-many velocity and deep custom functionality. Truto shatters this compromise through a fundamentally different architecture: the programmable integration layer.
Instead of writing integration-specific code adapters, Truto uses a zero-code architecture powered by JSONata. In our system, integration behavior is defined entirely as data—JSON configuration blobs and declarative mapping expressions stored in the database.
The runtime engine is a generic pipeline that reads this configuration and executes it. The engine doesn't know or care whether it's talking to HubSpot or Salesforce. This allows us to provide the massive scale of a unified API while exposing the deep, per-customer configurability of an embedded iPaaS.
Here is how we break the speed vs. depth tradeoff:
1. Programmable Mapping with JSONata
Instead of rigid 1:1 field mapping, every field transformation is a JSONata expression—a functional, Turing-complete query language for JSON. A mapping expression can handle conditionals, string manipulation, array transforms, and date formatting. This is what lets a single unified contacts endpoint handle HubSpot's nested properties.firstname field and Salesforce's flat FirstName field without a single line of integration-specific code.
2. Three-Level Override Hierarchy
Because all mapping logic is defined as declarative expressions, it can be overridden without deploying code. Truto utilizes a three-level override hierarchy:
| Level | Scope | Example |
|---|---|---|
| Platform Base | Default mapping for all customers | Standard CRM contact fields |
| Environment Override | Per-customer environment | Add industry-specific fields |
| Account Override | Per connected account | Handle a customer's custom Salesforce objects |
If a specific enterprise customer has a deeply customized Salesforce instance, you can override the JSONata mapping for just that account. You can map their bespoke Industry_Vertical__c field to your unified schema instantly. No code changes. No deployments. No waiting on a vendor's roadmap.
3. The remote_data Escape Hatch
Standard unified APIs silently drop data that does not fit their schema. Truto takes a stance of radical transparency. We always preserve the original, raw third-party payload in a remote_data object attached to every single response.
{
"result":[
{
"id": "123",
"first_name": "John",
"last_name": "Doe",
"email_addresses":[{"email": "john@example.com"}],
"remote_data": {
"Id": "003xxx",
"FirstName": "John",
"LastName": "Doe",
"Email": "john@example.com",
"Bespoke_Enterprise_Field__c": "Critical Value"
}
}
]
}No custom field is ever truly lost. You get the clean, normalized schema for your core application logic, and the raw escape hatch for edge cases.
4. Multi-Step Orchestration (Before/After Steps)
Real-world integrations are rarely a single API call. You might need to fetch a list of custom fields before querying contacts, or pull a contact's associated company after fetching the contact.
A programmable integration layer solves this with before/after steps—ordered pipelines of operations that execute around the main API call. Each step can make additional API requests, transform data, or conditionally execute based on the request context. This is the "depth" that embedded iPaaS platforms claim to offer, delivered through the unified API.
Read more: Beyond 1-to-1: Architecting Multi-Step API Orchestration
Deep Integrations at the Speed of a Unified API
Let's make this concrete. Say you're building a product that needs to sync CRM contacts—including each contact's associated company and any custom tags—across Salesforce, HubSpot, and Pipedrive.
In an embedded iPaaS, you would build three separate multi-node visual workflows. You would set up triggers, handle pagination manually, loop through results, make subsequent requests to company endpoints, and write custom script blocks to merge the data.
In Truto, you make a single unified request:
GET /unified/crm/contacts?integrated_account_id=abc123&include=companiesThe underlying JSONata engine and execution pipeline handle the rest. It resolves the integration config, executes any before steps, calls the third-party API, fetches related resources, and merges them using a defined join strategy. You get the exact deep integration your enterprise customer demanded, but you get it across 50 CRMs instantly.
What to Ask When Evaluating Integration Platforms
The next time a vendor tells you that you have to choose between speed and depth, push back with these questions:
- Can I customize the unified schema per customer without filing a feature request? If the answer is no, you'll hit a wall the moment an enterprise customer needs a custom field.
- Can a single unified API call execute multi-step logic? If the platform can't chain API calls or enrich data within a single request, you'll end up building orchestration logic in your own codebase.
- Is the original third-party response always preserved? If the platform strips raw data during normalization, you're losing information you might need later.
- Does adding a new integration require a code deployment on the vendor's side? If yes, you're dependent on their release cycle.
- Can my engineers use their existing tools and workflows? If the platform forces you into a visual builder, adoption will suffer.
Stop Compromising on Your Integration Roadmap
The idea that you must choose between a shallow unified API and a slow embedded iPaaS is a false dichotomy. By treating integration logic as programmable data rather than hardcoded infrastructure, you can achieve both.
Your engineering team should be building your core product, not mapping custom fields in a visual workflow builder or waiting on a vendor's roadmap to support a new endpoint.
FAQ
- What is the difference between a unified API and an embedded iPaaS?
- A unified API normalizes multiple third-party APIs into a single endpoint for 1-to-many velocity, but often lacks depth. An embedded iPaaS provides infrastructure and visual workflow builders to create deep, custom integrations, but requires building them one at a time.
- Why do unified APIs struggle with custom fields?
- Most standard unified APIs use hardcoded adapters that force data into a lowest-common-denominator schema. If a custom field or object doesn't fit their rigid model, it gets dropped entirely.
- What is a programmable integration layer?
- A programmable integration layer is an architecture where mapping logic, API configurations, and data transformations are stored as data rather than code. This allows teams to add new integrations, customize schemas, and build multi-step workflows without code deployments.
- Can I customize unified API schemas for specific customers?
- While standard unified APIs do not allow this, programmable unified APIs like Truto offer a multi-level override system (platform, environment, and account level). This lets you customize field mappings and query logic per customer without writing new code.