Erfahren Sie, wie Sie mit der Marketo Engage-REST-API Marketing-Aufgaben automatisieren können. In diesem Artikel werden häufige Use Cases für Marketo Engage-Administratorinnen und -Administratoren behandelt. Ich erkläre darin, wie Sie die Kampagnenerstellung optimieren, unerwünschte Datenänderungen rückgängig machen und Erkenntnisse aus Interaktionen für Verkaufsmaßnahmen nutzen können.
Ich habe einen Abschluss in angewandter und computergestützter Mathematik, was mich von den meisten Marketo Engage-Nutzern unterscheidet. Als ich anfing, im Marketing zu arbeiten, stellte ich fest, dass ein Großteil der Aufgaben automatisiert werden konnte. Automatisierung kann uns helfen, effizienter zu arbeiten und die Karriere schneller voranzutreiben. Durch die Verwendung einer API zur Automatisierung meiner täglichen Arbeit kann ich mich besser auf strategische Überlegungen konzentrieren, anstatt mich mit operativen Aufgaben herumzuschlagen.
In diesem Artikel erkläre ich, wie ich die Marketo Engage REST-API verwendet habe, und zeige anhand von drei Use Cases, wie leistungsfähig sie ist. Ich verrate Ihnen, wie Ihnen die REST-API helfen kann, Marketo Engage effizienter einzusetzen, sodass Ihnen mehr Zeit für strategische Angelegenheiten bleibt.
- Use Case 1: Optimieren der Kampagnenerstellung: Wie viel Zeit benötigen Sie zur Erstellung von Marketo Engage-Kampagnen? Ich wette, dieser Prozess nimmt mindestens zwei Stunden pro Tag in Anspruch – und wahrscheinlich noch länger je nach Arbeitserfahrung. Das Schlimmste an dieser Aufgabe ist, dass 90 % der Kampagnenerstellung – vom Kopieren bis zum Einfügen – manuelle Arbeit ist. Also ist diese Aufgabe ein perfekter Kandidat für Automatisierung!
- Use Case 2 – Unerwünschte Datenänderungen rückgängig machen: Unzuverlässige Daten sind der Albtraum eines jeden Marketing-Operations-Teams. Sie erhalten eine Liste mit vielen Junk-Werten und importieren sie, ohne sie zuvor zu bereinigen. Vielleicht waren Sie zu beschäftigt und haben es nicht bemerkt. Doch als Sie die Ergebnisse in der Marketo Engage-Datenbank sehen, überkommt Sie Panik. Doch machen Sie sich keine Sorgen. Ich zeige Ihnen hier, wie Sie mit einer effizienten Methode wie der REST-API schnell einen Import fehlerhafter Listen beheben können.
- Use Case 3 – Nutzen Sie Ihre Erkenntnisse für Vertriebsmaßnahmen: Wie oft werden Sie von Ihren Vertriebsmitarbeitenden gefragt: „Warum ist dieser Lead ein Marketing Qualified Lead? Woran ist diese Person interessiert?“ Um diese Fragen zu beantworten, müssen Sie im Aktivitätsprotokoll nachsehen, warum eine Person als Marketing Qualified Lead eingestuft wurde. Im folgenden Demoabschnitt erfahren Sie, wie Sie diesen Datenübersetzungsprozess mithilfe der REST-API automatisieren können.
Also, machen sich bereit. Jetzt erfahren Sie, wie ich die REST-API für diese Geschäftsszenarien verwende.
Use Case 1: Optimieren der Kampagnenerstellung.
Marketo Engage ist ein leistungsstarkes Tool zur Skalierung von Marketing-Aufgaben. Vorlagen und Token helfen bei der Prozessoptimierung. Aber dennoch gibt es noch jede Menge manuelle Aufgaben. Wenn Sie im Marketing tätig sind, verbringen Sie wahrscheinlich viel Zeit damit, Programme zu klonen, Token zu aktualisieren und Smart Campaigns zu aktivieren.
Wenn Sie nur ein paar Kampagnen pro Woche verwalten, können Sie möglicherweise Schritt halten. Wenn Sie jedoch Dutzende oder sogar Hunderte Kampagnen durchführen, ist es einfach nicht praktikabel, alle Handgriffe manuell zu erledigen. Dann passieren Fehler, und Konsistenz in allen Kampagnen zu wahren wird zu einer echten Herausforderung. An dieser Stelle kommt die Marketo Engage REST API ins Spiel. Wenn Sie diese sich wiederholenden Aufgaben automatisieren, können Sie Zeit sparen, Fehler reduzieren und die Konsistenz aller Marketing-Maßnahmen gewährleisten.
Mit der REST-API können Sie schnell ganze Programme klonen und Inhalte strukturiert und einheitlich halten. Sogar die erfahrensten Marketo Engage-Fachleute machen Fehler. Die Automatisierung minimiert das Risiko und hilft bei der Wahrung der Datenintegrität.
Durch diesen Prozess können Ihre Kampagnen weiterhin an Ihre Marketing-Anforderungen angepasst werden. Mit der REST-API können Sie wichtige Elemente wie Token ändern und gleichzeitig Ihre Kampagnenstruktur konsistent halten.
Sehen Sie sich das Demovideo unten an, in dem ich erkläre, wie Sie die bereitgestellten Muster-Codes verwenden und an die Anforderungen Ihres Unternehmens anpassen können.
Die im folgenden Video gezeigten Codes können Sie offline nutzen. Sie finden sie im Abschnitt „Muster-Codes“.
Use Case 2: Rückgängigmachen unerwünschter Datenänderungen.
Stellen Sie sich dieses Szenario vor: Sie arbeiten bereits am Limit, als Sie Ihre Marketing-Fachleute bitten, dringend eine Lead-Liste in Marketo Engage hochzuladen. Sie erledigen das schnell, nur um dann von Ihrem Kundenentwicklungs-Team zu hören, dass die Daten völlig falsch sind. Die Job-Titel sind falsch, alte Leads wurden überschrieben – alles reines Chaos.
Dies ist ein Albtraumszenario für jeden Marketing-Operations-Profi. Die manuelle Behebung dieser Fehler kann Stunden, wenn nicht Tage dauern. Aber keine Sorge, die REST-API von Marketo Engage bietet eine Lösung: eine Art Zeitmaschine für Ihre Daten, mit der Sie unerwünschte Änderungen mühelos verfolgen und rückgängig machen können.
Mithilfe der REST-API können Sie in nur wenigen Schritten ein Protokoll der letzten Datenwertänderungen abrufen, falsche Aktualisierungen identifizieren und die ursprünglichen Informationen wiederherstellen. Statt das Datenchaos mühevoll manuell zu bereinigen, können Sie den Rollback-Prozess automatisieren und so sicherstellen, dass Ihre Datenbank korrekt und zuverlässig ist.
Im folgenden Video erfahren Sie, wie Sie mit der REST-API fehlerhafte Datenimporte rückgängig machen und Ihre Marketo Engage-Instanz sauber und fehlerfrei bleibt.
Die im folgenden Video gezeigten Codes können Sie offline nutzen. Sie finden sie im Abschnitt „Muster-Codes“.
Use Case 3: Verwandeln von Erkenntnissen in Verkaufsaktionen.
Für Vertriebs-Teams ist Kontext alles – insbesondere dann, wenn es darum geht zu verstehen, warum ein Lead zu einem Marketing Qualified Lead (MQL) wurde. Zu oft jedoch sind die Daten hinter dieser Qualifizierung unter vielen Ebenen von Interaktionsmetriken verborgen, sodass es für Vertriebsmitarbeitende zeitaufwendig ist, die Story einer Person selbst zusammenzustellen.
Auch hier hilft Automatisierung. Durch die Integration von Marketo Engage mit KI können Sie Interaktionsdaten in verständliche, umsetzbare Erkenntnisse verwandeln, die Vertriebs-Teams helfen, sich auf das zu konzentrieren, was wirklich wichtig ist – den Deal.
Mithilfe der Marketo Engage-REST-API können Sie aktuelle Interaktionsaktivitäten abrufen, durch generative KI eine kurze Zusammenfassung erstellen, und diese zur besseren Sichtbarkeit zurück in Marketo Engage übertragen. Das bedeutet, dass Vertriebsmitarbeitende die Aktivitätsprotokolle einer Person nicht mehr durchsuchen müssen, um zu verstehen, warum aus einem Lead ein MQL wurde. Stattdessen erhalten sie eine einfache, KI-generierte Erläuterung der Journey des Leads. Die Zusammenfassung enthält Informationen zu den Produkten oder Dienstleistungen, die für den Lead von Interesse sind, sowie zu Schlüsselaktionen, die diese Person in Verbindung mit Ihrer Marke ergriffen hat.
Durch den sofortigen Zugriff auf diese Informationen in Salesforce können Vertriebsmitarbeitende selbstsicher an Gespräche herangehen, die Kontaktaufnahme personalisieren und schließlich schneller mehr Deals abschließen.
Bei diesem Use Case wird die REST-API verwendet, wenn ein Lead zu einem MQL wird. Daher wird sie jeweils nur für einen Lead ausgeführt. Wenn Sie diese Methode auf einen größeren Lead-Batch anwenden möchten, ist Bulk API besser geeignet.
Sehen wir uns das folgende Video an, um zu erfahren, wie dieses Setup in der Praxis funktioniert.
Die im folgenden Video gezeigten Codes können Sie offline nutzen. Sie finden sie im Abschnitt „Muster-Codes“.
Die wichtigsten Erkenntnisse
In diesem Artikel habe ich Ihnen gezeigt, wie Sie Ihre Marketing-Aufgaben mit Marketo Engage-REST-APIs optimieren können.
Ich habe Ihnen drei Use Cases vorgestellt, für die Sie die REST-APIs verwenden können:
- Automatisiertes Klonen von Kampagnen, um manuelle Arbeit zu reduzieren und Konsistenz zu wahren.
- Verfolgen und Zurücksetzen unerwünschter Datenänderungen, damit Sie sich stundenlange Bereinigung sparen.
- Verkaufs-Teams erhalten sofortige Erkenntnisse über MQLs, um effektive Follow-up-Gespräche führen zu können.
Bei diesen Automatisierungsstrategien sparen Sie nicht nur Zeit. Sie helfen Ihnen auch, die Korrektheit der Daten sicherzustellen und die Datenintegrität zu wahren und ermöglichen Marketing- und Vertriebs-Teams, intelligenter zu arbeiten.
Damit Sie sich durch diese zahlreichen Einsatzmöglichkeiten der REST-API nicht überfordert fühlen, habe ich ein paar Tipps für Sie:
- Beginnen Sie klein. Versuchen Sie zuerst etwas Einfaches. Erstellen Sie Ihren ersten API-Aufruf und rufen Sie die Ergebnisse ab. Dieser erste Anruf gibt Ihnen einen Einblick in die fantastischen Einsatzmöglichkeiten, die sich Ihnen bieten. Stellen Sie sich vor, Sie erstellen Ihr erstes Programm.
- Erfahren Sie, wie man programmiert, und haben Sie keine Angst davor. Programmieren ist einfacher, als es aussieht. Oft fühlt es sich so an, als würde man in seiner Sprache schreiben – nur klingt es irgendwie merkwürdig Ich bevorzuge Python. Dazu gibt es hervorragende Online-Kurse, bei denen Sie sich registrieren können.
- Kontakt mit der Community. Es gibt viele Marketo Engage-API-Fachleute, die gern ihr Wissen teilen. Oft kann man sogar ihren kompletten Code online finden.
Wenn Sie diesen Artikel nützlich fanden, sollten Sie Adobe Experience League besuchen, um weitere Erkenntnisse von Gleichgesinnten und Best Practices zu finden. Vielen Dank für das Lesen und viel Erfolg beim Automatisieren!
Muster-Codes
Optimieren der Kampagnenerstellung
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
Rückgängigmachen unerwünschte Datenänderungen
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'])
Nutzen von Erkenntnissen für Verkaufsmaßnahmen
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