- Documentation
- Integrations
- Apps
- Close integration
Close integration
Automate leads, contacts, opportunities, tasks, and activities on behalf of your clients' Close CRM workspaces.
What it does
The Close integration lets you run CRM automations on behalf of any client whose Close workspace you manage. Connect a Close account once, then read and write leads, contacts, opportunities, and tasks; log notes, calls, emails, SMS, WhatsApp messages, meetings, and custom activities; search with Close's Advanced Filtering; enroll contacts in sequences; and route live Close events into the rest of your workflow — all without writing any code.
Connect a Close account
- In TaskJuice, open Settings -> Connections and choose Add connection -> Close.
- In Close, open Settings -> Developer -> API Keys on the workspace TaskJuice should act on, click Add API Key, copy the generated key, and paste it into the Close API Key field. That is the only field to fill — Close authenticates on the API key alone, so there is no password to enter.
The connection is read- and write-capable across the workspace the key was issued from. Rotate or revoke the API key from the same Settings -> Developer -> API Keys page at any time. API key access is scoped to the user the key was issued from; switching users requires rotating the connection's key.
Actions
Leads
close/list-leads. List leads in the workspace using a Close advanced filter query, offset-paginated via_skip/_limit(returns one page; see Get all leads).close/get-lead. Look up a single lead by ID, optionally requesting specific fields.close/create-lead. Create a lead with a name, URL, description, status, contacts, and custom fields.close/update-lead. Update an existing lead. Only the fields you provide are changed.close/delete-lead. Permanently delete a lead — cascades to its contacts, opportunities, and activities. Irreversible and approval-gated: it always requires explicit approval in a workflow and cannot be auto-approved.close/merge-leads. Merge a source lead into a destination lead, then delete the source. Irreversible and approval-gated.close/search-leads. Search leads with Close's Advanced Filtering API (/data/search/), cursor-paginated. Best for large or targeted sweeps.
Contacts
close/list-contacts,close/get-contact,close/create-contact,close/update-contact,close/delete-contact(delete is irreversible).close/search-contacts. Search contacts via Advanced Filtering (cursor).
Opportunities
close/list-opportunities,close/get-opportunity,close/create-opportunity,close/update-opportunity,close/delete-opportunity(delete is irreversible).close/search-opportunities. Search opportunities via Advanced Filtering (cursor).
Tasks
close/list-tasks,close/get-task,close/create-task,close/update-task,close/delete-task(delete is irreversible).
Activities
Full list/get/create/update/delete coverage per activity type:
- Notes —
close/create-note-activity,close/list-note-activities,close/get-note-activity,close/update-note-activity,close/delete-note-activity. - Calls —
close/log-call-activity,close/list-call-activities,close/get-call-activity,close/update-call-activity,close/delete-call-activity. - Emails —
close/create-email-activity,close/list-email-activities,close/get-email-activity,close/update-email-activity,close/delete-email-activity. - SMS —
close/create-sms-activity,close/list-sms-activities,close/get-sms-activity,close/update-sms-activity,close/delete-sms-activity. - WhatsApp —
close/create-whatsapp-activity,close/list-whatsapp-activities,close/get-whatsapp-activity(requires WhatsApp enabled on the workspace). - Meetings —
close/list-meeting-activities,close/get-meeting-activity,close/update-meeting-activity,close/delete-meeting-activity(meetings sync from the calendar, so there is no create). - Custom —
close/create-custom-activity,close/list-custom-activities,close/get-custom-activity,close/update-custom-activity,close/delete-custom-activity. close/list-activities. The merged activity feed across all types.
Sending is irreversible. Email, SMS, and WhatsApp
createactions default to a draft (status: draft, recoverable). Settingstatustooutboxorsentsends the message externally and cannot be undone — those actions are classified irreversible.
Sequences
close/subscribe-contact-to-sequence. Enroll a contact in a Close email sequence. Irreversible — it starts sending sequence emails externally.
Triggers
Add a Close trigger to a workflow and publish. That is the whole setup.
TaskJuice creates the webhook subscription in the connected Close organization for you: it points the subscription at an address only your workspace can receive on, subscribes it to the object types your published workflows need, and stores the signature_key Close returns. There is no subscription to create in Close, no key to copy, and no signing field to fill in — Close returns that key exactly once, and TaskJuice is what catches it.
While the trigger panel says setup is underway, TaskJuice is talking to Close. It normally finishes within a minute of publishing.
Coverage spans the full Close Subscription API object.action matrix:
- Lead — created, updated, deleted, merged.
- Contact — created, updated, deleted.
- Opportunity — created, updated, deleted.
- Task — created, updated, deleted, completed.
- Note / Call / Email / SMS / WhatsApp / Meeting / Custom activity — created, updated, deleted (plus call answered/completed, email/SMS sent, and meeting scheduled/started/completed/canceled).
- Lead & opportunity status change — fires when a record's status changes.
- Lead & opportunity status objects — created, updated, deleted (admin-defined statuses).
- Membership — activated, deactivated.
- Saved search — created, updated.
- Sequence subscription — created, updated, deleted.
- Form submission, unsubscribed email (created, deleted).
One subscription, every trigger
However many Close triggers you publish, TaskJuice keeps a single webhook subscription per connected organization and widens it as you add triggers. That matters because Close caps an organization at 40 webhook subscriptions (500 for approved automation partners) — a cap shared with every other tool your client has wired up. TaskJuice spends one of those 40, not one per trigger.
The subscription is registered per Close object type rather than per action, because that is the level Close subscribes at. So publishing a workflow on Lead Created also puts Lead Updated, Deleted and Merged on the wire. TaskJuice routes each delivery to the trigger it matches and discards the rest, so the extra events never start a workflow — you simply see more traffic reaching TaskJuice than the triggers you published.
If registration does not finish
The trigger panel tells you what happened and what to do. The three worth knowing in advance:
- "Close rejected the connection. Reconnect your Close account, then republish." The API key on the connection was revoked or regenerated. Open Connections, reconnect the account, and republish.
- "Close did not confirm the registration. Registration retries automatically — no action needed." Close did not confirm in time. TaskJuice keeps retrying on its own, backing off between attempts; the panel clears when it succeeds. Only the messages that name something to fix are asking you for anything.
- "Automatic setup stopped after repeated failures. Contact support — other triggers are unaffected." Every other Close refusal ends here, including the 40-subscription cap. TaskJuice does not name the cap for Close, on purpose: the panel only reports a webhook limit for providers whose cap response has been captured and declared, and Close's has not. Naming it from a guess would turn an ordinary rate-limit or outage into a permanently stuck trigger. If you see this, check the subscription count in Close first — free a slot, then republish. The panel keeps showing "Setting up Close…" while it is retrying at full speed; this message does not mean the retries are over — they continue once a day behind it — but the panel has stopped reporting them as in progress, so treat it as yours to act on.
What happens when you unpublish or disconnect
Unpublishing some of your Close triggers narrows the subscription in place to whatever the remaining published workflows need, so Close stops sending the object types nothing subscribes to.
Unpublishing everything leaves the subscription exactly as it is. Nothing is sent to Close and nothing is narrowed — TaskJuice simply stops treating the trigger as live and starts a 90-day clock. Republishing inside that window starts events again straight away, with the same subscription and the same signing key; after it, the subscription is deleted from the organization. Disconnecting the Close connection queues the subscription for deletion, and the stored key with it: the delete usually lands within a minute, and if Close cannot be reached, TaskJuice keeps retrying on its own, backing off between attempts.
The trade-off is deliberate: Close's cap counts subscriptions, not events, so a subscription parked at your delivery URL costs one of the 40 slots for those 90 days. In exchange a republish costs no cap churn, no new key and no re-registration.
TaskJuice verifies the close-sig-hash signature on every inbound POST before it starts a run, so an unsigned or mis-signed request never reaches your workflow. Close signs timestamp + body with the key and delivers the hex digest in close-sig-hash alongside close-sig-timestamp.
Polling triggers
For events Close's webhooks can't express — a lead or opportunity entering a status or Smart View — use a polling trigger. Each runs a Close search on a schedule and emits one activation per cycle wrapping the matching records in an items array. A record fires exactly once (deduplicated by ID), and records that already match when you publish are baselined on the first cycle, never emitted. Drop a Loop node downstream to process each record.
close/new-lead-in-status. Fires when a lead enters a selected status. Choose it with the Lead Status selector.close/new-opportunity-in-status. Fires when an opportunity enters a selected status. Choose it with the Opportunity Status selector.close/new-lead-in-smart-view. Fires when a lead enters a selected Smart View (saved search). Choose it with the Smart View selector.
Poll cadence (default 5 minutes) and the per-cycle cap (default 100) live in each trigger's advanced settings. Each poll pages through the most-recently-updated matching records — up to 5 pages within one cycle — until the per-cycle cap of new records is found or none remain, so a burst larger than one page no longer hides behind the newest 100. A burst larger than one cycle's budget drains across consecutive cycles: 250 new records at a cap of 100 emit as 100, 100, then 50, with no duplicates and no stalling. Polling detects set membership, not change events — for a status change specifically, the activity.lead_status_change webhook is lower-latency; reach for polling when you need "entered this status/view" semantics or can't wire a webhook.
Recipe: Get all leads
A Close list or search action returns one page (up to 100 records) — actions do not auto-loop (the polling triggers above do page internally). To pull every matching lead in a single run:
- List leads with
_skip: 0,_limit: 100. - Add a Loop node in Condition mode set to repeat while the previous step's
has_moreoutput istrue. - Inside the loop, List leads again with
_skipadvanced by 100 each pass; collect each page.
The loop ends when has_more is false. For a filtered subset, narrow the query so it fits one page, or use Search leads (/data/search/) — Close's recommended path for deep pagination, since it caps _skip. For continuous ingestion, use a trigger instead.
Known limitations
- Action pagination is author-driven. List endpoints use offset pagination (
_skip/_limit, stop onhas_more: false); search uses a cursor. A single action returns one page — page with a Condition loop (above) or use search for large sweeps. Polling triggers are the exception: they page through up to 5 pages per cycle on their own. - Rate limits follow Close's per-endpoint, per-org, and per-key policy documented at developer.close.com/api/overview/rate-limits. TaskJuice retries on
429honoring theRetry-Afterheader. - Webhooks are at-least-once with no ordering guarantee. The same status change can fire both
activity.lead_status_changeandlead.updated; dedupe on the eventidand prefer the narrower trigger where a change double-fires. - Polling detects membership within a bounded window. A polling trigger compares each cycle against a bounded set of recently-seen record IDs, sized to what one cycle can observe (per-cycle cap × 5 pages — 500 IDs at the default cap, never more than 2,000). Bursts larger than one cycle's budget drain across consecutive cycles without loss; only a burst larger than the whole window can re-fire records at its edge — narrow the filter or raise the per-cycle cap for sets that hot. The same bound applies at publish: the first cycle baselines up to a full observation width of pre-existing records, so only a backlog larger than the window can partially emit after publishing. Polling also cannot change scope: it sees whatever the connected API key can.
- Subscriptions silently auto-pause. Close pauses a webhook subscription and clears its queue at a 100k backlog or after 3 days of total delivery failure, so a silently-stopped trigger is usually a Close-side pause, not a TaskJuice bug.
- Custom fields are opaque
custom.<id>keys. Create/update actions accept acustomobject; trigger output surfaces rawcustom.<id>keys, which you map downstream. Field-level labeling is not resolved automatically. - Upsert is a two-step pattern. There is no single-call upsert; compose Search (find) then Create.
- Not modeled (use the generic HTTP app if needed): Close's async-job families — Export, Bulk Actions, Import, Reporting — and config-plane writes (creating statuses, pipelines, custom-field schemas, smart views) and custom objects. These fall outside the per-record automation surface by design.
- Each Close organization can hold up to 40 webhook subscriptions (500 for approved automation partners). TaskJuice spends exactly one of them however many triggers you publish, but other tools wired into the same organization share the same budget — and an unpublished trigger keeps holding its slot for 90 days. Hitting the cap reads as an ordinary setup failure rather than as a named limit (see If registration does not finish), so check the count in Close, free a slot, and republish.
- Close subscribes by object type, not by action, so a published trigger puts every action on that object type on the wire. TaskJuice drops the ones no trigger matches, so this shows up as inbound volume rather than as unexpected workflow runs.
- The signing key is shown once. Close returns
signature_keyin the create response and never again, and no Close endpoint can reset it on an existing subscription. So if TaskJuice ever finds a subscription already sitting at your delivery URL that it has no key for, it deletes and re-registers it rather than adopting it — the only way to end up with a subscription whose deliveries can be verified. You do not need to do anything; it happens on the next publish. - Webhook management is shared across your whole TaskJuice account, one managed subscription per app. If two of your workspaces hold connections to two different Close organizations, whichever workspace published most recently is the organization TaskJuice manages — the other organization's subscription is left behind permanently: it keeps delivering, holds one of that organization's 40 slots, and TaskJuice no longer updates it and does not remove it, even when you disconnect that connection. If you stop using the older organization, remove its subscription in Close yourself.