Like getLead, this operation retrieves lead records from Marketo. Instead of data for a single lead, this call returns data for a batch of leads which match the criteria passed into the leadSelector parameter. The criteria can be a date range, such as the last updated date; an array of lead keys; or a static list.
Note: If you use an array of lead keys, you will be limited to 100 per batch; additional keys will be ignored.
If only a subset of the lead fields are required, the includeAttributes parameter should be used to specify the desired fields.
Each getMultipleLeads function call will return up to 1000 leads. If you need to retrieve more than 1000 leads, the result will return a stream position, which can be used in subsequent calls to retrieve the next batch of 1000 leads. The remaining count in the result tells you exactly how many leads remain. When fetching from a static list, the terminating condition is remainingCount == 0.
A common use case for this endpoint is to find leads that were updated on specific dates. The LastUpdateAtSelector lets you do this. Please see the “Find Leads Updated on Specific Date Ranges” article on the Marketo developer blog that describes how to do this.
Request
Field Name |
Required/Optional |
Description |
---|---|---|
leadSelector | Required | Can be one of the following 3 types:
|
LeadKeySelector: leadSelector->
keyType |
Required | The id type you wish to query. Values include IDNUM, COOKIE, EMAIL, LEADOWNEREMAIL, SFDCACCOUNTID, SFDCCONTACTID, SFDCLEADID, SFDCLEADOWNERID, SFDCOPPTYID. |
LeadKeySelector: leadSelector->
keyValues->stringItem |
Required | List of key values. i.e. “lead@email.com” |
LastUpdateAtSelector: leadSelector->oldestUpdatedAt | Required | The timestamp to specify the “since” criteria. i.e. Return all leads updated since the specified time. (W3C WSDL date-time format) |
LastUpdateAtSelector: leadSelector->latestUpdatedAt | Optional | The timestamp to specify the “until” criteria. i.e. Return all leads updated up until the specified time. (W3C WSDL date-time format) |
StaticListSelector: leadSelector->staticListName | Optional when leadSelector->staticListId is present | The name of the static list |
StaticListSelector: leadSelector->staticListId | Optional when leadSelector->staticListName is present | The ID of the static list |
lastUpdatedAt | Deprecated | Use LastUpdateAtSelector instead |
includeAttributes | Optional | List of attributes you wish to fetch. Limiting the lead fields returned can improve the response time of the API. |
batchSize | Optional | Maximum number of records to be returned. System will limit to 100 or batchSize, whichever is less |
streamPosition | Optional | Used to paginate through large number lead responses. The streamPosition value is returned by the previous calls response field newStreamPosition |
Request XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.marketo.com/mktows/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Header> <ns1:AuthenticationHeader> <mktowsUserId>demo17_1_809934544BFABAE58E5D27</mktowsUserId> <requestSignature>146ec93f4f1e2a45f7a545f7e42e2d053c0457e7</requestSignature> <requestTimestamp>2013-08-02T15:47:06-07:00</requestTimestamp> </ns1:AuthenticationHeader> </SOAP-ENV:Header> <SOAP-ENV:Body> <ns1:paramsGetMultipleLeads> <leadSelector xsi:type="ns1:LeadKeySelector"> <keyType>EMAIL</keyType> <keyValues> <stringItem>formtest1@marketo.com</stringItem> <stringItem>joe@marketo.com</stringItem> </keyValues> </leadSelector> <batchSize>100</batchSize> </ns1:paramsGetMultipleLeads> </SOAP-ENV:Body> </SOAP-ENV:Envelope> |
Response XML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns1="http://www.marketo.com/mktows/"> <SOAP-ENV:Body> <ns1:successGetMultipleLeads> <result> <returnCount>2</returnCount> <remainingCount>0</remainingCount> <newStreamPosition /> <leadRecordList> <leadRecord> <Id>65835</Id> <Email>formtest1@marketo.com</Email> <ForeignSysPersonId xsi:nil="true" /> <ForeignSysType xsi:nil="true" /> <leadAttributeList> <attribute> <attrName>Company</attrName> <attrType>string</attrType> <attrValue>Marketo Test</attrValue> </attribute> <attribute> <attrName>FirstName</attrName> <attrType>string</attrType> <attrValue>FnameForm1</attrValue> </attribute> <attribute> <attrName>LastName</attrName> <attrType>string</attrType> <attrValue>LnameForm1</attrValue> </attribute> <attribute> <attrName>LeadScore</attrName> <attrType>integer</attrType> <attrValue>16</attrValue> </attribute> <attribute> <attrName>Website</attrName> <attrType>url</attrType> <attrValue>marketo.com</attrValue> </attribute> </leadAttributeList> </leadRecord> <leadRecord> <Id>67508</Id> <Email>joe@marketo.com</Email> <ForeignSysPersonId xsi:nil="true" /> <ForeignSysType xsi:nil="true" /> <leadAttributeList> <attribute> <attrName>Company</attrName> <attrType>string</attrType> <attrValue>Marketo</attrValue> </attribute> <attribute> <attrName>Date_of_purchase</attrName> <attrType>date</attrType> <attrValue>2012-04-04</attrValue> </attribute> <attribute> <attrName>FirstName</attrName> <attrType>string</attrType> <attrValue>Joe</attrValue> </attribute> <attribute> <attrName>LastName</attrName> <attrType>string</attrType> <attrValue>Orante</attrValue> </attribute> <attribute> <attrName>LeadScore</attrName> <attrType>integer</attrType> <attrValue>11</attrValue> </attribute> </leadAttributeList> </leadRecord> </leadRecordList> </result> </ns1:successGetMultipleLeads> </SOAP-ENV:Body> </SOAP-ENV:Envelope> |
Sample Code – PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
<?php $debug = true; $marketoSoapEndPoint = ""; // CHANGE ME $marketoUserId = ""; // CHANGE ME $marketoSecretKey = ""; // CHANGE ME $marketoNameSpace = "http://www.marketo.com/mktows/"; // Create Signature $dtzObj = new DateTimeZone("America/Los_Angeles"); $dtObj = new DateTime('now', $dtzObj); $timeStamp = $dtObj->format(DATE_W3C); $encryptString = $timeStamp . $marketoUserId; $signature = hash_hmac('sha1', $encryptString, $marketoSecretKey); // Create SOAP Header $attrs = new stdClass(); $attrs->mktowsUserId = $marketoUserId; $attrs->requestSignature = $signature; $attrs->requestTimestamp = $timeStamp; $authHdr = new SoapHeader($marketoNameSpace, 'AuthenticationHeader', $attrs); $options = array("connection_timeout" => 15, "location" => $marketoSoapEndPoint); if ($debug) { $options["trace"] = 1; } // Create Request /* //Query by Email $leadSel = new stdClass(); $leadSel->keyType = 'EMAIL'; $keyValues = array("formtest1@marketo.com", "joe@marketo.com"); $leadKeys = new stdClass(); $leadKeys->stringItem = $keyValues; $leadSel->keyValues = $leadKeys; $leadSelSoap = new stdClass(); $leadSelSoap = array("leadSelector" => $leadSel); // $leadSelParams = array("leadSelector" => $leadSelSoap, "batchSize" => 10, "streamPosition" => $startPosition); // $params = array("paramsGetMultipleLeads" => $leadSelParams); $leadSelSoap = new SoapVar($leadSel, SOAP_ENC_OBJECT, "LeadKeySelector", "http://www.marketo.com/mktows/"); */ /* // Query by Update time $leadSel = new stdClass(); $leadSel->latestUpdatedAt = "2013-08-06T15:45:00-07:00"; $leadSel->oldestUpdatedAt = "2013-08-06T12:00:00-07:00"; $leadSelSoap = new stdClass(); $leadSelSoap = array("leadSelector" => $leadSel); $leadSelSoap = new SoapVar($leadSel, SOAP_ENC_OBJECT, "LastUpdateAtSelector", "http://www.marketo.com/mktows/"); */ // Query from a Static List $leadSel = new stdClass(); //ProgramName.ListName $leadSel->staticListName = "SMSProgram.listForTesting"; $leadSelSoap = new stdClass(); $leadSelSoap = array("leadSelector" => $leadSel); $leadSelSoap = new SoapVar($leadSel, SOAP_ENC_OBJECT, "StaticListSelector", "http://www.marketo.com/mktows/"); $params->leadSelector = $leadSelSoap; $params->streamPosition = $startPosition; $params->batchSize = 100; $soapClient = new SoapClient($marketoSoapEndPoint ."?WSDL", $options); try { $leads = $soapClient->__soapCall('getMultipleLeads', array($params), $options, $authHdr); } catch(Exception $ex) { var_dump($ex); } if ($debug) { print "RAW request:\n" .$soapClient->__getLastRequest() ."\n"; print "RAW response:\n" .$soapClient->__getLastResponse() ."\n"; } ?> |
Sample Code – Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
import com.marketo.mktows.*; import java.net.URL; import javax.xml.namespace.QName; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.GregorianCalendar; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Hex; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.Marshaller; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; public class GetMultipleLeads { public static void main(String[] args) { System.out.println("Executing GetMultipleLeads"); try { URL marketoSoapEndPoint = new URL("CHANGE ME" + "?WSDL"); String marketoUserId = "CHANGE ME"; String marketoSecretKey = "CHANGE ME"; QName serviceName = new QName("http://www.marketo.com/mktows/", "MktMktowsApiService"); MktMktowsApiService service = new MktMktowsApiService(marketoSoapEndPoint, serviceName); MktowsPort port = service.getMktowsApiSoapPort(); // Create Signature DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); String text = df.format(new Date()); String requestTimestamp = text.substring(0, 22) + ":" + text.substring(22); String encryptString = requestTimestamp + marketoUserId ; SecretKeySpec secretKey = new SecretKeySpec(marketoSecretKey.getBytes(), "HmacSHA1"); Mac mac = Mac.getInstance("HmacSHA1"); mac.init(secretKey); byte[] rawHmac = mac.doFinal(encryptString.getBytes()); char[] hexChars = Hex.encodeHex(rawHmac); String signature = new String(hexChars); // Set Authentication Header AuthenticationHeader header = new AuthenticationHeader(); header.setMktowsUserId(marketoUserId); header.setRequestTimestamp(requestTimestamp); header.setRequestSignature(signature); // Create Request ParamsGetMultipleLeads request = new ParamsGetMultipleLeads(); // Request Using LeadKey Selector //////////////////////////////////////////////////////// LeadKeySelector keySelector = new LeadKeySelector(); keySelector.setKeyType(LeadKeyRef.EMAIL); ArrayOfString aos = new ArrayOfString(); aos.getStringItems().add("formtest1@marketo.com"); aos.getStringItems().add("joe@marketo.com"); keySelector.setKeyValues(aos); request.setLeadSelector(keySelector); /* // Request Using LastUpdateAtSelector //////////////////////////////////////////////////////// LastUpdateAtSelector leadSelector = new LastUpdateAtSelector(); GregorianCalendar gc = new GregorianCalendar(); gc.setTimeInMillis(new Date().getTime()); gc.add( GregorianCalendar.DAY_OF_YEAR, -2); DatatypeFactory factory = DatatypeFactory.newInstance(); ObjectFactory objectFactory = new ObjectFactory(); JAXBElement<XMLGregorianCalendar> until =objectFactory.createLastUpdateAtSelectorLatestUpdatedAt(factory.newXMLGregorianCalendar(gc)); GregorianCalendar since = new GregorianCalendar(); since.setTimeInMillis(new Date().getTime()); since.add( GregorianCalendar.DAY_OF_YEAR, -5); leadSelector.setOldestUpdatedAt(factory.newXMLGregorianCalendar(since)); leadSelector.setLatestUpdatedAt(until); request.setLeadSelector(leadSelector); */ /* // Request Using StaticList Selector //////////////////////////////////////////////////////// StaticListSelector staticListSelector = new StaticListSelector(); //staticListSelector.setStaticListId(value) ObjectFactory objectFactory = new ObjectFactory(); JAXBElement<String> listName = objectFactory.createStaticListSelectorStaticListName("SMSProgram.listForTesting"); staticListSelector.setStaticListName(listName); // JAXBElement<Integer> listId = objectFactory.createStaticListSelectorStaticListId(6926); // staticListSelector.setStaticListId(listId); request.setLeadSelector(staticListSelector); */ ArrayOfString attributes = new ArrayOfString(); attributes.getStringItems().add("FirstName"); attributes.getStringItems().add("AnonymousIP"); attributes.getStringItems().add("Company"); request.setIncludeAttributes(attributes); JAXBElement<Integer> batchSize = new ObjectFactory().createParamsGetMultipleLeadsBatchSize(10); request.setBatchSize(batchSize); SuccessGetMultipleLeads result = port.getMultipleLeads(request, header); JAXBContext context = JAXBContext.newInstance(SuccessGetLead.class); Marshaller m = context.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); m.marshal(result, System.out); } catch(Exception e) { e.printStackTrace(); } } } |
Sample Code – Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
require 'savon' # Use version 2.0 Savon gem require 'date' mktowsUserId = "" # CHANGE ME marketoSecretKey = "" # CHANGE ME marketoSoapEndPoint = "" # CHANGE ME marketoNameSpace = "http://www.marketo.com/mktows/" #Create Signature Timestamp = DateTime.now requestTimestamp = Timestamp.to_s encryptString = requestTimestamp + mktowsUserId digest = OpenSSL::Digest.new('sha1') hashedsignature = OpenSSL::HMAC.hexdigest(digest, marketoSecretKey, encryptString) requestSignature = hashedsignature.to_s #Create SOAP Header headers = { 'ns1:AuthenticationHeader' => { "mktowsUserId" => mktowsUserId, "requestSignature" => requestSignature, "requestTimestamp" => requestTimestamp } } client = Savon.client(wsdl: 'http://app.marketo.com/soap/mktows/2_3?WSDL', soap_header: headers, endpoint: marketoSoapEndPoint, open_timeout: 90, read_timeout: 90, namespace_identifier: :ns1, env_namespace: 'SOAP-ENV') #Create Request request = { :lead_selector => { :key_type => "EMAIL", :key_values => { :string_item => ["formtest1@marketo.com", "joe@marketo.com"] } }, :batch_size => "100" } response = client.call(:get_multiple_leads, message: request) puts response |