Aprenda a utilizar la API REST de Marketo Engage para automatizar las tareas de operaciones de marketing. En este artículo, se describen casos de uso comunes para los administradores de Marketo Engage, incluidas la optimización de la creación de campañas, la reversión de cambios de datos no deseados y la conversión de la información de participación extraída en acciones de ventas procesables.
Tengo experiencia en Matemáticas aplicadas y computacionales, lo que me diferencia de la mayoría de los profesionales de Marketo Engage. Cuando empecé a trabajar en operaciones de marketing, me di cuenta de que gran parte del trabajo se podía automatizar. La automatización me permite ser más eficaz en mi trabajo y tener un crecimiento profesional más rápido. El uso de la API para automatizar las operaciones diarias me permite centrarme en iniciativas más estratégicas, en lugar de tener que dedicarme a las rutinarias tareas operativas.
En este artículo, se describe el uso de la API REST de Marketo Engage y se presentan tres de mis casos de uso favoritos para demostrar su potencia. Permítanme mostrarles cómo la API REST puede convertirse en la mejor aliada para mejorar su eficacia en Marketo Engage, lo que les permitirá tener más tiempo para centrarse en asuntos estratégicos.
- Caso de uso 1: Optimizar la creación de campañas: ¿Cuánto tiempo dedica a crear campañas de Marketo Engage? Seguramente este proceso requiere al menos 2 horas del día, y es muy probable que incluso más tiempo, dependiendo de su nivel de responsabilidad. No obstante, lo más frustrante de esta tarea es que el 90 % del trabajo de creación de campañas es manual, principalmente de copia y pega. Por lo tanto, esta tarea representa una oportunidad idónea para la automatización.
- Caso de uso 2: Revertir cambios de datos no deseados: La gestión de datos sucios es la pesadilla del equipo de operaciones de marketing. Recibe una lista con muchos valores no deseados y la importa sin limpiarla previamente. Quizás se le pasó por alto porque tenía demasiado trabajo. Cuando vea los resultados en la base de datos de Marketo Engage, el corazón le da un vuelco. No se preocupe. Permítame mostrarle cómo puede corregir rápidamente una importación de lista incorrecta con un método eficaz como la API REST.
- Caso de uso 3: Convertir la información extraída en acciones de ventas: ¿Cuántas veces le ha preguntado alguien del departamento de ventas: "¿Por qué este posible cliente es un MQL? ¿En qué temas está interesada esta persona?" Para responder a estas preguntas, debe profundizar en el registro de actividad para identificar por qué una persona cumple los requisitos de MQL. En la sección de demostración que aparece a continuación, aprenderá a automatizar este proceso de conversión de datos mediante la API REST.
Abróchense los cinturones y prepárense para ver cómo utilizo la API REST en estos escenarios comerciales.
Caso de uso 1: Optimizar la creación de campañas
Marketo Engage es una potente herramienta para escalar las operaciones de marketing, con plantillas y tokens que permiten optimizar los procesos. Pero seamos sinceros, aún implica mucho trabajo manual. Si trabaja en operaciones de marketing, probablemente dedique una gran cantidad de tiempo a clonar programas, actualizar tokens y activar campañas inteligentes.
Si gestiona solo unas pocas campañas a la semana, es posible que pueda seguir el ritmo. Pero si gestiona docenas o incluso cientos de campañas, hacer todo manualmente no resulta práctico. Surgen errores y garantizar la coherencia de las campañas se convierte en un auténtico desafío. Aquí es donde entra en acción la API REST de Marketo Engage. Al automatizar las tareas repetitivas, puede ahorrar tiempo, reducir los errores y mantener la coherencia en todos los esfuerzos de marketing.
Con la API REST, puede clonar rápidamente programas enteros manteniendo todo estructurado y uniforme. Incluso los profesionales de Marketo Engage con más experiencia cometen errores. La automatización minimiza el riesgo y ayuda a mantener la integridad de los datos.
Este proceso aún permite personalizar las campañas para adaptarlas a sus necesidades de marketing. La API REST permite modificar elementos clave como los tokens, manteniendo en todo momento la coherencia de la estructura de la campaña.
Vea el siguiente vídeo de demostración, donde explico cómo utilizar los códigos de muestra proporcionados y ajustarlos según las necesidades de su organización.
Busque los códigos mostrados en el siguiente vídeo para su uso sin conexión en la sección "Códigos de muestra".
Caso de uso 2: Revertir cambios de datos no deseados
Supongamos este escenario: está hasta arriba de tareas cuando sus expertos en marketing solicitan urgentemente que cargue una lista de posibles clientes en Marketo Engage. Lo consigue hacer rápidamente y no tarda en oír a sus SDR diciendo que los datos están mal. Los cargos indicados no son correctos, los posibles clientes antiguos se han sobrescrito y todo es un desastre.
Este es un escenario de pesadilla para cualquier profesional de operaciones de marketing. La corrección manual de estos errores puede tardar horas, si no días. Pero no se preocupe, la API REST de Marketo Engage tiene una solución: es como una máquina del tiempo para sus datos, ya que permite rastrear y revertir cambios no deseados sin esfuerzo.
Con la API REST, puede extraer un registro de los cambios recientes en el valor de los datos, identificar las actualizaciones incorrectas y restaurar la información original en solo unos pasos. En lugar de tener que limpiar los errores de datos manualmente, puede automatizar el proceso de reversión y asegurarse de que la base de datos siga siendo precisa y fiable.
En el siguiente vídeo, vamos a explorar cómo puede utilizar la API REST para revertir las importaciones de datos incorrectas y mantener la instancia de Marketo Engage limpia y libre de errores.
Busque los códigos mostrados en el siguiente vídeo para su uso sin conexión en la sección "Códigos de muestra".
Caso de uso 3: Convertir la información extraída en acciones de ventas
Para los equipos de ventas, el contexto lo es todo, especialmente a la hora de comprender por qué un posible cliente se convierte en un posible cliente cualificado de marketing (MQL). No obstante, con demasiada frecuencia, los datos detrás de esa calificación están enterrados en capas de métricas de participación, lo que hace que los representantes de ventas necesiten mucho tiempo para recopilar la historia de una persona por su cuenta.
Aquí es donde entra en juego la automatización para agilizarlo. Al integrar Marketo Engage con IA, puede transformar los datos de participación en información clara y procesable que ayude a los equipos de ventas a centrarse en lo que realmente importa: cerrar acuerdos.
Con la API REST de Marketo Engage, puede extraer actividades de participación recientes, procesarlas mediante IA generativa para generar un resumen conciso y volver a insertar ese resumen en Marketo Engage para darle visibilidad. Esto significa que los representantes de ventas ya no tienen que revisar los registros de actividad de una persona para comprender cómo un posible cliente se ha convertido en un MQL. En su lugar, recibe una explicación simple generada por IA del recorrido del posible cliente. El resumen incluye en qué productos o servicios han mostrado interés y las acciones clave que han realizado con su marca.
Al proporcionar al equipo de ventas acceso instantáneo a esta información en Salesforce, pueden abordar las conversaciones con confianza, personalizar su alcance y, en última instancia, cerrar más acuerdos en menos tiempo.
Este caso de uso está indicado para utilizar la API REST cuando un posible cliente se convierte en un MQL. Por lo tanto, se ejecuta para un solo posible cliente cada vez. Si desea aplicar este método para un lote más grande de posibles clientes, la API por lotes será la mejor opción.
Vamos a ver el siguiente vídeo para descubrir cómo funciona esta configuración en la práctica.
Busque los códigos mostrados en el siguiente vídeo para su uso sin conexión en la sección "Códigos de muestra".
Puntos clave
Con esto, finaliza el tema sobre cómo optimizar las tareas de operaciones de marketing con las API REST de Marketo Engage.
He descrito tres casos de uso sólidos en los que se pueden utilizar las API REST:
- Automatización de la clonación de campañas para reducir el trabajo manual y garantizar la coherencia.
- Rastrear y revertir cambios de datos no deseados para ahorrar horas de tiempo de limpieza.
- Proporcionar a los equipos de ventas información instantánea sobre los MQL para permitir conversaciones de seguimiento más eficaces.
Estas técnicas de automatización no se limitan a ahorrar tiempo, sino que ayudan a garantizar la precisión, mantienen la integridad de los datos y permiten que los equipos de marketing y ventas trabajen de forma más inteligente.
Puede ser abrumador ver tantas posibilidades de uso de la API REST, por lo que tengo algunos consejos:
- Empiece poco a poco. Pruebe primero algo sencillo. Cree su primera llamada de API y obtenga los resultados. Esta primera llamada le ayudará a motivarse con todo lo que puede hacer. ¡Imagínese creando su primer programa!
- ¡Aprenda a codificar y no se asuste! Programar es más fácil de lo que parece. Muchas veces, es como escribir en un inglés extraño. Personalmente, prefiero Python. Puede encontrar grandes cursos de Python en línea para inscribirse y aprender.
- Mantenga el contacto con la comunidad. Hay muchos expertos en API de Marketo Engage que se dedican a compartir sus conocimientos. Muchas veces, incluso podrá encontrar su código completo en línea.
Si le ha resultado útil este artículo, asegúrese de consultar Adobe Experience League para obtener más información y ver prácticas recomendadas de sus homólogos. ¡Gracias por su tiempo y mucha suerte con la automación!
Códigos de muestra
Optimizar la creación de campañas
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
Revertir cambios de datos no deseados
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'])
Convertir la información extraída en acciones de ventas
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