8 Minuten

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.

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.
NOTE
Doch diese Methode ermöglicht nur einfache Fälle von Datenwiederherstellung. Sind viele Änderungen vorhanden, ist eine komplexere Logik erforderlich, um den richtigen Wert auszuwählen, auf den zurückgegriffen werden soll.
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.
IMPORTANT
Bevor Sie Daten einer Person an ein großes Sprachmodell (LLM) senden, konsultieren Sie die entsprechenden Compliance-Ressourcen in Ihrem Unternehmen, um die Einhaltung der relevanten Gesetze und Vorschriften sicherzustellen.
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:

  1. Automatisiertes Klonen von Kampagnen, um manuelle Arbeit zu reduzieren und Konsistenz zu wahren.
  2. Verfolgen und Zurücksetzen unerwünschter Datenänderungen, damit Sie sich stundenlange Bereinigung sparen.
  3. 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:

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']
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

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']
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

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']
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