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.
- Caso d’uso 1 - Semplificazione della creazione delle campagne: quanto tempo trascorri nella creazione delle campagne Marketo Engage? Scommetto che questo processo occupa almeno 2 ore della tua giornata, ed è molto probabile che questo numero sia più alto, a seconda del tuo livello di carriera. Ma la parte peggiore di questa attività è che il 90% del lavoro di creazione della campagna si basa su un approccio manuale, realizzato con il copia e incolla. Quindi, questo tipo di attività è perfetto per l’automazione!
- Caso d’uso 2 - Ripristino delle modifiche indesiderate ai dati: la gestione di dati modificati è il peggiore incubo del team responsabile delle attività di marketing. Hai ricevuto un elenco con molti valori indesiderati e l’hai importato senza prima pulirlo. I troppi impegni o forse la distrazione hanno fatto passare questo elenco inosservato. Quando hai visualizzato i risultati nel database di Marketo Engage, il cuore ti è saltato in gola. Non preoccuparti; ti mostro come correggere rapidamente un’importazione di elenchi errati utilizzando un metodo efficiente come l’API REST.
- Caso d’uso 3 - Trasformazione delle informazioni approfondite in azioni di vendita: quante volte hai responsabili commerciali che ti chiedono: “Perché questo lead è un MQL? Quali argomenti interessano a questa persona?” Per rispondere a queste domande, è necessario accedere al registro attività per identificare il motivo per cui una persona è qualificata come MQL. Nella sezione demo seguente, scoprirai come automatizzare questo processo di traduzione dei dati utilizzando l’API REST.
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.
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.
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:
- Automatizzare la duplicazione delle campagne per ridurre il lavoro manuale e garantire la coerenza.
- Tracciare e ripristinare le modifiche indesiderate ai dati che consentono di risparmiare ore di tempo per la pulizia.
- 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:
- Inizia a piccoli passi. Prova prima qualcosa di semplice. Crea la prima chiamata API e ottieni i risultati. Puoi realizzare molto già con una sola chiamata. Immagina cosa puoi realizzare con la creazione del primo programma!
- Scopri come programmare e non aver paura. La programmazione è più facile di quanto non sembri. In diverse occasioni, può essere proprio come scrivere in un modo un po’ insolito. Preferisco Python, e puoi trovare ottimi corsi su Python online a cui iscriverti e da cui imparare.
- Partecipa alla community. Ci sono molti esperti API Marketo Engage pronti a condividere le loro conoscenze. Spesso è possibile anche trovare il loro codice completo online.
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']
templateID=5200
folderName="Active Webinars"
programName="WB-2025-02-20-Test"
eventName="Webinar Test"
eventDate="2025-02-20"
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"]
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']
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)
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)
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
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
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']
sinceDate="2025-04-22T00:00:00-00:00"
field='Job Title'
fieldRest='Title'
listID=299
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
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'])
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
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']
df=pd.merge(df,df1,left_index=True, right_index=True)
df=df.drop(columns=['attributes'])
df=df.drop_duplicates(subset='leadId', keep="first")
df
df.to_excel("dataToCorrect.xlsx")
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'])
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']
leadid="1007244"
ndays=60
gptAPIKey="Bearer␣
↪sk-proj-ne6OZggjgQhQU6XcG0ocHNPNzBvOOULTkk8a-75Y75rHKS-vyztxPYq0OLaFsnhtGivx9bVUNoT3BlbkFJH
fieldName="MktoPersonNotes"
today = datetime.today()
sinceDate = today - timedelta(days=ndays)
sinceDate = sinceDate.strftime("%Y-%m-%dT00:00:00")
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
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
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
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