Aircall → Attio: when the native sync is too rigid

Aircall already has a native Attio connection. It writes calls onto Contact with a fixed field set. That is enough when every conversation is a person on a standard object. It stops being enough the moment the call belongs on a custom object, a deal, or a fund relationship, or when you need a disposition the native schema does not have. Allo is the other calling page. Allo is the AI transcript and follow-up draft. Aircall is the phone system with a required disposition, a recording link that expires, and a browser extension for click-to-call. We keep the native sync where it fits, and we use the Aircall and Attio APIs where the Contact schema cannot hold the record.

Direction

Aircall → Attio (calls, recordings, voicemails)

Stack

Aircall API, Attio API, n8n

The what

What this integration actually does

Where the native Contact write is the right shape, we leave it. Everywhere else, each ended call writes an activity on the object you actually use: Person, Company, Deal, or a custom object. The payload is duration, agent, a required disposition, and the recording URL while it is still valid. An inbound number Attio has never seen becomes a placeholder Person, because that call is often the new lead. Click-to-call stays in the Aircall browser extension, opened from the record.

The how

How we build it

  1. 1

    Map Aircall disposition tags to Attio activity outcomes - "left voicemail", "connected", "meeting booked", etc.

  2. 2

    Register Aircall webhooks on call.created, call.ended, call.tagged.

  3. 3

    Match the phone number to an Attio Person with fallback to Company main line, then to a new record flagged for review.

  4. 4

    Write the activity with duration, outcome, agent, and recording URL.

  5. 5

    Optional: transcription via Aircall's built-in or a separate service (Fathom, Gong) for high-value calls.

  6. 6

    Dashboard: calls-per-deal, connect rate by agent, disposition breakdown - inside Attio.

Under the hood

What lives inside the pipeline

  • Phone number normalization (E.164) before matching - avoids false negatives on differently-formatted numbers.
  • Voicemail detection - missed calls and VMs separated from connected calls.
  • Agent-to-Attio-user mapping so activity ownership is right.
  • Recording link stored as URL, not downloaded - saves storage and respects compliance.
  • Optional AI summary of long calls (opt-in per call).

Hard-earned lessons

What we learned the hard way

  • The native Aircall integration writes to Contact objects with a rigid schema. For custom objects, go via the API.
  • Inbound calls from unknown numbers should create a placeholder Person, not be discarded - that's often a new lead.
  • Recording URLs expire in Aircall. If you need permanent archive, copy to your own storage - but then mind the compliance implications.
  • Disposition tagging discipline is everything. Without it, the reports are meaningless. Enforce required dispositions.

Case study

Inside-sales team, 200 calls/day

Problem

Calls logged in Aircall, CRM activity showed "call" with no outcome, no recording, no context. Pipeline reviews turned into hunt-the-recording sessions.

Solution

Full webhook sync with dispositions, recordings, and agent mapping. Dashboards inside Attio for connect rate, calls per deal, and disposition mix.

Outcome

Pipeline reviews got 10x faster because every call had context. Dispositions became a real coaching signal, not an afterthought.

FAQ

Questions we get

Allo's job is the AI transcript, the summary, and a follow-up draft a person approves. Aircall's job is the phone system: a native sync that only writes Contacts, dispositions you have to require, recording URLs that expire, unknown numbers that should become a Person, and click-to-call from the browser extension. Kixie and Dialpad follow the Aircall shape, not the Allo shape.

Yes - click-to-call via the Aircall browser extension or an Attio action that opens the Aircall dialer.

Aircall handles consent at the call level. The integration respects whatever Aircall's configured to do.

Want this running on your Attio?

Book a free 30-min call. We'll map your use case to what we've already shipped and tell you whether this fits - honestly.

Book a 30-min call
Book a Discovery Session