Metadata reference
- Custom & Standard Objects
- Fields
- Profiles
- Permission Sets
- Flows
- Validation Rules
- Reports
- Setup Audit Trail
- Apex Classes
- Apex Triggers
- Dashboards
- Roles
- Workflow Rules
- Approval Processes
- Connected Apps
- External Client Apps
- Named Credentials
- Remote Site Settings
- Record Types
- Permission Set Groups
- Muting Permission Sets
- Custom Settings
- Global Value Sets
- Field Sets
- List Views
- Sharing Rules
- Auth Providers
- Quick Actions
- Custom Tabs
- Custom Applications
- Custom Metadata Types
- Report Types
- Page Layouts
- Lightning Pages
- Assignment Rules
- Lightning Web Components
- Aura Components
- Email Templates
- Public Groups
- Queues
- Custom Labels
Custom & Standard Objects
A Salesforce object is a database table — Accounts, Contacts, or any __c custom object your org defines. MetaSync documents each object’s attributes, its full field inventory (custom and standard), record types, relationships to other objects, page layouts, and what elsewhere in the org references it.
- Scope group — Schema
- Extracted via — jsforce
conn.describe(objectName)for the object and its fields, record types and child relationships; a single Metadata APImetadata.list('Layout')for page layouts; Tooling APIEntityDefinition(SOQL) for the sharing model and deployment status; and Tooling APIFieldDefinition(SOQL) to enrich each field with Data Classification (PII / security classification). The object list itself comes fromdescribeGlobal().
Synced from Salesforce
Attribute table of the object’s core metadata.
| Column | Meaning |
|---|---|
| Label | Singular UI label. |
| Plural label | Plural UI label. |
| API name | Object API name (e.g. Account, Longevity_Assessment__c). |
| Type | Custom or Standard. |
| Key prefix | 3-character record-ID prefix, or — if none. |
| Sharing model (internal) | Org-wide default sharing for INTERNAL users (from EntityDefinition). Reads “Not captured” when that enrichment failed for the sync — never a guessed default, because a fabricated Private on a sharing row is exactly the kind of false assurance an auditor would act on. See “Not captured” on published pages. |
| Sharing model (external) | Org-wide default sharing for EXTERNAL users — Experience Cloud / portal / guest. This is a different question from the internal default and the two frequently disagree, which is why both are published. “Not captured” when the enrichment failed. |
| Deployment status | Deployed / InDevelopment (from EntityDefinition), or “Not captured” when the enrichment failed — never a guessed Deployed. |
| History tracking | ✓ Enabled or ✗ Disabled, measured from the org (EntityDefinition). Reads “Not captured” only when that source was unavailable during the sync — a measured “off” really is off. See “Not captured” on published pages. |
| Record types | Count of record types on the object. |
| Last modified | Date and time of last modification, in the configured display timezone (Connections → Date & time zone), or “Not captured” when the EntityDefinition enrichment that carries it failed. |
Description
Info panel with the object description. Appears when: the object has a description.
Computed by MetaSync
Stat row (Total fields · Custom fields · Documented n/total · Record types · Child objects) followed by a documentation-coverage badge line. “Documented” counts fields having a description or help text.
Custom fields
Table of every custom field. See Fields for column-by-column detail — the columns are Label / API name / Type / Length / Req / (PII) / Description / help. The PII column appears only when at least one field in the set is classified.
| Column | Meaning |
|---|---|
| Label | Field UI label. |
| API name | Field API name in code. |
| Type | Data type; reference types show → Object, formulas show Formula (type), global value sets show [SetName], and picklist values are listed inline (first 10, then “+N more”). Object fields always carry a type (describe() supplies it), but this same table also renders the FieldDefinition-sourced fields of Custom Metadata Types and Custom Settings: a row that arrives with no DataType reads “Not captured” and carries none of the decorations above, because each of them qualifies a type that was never measured. Such a field is also counted as neither encrypted nor unencrypted. See “Not captured” on published pages. |
| Length | Field length, or —. |
| Req | ✓ if required, else —. |
| PII | PII badge (with compliance group) or Data Classification badge; only present when the set has classified fields. |
| Description / help | Description or help text; a yellow “Undocumented” badge when neither exists. |
Standard fields
Same table as Custom fields but wrapped in a collapsed expand block titled “Standard fields (N)”. Appears when: the object has at least one standard field.
Record types
Table of the object’s record types. Appears when: the object has record types.
| Column | Meaning |
|---|---|
| Name / Developer name | Record-type name with its developer name below. |
| Status | Green “Active” or grey “Inactive” badge. |
| Default | ✓ if this is the default record-type mapping, else —. |
Related objects
Child relationships (only those with a relationship name). Appears when: the object has named child relationships (capped at 30).
| Column | Meaning |
|---|---|
| Child object | Related child object (a page link when known, else code). |
| Field | The lookup/master-detail field on the child, in code. |
| Relationship name | The child relationship API name, in code. |
Page layouts
Bulleted list of the object’s page-layout names. Appears when: the object has page layouts.
Automation on this object
Table of the automation that runs on this object — flows triggered on it, validation rules, workflow rules, approval processes, assignment rules and Apex triggers — each a page link. Appears when: automation edges exist (from the dependency graph; completes on the second sync).
Defined on this object
Table grouping the components configured on this object — Page Layouts, Quick Actions, List Views, Field Sets, Custom Tabs and Sharing Rules — each a navigable page link. This turns the object page into a hub for everything defined on it, not just what references it. Appears when: any of those components name this object (from the persisted object-hub back-index; completes on the second sync, and a full rewrite is triggered automatically the first time it populates).
Referenced by
Components that reference this object — flows triggered on it, validation rules that validate it, and lookup references from other objects (from the dependency index). Appears when: reference edges exist (capped at 50, with a “Showing X of Y” note).
| Column | Meaning |
|---|---|
| Component type | Type of the referencing component (Flow, ValidationRule, etc.). |
| Name | Referencing component (page link when known, else code). |
| Relationship | Human-readable relationship label (e.g. “triggered on”, “validates”). |
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it. A MetaSync-issued data repair (a purge) can reset recorded history; where that has happened the section says so on the page instead of reading as though nothing ever changed.
Limits & truncation
- Related objects: first 30 named child relationships.
- Referenced by: first 50 edges (with a “Showing X of Y” note).
- Inline picklist values in the field table: first 10 per field, then “+N more”.
Fields
A field is a single column on a Salesforce object (a text box, picklist, lookup, formula, etc.). MetaSync gives each field its own detail page with type, constraints, default value, Data Classification (PII / compliance), formula source, picklist values, and where the field is used. Fields are also summarised inline on their object’s object page.
- Scope group — Schema
- Extracted via — jsforce
conn.describe(objectName)supplies the field’s shape (type, length, precision/scale, required, unique, external ID, default, references, picklist labels, help text, encrypted). Field descriptions are not returned by describe(). Data Classification (securityClassification,complianceGroup,businessStatus, and the derivedpiilevel) comes from the Tooling APIFieldDefinitionobject. Three further attributes exist only in the Metadata APICustomObjectblob, which describe() does not expose: the roll-up summary definition (operation, summarised field, foreign key, filter criteria), the lookup filter, and per-field history tracking. A field whose object metadata could not be read is marked accordingly, so the page never claims a lookup is unfiltered or a summary has no definition — see “Not captured” on published pages.
Synced from Salesforce
Attribute table. Rows are conditional — only attributes that apply to the field render. The page heading also carries a PII badge when the field is classified.
| Column | Meaning |
|---|---|
| Object | Owning object label and API name. |
| Label | Field UI label. |
| API name | Field API name in code. |
| Type | Data type; reference types append → Object, formulas show Formula (type), global value sets append [SetName]. |
| Length | Field length. Appears only when set. |
| Precision / scale | For numeric fields, precision, scale. Appears only when precision is set. |
| Required | ✓ Yes or ✗ No — a measured false is stated, never left as a dash. |
| Unique | ✓ Yes or ✗ No. |
| External ID | ✓ Yes or ✗ No. |
| Field history tracking | ✓ Tracked, ✗ Not tracked, “Not applicable” when the object does not track history at all, or “Not captured”. Salesforce omits the attribute entirely unless object history tracking is on, so the four states are genuinely different answers. |
| Default value | Default value in code. Appears only when non-empty. |
| References | Target object(s) for lookup/master-detail fields. Appears only for reference fields. |
| Global value set | Global value set name in code. Appears only when the picklist uses one. |
| Relationship name | Relationship API name in code. Appears only when set. |
| Delete constraint | Restrict / Cascade / SetNull behaviour. Appears only when set. |
| Encrypted | ✓ Yes. Appears only when the field is encrypted. |
| Security classification | Data-classification badge + value (Public/Internal/Confidential/Restricted/MissionCritical). Appears only when classified. |
| Compliance group | Org-defined compliance tag(s), e.g. “PII;GDPR”. Appears only when set. |
| Business status | Active / DeprecateCandidate / Hidden. Appears only when set. |
Description
Info panel with the field description. Appears when: the field has a description.
Help text (shown in UI)
Note panel with the field’s inline help text. Appears when: the field has help text.
Formula
Code block (SQL syntax) with the field’s formula source. Appears when: the field is a formula field.
Roll-up summary
What the roll-up aggregates: the Operation (SUM / MIN / MAX / COUNT), the Field summarised (the child field, linked to its own page when it is in scope), and the child relationship it Rolls up through. Any filter criteria follow as a Field / Operator / Value table; when there are none the section says every related child record is included. A COUNT roll-up has no summarised field and reads child records (row count). If Salesforce reports the field as a summary but the object’s metadata could not be read, the section says “Not captured” rather than implying the roll-up has no definition. See “Not captured” on published pages. Appears when: the field is a roll-up summary. Not rendered at all for other field types.
Lookup filter
Status (active/inactive), Enforcement (Required — values outside the filter are rejected; Optional — users may save an excluded value), Filter logic (the boolean expression, or all-AND), then the criteria as a Field / Operator / Value table. A criterion comparing to another field shows that field marked (field) rather than a blank value. The admin-facing error message is shown when one is set. A lookup on an object whose metadata could not be read says the filter is “Not captured” — it never claims the lookup is unfiltered. Appears when: the field is a lookup/reference AND has a filter (or its metadata was unavailable).
Picklist values
One-column table listing every picklist value. Appears when: the field is a picklist with values.
| Column | Meaning |
|---|---|
| Value | One picklist value per row, in code. |
Computed by MetaSync
Stat row: Documentation (Full/Partial/None) · Field type · Custom (Yes/No) · Formula (Yes/No) · PII (level or None) · Picklist values count. A warning panel follows when the field has neither description nor help text.
Referenced by
Components that reference this field, from the dependency index: flows and validation rules, the page layouts / list views / field sets that carry it, Apex and LWC that read it, and — for a field feeding a roll-up summary or tested by a lookup filter — the field that depends on it (rolls up this field / lookup filter tests this field). Appears when: reference edges exist (capped at 50, with a “Showing X of Y” note).
| Column | Meaning |
|---|---|
| Component type | Type of the referencing component. |
| Name | Referencing component (page link when known, else code). |
| Relationship | How that component uses the field — e.g. displays, lists, includes, rolls up this field, lookup filter tests this field. |
Field-level access
Which profiles and permission sets may READ and which may EDIT this field — the reverse of the grant shown on each profile / permission-set page. Renders “Not captured” when the access index has not been populated, never a false “nobody has access”.
| Column | Meaning |
|---|---|
| Read & edit | Count, then the profiles and permission sets granting both read and edit. |
| Read only | Count, then those granting read without edit. |
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Limits & truncation
- Referenced by: first 50 edges (with a “Showing X of Y” note).
Profiles
A profile is a baseline set of permissions every assigned user inherits — which objects and fields they can read/edit, which system permissions they hold, and which apps and tabs they see. MetaSync renders the profile as an access matrix and flags high-privilege grants for reviewers.
- Scope group — Security & Access
- Extracted via — jsforce SOQL. Profiles come from
Profile; because object/field permissions are stored against the profile-ownedPermissionSet(IsOwnedByProfile = true), MetaSync resolves that PermissionSet ID then bulk-queriesObjectPermissions,FieldPermissions(only where read or edit is granted) and the enabled system permissions (PermissionSet*boolean fields). Uses the shared Pattern E permissions layout.
Header stat row
Stat row at the top: Assigned users · User type · Object permissions count · Field permissions count. Assigned users is a measured figure — a real 0 means nobody holds the profile — but reads “Not captured” when the active-user count query failed, so a failure can never be mistaken for an unassigned profile. See “Not captured” on published pages.
Description
Info panel with the profile description. Appears when: the profile has a description.
High-privilege permissions — review required
Red-bordered callout listing high-privilege grants: Modify All Data, View All Data, Manage Users, Author Apex, Modify Metadata, Manage Profiles & Permission Sets, plus an “Object-level View/Modify All” badge when any object grants those. Appears when: the profile enables at least one high-privilege system or object permission.
Object permissions
Matrix of objects the profile can access (objects with no explicit permission are omitted). A note gives the count shown. Renders a “No explicit object permissions granted” note when empty.
| Column | Meaning |
|---|---|
| Object | Object API name in code. |
| Read | ✓ / —. |
| Create | ✓ / —. |
| Edit | ✓ / —. |
| Delete | ✓ / —. |
| View All | ✓ / — (View All Records). |
| Modify All | Red ✓ badge (Modify All Records) or —. |
Field permissions (restricted)
At-a-glance risk view listing only fields that are NOT editable. Renders a “No fields with restricted access” note when empty.
| Column | Meaning |
|---|---|
| Field | Field API name in code. |
| Access | Red “Hidden” (not readable) or yellow “Read only” badge. |
All field permissions (expand)
Collapsed expand “All field permissions (N)” with the full Read/Edit matrix, sorted by field name — so “can this profile edit field X” is answerable for granted fields too. Appears when: the profile has any field permissions.
| Column | Meaning |
|---|---|
| Field | Field API name in code. |
| Read | ✓ / —. |
| Edit | ✓ / —. |
System permissions
Collapsed expand “System permissions (N enabled of the high-interest set MetaSync checks)” listing the enabled permissions from a curated set of 14 high-interest system permissions (Modify All Data, View All Data, Manage Users, Author Apex, Modify Metadata, Manage Profiles and Permission Sets, API Enabled, Run Reports, Manage Reports, View Setup and Configuration, Weekly Data Export, Manage Data Integrations, Customize Application, Create and Customize Reports), sorted; high-privilege rows keep a red badge. Editions that do not expose a column are checked against the columns they do expose. This is not the full permission list — Salesforce defines several hundred. Appears when: always. When none of the checked permissions is enabled the section says so.
| Column | Meaning |
|---|---|
| Permission | Permission label; high-privilege permissions render as a red badge. |
| API name | The Permissions* API name in code. |
Apex class access
Always rendered, in one of three states. Grants are read from SetupEntityAccess (type ApexClass) and listed as the enabled class names. A profile with grants shows the bulleted class list; a profile MetaSync measured and found no grants on shows “No Apex classes explicitly enabled.”; and only when the SetupEntityAccess query itself failed for the run (some orgs restrict it) does the section read “Not captured” and point to Setup → the profile → Apex Class Access. It is rendered rather than omitted on purpose: a missing section on a compliance page reads as “this profile grants no Apex access”, a false negative an auditor would rely on. See “Not captured” on published pages.
Tab visibility
Always rendered, same three states. Tab settings are read from PermissionSetTabSetting and listed as tab name — visibility (DefaultOn / DefaultOff / Hidden). Hidden tabs are listed too — an explicitly hidden tab is a restriction, not noise. Measured-empty reads “No explicit tab visibility settings.”; a failed query reads “Not captured” and points to Setup → Object Settings.
App access
Always rendered, same three states. App grants are read from SetupEntityAccess (type TabSet — how Salesforce models app visibility) and resolved to app labels via AppMenuItem. Measured-empty reads “No apps explicitly assigned.”; a failed query reads “Not captured” and points to Setup → Assigned Apps.
Explicit-only note
Closing note clarifying that only explicitly configured permissions are shown — access via org-wide defaults or record ownership is not listed.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
“Not captured” footnote
Appears whenever any section on the page emitted the marker (e.g. an access-grant source that failed for the run), closing with the explanation that it means MetaSync couldn’t collect the detail — not that the org grants none. Pages where every source was captured carry no footnote. See “Not captured” on published pages.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table. Seeded once below the Team Notes heading when the page is created and never rewritten, so it sits outside the managed region and your edits survive every sync. See Managed regions & team annotations.
Limits & truncation
- Apex class access, tab visibility and app access are each extracted best-effort: if the org restricts the
SetupEntityAccess/PermissionSetTabSettingquery, that section renders the not-captured marker for the run (never a false “none”) and self-heals on the next sync that can read it. - Two profiles may share a Name (Salesforce does not enforce uniqueness). Each still gets its own page — the colliding twins are disambiguated by profile Id, e.g.
Profile: Authenticated Website (00e…)— so neither is collapsed onto the other and the index counts both.
Permission Sets
A permission set is a bundle of extra permissions assignable on top of a user’s profile, without changing the profile itself. MetaSync documents each set with the same access-matrix layout as profiles, plus its assigned-user count.
- Scope group — Security & Access
- Extracted via — jsforce SOQL against
PermissionSetwhereIsOwnedByProfile = false(namespaced managed-package sets excluded by default unless “include managed package” is on), then bulk queries ofObjectPermissions,FieldPermissions(read/edit granted only),PermissionSetAssignment(for the assigned-user count) and enabled system permissions. Uses the shared Pattern E permissions layout.
API name line
Directly under the heading: API name: <code> plus a Custom or Standard / managed marker. The heading itself is the permission set’s label, and Salesforce does not make labels unique — the API name is the only thing on the page that identifies which set you are reading.
Header stat row
Stat row: Assigned users · User type (— for permission sets) · Object permissions count · Field permissions count. Assigned users is a measured count here — a 0 genuinely means nobody holds the set (if the assignment query fails, the whole permission-set extraction fails rather than reporting a false zero).
Assigned users
Collapsed expand “Assigned users (N)” listing the assignee display names, with a “Showing X of N assignees.” line when the captured list is shorter than the real count. Appears when: assignee names were captured for the set.
Description
Info panel with the permission-set description. Appears when: the set has a description.
High-privilege permissions — review required
Same red callout as profiles: Modify/View All Data, Manage Users, Author Apex, Modify Metadata, Manage Profiles & Permission Sets, plus object-level View/Modify All. Appears when: the set enables at least one high-privilege permission.
Object permissions
Same object-permission matrix as Profiles (objects with no explicit permission omitted).
| Column | Meaning |
|---|---|
| Object | Object API name in code. |
| Read | ✓ / —. |
| Create | ✓ / —. |
| Edit | ✓ / —. |
| Delete | ✓ / —. |
| View All | ✓ / —. |
| Modify All | Red ✓ badge or —. |
Field permissions (restricted)
Non-editable fields only (Hidden / Read only badges).
| Column | Meaning |
|---|---|
| Field | Field API name in code. |
| Access | Red “Hidden” or yellow “Read only” badge. |
All field permissions (expand)
Collapsed full Read/Edit matrix, sorted by field name. Appears when: the set has any field permissions.
| Column | Meaning |
|---|---|
| Field | Field API name in code. |
| Read | ✓ / —. |
| Edit | ✓ / —. |
System permissions
Collapsed expand “System permissions (N enabled of the high-interest set MetaSync checks)” listing the enabled permissions from a curated set of 14 high-interest system permissions (Modify All Data, View All Data, Manage Users, Author Apex, Modify Metadata, Manage Profiles and Permission Sets, API Enabled, Run Reports, Manage Reports, View Setup and Configuration, Weekly Data Export, Manage Data Integrations, Customize Application, Create and Customize Reports), sorted; high-privilege rows keep a red badge. Editions that do not expose a column are checked against the columns they do expose. This is not the full permission list — Salesforce defines several hundred. Appears when: always. When none of the checked permissions is enabled the section says so.
| Column | Meaning |
|---|---|
| Permission | Permission label; high-privilege as a red badge. |
| API name | The Permissions* API name in code. |
Apex class access · Tab visibility · App access
Three sections that always render, exactly as on Profiles: Apex class grants from SetupEntityAccess (type ApexClass), app grants from SetupEntityAccess (type TabSet, resolved to app labels via AppMenuItem), and tab settings from PermissionSetTabSetting (hidden tabs listed too). Each has three states — the grants themselves, an explicit “No … “ line when MetaSync measured and found none, or “Not captured” only when that source’s query failed for the run. They are rendered rather than omitted because a missing section reads as “this set grants no Apex or app access” — a false negative on a compliance page. See “Not captured” on published pages.
Explicit-only note
Closing note that only explicitly configured permissions are shown.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
“Not captured” footnote
Appears whenever any section on the page emitted the marker (e.g. an access-grant source that failed for the run), closing with the explanation that it means MetaSync couldn’t collect the detail — not that the org grants none. Permission-set pages where every source was captured carry no footnote, so on a healthy sync most of them have none. Same conditional rule as Profiles. See “Not captured” on published pages.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table. Seeded once below the Team Notes heading at page creation and never rewritten, so it sits outside the managed region. See Managed regions & team annotations.
Limits & truncation
- Managed-package (namespaced) permission sets are excluded by default; the admin “include managed package” toggle includes them.
- Apex class access, tab visibility and app access are extracted best-effort per source: a query the org rejects renders the not-captured marker for the run (never a false “none”) and self-heals on the next sync that can read it.
- Assignee display names are captured for the first 50 assignees per set; the count itself is the full total, and the expand says “Showing X of N assignees.”
Flows
A Flow is Salesforce’s point-and-click automation — it runs logic when records change, on a schedule, or from a screen. MetaSync documents each Flow’s trigger, status and version, its ordered logic steps (elements), and which objects and fields it touches.
- Scope group — Automation
- Extracted via — jsforce Tooling API.
FlowDefinitionsupplies the label, developer name, description and active/latest version IDs (status is derived: active version present → Active).ProcessTypeis enriched from theFlowversion object. Each Flow’s elements come from the version’s compoundMetadatafield (Tooling). Uses the shared Pattern C automation layout.
Synced from Salesforce
Attribute table of Flow metadata.
| Column | Meaning |
|---|---|
| Process type | e.g. AutoLaunchedFlow, Flow (screen), etc. |
| Trigger | Trigger type (RecordAfterSave, Scheduled, etc.) or “None”. |
| Trigger object | Object the Flow is triggered on (page link when known), else —. |
| Run timing | Before/after-save timing, or —. |
| Status | Green “Active” or grey badge. |
| API version | Flow API version (e.g. 64), read from the flow’s version record. Standard system flows that declare no version — and syncs where the version lookup failed — read “Not captured”. See “Not captured” on published pages. |
| Active version | Active version number, or —. |
| Elements | Count of flow elements extracted. |
| Last modified | Absolute date/time of last modification, rendered in the configured site timezone (published pages never use relative phrasing — a snapshot that says “3 days ago” is wrong the day after the sync). |
| Modified by | User who last modified the Flow, or —. |
Purpose / Description
Info panel with the Flow description. Appears when: the Flow has a description.
Logic steps
Ordered list of the Flow’s elements. Each item reads “Type: Label” then any referenced object, referenced fields (first 5, then “+N more”) and the element detail. Falls back to “No flow elements extracted.” when none.
Variables (N)
A collapsed block inside the flow-logic tree listing the Flow’s declared variables — each as name — type, with the type parameterised by object for record variables, and an italic note marking a variable as collection, input and/or output. Collapsed because variables support the logic rather than drive it. Appears when: the Flow’s version metadata was read and it declares at least one variable.
References
Bulleted list of objects and fields the Flow references (page links when known). Bare field names are qualified against the trigger object. Appears when: the Flow references any objects or fields.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Limits & truncation
- Per-element referenced fields shown inline: first 5, then “+N more”.
Validation Rules
A validation rule blocks a record from saving when its error-condition formula evaluates true, showing an error message. MetaSync publishes validation rules two ways: a per-object rollup page indexing every rule on one object, and a per-rule detail page carrying the formula and error message. Every rule gets a detail page; the rollup links to them.
- Scope group — Schema
- Extracted via — jsforce Tooling API
ValidationRule(Id, ValidationName, EntityDefinitionId, Active, ErrorMessage, Description, LastModified). Object names are bulk-resolved viaEntityDefinition. The formula and error-display field live in each rule’s compoundMetadatafield, fetched per rule (batched).
Per-object rollup page — header & stats
The grouped page “Validation Rules:
Per-object rollup page — rule index table
An index TABLE, one row per rule, each Name cell linking to that rule’s own detail page. The rollup is a way in, not a substitute for the detail pages: the error message, the error-display field and the error-condition formula live on the per-rule page described below, and Team annotations and Change history live there too.
| Column | Meaning |
|---|---|
| Name | Rule label, linking to the per-rule detail page. |
| API name | The rule’s ValidationName, as a code chip. |
| Subtype | The object the rule is on — carried by every validation-rule row, so this column always renders (it is what groups the rollup). |
| Status | Active / Inactive badge. |
| Has description | Green “Described” or yellow “No description” badge — whether the rule has a Description filled in Salesforce. |
| Last modified | Absolute date/time of last modification, in the configured site timezone; “Not captured” when this run read no date. |
Per-rule detail page — Synced from Salesforce
The standalone per-rule page (Pattern C) opens with an attribute table.
| Column | Meaning |
|---|---|
| Object | Object the rule validates (page link when known). |
| Active | Green “Active” or grey “Inactive” badge. |
| Error field | Field the error displays on (in code), or “Page-level”. |
| Last modified | Absolute date/time of last modification, rendered in the configured site timezone (published pages never use relative phrasing — a snapshot that says “3 days ago” is wrong the day after the sync). |
| Modified by | User who last modified the rule, or —. |
Per-rule detail page — Description
Info panel with the rule description. Appears when: the rule has a description.
Per-rule detail page — Logic steps
Ordered list: the error-condition formula (as an inline code block), the error message, and where the error is displayed (field in code or “Page level”).
Per-rule detail page — Team annotations & Change history
The standard editable annotations table and change-history section.
Reports
A report is a saved Salesforce query with columns, filters and groupings, stored in a folder. MetaSync documents the report’s metadata and its column/filter/grouping structure — never the report results (that would be business data, which MetaSync never reads).
- Scope group — Analytics & Data
- Extracted via — jsforce SOQL against
Report(Id, Name, DeveloperName, FolderName, Format, Description, LastRunDate, LastModified, ReportType.Label), capped at 2000 rows. Columns, filters and groupings are NOT in that SOQL and are NOT read from the Metadata API —readMetadata('Report', …)returns empty skeletons. They come from the Analytics REST describe endpoint (/analytics/reports/<id>/describe), which returns the report’s definition only and never executes it, so no business rows are read. That enrichment is capped at the first 200 reports per run and can be refused per report (a folder the integration user cannot open); an un-enriched report keepsnullfor all three and its page renders “Not captured”, never a confident0. Uses the shared Pattern B detail layout.
Synced from Salesforce
Attribute table of report metadata.
| Column | Meaning |
|---|---|
| Developer name | Report API name in code. |
| Folder | Containing folder name (“Unfiled” when none). |
| Report type | Report type label (a page link when the report type is documented), or “Not captured” when SOQL returned none. |
| Format | Tabular / Summary / Matrix / Joined. |
| Columns | Count of columns, or “Not captured” when the Analytics describe was capped or refused for this report — never a fabricated 0. |
| Filters | Count of filters, or “Not captured” on the same terms as Columns. |
| Groupings | Count of groupings, or “Not captured” on the same terms as Columns. |
| Last run | Absolute date/time the report last ran, in the configured site timezone; “Never run” when Salesforce reports no run date. |
| Last modified | Absolute date/time of last modification, in the configured site timezone. |
| Modified by | User who last modified the report, or —. |
Description
Info panel with the report description. Appears when: the report has a description.
Columns
Bulleted list of column API names; wrapped in a collapsed expand “Columns (N)” when there are more than 40. Appears when: the report has columns (populated only when the Analytics REST describe succeeded for this report).
Filters
Table of the report’s filters. Appears when: the report has filters.
| Column | Meaning |
|---|---|
| Field | Filtered field API name in code. |
| Operator | Comparison operator (equals, contains, etc.). |
| Value | The filter value. |
Groupings
Bulleted list of grouping fields. Appears when: the report has groupings.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Limits & truncation
- Report list: capped at 2000 reports (single SOQL page).
- Column/filter/grouping detail: captured for the first 200 reports of the run via the Analytics REST describe. Beyond that cap — and for any report whose describe is refused — those three rows read “Not captured” and the Columns / Filters / Groupings sections do not render. The type index discloses how many reports were affected. See “Not captured” on published pages.
- Columns list: collapsed into an expand block when more than 40.
Setup Audit Trail
The Setup Audit Trail is Salesforce’s chronological log of configuration changes — who changed what, when. MetaSync publishes it as a Setup Audit Trail page so admins and auditors have a durable, exportable record of setup changes (config only, never record data).
- Scope group — Documentation
- Extracted via — jsforce SOQL against the
SetupAuditTrailstandard object (Id, CreatedDate, CreatedBy.Name, Action, Section, Display, DelegateUser) filteredLAST_N_DAYS:<n>(clamped 1–180, Salesforce’s retention window), newest first.
Setup Audit Trail header
Heading “Setup Audit Trail” with a grey “Last N days” badge and sync line, then a pointer note to the MetaSync Live View macro, then a note explaining the source (Setup Audit Trail — config changes only, ~180-day Salesforce retention, names shown for attribution).
Header stat row
Stat row: Changes · Users · Window (N days).
Configuration changes
The main table of audit entries. When the window has no changes, a “No configuration changes recorded in this window” note is shown instead.
| Column | Meaning |
|---|---|
| When | Absolute date/time of the change, rendered in the configured site timezone — a single line, with no second ISO line beneath it (published pages never use relative phrasing). |
| User | User who made the change; “via |
| Change | Category badge — created (green), changed (blue), deleted (red), other (grey) — derived from the raw action code. |
| Section | Setup area the change occurred in (e.g. “Customize Accounts”, “Flows”), or —. |
| Detail | Human-readable description of the change. |
Apex Classes
An Apex class is server-side Salesforce code. MetaSync documents each class with its API version, status, size, test coverage, covering test classes, parsed method signatures, the objects/fields it references, and its full source.
- Scope group — Automation
- Extracted via — jsforce Tooling API
ApexClass(Id, Name, ApiVersion, Status, LengthWithoutComments, Body, LastModified). Method signatures are parsed from the body; test coverage fromApexCodeCoverageAggregate; object/field references from the ToolingMetadataComponentDependencyobject. Uses the shared Pattern D code layout.
Header stat row
Heading with the class name and grey “ApexClass” badge, sync line, then a stat row: Test coverage (% or N/A) · Covering tests · Referenced by · Lines · Size (characters, excluding comments) · API version · Status. Lines and Size are two different facts and both are published: Salesforce’s LengthWithoutComments counts CHARACTERS, so it is labelled as such, while Lines is counted from the source body. Referenced by counts the components that reference this class — Apex, flows, Lightning components — and reads “Not captured” when the dependency index for the run was unavailable, rather than a measured 0. Size reads “Not captured” for a managed-package class, whose body Salesforce withholds.
Coverage badge & warning
A coverage badge (green ≥75%, yellow ≥50%, red below), followed by a warning panel when coverage is below the Salesforce 75% deployment threshold. Appears when: coverage data is available.
Purpose
Info panel with the class purpose/description. Appears when: a description is present.
Methods
Table of parsed method signatures (“No methods parsed.” when empty). Appears when: at least one method was parsed.
| Column | Meaning |
|---|---|
| Signature | Visibility, static if applicable, method name and parameters, in code. |
| Returns | Return type in code. |
Covering test classes
Bulleted list of the test classes that cover this class. Appears when: covering test classes are known.
References (objects & fields)
The objects and fields the class depends on (deduped, sorted), from MetadataComponentDependency. Objects and Fields render as two code-list paragraphs. Appears when: the class has known object/field references.
Source
Collapsed expand containing the full class body in a code block.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Limits & truncation
- MetadataComponentDependency does not paginate: object/field references are capped at one page (~2000 rows org-wide) — a warning is logged if the cap is hit.
Apex Triggers
An Apex trigger is code that runs automatically on record DML (insert/update/delete/undelete) for one object. MetaSync documents the trigger’s object, the DML events it handles, coverage, methods, references and source.
- Scope group — Automation
- Extracted via — jsforce Tooling API
ApexTrigger(Id, Name, TableEnumOrId, ApiVersion, Status, Body, LengthWithoutComments, LastModified). DML events are parsed from the body; coverage fromApexCodeCoverageAggregate; references fromMetadataComponentDependency. This page is a bespoke builder (not Pattern D) but closely mirrors it.
Header & object/events line
Heading with the trigger name and grey “ApexTrigger” badge, sync line, then a line showing the trigger’s object (in code) and its DML events as blue badges (before insert, after update, etc.).
Header stat row
Stat row: Test coverage (% or N/A) · Covering tests · Referenced by · Lines · Size (characters, excluding comments) · API version · Status. As on a class page, Lines and Size are separate facts — LengthWithoutComments counts CHARACTERS — and each reads “Not captured” rather than 0 when its source was unavailable for the run.
Coverage warning
Warning panel when coverage is below the 75% deployment threshold. Appears when: coverage data is present and below 75%.
Methods
Table of parsed method signatures. Appears when: at least one method was parsed.
| Column | Meaning |
|---|---|
| Signature | Visibility, static if applicable, method name and parameters, in code. |
| Returns | Return type in code. |
Covering test classes
Bulleted list of covering test classes. Appears when: covering test classes are known.
References (objects & fields)
Objects and fields the trigger references, from MetadataComponentDependency. Appears when: the trigger has known object/field references.
Source
Collapsed expand with the full trigger body in a code block.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Limits & truncation
- Object/field references share the MetadataComponentDependency single-page (~2000-row) cap with Apex classes.
Dashboards
A dashboard is a visual summary of one or more reports, run as a specific user. MetaSync documents the dashboard’s folder, running user and its component list (charts/tables and their source reports).
- Scope group — Analytics & Data
- Extracted via — jsforce SOQL against
Dashboard(Id, Title, DeveloperName, FolderName, Description, RunningUser.Name, LastModified, LastModifiedBy.Name). Component detail is not queried via SOQL, so the components list is empty unless populated from Metadata-API detail. Uses the shared Pattern B detail layout.
Synced from Salesforce
Attribute table of dashboard metadata.
| Column | Meaning |
|---|---|
| Developer name | Dashboard API name in code. |
| Folder | Containing folder name (“Unfiled” when none). |
| Running user | The user whose access the dashboard runs as, or —. |
| Components | Count of components. |
| Last modified | Absolute date/time of last modification, rendered in the configured site timezone (published pages never use relative phrasing — a snapshot that says “3 days ago” is wrong the day after the sync). |
| Modified by | User who last modified the dashboard, or —. |
Description
Info panel with the dashboard description. Appears when: the dashboard has a description.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Components
Table of the dashboard’s components. Appears when: the dashboard has components (populated only when Metadata-API detail is available).
| Column | Meaning |
|---|---|
| Title | Component title. |
| Type | Component type (chart type, table, metric, etc.). |
| Source report | The report feeding the component, in code, or —. |
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Roles
A role is a node in the Salesforce role hierarchy that controls record-level visibility up the chain. MetaSync documents each role’s place in the hierarchy (parent, children), its assigned-user count, and (on the index) the whole hierarchy as a tree.
- Scope group — Security & Access
- Extracted via — jsforce SOQL against
UserRole(Id, Name, DeveloperName, ParentRoleId, RollupDescription — used as the description since UserRole has no Description column). Assigned-user counts come from an aggregateUserquery grouped by UserRoleId. Uses the shared Pattern B detail layout.
Synced from Salesforce
Attribute table of role metadata.
| Column | Meaning |
|---|---|
| Developer name | Role API name in code. |
| Parent role | Parent role in code, or “— (top of hierarchy)”. |
| Assigned users | Count of active users assigned this role. A real 0 means nobody holds the role; the detail page and the Roles index read “Not captured” when the aggregate user-count query failed for that sync, rather than asserting 0. See “Not captured” on published pages. |
| Child roles | Count of direct child roles. |
Description
Info panel with the role’s rollup description. Appears when: the role has a description.
Child roles (expand)
Collapsed expand “Child roles (N)” listing the direct child role names in code. Appears when: the role has child roles.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Workflow Rules
A workflow rule is legacy Salesforce automation that fires actions (field updates, email alerts, tasks, outbound messages) when its criteria are met. MetaSync documents the rule’s object, trigger type, criteria/formula and its actions.
- Scope group — Automation
- Extracted via — jsforce Tooling API
WorkflowRule(Id, Name, TableEnumOrId, LastModified) for the queryable fields; Active, TriggerType, description, criteria/formula and actions live in the compoundMetadatafield, fetched per rule (batched). Uses the shared Pattern C automation layout.
Synced from Salesforce
Attribute table of workflow-rule metadata.
| Column | Meaning |
|---|---|
| Object | Object the rule runs on, in code. |
| Active | ✓ if active, else —. |
| Trigger type | When the rule evaluates (onCreateOnly, onAllChanges, etc.); “Unknown” if the Metadata fetch failed. |
| Immediate actions | Count of actions the rule fires as soon as its criteria are met. |
| Time triggers | Count of time-dependent action groups scheduled by the rule. |
| Last modified | Absolute date/time of last modification, rendered in the configured site timezone (published pages never use relative phrasing — a snapshot that says “3 days ago” is wrong the day after the sync). |
Purpose / Description
Info panel with the rule description. Appears when: the rule has a description.
Logic steps
The rule’s trigger condition followed by its actions, in the Pattern C logic section. A rule with an evaluation formula shows it as a code block. A rule with criteria shows a numbered table — #, Field, Operator, Value — followed by a Filter logic: line carrying the rule’s custom logic expression (for example 1 OR 2) when it defines one. A rule whose criteria could not be read says No criteria captured, rather than presenting an empty table as a rule that matches everything. Below that, Immediate actions as a bulleted <type>: <name> list, then one Time-triggered actions heading per time trigger, each captioned with its offset (for example “3 Days after rule trigger date”) and carrying its own bulleted action list.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Approval Processes
An approval process routes a record through one or more approval steps with assigned approvers and entry criteria. MetaSync documents the process’s object, active state, step count, and (where available) its steps, entry criteria and final actions.
- Scope group — Automation
- Extracted via — jsforce SOQL against
ProcessDefinitionwhereType = 'Approval'(Id, Name, DeveloperName, State, TableEnumOrId, Description, LastModified). Active is derived fromState = 'Active'. Step-level detail, entry criteria and final actions are not populated from SOQL (they arrive empty); the submitter, editability, email-template and automated-approver rows come from the Metadata API read. Uses the shared Pattern C automation layout.
Synced from Salesforce
Attribute table of approval-process metadata.
| Column | Meaning |
|---|---|
| Object | Object the approval process is defined on, in code. |
| Active | ✓ if active (State = Active), else —. |
| Steps | Count of approval steps. |
| Allowed submitters | Who may submit a record for approval, as code chips, or — when the process names none. |
| Record editability | Whether a record locked for approval stays editable, and by whom. |
| Approval email template | The email template sent with approval requests (page link when that template is documented). |
| Automated approver | The field the next approver is derived from automatically, or —. |
| Last modified | Absolute date/time of last modification, rendered in the configured site timezone (published pages never use relative phrasing — a snapshot that says “3 days ago” is wrong the day after the sync). |
Purpose / Description
Info panel with the process description. Appears when: the process has a description.
Logic steps
Ordered list: the entry criteria (or “No entry criteria”), then one item per step (“Step
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Connected Apps
A connected app is an external application integrated with Salesforce via OAuth. MetaSync documents its OAuth configuration for security review — while masking all secrets (consumer keys are never written to Confluence).
- Scope group — Integration
- Extracted via — Two sources, joined. jsforce Tooling API
ConnectedApplicationsupplies Id, Name, Description and LastModified — that object exposes no Label column, so Name doubles as the label. The OAuth configuration comes from a Metadata API read ofConnectedApp, which is where the scopes, callback URL, IP relaxation and the whole refresh-token/PKCE policy set live. Uses the shared Pattern B detail layout, prefixed by a secret-masking warning panel.
Security warning
Warning panel (rendered before the page body) stating that secrets, consumer keys and credentials are masked and never written to Confluence.
Synced from Salesforce
Attribute table of connected-app metadata.
| Column | Meaning |
|---|---|
| API name | Connected app name in code. |
| Consumer key | Always masked (••••••••) — never written to Confluence. |
| OAuth scopes | Comma-joined OAuth scopes the app requests, or — when the app declares none. |
| Callback URL | OAuth callback URL in code (empty when not available). |
| IP relaxation | IP-restriction relaxation setting. The row is OMITTED entirely when the metadata read carried no OAuth policy, rather than guessing a value. |
| Refresh token policy | How long a refresh token stays valid (e.g. infinite, expires after N days). “Not captured” when the read carried none — never a fabricated “Disabled”. |
| Admin pre-approved | Whether an administrator must pre-authorize users, or any user can self-authorize. |
| PKCE required | Whether the app requires Proof Key for Code Exchange. |
| Consumer secret optional | Whether the app can authorize without its consumer secret. |
| Secret required for refresh token | Whether refreshing a token requires the consumer secret. |
| Refresh token rotation | Whether refresh tokens are rotated on use. |
| Client-credentials flow | Whether the client-credentials OAuth flow is enabled for the app. |
| Contact email | Contact email registered on the connected app, or “Not captured”. |
| Last modified | Absolute date/time of last modification, rendered in the configured site timezone (published pages never use relative phrasing — a snapshot that says “3 days ago” is wrong the day after the sync). |
Description
Info panel with the connected-app description. Appears when: the app has a description.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
External Client Apps
An external client app is Salesforce’s current framework for authorizing an external application — the replacement for connected apps. Salesforce restricts the creation of new connected apps in most orgs from Spring ‘26, so new integrations land here and an org’s API-authorization surface migrates over time. MetaSync documents the same OAuth configuration it documents for a connected app, so the two can be reviewed side by side, and masks all secrets.
- Scope group — Integration
- Extracted via — Four Metadata API types, merged into one record per app.
ExternalClientApplicationsupplies identity (label, description, contact, distribution state) and, via the listing’s file properties, the id and last-modified date — so no SOQL object is required.ExtlClntAppOauthSettingssupplies the requested scopes (as one comma-delimited string, unlike the connected-app list).ExtlClntAppGlobalOauthSettingssupplies the callback URL, PKCE and the secret/rotation flags.ExtlClntAppOauthConfigurablePoliciessupplies the refresh-token policy, IP relaxation and whether an admin must pre-authorize users. Each type is read under its own guard: one unreadable type costs only the fields it sources, and every field it would have supplied publishes as “Not captured” rather than as a measured absence. Uses the shared Pattern B detail layout, prefixed by a secret-masking warning panel.
Security warning
Warning panel (rendered before the page body) stating that secrets, consumer keys and credentials are masked and never written to Confluence.
Synced from Salesforce
Attribute table of external-client-app metadata.
| Column | Meaning |
|---|---|
| API name | External client app developer name in code. |
| Distribution | Local, Packaged, Managed or AutoInstalled — separates an app this org built from one a package installed. “Not captured” when the header read did not return it. This row has no connected-app equivalent. |
| Consumer key | Always masked (••••••••) — never written to Confluence. |
| OAuth scopes | Comma-joined OAuth scopes the app requests, None requested when it declares none, and “Not captured” when the OAuth settings type was not read. |
| Callback URL | OAuth callback URL in code, None configured when the app sets none, and “Not captured” when the global OAuth settings type was not read. |
| IP relaxation | IP-restriction relaxation policy. The row is OMITTED entirely when the policies read carried no value, rather than guessing one. |
| Refresh token policy | How long a refresh token stays valid, with its validity period where the policy defines one (e.g. SpecificLifetime (90 Days)). “Not captured” when the policies type was not read. |
| Admin pre-approved | Whether an administrator must pre-authorize users (AdminApprovedPreAuthorized) or any user can self-authorize (AllSelfAuthorized). An unrecognised policy stays “Not captured” rather than collapsing to self-authorized, which would understate the control. |
| PKCE required | Whether the app requires Proof Key for Code Exchange. |
| Consumer secret optional | Whether the app can authorize without its consumer secret. |
| Secret required for refresh token | Whether refreshing a token requires the consumer secret. |
| Refresh token rotation | Whether refresh tokens are rotated on use. |
| Client-credentials flow | Whether the client-credentials OAuth flow is enabled for the app. |
| Contact email | Contact email registered on the app, or “Not captured”. |
| Last modified | Absolute date/time of last modification from the metadata listing, rendered in the configured site timezone. “Not captured” when the listing carried no timestamp. |
Description
Info panel with the external client app description. Appears when: the app has a description.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Named Credentials
A named credential stores an external endpoint URL plus its authentication so Apex callouts don’t embed credentials. MetaSync documents the endpoint, principal type and auth protocol — masking the stored credentials.
- Scope group — Integration
- Extracted via — jsforce Tooling API
NamedCredential(Id, DeveloperName, MasterLabel, Endpoint, PrincipalType, Protocol, LastModified). The generate-auth-header flag isn’t on the Tooling object, so it defaults to false. Uses the shared Pattern B detail layout, prefixed by a secret-masking warning panel.
Security warning
Warning panel stating secrets/credentials are masked and never written to Confluence.
Synced from Salesforce
Attribute table of named-credential metadata.
| Column | Meaning |
|---|---|
| Developer name | Named-credential API name in code. |
| Endpoint | External endpoint URL in code. |
| Principal type | Authentication principal (NamedUser / PerUser / Anonymous), or “Unknown”. |
| Auth protocol | Auth protocol (Password / OAuth / etc.), or “Unknown”. |
| Credentials | Always masked (••••••••). |
| Auth header | ✓ if an authorization header is generated, else — (defaults to —). |
| Last modified | Absolute date/time of last modification, rendered in the configured site timezone (published pages never use relative phrasing — a snapshot that says “3 days ago” is wrong the day after the sync). |
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Remote Site Settings
A remote site setting allowlists an external URL so Salesforce can make callouts to it. MetaSync documents each site’s URL, active state, and whether protocol (HTTPS) security is relaxed.
- Scope group — Integration
- Extracted via — jsforce Tooling API
RemoteSiteSetting(resolves to RemoteProxy: Id, SiteName, EndpointUrl, IsActive, Description, ProtocolMismatch — mapped to the “disable protocol security” flag). Uses the shared Pattern B detail layout (no secret-masking panel — remote sites hold no secrets).
Synced from Salesforce
Attribute table of remote-site metadata.
| Column | Meaning |
|---|---|
| URL | The allowlisted endpoint URL in code. |
| Active | Green “Active” or grey “Inactive” badge. |
| Disable protocol security | Yellow “Yes” badge when non-HTTPS is allowed (ProtocolMismatch), else ✗ No — a measured false is stated, not left as a dash. |
Description
Info panel with the remote-site description. Appears when: the setting has a description.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Record Types
A record type controls which picklist values, page layout, and business process are available for a subset of records on an object (e.g. a ‘Consumer’ vs ‘Business’ Account). MetaSync documents each record type’s identity, active state, default mapping, picklist value overrides and assigned layouts so admins and auditors can see how records are segmented.
- Scope group — Schema
- Extracted via — SOQL against the standard RecordType object (not Tooling):
SELECT Id, Name, DeveloperName, SobjectType, IsActive, Description FROM RecordType. The standard object is used because it exposes DeveloperName. For the per-record-type detail pages, picklist overrides come from a Metadata APIread('RecordType')and assigned layouts from the ToolingProfileLayoutjunction.
Synced from Salesforce (attributes)
Identity and status of the record type, rendered as a two-column attribute table.
| Column | Meaning |
|---|---|
| Object | API name of the object the record type belongs to, plus the object label. |
| Developer name | The record type’s API/developer name. |
| Active | Green ‘Active’ or grey ‘Inactive’ badge for whether the record type is enabled. |
| Default mapping | Always “Not applicable”. A record type default is assigned PER PROFILE, and the Salesforce describe reports it only for the calling user - the MetaSync integration user - so it is not a fact about your org. Profile pages carry per-profile record-type access. |
| Picklist overrides | Count of picklist fields whose available values this record type restricts, read from the record type’s metadata. A real 0 means no overrides; “Not captured” appears only when the read failed during that sync. See “Not captured” on published pages. |
| Assigned layouts | Count of page layouts assigned to this record type, inverted from the org’s layout-assignment table. A real 0 means no dedicated layout; “Not captured” only when the lookup failed. |
Description
Info panel showing the record type’s description text. Appears when: the record type has a description in Salesforce.
Computed by MetaSync
MetaSync-derived stat row (Picklist overrides, Assigned layouts) plus a ‘Referenced by’ list of the assigned layouts as code chips.
Picklist overrides
Expandable block listing, per picklist field, the values this record type exposes. Appears when: the record type overrides at least one picklist.
| Column | Meaning |
|---|---|
| Picklist field | API name of the picklist field being overridden. |
| Available values | The values this record type makes available for that field, as code chips. The value a NEW record of this type starts with is marked (default); if no chip is marked, that picklist declares no default for this record type. |
“Not captured” footnote
Appears only when one of the counts above could not be measured that sync (its source read failed) — the footnote explains that the marker means the detail wasn’t collected, not that the org has none of it. See “Not captured” on published pages.
Limits & truncation
- Picklist overrides and assigned layouts are extracted per sync (Metadata read + layout-assignment lookup). If either source fails, that field renders “Not captured” for the sync rather than a fabricated 0.
Permission Set Groups
A permission set group bundles several permission sets (and optional muting permission sets) so they can be assigned to users as a single unit. MetaSync documents the group’s status and its member permission sets, which is central to access reviews.
- Scope group — Security & Access
- Extracted via — SOQL against the PermissionSetGroup object with a sub-query on PermissionSetGroupComponents for member permission set IDs. Muting sets come from a second source: neither SOQL object exposes the group→muting link, so MetaSync reads the Metadata API
PermissionSetGrouptype (batched, 10 groups per call) and resolves each muting set’s label fromMutingPermissionSet. Managed-package (namespaced) groups are excluded by default (WHERE NamespacePrefix = null) unless ‘include managed package’ is enabled.
Synced from Salesforce (attributes)
Group identity and membership counts.
| Column | Meaning |
|---|---|
| Developer name | The group’s API/developer name (code chip). |
| Status | Group status text (e.g. Active / Updating). |
| Member permission sets | Every permission set in the group, one per line, each a navigable page link to its own Permission Set: page. |
| Muting permission sets | Every muting permission set the group applies, one per line (labels resolved via MutingPermissionSet, falling back to developer names). — means the group was read and mutes nothing; “Not captured” means the Metadata API read failed for this sync, which is not the same claim. See “Not captured” on published pages. |
Description
Info panel with the group’s description. Appears when: the group has a description.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Limits & truncation
- The muting list needs a Metadata API read the SOQL query cannot replace. When that read fails, every group in the run publishes “Not captured” for muting sets rather than an empty list — an empty list would read as a measured “this group mutes nothing”, which is the opposite of unknown on a page about what a group takes away.
Muting Permission Sets
A muting permission set removes (mutes) specific permissions that would otherwise be granted inside a permission set group. MetaSync documents each muting set and the list of permissions it suppresses so reviewers can see what a group actually withholds.
- Scope group — Security & Access
- Extracted via — Metadata API list + read of the
MutingPermissionSettype (there is no PermissionSet SOQL row for muting sets). Namespaced (managed-package) components are filtered out by default unless ‘include managed package’ is enabled.
Synced from Salesforce (attributes)
Identity and count of muted permissions.
| Column | Meaning |
|---|---|
| Developer name | The muting permission set’s full/developer name (code chip). |
| Muted permissions | Count of user permissions this set mutes. |
| Muted object access | The object permissions this set REVOKES — Salesforce returns these on every read, and a set that mutes object access but published nothing was the defect this row exists to fix. |
| Muted field access | The field-level permissions this set revokes. |
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Custom Settings
Custom settings are List or Hierarchy configuration stores (like custom objects for app configuration) that expose cached settings to Apex/formulas without SOQL. MetaSync documents each setting’s type, protection flag and (when available) its fields.
- Scope group — Always-on with any org-config type (not individually toggleable in the admin UI; runs in the ‘miscCustomSettings’ queue group, gated on any Security & Access / Integration / UI & Layout type being enabled).
- Extracted via — Metadata API list + read of
CustomObject, then filtered to objects whosecustomSettingsTypeis set (Hierarchy or List). Protected is derived fromsharingModel === 'DoNotShare'.
Synced from Salesforce (attributes)
Setting identity, type and protection.
| Column | Meaning |
|---|---|
| Developer name | The custom setting’s API/developer name (code chip). |
| Setting type | ‘Hierarchy’ or ‘List’. |
| Fields | Count of fields on the setting, sourced from the CustomObject metadata blob. |
| Protected | Checkmark when the setting is protected (DoNotShare sharing model), dash otherwise. |
Description
Info panel with the setting’s description. Appears when: the custom setting has a description.
Fields
Field table (Label, API name, Type, Length, Req, optional PII, Description / help), sourced from the CustomObject metadata (not describe(), so it is not affected by field-level security). Appears when: the custom setting has fields.
Limits & truncation
- Custom-setting fields come from the CustomObject metadata blob already retrieved (no extra API calls).
Global Value Sets
A global value set is a reusable picklist value list shared across multiple picklist fields. MetaSync documents its values (active/inactive) and which fields consume it so admins can trace picklist governance.
- Scope group — Always-on with any org-config type (not individually toggleable in the admin UI; runs in the ‘miscCustomSettings’ queue group alongside Custom Settings).
- Extracted via — Metadata API list + read of the
GlobalValueSettype. Each customValue becomes a value row (label, value, isActive). “Consumed by” lists the picklist fields that draw their values from the set. Salesforce offers no direct reverse lookup, so MetaSync derives it by inverting the field index built during the object sync: a field records its global value set from the object metadata blob. Sets whose consumers have not been indexed yet — the first sync after install, or a run in which objects were out of scope — read “Not captured” rather than claiming the set is unused.
Synced from Salesforce (attributes)
Value-set identity and usage counts.
| Column | Meaning |
|---|---|
| API name | The value set’s API name (code chip). |
| Active values | Count of active values in the set. |
| Total values | Count of all values (active + inactive). |
| Consumed by | The picklist fields drawing on this value set — rendered as ‘N field(s)’, with the fields themselves listed under “Referenced by”. A value set genuinely used by nothing says so explicitly. “Not captured” means only that the field index has not been built yet — the first sync, or Objects excluded from the sync scope — so re-sync with Objects enabled rather than checking Setup. See “Not captured” on published pages. |
Description
Info panel with the value set’s description. Appears when: the value set has a description.
Computed by MetaSync
A “Referenced by” list naming, as code chips, every picklist field that draws its values from this set. Salesforce offers no reverse lookup for this, so it is derived by inverting the field index built during the object sync — which is why it sits under the Computed-by-MetaSync divider rather than among the synced attributes, and why the Consumed by count above it reads “Not captured” while that index is unbuilt. Appears when: the field index resolved at least one consuming field.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Values
Table of the value set’s values (first 50). A truncation note is shown when more than 50 exist. Appears when: the value set has at least one value.
| Column | Meaning |
|---|---|
| Label | Display label of the value. |
| Value | API value (code chip). |
| Status | Green ‘Active’ or grey ‘Inactive’ badge. |
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Limits & truncation
- The Values table is capped at 50 rows; remaining values are noted as ‘N additional values omitted.’
- Consuming fields ARE resolved — by inverting the field index built during the object sync, since Salesforce offers no reverse lookup. Consumed by therefore names the picklist fields drawing on the set, and “Referenced by” lists them. It reads “Not captured” only while that index is unbuilt (the first sync after install, or a run with Objects out of scope); re-sync with Objects enabled rather than checking Setup.
Field Sets
A field set is a named, ordered grouping of fields on an object that developers reference in Visualforce/LWC so the displayed columns can be changed by admins without code. MetaSync documents each field set’s displayed and available fields.
- Scope group — Schema
- Extracted via — Metadata API list + read of the
FieldSettype. The fullName is split into object and field-set name; displayedFields and availableFields are captured as field lists.
Synced from Salesforce (attributes)
Field-set identity and field counts.
| Column | Meaning |
|---|---|
| API name | The field set’s API name (code chip). |
| Object | API name of the object the field set belongs to (code chip). |
| Displayed fields | Count of fields shown by the field set. |
| Available fields | Count of fields available to add to the field set. |
Description
Info panel with the field set’s description. Appears when: the field set has a description.
Computed by MetaSync
Stat row (Displayed fields, Available fields) plus a ‘Referenced by’ list of the displayed fields as code chips.
Available fields
Expandable block listing all available (not-currently-displayed) fields as code chips. Appears when: the field set has at least one available field.
List Views
A list view is a saved, filtered, columnised view of records on an object, with a sharing scope (owner / roles / all users). MetaSync documents each list view’s scope, columns, filters and sharing.
- Scope group — Schema
- Extracted via — Metadata API list + read of the
ListViewtype. The fullName is split into object and view name; columns, filters (field/operator/value) and sharing are parsed from the metadata.
Synced from Salesforce (attributes)
List-view identity, scope and counts.
| Column | Meaning |
|---|---|
| API name | The list view’s API name (code chip). |
| Object | API name of the object the list view is on (code chip). |
| Filter scope | Row scope as Salesforce supplied it, e.g. Everything / Mine. There is no default: a view whose metadata carries no filterScope renders “Not captured”, because “Everything” is a claim about which records the view exposes and it was previously published whenever Salesforce returned nothing. |
| Columns | Count of displayed columns. |
| Filters | Count of filter conditions. |
| Shared to | Sharing target, e.g. ‘All Users’ / ‘Roles’ / ‘Owner’. “Not captured” when the Metadata API returned no sharing information — there is no ‘Owner’ fallback. |
Columns
Bullet list of the list view’s column field API names as code chips. Appears when: the list view has at least one column.
Filters
Table of the list view’s filter conditions. Appears when: the list view has at least one filter.
| Column | Meaning |
|---|---|
| Field | Field the filter applies to (code chip). |
| Operator | Comparison operator (e.g. equals, contains). |
| Value | Value compared against. |
Sharing Rules
Sharing rules automatically grant record access to groups of users based on record ownership (owner-based) or field criteria (criteria-based), on top of the org-wide default. MetaSync documents each object’s sharing rules — a core access-review artifact.
- Scope group — Security & Access
- Extracted via — Metadata API list + read of the
SharingRulestype (one component per object). Both sharingCriteriaRules and sharingOwnerRules are flattened into a single rule list, each tagged ‘criteria’ or ‘owner’.
Synced from Salesforce (attributes)
Per-object sharing summary. The page title is ‘Sharing Rules:
| Column | Meaning |
|---|---|
| Object | API name of the object these sharing rules apply to (code chip). |
| Total rules | Count of all sharing rules on the object. |
| Criteria-based | Count of criteria-based rules. |
| Owner-based | Count of owner-based rules. |
Rules
Table of every sharing rule on the object. Appears when: the object has at least one sharing rule.
| Column | Meaning |
|---|---|
| Type | Blue badge: ‘criteria’ or ‘owner’. |
| Name | The rule’s name/label. |
| Shared from | The source set of records/owners being shared, linked to the role, group or queue’s own page where one exists. Reads “Not captured” on criteria-based rules, which define their source by field criteria rather than by an owner set, so the Metadata read supplies no value here — read the Criteria column instead. See “Not captured” on published pages. |
| Shared to | The group/role the access is granted to, linked to its own page where one exists. |
| Access | Access level granted (e.g. Read, Edit). |
| Criteria | The field criteria a criteria-based rule matches on, as a code chip — for example Name notEqual never-a, Name notEqual never-b (filter logic: 1 OR 2). Owner-based rules show —, having no criteria. Column present only when at least one rule on the object carries criteria. |
Limits & truncation
- Criteria are flattened to a single line per rule (field, operator, value, then the rule’s custom filter logic in brackets) rather than a structured table.
Auth Providers
An auth provider configures single sign-on / social login (e.g. Google, Salesforce, OpenID Connect, custom) so external identities can authenticate into the org. MetaSync documents each provider’s type and execution user; secrets are masked.
- Scope group — Integration
- Extracted via — Metadata API list + read of the
AuthProvidertype. The page is prefixed with a secret-warning panel, and secret values are rendered masked.
Synced from Salesforce (attributes)
Provider configuration. The page opens with a secret-warning panel above the header.
| Column | Meaning |
|---|---|
| Provider type | The auth provider type (e.g. Google, OpenIdConnect, Custom). |
| Friendly name | The display name users see on the login page, or “Not captured”. |
| Execution user | The user context the provider runs as (dash when none). |
| OAuth kickoff URL | The kickoff URL (code chip), or “Not captured” — the Metadata read does not carry it. |
| Authorize URL | The provider’s OAuth authorization endpoint (code chip). |
| Token URL | The provider’s token endpoint (code chip). |
| User info URL | The endpoint the org calls to fetch the authenticated user’s profile. |
| Logout URL | Where users are sent on single-logout. |
| Default scopes | The OAuth scopes requested by default when this provider authenticates. |
| ID token issuer | Expected iss value of the OpenID Connect ID token. |
| Requires MFA | Whether the provider requires multi-factor authentication. Renders “Not captured” when unread — never a fabricated “No”. |
| PKCE enabled | Whether Proof Key for Code Exchange is enabled for this provider. |
| Sends access token in header | Whether the access token is sent in the HTTP header rather than the query string. |
| Sends secret in API calls | Whether the consumer secret is included in API calls to the provider. |
| Includes org id in identifier | Whether the org id forms part of the federated user identifier. |
| Secrets | Always rendered masked; the actual consumer secret/key is never synced. |
| Last modified | Reads “Not captured” — the Metadata API read carries no modified date, and stamping the sync time here would publish a fabricated org fact. |
Description
Info panel with the provider’s description. Appears when: the auth provider has a description.
Limits & truncation
- Secret/consumer values are always masked and never stored.
- OAuth kickoff URL is not carried by the Metadata read, so it renders “Not captured” rather than a dash.
Quick Actions
A quick action is a button/action (create a record, update, log a call, launch a Lightning component, etc.) surfaced on records, layouts or the global publisher. MetaSync documents each action’s type, target object and fields.
- Scope group — UI & Layout
- Extracted via — Metadata API list + read of the
QuickActiontype. The fullName is split into target object and action name; layout fields are read from quickActionLayout.quickActionLayoutColumns[].quickActionLayoutItems[].
Synced from Salesforce (attributes)
Action identity, type and target.
| Column | Meaning |
|---|---|
| API name | The quick action’s API name (code chip). |
| Type | Action type (e.g. Create, Update, LogACall, LightningComponent). |
| Target object | The object the action operates on (code chip) or dash for global actions. |
| Fields | Count of fields on the action’s layout. |
| Active | Whether the action is available for use. |
Description
Info panel with the action’s description. Appears when: the quick action has a description.
Custom Tabs
A custom tab exposes a custom object, Visualforce page, Lightning page, or web content as a navigable tab in the app. MetaSync documents what each tab points at, its icon/motif and default visibility.
- Scope group — UI & Layout
- Extracted via — Metadata API list + read of the
CustomTabtype. Associated object (customObject), associated page (flexiPage or page), motif is read from the metadata (visibility is not a tab attribute, so the page shows Not applicable).
Synced from Salesforce (attributes)
Tab identity, target and visibility.
| Column | Meaning |
|---|---|
| API name | The tab’s API name (code chip). |
| Associated object | The custom object the tab exposes (code chip) or dash. |
| Opens | What the tab actually opens, as a code chip, followed by which KIND of thing it is - Lightning page, Visualforce page, Lightning web component, Aura component, Web tab (URL) or Object. Reads ‘None declared’ when the tab names no target of any kind. |
| Motif / icon | The tab’s icon/motif style or dash. |
| Visibility | Always “Not applicable” — tab visibility is a per-profile setting, not an attribute of the tab. Profile and permission-set pages carry it. |
Custom Applications
A custom application (Lightning or Classic app) is a branded collection of tabs and navigation items assigned to profiles. MetaSync documents each app’s nav type, its tabs and which profiles it’s assigned to.
- Scope group — UI & Layout
- Extracted via — Metadata API list + read of the
CustomApplicationtype. Tabs and navType are parsed from the metadata. Assigned profiles are NOT derived — the page shows Not captured, because profileActionOverrides describes action overrides rather than app visibility.
Synced from Salesforce (attributes)
App identity, navigation and assignment counts.
| Column | Meaning |
|---|---|
| API name | The app’s API name (code chip). |
| Nav type | Navigation style (Standard / Console). |
| Tabs | Count of tabs in the app. |
| Assigned profiles | Always “Not captured” — see How it’s extracted above; profileActionOverrides is not app visibility, so no count is derived. |
| Last modified | Always “Not captured” — the CustomApplication Metadata API read carries no modified date, and stamping the sync time here would publish a fabricated org fact. |
Description
Info panel with the app’s description. Appears when: the app has a description.
Tabs
Expandable block listing the app’s tabs as code chips. Appears when: the app has at least one tab.
Custom Metadata Types
A custom metadata type (__mdt) is a deployable, records-as-configuration container (like custom settings but packageable and queryable in Apex without limits). MetaSync documents each type, its protection flag and (when available) its fields.
- Scope group — Schema
- Extracted via — Tooling API SOQL against
EntityDefinitionwhere QualifiedApiName ends in__mdt(a LIKE ‘%mdt’ pre-filter plus an endsWith check). Description isn’t a column on EntityDefinition, so it’s left blank.
Synced from Salesforce (attributes)
Type identity, field/record counts and protection.
| Column | Meaning |
|---|---|
| Developer name | The custom metadata type’s developer name (code chip). |
| Fields | Count of custom fields, read from the Tooling FieldDefinition object for each of the first 100 types. A type past that cap, or whose per-type read failed, reads “Not captured” — not 0. |
| Records | Count of custom metadata records, read from the type itself (with a COUNT() for the true total when the 50-row list is capped). Same “Not captured” rule as Fields. |
| Protected | Always “Not captured” — the only CMDT query is against EntityDefinition, which carries no protection column, so this was never measured. Publishing a dash would assert the type is unprotected. |
Description
Info panel with the type’s description. Appears when: a description is available (never populated via this source).
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Fields
Field table (Label, API name, Type, Length, Req, optional PII, Description / help), sourced from the Tooling FieldDefinition object. Type and the derived encryption flag both come from DataType: a row that carries none renders “Not captured” for its type and is counted as neither encrypted nor unencrypted, so it cannot inflate the Data Security Posture exposure tallies. See “Not captured” on published pages. Appears when: the type has custom fields.
Records
Expandable table of the type’s records (custom metadata is deployable configuration, not business data). Record count reflects the true total via a COUNT() when the row cap is hit. Appears when: the type has records.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Limits & truncation
- Field/record detail is captured for the first 100 custom metadata types per run; beyond that, Fields and Records render “Not captured” rather than a fabricated 0. See “Not captured” on published pages.
- Records table: first 50 rows and 15 custom columns per type, cells truncated at 100 characters — the true record count is still shown.
Report Types
A (custom) report type defines which objects and fields are available when building a report — the base object, related objects and the pool of selectable columns. MetaSync documents each report type’s base object and available-field count.
- Scope group — Analytics & Data
- Extracted via — Metadata API list + read of the
ReportTypetype (Tooling SOQL does not support CustomReportType). Available field count is summed across the report type’s sections’ columns.
Synced from Salesforce (attributes)
Report-type identity and field availability.
| Column | Meaning |
|---|---|
| Developer name | The report type’s developer name (code chip). |
| Base object | The primary object of the report type (code chip). |
| Related objects | Comma-joined related objects, or dash (not extracted, normally dash). |
| Available fields | Total count of selectable columns across all sections. |
| Deployed | Tri-state: checkmark when deployed, dash for a measured “In Development”, and “Not captured” when the Metadata read omitted the flag entirely — an unmeasured one must not borrow the dash. |
Description
Info panel with the report type’s description. Appears when: the report type has a description.
Limits & truncation
- Related objects are not extracted (rendered as a dash).
- No LastModifiedDate is available from the Metadata API read, and the extractor does not substitute the sync time: the Last modified row is omitted from the attribute table altogether rather than showing an invented date.
Page Layouts
A page layout arranges fields, sections and related lists on a record’s detail/edit page and is assigned to profile + record-type combinations. MetaSync documents each layout’s sections, fields, related lists and assignments.
- Scope group — UI & Layout
- Extracted via — Metadata API list + read of the
Layouttype. FullNames are URL-decoded for the page title; sections/fields (with required & read-only behavior) and related lists are parsed. Last-modified dates are joined from a ToolingLayoutquery, and profile / record-type assignments are inverted from the ToolingProfileLayoutjunction. Salesforce also holds layout-like records that only the Tooling API exposes — approval-process page layouts and system layouts on non-customizable objects. These do not appear in Object Manager’s Page Layouts either, and MetaSync does not read or count them: the published total is the Metadata API surface, exactly.
Synced from Salesforce (attributes)
Layout identity and structural counts.
| Column | Meaning |
|---|---|
| Object | API name of the object the layout belongs to (code chip). |
| Sections | Count of layout sections. |
| Field placements | Count of field PLACEMENTS across all sections — a field placed in two sections counts twice. This is a different quantity from the object page’s Total fields, which counts distinct schema fields, so the two pages will disagree for any layout that repeats a field. |
| Related lists | Count of related lists on the layout. |
| Assigned profiles | Count of profiles the layout is assigned to, inverted from the org’s profile-layout assignment table. A real 0 means an unassigned layout; “Not captured” appears only when that lookup failed during the sync. See “Not captured” on published pages. |
| Assigned record types | Count of record types the layout is assigned to, from the same source — a real 0 when none, “Not captured” only on lookup failure. |
| Last modified | The layout’s last-modified date, joined from a Tooling query (the Metadata read itself carries none). “Not captured” when the join failed. |
Sections
One sub-heading per layout section (‘
| Column | Meaning |
|---|---|
| Field | Field API name on the layout (code chip). |
| Required | Checkmark when the field is required on the layout, dash otherwise. |
| Read only | Checkmark when the field is read-only on the layout, dash otherwise. |
Assigned profiles
Expandable block listing every assigned profile as code chips (no cap). Appears when: the layout has at least one assigned profile.
Assigned record types
Expandable block listing assigned record types as code chips. Appears when: the layout has at least one assigned record type.
Related lists
Expandable block listing related lists as code chips. Appears when: the layout has at least one related list.
“Not captured” footnote
Appears only when an attribute above could not be measured that sync — it explains that the marker means the detail wasn’t collected, not that the layout has no assignments. See “Not captured” on published pages.
Limits & truncation
- Assignments and the last-modified date come from per-sync Tooling lookups. If a lookup fails, the affected rows render “Not captured” for that sync rather than a fabricated 0 — the real values return on the next successful sync.
- A layout the integration user cannot read has no page to caveat, so the Layouts index discloses it: a panel reading “N layouts not captured — no access” names each excluded layout. A layout that was readable and no longer is keeps its page, bannered “Not captured — no access” above the stale content. See “Not captured” on published pages.
Lightning Pages
A Lightning page (FlexiPage) is a drag-and-drop page composed of Lightning components arranged in regions — used for record pages, app pages and home pages. MetaSync documents each page’s type and its component composition.
- Scope group — UI & Layout
- Extracted via — Metadata API list + read of the
FlexiPagetype. Components are flattened from each region’s itemInstances (component type + region), including each component’scomponentInstancePropertiesas name/value configuration (values longer than 80 characters are elided). Last-modified dates are joined from a ToolingFlexiPagequery. App assignment lives in FlexiPage’s separate assignment metadata, which MetaSync does not read.
Synced from Salesforce (attributes)
Page identity, type and component count.
| Column | Meaning |
|---|---|
| Developer name | The page’s developer name (code chip). |
| Page type | FlexiPage type (e.g. AppPage / RecordPage / HomePage), exactly as the Metadata read returns it. A page whose read carries no type reads “Not captured” rather than a plausible AppPage, which would classify the page for the reader off no measurement; the Lightning Pages index leaves that page’s subtype chip blank for the same reason. See “Not captured” on published pages. |
| Components | Count of component instances on the page. |
| Assigned apps | Comma-joined assigned apps — “Not captured”, because FlexiPage assignment metadata isn’t read. It does not mean the page is assigned to no app. See “Not captured” on published pages. |
| Last modified | The page’s last-modified date, joined from a Tooling query (the Metadata read itself carries none). “Not captured” when the join failed. |
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Components
Expandable block with a table of the page’s components. Appears when: the page has at least one component.
| Column | Meaning |
|---|---|
| Type | Component type / name (code chip). |
| Region | The page region the component sits in. |
| Configuration | The component’s configured properties as name = value pairs (first 6, then “+N more”). This column only appears when at least one component on the page carries properties. |
“Not captured” footnote
Appears whenever a section on the page emitted the marker, explaining that it means MetaSync doesn’t collect the detail — not that the org has none of it. On this type it is Assigned apps alone that carries the marker on every page: app assignment lives in FlexiPage’s separate assignment metadata, which MetaSync does not read. Last modified is captured, via the Tooling FlexiPage join, and shows the marker only on a page whose join came back empty. See “Not captured” on published pages.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Limits & truncation
- Assigned apps are not populated by the extractor and render “Not captured” rather than a dash. Check Setup → Lightning App Builder → the page → Activation.
- Component configuration: first 6 properties per component, then “+N more”; each value is truncated at 80 characters.
- Pages the integration user cannot read are disclosed on the Lightning Pages index — a panel reading “N Lightning pages not captured — no access”, naming each — rather than silently lowering the total. See “Not captured” on published pages.
Assignment Rules
Assignment rules automatically route new Leads or Cases to a user or queue based on ordered criteria. MetaSync documents each rule’s object, active state and its ordered rule entries (criteria → assignee).
- Scope group — Automation
- Extracted via — Metadata API list + read of the
AssignmentRulestype (one component per object, containing multiple rules). Each rule entry’s criteria items are joined into a criteria string; the assignee is the assignedTo user or queue.
Synced from Salesforce (attributes)
Rule identity and state, rendered as an automation (Pattern C) page.
| Column | Meaning |
|---|---|
| Object | API name of the object the rule applies to (code chip). |
| Active | Checkmark when the rule is active, dash otherwise. |
| Entries | Count of rule entries in this rule. |
| Last modified | The real org date, joined from the standard AssignmentRule object by object + rule name (the Metadata API read carries none). The extractor does not stamp sync time; when that join query fails the row is omitted entirely rather than showing an invented date. Rendered absolute, in the configured site timezone. |
Logic steps
A table of the rule’s entries, sorted by order, in the Pattern C logic section. Columns are Order, Criteria and Assign to, plus a fourth Notify template column when at least one entry names an email template (the template links to its own page, and (notify CC) is appended where the entry copies its CC recipients). Each Criteria cell lists the entry’s field/operator/value conditions one per line, numbered and followed by an italic Filter logic: line when the entry defines custom filter logic. An entry with no conditions reads Always matches (no criteria). Entries with no structured conditions captured fall back to the joined criteria string. A rule with no entries at all reads No rule entries.
Limits & truncation
- Rule sets the integration user cannot read are disclosed on the Assignment Rules index — a panel reading “N assignment rules not captured — no access”, naming each — rather than silently lowering the total. See “Not captured” on published pages.
Lightning Web Components
A Lightning Web Component (LWC) bundle is a modern, standards-based UI component (HTML/JS/CSS) used across record pages, apps and communities. MetaSync documents each bundle’s identity, API version, last-modified metadata, the Apex/objects/fields it references, and its source files.
- Scope group — Automation
- Extracted via — Tooling API SOQL against
LightningComponentBundlefor identity, plusLightningComponentResourcefor the bundle’s.js,.htmland.csssource files. Apex/object/field references are parsed from the JS@salesforce/...imports. Managed-package bundles are excluded by default unless ‘include managed package’ is enabled.
Synced from Salesforce (attributes)
Bundle identity and modification metadata.
| Column | Meaning |
|---|---|
| Developer name | The bundle’s developer name (code chip). |
| API version | The bundle’s API version, or dash. |
| Exposed in builders | ✓ Yes or ✗ No, from isExposed in the bundle’s .js-meta.xml — whether an admin can drop this component onto a page in Lightning App Builder. |
| Targets | The builder surfaces the component declares (lightning__RecordPage, lightning__AppPage, …) as code chips. A component that was read and declares none shows a dash; “Not captured” appears where the .js-meta.xml was withheld, which is the case for managed-package bundles. See “Not captured” on published pages. |
| Last modified | Absolute date/time of last modification as reported by the org, rendered in the configured site timezone — published pages never use relative phrasing. |
| Modified by | Name of the last user to modify the bundle, or dash. |
Description
Info panel with the bundle’s description. Appears when: the bundle has a description.
Source (per file)
A collapsed source block per bundle file — the .html template, the .js controller and the .css — each labelled with its filename. A file longer than 6,000 characters states “Showing 6,000 of N characters” rather than truncating silently. Appears when: the bundle’s source files were captured.
Aura Components
An Aura component bundle is a legacy Lightning UI component (the framework that predates LWC). MetaSync documents each bundle’s identity, API version, last-modified metadata and all of its definition files.
- Scope group — Automation
- Extracted via — Tooling API SOQL against
AuraDefinitionBundlefor identity, plusAuraDefinitionfor every definition in the bundle — the component/application markup and its controller, helper, renderer, style, design, SVG and documentation. Managed-package bundles are excluded by default unless ‘include managed package’ is enabled.
Synced from Salesforce (attributes)
Bundle identity and modification metadata.
| Column | Meaning |
|---|---|
| Developer name | The bundle’s developer name (code chip). |
| API version | The bundle’s API version, or dash. |
| Last modified | Absolute date/time of last modification as reported by the org, rendered in the configured site timezone — published pages never use relative phrasing. |
| Modified by | Name of the last user to modify the bundle, or dash. |
Description
Info panel with the bundle’s description. Appears when: the bundle has a description.
Source (per file)
A collapsed source block per definition — the .cmp/.app markup plus the controller, helper, renderer, style, design, SVG and documentation — each labelled with its filename. A file longer than 6,000 characters states “Showing 6,000 of N characters”. Appears when: the bundle’s definitions were captured.
Email Templates
An email template is a reusable, mergeable email body used by automation, mass email and user actions. MetaSync documents each template’s subject, type, encoding, active state and modification metadata.
- Scope group — UI & Layout
- Extracted via — SOQL against the EmailTemplate object (Id, Name, DeveloperName, Subject, Description, TemplateType, Encoding, IsActive, LastModifiedDate, LastModifiedBy.Name).
Synced from Salesforce (attributes)
Template identity, format and state.
| Column | Meaning |
|---|---|
| Developer name | The template’s developer name (code chip). |
| Subject | The email subject line, or dash. |
| Type | Template type (e.g. text, HTML, custom, visualforce). |
| Encoding | Character encoding of the template. |
| Folder | The folder holding the template, or “Unfiled / private” when it sits outside one. |
| Body format | HTML or Plain text, derived from which body Salesforce returned; — when no body was captured at all. |
| Active | Green ‘Active’ or grey ‘Inactive’ badge, decided by a boolean IsActive. A record whose IsActive comes back as neither true nor false reads “Not captured”: on a template, guessing in either direction states whether something is in service. The Email Templates index counts only measured-true templates in its “Active” stat, and shows a grey Not captured badge in the status column for the rest. See “Not captured” on published pages. |
| Last modified | Absolute date/time of last modification as reported by the org, rendered in the configured site timezone — published pages never use relative phrasing. |
| Modified by | Name of the last user to modify the template, or dash. |
Description
Info panel with the template’s description. Appears when: the template has a description.
Body preview
A collapsed block holding the template’s body text. The heading says “— plain text from HTML” when the preview is the text rendition of an HTML template, and “(truncated)” when the body exceeded the preview cap, so a short preview is never mistaken for a short template. Appears when: a body was captured for the template.
Public Groups
A public group is a named set of users, roles, roles-and-subordinates and other groups used to simplify sharing and access grants. MetaSync documents each group’s membership — an access-review essential.
- Scope group — Security & Access
- Extracted via — SOQL against the Group object where
Type = 'Regular', with a GroupMembers sub-query for the member count. Member display names are resolved via a separate members query (users resolved by name; nested groups/roles prefixed ‘Group:’/’Role:’).
Synced from Salesforce (attributes)
Group identity and member count.
| Column | Meaning |
|---|---|
| Developer name | The group’s developer name (code chip). |
| Members | Total member count of the group. |
Members
Always rendered. With names captured, a bullet list of member display names (users as-is, nested groups as ‘Group: X’ and roles as ‘Role: X’, both page-linked), plus “N additional member(s) omitted.” when the group’s real total exceeds the captured list. A genuinely empty group says “No members.” — unlike a Queue, a public group does carry a real member count, so that zero is measured and can be trusted.
Limits & truncation
- Member lists are capped at 100 per group; when the group has more, a ‘N additional member(s) omitted.’ note is shown.
Queues
A queue is a holding area that owns records (Cases, Leads, custom objects) and has members who can take ownership. MetaSync documents each queue’s supported objects and its members.
- Scope group — Security & Access
- Extracted via — SOQL against the Group object where
Type = 'Queue', including aGroupMemberssub-query for the true member count (the same way public groups are counted); member display names are resolved the same way as public groups. Supported objects come from a bulkQueueSobjectquery (QueueId → SobjectType).
Synced from Salesforce (attributes)
Queue identity, supported-object count and member count.
| Column | Meaning |
|---|---|
| Developer name | The queue’s developer name (code chip). |
| Supported objects | Count of object types this queue can own. |
| Members | Total member count from the GroupMembers sub-query — a real 0 means the queue genuinely has no members. “Not captured” appears only on pages published before this count was collected. See “Not captured” on published pages. |
Supported objects
Bullet list of the object API names the queue can own, as code chips. Appears when: the queue supports at least one object.
Members
Always rendered, so “no members” is distinguishable from “not measured”. A bullet list of member display names (users as plain text; nested groups and roles as ‘Group: X’ / ‘Role: X’, page-linked); when the true count exceeds the resolved list, the page notes how many additional members were omitted. A queue with a measured count of 0 says “No members.”
“Not captured” footnote
One-line explanation that the marker means the member count could not be measured — not that the queue is empty. See “Not captured” on published pages. Appears when: the member count could not be measured; when it was, the Members section states the real count instead.
Change history
Table of tracked changes. MetaSync records per-page history for Objects, Flows and Validation Rules; every other type publishes a note saying history is not tracked for it.
Team annotations
Editable Owner / Compliance / Last reviewed / Notes table preserved across syncs.
Limits & truncation
- Member name lists are capped at 100 per queue; the true member count is not capped, and the page states how many names were omitted.
- Supported objects are omitted if the QueueSobject query fails.
Custom Labels
A custom label is a named text value that Apex, Visualforce, Lightning components and Flows reference instead of hard-coding a string — the standard way to keep user-facing text translatable and editable without a deployment. MetaSync documents each label’s value, its categories and every translation defined for it.
- Scope group — Analytics & Data
- Extracted via — Tooling SOQL against ExternalString (
Name,Value,Category,Language,IsProtected,MasterLabel). Translations come from a second Tooling query against ExternalStringLocalization (one row per label × language). Orgs without Translation Workbench reject that query — MetaSync catches it and publishes the labels with no translations rather than failing the type.
Synced from Salesforce (attributes)
The label’s value and its localisation metadata.
| Column | Meaning |
|---|---|
| Value | The label’s text in its master language. |
| Language | The master language code (e.g. en_US) exactly as ExternalString.Language returns it. A row with no Language reads “Not captured” rather than a plausible en_US, which would assert the org’s default locale where nothing was measured. See “Not captured” on published pages. |
| Categories | The label’s Category field, used for grouping in Setup. An em dash when unset. |
| Protected | Check mark when the label is protected (a managed-package label not visible to subscriber code). |
| Translations | How many translated values were captured for this label. A measured 0 means none were found — which, in an org without Translation Workbench, means the translation query was unavailable rather than that no translations exist. |
Translations
An expandable table of language code → translated value, sorted by language code. Appears when: at least one translation was captured for the label.
Limits & truncation
- Translations require Translation Workbench. Where it is disabled the ExternalStringLocalization query fails, and every label publishes with a translation count of 0.
- Custom Labels are not diffed by Change Impact — see Change Impact for the covered types.