8 minuti

Scopri come utilizzare l’API REST di Marketo Engage per automatizzare le attività di marketing. In questo articolo vengono descritti i casi d’uso comuni per gli admin di Marketo Engage, tra cui la semplificazione della creazione di campagne, il ripristino delle modifiche indesiderate ai dati e la trasformazione di informazioni approfondite sul coinvolgimento in azioni di vendita utili.

Grazie alla mia formazione in Matematica applicata e computazionale, mi distinguo dalla maggior parte dei professionisti Marketo Engage. Quando ho iniziato a lavorare nelle attività di marketing, mi sono reso conto che gran parte del lavoro poteva essere automatizzato. L’automazione può portarmi a essere più efficiente nel mio lavoro e ad avere una crescita professionale più rapida. L’utilizzo delle API per automatizzare le operazioni quotidiane mi consente di concentrarmi su argomenti più strategici invece di essere completamente assorbito dalle attività operative.

In questo articolo, condivido come ho utilizzato l’API REST di Marketo Engage, introducendo tre dei miei casi d’uso preferiti per dimostrarne l’efficacia. È possibile osservare il modo in cui l’API REST può diventare un ottimo alleato per migliorare l’efficienza in Marketo Engage, portando ad avere più tempo per concentrarsi su questioni strategiche.

Ora, mettiti a tuo agio e preparati a scoprire come utilizzo l’API REST per questi scenari aziendali.

Caso d’uso 1: semplificazione della creazione delle campagne

Marketo Engage è uno strumento potente per la scalabilità delle operazioni di marketing, con modelli e token che aiutano a semplificare i processi. Ma ammettiamolo, gli interventi manuali richiesti sono ancora molti. Se ti occupi di marketing, probabilmente trascorri molto tempo a clonare programmi, aggiornare token e attivare campagne intelligenti.

Se gestisci solo poche campagne alla settimana, non hai difficoltà a tenere il passo. Ma se gestisci decine o anche centinaia di campagne, fare tutto manualmente non è affatto pratico. Possono verificarsi errori e garantire la coerenza tra le campagne diventa una vera sfida. Qui entra in gioco l’API REST di Marketo Engage. Automatizzando queste attività ripetitive, puoi risparmiare tempo, ridurre gli errori e mantenere la coerenza in tutte le attività di marketing.

Con l’API REST, puoi clonare rapidamente interi programmi mantenendo tutti gli elementi strutturati e uniformi. Anche i professionisti Marketo Engage più esperti commettono errori e l’automazione riduce al minimo i rischi, oltre a contribuire a mantenere l’integrità dei dati.

Questo processo consente ancora di personalizzare le campagne in base alle esigenze di marketing. L’API REST consente di modificare elementi chiave come i token mantenendo coerente la struttura della campagna.

Guarda il video dimostrativo seguente, in cui spiego come utilizzare i codici di esempio forniti e regolarli per soddisfare le esigenze della tua organizzazione.
Visualizza i codici descritti nel video seguente per l’utilizzo offline nella sezione “Codici di esempio”.

Caso d’uso 2: ripristino delle modifiche indesiderate ai dati

Immagina questo scenario: devi occuparti di molte attività e gli esperti di marketing ti chiedono urgentemente di caricare un elenco di lead in Marketo Engage. Fai tutto in fretta, per poi sentirti dire dagli SDR che i dati sono tutti sbagliati! I titoli del lavoro non sono corretti, i vecchi lead sono stati sovrascritti ed è tutto una grande confusione.

Questo è uno scenario da incubo per qualsiasi professionista che si occupa di attività di marketing. La correzione manuale di questi errori può richiedere ore, se non giorni. Non preoccuparti, l’API REST di Marketo Engage offre una soluzione: è come una macchina del tempo per i tuoi dati, che ti consente di monitorare e ripristinare facilmente le modifiche indesiderate.

