
How to Add Integrations to a SaaS Product: A Practical Guide
A customer asks whether your SaaS product integrates with Salesforce.
Then another asks for HubSpot. Someone else needs Slack. An enterprise prospect wants Microsoft Dynamics. Your sales team adds Jira to the wishlist. A customer wants their data pushed into Google Sheets.
At first, each request looks like a small feature.
It isn't.
A production SaaS integration can involve authentication, API calls, data mapping, pagination, rate limits, webhooks, retries, background jobs, monitoring, permissions, customer configuration, and ongoing maintenance.
That's why the right question isn't simply “How do we connect our SaaS to another app?”
It is:
“What is the right way for our product to offer and operate this integration for every customer who needs it?”
This guide walks through the technical and product decisions involved in adding integrations to a SaaS product—from the first API call to production monitoring—and explains when it makes sense to build integrations yourself versus using integration infrastructure.
What does it mean to add an integration to a SaaS product?
A customer-facing integration allows your users to connect your product to software they already use. For example, imagine you operate a customer-support SaaS platform.
A customer might want:
Your SaaS → HubSpot
When a support ticket reaches a certain stage, create or update a contact in HubSpot.
Or:
Your SaaS → Slack
When a high-priority ticket is created, notify a Slack channel.
Or:
Salesforce → Your SaaS
When a new opportunity is created, bring it into your application.
These are all integrations, but they have different technical requirements. A useful way to think about an integration is as a collection of capabilities:
Connect the customer's account
Authenticate securely
Read data
Write data
Transform data
Synchronize data
React to events
Handle failures
Show status to the customer
The API request is only one piece of that system.
Before building anything, decide what the integration needs to do
One of the easiest ways to waste engineering time is to start with the third-party API instead of starting with the customer use case.
Don't begin with:
“Let's integrate HubSpot.”
Begin with:
“What should a customer be able to accomplish with HubSpot?”
For example, your requirements might be:
Connect a HubSpot account.
Import existing contacts.
Create new contacts.
Update contacts when records change.
Trigger workflows when a contact changes.
Allow customers to map their fields.
Show whether synchronization is working.
Now you have something engineers can actually design.
Five common integration capabilities
Capability | Example |
|---|---|
Read | Retrieve contacts from HubSpot |
Write | Create a contact in HubSpot |
Sync | Keep customer records synchronized |
Trigger | Start a workflow when a deal changes |
Action | Send an email, create a ticket, update a record |
The integration architecture should follow the capabilities your customers actually need.
The anatomy of a production SaaS integration
A production integration normally has considerably more moving parts than its first prototype.

