How do I fix an Invalid Cross Reference ID error?


I'm seeing errors in my _trigger_log where the sf_message is invalid cross reference id. What does this mean and how do I fix it?


You get the invalid cross reference id error when Heroku Connect attempts to insert or update a row in Salesforce that has a field value which references another Salesforce record that either doesn't exist, or isn't accessible by the API user.

You can get more details about what Heroku Connect attempting to write by querying the _trigger_log table and inspecting the values field:

SELECT values FROM salesforce._trigger_log WHERE table_name = 'my_table__c' AND state != 'SUCCESS' ORDER BY id;

In the query results, look for fields that reference other records by their Salesforce ID, such as parentid or userorgroupid.

If the referenced record is something that can be viewed in the Salesforce UI, such as a User or an Account, you can verify whether or not your Salesforce integration user can access the record by:

  1. Logging in to your Salesforce org as the Salesforce integration user (that is, the user that you authorized Heroku Connect to sync data to Salesforce with).
  2. Attempting to view the record. You can usually do this by visiting a URL that's composed of your base Salesforce URL and the record ID. For example, if your base Salesforce URL is and your record ID is 00124000001sJP2AAM, try to access If you're unable to view the record while logged in as the Salesforce integration user, you've identified the problem: you're referring to a record that either doesn't exist or isn't accessible by your user. You may need to update object or record-level permissions. If you can successfully view the record, more investigation will be required.

You can also verify that you're writing exactly the columns to Salesforce that you expect. An example query of how to check this is:

  id, record_id, sf_message, ARRAY(
        value IS NOT NULL
        key != 'id'
  action = 'INSERT'
  table_name = 'opportunity'
  state = 'FAILED'
  processed_at >= '2018-07-13'::date;

In some cases, this query may help identify a subset of fields that may be more likely to be successful. Following that you can follow our documentation to resolve write errors

Ask on Stack Overflow

Engage with a community of passionate experts to get the answers you need

Ask on Stack Overflow

Heroku Support

Create a support ticket and our support experts will get back to you

Contact Heroku Support