Utilizzando l’API REST, puoi richiamare un registro delle modifiche recenti al valore dei dati, identificare gli aggiornamenti non corretti e ripristinare le informazioni originali in pochi passaggi. Invece di correre ai ripari per ripulire manualmente il caos dei dati, è possibile automatizzare il processo di rollback e garantire che il database rimanga accurato e affidabile.

Nel video seguente, esaminiamo come utilizzare l’API REST per annullare le importazioni di dati errati e mantenere l’istanza Marketo Engage pulita e priva di errori.
NOTE
Questo metodo può essere applicato solo ad alcuni casi semplici di ripristino dei dati. Nel caso in cui le modifiche da considerare siano molteplici, sarebbe necessaria una logica più sofisticata per scegliere il valore giusto a cui ripristinare.
Visualizza i codici descritti nel video seguente per l’utilizzo offline nella sezione “Codici di esempio”.

Caso d’uso 3: trasformazione di informazioni approfondite in azioni di vendita

Per i team commerciali, il contesto è tutto, soprattutto quando si tratta di capire perché un lead è diventato un Marketing Qualified Lead (MQL). Ma troppo spesso, i dati alla base di tale qualificazione sono nascosti sotto livelli di metriche di coinvolgimento, rendendo molto dispendioso per i responsabili commerciali mettere insieme la storia di una persona da soli.

Ecco dove entra in gioco l’automazione per risolvere il problema. Integrando Marketo Engage con l’intelligenza artificiale, puoi trasformare i dati sul coinvolgimento in informazioni chiare e actionable che aiutino i team di vendita a concentrarsi su ciò che conta veramente: concludere affari.

Utilizzando l’API REST di Marketo Engage, è possibile richiamare le attività di coinvolgimento recenti, elaborarle tramite IA generativa per generare un riepilogo conciso e inviarlo nuovamente a Marketo Engage per renderlo visibile. Ciò significa che i responsabili commerciali non devono più esaminare i registri attività di una persona per capire come un lead sia diventato un MQL. Al contrario, ottengono una semplice spiegazione del percorso del lead generata dall’IA. Il riepilogo include i prodotti o servizi a cui hanno mostrato interesse ed eventuali azioni chiave intraprese rispetto al proprio marchio.

Grazie all’accesso immediato a tali informazioni in Salesforce, i responsabili commerciali possono affrontare le conversazioni con fiducia, personalizzare la propria attività e, in ultima analisi, concludere affari più rapidamente.

Questo caso d’uso è inteso per utilizzare l’API REST quando un lead passa a MQL. Pertanto, viene eseguito per un solo lead alla volta. Se stai valutando l’applicazione di questo metodo per una batch di lead più grande, l’API in blocco rappresenta la soluzione migliore.

Approfondiamo nel video seguente il modo in cui questa configurazione funziona nella pratica.
IMPORTANT
Prima di inviare i dati di qualsiasi persona a un modello LLM (Large Language Model), consulta le risorse di conformità appropriate nella tua organizzazione per garantire la conformità alle leggi e alle normative pertinenti.
Visualizza i codici descritti nel video seguente per l’utilizzo offline nella sezione “Codici di esempio”.

Punti chiave

Il presente articolo descrive il modo in cui è possibile semplificare le attività di marketing con le API REST di Marketo Engage.

Ho descritto tre efficaci casi d’uso per cui è possibile utilizzare le API REST per:

  1. Automatizzare la duplicazione delle campagne per ridurre il lavoro manuale e garantire la coerenza.
  2. Tracciare e ripristinare le modifiche indesiderate ai dati che consentono di risparmiare ore di tempo per la pulizia.
  3. Fornire ai team commerciali informazioni immediate sui MQL per consentire conversazioni di follow-up più efficaci.

Queste tecniche di automazione non consentono solo di far risparmiare tempo, ma contribuiscono a garantire la precisione, a mantenere l’integrità dei dati e a consentire ai team responsabile delle attività di marketing e a quello commerciale di lavorare in modo più intelligente.

Conoscere tutte le possibilità che l’utilizzo dell’API REST può offrire è sorprendente, quindi voglio darti alcuni consigli:

