Basics of Foreign Outbound Tax Reporting: Identifying Income Tax and Information Return Reporting Requirements
An Introduction to Forms 1116, 2555, 8938, 5471, 8865, 8858, 8621, 926 and the FBAR

Welcome! Strafford is now BARBRI! The expert courses you know from the trusted global leader in legal education.
Course Details
- smart_display Format
On-Demand
- signal_cellular_alt Difficulty Level
Intermediate
- work Practice Area
Tax Preparer
- event Date
Tuesday, July 29, 2025
- schedule Time
1:00 p.m. ET./10:00 a.m. PT
- timer Program Length
110 minutes
-
BARBRI is a NASBA CPE sponsor and this 110-minute webinar is accredited for 2.0 CPE credits.
-
BARBRI is an IRS-approved continuing education provider offering certified courses for Enrolled Agents (EA) and Tax Return Preparers (RTRP).
This course will provide tax advisers and professionals with a sound foundation for identifying foreign tax and asset information requirements for outbound transactions. The webinar will identify reporting requirements, explain outbound filing duties, and detail the intersection between information reporting, income declaration, tax computation, and credit claims.
Description
With the sweeping changes Congress and Treasury continue to make to the reporting requirements of cross-border activities by taxpayers subject to U.S. tax jurisdiction, it is more critical than ever for tax professionals to have a thorough grounding in the foundations of the foreign tax filing regime. The IRS has indicated that tracking compliance with foreign outbound information and income filing rules is among its highest priorities.
The framework of foreign tax reporting is intricate and complex by its very structure. Despite some movement toward a territorial tax regime, the U.S. stands virtually alone among developed nations in imposing income tax on its citizens, long-term residents, and green card holders as it applies to global income. Generally, the U.S. follows other countries' practices of taxing nonresidents with income that can be sourced to the United States but with numerous exceptions, some of which are more stringent than that of other countries.
The foreign tax reporting regime consists of two major components: assets/holdings and income. Taxpayers subject to U.S. tax filings must report what they own and what they earn no matter the source or location derived. However, determining whether a U.S. taxpayer has filing requirements can present a challenge to even seasoned tax advisers. So it is helpful to examine the reach of the taxing regime in terms of outbound (U.S. citizens and residents with activities outside the United States) activities.
Listen as our expert panel provides a solid grounding in the basics of outbound foreign tax reporting, the identification of reporting requirements, thresholds, and rules as applied to U.S. taxpayers.
Outline
I. Overview of U.S. tax regime
II. Determining whether a taxpayer falls under U.S. tax jurisdiction
III. Informational reporting requirements
IV. Income reporting requirements for U.S. taxpayers with income from offshore activities
V. How recent legislative changes affect the structure of foreign tax reporting
Benefits
The panel will discuss these and other relevant topics:
- How the U.S. foreign tax reporting regime is structured for outbound activities
- Types of information filings and how they intersect with one another
- Coordination between U.S. and other countries in identifying assets
- Foreign reporting requirements of U.S. taxpayers
NASBA Details
Learning Objectives
After completing this course, you will be able to:
- Recognize how the IRS' global tax reporting regime is structured
- Determine how recent legislative changes affect foreign reporting
- Ascertain the thresholds for the filing requirements of various information reporting forms
- Identify the reporting requirements of U.S. taxpayers for outbound transactions
- Field of Study: Taxes
- Level of Knowledge: Intermediate
- Advance Preparation: None
- Teaching Method: Seminar/Lecture
- Delivery Method: Group-Internet (via computer)
- Attendance Monitoring Method: Attendance is monitored electronically via a participant's PIN and through a series of attendance verification prompts displayed throughout the program
- Prerequisite:
Three years+ business or public firm experience preparing complex tax forms and schedules, supervising other preparers or accountants. Specific knowledge and understanding of international taxation including residency determination, foreign entity classifications, application of treaty benefits, as well as GILTI, Subpart F, and the related Section 250 deductions.

Strafford Publications, Inc. is registered with the National Association of State Boards of Accountancy (NASBA) as a sponsor of continuing professional education on the National Registry of CPE Sponsors. State boards of Accountancy have final authority on the acceptance of individual courses for CPE Credits. Complaints regarding registered sponsons may be submitted to NASBA through its website: www.nasbaregistry.org.

Strafford is an IRS-approved continuing education provider offering certified courses for Enrolled Agents (EA) and Tax Return Preparers (RTRP).
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>
Related Courses

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
Recommended Resources
Building Your Book: Strategies to Secure Long-Term Success
- Business & Professional Skills
- Career Advancement
- Talent Development