ERR_COPPER_CONTACT_DUP on Copper: Copper contact already exists — an integration cannot create a person because Copper identifies an existing record with the same email address or external identifier. Root cause: Copper treats a person record as a potential duplicate when the incoming email address or a configured unique custom field already belongs to an existing person. Integrations often create this problem by always calling create, by matching on name instead of a stable identifier, or by storing an old Copper person ID after people have been merged. A contact duplicate error should be handled as an upsert decision: locate the existing person, decide whether it is the same business entity, and update or merge deliberately rather than suppressing the error. Step 1: Find the existing person using the exact email address. In Copper, go to People and search the email address from the rejected payload, not just the person’s name. Open every matching record and note its Copper record ID, primary email, company, owner, and last activity date. Names are not reliable keys; two people can share a name, while one person can have several valid work addresses. Establish whether the new data belongs to the existing record before changing the integration. Step 2: Choose an update, a merge, or a genuinely separate contact. If the source record represents the same person, update the existing Copper person rather than creating another. If two Copper records already represent the same person, use Copper’s duplicate-management or merge workflow to retain the record with the best activity history and merge the other into it. If a shared inbox or a generic address represents separate people, do not force a merge; create distinct records using a stable external identifier and document the exception. Step 3: Change the automation from create-only to lookup-then-update. Add a search or lookup step before the Copper create action. Match first on normalised email address and then, where available, on a source-system ID stored in a Copper custom field such as External Contact ID. If a match is returned, send an update using the Copper record ID. Only create a new person when no match exists. This lookup-then-update pattern makes reruns safe and prevents a temporary retry from becoming a duplicate-creation attempt. Step 4: Normalise the email and external ID before matching. Trim leading and trailing spaces, convert the email to lowercase, and remove accidental duplicate values from the source before the lookup. Do not use a mutable field such as job title, company name, or owner as a unique key. If your source system has a permanent contact ID, write it to a dedicated Copper custom field and preserve it through imports and merges. That ID is the reliable link when a person changes company or email address. Step 5: Refresh stored Copper IDs after a manual merge. When an administrator merges people in Copper, the losing record ID can no longer be used by your automation. Search the survivor record and update the source-to-Copper ID mapping table with the surviving ID. Then run one controlled update through the integration. This avoids a second class of failure where the automation skips create but repeatedly attempts to update a record that was merged away. Step 6: Review duplicate rules and monitor the next import batch. Document the matching rule in the automation description and alert on any future duplicate response with the source ID, email, and matched Copper ID. For the next scheduled import, compare attempted creates, updates, and duplicate exceptions. A healthy upsert process should show existing contacts as updates, not duplicate failures. Investigate any spike immediately; it often signals that a source field or identifier mapping changed upstream.