unified.to evaluation: stay on Composio
ADR-056 — unified.to evaluation: stay on Composio
Status: Accepted 2026-05-18 Context: ADR-053 (Lean stack: Composio + Mem0 + Anthropic) — Composio is canonical OAuth-SaaS layer
Context
unified.to (https://unified.to) is a managed integration platform that surfaces 440+ vendor APIs through MCP and REST, with two distinguishing characteristics vs Composio:
- Normalized schemas across vendors — 2,100+ unified data objects so one query against the “CRM” object returns the same shape whether the customer is on HubSpot, Salesforce, Pipedrive, or Zoho.
- Stateless / data-access-heavy positioning — virtual webhooks for real-time data, designed for “consume customer data without standing up storage.”
Pricing (verified 2026-05-18):
- Grow: $750/mo — 750K API calls/mo, unlimited customer connections, $1/1000 overage.
- Scale: $3000/mo — 6M API calls/mo, $0.50/1000 overage.
- Enterprise: custom.
- 30-day free trial.
Ascend’s current state (post-PR #564): Composio carries 18 active connections across two tenants (Ascend, Kahuna), zero marginal cost per additional tenant, action-execution-heavy GTM workflows (HubSpot writes, Salesforce SOQL, Google Ads mutations, Slack sends, Apollo enrich, Gong fetches).
Decision
Stay on Composio. Do not switch or augment with unified.to.
Comparison
| Dimension | Composio | unified.to | Winner |
|---|---|---|---|
| Marginal cost per new tenant | $0 | Capacity-share against $750/mo floor | Composio |
| Floor cost | Current (covered) | $750/mo | Composio |
| Positioning fit for Ascend workloads | Action-execution-heavy (writes, queries, mutations) | Data-access-heavy (normalized reads) | Composio |
| Vendor breadth | 982+ toolkits, 20,000+ curated actions | 440+ integrations, 22,566 callable tools, 2,100+ normalized objects | Composio for action breadth |
| MCP support | Native (SSE) | Native | Tie |
| Per-end-customer routing | user_id={slug} per call (shipped in PR #564) | Unlimited customer connections | Tie |
| Invariant 5 (no tokens in our KV) | ✅ tokens in Composio | ✅ tokens in unified.to | Tie |
| Schema normalization across vendors | ❌ vendor-specific slugs | ✅ unified objects | unified.to (not a current requirement) |
| Switching cost from current state | $0 | Throw away PR #564 + re-OAuth 18 connections + rewrite client.ts, auth-configs.json, routing-write.ts | Composio |
Decisive factor
The “scalability” problem that drove PR #564 (referenced by the driving question on ~/.claude/plans/are-we-connected-to-greedy-kitten.md) was manual onboarding labor, not coverage or schema mismatch. The onboarding CLI (~60 min → ~7 min, 1 click per tool from the client) eliminates that cost. unified.to’s normalized-schema value-add does not move that meter; it solves a different problem (multi-CRM read normalization) that no Ascend workflow currently has.
Every Ascend automation is vendor-specific: HubSpot for Ascend, Salesforce + HubSpot for Kahuna, Google Ads mutations against named accounts, Slack into specific channels, Apollo lookups returning Apollo-shaped contacts. A unified CRM read object would be paid-for and unused.
Triggers for re-evaluation
Re-evaluate unified.to when any of:
- Cross-vendor normalization becomes a real product requirement — e.g., a client demands a single query returning contacts from any of HubSpot/Salesforce/Pipedrive/Zoho with the same shape, or we ship a feature that ingests CRM data from N different vendors.
- Composio raises prices materially above the $0 marginal we currently see, or removes a critical capability we depend on.
- A capability gap appears that Composio refuses to close within 30 days (per ADR-053 escalation rule for new SaaS needs).
Consequences
- Continue executing on PR #564 onboarding CLI and
docs/composio/onboarding.mdgolden path. - No vendor evaluation work scheduled.
- This ADR is the record so the next session does not re-evaluate from scratch.