Se questo articolo è stato utile, consulta Adobe Experience League per ulteriori informazioni approfondite e best practice da parte di altri professionisti. Grazie per aver letto fin qui e buona automazione!

Codici di esempio

Semplificazione della creazione delle campagne

import requests
import pandas as pd
import json
import urllib.parse
MUNCHKIN = "YOUR-MUNCHKIN-ID"
client_id = "YOUR-CLIENT-ID"
client_secret= "YOUR-CLIENT-SECRET"
def get_access_token():
    global client_id
    global client_secret
    global MUNCHKIN
    params={'grant_type': 'client_credentials', 'client_id': client_id, 'client_secret': client_secret}
    headers={'Accept-Encoding': 'gzip'}
    url="https://"+MUNCHKIN+".mktorest.com/identity/oauth/token"
    response=requests.get(url=url,params=params,headers=headers)
    data=response.json()
    return data['access_token']
5
5-7
templateID=5200
folderName="Active Webinars"
programName="WB-2025-02-20-Test"
eventName="Webinar Test"
eventDate="2025-02-20"
18
url="https://"+MUNCHKIN+".mktorest.com/rest/asset/v1/folder/byName.json"
token=get_access_token()
params={"name": folderName,
        "type": "Folder",
        "Content-Type": "application/x-www-form-urlencoded"}
headers={'Authorization': 'Bearer ' + token}
response=requests.get(url=url,params=params, headers=headers)
data=response.json()
print(data)
folderID=data['result'][0]["id"]
23

url="https://"+MUNCHKIN+".mktorest.com/rest/asset/v1/program/

↪"+str(templateID)+"/clone.json"

token=get_access_token()

params={"Content-Type": "application/x-www-form-urlencoded"}

headers={'Authorization': 'Bearer ' + token}

body="name="+programName+"&folder={'id':"+str(folderID)+",'type':'Folder'}" url=url+"?"+body

response=requests.post(url=url,params=params,headers=headers)

data=response.json()

print(data)

programid=data['result'][0]['id']

33
url="https://"+MUNCHKIN+".mktorest.com/rest/asset/v1/smartCampaigns.json"
token=get_access_token()
params={"Content-Type": "application/x-www-form-urlencoded"}
headers={'Authorization': 'Bearer ' + token}
body="folder={'id':"+str(programid)+",'type':'Program'}"
url=url+"?"+body
response=requests.get(url=url, params=params, headers=headers)
data=response.json()
campaigns=[]
for campaign in data['result']:
    campaigns.append(campaign['id'])
print(campaigns)
43
for campaign in campaigns:
    url="https://"+MUNCHKIN+".mktorest.com/rest/asset/v1/smartCampaign/
    ↪"+str(campaign)+"/activate.json"
    token=get_access_token()
    headers={'Authorization': 'Bearer ' + token}
    response=requests.post(url=url,headers=headers)
    data=response.json()
    print(data)
55
url = "https://"+MUNCHKIN+".mktorest.com/rest/asset/v1/folder/
 ↪"+str(programid)+"/tokens.json"
token=get_access_token()
headers = {
           "Authorization": f"Bearer {token}",
           "Content-Type": "application/x-www-form-urlencoded"}
payload = {
           "name": "Webinar Name",
           "value": eventName,
           "type": "text",
           "folderType": "Program"}
response = requests.post(url, headers=headers, data=payload)
data=response.json()
data
63
url = "https://"+MUNCHKIN+".mktorest.com/rest/asset/v1/folder/
 ↪"+str(programid)+"/tokens.json"
token=get_access_token()
headers = {
           "Authorization": f"Bearer {token}",
           "Content-Type": "application/x-www-form-urlencoded"}
payload = {
           "name": "Webinar Date",
           "value": eventDate,
           "type": "date",
           "folderType": "Program"}
response = requests.post(url, headers=headers, data=payload)
data=response.json()
data
77

Ripristino delle modifiche indesiderate ai dati

