Is it possible to search for contact scores via the scoring rest api v1.0?


    I've been here REST API - Documentation for Core Objects,

    here REST API - Contact Information

    and here How to Show Contact's Current Score Under New Lead Scoring?


    And it's still not clear if it is possible to get the contacts score via the rest api.


    I've also tried hitting these restful resources








    I am able to retrieve a single contacts score via this endpoint



    but as eloqua does not update the contact when they are scored it makes syncing scoring changes to a CRM a bit of a hassle.

      • 1. Re: Is it possible to search for contact scores via the scoring rest api v1.0?
        Bojan Momic-Oracle

        I don't believe this is currently possible, and hopefully I can elaborate why.


        Two specific RESTful endpoints were built out to facilitate viewing Lead Scores on the contact record within the UI. Besides the one you mentioned, there is also:

        GET /API/Scoring/1.0/data/contact/{id}/scores/recent/model/{id} for viewing historical changes against a specific model.


        Even for workflows which involve sending lead scores to CRM, you would typically create a contact filter that is equivalent to the Engagement portion of your Lead Score Model, and use that as a feeder to a program which will update the score in CRM. If you inspect the Engagement portion of the LSM, most of the time you are looking at standard activities. If this is the case, you can use this contact filter as a reference in a Bulk API export.


        One specific difficulty arises when you want to update scores in CRM as they deprecate. For most clients, they will have a weekly or nightly running program that will update the scores of all contacts in their db with CRM once. This is straightforward to do via Bulk - you would simply make a contact filter representing each profile/engagement value for any model you care about and run the export at whatever cadence you wish. For each of the 16 possible scores per model, you would have to run one export. However, you wouldn't need to include any fields beyond contact id and email address since the contact's presence in a particular export implies the score they have without you directly reading it from the data response.


        The biggest difficulty in my opinion is finding out when someone's score has changed for the positive (increased), when something has happened for which you can't make a simple contact filter for. In the case of activities, its easy to make a filter that looks at the relevant activities from the past one hour. On the other hand, you include shared list memberships as part of your Engagement portion, you're stuck with exporting from a segment via Bulk API - which includes both filter and shared list membership crterions. Segment exports themselves require you to have a separate process to refresh them and wait for the refresh to finish or else you're simply exporting the contacts that were in the segment the last time it was executed. In other words, it's not dynamic like shared filteres are.


        This continues to cause problems because unlike activities, shared list memberships, or custom object records don't typically have a time component. So you can't make a filter that says "entered this shared list within the last 1 hour" or "had this custom object record linked to them with this value in the past 1 hour". So once they meet the criteria, the segment/filter will always return the contact.


        In my opinion, you are better off making a filter that looks for the A1, A2, A3 and your other "top" scores that Salespersons need to follow up on quickly, then exporting that data on a quick interval such as 30 minutes or 60 minutes. Usually, your Lead Score Model won't have more than a few thousand results for the top scores, if it follows general best practices.When presenting the data to Salespersons, also show the time this lead score was pulled. For C1, C2, C3, etc type contacts, you may want to run the sync perhaps daily. For D1, D2, D3 etc run the sync every few days and so on.


        The simplest solution to this would be a filter that says "score for model X increased in the past 1 hour" or "became A1 for model X in past 1 hour", unfortunately, that type of query does not exist in the current segmentation model and would need to be implemented through a product enhancement request.