Découvrez comment utiliser l’API REST Marketo Engage pour automatiser les tâches des opérations marketing. Cet article couvre des cas d’utilisation courants pour les administrateurs de Marketo Engage, notamment la rationalisation de la création de campagnes, l’annulation des modifications de données indésirables et la traduction des informations d’engagement en actions de vente exploitables.
J’ai une formation en mathématiques appliquées et appliquées à l’informatique, ce qui me distingue de la plupart des praticiens de Marketo Engage. Lorsque j’ai commencé à travailler dans le domaine du marketing, j’e me suis rendu compte qu’une grande partie du travail pouvait être automatisée. L’automatisation peut me conduire à être plus efficace dans mon travail et à connaître une croissance de carrière plus rapide. L’utilisation de l’API pour automatiser les opérations quotidiennes me permet de me concentrer sur des sujets plus stratégiques au lieu d’être submergé par des tâches opérationnelles.
Dans cet article, je partage la façon dont j’ai utilisé l’API REST Marketo Engage en présentant trois de mes cas d’utilisation préférés pour démontrer sa puissance. Laissez-moi vous montrer comment l’API REST peut devenir votre allié pour améliorer votre efficacité dans Marketo Engage, ce qui vous laissera plus de temps pour vous concentrer sur les questions stratégiques.
- Cas d’utilisation 1 : rationaliser la création de campagnes. Combien de temps passez-vous à créer des campagnes Marketo Engage ? Je parie que ce processus consomme au moins 2 heures de votre journée, et il est très probable que ce nombre soit plus élevé, selon votre niveau de carrière. Mais le pire dans cette tâche est que 90 % du travail de création de la campagne est manuel, de la copie au collage. Cette tâche est donc un candidat idéal pour l’automatisation !
- Cas d’utilisation 2 : rétablir les modifications de données indésirables. Le traitement des données incorrectes est le cauchemar de l’équipe des opérations marketing. Vous recevez une liste avec de nombreuses valeurs indésirables et l’importez sans la nettoyer au préalable. Peut-être que votre emploi du temps était trop chargé et que c’est passé inaperçu. Lorsque vous voyez les résultats dans la base de données Marketo Engage, votre cœur rate un battement. Ne vous inquiétez pas ; laissez-moi vous montrer comment corriger rapidement un import de liste erroné à l’aide d’une méthode efficace telle que l’API REST.
- Cas d’utilisation 3 : traduire les informations en actions de vente. Combien de fois des représentants commerciaux vous demandent-ils : « Pourquoi ce prospect est-il un MQL ? Avec quels sujets cette personne est-elle engagée ? » Pour répondre à ces questions, vous devez vous plonger dans le journal d’activité afin d’identifier les raisons pour lesquelles une personne a rempli les critères d’un MQL. Dans la section de démonstration ci-dessous, vous apprendrez à automatiser ce processus de traduction de données à l’aide de l’API REST.
À présent, attachez votre ceinture et préparez-vous à apprendre la façon dont j’utilise l’API REST pour ces scénarios métier.
Cas d’utilisation 1 : rationaliser la création de campagnes
Marketo Engage est un outil puissant qui permet de mettre à l’échelle les opérations marketing, avec des modèles et des jetons qui permettent de rationaliser les processus. Mais soyons réalistes : il reste malgré tout beaucoup de travail manuel à faire. Si vous travaillez dans des opérations marketing, vous passez probablement une grande partie de votre temps à cloner des programmes, mettre à jour des jetons et activer des campagnes intelligentes.
Si vous ne gérez que quelques campagnes par semaine, vous pouvez être en mesure de suivre la cadence. Mais si vous gérez des dizaines, voire des centaines de campagnes, il n’est tout simplement pas pratique de tout faire manuellement. Des erreurs se produisent et il est très difficile d’assurer la cohérence entre les campagnes. C’est là que l’API REST Marketo Engage entre en jeu. À travers l’automatisation de ces tâches répétitives, vous pouvez gagner du temps, réduire les erreurs et maintenir la cohérence de tous vos efforts marketing.
Avec l’API REST, vous pouvez cloner rapidement des programmes entiers tout en conservant la structure et l’uniformité de l’ensemble. Même les utilisateurs et utilisatrices de Marketo Engage les plus expérimentés commettent des erreurs. L’automatisation réduit les risques et contribue à maintenir l’intégrité des données.
Ce processus permet toujours de personnaliser vos campagnes en fonction de vos besoins marketing. L’API REST permet de modifier des éléments clés tels que des jetons, tout en préservant la cohérence de la structure de votre campagne.
Regardez la vidéo de démonstration ci-dessous, où j’explique la façon dont utiliser les exemples de codes fournis et comment les ajuster pour répondre aux besoins de votre organisation.
Recherchez les codes présentés dans la vidéo ci-dessous pour une utilisation hors ligne dans la section « Exemples de codes ».
Cas d’utilisation 2 : annulation des modifications de données indésirables
Imaginez ce scénario : vous êtes déjà submergé de tâches lorsque vos spécialistes marketing vous demandent de manière urgente de charger une liste de prospects dans Marketo Engage. Vous le faites rapidement, pour entendre de vos RDS que les données sont fausses ! Les titres des postes sont incorrects, les anciens prospects ont été remplacés et tout est en désordre.
Il s’agit d’un scénario cauchemardesque pour tout professionnel des opérations marketing. La correction manuelle de ces erreurs peut prendre des heures, voire des jours. Mais ne vous inquiétez pas, l’API REST Marketo Engage dispose d’une solution : une sorte de machine à remonter le temps pour vos données, qui vous permet de suivre et d’annuler facilement les modifications indésirables.
En utilisant l’API REST, vous pouvez extraire un journal des modifications récentes de valeurs de données, identifier les mises à jour incorrectes et restaurer les informations d’origine en quelques étapes seulement. Au lieu de vous démener pour nettoyer le fouillis de données manuellement, vous pouvez automatiser le processus de restauration et vous assurer que votre base de données reste précise et fiable.
Dans la vidéo ci-dessous, découvrons comment utiliser l’API REST pour inverser les imports de données erronées et maintenir votre instance Marketo Engage propre et exempte d’erreurs.
Recherchez les codes présentés dans la vidéo ci-dessous pour une utilisation hors ligne dans la section « Exemples de codes ».
Cas d’utilisation 3 : traduire les informations en actions de vente
Pour les équipes commerciales, le contexte est primordial, en particulier lorsqu’il s’agit de comprendre pourquoi un prospect est devenu un lead qualifié en marketing (MQL). Mais trop souvent, les données sous-jacentes à cette qualification sont enfouies dans plusieurs couches de mesures d’engagement, ce qui fait que les représentants commerciaux mettent beaucoup de temps à rassembler par eux-mêmes l’histoire d’une personne.
C’est là que l’automatisation entre en jeu. En intégrant Marketo Engage à l’IA, vous pouvez transformer les données d’engagement en informations claires et exploitables qui aident les équipes commerciales à se concentrer sur ce qui compte vraiment : conclure des affaires.
À l’aide de l’API REST Marketo Engage, vous pouvez extraire les activités d’engagement récentes, les traiter via l’IA générative afin de générer un résumé concis et renvoyer ce résumé dans Marketo Engage pour plus de visibilité. Cela signifie que les représentants commerciaux n’ont plus à passer en revue les journaux d’activité d’une personne pour comprendre comment un prospect est devenu un MQL. Au lieu de cela, ils obtiennent une explication simple, générée par l’IA, du parcours du prospect. Le résumé comprend les produits ou services qui ont suscité l’intérêt et les principales mesures prises par les clients avec votre marque.
En donnant aux vendeurs un accès instantané à ces informations dans Salesforce, ils peuvent aborder les conversations en toute confiance, personnaliser leur portée et, finalement, conclure plus d’offres plus rapidement.
Ce cas d’utilisation est destiné à utiliser l’API REST lorsqu’un prospect devient MQL. Par conséquent, elle ne fonctionne que pour un seul prospect à la fois. Si vous envisagez d’appliquer cette méthode à un plus grand lot de prospects, l’API en bloc serait plus adaptée.
Examinons la vidéo ci-dessous pour voir comment cette configuration fonctionne en pratique.
Recherchez les codes présentés dans la vidéo ci-dessous pour une utilisation hors ligne dans la section « Exemples de codes ».
Points clés à retenir
Voilà qui résume la façon dont rationaliser vos tâches d’opérations marketing avec les API REST Marketo Engage.
J’ai présenté trois puissants cas d’utilisation pour lesquels vous pouvez utiliser les API REST :
- Automatisation du clonage des campagnes pour réduire le travail manuel et assurer la cohérence.
- Suivi et rétablissement des modifications de données indésirables pour gagner des heures de nettoyage.
- Fournir aux équipes commerciales des informations instantanées sur les MQL pour permettre des conversations de suivi plus efficaces.
Ces techniques d’automatisation ne se limitent pas à gagner du temps : elles permettent d’assurer la précision, de maintenir l’intégrité des données et de permettre aux équipes marketing et commerciales de travailler plus intelligemment.
Comme il peut être très difficile d’entrevoir autant de possibilités avec l’API REST, j’ai quelques conseils à vous donner :
- Commencez petit. Essayez d’abord quelque chose de simple. Créez votre premier appel API et obtenez les résultats. Ce premier appel vous permet de vous réjouir de tout ce que vous pouvez faire. Imaginez-vous en train de créer votre premier programme !
- Apprenez à coder et n’ayez pas peur ! Coder est plus facile qu’il n’y paraît. Souvent, c’est comme écrire dans un français bizarre. Je préfère Python, et vous pouvez trouver de super cours de Python en ligne pour vous inscrire et apprendre.
- Entrez en contact avec la communauté. Il existe de nombreux experts en API Marketo Engage qui partagent leurs connaissances. Souvent, vous pouvez même trouver leur code complet en ligne.
Si vous avez trouvé cet article utile, veillez à consulter Adobe Experience League pour obtenir plus d’informations de la part de pairs et ainsi que des bonnes pratiques. Merci d’avoir lu, et bonne automatisation !
Exemple de code
Rationaliser la création de campagnes
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
Annuler les modifications de données indésirables
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'])
Traduire les informations en actions de vente
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