{"id":678,"date":"2026-06-17T09:00:00","date_gmt":"2026-06-17T03:30:00","guid":{"rendered":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/"},"modified":"2026-06-17T09:00:00","modified_gmt":"2026-06-17T03:30:00","slug":"salesforce-custom-report-types","status":"publish","type":"post","link":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/","title":{"rendered":"Salesforce Custom Report Types: A Step by Step Guide"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Salesforce Custom Report Types let you choose exactly which objects and fields a report can use, including your own custom objects and their child records. Standard report types cover common needs, like Accounts with Contacts. However, they do not always fit your data model. In our <a href=\"https:\/\/swapnilzambare.com\/blog\/salesforce-reports-and-dashboards-beginners\/\">reports and dashboards guide<\/a>, you built reports from standard types. Now you will build the report type itself.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this post, you will learn what a report type is, how object relationships and the &#8220;with or without&#8221; choice change the results, and how to add fields from lookups. Then you will create a &#8220;Courses with or without Enrollments&#8221; report type for Bright Path Tutors, so the team can finally see courses that nobody has joined. This builds on the Enrollment object from our <a href=\"https:\/\/swapnilzambare.com\/blog\/master-detail-vs-lookup-salesforce\/\">master-detail vs lookup guide<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What are Salesforce Custom Report Types?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A report type is a template that decides which records and fields a report can show. It has a primary object, such as Courses, and up to three related objects below it. A custom report type is one that you design yourself in Setup, instead of using the ones Salesforce creates for you.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here is a simple analogy. Think of a restaurant menu. The kitchen can cook many dishes, but the menu decides what customers can order. A report type is the menu for reports. If a field is not on the menu, nobody can add it to a report, even though the data exists.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why Salesforce Custom Report Types Matter<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Standard report types are useful, but they have limits. Some only show parent records that have children. Others do not include fields from lookup objects. So admins often build custom report types to answer real business questions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here are some real situations at Bright Path Tutors.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The academic head wants a list of courses with no enrollments, so she can cancel or promote them.<\/li>\n\n<li>Finance wants enrollments with the student&#8217;s school name, which lives two objects away.<\/li>\n\n<li>The support manager wants cases with a custom Survey object attached.<\/li>\n\n<li>An admin wants a clean field list, so users are not confused by hundreds of fields.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In short, custom report types give users the right data in the right shape.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Salesforce Custom Report Types Work<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You build a report type in five steps. First, you pick the primary object, which cannot change after you save. Next, you give it a label, a description and a category, so users can find it. Then you add related objects and choose whether each parent must have children. After that, you set the field layout, including fields from lookup objects. Finally, you deploy the report type, and it appears in the report builder.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-diagram-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-diagram-1-1024x640.png\" alt=\"Salesforce Custom Report Types diagram showing the five steps to build a report type\" class=\"wp-image-654\" srcset=\"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-diagram-1-1024x640.png 1024w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-diagram-1-300x188.png 300w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-diagram-1-768x480.png 768w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-diagram-1-1536x960.png 1536w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-diagram-1-2048x1280.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">How Salesforce Custom Report Types work: pick a primary object, add related objects, choose with or without, set fields and deploy.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The &#8220;with or without&#8221; choice is the most important step. It decides whether a course with zero enrollments appears in the report at all.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Key Parts of Salesforce Custom Report Types<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Primary object<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">First, the primary object is the main object of the report, called object A. Every row in the report starts from a record of this object. For example, choosing Courses means each row starts with a course.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Related objects<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Next, you can add up to three more objects in a chain, called B, C and D. Each one must be a child of the object above it. For example, Courses (A), then Enrollments (B).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The with or without choice<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Then, for each related object, you choose one of two options. &#8220;Each A record must have at least one related B record&#8221; works like an inner join, so courses without enrollments disappear. &#8220;A records may or may not have related B records&#8221; works like an outer join, so every course appears, even with no enrollments.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Field layout and lookup fields<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The field layout decides which fields users see in the report builder, grouped into sections. You can also click &#8220;Add fields related via lookup&#8221; to pull in fields from parent objects. For example, from Enrollment you can add Student, then Account Name, to show the student&#8217;s school.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Deployment status and category<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, a report type has a Deployment Status of In Development or Deployed. While it is In Development, only users who manage report types can use it. The category decides which folder it appears under in the report builder, such as Other Reports.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The table below shows how the choice changes the rows for three courses.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Course<\/th><th>Enrollments<\/th><th>Rows with &#8220;must have&#8221;<\/th><th>Rows with &#8220;may or may not&#8221;<\/th><\/tr><\/thead><tbody><tr><td>Spoken English<\/td><td>12<\/td><td>12<\/td><td>12<\/td><\/tr><tr><td>Python for Kids<\/td><td>5<\/td><td>5<\/td><td>5<\/td><\/tr><tr><td>Public Speaking<\/td><td>0<\/td><td>0<\/td><td>1, with blank enrollment<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Standard vs Custom Report Types<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Admins often ask when a custom one is needed. The table below compares them.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Feature<\/th><th>Standard report type<\/th><th>Custom report type<\/th><\/tr><\/thead><tbody><tr><td>Created by<\/td><td>Salesforce, automatically<\/td><td>Admin, in Setup<\/td><\/tr><tr><td>Objects included<\/td><td>Fixed set<\/td><td>Up to four you choose<\/td><\/tr><tr><td>Courses without enrollments<\/td><td>Usually not shown<\/td><td>Yes, with &#8220;may or may not&#8221;<\/td><\/tr><tr><td>Lookup fields from other objects<\/td><td>Limited<\/td><td>Yes, add via lookup<\/td><\/tr><tr><td>Field list control<\/td><td>No<\/td><td>Yes, sections and labels<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In short, start with a standard report type when it gives the right rows. Build a custom one when you need outer joins, lookup fields or a cleaner field list.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><a href=\"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-diagram-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" src=\"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-diagram-2-1024x640.png\" alt=\"Salesforce Custom Report Types diagram comparing standard and custom report types\" class=\"wp-image-655\" srcset=\"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-diagram-2-1024x640.png 1024w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-diagram-2-300x188.png 300w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-diagram-2-768x480.png 768w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-diagram-2-1536x960.png 1536w, https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-diagram-2-2048x1280.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Standard report types compared with custom report types, and when to use each one.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Hands-on Example: Salesforce Custom Report Types for Courses<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s build the report type in your Developer Edition org.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Step 1: Create the report type<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to Setup, type &#8220;Report Types&#8221; in Quick Find, and click New Custom Report Type.<\/li>\n\n<li>Fill in the values from the table below and click Next.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Field<\/th><th>Value<\/th><\/tr><\/thead><tbody><tr><td>Primary Object<\/td><td>Courses<\/td><\/tr><tr><td>Report Type Label<\/td><td>Courses with or without Enrollments<\/td><\/tr><tr><td>Report Type Name<\/td><td>Courses_with_or_without_Enrollments<\/td><\/tr><tr><td>Description<\/td><td>All courses, including those with no enrollments<\/td><\/tr><tr><td>Store in Category<\/td><td>Other Reports<\/td><\/tr><tr><td>Deployment Status<\/td><td>In Development<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Step 2: Add the related object<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click the box under Courses and choose Enrollments.<\/li>\n\n<li>Select &#8220;A records may or may not have related B records&#8221; and save.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 3: Edit the field layout<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>On the report type page, click Edit Layout.<\/li>\n\n<li>Drag Fee Paid from Enrollments into the Enrollments section.<\/li>\n\n<li>Then click Add fields related via lookup, open Student, and tick Account Name. Click OK and save.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 4: Deploy and build a report<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Edit the report type and change Deployment Status to Deployed.<\/li>\n\n<li>Open the Reports tab, click New Report, search for &#8220;Courses with or without Enrollments&#8221;, and click Start Report.<\/li>\n\n<li>Group rows by Course Name, add Fee Paid, and add a filter where Enrollment ID equals blank. Save it as &#8220;Courses with No Enrollments&#8221;.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Step 5: Compare with SOQL<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The report with the outer join returns the same courses as this parent-to-child SOQL query.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT Name, Fee__c,\n       (SELECT Name, Fee_Paid__c FROM Enrollments__r)\nFROM Course__c\nORDER BY Name<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">To list only courses with no enrollments, developers can use a semi-join with NOT IN.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT Name, Start_Date__c\nFROM Course__c\nWHERE Id NOT IN (SELECT Course__c FROM Enrollment__c)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The result might look like this.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Name              Start_Date__c\nPublic Speaking   2026-07-01\nRobotics Basics   2026-07-15<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So the report and the query agree, and the academic head can act on both courses.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Common Mistakes with Salesforce Custom Report Types<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Choosing the wrong primary object.<\/strong> You cannot change it later, so plan the starting object first.<\/li>\n\n<li><strong>Using &#8220;must have&#8221; by accident.<\/strong> Courses without enrollments then vanish from every report.<\/li>\n\n<li><strong>Leaving it In Development.<\/strong> Normal users cannot see it until you deploy it.<\/li>\n\n<li><strong>Adding every field.<\/strong> Long field lists confuse users, so add only what reports need.<\/li>\n\n<li><strong>Expecting new fields to appear.<\/strong> Fields created later are not always added to the layout, so check it.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Best Practices for Salesforce Custom Report Types<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Name them by their rows.<\/strong> &#8220;Courses with or without Enrollments&#8221; tells users exactly what they get.<\/li>\n\n<li><strong>Write a clear description.<\/strong> It shows in the report builder and saves many questions.<\/li>\n\n<li><strong>Rename confusing labels.<\/strong> In Edit Layout, you can change a field&#8217;s display label for this report type only.<\/li>\n\n<li><strong>Test before deploying.<\/strong> Build one sample report while it is In Development.<\/li>\n\n<li><strong>Review unused types.<\/strong> Old report types clutter the list, so remove ones nobody uses.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Practice Task<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Create a report type called &#8220;Students with Enrollments&#8221; with Contacts as the primary object and Enrollments as the related object, using &#8220;must have&#8221;. Then build a report that counts enrollments per student.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hint: Enrollments appear under Contacts because Student is a master-detail field to Contact.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Salesforce Custom Report Types FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Can I change the primary object later?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. If you picked the wrong one, create a new report type and rebuild the reports.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Do custom report types respect security?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes. Users only see records and fields they have access to, even if the report type includes more.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How many objects can one report type include?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Up to four objects in a chain, plus fields from lookups.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Official Resources<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/help.salesforce.com\/s\/articleView?language=en_US&amp;id=xcloud.reports_report_type_setup.htm&amp;type=5\" target=\"_blank\" rel=\"noopener noreferrer\">Custom Report Types (Salesforce Help)<\/a><\/li>\n\n<li><a href=\"https:\/\/help.salesforce.com\/s\/articleView?id=sf.reports_report_type_custom_create.htm&amp;type=5\" target=\"_blank\" rel=\"noopener noreferrer\">Create a Custom Report Type (Salesforce Help)<\/a><\/li>\n\n<li><a href=\"https:\/\/trailhead.salesforce.com\/content\/learn\/modules\/lex_implementation_reports_dashboards\" target=\"_blank\" rel=\"noopener noreferrer\">Reports and Dashboards for Lightning Experience (Trailhead)<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Quick Recap<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Salesforce Custom Report Types decide which objects and fields reports can use.<\/li>\n\n<li>The primary object is fixed after you save, so choose it carefully.<\/li>\n\n<li>&#8220;May or may not&#8221; shows parents without children, like empty courses.<\/li>\n\n<li>Lookup fields bring in data from parent objects, like the student&#8217;s school.<\/li>\n\n<li>Deploy the report type so normal users can build reports with it.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">What&#8217;s Next?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can now shape the data behind your reports. Next, learn how to combine several reports in one view and group values without new fields. Read <a href=\"https:\/\/swapnilzambare.com\/blog\/salesforce-joined-reports-bucket-fields\/\">Salesforce Joined Reports, Bucket Fields and Summary Formulas<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Salesforce Custom Report Types let you choose exactly which objects and fields a report can use, including your own custom objects and their child&hellip;<\/p>\n","protected":false},"author":1,"featured_media":656,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_swapz_level":"","_swapz_series_part":0,"_swapz_hide_toc":false,"_swapz_hide_featured":false,"_swapz_description":"","footnotes":""},"categories":[67,8,13],"tags":[26,73,72,7],"swapz_series":[],"class_list":["post-678","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-advanced-admin","category-salesforce","category-salesforce-admin","tag-intermediate","tag-report-types","tag-reports","tag-salesforce"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Salesforce Custom Report Types: Step by Step<\/title>\n<meta name=\"description\" content=\"Salesforce Custom Report Types explained: primary objects, with or without related records, lookup fields and deployment, with a hands-on courses example.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Salesforce Custom Report Types: Step by Step\" \/>\n<meta property=\"og:description\" content=\"Salesforce Custom Report Types explained: primary objects, with or without related records, lookup fields and deployment, with a hands-on courses example.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/\" \/>\n<meta property=\"og:site_name\" content=\"Swapnil Zambare - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-17T03:30:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-featured.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1260\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Swapnil Zambare\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Swapnil Zambare\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-custom-report-types\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-custom-report-types\\\/\"},\"author\":{\"name\":\"Swapnil Zambare\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#\\\/schema\\\/person\\\/922ac0131aaa7088c78c2cb1700e0c9a\"},\"headline\":\"Salesforce Custom Report Types: A Step by Step Guide\",\"datePublished\":\"2026-06-17T03:30:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-custom-report-types\\\/\"},\"wordCount\":1565,\"publisher\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-custom-report-types\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/salesforce-custom-report-types-featured.png\",\"keywords\":[\"Intermediate\",\"Report Types\",\"Reports\",\"Salesforce\"],\"articleSection\":[\"Advanced Admin\",\"Salesforce\",\"Salesforce Admin\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-custom-report-types\\\/\",\"url\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-custom-report-types\\\/\",\"name\":\"Salesforce Custom Report Types: Step by Step\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-custom-report-types\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-custom-report-types\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/salesforce-custom-report-types-featured.png\",\"datePublished\":\"2026-06-17T03:30:00+00:00\",\"description\":\"Salesforce Custom Report Types explained: primary objects, with or without related records, lookup fields and deployment, with a hands-on courses example.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-custom-report-types\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-custom-report-types\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-custom-report-types\\\/#primaryimage\",\"url\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/salesforce-custom-report-types-featured.png\",\"contentUrl\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/salesforce-custom-report-types-featured.png\",\"width\":2400,\"height\":1260,\"caption\":\"Salesforce Custom Report Types featured image: objects, relationships and field layout\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/salesforce-custom-report-types\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Salesforce Custom Report Types: A Step by Step Guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/\",\"name\":\"Swapnil Zambare - Blog\",\"description\":\"Salesforce &amp; Tech Guides\",\"publisher\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#organization\",\"name\":\"Swapnil Zambare - Blog\",\"url\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/site-icon-512.png\",\"contentUrl\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/site-icon-512.png\",\"width\":512,\"height\":512,\"caption\":\"Swapnil Zambare - Blog\"},\"image\":{\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/theSwapnilZambare\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/#\\\/schema\\\/person\\\/922ac0131aaa7088c78c2cb1700e0c9a\",\"name\":\"Swapnil Zambare\",\"sameAs\":[\"https:\\\/\\\/swapnilzambare.com\\\/blog\"],\"url\":\"https:\\\/\\\/swapnilzambare.com\\\/blog\\\/author\\\/swapnil-zambare\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Salesforce Custom Report Types: Step by Step","description":"Salesforce Custom Report Types explained: primary objects, with or without related records, lookup fields and deployment, with a hands-on courses example.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/","og_locale":"en_US","og_type":"article","og_title":"Salesforce Custom Report Types: Step by Step","og_description":"Salesforce Custom Report Types explained: primary objects, with or without related records, lookup fields and deployment, with a hands-on courses example.","og_url":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/","og_site_name":"Swapnil Zambare - Blog","article_published_time":"2026-06-17T03:30:00+00:00","og_image":[{"width":2400,"height":1260,"url":"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-featured.png","type":"image\/png"}],"author":"Swapnil Zambare","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Swapnil Zambare","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/#article","isPartOf":{"@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/"},"author":{"name":"Swapnil Zambare","@id":"https:\/\/swapnilzambare.com\/blog\/#\/schema\/person\/922ac0131aaa7088c78c2cb1700e0c9a"},"headline":"Salesforce Custom Report Types: A Step by Step Guide","datePublished":"2026-06-17T03:30:00+00:00","mainEntityOfPage":{"@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/"},"wordCount":1565,"publisher":{"@id":"https:\/\/swapnilzambare.com\/blog\/#organization"},"image":{"@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/#primaryimage"},"thumbnailUrl":"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-featured.png","keywords":["Intermediate","Report Types","Reports","Salesforce"],"articleSection":["Advanced Admin","Salesforce","Salesforce Admin"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/","url":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/","name":"Salesforce Custom Report Types: Step by Step","isPartOf":{"@id":"https:\/\/swapnilzambare.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/#primaryimage"},"image":{"@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/#primaryimage"},"thumbnailUrl":"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-featured.png","datePublished":"2026-06-17T03:30:00+00:00","description":"Salesforce Custom Report Types explained: primary objects, with or without related records, lookup fields and deployment, with a hands-on courses example.","breadcrumb":{"@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/#primaryimage","url":"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-featured.png","contentUrl":"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/10\/salesforce-custom-report-types-featured.png","width":2400,"height":1260,"caption":"Salesforce Custom Report Types featured image: objects, relationships and field layout"},{"@type":"BreadcrumbList","@id":"https:\/\/swapnilzambare.com\/blog\/salesforce-custom-report-types\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/swapnilzambare.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Salesforce Custom Report Types: A Step by Step Guide"}]},{"@type":"WebSite","@id":"https:\/\/swapnilzambare.com\/blog\/#website","url":"https:\/\/swapnilzambare.com\/blog\/","name":"Swapnil Zambare - Blog","description":"Salesforce &amp; Tech Guides","publisher":{"@id":"https:\/\/swapnilzambare.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/swapnilzambare.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/swapnilzambare.com\/blog\/#organization","name":"Swapnil Zambare - Blog","url":"https:\/\/swapnilzambare.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/swapnilzambare.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/09\/site-icon-512.png","contentUrl":"https:\/\/swapnilzambare.com\/blog\/wp-content\/uploads\/2026\/09\/site-icon-512.png","width":512,"height":512,"caption":"Swapnil Zambare - Blog"},"image":{"@id":"https:\/\/swapnilzambare.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/in\/theSwapnilZambare"]},{"@type":"Person","@id":"https:\/\/swapnilzambare.com\/blog\/#\/schema\/person\/922ac0131aaa7088c78c2cb1700e0c9a","name":"Swapnil Zambare","sameAs":["https:\/\/swapnilzambare.com\/blog"],"url":"https:\/\/swapnilzambare.com\/blog\/author\/swapnil-zambare\/"}]}},"_links":{"self":[{"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/posts\/678","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/comments?post=678"}],"version-history":[{"count":0,"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/posts\/678\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/media\/656"}],"wp:attachment":[{"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/media?parent=678"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/categories?post=678"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/tags?post=678"},{"taxonomy":"swapz_series","embeddable":true,"href":"https:\/\/swapnilzambare.com\/blog\/wp-json\/wp\/v2\/swapz_series?post=678"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}