1. Authentication
You need a secure way for a customer to authorize your application to access their account.
OAuth 2.0 is common for SaaS applications, although some APIs use API keys, personal access tokens, service accounts, or other authentication mechanisms.
OAuth itself isn't simply a “Connect” button. Your application needs to manage authorization, tokens, scopes, refresh behavior, and revoked credentials.
For example, Google's OAuth documentation notes that refresh tokens can expire or be invalidated under certain circumstances, meaning applications need to account for credentials becoming unusable.
2. API communication
Your application needs code that can communicate with the third-party API. That means handling:
HTTP requests
authentication headers
request bodies
response parsing
status codes
timeouts
API versions
API-specific behavior
3. Data mapping
Your application's customer object may not look anything like another application's contact object.
You might have:
Your SaaS
customer.name
customer.email
customer.company
while another application expects:
CRM
firstname
lastname
email
company
Now you need transformation and mapping logic. The problem becomes even more complicated when customers have custom fields.
4. Pagination
Third-party APIs frequently return records in pages rather than returning every record in one request.
If a customer has 250,000 contacts, your integration needs to retrieve them safely without assuming everything fits in a single API response.
Pagination becomes especially important when implementing historical imports and synchronization.
5. Rate limits
APIs impose limits on how frequently your application can make requests.
For example, HubSpot documents account-level request limits for distributed OAuth applications, while Salesforce documents rate-limit considerations for its APIs.
Your integration therefore needs to understand:
how many requests are allowed
what happens when limits are exceeded
how to back off
when to retry
how to prevent one customer from consuming disproportionate capacity
A 429 Too Many Requests response shouldn't become a customer-facing outage.
6. Webhooks
If the third-party application supports webhooks, you can receive events when something changes instead of constantly asking the API whether anything changed.
For example:
HubSpot
↓
Contact updated
↓
Webhook
↓
Your integration service
↓
Update your SaaS
But webhooks introduce their own engineering requirements.
You need to validate incoming requests, process events reliably, handle duplicates, deal with ordering issues where relevant, and retry failed processing.
HubSpot, for example, documents webhook retries when the receiving service fails, times out, or returns an error.
7. Error handling
Third-party APIs fail.
Tokens expire.
Customers revoke access.
An API becomes temporarily unavailable.
A field disappears.
A request gets rate-limited.
A webhook arrives twice.
Your integration needs to know which failures are:
temporary
permanent
customer configuration problems
authentication problems
provider problems
bugs in your own code
That distinction determines whether you retry, ask the customer to reconnect, or alert your engineering team.
8. Observability
Once customers depend on the integration, “it doesn't work” isn't enough information.
You need to know:
Which customer was affected?
Which integration?
Which operation?
What request failed?
What response did the provider return?
Was the credential valid?
Was the request retried?
How many times?
Did the integration eventually recover?
Without observability, your support team becomes the monitoring system.
How to add an integration to your SaaS product
Here is a practical implementation process.
Step 1: Prioritize the integration
Don't build integrations purely in the order customers request them.
Score each candidate based on:
Integration priority = customer demand + revenue impact + strategic value + reuse potential − implementation complexity
For example:
Factor | Score |
|---|---|
Number of customers requesting it | 5 |
Revenue influenced | 5 |
Strategic importance | 4 |
Reuse across customer base | 5 |
Engineering complexity | -3 |
Maintenance complexity | -3 |
Total | 13 |
The exact formula isn't important. The discipline is.
It prevents an integration requested by one low-value customer from automatically jumping ahead of an integration that could unlock an entire segment.
Step 2: Define the supported use cases
Don't try to implement every endpoint immediately. Suppose you're integrating Salesforce.
You might initially support:
create contact
find contact
update contact
create opportunity
update opportunity
receive opportunity events
You may not need 500 Salesforce endpoints. The best first version is the smallest set of capabilities that solves meaningful customer problems.
Step 3: Study the third-party API
Before writing code, document:
authentication method
required scopes
available endpoints
API versions
rate limits
pagination
webhooks
error responses
object relationships
custom fields
bulk APIs
provider-specific limitations
This becomes the technical specification for the integration.
A useful internal document might look like:
Integration: HubSpot
Authentication:
OAuth 2.0
Objects:
Contacts
Companies
Deals
Read:
GET contacts
GET companies
Write:
Create contact
Update contact
Events:
Contact created
Contact updated
Limits:
Per-account API limits
Failure handling:
Retry 429 and transient 5xx responses
Customer configuration:
Contact field mapping
Pipeline selection
Doing this before development exposes difficult requirements early.
Step 4: Build the authentication flow
The customer should be able to connect their account without giving your application their password.
For OAuth-based integrations, the flow generally looks like:
Customer clicks Connect
↓
Your application starts authorization
↓
Customer grants permissions
↓
Provider redirects back
↓
Your backend exchanges authorization code
↓
Access/refresh credentials stored securely
↓
Integration becomes connected
Keep credentials isolated by customer or tenant. Do not design your system as if there is one global HubSpot account.
Your SaaS may have 1,000 customers, each connecting a different HubSpot account.
Step 5: Build the connector
Now implement the provider-specific communication layer.
Conceptually:
Your product
↓
Integration abstraction
↓
HubSpot connector
↓
HubSpot API
The connector should hide provider-specific details from the rest of your application where possible.
For example:
createContact()
updateContact()
findContact()
listContacts()
rather than spreading HubSpot-specific HTTP requests throughout your application. This makes the integration easier to test, replace, and extend.
Step 6: Map your data to the external system
Data models rarely match perfectly.
Your application may have:
Full name
Company
Email
Plan
Customer status
The external application might use:
First name
Last name
Company name
Email
Lifecycle stage
Custom properties
You need explicit mapping rules.
For example:
customer.email
↓
contact.email
customer.company
↓
contact.company
customer.status
↓
contact.lifecycle_stage
For customer-facing integrations, consider making some mappings configurable rather than hardcoding everything.
That allows different customers to use the same integration while accommodating differences in their setup.
Step 7: Implement synchronization
There are two fundamentally different synchronization directions:
Push
Your SaaS
↓
External application
Pull
External application
↓
Your SaaS
You may also need bidirectional sync:
┌──────────────┐
│ │
Your SaaS ↔ External App
│ │
└──────────────┘
Bidirectional synchronization is considerably more complicated because you need to reason about:
conflicts
source of truth
timestamps
duplicate records
deleted records
retries
ordering
idempotency
Don't build bidirectional synchronization simply because it sounds more complete. Build it when the customer workflow actually requires it.
Step 8: Use webhooks where appropriate
Polling might look like:
Every 5 minutes:
“Anything changed?”
“Anything changed?”
“Anything changed?”
A webhook is closer to:
Something changed.
→ Tell us.
Webhooks can reduce unnecessary polling and improve responsiveness. But they aren't automatically simpler.
Your webhook system needs:
public HTTPS endpoints
authentication/signature validation where supported
event validation
idempotency
retry handling
event persistence
monitoring
replay/recovery strategies where necessary
For example, HubSpot's current webhook documentation requires a publicly accessible HTTPS endpoint and describes signature validation and retry behavior.
Step 9: Design for failures
Your integration should assume failures will happen.
Consider a simple retry policy:
Request
↓
429?
├─ Yes → Backoff → Retry
└─ No
↓
5xx?
├─ Yes → Retry
└─ No
↓
4xx?
├─ Authentication → Reconnect
├─ Validation → Fix data/configuration
└─ Other → Surface error
Do not retry everything. For example, retrying a malformed request 20 times doesn't make it more valid.
And be careful with operations that create records.
I
f the first request succeeds but your application doesn't receive the response, blindly retrying could create a duplicate record. That's where idempotency becomes important.
Step 10: Build the customer experience
An integration isn't finished when the API works.
Your customer needs to understand:
what the integration does
what permissions they're granting
whether it is connected
what data is being synchronized
how to configure it
whether something failed
how to reconnect
how to disconnect it
A basic experience might be:
Settings
↓
Integrations
↓
HubSpot
↓
Connect
↓
Authorize
↓
Configure
↓
Connected
For more sophisticated products, you may need:
connection management
field mapping
workflow configuration
sync history
logs
error messages
alerts
The integration should feel like part of your SaaS—not like an unrelated developer tool bolted onto it.
Step 11: Test the integration
Don't test only the happy path.
At minimum, test:
Authentication
successful OAuth
denied authorization
expired credentials
revoked credentials
API behavior
successful requests
malformed requests
missing fields
rate limits
server errors
timeouts
Data
empty responses
large datasets
pagination
custom fields
unexpected values
Webhooks
valid events
invalid signatures
duplicate events
delayed events
failed processing
Customer experience
connect
configure
reconnect
disconnect
recover from failure
An integration that works in staging with one test account isn't necessarily production-ready.
Step 12: Monitor it after launch
The launch is the beginning of the integration's lifecycle, not the end.
Track things such as:
connection success rate
authentication failures
API error rates
webhook failures
sync failures
retry counts
latency
rate-limit events
disconnected accounts
successful workflow executions
You should ideally be able to answer:
“Which customers are affected right now, and why?”
without manually reproducing the problem.
Example: Adding a HubSpot integration
Imagine your SaaS helps businesses manage leads. You want to add HubSpot.
The first version might support this workflow:
New lead created in your SaaS
↓
Find existing HubSpot contact
↓
Does contact exist?
↙ ↘
Yes No
↓ ↓
Update contact Create contact
\ /
\ /
Done
The engineering work behind that apparently simple workflow includes:
OAuth authorization
Credential storage
HubSpot API requests
Contact lookup
Field mapping
Error handling
Rate-limit handling
Duplicate prevention
Logging
Customer-facing connection status
And that's just one workflow.
If customers later ask for:
companies
deals
custom properties
webhooks
bidirectional sync
multiple pipelines
historical imports
the scope grows again.
This is why integration engineering becomes difficult at scale: the number of integrations multiplies the number of provider-specific behaviors your team has to understand and maintain.
How to prioritize which integrations to build first
You don't need every integration. You need the right integrations.
A practical prioritization framework is:
1. Customer demand
How many customers are asking for it?
2. Revenue impact
Is the integration blocking deals or expansion?
3. Strategic relevance
Does it help you enter a market or serve a key customer segment?
4. Reusability
Will the integration solve a recurring need across many customers?
5. Technical complexity
How difficult is the API?
6. Maintenance burden
How much infrastructure and provider-specific behavior will your team need to own?
A simple scoring model:
Factor | Weight |
|---|---|
Customer demand | 30% |
Revenue impact | 25% |
Strategic value | 20% |
Reusability | 15% |
Ease of implementation | 10% |
Score each integration from 1–5.
This gives product and engineering teams a shared way to decide what belongs on the roadmap.
Should you build SaaS integrations yourself?
Sometimes, yes.
Building an integration directly against an API gives you maximum control.
It can make sense when:
you only need a small number of integrations
the integration is strategically important
the API is stable and straightforward
you need functionality unavailable elsewhere
the integration is deeply coupled to your core product
you already have the engineering capacity to maintain it
But direct development means owning the entire integration lifecycle.
That includes authentication, API behavior, infrastructure, retries, webhooks, monitoring, updates, and customer support.
The initial API implementation is only part of the cost.
As Nango's current comparison points out, building from scratch means owning areas such as pagination, token refresh, rate-limit handling, schema mapping, scheduling, retries, dead-letter handling, observability, and tenant isolation.
The four main ways to add integrations to a SaaS product
There isn't one correct architecture.
Option 1: Build integrations directly
Your engineering team builds every connector.
Best when:
you need only a few integrations
integrations are core product functionality
you need maximum control
Trade-off:
You own development and maintenance.
Option 2: Use a unified API
A unified API abstracts multiple providers behind a standardized interface.
For example:
Your SaaS
↓
Unified API
↓
┌──────────┬──────────┬───────────┐
│ HubSpot │ Salesforce│ Dynamics │
└──────────┴──────────┴───────────┘
This can work particularly well when your use case is narrow and standardized—for example, retrieving contacts across multiple CRM systems.
The trade-off is that normalized APIs necessarily abstract away some provider-specific functionality.
Option 3: Use an embedded iPaaS
An embedded iPaaS provides integration infrastructure designed to be incorporated into your own SaaS product.
The architecture looks more like:
Your SaaS
↓
Embedded integration layer
↓
Customer connects apps
↓
Workflows / actions / syncs
↓
Third-party applications
This is useful when integrations are themselves part of your product experience.
Instead of building every connector, authentication flow and execution layer yourself, you use infrastructure designed to handle those concerns.
Current embedded iPaaS offerings commonly combine connectors, orchestration, customer-facing configuration and operational tooling.
Option 4: Use a hybrid approach
This is often the most practical option.
For example:
Core product logic
↓
Your integration control plane
↓
┌───────────────┐
│ │
Direct APIs Integration platform
│ │
Strategic Long-tail
integrations integrations
You might build your most important integration directly while using integration infrastructure for the long tail.
This avoids forcing every integration into the same architecture.
Build vs. buy: a practical decision framework
Instead of asking:
“Should we build integrations or buy an integration platform?”
ask five questions.
Question 1: How many integrations will we need?
One or two is very different from 50.
Question 2: How much provider-specific functionality do we need?
If your product requires deep access to every provider's unique features, direct development may give you more control.
If you mostly need standardized capabilities, abstraction becomes more attractive.
Question 3: Are integrations part of the product?
If customers need to discover, connect, configure and monitor integrations inside your SaaS, you need more than backend API connectivity.
You need a customer-facing integration experience.
Question 4: Who will maintain them?
Ask who owns:
OAuth changes
API version updates
webhook failures
rate limits
credential problems
customer support
monitoring
If the answer is “our existing product engineers,” include that opportunity cost in the decision.
Question 5: What differentiates your product?
If integrations themselves are your competitive advantage, owning more of the stack may make sense.
If integrations are primarily infrastructure customers expect your product to have, buying commodity infrastructure can allow your team to focus elsewhere.
A simple decision matrix
Requirement | Direct API | Unified API | Embedded iPaaS |
|---|---|---|---|
Maximum provider-specific control | High | Medium | Medium–High |
Many integrations | Low | High | High |
Narrow standardized data model | Low | High | Medium |
Customer-facing workflows | Custom | Limited/varies | High |
Customer-facing integration UX | Custom | Varies | High |
Engineering ownership | High | Medium | Lower |
Long-tail integrations | Difficult | Good within category | Strong |
Custom business logic | High | Medium | High, depending on platform |
Best fit | Strategic integrations | Standardized categories | Broad customer-facing integrations |
The important point is that these approaches aren't interchangeable. A unified API and an embedded iPaaS solve different problems.
A workflow automation tool designed for internal employee automation isn't necessarily the right architecture for exposing integrations as part of your SaaS product.
And a direct API integration may be perfectly reasonable when you only need one strategically important connection.
How to design SaaS integrations that scale
The first integration can be built almost any way. The tenth integration forces you to establish architecture.

