- Salesforce Blogs -

A Definitive Guide in 2022 To Salesforce Batch Apex Class


Batch class in Salesforce is used to run jobs of large scale (something like thousands or millions of records) that might exceed normal processing limits. As you can process records asynchronously in batches using Batch Apex (hence the name, “Batch Apex”) to stay within platform limits. So, when you have a lot of records to process like data archiving, or cleansing, Batch Apex is your best solution.

This blog is written with the intent to make you learn:

  • How to write batch classes in Salesforce?
  • What is Salesforce Batch Apex?
  • When to use Batch Apex?
  • The best practices for writing a Batch Apex class.
  • Advantages of Batch Apex.

Then we will discuss the syntax for the Batch Apex class in detail so that you can learn practical concepts too. But first, let’s understand what is Batch Apex Class.

What is Batch Apex Class?

What is Batch Apex Class?

As the name suggests, the batch word is used when you want to process a bulk amount of data effectively without any error that you need to apply some logic certainly. The Batch Apex class can be used conveniently here to perform a variety of tasks in real-time like data cleaning, data archiving, data analytics to maintain the quality. In simple words, Batch Apex classes are designed specially to process voluminous data or records together and it has maximum governor limits than the synchronous code.

Why Batch Apex is better than normal apex classes?


Normal Apex

Batch Apex

SOQL Queries

100 records per cycle

200 records per cycle

Records retrieval by SOQL Queries



Heap Size



When to use Batch Apex?

Batch Apex is an essential requirement when you wanted to execute bulk records, if you are using regular apex classes then the chances of errors are higher and it may hit the governor limits too. A maximum of 200 records can be passed to every batch here. The concept has plenty of awesome advantages that you should check before moving ahead –

  • Each transaction is executed with a set of defined governor limits, Batch Apex concept makes sure that code should stay within governor limits only.
  • In case, one batch is not executed successfully then it will not roll back transactions of other batches.
  • If you wanted to process a large set of records together on regular basis then you should opt for the Batch Apex classes or schedule Batch Apex.
  • When you want an operation to be asynchronous then implement the Batch Apex class. The interface can be implemented by developers only. The batch jobs are invoked programmatically during runtime. It can be operated on any size of records, but you can add a maximum of 200 records per batch. If the size of the recordset is larger than 200 then break it down into small manageable chunks.
  • Most importantly, the interface can be scheduled to run batches at different time periods.

Governor Limits Defined for Batch Apex

Before you write the Batch Apex code, you should focus on these governor limits for effective dealing with classes.

  • There is a maximum of five active or queued batch jobs are allowed for APEX.
  • At a particular time period, one user can open up to 50 query cursors. If the user attempts to open a new one the oldest 50 cursors will be released. Keep in mind that this limit is different for the start method in the Batch Apex class that could have a maximum of five query cursors open at a particular time.
  • Other than the start method, the rest of the methods have a limit of up to 50 cursors. This limit is tracked differently for multiple features in For example, for a particular method, you could have 50 batch cursors, 50 Apex query cursors, and 50 VisualForce cursors open at the same time together.
  • For a database in the Batch Apex, a maximum of 50 million records can be returned at a particular time. Once all 50 million records are returned, the batch job will be terminated automatically and it is marked as the “Failure” in the end.
  • The default size for a record set in Batch Apex is 200. The governor limits should always be redefined for each set of records as per the requirement.
  • When we are talking about the callouts then start, execute, and the finish methods are limited to ten callouts per method execution.
  • There is a limit set for hours as well. For example, you can execute a maximum number of 250,000 batch execution in 24 hours.
  • At one time, only one start method will run for an organization. The batch jobs that are not started yet will stay in queue until they are not started. Keep in mind that this limit will not set any batch job to failure or it will not stop the execution of any Batch Apex jobs but run in parallel if there is more than one job scheduled in the batch.

Advantage Of Using Batch Apex

Here are the advantages of Batch Apex and Batch Apex in Salesforce along with why Batch Apex should be used against normal apex:

  • Every transaction starts with a new set of governor limits, making it easier to ensure that your code stays within the governor execution limits.
  • All other successful batch transactions aren’t rolled back if one batch fails to process successfully.

 Why use Batch Apex in Salesforce instead of the normal Apex?

why Batch Apex is better than normal Apex

By now you understand what is Batch Apex, its advantages, and when to use Batch Apex. Now let us quickly understand how to write Batch Apex class and apex best practices.

How To Write A Batch Apex Class?

To write a Batch Apex class, you should first implement the “Database.Batchable” interface in Salesforce and include the execution of these three methods.

How to write a Batch APEX Class?

1). Start method

This method is used to collect objects or records that need to be passed to an interface method for processing. This method is called at the beginning when the Batch Apex starts to execute. In most cases, the “QueryLocator” method is used to play with the simple SOQL query and to generate the scope of objects within a batch job. In case, you wanted to do something crazy then call the API records before they are passed for execution. Further, if you wanted to set the governor limits for the total number of records retrieved by the SOQL queries then you can query up to 50 million records together. With the help of an iterable object, the governor limit for a total number of records is retrieved by SOQL queries through enforcement.

Read: How can Learning Salesforce Developer Skills Lead you to your Dream Job?

2). Execute Method

This method will perform the actual processing for each batch or chunk where data needs to be passed with the help of a method. The default size defined for each batch is 200 records maximum. If the size of the recordset is larger, break it down into manageable pieces first before you execute them. If the size is not defined well then records will not be executed in the same order as they were received by the start method.

3). Finish method

