I have a client whose accounting team has run into the following issue (admittedly an edge case but causes a lot of confusion and troubleshooting time for the team so we want to fix). Following the bug reporting instructions I have replicated this in two demo instances (dmaster and wpmaster) and now want to know if anyone else has experienced this. Here are the conditions/steps. To your knowledge is this a known issue?

  • The import matches contributions to contact by External ID
  • A given contact has been de-duped and the External ID needed for correct contribution matching has been overwritten by a different External ID
  • The contact record with the correct External ID is in the trash
  • The contribution import runs without throwing any error message
  • The contribution does not appear in the contact record because its External ID does not match, and it DOES appear on the contact record that is in the trash (soft delete).

To summarize: When contributions are imported matching to External ID, expected behavior to get an error message and failed import line if I import a contribution that matches to a contact that is soft-deleted. Instead I get no error message and a successful import matched to a soft-deleted contact.

System info: The client is running Civi 5.31.0 on WP 5.5.3 but since I replicated on dmaster and wpmaster that seems less relevant.

Other relevant info: When using other methods of matching to a contact, the system behaves as expected (i.e., gives an error message and does not import the contribution):

  • Email address as matching method gives "No matching Contact found for ([EMAIL ADDRESS])"
  • Contact ID as matching method gives "Invalid Contact ID: contact_id 204 is a soft-deleted contact."

1 Answer 1


I suggest you create an issue at https://lab.civicrm.org/dev/core/-/issues

I'd think it should be treated in the same way as if you matched on a contact id that was soft-deleted.

The message you quote appears to be generated from CRM_Contribute_Import_Parser_Contribution::deprecatedFormatParams() but given the name, a quick fix to that function to handle external id is not the answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.