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 Event | Type in DURUM.ai | When |
|---|---|---|
| Contact created (Potential status) | Lead | A prospect enters iClosed |
| Contact qualified (Qualified status) | Application | The prospect answers the qualification form |
| Call Booked / Call Rescheduled | Booking | A call is booked or rescheduled |
| Call Cancelled | Cancellation | The call is cancelled |
| Call Outcome: No show | No-show | The prospect did not show up |
| Call Outcome: Won (with deal) | Sale | The closer marks the call as won |
| Call Outcome: No sale | Lost sale | The closer marks the call as lost |
| Transaction Synced | Payment | A 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
- In iClosed, go to Settings then API
- Generate an API key (or copy the existing one)
- In DURUM.ai, go to Settings then Integrations
- Click Connect on the iClosed card
- 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.
| Webhook | iClosed triggers to check |
|---|---|
| Contacts | Contact by Status, Contact Updated, Custom Field Updated, Data Intelligence, Setter Owner Assigned |
| Calls | Call Booked, Call Rescheduled, Call Cancelled |
| Outcomes | Call Outcome, Appointment Setting Outcome |
| Transactions | Transaction 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
| Problem | Likely cause | Solution |
|---|---|---|
| "Invalid API key" on connection | Revoked key or insufficient plan | Check the key in iClosed Settings, API; Business/Enterprise plan required |
| No events coming in | Webhooks not configured | Step 2 above; check Ingestion Logs |
| An appointment shows the wrong type | Call type not classified | Step 3: classify the call type in the mapping |
| Missing payments | Stripe active (anti double counting) | Normal behavior; cash comes from Stripe directly |