Study guide
Study guide for chapter 10 of the Integration Architect course. Read the eight modules first; this page helps you check what stuck.
About this study guide. It’s built only from this course’s own content and the published Salesforce exam guide’s list of objectives. It is never based on real exam questions, and it doesn’t claim to know what’s on the exam. If you’ve taken the exam, please don’t send me questions from it: the certification agreement forbids sharing them, and memorizing answers is the wrong way to become an architect anyway.
This chapter is the loading dock: the Bulk API, in and out. It carries specifying the right API for large volumes and building a scalable solution. Every module has a Test knowledge callout, which tells you how much of the exam’s volume questions live here. Know the job’s steps, the two docks, locking, and how to prove it all arrived.
For the Exam
Section titled “For the Exam”Tick them off as you go. Each one links to where it’s taught.
The bank teller and the 18-wheeler (DES-4, BLD-3)
- I know the Bulk API is for large volumes where nobody waits for an answer per record: asynchronous, a job you submit and come back to, with no guaranteed time. (The Loading Dock)
- I know it goes both ways: ingest (insert, update, upsert, delete) and query. (The Truck Goes Both Ways)
- I know fewer records, or parents and children arriving many times a minute, go through the synchronous APIs, such as Composite. (Steve Trucking’s Feeds)
A job, call by call (DES-4)
- I know the ingest job in order: create the job, upload the CSV, set
UploadComplete, check the state until it’s complete, get the results. (Five Calls) - I know nothing processes until
UploadComplete, and aFailedjob may have loaded some records. (Five Calls) - I know Salesforce doesn’t call you back for an ingest job: the client asks, and every ask is an API call. (Are We There Yet, in 2026)
Two docks (DES-4)
- I know Bulk API 2.0: OAuth, CSV only, Salesforce makes the batches and chunks queries, limited by records a day, and recommended. (Salesforce Has Picked a Side)
- I know Bulk API 1.0: a session ID in
X-SFDC-Session, CSV, XML, JSON and attachments, batches you make up to 10,000 records, serial mode and PK chunking you switch on. (Why 1.0 Is Still Here, The Sign-In) - I know both are asynchronous and share 15,000 batches a day. (Which Dock?)
Parallel and locking (BLD-3)
- I know saving a child locks its parent, so parallel batches that share parents fail with
UNABLE_TO_LOCK_ROW. (Which One’s Faster?) - I group child records by parent so they travel in the same batch. (Sort by Parent)
- I know locks also come from other writers outside the job. (Inside the Job and Outside It)
- I know Bulk API 2.0 runs only in parallel; serial mode is 1.0’s, slower, for contention grouping didn’t solve. (When Sorting Isn’t Enough)
- I know failed records aren’t resent for you. (What You’ll See When It Bites)
Bulk query (DES-4, BLD-3)
- I know bulk query moves large result sets out asynchronously, and Salesforce suggests it past about a million records. (A Million Records Out)
- I know the SOQL it won’t run:
GROUP BY,OFFSET,TYPEOF, aggregates such asCOUNT(), compound fields, parent-to-child subqueries. (The SOQL It Won’t Run) - I know PK chunking: ranges of record IDs (default 100,000, at most 250,000), past 10 million records or when queries time out; a header on 1.0, automatic on 2.0;
ORDER BYandLIMITswitch it off. (Chunking)
Did it all arrive? (BLD-3)
- I know the three result files: successful (
sf__Id,sf__Created), failed (sf__Error), and unprocessed, which isn’t the same as failed. (Three Files, Not One) - I count in and count out: the rows uploaded equal the rows in the three files. (Count In, Count Out)
- I know records saved before a failure aren’t rolled back, results are kept seven days, and failed records must be resubmitted. (Keep the Evidence)
- I make a resend safe with upsert on an External ID: no match creates, one match updates, several matches is an error. (Make the Resend Safe)
Choosing the size of the truck (BLD-3)
- I know Salesforce’s line: more than about 2,000 records is a good candidate for Bulk API 2.0; fewer, bulkified synchronous calls such as Composite. (Count the Records in One Trip)
- I know the main ingest limits: 150 million records in 24 hours, 150 MB per upload, 15,000 batches a day, results kept 7 days, and that bulk calls still count against the org’s API allocation. (The Dock’s Own Constraints)
- I know Data Loader uses the SOAP API unless Bulk API is switched on, and hard delete skips the Recycle Bin and needs “Bulk API Hard Delete”. (The Tools That Drive the Truck)
Keeping a copy in sync (DES-4, BLD-3)
- I know
getUpdated()(30 days) andgetDeleted()(15 days) return IDs changed or deleted in a window, and polling should be no more often than every five minutes; for near real time, Change Data Capture. (Where the Date Goes, Should It Be a Copy at All?) - I know
SystemModstampchanges when a user or an automated process changes a record, and replication uses it. (SystemModstamp, Not LastModifiedDate) - I know the ways to catch deletes:
queryAll, Get Deleted, or comparing ID lists. (One Run, Four Steps)
Beyond the Exam
Section titled “Beyond the Exam”The exam is the floor, not the ceiling. These are the habits from this chapter that an architect needs, whether or not a question ever asks about them.
- Count the records in one trip, today and at year three.
- Complete isn’t the same as all there. Count in, count out, every run.
- Make every resend safe: upsert on your own key.
- Keep the three files beyond Salesforce’s seven days.
- Sort by parent, then find every other writer to the same parents.
- Test at real volume, with the real automation and the other writers running.
- Ask every tool which dock it really uses, and how it signs in.
Words to Know
Section titled “Words to Know”| Term | In one line |
|---|---|
| Bulk API | The loading dock: jobs of CSV files, processed in the background |
| Ingest job | A bulk job that puts data in |
| Query job | A bulk job that takes data out |
UploadComplete | The state that tells Salesforce to start processing |
| Unprocessed records | Rows never processed because the job failed or was aborted |
| Parallel, serial | Batches at the same time; one at a time (1.0 only) |
UNABLE_TO_LOCK_ROW | The error when two saves wait on the same locked parent |
| PK chunking | Splitting a big query into ranges of record IDs |
| Count in, count out | Uploaded rows equal the rows in the three result files |
SystemModstamp | When a user or an automated process last changed the record |
| Hard delete | A delete that skips the Recycle Bin |
Check Yourself
Section titled “Check Yourself”Short scenarios in the style of the course. Decide your answer before you open it.
1. A job uploaded its CSV an hour ago and still shows `Open`. Nothing has been processed. What was missed?
The job was never set to UploadComplete. Nothing processes until it is. Reread Five Calls.
2. A load of invoice lines fails with `UNABLE_TO_LOCK_ROW` for some rows. What's the first fix?
Sort the file by parent account, so each parent’s lines travel in the same batch. Then look for other writers to the same parents at the same time. Reread Sort by Parent.
3. The job says `JobComplete`. Is everything in?
Not necessarily. Download all three files and check the rows uploaded equal successful plus failed plus unprocessed. Then resubmit the failures. Reread Count In, Count Out.
4. The program crashed after uploading but before reading results. Can it just send the file again?
Only safely if the operation is an upsert on an External ID: matching rows update instead of duplicating. With an insert, a resend makes duplicates. Reread Make the Resend Safe.
5. A bulk query with `GROUP BY` fails. Why?
Bulk query doesn’t run GROUP BY, OFFSET, TYPEOF, aggregates or parent-to-child subqueries. Pull the rows and aggregate elsewhere, or use another door. Reread The SOQL It Won’t Run.
6. A feed sends 300 records every 15 minutes, almost 29,000 a day. Bulk API?
No. What matters is the records in one trip: 300 is the teller window, a synchronous call such as Composite. Bulk is for big trips, not many small ones. Reread Where the Line Moves.
7. A nightly sync uses `LastModifiedDate` and misses records changed by a trigger. Why?
LastModifiedDate tracks users; SystemModstamp also changes when an automated process changes the record. Replication uses SystemModstamp. Reread SystemModstamp, Not LastModifiedDate.
8. Someone wants Data Loader to hard delete a million old records with the integration user. What do you check?
That Data Loader is using Bulk API 2.0 (it defaults to SOAP), that hard delete skips the Recycle Bin for good, and that the “Bulk API Hard Delete” permission is something you’d rather keep off for integration users. Reread The Tools That Drive the Truck.
Explore
Section titled “Explore”- Salesforce Certified Platform Integration Architect Exam Guide (opens in a new tab), Salesforce Help (checked 2026-11-01): the official list of objectives and their weights. Always check the current version before you book the exam.
- Bulk API and Bulk API 2.0 Limits and Allocations (opens in a new tab), Salesforce Developer Limits and Allocations Quick Reference: the dock’s numbers.
