Perform a Data Extract
This page contains information about performing a data extract using the SOAP API.
Why Perform a Data Extract
You can use a data extract to pull information from your Marketing Cloud account and place it in a file on an FTP site for use in a different system (such as a web analytics tool).
How to Perform a Tracking Data Extract Activity
Use the code below as a model to construct your own API call. Note that the ExtractRequest ID can be obtained by performing a Retrieve call on the ExtractDescription object. This call returns all possible IDs for the extracts available to your account.
Sample .NET Code
public void RequestDataExtract()
{
SoapClient framework = new SoapClient();
framework.ClientCredentials.UserName.UserName = "XXXX";
framework.ClientCredentials.UserName.Password = "XXXX";
ExtractRequest request = new ExtractRequest();
ExtractRequest[] requests = new ExtractRequest[1];
List<ExtractParameter> extractParameters = new List<ExtractParameter>();
ExtractParameter extractParam = null;
ExtractResult[] responses;
request = new ExtractRequest();
requests = new ExtractRequest[1];
extractParameters = new List<ExtractParameter>();
// This is a constant value used to identify the desired extract. This is required. This values is for "Tracking Extract"
request.ID = "c7219016-a7f0-4c72-8657-1ec12c28a0db";
extractParam = new ExtractParameter();
extractParam.Name = "StartDate";
extractParam.Value = Convert.ToDateTime("2009-09-12").ToString();
extractParameters.Add(extractParam);
DateTime endDateTime = Convert.ToDateTime("2009-09-18");
extractParam = new ExtractParameter();
extractParam.Name = "EndDate";
extractParam.Value = endDateTime.ToString();
extractParameters.Add(extractParam);
extractParam = new ExtractParameter();
extractParam.Name = "ExtractOpens";
extractParam.Value = "true"; // Get opens, set to false to not return opens
extractParameters.Add(extractParam);
extractParam = new ExtractParameter();
extractParam.Name = "ExtractClicks";
extractParam.Value = "true"; // Get clicks, set to false to not return clicks\
extractParameters.Add(extractParam);
extractParam = new ExtractParameter();
extractParam.Name = "ExtractSent";
extractParam.Value = "true"; // Get sent events, set to false to not return sent envents
extractParameters.Add(extractParam);
extractParam = new ExtractParameter();
extractParam.Name = "ExtractUnsubs";
extractParam.Value = "true"; // Get unsubscribes, set to false to not return unsubscribes.
extractParameters.Add(extractParam);
extractParam = new ExtractParameter();
extractParam.Name = "ExtractConversions";
extractParam.Value = "false"; // Get conversion events, set to false to not return conversions.
extractParameters.Add(extractParam);
extractParam = new ExtractParameter();
extractParam.Name = "ExtractSurveyResponses";
extractParam.Value = "false"; // Get survey respones, set to false to not return survey respones.
extractParameters.Add(extractParam);
extractParam = new ExtractParameter();
extractParam.Name = "ExtractBounces";
extractParam.Value = "true"; // Get bounces, set to false to not reutrn bounces.
extractParameters.Add(extractParam);
extractParam = new ExtractParameter();
extractParam.Name = "ExtractSubscribers";
extractParam.Value = "true"; // Get subscribers, set to false to not return subscribers.
extractParameters.Add(extractParam);
extractParam = new ExtractParameter();
extractParam.Name = "ExtractSendJobs";
extractParam.Value = "true"; // Get sends, set to false to not return sends
extractParameters.Add(extractParam);
extractParam = new ExtractParameter();
extractParam.Name = "QuoteText";
extractParam.Value = "true"; // Quote the text
extractParameters.Add(extractParam);
extractParam = new ExtractParameter();
extractParam.Name = "OutputFileName";
extractParam.Value = String.Format("tracking_test.zip");
extractParameters.Add(extractParam);
request.Parameters = extractParameters.ToArray();
requests[0] = request;
string requestID = String.Empty;
string overallResult = String.Empty;
overallResult = framework.Extract(requests, out requestID, out responses);
Console.WriteLine(String.Format("{0} - [{1}] {2}", overallResult, responses[0].ErrorCode, responses[0].ErrorCode));
}Sample PHP Code
<?php
require('exacttarget_soap_client.php');
$wsdl = 'https://YOUR_SUBDOMAIN.soap.marketingcloudapis.com/etframework.wsdl';
try{
/* Create the Soap Client */
$client = new Marketing CloudSoapClient($wsdl, array('trace'=>1));
/* Set username and password here */
$client->username = 'xxx';
$client->password = 'xxx';
$er = new Marketing Cloud_ExtractRequest();
$er->ID = "c7219016-a7f0-4c72-8657-1ec12c28a0db";
$er->Parameters = array();
$ep1 = new Marketing Cloud_APIProperty();
$ep1->Name = "StartDate";
$ep1->Value = "8/12/2010 12:00:00 AM";
$er->Parameters[] = $ep1;
$ep2 = new Marketing Cloud_APIProperty();
$ep2->Name = "EndDate";
$ep2->Value = "8/14/2010 12:00:00 AM";
$er->Parameters[] = $ep2;
$ep3 = new Marketing Cloud_APIProperty();
$ep3->Name = "ExtractSent";
$ep3->Value = "true";
$er->Parameters[] = $ep3;
$ep4 = new Marketing Cloud_APIProperty();
$ep4->Name = "OutputFileName";
$ep4->Value = "PHP data extract.zip";
$er->Parameters[] = $ep4;
$ep5 = new Marketing Cloud_APIProperty();
$ep5->Name = "Format";
$ep5->Value = "csv";
$er->Parameters[] = $ep5;
$er->Options = NULL;
$erm = new Marketing Cloud_ExtractRequestMsg();
$erm->Requests = array();
$erm->Requests[] = $er;
$results = $client->Extract($erm);
var_dump($results);
} catch (SoapFault $e) {
var_dump($e);
}
?>Sample Java Code (Axis 1.4)
public void testExtractDataFromETSystem() throws RemoteException {
Soap_PortType soap_portType = init();
ExtractRequest request = new ExtractRequest();
ArrayList<ExtractParameter> extractParameters = new ArrayList();
ExtractParameter extractParam = null;
extractParam = new ExtractParameter();
extractParam.setName("ExtractClicks");
extractParam.setValue("true");
extractParameters.add(extractParam);
extractParam = new ExtractParameter();
extractParam.setName("ExtractBounces");
extractParam.setValue("true");
extractParameters.add(extractParam);
extractParam = new ExtractParameter();
extractParam.setName("ExtractOpens");
extractParam.setValue("true");
extractParameters.add(extractParam);
extractParam = new ExtractParameter();
extractParam.setName("ExtractSubscribers");
extractParam.setValue("true");
extractParameters.add(extractParam);
String datePattern = "MM/dd/yyyy KK:mm a";
extractParam = new ExtractParameter();
extractParam.setName("StartDate");
Calendar start = Calendar.getInstance();
start.set(2008, 05, 01, 0, 0);
SimpleDateFormat dateFormat = new SimpleDateFormat(datePattern);
String cd1 = dateFormat.format(start.getTime());
extractParam.setValue(cd1);
extractParameters.add(extractParam);
extractParam = new ExtractParameter();
extractParam.setName("EndDate");
Calendar end = Calendar.getInstance();
end.set(2009, 05, 01, 0, 0);
String cd2 = dateFormat.format(end.getTime());
extractParam.setValue(cd2);
extractParameters.add(extractParam);
extractParam = new ExtractParameter();
extractParam.setName("OutputFileName");
extractParam.setValue("tracking_october08.zip");
extractParameters.add(extractParam);
ExtractParameter[] parameters = extractParameters.toArray(new ExtractParameter[extractParameters.size()]);
request.setParameters(parameters);
request.setOptions(new ExtractOptions());
request.setID("c7219016-a7f0-4c72-8657-1ec12c28a0db");
ExtractRequest[] requests = new ExtractRequest[]{request};
ExtractResponseMsg extractResult = soap_portType.extract(requests);
System.out.println("Resposne ::: " + extractResult.getOverallStatus());
}Sample SOAP Envelope
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Header>
<fueloauth>YOUR_ACCESS_TOKEN</fueloauth>
</Header>
<Body>
<ExtractRequestMsg xmlns="http://exacttarget.com/wsdl/partnerAPI">
<Requests>
<ID>c7219016-a7f0-4c72-8657-1ec12c28a0db</ID>
<Parameters>
<Parameter>
<Name>StartDate</Name>
<Value>10/26/2012 12:00:00 AM</Value>
</Parameter>
<Parameter>
<Name>EndDate</Name>
<Value>10/29/2015 12:00:00 AM</Value>
</Parameter>
<Parameter>
<Name>OutputFileName</Name>
<Value>ExampleTracking.zip</Value>
</Parameter>
<Parameter>
<Name>AccountIDs</Name>
<Value/>
</Parameter>
<Parameter>
<Name>Attributes</Name>
<Value/>
</Parameter>
<Parameter>
<Name>CharacterEncoding</Name>
<Value>Default</Value>
</Parameter>
<Parameter>
<Name>ColumnDelimiter</Name>
<Value>Default</Value>
</Parameter>
<Parameter>
<Name>ExtractAttributes</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>ExtractBounces</Name>
<Value>true</Value>
</Parameter>
<Parameter>
<Name>ExtractClickImpressions</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>ExtractClicks</Name>
<Value>true</Value>
</Parameter>
<Parameter>
<Name>ExtractConversions</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>extractListMembershipChanges</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>extractLists</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>ExtractNotSent</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>ExtractOpens</Name>
<Value>true</Value>
</Parameter>
<Parameter>
<Name>ExtractSendImpressions</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>ExtractSendJobImpressions</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>ExtractSendJobs</Name>
<Value>true</Value>
</Parameter>
<Parameter>
<Name>ExtractSent</Name>
<Value>true</Value>
</Parameter>
<Parameter>
<Name>extractStatusChanges</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>ExtractSubscribers</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>ExtractSurveyResponses</Name>
<Value>true</Value>
</Parameter>
<Parameter>
<Name>ExtractUnsubs</Name>
<Value>true</Value>
</Parameter>
<Parameter>
<Name>Format</Name>
<Value>csv</Value>
</Parameter>
<Parameter>
<Name>IncludeAllListMembers</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>IncludeAllSubscribers</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>IncludeInferredOpens</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>IncludeMilliseconds</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>IncludeTestSends</Name>
<Value>true</Value>
</Parameter>
<Parameter>
<Name>IncludeUnsubReason</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>QuoteText</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>SendIDs</Name>
<Value>12283113,12283120</Value>
</Parameter>
<Parameter>
<Name>TextQualifier</Name>
<Value/>
</Parameter>
<Parameter>
<Name>Timezone</Name>
<Value>1</Value>
</Parameter>
<Parameter>
<Name>UnicodeOutput</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>UseIDs</Name>
<Value>false</Value>
</Parameter>
<Parameter>
<Name>UseLocalTZinQuery</Name>
<Value>false</Value>
</Parameter>
</Parameters>
</Requests>
</ExtractRequestMsg>
</Body>
</Envelope>How to Create a Data Extension Data Extract
Use the sample code below to construct a data extract to extract data from a data extension.
Sample .NET Code
public static void ExtractDataExtension(SoapClient soapClient, string DataExtensionCustomerKey, string FileName) {
ExtractRequest er = new ExtractRequest();
er.ID = "bb94a04d-9632-4623-be47-daabc3f588a6";
// Always set an StartDate to the value specified
ExtractParameter epOne = new ExtractParameter();
epOne.Name = "StartDate";
epOne.Value = "1/1/1900 1:00:00 AM";
// Always set an StartDate to the value specified
ExtractParameter epTwo = new ExtractParameter();
epTwo.Name = "EndDate";
epTwo.Value = "1/1/1900 1:00:00 AM";
// Always set an _Async to 0
ExtractParameter epThree = new ExtractParameter();
epThree.Name = "_AsyncID";
epThree.Value = "0";
ExtractParameter epFour = new ExtractParameter();
epFour.Name = "OutputFileName";
epFour.Value = FileName;
ExtractParameter epFive = new ExtractParameter();
epFive.Name = "DECustomerKey";
epFive.Value = DataExtensionCustomerKey;
ExtractParameter epSix = new ExtractParameter();
epSix.Name = "HasColumnHeaders";
epSix.Value = "true";
er.Parameters = new ExtractParameter[] {epOne, epTwo, epThree, epFour, epFive, epSix };
string sRequestId;
string sStatus;
ExtractResult[] results;
sStatus = soapClient.Extract(new ExtractRequest[] { er }, out sRequestId, out results);
Console.WriteLine("Status: " + sStatus);
Console.WriteLine("Request ID: " + sRequestId);
foreach (ExtractResult eresult in results)
{
Console.WriteLine("StatusCode: " + eresult.StatusCode);
Console.WriteLine("ErrorCode: " + eresult.ErrorCode);
Console.WriteLine("StatusMessage: " + eresult.StatusMessage);
}
}Sample PHP Code
<?php
require('../exacttarget_soap_client.php');
require('../creds.php');
try {
$client = new Marketing CloudSoapClient($wsdl, array('trace'=>1));
$client->username = $username;
$client->password = $password;
$er = new Marketing Cloud_ExtractRequest();
$er->Options = NULL;
$er->ID = "bb94a04d-9632-4623-be47-daabc3f588a6";
$er->Parameters = array();
// Always set an StartDate to the value specified
$ep1 = new Marketing Cloud_APIProperty();
$ep1->Name = "StartDate";
$ep1->Value = "1/1/1900 1:00:00 AM";
$er->Parameters[] = $ep1;
// Always set an EndDate to the value specified
$ep2 = new Marketing Cloud_APIProperty();
$ep2->Name = "EndDate";
$ep2->Value = "1/1/1900 1:00:00 AM";
$er->Parameters[] = $ep2;
// Always set _AsyncID to 0
$ep3 = new Marketing Cloud_APIProperty();
$ep3->Name = "_AsyncID";
$ep3->Value = "0";
$er->Parameters[] = $ep3;
$ep4 = new Marketing Cloud_APIProperty();
$ep4->Name = "OutputFileName";
$ep4->Value = "PHPExtractDE.csv";
$er->Parameters[] = $ep4;
$ep5 = new Marketing Cloud_APIProperty();
$ep5->Name = "DECustomerKey";
$ep5->Value = "Bademails";
$er->Parameters[] = $ep5;
$ep6 = new Marketing Cloud_APIProperty();
$ep6->Name = "HasColumnHeaders";
$ep6->Value = "true";
$er->Parameters[] = $ep6;
$erm = new Marketing Cloud_ExtractRequestMsg();
$erm->Requests = array();
$erm->Requests[] = $er;
$results = $client->Extract($erm);
print_r($results);
} catch (SoapFault $e) {
var_dump($e);
}
?>Sample SOAP Envelope
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<o:UsernameToken u:Id="uuid-2517ad18-a6e9-4f38-98a9-184b30a59fb9-1">
<o:Username>XXXXX</o:Username>
<o:Password>XXXXX</o:Password>
</o:UsernameToken>
</o:Security>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ExtractRequestMsg xmlns="http://exacttarget.com/wsdl/partnerAPI">
<Requests>
<ID>bb94a04d-9632-4623-be47-daabc3f588a6</ID>
<Parameters>
<Parameter>
<Name>DECustomerKey</Name>
<Value>OrderHistory</Value>
</Parameter>
<Parameter>
<Name>HasColumnHeaders</Name>
<Value>true</Value>
</Parameter>
<Parameter>
<!--This parameter is required, always pass a value of 0-->
<Name>_AsyncID</Name>
<Value>0</Value>
</Parameter>
<Parameter>
<Name>OutputFileName</Name>
<Value>MyExtractFile.csv</Value>
</Parameter>
<Parameter>
<!--This parameter is required, always pass value shown below-->
<Name>StartDate</Name>
<Value>1/1/1900 1:00:00 AM</Value>
</Parameter>
<Parameter>
<!--This parameter is required, always pass value shown below-->
<Name>EndDate</Name>
<Value>1/1/1900 1:00:00 AM</Value>
</Parameter>
</Parameters>
</Requests>
</ExtractRequestMsg>
</s:Body>
</s:Envelope>