CLE Courses
Expert-led programs with unparalleled insights, timely and comprehensive content, and streamlined CLE credit solutions ensure professionals stay ahead with the latest knowledge while simplifying compliance

Why Choose BARBRI for CLE?

Our CLE courses are the go-to choice for legal professionals seeking top-tier education. Developed by expert faculty from leading law firms, our CLE courses are content-rich, practical, and accredited in most states, making them reliable and widely recognized. Whether youre looking for the convenience of on-demand learning or the real-time engagement of live webinars with interactive Q&A sessions, our courses offer unmatched flexibility. Join thousands of satisfied attorneys who trust our courses to stay at the forefront of legal expertise.
Looking for Training for your Team or Organization?
- 1,000 +
new CLE webinars annually
- 3,800 +
on-demand CLE webinars
- 30 +
legal practice areas
CLE Course Offerings
Enjoy a full year of expert-led courses, actionable insights, and powerful tools tailored to elevate your practice. Perfect for individuals and groups
The following has evaluated to null or missing: ==> barbriRedisCacheAPI.get("barbripass", productId) [in template "20096#20121#2885355" at line 5, column 77] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: response = barbriRedisCacheAPI.get("b... [in template "20096#20121#2885355" at line 5, column 66] ----
1<#assign productId = ''/>
2 <#if (productID.getData())?? && productID.getData()?has_content>
3 <#assign productId = productID.getData() />
4 </#if>
5 <#assign response = barbriRedisCacheAPI.get("barbripass", productId)
6 json = jsonFactoryUtil.createJSONObject(response)
7 />
8
9 <div class="card">
10 <div class="card-body">
11 <div class="row justify-content-between align-items-center">
12 <div class="col-auto col-sm-auto">
13 <div class="btn cle_btn" id="modalPassShortName"><#if (passName.getData())??>${passName.getData()}</#if></div>
14 </div>
15 <div class="col-auto col-sm-auto pl-lg-0">
16 <span class="sale-price" id="modalPassPrice">$${json.pricebook?replace(",", "")?number?string("#,##0.00")}</span>
17 </div>
18 </div>
19 <div class="small_heading_area" id="modalPassFullName"><#if (title.getData())??>${title.getData()}</#if></div>
20 <p><#if (unlimitedText.getData())??>${unlimitedText.getData()}</#if>:</p>
21 <ul class="common-list disc_list paddNone">
22 <#if (benefits.getData())??>
23 ${benefits.getData()}
24</#if>
25 </ul>
26 </div>
27 <div class="btn-float">
28 <div class="premium-cle-pass cart-item">
29 <input type="hidden" class="product-id" value="${productId}">
30 <input type="hidden" class="product-name" value="${json.name}">
31 <input type="hidden" class="pass-value" value="${passName.getData()}">
32 <input type="hidden" class="product-price" value="${json.pricebook}">
33 <input type="hidden" class="passAccessLengthMonths" value="${json.passAccessLengthMonths}">
34 <input type="hidden" class="product-pass" value="family">
35 <input type="hidden" class="product-expireDate" value="">
36
37 <a href="javascript:void(0);" class="btn pc_theme_btn btn-primary btn_maxwidth_xxl_large add-to-cart"> <span class="material-symbols-rounded"> shopping_cart </span> Add to Cart </a>
38 </div>
39 </div>
40 </div>
41
42 <script>
43$(document).on('click', '.add-to-cart', function () {
44 let monthsToAdd = parseInt($(".passAccessLengthMonths").val());
45 let currentDate = new Date();
46 let futureDate = new Date(currentDate);
47 // Add months dynamically
48 futureDate.setMonth(futureDate.getMonth() + monthsToAdd);
49
50 // Handle overflow (e.g., Jan 31 + 1 month)
51 if (futureDate.getDate() !== currentDate.getDate()) {
52 futureDate.setDate(0); // last day of previous month
53 }
54
55 // Format as MM/DD/YYYY
56 function formatDateMMDDYYYY(date) {
57 let mm = String(date.getMonth() + 1).padStart(2, '0');
58 let dd = String(date.getDate()).padStart(2, '0');
59 let yyyy = date.getFullYear();
60 return mm + '/' + dd + '/' + yyyy;
61 }
62 $(".product-expireDate").val(formatDateMMDDYYYY(futureDate));
63
64 // Then close the modal
65 $('.single_option').modal('hide');
66 });
67</script>
The following has evaluated to null or missing: ==> barbriRedisCacheAPI.get("barbripass", productId) [in template "20096#20121#2885355" at line 5, column 77] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: response = barbriRedisCacheAPI.get("b... [in template "20096#20121#2885355" at line 5, column 66] ----
1<#assign productId = ''/>
2 <#if (productID.getData())?? && productID.getData()?has_content>
3 <#assign productId = productID.getData() />
4 </#if>
5 <#assign response = barbriRedisCacheAPI.get("barbripass", productId)
6 json = jsonFactoryUtil.createJSONObject(response)
7 />
8
9 <div class="card">
10 <div class="card-body">
11 <div class="row justify-content-between align-items-center">
12 <div class="col-auto col-sm-auto">
13 <div class="btn cle_btn" id="modalPassShortName"><#if (passName.getData())??>${passName.getData()}</#if></div>
14 </div>
15 <div class="col-auto col-sm-auto pl-lg-0">
16 <span class="sale-price" id="modalPassPrice">$${json.pricebook?replace(",", "")?number?string("#,##0.00")}</span>
17 </div>
18 </div>
19 <div class="small_heading_area" id="modalPassFullName"><#if (title.getData())??>${title.getData()}</#if></div>
20 <p><#if (unlimitedText.getData())??>${unlimitedText.getData()}</#if>:</p>
21 <ul class="common-list disc_list paddNone">
22 <#if (benefits.getData())??>
23 ${benefits.getData()}
24</#if>
25 </ul>
26 </div>
27 <div class="btn-float">
28 <div class="premium-cle-pass cart-item">
29 <input type="hidden" class="product-id" value="${productId}">
30 <input type="hidden" class="product-name" value="${json.name}">
31 <input type="hidden" class="pass-value" value="${passName.getData()}">
32 <input type="hidden" class="product-price" value="${json.pricebook}">
33 <input type="hidden" class="passAccessLengthMonths" value="${json.passAccessLengthMonths}">
34 <input type="hidden" class="product-pass" value="family">
35 <input type="hidden" class="product-expireDate" value="">
36
37 <a href="javascript:void(0);" class="btn pc_theme_btn btn-primary btn_maxwidth_xxl_large add-to-cart"> <span class="material-symbols-rounded"> shopping_cart </span> Add to Cart </a>
38 </div>
39 </div>
40 </div>
41
42 <script>
43$(document).on('click', '.add-to-cart', function () {
44 let monthsToAdd = parseInt($(".passAccessLengthMonths").val());
45 let currentDate = new Date();
46 let futureDate = new Date(currentDate);
47 // Add months dynamically
48 futureDate.setMonth(futureDate.getMonth() + monthsToAdd);
49
50 // Handle overflow (e.g., Jan 31 + 1 month)
51 if (futureDate.getDate() !== currentDate.getDate()) {
52 futureDate.setDate(0); // last day of previous month
53 }
54
55 // Format as MM/DD/YYYY
56 function formatDateMMDDYYYY(date) {
57 let mm = String(date.getMonth() + 1).padStart(2, '0');
58 let dd = String(date.getDate()).padStart(2, '0');
59 let yyyy = date.getFullYear();
60 return mm + '/' + dd + '/' + yyyy;
61 }
62 $(".product-expireDate").val(formatDateMMDDYYYY(futureDate));
63
64 // Then close the modal
65 $('.single_option').modal('hide');
66 });
67</script>
The following has evaluated to null or missing: ==> barbriRedisCacheAPI.get("barbripass", productId) [in template "20096#20121#2885355" at line 5, column 77] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: response = barbriRedisCacheAPI.get("b... [in template "20096#20121#2885355" at line 5, column 66] ----
1<#assign productId = ''/>
2 <#if (productID.getData())?? && productID.getData()?has_content>
3 <#assign productId = productID.getData() />
4 </#if>
5 <#assign response = barbriRedisCacheAPI.get("barbripass", productId)
6 json = jsonFactoryUtil.createJSONObject(response)
7 />
8
9 <div class="card">
10 <div class="card-body">
11 <div class="row justify-content-between align-items-center">
12 <div class="col-auto col-sm-auto">
13 <div class="btn cle_btn" id="modalPassShortName"><#if (passName.getData())??>${passName.getData()}</#if></div>
14 </div>
15 <div class="col-auto col-sm-auto pl-lg-0">
16 <span class="sale-price" id="modalPassPrice">$${json.pricebook?replace(",", "")?number?string("#,##0.00")}</span>
17 </div>
18 </div>
19 <div class="small_heading_area" id="modalPassFullName"><#if (title.getData())??>${title.getData()}</#if></div>
20 <p><#if (unlimitedText.getData())??>${unlimitedText.getData()}</#if>:</p>
21 <ul class="common-list disc_list paddNone">
22 <#if (benefits.getData())??>
23 ${benefits.getData()}
24</#if>
25 </ul>
26 </div>
27 <div class="btn-float">
28 <div class="premium-cle-pass cart-item">
29 <input type="hidden" class="product-id" value="${productId}">
30 <input type="hidden" class="product-name" value="${json.name}">
31 <input type="hidden" class="pass-value" value="${passName.getData()}">
32 <input type="hidden" class="product-price" value="${json.pricebook}">
33 <input type="hidden" class="passAccessLengthMonths" value="${json.passAccessLengthMonths}">
34 <input type="hidden" class="product-pass" value="family">
35 <input type="hidden" class="product-expireDate" value="">
36
37 <a href="javascript:void(0);" class="btn pc_theme_btn btn-primary btn_maxwidth_xxl_large add-to-cart"> <span class="material-symbols-rounded"> shopping_cart </span> Add to Cart </a>
38 </div>
39 </div>
40 </div>
41
42 <script>
43$(document).on('click', '.add-to-cart', function () {
44 let monthsToAdd = parseInt($(".passAccessLengthMonths").val());
45 let currentDate = new Date();
46 let futureDate = new Date(currentDate);
47 // Add months dynamically
48 futureDate.setMonth(futureDate.getMonth() + monthsToAdd);
49
50 // Handle overflow (e.g., Jan 31 + 1 month)
51 if (futureDate.getDate() !== currentDate.getDate()) {
52 futureDate.setDate(0); // last day of previous month
53 }
54
55 // Format as MM/DD/YYYY
56 function formatDateMMDDYYYY(date) {
57 let mm = String(date.getMonth() + 1).padStart(2, '0');
58 let dd = String(date.getDate()).padStart(2, '0');
59 let yyyy = date.getFullYear();
60 return mm + '/' + dd + '/' + yyyy;
61 }
62 $(".product-expireDate").val(formatDateMMDDYYYY(futureDate));
63
64 // Then close the modal
65 $('.single_option').modal('hide');
66 });
67</script>
The following has evaluated to null or missing: ==> barbriRedisCacheAPI.get("barbripass", productId) [in template "20096#20121#2885355" at line 5, column 77] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: response = barbriRedisCacheAPI.get("b... [in template "20096#20121#2885355" at line 5, column 66] ----
1<#assign productId = ''/>
2 <#if (productID.getData())?? && productID.getData()?has_content>
3 <#assign productId = productID.getData() />
4 </#if>
5 <#assign response = barbriRedisCacheAPI.get("barbripass", productId)
6 json = jsonFactoryUtil.createJSONObject(response)
7 />
8
9 <div class="card">
10 <div class="card-body">
11 <div class="row justify-content-between align-items-center">
12 <div class="col-auto col-sm-auto">
13 <div class="btn cle_btn" id="modalPassShortName"><#if (passName.getData())??>${passName.getData()}</#if></div>
14 </div>
15 <div class="col-auto col-sm-auto pl-lg-0">
16 <span class="sale-price" id="modalPassPrice">$${json.pricebook?replace(",", "")?number?string("#,##0.00")}</span>
17 </div>
18 </div>
19 <div class="small_heading_area" id="modalPassFullName"><#if (title.getData())??>${title.getData()}</#if></div>
20 <p><#if (unlimitedText.getData())??>${unlimitedText.getData()}</#if>:</p>
21 <ul class="common-list disc_list paddNone">
22 <#if (benefits.getData())??>
23 ${benefits.getData()}
24</#if>
25 </ul>
26 </div>
27 <div class="btn-float">
28 <div class="premium-cle-pass cart-item">
29 <input type="hidden" class="product-id" value="${productId}">
30 <input type="hidden" class="product-name" value="${json.name}">
31 <input type="hidden" class="pass-value" value="${passName.getData()}">
32 <input type="hidden" class="product-price" value="${json.pricebook}">
33 <input type="hidden" class="passAccessLengthMonths" value="${json.passAccessLengthMonths}">
34 <input type="hidden" class="product-pass" value="family">
35 <input type="hidden" class="product-expireDate" value="">
36
37 <a href="javascript:void(0);" class="btn pc_theme_btn btn-primary btn_maxwidth_xxl_large add-to-cart"> <span class="material-symbols-rounded"> shopping_cart </span> Add to Cart </a>
38 </div>
39 </div>
40 </div>
41
42 <script>
43$(document).on('click', '.add-to-cart', function () {
44 let monthsToAdd = parseInt($(".passAccessLengthMonths").val());
45 let currentDate = new Date();
46 let futureDate = new Date(currentDate);
47 // Add months dynamically
48 futureDate.setMonth(futureDate.getMonth() + monthsToAdd);
49
50 // Handle overflow (e.g., Jan 31 + 1 month)
51 if (futureDate.getDate() !== currentDate.getDate()) {
52 futureDate.setDate(0); // last day of previous month
53 }
54
55 // Format as MM/DD/YYYY
56 function formatDateMMDDYYYY(date) {
57 let mm = String(date.getMonth() + 1).padStart(2, '0');
58 let dd = String(date.getDate()).padStart(2, '0');
59 let yyyy = date.getFullYear();
60 return mm + '/' + dd + '/' + yyyy;
61 }
62 $(".product-expireDate").val(formatDateMMDDYYYY(futureDate));
63
64 // Then close the modal
65 $('.single_option').modal('hide');
66 });
67</script>
CLE FAQs
What is CLE?
CLE stands for Continuing Legal Education
- CLE is a requirement for lawyers to stay current on legal practices, ethics, and developments.
- CLE is also known as mandatory continuing legal education (MCLE) or continuing professional development (CPD).
- CLE activities include CLE courses, webinars, workshops, and compliance.
- CLE requirements vary by state.
Learn more about BARBRI's CLE credit courses
What is BARBRI's CLE Accreditation?
BARBRI is accredited as a CLE sponsor in most states. We do not seek direct accreditation of live or recorded webinars for FL, ME, MT, or WA. We will help you self-apply to the Florida, Maine, Montana, and Washington Bar for continuing legal education course attendance credit.
How do I get CLE credit for attending a live webinar?
Only registered and paid attendees will receive continuing education credits.
To obtain CLE credits, you must have a paid registration and participate in the live webinar. Look for the attendance prompts that you will see while viewing the program. After the webinar is over, each attorney must confirm their participation by completing and submitting an Attendance Affirmation/Evaluation form. A link to that form will be displayed on the screen immediately following the program.
Provided you have satisfied all the conditions and your state has approved the course, a Certificate of Attendance will be emailed immediately.
How do I obtain a Certificate of Attendance for CLE credit?
To obtain CLE credit, attendees must participate in the live event and confirm their participation by completing and submitting an Attendance Affirmation/Evaluation after the webinar. Provided you have satisfied all the conditions and your state has approved the course, a Certificate of Attendance will be emailed immediately.
How many credits are available for CLE webinars?
BARBRI legal webinars are usually eligible for 1.5 general continuing legal education credits, depending on program length and state rules. Programs with “ethics” in the title of the event generally earn between 0.5 and 1.5 ethics credits. In addition, many states will grant self-study CLE credits for listening to recorded events.
Are BARBRI's on-demand webinars approved for CLE credit?
BARBRI's CLE on-demand programs are pre-approved in the following states: AK, AZ, CA, HI, MT, NM, NV, NY, WI, WV, and VT.
We do not seek direct accreditation of live or recorded webinars for FL, ME, MT, or WA. We will help you self-apply to the Florida, Maine, Montana, and Washington Bar for CLE course attendance credit.
Do you support self-study CLE credits?
Many states grant self-study continuing legal education credits for recorded events. Refer to our state CLE map for information about your state. BARBRI will provide a CLE Certificate of Attendance to the person listed as the attendee on the order receipt.
BARBRI will help you process participatory, self-study, or non-traditional/alternate format credit upon request. Make sure to select your state(s) when placing your order, as the processing time varies.
Related Courses

2025 Fiduciary Best Practices in Trust and Estate Administration
Tuesday, August 26, 2025
1:00 p.m. ET./10:00 a.m. PT

2025 Legislation and Pass-Through Entity Taxation: One Big Beautiful Bill Act, SALT Cap, PTE Deductions, 199A, 163(j)
Monday, August 25, 2025
1:00 p.m. ET./10:00 a.m. PT

Section 336(e) Elections: Tax Basis Step-Up Through Deemed Asset Sale Treatment
Available On-Demand
Recommended Resources
Welcome! Strafford is now BARBRI! The expert courses you know from the trusted global leader in legal education.