Standard Report Types are templates that ship with Salesforce — predefined object combos like “Accounts with Contacts” — and you cannot edit them. Custom Report Types are admin-built — you choose the objects, the join semantics, and the field set yourself. Custom types are how you expose your own custom objects to the report builder.
Side-by-side
| Standard Report Type | Custom Report Type | |
|---|---|---|
| Created by | Salesforce (ships in every org) | Admin / developer in your org |
| Editable? | No | Yes — fully |
| Objects covered | Standard objects + some auto-generated for custom objects (limited) | Any combination of standard + custom objects |
| Join cardinality | Fixed (usually “with”) | “With” or “with or without” — your choice |
| Field set | All fields exposed | You curate which fields are pickable |
| Levels of relationship | Up to 4 | Up to 4 |
| Naming | Salesforce-default | Your choice |
| Org limit | Unlimited (just there) | Up to 2,000 custom report types |
| Use case | Quick standard reports | Custom objects, custom joins, curated field sets |
When to use Standard
- Quick report on a standard object — “all opportunities by stage”, “all cases by owner”
- Standard relationships covered by what ships (“Accounts with Contacts”, “Opportunities with Products”)
- No need to control the field picker
When to use Custom
- Reporting on a custom object that doesn’t have a standard report type
- You need a relationship the standard type doesn’t model:
- “Accounts with or without Opportunities” — outer join semantics
- Three or four objects deep — “Account → Opportunity → OpportunityLineItem → Product2”
- You want to hide noisy fields from the column picker for end users
- You need a specific default sort or columns for a team
Example: same goal, two paths
Goal: Show every Account, plus their open Opportunities or “(none)” if they have no open Opps.
| Approach | Result |
|---|---|
| Standard “Accounts with Opportunities” | Inner join — Accounts with zero Opps are missing |
| Custom “Accounts with or without Opportunities” | Outer join — Accounts with zero Opps appear with null Opp fields |
Building a Custom Report Type (quick steps)
- Setup → Report Types → New
- Primary object (e.g. Account)
- Add related objects (e.g. Opportunity) — pick “with or without”
- Pick a category folder and label
- Set to Deployed when ready
- Edit Layout — drag fields into the column picker; add Lookup fields from related records
- Run a report — your custom report type now appears in the picker
Performance considerations
Custom report types with 3-4 levels of relationships and millions of records will be slow. Optimisations:
- Selective filters — always filter on indexed fields (Id, Owner, CreatedDate, External Id)
- Curate the field set — don’t expose 500 columns to users
- Folder strategy — make CRTs discoverable so reps don’t duplicate them
Common follow-ups
- Can I convert a standard report into a custom report type? — Not directly. Build the custom type, then recreate the report on top of it.
- Why don’t I see my custom object in standard report types? — Custom objects only get auto-generated types in limited cases; build a custom report type.
- Custom report type limit? — Up to 2,000 per org in Enterprise/Unlimited.
Verified against: Salesforce Help — Standard and Custom Report Types. Last reviewed 2026-05-17 for Spring ‘26.