Skip to main content
Level 2
October 15, 2026
Question

Marketo Custom Object Ghost Records

A Custom Object shows 32 records in Admin - Database Management - Marketo Custom Objects but a Smart List that should populate these 32 users (Smart List = Has Custom Object) doesn’t pull in any Marketo persons. The CO link field is Salesforce Contact ID, dedupe uses GUID. A process purged the CO of data but 32 records were not purged in this process.

 

Are these CO Ghost records common? If so is there a way to troubleshoot the CO to prevent these records from populating? 

 

Purging the CO process via REST API.

Step 1 runs a job to capture those custom objects into a static list.

Step 2 captures the contacts/members within that list via a GET request.

Step 3 gets the list of custom objects linked to the population in step 2 via a GET request.

Step 4 deletes the custom object data.

Step 5 clears the member list that was created in step 2.

Step 6 confirms the member list was cleared. 

3 replies

sandy_logitech
User Group Leader
User Group Leader
October 15, 2026

Your description of the REST process is too vague to be useful. (What API  endpoint did you use to "run a job" to populate the list in Step 1, for example? There's no endpoint that does that in one step.)

 

If you could detail the actual steps we could see if you missed sonething. Generally speaking, it's possible to have standalone custom objects with no linked people. But an object truly deleted via API is gone. 

Translate
Level 2
October 15, 2026

Thanks Sandy, still wrapping my head around COs. Below is our documentation from a dev.

Step 1: Populate snapshot list. We trigger a batch campaign that has the smart list “Has CDS v5.1 record” and the flow “Add to List: CDS v5.1 Members”.
POST /rest/v1/campaigns/{populateCampaignId}/schedule.json


Step 2: Read list members with their SF Contact ID (paged)
GET /rest/v1/list/{listId}/leads.json?fields=id,email,salesforceidcontact


Step 3: Fetch CO records by those Contact IDs (max 300 values per call)
GET /rest/v1/customobjects/customerDeviceSummaryV51_c.json?filterType=salesforceidcontact&filterValues={id1},{id2},...&fields=marketoGUID,deviceID,salesforceidcontact


Step 4: Delete by marketoGUID
POST /rest/v1/customobjects/customerDeviceSummaryV51_c/delete.json
Body: { "deleteBy": "idField", "input": [ {"marketoGUID":"..."}, ... ] }
Each row returns "status":"deleted".


Step 5: Clear the snapshot list. We trigger a batch campaign with the flow “Remove from List”.
POST /rest/v1/campaigns/{clearCampaignId}/schedule.json


Step 6: Confirm the list is empty
GET /rest/v1/list/{listId}/leads.json returns "result": []

 

“Generally speaking, it's possible to have standalone custom objects with no linked people.” News to me!

 

“But an object truly deleted via API is gone.” We don’t want to delete the Custom Object entirely, but clear the CO and upload fresh data monthly. The worry with these CO records not linked to users is they could somehow be linked to a record at some point and this old CO data would qualify for a campaign send, then our email populates with bad/old data.

 

We do have another dedupe field that we could use in step 4 instead of marketoGUID, deviceID. 

Translate
sandy_logitech
User Group Leader
User Group Leader
October 16, 2026

OK, much of what you’re doing with the API is the same thing you’d get with a smart campaign and Add to/Remove from List. The logic is in the SCs you happen to be calling, which are unknown to the API endpoint. The exceptions of course being 3 & 4.

 

“Generally speaking, it's possible to have standalone custom objects with no linked people.” News to me!

Yes, under certain circumstances (SFDC merges w/permission issues, for example) it’s possible for objects to still be retrievable if you stored their GUID offline, but there are no current Marketo people linked to them.

 

“But an object truly deleted via API is gone.” We don’t want to delete the Custom Object entirely, but clear the CO and upload fresh data monthly.

I’m referring to CO records, not the CO definition.

 

The worry with these CO records not linked to users is they could somehow be linked to a record at some point and this old CO data would qualify for a campaign send, then our email populates with bad/old data.

That won’t happen: even if orphaned records exist they’ll never be relinked.

 

If I were in your position I’d just delete the CO definition and recreate it exactly (same API names) since you don’t care about the records. Or you could open a support case if you want to wait longer. :)

Translate