Knowledgebase

Sort by:
Issue Description You need to revert a data value change for a field on multiple leads. Issue Resolution There is no way through the UI to "undo" a data value change (unless it was a boolean field, in which case there are only two possible values.) You can certainly use a Smart List to identify whose values have changed, but there no way to go back to the old value (unless it's stored elsewhere in another field or through another data store, along with the API). However, you can use the API to extract the data value change activity from the activity log, which would include the old and new values, extract the original values, then use the API to rewrite the old values back to the lead record. http://developers.marketo.com/rest-api/endpoint-reference/lead-database-endpoint-reference/#!/Activities/getLeadChangesU… Is this article helpful ? YesNo
View full article
Issue: I am looking for the ID to one of my campaigns for a SOAP API project I am working on. Solution: The ID can be found in the URL of the campaign. 1.1 Log into Marketo, under Marketing Activities, find and select the campaign in question. This is a article attached image 1.2 The URL to the campaign will look something like: This is a article attached image   The Campaign ID is between "SC" and "A", in the above example it's "1150". This is a article attached image  
View full article
Issue When retrieving result sets from the /rest/v1/activities.json end-point using a Paging Token, the result set returned by the API appears to be less data than what is in the Marketo UI. In this scenario, we're going to explore how and why Paging Tokens work when utilizing them in REST API calls. SCENARIO Say we wanted to grab all 'Send Email' activities (activityType = 6) that have occurred since 2024-04-12T12:00:00Z, and we're planning to pull these activities every two hours, and increment our paging token every two hours prior to making the /activities.json call to obtain the latest data. Current Time Apr 12, 2024, 8:00:00 AM (MST) == 2024-04-12T14:00:00Z What We Want 1. Retrieve all Send Email activities SINCE  Apr 12, 2024, 6:00:00 AM (MST) == 2024-04-12T12:00:00Z We would start by retrieving our Paging Token with the sinceDateTime parameter = 2024-04-12T12:00:00Z: /rest/v1/activities/pagingtoken.json?sinceDatetime=2024-04-12T12:00:00Z Our response would contain the nextPageToken representing the sinceDateTime: { "requestId": "1607c#14884f3e74e", "success": true, "nextPageToken": "RW6ZK46LKV36BMJ2QARX3BFZHQNHRVPPEW4IZVEELI45V2OH6RCA====" } We would then pass that nextPageToken into our GET /rest/v1/activities.json end-point, as well as our activityTypeId = 6 to target all 'Send Email' activities that have occurred since 2024-04-12T12:00:00Z. /rest/v1/activities.json?nextPageToken=RW6ZK46LKV36BMJ2QARX3BFZHQNHRVPPEW4IZVEELI45V2OH6RCA====&activityTypeIds=6 After paging through all of the results (now leveraging the returned nextPageToken from the /activities.json end-point to page through all results), we've returned 15,000 Send Email activities.      PROBLEM We know that, from our Marketing team, that we were expecting ~20,000 email sends since 2024-04-12T12:00:00Z. So why does the result set appear to be missing 5,000 records? Let's examine this further. 'Send Email' activities aren't committed to the Marketo database until the message has successfully been sent from our mail servers. Prior to that, the email is queued, awaiting it's launch to it's receiving mail server. This can present a delay from the time the email is sent, to when the activity is recorded to the Marketo database. For example, say there were two campaigns sending 10K emails each: First Campaign Send: 2024-04-12T12:30:00Z (30 minutes after our sinceDateTime token) Second Campaign Send: 2024-04-12T13:45:00Z (110 minutes after our sinceDateTime token, 10 minutes prior to when the call was made) While the first campaign send is most likely accounted for in the database (Send Email activities have been committed), Campaign #2 is still processing and sending out all 10K emails in the background. For this scenario, Marketo has only committed 5K out of 10K email sends to the database at the time the call was made. Without noticing the missing data, you repeat this process two hours from now, incrementing your sinceDateTime token by two hours as well, assuming you'll get all the new Send Email activities for the past two hours. This would now lead to you missing the 5K Send Email activities that were still being processed, but not yet committed to the database. SOLUTION The nextPagingToken returned in the /activities.json end-point is position based, and can only pull data that has been committed to the Marketo database, which inherently changes as records are being processed. If, for instance, you made the original /activities.json call at (Apr 12, 2024, 8:00:00 AM (MST) == 2024-04-12T14:00:00Z), and used the same sinceDateTime token 5-10 minutes later (Apr 12, 2024, 8:10:00 AM (MST)), you would now notice that campaign #2 has fully finished it's processing AND committed the 'Send Email' activities to the Marketo database with dateTime stamps less than Apr 12, 2024, 8:00:00 AM (MST). So, what's the best way to ensure you're retrieving all the data? Solution #1 Increment your sinceDateTime token based on the MAX(created_at) dateTime returned in the latest result set, rather than incrementing it based on an interval (every two hours). This would help ensure you're not missing records that were processing, but not yet committed to the Marketo database. Solution #2 If the data you're retrieving does not need to be live, we would recommend using the Bulk Extract API to pull this data at a lower frequency (such as twice per day 12AM & 12PM). This would greatly decrease the chances of missing records that weren't committed to the database.
View full article
Summary This article explains why certain Company fields show up on the Person/Lead Object when you do a describe API call to Marketo. Issue When making the Describe call on the Lead object in Marketo (/rest/v1/leads/describe.json),  several Company object fields are returned along with the Lead object fields.   Environment Marketo REST API Solution This is expected behavior. Users can utilize the Describe Leads call to retrieve a full list of the fields available for interaction via the REST API. Several areas within Marketo treat custom Company fields as though they were on the Person/Lead object. For example if you were doing a Bulk Import, you can target the Company and Person/Lead fields and you have the ability to update Company field values as if you were changing it manually on a Person record in the UI.   Root Cause This is expected behavior, due to how the Describe call retrieves all 
View full article
Issue Customers may run into limitations with Webhook providers or other third party REST services that require their fields are an integer type field.  This may present issues with those values being inputted to Marketo (and other systems) accurately if a record has a value outside of the integer value limitation range: -2147483647 to 2147483647   Environment Marketo/Third Party REST/Webhook Providers Solution There is no way to increase/modify the integer value limitations on the Marketo side.  This is not a Marketo product limitation, it's the defined constraints of Integer data types. If you're running into issues with values from a third party/webhook provider falling outside of the limitation range, this will present issues with the field value being accurately logged in Marketo. In this scenario, it's worth checking with the third party/webhook provider to see if they have any flexibility around which field types they can allow (for example, String or Float type fields have less limitations and will allow for larger or smaller numbers outside of the -2147483647 to 2147483647 range). For a full overview of Marketo field limitations, you can visit the below article: Marketo Field Limits by Field Type
View full article
Issue When using the [mktorest.com/rest/asset/v1/emailTemplates.json] end-point to pull all Email templates, the COUNT is much less than what is shown in Marketo's Design Studio Global Search.   Solution This is the expected behavior. When viewing the total count of Email templates in the Design Studio UI, it will count EACH shared template that is shared across other workspaces, counting the same template multiple times depending on how many workspaces it's shared to. However, when retrieving the Email Templates from the REST API, it will only return DISTINCT Email Template ID's from the originating shared workspace where the template resides. It will not return the templates from the shared workspaces. Root Cause REST API Expected Behavior
View full article
Issue Executing a GET API call to retrieve a list of available activity types in the target instance using the '/rest/v1/activities/types.json' endpoint, resolves with an unexpected attribute name for a field with the display name ID in the context of Marketo Custom Objects. An example of that may be a Marketo Custom Object with the following name: '3 to be', as can be shown in the image below: One of the '3 to be' Marketo custom object fields name is 'ID'. (highlighted in red). When performing a GET API call using the '/rest/v1/activities/types.json' endpoint, you will be getting a list of available activity types in the target instance, along with associated metadata of each type, however for a Marketo custom object with an ID field name, you may see it returns back with a slightly different name, in this case, it would be returning the following output for my test Marketo Custom Object activity: { "id": 100019, "name": "Add to 3 to be", "primaryAttribute": { "name": "3 to be ObjRef", "dataType": "integer" }, "attributes": [ { "name": "3 To Be Person Id", "dataType": "integer" }, { "name": "ID (3)", "dataType": "string" }, { "name": "Linkfield4", "dataType": "string" } ] } ], Here's an image of what it may look like when making the call using POSTMAN: In fact, the character in the brackets next to the ID field represents the very first character of your Marketo Custom Object name.    Environment Customers who have Marketo Custom Objects where one of the custom object fields is named 'ID'. Solution If this is interrupting your business, you may want to select a different name for the ID field under your Marketo Custom Object. (ie. ID number, Transaction ID etc.) Root Cause This behavior is expected and is a result of the 'ID' field being a unique field in the context of Marketo custom objects world and while it may be possible to create a Marketo Custom Object field with the name 'ID', it may be better to give it a distinct name that will be better describing what kind of ID field it is.   
View full article
Issue Per our developer page: https://developers.marketo.com/rest-api/assets/programs/#update, it is possible to update tags on your existing program When updating a program tag within an existing program, you may encounter an error below given the tag and its values are correct.  {"code": "709","message": "Required tags are mandatory"}]} Environment Any API clients when performing the Web Service API Solution The workaround is to have the tag updated via the UI. Root Cause "Updating tags is a destructive operation." Any attempt to update the tags of a program must include valid values for all of the required tags for a program. Unless the 'specific' tag type you are working on is the only required tag type in the instance, then that is possible to update it using the API. Otherwise, you'll encounter the error above as it is a system behaviour.
View full article
Summary Estimating the external storage requirements for your Marketo Engage Database Issue I want to extract all of my data from Marketo Engage and store it. How much storage space will I need? Environment Marketo Engage and External Systems Solution Summary There is no repeatable method to accurately estimate the amount of storage you will need to extract and store your Marketo Engage database. Standing in the way of good estimation is data availability, field selection, and storage method. Any accurate estimate will take into account the potential sizes of each type of data and their quantities (known to data scientists as "facts and dimensions"). Determining ranges for these values takes a lot of preparation and may require a high level of skill. IMPORTANT NOTE: Estimating Database size is hard so any estimate used to make business decisions should be made in cooperation with a database or application architect or other qualified professional. Scope Some information won't be extracted. Information about anonymous leads, for example, cannot be extracted. Some of the data that can be extracted may not be needed at all. Selecting the right data for your needs is the best practice as it reduces the required storage and leads to a more efficient extraction process. Field Definitions How the fields are defined in the target system will affect how big the stored data is. Depending on your storage format, padding may play a role in the size of your extracted database. As an example, the "Country" field in Marketo is a string of up to 255 characters. You could chose to store 255 characters for every country value. Or you may choose a format that uses a variable amount of space. You might also know that the longest country name is "the United Kingdom of Great Britain and Northern Ireland" meaning that 199 of those characters will always be extra so you truncate the value from Marketo storing the first 56 characters only. Each choice will have an impact on the size of your extracted database. Estimating 199 unnecessary characters per lead and making similar decisions for other fields will add up to increased storage requirements and slower extraction time. Format Once the desired data is identified, the next step is to extract, transform and load (ETL) the data from Marketo Engage into your storage system. The data returned by Marketo's API is plain old text which is usually formatted as JSON or CSV. For the information to be useful, you will transform it from JSON into the format necessary for your storage system. That format could be an Excel spreadsheet, Microsoft SQL database or a schema-agnostic database like Azure Cosmos DB. How the data is formatted and encoded will make a big difference in the amount of storage needed. Take this simple example: a Microsoft Excel spreadsheet with "Marketo Engage" in cell A1. I saved that same file in four different formats which resulted in files ranging from 1 KB to 25 KB. The format you store you information in may have a bigger impact on your final storage requirement than the data itself. This is a article attached image   To help illustrate the impact of the storage system, take a look at this guide for Microsoft SQL Database size estimation: https://docs.microsoft.com/en-us/sql/relational-databases/databases/estimate-the-size-of-a-database  Functionalization Once you've extracted your data, what are you going to do with it? Archiving your data (simply storing it) is easiest and comes with the fewest contraints. A compressed archive (Zip file) will save dramatically on storage space at the cost of functionality and ease of use. Functionalizing your data (using it in an application) requires more: at least better speed and searchability: typically a relational database. An application will often require additional data and that will need to be accounted for too. Facts and Dimensions: Do the Math It's a lot of work to get to this stage. Once you've determined how your extracted data will be stored, you can set upper and lower bounds on the sizes for each object type extracted (lead, email, activity, etc). These are your facts. Then multiply those values by the number of each type of record. These are your dimensions. Add to that the overhead of your target storage system and its functional requirements to generate your final estimates.    
View full article
Summary Creating many-to-many relationships with Marketo custom objects requires an intermediary object with one link to a Lead or Company and another link to a secondary custom object. Here's how to solve the problem of the secondary custom object not showing up to be selected as the linked object. Issue Creating a many-to-many or N:N custom object structure such that a lead or company can be associated with multiple custom objects and a custom object can be associated with multiple leads or companies at the same time. When adding a link to the secondary custom object, that secondary object is not list as an available linked object.     Solution If you find that the custom object you'd like to link to is not list in the "Link Object" list, there are two things two check: The secondary CO must be approved. The secondary CO must not have any link type fields. Since it's not possible to change a link field once a custom object is approved, if you already have link fields, the only solution is discard the secondary custom object and create a new one. Recreate the custom object without link fields. Then, in the intermediary object, the target object will show up as an available link object.  More detail can be found at:  Understanding Marketo Custom Objects Add Marketo Custom Object Link Fields - Create a Link Field for a Many-to-Many Structure Root Cause The secondary custom object type is not approved. - or - The secondary custom object type is approved type and has link fields. Environment Marketo Custom Objects Many to Many Relationship - N:N Link Fields
View full article
Note: Once you have migrated to Admin Console, you can manage your support cases through the feature provided in the Admin Console Platform. To learn more, visit: https://experienceleague.adobe.com/docs/customer-one/using/home.html. Once you have submitted a case to Marketo support, we provide a simple way of staying connected to your case and the cases submitted from your company through the Marketo Support Portal. You can access the support portal through your Marketo instance by selecting Community in the top right corner: This is a article attached image You can also access the support portal directly at https://support.marketo.com and login with your Marketo credentials (login and password). This will not work for users with SSO.   Once you are in the support portal you can Create a Case for Marketo Support or you can also review any cases that are open and being worked on by support or review your case history. Navigate to My Case management: This is a article attached image From the My Cases navigation you can access the following case views: This is a article attached image My Recent Cases* - Cases that you have opened in the past 30 days All Company Recent Cases* - Cases that any authorized support contact has opened in the past 30 days My Open Cases – Cases created by you that are being triaged by Support and pending Support’s response and are more than 30 days old My Closed Cases – Cases that were created by you and are now closed My Awaiting Fix Cases – Cases that were created by you where Marketo is developing a fix which will be implemented at a later date All Company Closed Cases – Cases that were created by you or your colleagues that are now closed All Company Open Cases - All open cases submitted for the account Company Awaiting Fix Cases – Cases that were created by you or your colleagues where Marketo is developing a fix which will be implemented at a later date Management Escalations - Escalations opened by you or your colleagues  Survey Cases - Surveys that are available for you to fill out after a case is closed *Cases that have been opened for more than 30 days will move from Recent cases to Open cases   To view specific case details, click a case number. This is a article attached image From the Case Details, you can perform the following: Close your Case - Select the "My Case is Resolved" button to close your case Add Comments - Provide additional comments to support or respond to a Support question Add Attachment - Provide any screenshots or documents that will help illustrate the issue you are reporting   If your case has been closed there are two options available to you.   Reopen - You can reopen your case if you are not satisfied with the case resolution by adding a comment in the case. Case Survey - Once your case has closed, please consider offering feedback on the level of Support you received.
View full article
Issue When I go to the Support area of Nation, I do not have full access to all the areas and tools.   Solution Our system is specific about how you need to access the Support Portal before we can authorize you to use it. The proper steps to take for us to authorize, and for you to submit cases, are as follows:   Log into your instance Click the Community tile (step 1 image) Click Support in the top banner (step 2 image) Click Submit a Case option (step 3 image) Choose from top options depending on what you need to do (step 4 image) Create a case, Manage authorized contacts, edit your Info   Simply going straight to the nation.marketo.com will not have the desired result. You must access the Support Portal from your instance by using these steps so that our system recognizes you properly. If this is your first time following these steps, your view of Step 3 will be different- not to worry, as that will be updated for you manually. Step 1 Step 2   Step 3 Step 4   If you experience issues, please email marketocares@marketo.com
View full article
Issue Issue Description When a lead is created through an API call, the Reason and Source attributes say "Web Service API" with no further detail.       Solution Issue Resolution As described in the doc here, https://docs.marketo.com/display/DOCS/Understanding+System+Managed+Fields, "Source" and "Reason" fields are managed by Marketo: Web Service API for Original Source Type means Person was discovered by a web service API. For Registration Source Type, it states that Person was created via SOAP/REST API When a lead is created via API, no additional "Source" or "Reason" is provided to Marketo. A possible workaround is to create a custom field and populate it as needed through the API.    
View full article
Issue Issue Description API Only user is not appearing when creating a service in [Admin > LaunchPoint]     Solution Issue Resolution It is highly likely that the reason why the API user was not appearing because it did not have "API Only" ticked. This can be checked in [Admin > Users & Roles > User > Edit User]. However, this cannot be modified once the API user is created, so in order for the API user to appear in LaunchPoint, "API Only" must be ticked when the API user is created.    Reference: Create an API Only User Role   Who This Solution Applies To Admin users
View full article
Issue When making API calls, Marketo reports the daily API limit has been reached but does not show when the limit resets.   Solution When Marketo shows the daily API limit has been reached, it will reset itself that night at midnight central time, and then will allow for the API calls to resume. These are the reset times according to US time zones.   10:00 PM Pacific 11:00 PM Mountain 12:00 AM Central 01:00 AM Eastern      
View full article
Issue Do webhook calls contribute to the daily API limit/quota visible in [Admin > Integration > Web Services > API Call Information] ?   Solution No, webhook calls are not counted as part of the daily API limit. Webhooks do not have any execution limits.  
View full article
Issue REST API call, Get Lead Activities, is returning 603 error     Solution Error 603 refers to 'access denied' where authentication is successful but the user doesn’t have sufficient permission to call this API. Additional permissions may need to be assigned to the user role. http://developers.marketo.com/rest-api/error-codes/ Go to Admin > Users and Roles Select API User and identify what role it is assigned to (e.g. API role) Go to Roles and check the permissions assigned to the API role Check to see if the API role has 'Read-Only Activity' or 'Read-Write Activity' permission In order to make a Get Lead Activities REST API call with the API user, the API role of the user must be modified to have permissions to  'Read-Only Activity' or 'Read-Write Activity'. If you use Workspaces and Partitions, make sure the API User has the necessary access to the workspaces/partitions being called.    
View full article
Issue The Get Lead Activities REST API is not returning any activities even though the lead referenced definitely has multiple activities of the type being called. REQUEST: https://[munchkinID].mktorest.com/rest/v1/activities.json?access_token=x&leadIds=123&nextPageToken=ABC&activityTypeIds=46 RESPONSE: { "requestId": "xyz123", "success": true, "nextPageToken": "ABC", "moreResult": true }     Solution The Get Lead Activity REST API are reliant on timestamps for their nextPageToken. Each Get Lead Activity call will go through 300 activities of ALL types from the timestamp placed on the nextPageToken. This is supported by the article http://developers.marketo.com/rest-api/endpoint-reference/lead-database-endpoint-reference/#/Activities/getLeadActivitiesUsingGET "By default, the endpoints mentioned in this section will return 300 activity items at a time.  If the moreResult attribute is true, this means that more results are available. Continue to call the endpoint until the moreResult attribute returns false, which means that there are no more results available." Based on that, the reason why the API call does not return any activities is that it does not find any activities of type 46 in the 300 activities it checks from the timestamp placed on the nextPageToken So when making a Get Lead Activity call for a specific activity type, ensure that nextPageToken is as close as to the timestamp of the specific activities    
View full article
Issue How to use the REST API to check for deleted leads. Solution You would need to use the specific endpoint This will pull a list of leads deleted within a specific timeframe.  Deletions older than 14 days may be pruned.      
View full article
Summary When submitting a file for bulk import via the REST API, the uploads appears to stall with no response. Issue Occasionally Bulk Import API calls will "hang" or "stall" never returning a response. This may appear to be a blank or missing response when the API is actually still waiting for the end of the file to be transferred. Solution You can add the following header: 'Transfer-Encoding: chunked' to your API calls and it will fix this issue. Please note that adding this header on the client side will cause cURL to send data in chunks. For more information on chunked file transfer, see Wikipedia: Chunked Transfer Encoding Environment REST API Bulk Import
View full article