import pandas as pd
import csv
import json
import ast
import requests
import math
MUNCHKIN = "YOUR-MUNCHKIN-ID"
client_id = "YOUR-CLIENT-ID"
client_secret= "YOUR-CLIENT-SECRET"
def get_access_token():
    global client_id
    global client_secret
    global MUNCHKIN
    params={'grant_type': 'client_credentials',
            'client_id': client_id,
            'client_secret': client_secret}
    headers={'Accept-Encoding': 'gzip'}
    url="https://"+MUNCHKIN+".mktorest.com/identity/oauth/token" response=requests.get(url=url,params=params,headers=headers)
    data=response.json()
    return data['access_token']
7
7-9
sinceDate="2025-04-22T00:00:00-00:00"
field='Job Title'
fieldRest='Title'
listID=299
21
url="https://"+MUNCHKIN+".mktorest.com/rest/v1/activities/pagingtoken.json"
token=get_access_token()
params={'sinceDatetime':sinceDate}
headers={'Authorization': 'Bearer ' + token,}
response=requests.get(url=url,params=params, headers=headers)
data=response.json()
nextPageToken=data['nextPageToken']
data
25
url="https://"+MUNCHKIN+".mktorest.com/rest/v1/activities.json"
params={'nextPageToken': nextPageToken,
        'activityTypeIds':[13],
        'listId': listID}
headers={'Authorization': 'Bearer ' + token,}
response=requests.get(url=url,params=params,headers=headers)
data=response.json()
print(data) act=data['result']
while data['moreResult']==True:
      nextPageToken=data['nextPageToken']
      token=get_access_token()
      params={'nextPageToken': nextPageToken,
              'activityTypeIds':[13],
              'listId': listID}
      headers={'Authorization': 'Bearer ' + token}
      response=requests.get(url=url,params=params,headers=headers) data=response.json()
      print(data)
      act=act+(data['result'])
33
df=pd.json_normalize(act)
df=df[df['primaryAttributeValue']==field]
df=df.sort_values('activityDate')
df=df.reset_index()
df=df.drop(columns=['index'])
df
51
df1=pd.json_normalize(df['attributes'])
i=4
while i<len(df1.columns):
      df1=df1.drop(columns=[list(df1.columns)[i]])
      i=i+1
df1.columns=['New_Value','Old_Value','Reason','Source']
df1.New_Value=pd.json_normalize(df1.New_Value)['value']
df1.Old_Value=pd.json_normalize(df1.Old_Value)['value']
df1.Reason=pd.json_normalize(df1.Reason)['value']
df1.Source=pd.json_normalize(df1.Source)['value']
57
df=pd.merge(df,df1,left_index=True, right_index=True)
df=df.drop(columns=['attributes'])
df=df.drop_duplicates(subset='leadId', keep="first")
67
df
70
df.to_excel("dataToCorrect.xlsx")
71
ids=df[df.columns.to_list()[2]].to_list()
camposval=df['Old_Value'].to_list()
for i in range(len(camposval)):
         if camposval[i] == None:
            camposval[i] = 'NULL'
STEP=300
a=math.ceil(len(ids)/STEP)
i=0
while i<a:
     tempids=ids[i*STEP:(i+1)*STEP]
     tempcamposval=camposval[i*STEP:(i+1)*STEP]
     params={'action': 'updateOnly',
             'lookupField': 'id',
             'input':[]}
j=0
while j<len(tempids):
     lead={'id':tempids[j],
           fieldRest:tempcamposval[j]}
     params['input'].append(lead)
     j=j+1
     token=get_access_token()
     url="https://"+MUNCHKIN+".mktorest.com/rest/v1/leads.json"
     headers={'content-type': 'application/json', 'Authorization': 'Bearer ' + token }
     i=i+1
     response=requests.post(url=url,data=json.dumps(params), headers=headers)
     print(response.json()['result'])
72

Trasformazione di informazioni approfondite in azioni di vendita

