How Bulk API Works
How Bulk Queries Are Processed
Use Bulk Query
PK Chunking
Walk Through a Bulk Query Sample
Walk Through a Bulk Query Sample Using PK Chunking
Limits
Map Data Fields
Bulk API End-of-Life Policy
Previous PDF Versions
This code sample uses cURL to query several account records.
Before you begin building an integration or other client application:
Note
Create a file called create-job.xml containing this text.
1<?xml version="1.0" encoding="UTF-8"?>
2<jobInfo
3 xmlns="http://www.force.com/2009/06/asyncapi/dataload">
4 <operation>query</operation>
5 <object>Account</object>
6 <concurrencyMode>Parallel</concurrencyMode>
7 <contentType>CSV</contentType>
8</jobInfo>Using a command-line window, execute this cURL command to create a job.
curl -H "X-SFDC-Session: sessionId" -H "Content-Type: application/xml; charset=UTF-8" -d @create-job.xml https://instance.salesforce.com/services/async/68.0/job
instance is the portion of the <serverUrl> element and sessionId is the <sessionId> element that you noted in the login response.
Salesforce returns an XML response with data such as this.
1<?xml version="1.0" encoding="UTF-8"?>
2<jobInfo
3 xmlns="http://www.force.com/2009/06/asyncapi/dataload">
4 <id>750x000000009tvAAA</id>
5 <operation>query</operation>
6 <object>Account</object>
7 <createdById>005x0000001WR0lAAG</createdById>
8 <createdDate>2016-01-10T00:53:19.000Z</createdDate>
9 <systemModstamp>2016-01-10T00:53:19.000Z</systemModstamp>
10 <state>Open</state>
11 <concurrencyMode>Parallel</concurrencyMode>
12 <contentType>CSV</contentType>
13 <numberBatchesQueued>0</numberBatchesQueued>
14 <numberBatchesInProgress>0</numberBatchesInProgress>
15 <numberBatchesCompleted>0</numberBatchesCompleted>
16 <numberBatchesFailed>0</numberBatchesFailed>
17 <numberBatchesTotal>0</numberBatchesTotal>
18 <numberRecordsProcessed>0</numberRecordsProcessed>
19 <numberRetries>0</numberRetries>
20 <apiVersion>36.0</apiVersion>
21 <numberRecordsFailed>0</numberRecordsFailed>
22 <totalProcessingTime>0</totalProcessingTime>
23 <apiActiveProcessingTime>0</apiActiveProcessingTime>
24 <apexProcessingTime>0</apexProcessingTime>
25</jobInfo>Create a file called query.txt to contain the SOQL query statement.
1SELECT Id, Name FROM Account LIMIT 10Using a command-line window, execute this cURL command to add a batch to the job:
curl -d @query.txt -H "X-SFDC-Session: sessionId" -H "Content-Type: text/csv; charset=UTF-8" https://instance.salesforce.com/services/async/68.0/job/jobId/batch
jobId is the job ID returned in the response to the job creation.
Salesforce returns an XML response with data such as this.
1<?xml version="1.0" encoding="UTF-8"?>
2<batchInfo
3 xmlns="http://www.force.com/2009/06/asyncapi/dataload">
4 <id>751x000000009vwAAA</id>
5 <jobId>750x000000009tvAAA</jobId>
6 <state>Queued</state>
7 <createdDate>2016-01-10T00:59:47.000Z</createdDate>
8 <systemModstamp>2016-01-10T00:59:47.000Z</systemModstamp>
9 <numberRecordsProcessed>0</numberRecordsProcessed>
10 <numberRecordsFailed>0</numberRecordsFailed>
11 <totalProcessingTime>0</totalProcessingTime>
12 <apiActiveProcessingTime>0</apiActiveProcessingTime>
13 <apexProcessingTime>0</apexProcessingTime>
14</batchInfo>When you add a batch to a bulk query job, the Content-Type in the header for the request must be text/csv, application/xml, or application/json, depending on the content type specified when the job was created. The actual SOQL statement supplied for the batch is in plain text format.
Note
Create a file called close-job.xml containing this text.
1<?xml version="1.0" encoding="UTF-8"?>
2<jobInfo xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3 <state>Closed</state>
4</jobInfo>Using a command-line window, execute this cURL command to close the job.
curl -H "X-SFDC-Session: sessionId" -H "Content-Type: text/csv; charset=UTF-8" -d @close-job.xml https://instance.salesforce.com/services/async/68.0/job/jobId
Salesforce returns an XML response with data such as this.
1<?xml version="1.0" encoding="UTF-8"?>
2<jobInfo
3 xmlns="http://www.force.com/2009/06/asyncapi/dataload">
4 <id>750x000000009tvAAA</id>
5 <operation>query</operation>
6 <object>Account</object>
7 <createdById>005x0000001WR0lAAG</createdById>
8 <createdDate>2016-01-10T00:53:19.000Z</createdDate>
9 <systemModstamp>2016-01-10T00:53:19.000Z</systemModstamp>
10 <state>Closed</state>
11 <concurrencyMode>Parallel</concurrencyMode>
12 <contentType>CSV</contentType>
13 <numberBatchesQueued>0</numberBatchesQueued>
14 <numberBatchesInProgress>0</numberBatchesInProgress>
15 <numberBatchesCompleted>1</numberBatchesCompleted>
16 <numberBatchesFailed>0</numberBatchesFailed>
17 <numberBatchesTotal>1</numberBatchesTotal>
18 <numberRecordsProcessed>10</numberRecordsProcessed>
19 <numberRetries>0</numberRetries>
20 <apiVersion>36.0</apiVersion>
21 <numberRecordsFailed>0</numberRecordsFailed>
22 <totalProcessingTime>0</totalProcessingTime>
23 <apiActiveProcessingTime>0</apiActiveProcessingTime>
24 <apexProcessingTime>0</apexProcessingTime>
25</jobInfo>Using a command-line window, execute this cURL command to check the job status.
curl -H "X-SFDC-Session: sessionId" https://instance.salesforce.com/services/async/68.0/job/jobId
Salesforce returns an XML response with data such as this.
1<?xml version="1.0" encoding="UTF-8"?>
2<jobInfo
3 xmlns="http://www.force.com/2009/06/asyncapi/dataload">
4 <id>750x000000009tvAAA</id>
5 <operation>query</operation>
6 <object>Account</object>
7 <createdById>005x0000001WR0lAAG</createdById>
8 <createdDate>2016-01-10T00:53:19.000Z</createdDate>
9 <systemModstamp>2016-01-10T00:53:19.000Z</systemModstamp>
10 <state>Open</state>
11 <concurrencyMode>Parallel</concurrencyMode>
12 <contentType>CSV</contentType>
13 <numberBatchesQueued>0</numberBatchesQueued>
14 <numberBatchesInProgress>0</numberBatchesInProgress>
15 <numberBatchesCompleted>1</numberBatchesCompleted>
16 <numberBatchesFailed>0</numberBatchesFailed>
17 <numberBatchesTotal>1</numberBatchesTotal>
18 <numberRecordsProcessed>10</numberRecordsProcessed>
19 <numberRetries>0</numberRetries>
20 <apiVersion>36.0</apiVersion>
21 <numberRecordsFailed>0</numberRecordsFailed>
22 <totalProcessingTime>0</totalProcessingTime>
23 <apiActiveProcessingTime>0</apiActiveProcessingTime>
24 <apexProcessingTime>0</apexProcessingTime>
25</jobInfo>Using a command-line window, execute this cURL command to check the batch status.
curl -H "X-SFDC-Session: sessionId" https://instance.salesforce.com/services/async/68.0/job/jobId/batch/batchId
batchId is the batch ID in the response to the batch creation.
Salesforce returns an XML response with data such as this.
1<?xml version="1.0" encoding="UTF-8"?>
2<batchInfo
3 xmlns="http://www.force.com/2009/06/asyncapi/dataload">
4 <id>751x000000009vwAAA</id>
5 <jobId>750x000000009tvAAA</jobId>
6 <state>Completed</state>
7 <createdDate>2016-01-10T00:59:47.000Z</createdDate>
8 <systemModstamp>2016-01-10T01:00:19.000Z</systemModstamp>
9 <numberRecordsProcessed>10</numberRecordsProcessed>
10 <numberRecordsFailed>0</numberRecordsFailed>
11 <totalProcessingTime>0</totalProcessingTime>
12 <apiActiveProcessingTime>0</apiActiveProcessingTime>
13 <apexProcessingTime>0</apexProcessingTime>
14</batchInfo>Using the command-line window, execute this cURL command to retrieve the batch result list.
curl -H "X-SFDC-Session: sessionId" https://instance.salesforce.com/services/async/68.0/job/jobId/batch/batchId/result
Salesforce returns an XML response with data such as this.
1<?xml version="1.0" encoding="UTF-8"?>
2<result-list xmlns="http://www.force.com/2009/06/asyncapi/dataload">
3 <result>752x00000004CJE</result>
4</result-list>If the batch required retries, there will be more than one <result> element in the output.
Note
Using the command-line window, execute this cURL command to retrieve the results of the query.
curl -H "X-SFDC-Session: sessionId" https://instance.salesforce.com/services/async/68.0/job/jobId/batch/batchId/result/resultId
resultId is the result ID in the response to the batch result list request.
Salesforce returns a CSV response with data such as this.
1"Id","Name"
2"001x000xxx4TU4JAAW","name161268--1296595660659"
3"001x000xxx4TU4KAAW","name161269--1296595660659"
4"001x000xxx4TU4LAAW","name161270--1296595660659"
5"001x000xxx4TU4MAAW","name161271--1296595660659"
6"001x000xxx4TU4NAAW","name161272--1296595660659"
7"001x000xxx4TU4OAAW","name161273--1296595660659"
8"001x000xxx4TU4PAAW","name161274--1296595660659"
9"001x000xxx4TU4QAAW","name161275--1296595660659"
10"001x000xxx4TU4RAAW","name161276--1296595660659"
11"001x000xxx4TU4SAAW","name161277--1296595660659"See Also