Bulk API 2.0

Process large data volumes with ingest and query jobs.

Bulk Insert

Go
// Create an ingest job
job, err := client.Bulk().CreateJob(ctx, bulk.CreateJobRequest{
    Object:      "Account",
    Operation:   bulk.OperationInsert,
    ContentType: bulk.ContentTypeCSV,
})

// Upload CSV data
records := []map[string]string{
    {"Name": "Acme Corp", "Industry": "Technology"},
    {"Name": "Global Inc", "Industry": "Finance"},
}
err = client.Bulk().UploadCSV(ctx, job.ID, records, []string{"Name", "Industry"})

// Close job and wait for completion
client.Bulk().CloseJob(ctx, job.ID)
job, err = client.Bulk().WaitForCompletion(ctx, job.ID, 5*time.Second)

fmt.Printf("Processed: %d, Failed: %d\n", 
    job.NumberRecordsProcessed, job.NumberRecordsFailed)

Operations

Operation Description
OperationInsert Insert new records
OperationUpdate Update existing records
OperationUpsert Insert or update by external ID
OperationDelete Delete records (softDelete)
OperationHardDelete Permanently delete records

Bulk Update

Go
job, _ := client.Bulk().CreateJob(ctx, bulk.CreateJobRequest{
    Object:    "Account",
    Operation: bulk.OperationUpdate,
})

// Records must include the Id field for updates
records := []map[string]string{
    {"Id": "001xx000003DGbY", "Industry": "Healthcare"},
}
client.Bulk().UploadCSV(ctx, job.ID, records, []string{"Id", "Industry"})

Bulk Upsert

Go
job, _ := client.Bulk().CreateJob(ctx, bulk.CreateJobRequest{
    Object:         "Account",
    Operation:      bulk.OperationUpsert,
    ExternalIdField: "External_ID__c",  // Required for upsert
})

Bulk Query

Go
// Create a query job
queryJob, err := client.Bulk().CreateQueryJob(ctx, bulk.CreateQueryJobRequest{
    Query: "SELECT Id, Name FROM Account WHERE Industry = 'Technology'",
})

// Wait for query completion
queryJob, _ = client.Bulk().WaitForQueryCompletion(ctx, queryJob.ID, 5*time.Second)

// Get results as CSV
csv, _ := client.Bulk().GetQueryResults(ctx, queryJob.ID)

Get Job Results

Go
// Get successful results
successRecords, _ := client.Bulk().GetSuccessfulResults(ctx, job.ID)

// Get failed results
failedRecords, _ := client.Bulk().GetFailedResults(ctx, job.ID)
for _, record := range failedRecords {
    fmt.Printf("Error: %s\n", record.Error)
}

// Get unprocessed records
unprocessed, _ := client.Bulk().GetUnprocessedRecords(ctx, job.ID)

Available Methods

Method Description
CreateJob() Create ingest job
GetJob() Get job status
CloseJob() Close job for processing
AbortJob() Abort a job
DeleteJob() Delete a job
UploadCSV() Upload data to job
WaitForCompletion() Wait for job to finish
GetSuccessfulResults() Get success records
GetFailedResults() Get failed records
CreateQueryJob() Create query job
GetQueryResults() Get query results