This method is responsible to perform post-processing operations like email sending or more once all batches are executed successfully. Here is the basic syntax of a Batch Apex class how are they written in the Salesforce.Batch Apex Class in Salesforce

How to use state in Batch Apex class?

A Batch Apex class is usually stateless and execution of each job in the batch is considered a discrete transaction. For example, if some batch class contains more than 1000 records then based on the default size concept total of five transactions will be performed here with a recordset of 200 each. Here you need to specify the Database. 

The stateful method in the class definition is to maintain the state across all transactions. With the help of this method, the member variables could always retain their values between multiple transactions. You must be thinking about why it is necessary but maintaining a state is beneficial to summarize records as they are processed. For example, when we are updating contact records in our batch then you wanted to keep track of the total records affected so that the same can be included for the notification email list. 

Now you know how to write a batch class with the help of three methods and define the state for the database. Don’t forget to practice a few examples to get a better idea of the concept. Keep in mind that APEX development and testing go hand to hand. Every time you add some records, call the Batch Apex class and check if contacts are updated properly or not as per the specified requirements. Test class for Batch Apex

Read: Visualforce Tags Salesforce - A Must Learn Guide in 2020

Learn Salesforce in the Easiest Way

  • Learn from the videos
  • Learn anytime anywhere
  • Pocket-friendly mode of learning
  • Complimentary eBook available

Apex Best Practices

As discussed earlier, there are always certain things you should keep in mind when using the Batch Apex class. To make sure that batch jobs are executing faster, you should minimize the callout times for web services and tune the queries used with your Batch Apex code. The longer the Salesforce batch size would be, the more likely other job queues will be delayed when too many jobs are added together. Here are the best practices to follow by Salesforce Developers:

  • Use Batch Apex class only when you have more than one batch of records to execute. If you don’t have enough record sets then you may probably be off the Batch Apex idea and continue with normal context.
  • Tune SOQL queries together to gather records to be executed as quickly as possible.
  • Try to minimize the total number of asynchronous requests to minimize the chance of delays.
  • Add extra care when planning to invoke a batch job from a trigger. Here, you have to keep in mind that the trigger won’t be able to add more batch jobs than the specified governor limits.

Key points about Batch Apex

These are some of the best practices of Apex, and how to use Batch Apex. 


This blog covers every aspect of the Batch Apex. What is meant by the Batch Apex, ist best practices, how to use, advantages, and why to use Batch Apex against normal apex. Now, you can use it successfully in your next project, and don’t forget to define governor limits well otherwise it may be annoying at the end. Today, Batch Apex class usage is growing tremendously and Salesforce developers are also excited about its benefits, and learning its core will take you a long way ahead.

If you have any questions related to Batch Apex, Salesforce certification, Salesforce career path write in the comment box below and we will guide you through.

Salesforce Tutorial Overview

FaceBook Twitter Google+ LinkedIn Pinterest Email

    Jyotika Prasad

    Through market research and a deep understanding of products and services, Jyotika has been translating complex product information into simple, polished, and engaging content for Janbask Training.


Trending Courses


  • AWS & Fundamentals of Linux
  • Amazon Simple Storage Service
  • Elastic Compute Cloud
  • Databases Overview & Amazon Route 53

Upcoming Class

-0 day 12 Aug 2022


  • Intro to DevOps
  • GIT and Maven
  • Jenkins & Ansible
  • Docker and Cloud Computing

Upcoming Class

-0 day 12 Aug 2022

Data Science

  • Data Science Introduction
  • Hadoop and Spark Overview
  • Python & Intro to R Programming
  • Machine Learning

Upcoming Class

7 days 19 Aug 2022


  • Architecture, HDFS & MapReduce
  • Unix Shell & Apache Pig Installation
  • HIVE Installation & User-Defined Functions
  • SQOOP & Hbase Installation

Upcoming Class

7 days 19 Aug 2022


  • Salesforce Configuration Introduction
  • Security & Automation Process
  • Sales & Service Cloud
  • Apex Programming, SOQL & SOSL

Upcoming Class

-0 day 12 Aug 2022


  • Introduction and Software Testing
  • Software Test Life Cycle
  • Automation Testing and API Testing
  • Selenium framework development using Testing

Upcoming Class

-0 day 12 Aug 2022

Business Analyst

  • BA & Stakeholders Overview
  • BPMN, Requirement Elicitation
  • BA Tools & Design Documents
  • Enterprise Analysis, Agile & Scrum

Upcoming Class

7 days 19 Aug 2022

MS SQL Server

  • Introduction & Database Query
  • Programming, Indexes & System Functions
  • SSIS Package Development Procedures
  • SSRS Report Design

Upcoming Class

-0 day 12 Aug 2022


  • Features of Python
  • Python Editors and IDEs
  • Data types and Variables
  • Python File Operation

Upcoming Class

1 day 13 Aug 2022

Artificial Intelligence

  • Components of AI
  • Categories of Machine Learning
  • Recurrent Neural Networks
  • Recurrent Neural Networks

Upcoming Class

15 days 27 Aug 2022

Machine Learning

  • Introduction to Machine Learning & Python
  • Machine Learning: Supervised Learning
  • Machine Learning: Unsupervised Learning

Upcoming Class

28 days 09 Sep 2022


  • Introduction to Tableau Desktop
  • Data Transformation Methods
  • Configuring tableau server
  • Integration with R & Hadoop

Upcoming Class

-0 day 12 Aug 2022

Search Posts


Trending Posts

Receive Latest Materials and Offers on Salesforce Course