importrequests
import pandas as pd
import json
fromdatetimeimportdatetime, timedelta
MUNCHKIN = "YOUR-MUNCHKIN-ID"
client_id = "YOUR-CLIENT-ID"
client_secret= "YOUR-CLIENT-SECRET"
defget_access_token():
        globalclient_id
        globalclient_secret
        globalMUNCHKIN
        params={'grant_type': 'client_credentials',
                          'client_id': client_id,
                          'client_secret': client_secret}
        headers={'Accept-Encoding': 'gzip'}
        url="https://"+MUNCHKIN+".mktorest.com/identity/oauth/token"
        response=requests.get(url=url,params=params,headers=headers)
        data=response.json()
        return data['access_token']
5
5-7
leadid="1007244"
ndays=60
gptAPIKey="Bearer␣
  ↪sk-proj-ne6OZggjgQhQU6XcG0ocHNPNzBvOOULTkk8a-75Y75rHKS-vyztxPYq0OLaFsnhtGivx9bVUNoT3BlbkFJH
fieldName="MktoPersonNotes"
20
today = datetime.today()
sinceDate = today - timedelta(days=ndays)
sinceDate = sinceDate.strftime("%Y-%m-%dT00:00:00")
25
url="https://"+MUNCHKIN+".mktorest.com/rest/v1/activities/pagingtoken.json"
token=get_access_token()
params={'sinceDatetime': sinceDate}
headers={'Authorization': 'Bearer ' + token}
response=requests.get(url=url,params=params,headers=headers)
data=response.json()
nextPageToken=data['nextPageToken']
28
data
35
access_token=get_access_token()
def get_lead_activities(token, lead_id, firstToken):
    url = f"https://"+MUNCHKIN+".mktorest.com/rest/v1/activities.json"
    params={
             "leadId": lead_id,
             "activityTypeIds": "1,2,3,10,11,34,104",
             "nextPageToken": firstToken
             }
    headers={'Authorization': 'Bearer ' + token}
    activities = []
    more_results = True
    while more_results:
         response = requests.get(url, params=params, headers=headers)
         data = response.json()
         if 'result' in data:
             activities.extend(data['result'])
             more_results = data.get('moreResult', False)
         if more_results:
             params["nextPageToken"] = data['nextPageToken']
    return activities
all_activities = get_lead_activities(access_token, leadid,nextPageToken)
all_activities = str(all_activities).replace('"', "'")
activities=all_activities
activities
36
def send_to_chatgpt(activities):
    url = "https://api.openai.com/v1/chat/completions"
    headers = {
         "Authorization": gptAPIKey,
         "Content-Type": "application/json"
         }
    prompt = """Analyze the following lead activities and explain the␣
↪activities that contributed to this lead being marked as MQL so a␣
↪salesperson knows how they should approach the client, including which␣
↪product or service this lead is most interested in and any other relevant␣
↪insights. Include relevant URLs on form fills:""" +activities+""" – Remember␣
↪this will only be read by a salesperson, so don't use technical␣
↪explanations, just your best summary. Keep your response limited to 100␣
↪words."""
    data = {
         "model": "gpt-4o-mini",
         "messages": [{"role": "user", "content": prompt}],
         "max_tokens": 250
         }
         response = requests.post(url, headers=headers, json=data)
         return response.json()
gpt_response = send_to_chatgpt(activities)['choices'][0]['message']['content']
gpt_response
60
def update_marketo_field(lead_id, field_name, gpt_response):
       access_token=get_access_token()
       url = "https://"+MUNCHKIN+".mktorest.com/rest/v1/leads.json"
       headers = {
               "Content-Type": "application/json",
               'Authorization': 'Bearer ' + token
               }
       payload = {
                "action": "updateOnly",
                "lookupField": "id",
                "input":[
                        {
                         "id": int(lead_id),
                          field_name: gpt_response
                         }
                      ]
                   }
       response = requests.post(url, headers=headers, json=payload)
       return response.json()
update_response = update_marketo_field(leadid, fieldName, gpt_response)
update_response
83