Skip to content

iClosed

What It Does

iClosed (the AI scheduler for high-ticket sales teams) sends your contacts, appointments, call outcomes and transactions in real time to DURUM.ai. Each iClosed event is mapped to a type in DURUM.ai.

iClosed EventType in DURUM.aiWhen
Contact created (Potential status)LeadA prospect enters iClosed
Contact qualified (Qualified status)ApplicationThe prospect answers the qualification form
Call Booked / Call RescheduledBookingA call is booked or rescheduled
Call CancelledCancellationThe call is cancelled
Call Outcome: No showNo-showThe prospect did not show up
Call Outcome: Won (with deal)SaleThe closer marks the call as won
Call Outcome: No saleLost saleThe closer marks the call as lost
Transaction SyncedPaymentA payment is synced into iClosed

Contact updates (email/phone validation, setter assignment, custom fields) enrich the contact profile without creating an event.

iClosed plan required

The iClosed API and webhooks are available on Business and Enterprise iClosed plans only.

Step 1: Connect your API key

  1. In iClosed, go to Settings then API
  2. Generate an API key (or copy the existing one)
  3. In DURUM.ai, go to Settings then Integrations
  4. Click Connect on the iClosed card
  5. Paste your key and click Connect

Your key is encrypted (AES-256) and stored securely. On connection, DURUM.ai automatically imports your closers/setters as reps and your call types.

Baseline option: keep the checkbox "Import sales from the last 30 days" checked so deals won before the connection appear in your revenue (they are excluded from new sales and close rate).

Step 2: Configure webhooks

In iClosed, Webhooks section of Settings, create one webhook per row below. The exact URLs (with your identifier) are shown in DURUM.ai: Settings, Integrations, iClosed, gear icon.

WebhookiClosed triggers to check
ContactsContact by Status, Contact Updated, Custom Field Updated, Data Intelligence, Setter Owner Assigned
CallsCall Booked, Call Rescheduled, Call Cancelled
OutcomesCall Outcome, Appointment Setting Outcome
TransactionsTransaction Synced

Test with a dummy appointment: the event shows up in Ingestion Logs within a minute.

Step 3: Classify your call types

In the same settings window, the Connected calendars section lists your iClosed call types. Classify each one:

  • Booking: main sales call (default)
  • Booking Marketing: marketing-generated call (counts in the marketing funnel)
  • Booking Suivi: follow-up call (excluded from new bookings)
  • Ignore: internal meetings, non-sales calls

Reclassification also applies retroactively to bookings already received.

Attribution

Attribution uses the UTMs carried by the iClosed appointment (utm_source, utm_campaign, etc.), then the contact's original URL as fallback.

How iClosed picks up your UTMs

The iClosed booking widget reads ten specific cookies from the page hosting it: the five standard utm_* and their first_utm_* counterparts. The DURUM.ai tracking script writes those ten cookies automatically. All it takes is for the script to be loaded on the page where your iClosed widget lives (see UTM Tracking).

So a prospect can click your ad one day, come back through an email the next, and book: iClosed still receives the original campaign, ad set and ad.

Two important caveats:

  • iClosed only writes its UTM columns when the contact is created, and they are immutable afterwards. The page hosting the widget is therefore the one and only write window.
  • A cookie belongs to a browser. If the prospect clicks the ad on their phone and books from their desktop, iClosed sees no UTM at all. DURUM.ai still recovers the source through the contact's identity (email) and shows it in its own dashboard.

If your booking link points at an iClosed domain (app.iclosed.io) rather than an embedded widget, the script decorates that link with your UTMs automatically: a cookie never crosses a domain boundary, but URL parameters do.

Enrichment towards iClosed (optional)

DURUM.ai can also write the attribution it already knows (pixel, funnels) into your iClosed contact records. Typical use case: on every new booking, the contact's origin source (facebook, google...) is pushed into a custom field of their iClosed record, visible to your closers.

In the integration settings, section Enrich iClosed contact records:

  • Trigger: new booking (default), lead, application or sale
  • Attribution: origin source (first touch, default) or last touch
  • What to push: origin source, campaign or ad (into custom fields you name yourself), or a tag

iClosed's native UTM columns cannot be changed after the fact

iClosed fills its native UTM columns only when the contact is created, from whatever its widget saw at that moment. No API call can rewrite them afterwards. DURUM.ai enrichment therefore goes through custom fields, not through those columns.

There is exactly one way to fill the native columns: have the tracking script loaded on the page hosting the widget, which is automatic (see Attribution above).

This enrichment mainly covers the journeys a cookie cannot reach: a call booked by a setter from the iClosed back office, a prospect switching devices between the ad and the booking, or a contact created before the script was installed.

Guarantees: disabled by default (nothing is written without your activation), a field already filled on the iClosed side is never overwritten, nothing is ever deleted, and every write is traced in the Ingestion Logs.

Good to know

  • Rescheduling: a rescheduled appointment creates a new booking with the new date; the funnel always uses the contact's most recent booking.
  • Outcome correction: if a closer corrects an outcome (Won changed to No sale hours later), the existing event is updated, not duplicated.
  • Stripe and double counting: if Stripe is already connected for your account, iClosed payments are disabled automatically, Stripe remains the source of truth for cash. Re-enable the Payments toggle only if your payments do not go through Stripe directly.
  • Automatic reconciliation: every 15 minutes, DURUM.ai checks via the iClosed API that no event was missed and recovers any that were.
  • Rep matching: your iClosed closers' emails must match your reps' emails in DURUM.ai.

Troubleshooting

ProblemLikely causeSolution
"Invalid API key" on connectionRevoked key or insufficient planCheck the key in iClosed Settings, API; Business/Enterprise plan required
No events coming inWebhooks not configuredStep 2 above; check Ingestion Logs
An appointment shows the wrong typeCall type not classifiedStep 3: classify the call type in the mapping
Missing paymentsStripe active (anti double counting)Normal behavior; cash comes from Stripe directly

Powered by DURUM.ai — ad attribution and operational intelligence