Integrations / ABM
Company contact replied: tag in Attio
When any contact at a target account replies, tag the company as engaged in Attio (or your CRM of choice). The warm-the-committee pattern for account-based outreach.
Why this matters
Account-based outreach treats the company as the unit of progress, not the individual. If you reach out to seven people at Acme and one of them replies, the entire account just got warmer, even if six of those individuals never engaged directly. Tagging the company lets you trigger account-level next-best-actions like inviting more buying-committee members, scheduling a multi-thread email follow-up, or alerting the named-account AE.
The trigger
- Event name:
company.contact_replied - Fires: when any contact at a Crispy company replies for the first time. The event payload includes both the company snapshot and the specific contact who replied.
- Depends on: the company entity (shipped in Phase 89). Contacts must be linked to a Crispy company for the event to fire.
Setup
Attio exposes a REST API for company tagging. The flow looks up the Attio company via your stored external_ids.attio_company_id (or by linkedin_company_id if Attio knows it), then PATCHes the company's tags array.
- In Make, create a scenario with a Webhooks → Custom webhook trigger. Copy the URL.
- Subscribe Crispy to
company.contact_replied. The example below uses amatchfilter to scope the subscription to strategic-tier accounts only:curl -X POST https://crispy.sh/api/v1/subscriptions \ -H "Authorization: Bearer crispy_your_api_key" \ -H "Content-Type: application/json" \ -d '{ "event": "company.contact_replied", "target_url": "https://hook.us2.make.com/your-make-webhook-id", "filter": { "match": { "company.custom_attrs.tier": "strategic" } } }' - Verify the signature using the HMAC verification snippet.
- Add an HTTP → Make a request module pointing to Attio. If you stored the Attio company ID:
PATCH https://api.attio.com/v2/objects/companies/records/{{ payload.data.company.external_ids.attio_company_id }} Authorization: Bearer ATTIO_API_KEY Content-Type: application/json { "data": { "values": { "tags": [{ "value": "engaged" }] } } } - If you don't have the Attio ID, add a lookup step first: query Attio by
linkedin_company_idor company domain, then PATCH.
Sample payload
Both company and contact are present. source_event tells you which underlying event triggered the company-level rollup (typically contact.first_inbound_message or message.inbound_received).
{
"payload_version": "1",
"id": "00000000-0000-0000-0000-000000000902",
"event": "company.contact_replied",
"timestamp": "2026-04-29T16:08:11.000Z",
"webhook_id": "00000000-0000-0000-0000-0000000009h3",
"account_id": "00000000-0000-0000-0000-0000000009a1",
"data": {
"company": {
"id": "00000000-0000-0000-0000-0000000009co",
"workspace_id": "00000000-0000-0000-0000-0000000009w1",
"name": "Acme Corp",
"linkedin_company_id": "li-acme-001",
"custom_attrs": {
"headcount_min": 50,
"headcount_max": 200,
"tier": "strategic"
},
"external_ids": {
"attio_company_id": "attio-acme-001"
}
},
"contact": {
"id": "00000000-0000-0000-0000-0000000009c2",
"workspace_id": "00000000-0000-0000-0000-0000000009w1",
"connection_status": "connected",
"current_campaign_id": "00000000-0000-0000-0000-0000000009p1",
"custom_attrs": {
"title": "Director of Engineering"
}
},
"source_event": "contact.first_inbound_message",
"triggered_at": "2026-04-29T16:08:11.000Z"
}
}Troubleshooting
- The event isn't firing for some companies.
- Contacts must be linked to a Crispy company (the relationship Phase 89 added). If a contact was imported before that link existed, the rollup event won't fire for them. Re-run the company backfill or manually attach the contact to a company record.
- Attio is rejecting the PATCH with a 404.
- Either the
attio_company_idin the payload is stale, or you never imported it. Add a Search-by-domain step before the PATCH and update the Crispy company'sexternal_idswith the resolved ID for next time.