Create a common integration model
Avoid letting every connector invent its own conventions.
Define common concepts for:
connections
credentials
actions
triggers
events
jobs
retries
errors
logs
Then provider-specific code sits underneath those abstractions.
Isolate tenants
Customer A's Salesforce credentials and data must never be mixed with Customer B's. Treat every connection as belonging to a specific tenant, workspace, organization, or user context.
Use asynchronous processing
Long-running syncs shouldn't block customer-facing HTTP requests.
A better pattern is:
User action
↓
Create job
↓
Queue
↓
Worker
↓
Third-party API
↓
Store result
↓
Update status
Make operations idempotent
If an operation is retried, it shouldn't accidentally perform the action twice.
This matters particularly for:
creating records
sending messages
charging payments
triggering workflows
Build observability from the beginning
Don't wait until you have 50 integrations.
Store enough information to understand:
what happened
when it happened
for whom
which provider
which operation
whether it succeeded
why it failed
whether it was retried
Common mistakes when adding SaaS integrations
Mistake 1: Treating an integration as one API call
The first API call is usually the easy part. The production system around it is where complexity appears.
Mistake 2: Building based on API availability rather than customer use cases
An API may expose hundreds of endpoints. Your customers may only need five.
Start with the job to be done.
Mistake 3: Ignoring authentication lifecycle
Successful authorization today doesn't guarantee valid credentials forever. Tokens can expire, be revoked, or otherwise become unusable.
Mistake 4: Retrying everything
Retries need to distinguish transient failures from permanent failures.
Mistake 5: Ignoring rate limits until production
Rate limits should influence architecture from the beginning.
Mistake 6: Building one-off customer integrations
If five customers ask for essentially the same integration but you build five slightly different versions, you've created an expensive maintenance problem.
Build reusable capabilities and make customer-specific behavior configurable where possible.
Mistake 7: Forgetting the customer experience
A technically functional API connection isn't necessarily a good product integration.
Mistake 8: Having no integration owner
Someone needs to own the integration after launch. That includes monitoring, updates, documentation and customer support.
Where does an embedded integration platform fit?
If integrations are becoming a recurring product requirement, you don't necessarily need to choose between “write everything yourself” and “give up control.”
An embedded integration platform sits between those extremes.
For example, viaSocket Embed is designed for SaaS and AI companies that want customers to connect applications and use integrations inside their own product. Its current offering includes pre-built app connections, built-in authentication, an embeddable integration experience and workflow capabilities.
The important distinction is customer-facing integration infrastructure.
Instead of your engineering team separately building:
OAuth
+
Connect UI
+
Connector
+
Workflow execution
+
Retries
+
Monitoring
+
Customer configuration
you can use an integration layer that provides those capabilities and keep your own engineering effort focused on the product-specific logic.
Integrate Thousands of apps within your product.
viaSocket also supports a webhook-oriented approach where your application can send an event and trigger actions across a user's connected applications.
For AI products, integrations can also become tools rather than merely data-sync mechanisms. viaSocket's current AI offering allows connected applications to be exposed to AI agents as tools/MCP capabilities.
That distinction matters for modern AI SaaS:
Traditional SaaS
Your product
↓
Sync data
↓
Third-party app
AI SaaS
AI agent
↓
Choose tool
↓
User's connected application
↓
Take action
The right architecture depends on what your product actually needs.
The SaaS integration launch checklist
Before calling an integration production-ready, check:
Product
Customer use cases are defined
Integration is prioritized against other roadmap items
Supported capabilities are documented
Customer configuration is clear
Authentication
OAuth/API authentication works
Required scopes are documented
Credentials are stored securely
Expired credentials are handled
Revoked access is handled
Reconnection flow exists
API
Pagination is supported
Rate limits are handled
Timeouts are handled
API errors are classified
API versioning is understood
Sync
Sync direction is defined
Duplicate handling exists
Idempotency is considered
Deletes are handled where necessary
Large datasets are supported
Webhooks
Webhook endpoint is secured
Signatures are validated where applicable
Duplicate events are handled
Failed events can be retried
Event processing is observable
Operations
Logs exist
Errors can be investigated
Alerts exist for important failures
Customer connection status is visible
Integration ownership is assigned
Customer experience
Connect flow is simple
Permissions are understandable
Configuration is clear
Errors are actionable
Disconnect/reconnect works
Documentation exists
The most important lesson: integrations are a product capability, not just an API project
The first integration can tempt you into thinking:
“We'll just connect our API to their API.”
That model works until your product has ten integrations, hundreds of customers, different authentication systems, changing APIs, thousands of webhook events and a sales team promising the next connector.
At that point, you're no longer maintaining API calls. You're maintaining an integration product. That's why the right architecture depends on the role integrations play in your SaaS.
If you need one or two highly customized connections, building them directly may be the right choice. If you need standardized data across a particular category, a unified API may be appropriate.
If integrations are becoming a customer-facing product capability across many applications, an embedded integration platform can take ownership of much of the infrastructure while your team focuses on the experience and business logic that differentiate your product.
The goal isn't to build the most integrations.
The goal is to give customers the integrations they need without turning your product roadmap into an integration-maintenance roadmap.
1. How do I add integrations to a SaaS product?
Define the customer use case first, then implement authentication, API communication, data mapping, synchronization or webhooks, error handling, customer configuration, testing, and monitoring.
2. How long does it take to build a SaaS integration?
It depends heavily on the API and the required functionality. A basic API connection can be relatively small, while a production integration involving OAuth, bidirectional synchronization, webhooks, custom fields, retries and customer configuration can become a substantial engineering project.
3. Should I build SaaS integrations in-house or use an integration platform?
Build in-house when you need a small number of highly strategic or deeply customized integrations. Consider an integration platform when you need many customer-facing integrations and want to reduce the infrastructure and maintenance your engineering team owns.
4. What is the difference between a unified API and an embedded iPaaS?
A unified API generally provides one standardized API across multiple providers in a category. An embedded iPaaS is designed to help SaaS companies deliver customer-facing integrations, including connection management, workflows and integration experiences.
5. What authentication should SaaS integrations use?
OAuth 2.0 is common for customer-authorized SaaS integrations, although the correct authentication mechanism depends on the third-party provider. API keys, service accounts and other mechanisms are also used.
6. What makes SaaS integrations difficult to maintain?
Authentication changes, API version changes, rate limits, webhooks, schema changes, customer-specific configuration, retries, synchronization problems and provider outages all create ongoing maintenance work.
7. Should SaaS integrations use webhooks or polling?
Use webhooks when the provider offers reliable event notifications and your use case benefits from near-real-time updates. Polling can still be appropriate when webhooks aren't available or when periodic synchronization is sufficient.
8. What integrations should a SaaS product build first?
Prioritize integrations based on customer demand, revenue impact, strategic value, reusability, technical complexity and expected maintenance cost rather than simply implementing requests in the order they arrive.

