Skip to content

CRM Integration

Attio + GraphQL — Building a CRM Integration That Adapts to Any Schema

Schema-Agnostic CRM Integration via GraphQL

🔗 📊 ⚙️

Every CRM has a fixed schema. HubSpot defines "companies" and "deals". Pipedrive has "organisations" and "products". Your schema is their schema — locked in, immutable, shipped with the platform. Attio inverted this: every customer designs their own object types. The result: more flexibility than any competitor, and a 10× harder integration problem.

Velocity X's Attio integration doesn't assume anything about your schema. It uses Attio's GraphQL API to discover your objects at connect-time, accepts any shape as long as core fields exist (name, location, status, owner), and builds a configurable UI that maps your custom schema to the field-sales dashboard. This piece explains why this architecture matters and how it actually works.

Why Fixed Schemas Are Annoying

Consider a recruiting CRM. HubSpot's standard schema has "deals" (placements) and "contacts" (candidates). But recruiting has a middle object: the "placement" is the deal, the candidate is the contact, and the "job opening" is the bottleneck. A recruiting team running HubSpot has to shoehorn job openings into HubSpot fields that weren't designed for them — custom fields, linked lists, workarounds.

Attio avoids this entirely. You create a "Job Opening" object type at setup. You define fields (title, budget, location, department, urgency). Velocity X's integration discovers that object exists, offers it as a mappable entity, and syncs it alongside candidates and placements. Same for healthcare (patient → clinic → appointment), logistics (delivery → route → vehicle), or any industry-specific data model.

The GraphQL Discovery Pattern

When you connect Attio to Velocity X, the integration runs an introspection query against Attio's GraphQL API. The query enumerates every object type in your workspace, extracts the field schema for each, and returns a JSON definition of your entire data model.

From there, Velocity X builds a mapping UI: "Attio 'Contact' → Velocity 'Lead', 'Contact' 'Name' field → Velocity 'Name', 'Contact' 'Email' field → Velocity 'Email'". The admin runs through this once at setup. After that, sync is deterministic — the system knows which Attio fields flow into which Velocity fields, regardless of what you called them or how many custom fields exist.

Bidirectional sync then works identically to HubSpot or Pipedrive: webhooks fire when Attio objects change, Velocity X reconciles the mapped fields, and the field dashboard reflects the true state within 2-8 seconds.

The Gotchas

Two problems emerge: name stability and core-field assumption.

Name stability. If you rename a custom field in Attio (call it "Budget" today, "Annual Spend" tomorrow), the mapping breaks. Attio's field IDs are stable; field names are display text. Velocity X solves this by storing mappings by field ID, not name. When you rename in Attio, Velocity's sync keeps flowing without reconfiguration.

Core-field assumption. Velocity X requires every synced object to have (1) a name field, (2) a location (postcode, lat/long, or address), and (3) a status field. If you have a custom object called "Invoice" with no location, Velocity X can't render it on the map. The solution: ask the admin to add a location field, or ignore that object in Velocity. Rare, but it happens.

Attio vs HubSpot vs Pipedrive

HubSpot is the easiest integration — fixed schema, stable API, webhooks that work predictably. Trade-off: you're stuck with HubSpot's assumptions about your business.

Pipedrive adds complexity (stage taxonomy doesn't align with HubSpot), but the schema is still locked. Integrations take longer; flexibility is worse.

Attio is the most flexible but the most work to integrate against. If your business model doesn't fit HubSpot or Pipedrive's assumptions, Attio is worth the extra engineering. If you're a standard sales operation, the additional flexibility buys you nothing.

Frequently Asked Questions

Can I change my Attio schema after connecting to Velocity X?

Yes. Add new fields, rename existing ones, create new object types. Velocity X will detect changes on next sync and prompt you to update mappings if needed. Existing mappings by field ID continue working.

What if my Attio object doesn't have a location?

You'll need to add one. Velocity X's core value is mapping + location, so objects without a location can't be rendered on the field map. They'll sync but won't appear in the geospatial view.

Is GraphQL introspection a security risk?

Not in this context. Introspection queries run via your authenticated token, using scoped OAuth permissions. Velocity X only reads your schema structure — it never introspects other workspaces or customers' data. Your token dies at revocation.

The Bottom Line

Attio's flexible schema is the CRM innovation most teams didn't know they needed. For teams whose business model doesn't fit standard CRMs, it's a relief. Velocity X's GraphQL integration makes that flexibility usable in field sales — schema discovery at setup, configurable mapping, and bidirectional sync all the way through. If you've been living under a rock thinking "all CRMs work the same", Attio just proved you wrong.

Let us make some quick suggestions?

Please provide your full name.
Please provide your phone number.
Please provide a valid phone number.
Please provide your email address.
Please provide a valid email address.
Please provide your brand name or website.
Please provide your brand name or website.